@akinon/next 1.43.0-rc.6 → 1.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/CHANGELOG.md +2 -98
  2. package/api/client.ts +9 -33
  3. package/assets/styles/index.scss +26 -50
  4. package/components/input.tsx +7 -21
  5. package/components/link.tsx +13 -17
  6. package/components/pagination.tsx +2 -1
  7. package/components/price.tsx +4 -11
  8. package/components/selected-payment-option-view.tsx +38 -26
  9. package/data/client/account.ts +9 -10
  10. package/data/client/address.ts +8 -32
  11. package/data/client/api.ts +1 -1
  12. package/data/client/checkout.ts +3 -26
  13. package/data/server/category.ts +2 -2
  14. package/data/server/list.ts +2 -2
  15. package/data/server/product.ts +13 -15
  16. package/data/server/special-page.ts +2 -2
  17. package/data/urls.ts +0 -2
  18. package/hocs/server/with-segment-defaults.tsx +2 -2
  19. package/hooks/index.ts +1 -2
  20. package/hooks/use-payment-options.ts +1 -2
  21. package/lib/cache.ts +6 -18
  22. package/middlewares/default.ts +2 -41
  23. package/middlewares/pretty-url.ts +0 -4
  24. package/middlewares/url-redirection.ts +0 -4
  25. package/package.json +4 -5
  26. package/plugins.d.ts +0 -1
  27. package/redux/middlewares/checkout.ts +9 -40
  28. package/redux/reducers/checkout.ts +3 -9
  29. package/redux/reducers/config.ts +0 -2
  30. package/types/commerce/account.ts +0 -1
  31. package/types/commerce/address.ts +1 -1
  32. package/types/commerce/checkout.ts +0 -18
  33. package/types/commerce/misc.ts +0 -2
  34. package/types/commerce/order.ts +0 -12
  35. package/types/index.ts +2 -28
  36. package/utils/app-fetch.ts +1 -1
  37. package/utils/generate-commerce-search-params.ts +2 -6
  38. package/utils/index.ts +6 -27
  39. package/utils/server-translation.ts +1 -5
  40. package/with-pz-config.js +1 -11
  41. package/assets/styles/index.css +0 -49
  42. package/assets/styles/index.css.map +0 -1
  43. package/hooks/use-message-listener.ts +0 -24
  44. package/lib/cache-handler.mjs +0 -33
  45. package/routes/pretty-url.tsx +0 -194
  46. package/utils/redirection-iframe.ts +0 -85
package/CHANGELOG.md CHANGED
@@ -1,106 +1,10 @@
1
1
  # @akinon/next
2
2
 
3
- ## 1.43.0-rc.6
4
-
5
- ### Minor Changes
6
-
7
- - 90282b5: ZERO-2729: Audit packages for yarn and npm and also update app-template
8
- - 572d2e8: ZERO-2667: Add iframe support for redirection payment methods
9
- - a4c8d6a: ZERO-2663: Fix the image url for gif and svgs and return them without options
10
- - fda5b92: ZERO-2725: fix invalid import
11
- - 2d9b2b2: ZERO-2816: Add segment to headers
12
- - c53ea3e: ZERO-2609: Reset additional form fields when selectedFormType is not company
13
- - 8d9ac9a: ZERO-2794: Add field to order type
14
- - e9541a1: ZERO-2816: Add headers to url
15
- - c53ef7b: ZERO-2668: The Link component has been updated to improve the logic for handling href values. Previously, if the href was not a string or started with 'http', it would return the href as is. Now, if the href is not provided, it will default to '#' to prevent any potential errors. Additionally, if the href is a string and does not start with 'http', it will be formatted with the locale and pathname, based on the localeUrlStrategy and defaultLocaleValue. This ensures that the correct href is generated based on the localization settings.
16
- - 64699d3: ZERO-2761: Fix invalid import for plugin module
17
- - 0d3a913: ZERO-2725: Update decimal scale in Price component
18
- - 1448a96: ZERO-2612: add errors type in CheckoutState
19
- - d3474c6: ZERO-2655: Add data source shipping option
20
- - 75080fd: ZERO-2630: Add max limit to postcode area
21
- - 17f8752: ZERO-2816: Make the incoming currency lowercase
22
- - 91265bb: ZERO-2551: Improve pretty url and caching performance
23
- - bbe18b9: ZERO-2575: Fix build error
24
- - d409996: ZERO-2781: Refactor buildClientRequestUrl function to support caching and options
25
- - 94b6928: ZERO-2551: Add cache handler check in url-redirection middleware
26
- - 98bb8dc: ZERO-2706: Cache getTranlations method
27
- - 46b7aad: ZERO-2775: Add condition and logger for menuitemmodel data
28
- - dcc8a15: ZERO-2694: added build step to RC branch pipeline
29
- - fad2768: ZERO-2739: add gpay to payment plugin map
30
- - dff0d59: ZERO-2659: add formData support to proxy api requests
31
- - eecb282: ZERO-2607: Update address-related functions to include invalidateTag option
32
- - 4a163f2: ZERO-2761: Add condition for basket summary
33
- - beb499e: ZERO-2551: Add new tsconfig paths
34
- - 146ea39: ZERO-2774: Update imports
35
- - f2c92d5: ZERO-2816: Update cookie name
36
- - c47be30: ZERO-2744: Update Order and OrderItem types
37
- - e9a46ac: ZERO-2738: add CVC input to registered cards in Masterpass
38
- - f046f8e: ZERO-2575: update version for react-number-format
39
- - 86d2531: ZERO-2693: resolve dependency collision warning for eslint-config-next
40
- - 3f9b8d7: ZERO-2761: Update plugins.js for akinon-next
41
-
42
- ## 1.43.0-rc.5
43
-
44
- ### Minor Changes
45
-
46
- - 17f8752: ZERO-2816: Make the incoming currency lowercase
47
-
48
- ## 1.43.0-rc.4
3
+ ## 1.43.0
49
4
 
50
5
  ### Minor Changes
51
6
 
52
- - 3f9b8d7: ZERO-2761: Update plugins.js for akinon-next
53
-
54
- ## 1.43.0-rc.3
55
-
56
- ### Minor Changes
57
-
58
- - 64699d3: ZERO-2761: Fix invalid import for plugin module
59
-
60
- ## 1.43.0-rc.2
61
-
62
- ### Minor Changes
63
-
64
- - f2c92d5: ZERO-2816: Update cookie name
65
-
66
- ## 1.43.0-rc.1
67
-
68
- ### Minor Changes
69
-
70
- - eecb282: ZERO-2607: Update address-related functions to include invalidateTag option
71
-
72
- ## 1.43.0-rc.0
73
-
74
- ### Minor Changes
75
-
76
- - 90282b5: ZERO-2729: Audit packages for yarn and npm and also update app-template
77
- - 572d2e8: ZERO-2667: Add iframe support for redirection payment methods
78
- - a4c8d6a: ZERO-2663: Fix the image url for gif and svgs and return them without options
79
- - fda5b92: ZERO-2725: fix invalid import
80
- - 2d9b2b2: ZERO-2816: Add segment to headers
81
- - c53ea3e: ZERO-2609: Reset additional form fields when selectedFormType is not company
82
- - 8d9ac9a: ZERO-2794: Add field to order type
83
- - e9541a1: ZERO-2816: Add headers to url
84
- - c53ef7b: ZERO-2668: The Link component has been updated to improve the logic for handling href values. Previously, if the href was not a string or started with 'http', it would return the href as is. Now, if the href is not provided, it will default to '#' to prevent any potential errors. Additionally, if the href is a string and does not start with 'http', it will be formatted with the locale and pathname, based on the localeUrlStrategy and defaultLocaleValue. This ensures that the correct href is generated based on the localization settings.
85
- - 0d3a913: ZERO-2725: Update decimal scale in Price component
86
- - 1448a96: ZERO-2612: add errors type in CheckoutState
87
- - d3474c6: ZERO-2655: Add data source shipping option
88
- - 75080fd: ZERO-2630: Add max limit to postcode area
89
- - 91265bb: ZERO-2551: Improve pretty url and caching performance
90
- - bbe18b9: ZERO-2575: Fix build error
91
- - d409996: ZERO-2781: Refactor buildClientRequestUrl function to support caching and options
92
- - 94b6928: ZERO-2551: Add cache handler check in url-redirection middleware
93
- - 98bb8dc: ZERO-2706: Cache getTranlations method
94
- - 46b7aad: ZERO-2775: Add condition and logger for menuitemmodel data
95
- - dcc8a15: ZERO-2694: added build step to RC branch pipeline
96
- - fad2768: ZERO-2739: add gpay to payment plugin map
97
- - dff0d59: ZERO-2659: add formData support to proxy api requests
98
- - beb499e: ZERO-2551: Add new tsconfig paths
99
- - 146ea39: ZERO-2774: Update imports
100
- - c47be30: ZERO-2744: Update Order and OrderItem types
101
- - e9a46ac: ZERO-2738: add CVC input to registered cards in Masterpass
102
- - f046f8e: ZERO-2575: update version for react-number-format
103
- - 86d2531: ZERO-2693: resolve dependency collision warning for eslint-config-next
7
+ - 4a163f2: ZERO-2761: Add condition for basket summary
104
8
 
105
9
  ## 1.42.0
106
10
 
package/api/client.ts CHANGED
@@ -4,7 +4,6 @@ import settings from 'settings';
4
4
  import logger from '../utils/log';
5
5
  import formatCookieString from '../utils/format-cookie-string';
6
6
  import cookieParser from 'set-cookie-parser';
7
- import { cookies } from 'next/headers';
8
7
 
9
8
  interface RouteParams {
10
9
  params: {
@@ -75,31 +74,16 @@ async function proxyRequest(...args) {
75
74
  }
76
75
  } as RequestInit;
77
76
 
78
- const nextCookies = cookies();
79
- const segment = nextCookies.get('pz-segment')?.value;
80
- const currency = nextCookies.get('pz-external-currency')?.value;
81
-
82
- if (segment) {
83
- fetchOptions.headers['X-Segment-Id'] = segment;
84
- }
85
-
86
- if (currency) {
87
- fetchOptions.headers = Object.assign({}, fetchOptions.headers, {
88
- 'x-currency': currency
89
- });
90
- }
91
-
92
77
  if (options.contentType) {
93
78
  fetchOptions.headers['Content-Type'] = options.contentType;
94
79
  }
95
80
 
96
- const isMultipartFormData = req.headers.get('content-type')?.includes('multipart/form-data;');
97
-
98
81
  if (req.method !== 'GET') {
99
- let body: Record<string, any> | FormData = {};
82
+ const formData = new URLSearchParams();
83
+ let body = {};
100
84
 
101
85
  try {
102
- body = isMultipartFormData ? await req.formData() : await req.json();
86
+ body = await req.json();
103
87
  } catch (error) {
104
88
  logger.error(
105
89
  `Client Proxy Request - Error while parsing request body to JSON`,
@@ -110,21 +94,13 @@ async function proxyRequest(...args) {
110
94
  );
111
95
  }
112
96
 
113
- if (isMultipartFormData) {
114
- fetchOptions.body = body as FormData;
115
- } else {
116
- const formData = new FormData();
117
-
118
- Object.keys(body ?? {}).forEach((key) => {
119
- if (body[key]) {
120
- formData.append(key, body[key]);
121
- }
122
- });
97
+ Object.keys(body ?? {}).forEach((key) => {
98
+ if (body[key]) {
99
+ formData.append(key, body[key]);
100
+ }
101
+ });
123
102
 
124
- fetchOptions.body = !options.useFormData
125
- ? JSON.stringify(body)
126
- : formData;
127
- }
103
+ fetchOptions.body = !options.useFormData ? JSON.stringify(body) : formData;
128
104
  }
129
105
 
130
106
  let url = `${commerceUrl}/${slug.replace(/,/g, '/')}`;
@@ -1,53 +1,29 @@
1
1
  .checkout-payment-iframe-wrapper {
2
- position: fixed;
3
- top: 0;
4
- left: 0;
5
- width: 100%;
6
- height: 100%;
7
- border: none;
8
- z-index: 1000;
9
- background-color: white;
2
+ position: fixed;
3
+ top: 0;
4
+ left: 0;
5
+ width: 100%;
6
+ height: 100%;
7
+ border: none;
8
+ z-index: 1000;
9
+ background-color: white;
10
10
 
11
- iframe {
12
- width: 100%;
13
- height: 100%;
14
- border: none;
15
- background-color: white;
16
- }
11
+ iframe {
12
+ width: 100%;
13
+ height: 100%;
14
+ border: none;
15
+ background-color: white;
16
+ }
17
17
 
18
- .close-button {
19
- position: fixed;
20
- top: 16px;
21
- right: 16px;
22
- width: 32px;
23
- height: 32px;
24
- display: flex;
25
- align-items: center;
26
- justify-content: center;
27
- z-index: 1001;
28
- }
29
- }
30
-
31
- .checkout-payment-redirection-iframe-wrapper {
32
- width: 100%;
33
- position: relative;
34
-
35
- iframe {
36
- width: 100%;
37
- height: 100%;
38
- border: none;
39
- background-color: white;
40
- }
41
-
42
- .close-button {
43
- position: absolute;
44
- top: 16px;
45
- right: 16px;
46
- width: 32px;
47
- height: 32px;
48
- display: flex;
49
- align-items: center;
50
- justify-content: center;
51
- z-index: 1001;
52
- }
53
- }
18
+ .close-button {
19
+ position: fixed;
20
+ top: 16px;
21
+ right: 16px;
22
+ width: 32px;
23
+ height: 32px;
24
+ display: flex;
25
+ align-items: center;
26
+ justify-content: center;
27
+ z-index: 1001;
28
+ }
29
+ }
@@ -1,30 +1,17 @@
1
1
  import clsx from 'clsx';
2
- import { forwardRef, FocusEvent, useState, Ref } from 'react';
2
+ import { forwardRef, FocusEvent, useState } from 'react';
3
3
  import { Controller } from 'react-hook-form';
4
-
5
- // @ts-ignore
6
- import { PatternFormat, PatternFormatProps } from 'react-number-format';
4
+ import NumberFormat, { NumberFormatProps } from 'react-number-format';
7
5
  import { InputProps } from '../types';
8
6
  import { twMerge } from 'tailwind-merge';
9
7
 
10
- const PatternFormatWithRef = forwardRef(
11
- (props: PatternFormatProps, ref: Ref<HTMLInputElement>) => {
12
- return <PatternFormat {...props} getInputRef={ref} />;
13
- }
14
- );
15
- PatternFormatWithRef.displayName = 'PatternFormatWithRef';
16
-
17
8
  export const Input = forwardRef<
18
9
  HTMLInputElement,
19
10
  InputProps &
20
11
  Pick<
21
- PatternFormatProps,
22
- 'mask' | 'allowEmptyFormatting' | 'onValueChange'
23
- > & {
24
- format?: string;
25
- defaultValue?: string;
26
- type?: string;
27
- }
12
+ NumberFormatProps,
13
+ 'format' | 'mask' | 'allowEmptyFormatting' | 'onValueChange'
14
+ >
28
15
  >((props, ref) => {
29
16
  const [focused, setFocused] = useState(false);
30
17
  const [hasValue, setHasValue] = useState(false);
@@ -50,7 +37,6 @@ export const Input = forwardRef<
50
37
  ),
51
38
  props.className
52
39
  );
53
-
54
40
  const inputProps: any = {
55
41
  id,
56
42
  ref,
@@ -93,14 +79,14 @@ export const Input = forwardRef<
93
79
  <Controller
94
80
  name={props.name ?? ''}
95
81
  control={props.control}
82
+ defaultValue={false}
96
83
  render={({ field }) => (
97
- <PatternFormatWithRef
84
+ <NumberFormat
98
85
  format={format}
99
86
  mask={mask ?? ''}
100
87
  {...rest}
101
88
  {...field}
102
89
  {...inputProps}
103
- type={props.type as 'text' | 'password' | 'tel'}
104
90
  />
105
91
  )}
106
92
  />
@@ -10,32 +10,28 @@ type LinkProps = Omit<
10
10
  React.AnchorHTMLAttributes<HTMLAnchorElement>,
11
11
  keyof NextLinkProps
12
12
  > &
13
- NextLinkProps & {
14
- href: string;
15
- };
13
+ NextLinkProps;
16
14
 
17
15
  export const Link = ({ children, href, ...rest }: LinkProps) => {
18
16
  const { locale, defaultLocaleValue, localeUrlStrategy } = useLocalization();
19
17
  const formattedHref = useMemo(() => {
20
- if (!href) {
21
- return '#';
18
+ if (typeof href !== 'string' || href.startsWith('http')) {
19
+ return href;
22
20
  }
23
21
 
24
- if (typeof href === 'string' && !href.startsWith('http')) {
25
- const pathnameWithoutLocale = href.replace(urlLocaleMatcherRegex, '');
26
- const hrefWithLocale = `/${locale}${pathnameWithoutLocale}`;
22
+ const pathnameWithoutLocale = href.replace(urlLocaleMatcherRegex, '');
23
+ const hrefWithLocale = `/${locale}${pathnameWithoutLocale}`;
27
24
 
28
- if (localeUrlStrategy === LocaleUrlStrategy.ShowAllLocales) {
29
- return hrefWithLocale;
30
- } else if (
31
- localeUrlStrategy === LocaleUrlStrategy.HideDefaultLocale &&
32
- locale !== defaultLocaleValue
33
- ) {
34
- return hrefWithLocale;
35
- }
25
+ if (localeUrlStrategy === LocaleUrlStrategy.ShowAllLocales) {
26
+ return hrefWithLocale;
27
+ } else if (
28
+ localeUrlStrategy === LocaleUrlStrategy.HideDefaultLocale &&
29
+ locale !== defaultLocaleValue
30
+ ) {
31
+ return hrefWithLocale;
36
32
  }
37
33
 
38
- return href;
34
+ return href || '#';
39
35
  }, [href, defaultLocaleValue, locale, localeUrlStrategy]);
40
36
 
41
37
  return (
@@ -1,9 +1,10 @@
1
1
  'use client';
2
2
 
3
3
  import { MouseEvent, useCallback, useEffect, useState } from 'react';
4
- import { PaginationProps } from '../types';
4
+ import { PaginationProps } from '@theme/components/types';
5
5
  import { twMerge } from 'tailwind-merge';
6
6
  import clsx from 'clsx';
7
+
7
8
  import usePagination from '@akinon/next/hooks/use-pagination';
8
9
  import { useLocalization } from '@akinon/next/hooks';
9
10
  import { useRouter } from '@akinon/next/hooks';
@@ -1,14 +1,11 @@
1
1
  import { useMemo } from 'react';
2
-
3
- // @ts-ignore
4
- import { NumericFormat, NumericFormatProps } from 'react-number-format';
2
+ import NumberFormat, { NumberFormatProps } from 'react-number-format';
5
3
  import { getCurrency } from '@akinon/next/utils';
6
4
 
7
5
  import { useLocalization } from '@akinon/next/hooks';
8
6
  import { PriceProps } from '../types';
9
- import Settings from 'settings';
10
7
 
11
- export const Price = (props: NumericFormatProps & PriceProps) => {
8
+ export const Price = (props: NumberFormatProps & PriceProps) => {
12
9
  const {
13
10
  value,
14
11
  currencyCode,
@@ -30,10 +27,6 @@ export const Price = (props: NumericFormatProps & PriceProps) => {
30
27
  // TODO: This is very bad practice. It broke decimalScale.
31
28
  const _value = value?.toString().replace('.', ',');
32
29
 
33
- const currentCurrencyDecimalScale = Settings.localization.currencies.find(
34
- (currency) => currency.code === currencyCode_
35
- ).decimalScale;
36
-
37
30
  const currency = useMemo(
38
31
  () =>
39
32
  getCurrency({
@@ -46,14 +39,14 @@ export const Price = (props: NumericFormatProps & PriceProps) => {
46
39
  );
47
40
 
48
41
  return (
49
- <NumericFormat
42
+ <NumberFormat
50
43
  value={useNegative ? `-${useNegativeSpace}${_value}` : _value}
51
44
  {...{
52
45
  [useCurrencyAfterPrice ? 'suffix' : 'prefix']: currency
53
46
  }}
54
47
  displayType={displayType}
55
48
  thousandSeparator={thousandSeparator}
56
- decimalScale={currentCurrencyDecimalScale ?? decimalScale}
49
+ decimalScale={decimalScale}
57
50
  decimalSeparator={decimalSeparator}
58
51
  fixedDecimalScale={fixedDecimalScale}
59
52
  {...rest}
@@ -6,21 +6,6 @@ import dynamic from 'next/dynamic';
6
6
  import { PaymentOptionViews } from 'views/checkout/steps/payment';
7
7
  import { useMemo } from 'react';
8
8
 
9
- const fallbackView = () => <div />;
10
-
11
- const paymentTypeToView = {
12
- bkm_express: 'bkm',
13
- credit_card: 'credit-card',
14
- credit_payment: 'credit-payment',
15
- funds_transfer: 'funds-transfer',
16
- gpay: 'gpay',
17
- loyalty_money: 'loyalty',
18
- masterpass: 'credit-card',
19
- pay_on_delivery: 'pay-on-delivery',
20
- redirection: 'redirection'
21
- // Add other mappings as needed
22
- };
23
-
24
9
  export default function SelectedPaymentOptionView() {
25
10
  const { payment_option } = useAppSelector(
26
11
  (state: RootState) => state.checkout.preOrder
@@ -29,7 +14,7 @@ export default function SelectedPaymentOptionView() {
29
14
  const Component = useMemo(
30
15
  () =>
31
16
  dynamic(
32
- async () => {
17
+ () => {
33
18
  const customOption = PaymentOptionViews.find(
34
19
  (opt) => opt.slug === payment_option.slug
35
20
  );
@@ -44,19 +29,46 @@ export default function SelectedPaymentOptionView() {
44
29
  });
45
30
  }
46
31
 
47
- const view = paymentTypeToView[payment_option.payment_type];
48
- if (view) {
49
- try {
50
- const mod = await import(
51
- `views/checkout/steps/payment/options/${view}`
32
+ let promise: any;
33
+
34
+ try {
35
+ if (payment_option.payment_type === 'credit_card') {
36
+ promise = import(
37
+ `views/checkout/steps/payment/options/credit-card`
38
+ );
39
+ } else if (payment_option.payment_type === 'funds_transfer') {
40
+ promise = import(
41
+ `views/checkout/steps/payment/options/funds-transfer`
42
+ );
43
+ } else if (payment_option.payment_type === 'redirection') {
44
+ promise = import(
45
+ `views/checkout/steps/payment/options/redirection`
46
+ );
47
+ } else if (payment_option.payment_type === 'pay_on_delivery') {
48
+ promise = import(
49
+ `views/checkout/steps/payment/options/pay-on-delivery`
50
+ );
51
+ } else if (payment_option.payment_type === 'loyalty_money') {
52
+ promise = import(`views/checkout/steps/payment/options/loyalty`);
53
+ } else if (payment_option.payment_type === 'masterpass') {
54
+ promise = import(
55
+ `views/checkout/steps/payment/options/credit-card`
52
56
  );
53
- return mod.default || fallbackView;
54
- } catch (error) {
55
- return fallbackView;
56
57
  }
57
- }
58
+ // else if (payment_option.payment_type === 'credit_payment') {
59
+ // promise = import(`views/checkout/steps/payment/options/credit-payment`);
60
+ // }
61
+ // else if (payment_option.payment_type === 'gpay') {
62
+ // promise = import(`views/checkout/steps/payment/options/gpay`);
63
+ // }
64
+ // else if (payment_option.payment_type === 'bkm_express') {
65
+ // promise = import(`views/checkout/steps/payment/options/bkm`);
66
+ // }
67
+ } catch (error) {}
58
68
 
59
- return fallbackView;
69
+ return promise
70
+ ? promise.then((mod) => mod.default).catch(() => () => null)
71
+ : new Promise<any>((resolve) => resolve(() => null));
60
72
  },
61
73
  { ssr: false }
62
74
  ),
@@ -123,16 +123,15 @@ const accountApi = api.injectEndpoints({
123
123
  query: ({ page, status, limit }) =>
124
124
  buildClientRequestUrl(account.getQuotations(page, status, limit))
125
125
  }),
126
- sendContact: builder.mutation<void, FormData>({
127
- query: (body) => {
128
- return {
129
- url: buildClientRequestUrl(account.sendContact, {
130
- useFormData: true
131
- }),
132
- method: 'POST',
133
- body
134
- };
135
- }
126
+ sendContact: builder.mutation<void, ContactFormType>({
127
+ query: (body) => ({
128
+ url: buildClientRequestUrl(account.sendContact, {
129
+ contentType: 'application/json',
130
+ responseType: 'text'
131
+ }),
132
+ method: 'POST',
133
+ body
134
+ })
136
135
  }),
137
136
  cancelOrder: builder.mutation<void, AccountOrderCancellation>({
138
137
  query: ({ id, ...body }) => ({
@@ -39,10 +39,7 @@ const addressApi = api.injectEndpoints({
39
39
  query: (city) =>
40
40
  buildClientRequestUrl(address.getRetailStoreTownships(city))
41
41
  }),
42
- addAddress: builder.mutation<
43
- Address,
44
- Partial<Address> & { invalidateTag?: 'Addresses' | 'Checkout' }
45
- >({
42
+ addAddress: builder.mutation<Address, Partial<Address>>({
46
43
  query: (body) => ({
47
44
  url: buildClientRequestUrl(address.base, {
48
45
  contentType: 'application/json'
@@ -53,16 +50,9 @@ const addressApi = api.injectEndpoints({
53
50
  type: body.is_corporate === 'true' ? 'corporate' : 'personal'
54
51
  }
55
52
  }),
56
- invalidatesTags: (_, error, arg) => {
57
- if (error) return [];
58
- if (arg.invalidateTag) return [arg.invalidateTag];
59
- return ['Addresses', 'Checkout'];
60
- }
53
+ invalidatesTags: (_, error) => (error ? [] : ['Addresses', 'Checkout'])
61
54
  }),
62
- editAddress: builder.mutation<
63
- Address,
64
- Partial<Address> & { invalidateTag?: 'Addresses' | 'Checkout' }
65
- >({
55
+ editAddress: builder.mutation<Address, Partial<Address>>({
66
56
  query: ({ pk, ...body }) => ({
67
57
  url: buildClientRequestUrl(address.editAddress(pk), {
68
58
  contentType: 'application/json'
@@ -74,28 +64,14 @@ const addressApi = api.injectEndpoints({
74
64
  type: body.is_corporate === 'true' ? 'corporate' : 'personal'
75
65
  }
76
66
  }),
77
- invalidatesTags: (_, error, arg) => {
78
- if (error) return [];
79
- if (arg.invalidateTag) return [arg.invalidateTag];
80
- return ['Addresses', 'Checkout'];
81
- }
67
+ invalidatesTags: (_, error) => (error ? [] : ['Addresses', 'Checkout']) // TODO: Invalidate one of these tags when necessary (e.g. Address page invalidates Addresses tag, Checkout page invalidates Checkout tag)
82
68
  }),
83
- removeAddress: builder.mutation<
84
- void,
85
- number | { id: number; invalidateTag: 'Addresses' | 'Checkout' }
86
- >({
87
- query: (arg) => ({
88
- url: buildClientRequestUrl(
89
- address.removeAddress(typeof arg === 'number' ? arg : arg.id)
90
- ),
69
+ removeAddress: builder.mutation<void, number>({
70
+ query: (id) => ({
71
+ url: buildClientRequestUrl(address.removeAddress(id)),
91
72
  method: 'DELETE'
92
73
  }),
93
- invalidatesTags: (_, error, arg) => {
94
- if (error) return [];
95
- if (typeof arg === 'object' && arg.invalidateTag)
96
- return [arg.invalidateTag];
97
- return ['Addresses', 'Checkout'];
98
- }
74
+ invalidatesTags: (_, error) => (error ? [] : ['Addresses', 'Checkout']) // TODO: Invalidate one of these tags when necessary (e.g. Address page invalidates Addresses tag, Checkout page invalidates Checkout tag)
99
75
  }),
100
76
  setDefaultAddress: builder.mutation<Address, Partial<Address>>({
101
77
  query: ({ pk, primary }) => ({
@@ -9,7 +9,7 @@ import {
9
9
  } from '@reduxjs/toolkit/query/react';
10
10
  import settings from 'settings';
11
11
  import { getCookie } from '../../utils';
12
- import { RootState } from 'redux/store';
12
+ import { RootState } from '@theme/redux/store';
13
13
 
14
14
  interface CustomBaseQueryApi extends BaseQueryApi {
15
15
  getState: () => RootState;