/* eslint-disable @akinon/projectzero/client-url */ import Settings from 'settings'; const API_URL = Settings.commerceUrl; export const account = { order: '/users/orders/', orderId: (id: string | string[]) => `/users/orders/${id}/`, cancelOrder: (id: string) => `/orders/${id}/cancel/`, bulkCancellationRequest: '/users/orders/bulk_cancellation_requests/', cancellationReasons: '/users/orders/cancellation_reasons/', updatePassword: '/users/password/change/', updateEmail: '/users/email-change/', updateProfile: '/users/profile/', getContactSubjects: '/users/contact-us-subjects/', getOrders: ({ page, limit, createdDate, endDate, shipping_option_slug, shipping_option_operator = '=', filterType, filterValue, currency }: { page?: number; limit?: number; createdDate?: string; endDate?: string; shipping_option_slug?: string; shipping_option_operator?: string; filterType?: string; filterValue?: string; currency?: string; }) => `/users/orders/?page=${page || 1}&limit=${limit || 12}${ createdDate ? `&created_date__gte=${createdDate}` : '' }${endDate ? `&created_date__lte=${endDate}` : ''}${ shipping_option_slug ? `&shipping_option_slug${shipping_option_operator}${shipping_option_slug}` : '' }${currency ? `¤cy=${currency}` : ''} ${filterType && filterValue ? `&${filterType}=${filterValue}` : ''}`, getOldOrders: ({ page, limit }: { page?: number; limit?: number }) => `/users/old-orders/?page=${page || 1}&limit=${limit || 12}}`, getQuotations: (page?: number, status?: string, limit?: number) => `/b2b/my-quotations/?page=${page || 1}` + (status ? `&status=${status}` : '') + (limit ? `&limit=${limit}` : ''), sendContact: '/users/contact-us', passwordReset: (slug: string) => `/users/api-reset/${slug}`, anonymize: '/users/anonymize/', loyaltyBalance: '/account/loyalty-account-balance/', loyaltyTransactions: '/account/loyalty/' }; export const address = { base: '/address/', countries: '/address/country/', getAddresses: '/address/detailed/', getCities: (country: string) => `/address/city/?country=${country}`, getTownships: (city: string) => `/address/township/?city=${city}`, getDistricts: (township: string) => `/address/district/?township=${township}`, getRetailStore: '/address/city/?retailstore__isnull=false', getRetailStoreCities: (country: string) => `/address/city/?retailstore__isnull=false&country=${country}`, getRetailStoreTownships: (city: string) => `/address/township/?retailstore__isnull=false&city=${city}`, editAddress: (pk: number) => `/address/${pk}/`, removeAddress: (id: number) => `/address/${id}/`, setDefaultAddress: (pk: number) => `/address/${pk}/` }; export const basket = { getBasket: '/baskets/basket/', getMiniBasket: '/baskets/basket/mini/', getBasketDetail: (namespace: string) => `/baskets/basket/${namespace}/`, getMiniBasketDetail: (namespace: string) => `/baskets/basket/${namespace}/mini/`, getAllBaskets: '/baskets/basket-list/', removeBasket: (pk: number) => `/baskets/basket-list/${pk}/`, selectMainBasket: (pk: number) => `/baskets/basket-list/id/${pk}/main/`, selectNameSpaceMainBasket: (namespace: string) => `/baskets/basket-list/ns/${namespace}/main/` }; export const category = { list: '/list/', getCategoryByPk: (pk: number) => `/category/${pk}/`, getCategoryBySlug: (slug: string) => `/${slug}/`, getSpecialPageByPk: (pk: number) => `/special-page/${pk}/` }; export const checkout = { get3dRedirectForm: '/orders/redirect-three-d/', fetchCheckout: '/orders/checkout/', fetchCheckoutResult: (token: string) => `/orders/completed/${token}/?format=json`, getContract: (slug: string) => `/orders/contract/?contract_name=${slug}`, completeCreditCardPayment: '/orders/checkout/?page=CreditCardConfirmationPage', completeFundsTransfer: '/orders/checkout/?page=FundsTransferPage', guestLogin: '/orders/checkout/?page=IndexPage', setDeliveryOption: '/orders/checkout/?page=DeliveryOptionSelectionPage', setAddresses: '/orders/checkout/?page=AddressSelectionPage', setShippingOption: '/orders/checkout/?page=ShippingOptionSelectionPage', setDataSourceShippingOption: '/orders/checkout/?page=DataSourceShippingOptionSelectionPage', setPaymentOption: '/orders/checkout/?page=PaymentOptionSelectionPage', setWalletSelectionPage: '/orders/checkout/?page=WalletSelectionPage', setWalletPaymentPage: '/orders/checkout/?page=WalletPaymentPage', setWalletCompletePage: '/orders/checkout/?page=WalletCompletePage', setBinNumber: '/orders/checkout/?page=BinNumberPage', setMasterpassBinNumber: '/orders/checkout/?page=MasterpassBinNumberPage', getMasterpassOrderNo: '/orders/checkout/?page=MasterpassOrderNoPage', completeMasterpassPayment: '/orders/checkout/?page=MasterpassCompletePage', setInstallmentOption: '/orders/checkout/?page=InstallmentSelectionPage', setMasterPassInstallmentOption: '/orders/checkout/?page=MasterpassInstallmentPage', setFundsTransferOption: '/orders/checkout/?page=FundsTransferChoicePage', setCreditPaymentOption: '/orders/checkout/?page=CreditPaymentSelectionPage', confirmationCreditPayment: '/orders/checkout/?page=CreditPaymentConfirmationPage', getCheckoutProviders: '/orders/checkout-provider-list/', getCheckoutProvidersIndex: '/orders/checkout/?page=CheckoutProviderIndexPage', setCheckoutProvider: '/orders/checkout/?page=CheckoutProviderSelectionPage', completeRedirectionPayment: '/orders/checkout/?page=RedirectionPaymentSelectedPage', confirmationPaymentSelect: '/orders/checkout/?page=ConfirmationPaymentSelectedPage', confirmationQuery: '/orders/checkout/?page=ConfirmationPaymentQueryPage', confirmationComplete: '/orders/checkout/?page=ConfirmationPaymentCompletePage', completeLoyaltyPayment: '/orders/checkout/?page=LoyaltyPaymentSelectedPage', loyaltyMoneyUsage: '/orders/checkout/?page=LoyaltyMoneyUsagePage', setOrderNote: '/orders/checkout/?page=OrderNotePage', couponSelectionPage: '/orders/checkout/?page=CouponSelectionPage', setAttributeBasedShippingOption: '/orders/checkout/?page=AttributeBasedShippingOptionSelectionPage', deliveryBagsPage: '/orders/checkout/?page=DeliveryBagsPage', setOrderSelectionPage: '/orders/checkout/?page=OrderSelectionPage', loyaltyCardPage: '/orders/checkout/?page=LoyaltyCardPage', sendSmsPage: '/orders/checkout/?page=SendSmsPage', verifySmsPage: '/orders/checkout/?page=VerifySmsPage', saveSampleProducts: '/orders/checkout/?page=SampleProductPage' }; export const flatpage = { getFlatPageByPk: (pk: number) => `/shop-flat-page/${pk}/` }; export const landingpage = { getLandingPageByPk: (pk: number) => `/landing-page/${pk}/` }; export const misc = { autocomplete: '/autocomplete/', stores: '/address/retail_store/', menu: '/misc/menus/generate/', prettyUrl: (pathname: string) => `/misc/pretty-url${pathname}/`, prettyUrls: (pathname: string) => `/pretty_urls/?new_path__exact=${pathname}`, emailSubscription: '/email-subscription/', menus: (depthHeight: number, parent?: string) => `/menus/generate/?depth_height=${depthHeight}${ parent ? `&parent=${parent}` : '' }`, cmsSeo: (slug: string | string[]) => `/cms/seo/?url=${slug ? slug : '/'}`, setCurrency: '/users/activate-currency/', bukalemunImageUrl: (params: string) => `/bukalemun/?${params}` }; export const product = { category: (productId: number) => `/product/${productId}/category/`, installments: (productId: number) => `/payments/cards/product/${productId}/`, getProductByPk: (pk: number) => `/product/${pk}/`, getGroupProductByPk: (pk: number) => `/group-product/${pk}/`, getRetailStoreStock: (productPk: string, queryString: string) => `/retail_store_stock/${productPk}/?${queryString}`, addProduct: '/baskets/basket/', slug: (slug: string) => `/${slug}/`, categoryUrl: (pk: number) => `/products/${pk}/category_nodes/?limit=1`, breadcrumbUrl: (menuitemmodel: string) => `/menus/generate_breadcrumb/?item=${menuitemmodel}&generator_name=menu_item`, bundleProduct: (productPk: string, queryString: string) => `/bundle-product/${productPk}/?${queryString}` }; export const wishlist = { getFavorites: ({ page, limit }: { page?: number; limit?: number }) => `/wishlists/favourite-products/?limit=${limit || 12}&page=${page || 1}`, addFavorite: '/wishlists/favourite-products/', removeFavorite: (favPk: number) => `/wishlists/favourite-products/${favPk}/`, addStockAlert: '/wishlists/product-alerts/', getStockAlerts: ({ page = 1, limit = 12 }: { page?: number; limit?: number; }) => `/wishlists/product-alerts/?limit=${limit}&page=${page}`, deleteStockAlert: (pk: number) => `/wishlists/product-alerts/${pk}/`, setCollection: () => '/wishlists/user-collections/', setCollectionItems: '/wishlists/user-collection-items/', getCollections: (search?: string, product_id?: number) => `/wishlists/user-collections/?search=${search ? search : ''}&product_id=${ product_id ? product_id : '' }`, deleteCollection: (pk: number) => `/wishlists/user-collections/${pk}/`, deleteCollectionItem: (pk: number) => `/wishlists/user-collection-items/${pk}/`, editCollection: (pk: number) => `/wishlists/user-collections/${pk}/` }; export const user = { currentUser: '/current_user/', login: '/users/login/', otpLogin: '/users/otp-login/', register: '/users/registration/', logout: '/users/logout', captcha: '/users/pz-captcha/', profiles: '/users/profile/', forgotPassword: '/users/password/reset/', changeEmailVerification: (token: string) => `/users/email-set-primary/${token}/`, confirmEmailVerification: (token: string) => `/users/registration/account-confirm-email/${token}/`, csrfToken: '/csrf_token/', anonymousOrderTracking: '/users/orders/anonymous', loyaltyRegister: '/users/register-with-loyalty/' }; export const b2b = { basket: '/b2b/basket/', saveBasket: '/b2b/basket/save/', draftBaskets: '/b2b/basket/drafts/', divisions: '/b2b/my-divisions/', myQuotations: '/b2b/my-quotations/', loadBasket: (id) => `/b2b/basket/${id}/load/`, statusBasket: (cacheKey) => `/b2b/basket/?status_cache_key=${cacheKey}`, basketExport: (queryString) => `/b2b/basket/?upload=true&${queryString}`, basketImport: '/b2b/basket/bulk-import/' }; export const widgets = { getWidget: (slug: string) => `/widgets/${slug}/`, getWidgetSchema: (widgetSlug: string) => `/widgets/${widgetSlug}/schema/`, getCollectionWidget: (slug: string) => `/product_collection_widgets/${slug}/` }; export const form = { getForm: (pk: number) => `/forms/${pk}/generate` }; const URLS = { account, address, basket, category, checkout, flatpage, misc, product, wishlist, user, widgets, form }; const UrlProxyHandler = { // eslint-disable-next-line @typescript-eslint/no-unused-vars get(target, prop, receiver) { if (typeof target[prop] === 'function') { return new Proxy(target[prop], { apply(target, thisArgs, argumentList) { return `${API_URL}${target(...argumentList)}`; } }); } return `${API_URL}${target[prop]}`; } }; Object.keys(URLS).forEach((key) => { URLS[key] = new Proxy(URLS[key], UrlProxyHandler); }); export { URLS };