@akinon/next 1.14.0 → 1.15.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 (127) hide show
  1. package/.editorconfig +7 -7
  2. package/.eslintrc.js +40 -40
  3. package/.gitattributes +15 -0
  4. package/.prettierrc +13 -13
  5. package/CHANGELOG.md +14 -0
  6. package/api/auth.ts +231 -231
  7. package/api/cache.ts +44 -44
  8. package/api/client.ts +174 -174
  9. package/api/logout.ts +42 -42
  10. package/bin/pz-check-dependencies.js +98 -98
  11. package/bin/pz-install-plugins.js +33 -33
  12. package/bin/pz-install-theme.js +58 -58
  13. package/bin/pz-postbuild.js +1 -1
  14. package/bin/pz-postdev.js +1 -1
  15. package/bin/pz-postinstall.js +6 -6
  16. package/bin/pz-poststart.js +1 -1
  17. package/bin/pz-prebuild.js +4 -4
  18. package/bin/pz-predev.js +4 -4
  19. package/bin/pz-prestart.js +1 -1
  20. package/bin/run-script.js +44 -44
  21. package/components/accordion.tsx +52 -52
  22. package/components/button.tsx +46 -46
  23. package/components/client-root.tsx +19 -19
  24. package/components/icon.tsx +18 -18
  25. package/components/image.tsx +133 -133
  26. package/components/index.ts +1 -0
  27. package/components/input.tsx +110 -110
  28. package/components/lazy-component.tsx +33 -33
  29. package/components/loader-spinner.tsx +23 -23
  30. package/components/mobile-app-toggler.tsx +26 -26
  31. package/components/modal.tsx +66 -0
  32. package/components/oauth-login.tsx +24 -24
  33. package/components/plugin-module.tsx +5 -0
  34. package/components/price.tsx +55 -55
  35. package/components/pz-providers.tsx +24 -24
  36. package/components/pz-root.tsx +21 -21
  37. package/components/radio.tsx +18 -18
  38. package/components/react-portal.tsx +45 -45
  39. package/components/redirect-three-d/content/index.tsx +74 -74
  40. package/components/redirect-three-d/index.tsx +17 -17
  41. package/components/selected-payment-option-view.tsx +1 -1
  42. package/components/trans.tsx +39 -39
  43. package/data/client/account.ts +208 -208
  44. package/data/client/api.ts +85 -85
  45. package/data/client/basket.ts +82 -82
  46. package/data/client/misc.ts +101 -101
  47. package/data/client/product.ts +89 -89
  48. package/data/client/user.ts +99 -99
  49. package/data/client/wishlist.ts +118 -118
  50. package/data/server/category.ts +132 -132
  51. package/data/server/flatpage.ts +21 -21
  52. package/data/server/form.ts +22 -22
  53. package/data/server/index.ts +10 -10
  54. package/data/server/landingpage.ts +24 -24
  55. package/data/server/list.ts +67 -67
  56. package/data/server/menu.ts +35 -35
  57. package/data/server/product.ts +86 -86
  58. package/data/server/seo.ts +48 -48
  59. package/data/server/special-page.ts +47 -47
  60. package/data/server/widget.ts +27 -27
  61. package/data/urls.ts +221 -221
  62. package/hocs/client/index.ts +1 -1
  63. package/hocs/client/with-segment-defaults.tsx +25 -25
  64. package/hocs/server/index.ts +1 -1
  65. package/hocs/server/with-segment-defaults.tsx +85 -85
  66. package/hooks/index.ts +10 -10
  67. package/hooks/use-captcha.tsx +76 -76
  68. package/hooks/use-common-product-attributes.ts +36 -36
  69. package/hooks/use-debounce.ts +20 -20
  70. package/hooks/use-localization.ts +78 -78
  71. package/hooks/use-media-query.ts +36 -36
  72. package/hooks/use-mobile-iframe-handler.ts +23 -23
  73. package/hooks/use-on-click-outside.tsx +28 -28
  74. package/hooks/use-payment-options.ts +3 -1
  75. package/hooks/use-router.ts +45 -45
  76. package/hooks/use-translation.ts +14 -14
  77. package/lib/cache.ts +215 -215
  78. package/localization/index.ts +5 -5
  79. package/localization/provider.tsx +58 -58
  80. package/middlewares/complete-gpay.ts +159 -0
  81. package/middlewares/currency.ts +100 -100
  82. package/middlewares/default.ts +259 -256
  83. package/middlewares/index.ts +31 -29
  84. package/middlewares/locale.ts +68 -68
  85. package/middlewares/oauth-login.ts +79 -79
  86. package/middlewares/pretty-url.ts +104 -104
  87. package/middlewares/redirection-payment.ts +160 -160
  88. package/middlewares/three-d-redirection.ts +159 -159
  89. package/middlewares/url-redirection.ts +65 -65
  90. package/package.json +2 -2
  91. package/plugins.js +1 -0
  92. package/redux/hooks.ts +7 -7
  93. package/redux/middlewares/index.ts +50 -50
  94. package/redux/reducers/checkout.ts +184 -184
  95. package/redux/reducers/config.ts +28 -28
  96. package/redux/reducers/header.ts +59 -59
  97. package/redux/reducers/root.ts +61 -61
  98. package/sentry/index.ts +27 -27
  99. package/tailwind/rtl.js +137 -137
  100. package/types/commerce/account.ts +64 -64
  101. package/types/commerce/address.ts +94 -94
  102. package/types/commerce/basket.ts +43 -43
  103. package/types/commerce/category.ts +114 -114
  104. package/types/commerce/checkout.ts +143 -143
  105. package/types/commerce/flatpage.ts +7 -7
  106. package/types/commerce/form.ts +66 -66
  107. package/types/commerce/index.ts +12 -12
  108. package/types/commerce/landingpage.ts +7 -7
  109. package/types/commerce/misc.ts +127 -127
  110. package/types/commerce/order.ts +119 -119
  111. package/types/commerce/product.ts +109 -109
  112. package/types/commerce/widget.ts +28 -28
  113. package/types/gtm.ts +16 -16
  114. package/types/index.ts +274 -274
  115. package/types/metadata.ts +7 -7
  116. package/types/next-auth.d.ts +24 -24
  117. package/utils/app-fetch.ts +69 -69
  118. package/utils/deep-merge.js +24 -24
  119. package/utils/image-loader.ts +31 -31
  120. package/utils/index.ts +150 -150
  121. package/utils/localization.ts +29 -29
  122. package/utils/log.ts +138 -138
  123. package/utils/menu-generator.ts +27 -27
  124. package/utils/mobile-3d-iframe.ts +77 -77
  125. package/utils/server-translation.ts +57 -57
  126. package/utils/server-variables.ts +9 -9
  127. package/with-pz-config.js +94 -94
@@ -1,208 +1,208 @@
1
- import { api } from './api';
2
- import { account, user } from '../urls';
3
- import { buildClientRequestUrl } from '../../utils';
4
- import {
5
- AccountChangeEmailFormType,
6
- AccountChangePasswordFormType,
7
- AccountOrderCancellation,
8
- AccountOrderCancellationReason,
9
- ContactFormType,
10
- Order,
11
- Quotations
12
- } from '../../types';
13
-
14
- interface GetOrdersResponse {
15
- count: number;
16
- results: Order[];
17
- }
18
-
19
- interface GetOrdersParams {
20
- limit?: number;
21
- page?: number;
22
- createdDate?: string;
23
- }
24
-
25
- export interface GetQuotationsResponse {
26
- count: number;
27
- results: Quotations[];
28
- }
29
-
30
- export type PasswordResetType = {
31
- password: string;
32
- repeatPassword: string;
33
- slug: string;
34
- };
35
-
36
- export type AccountProfileFormFilteredType = {
37
- first_name: string;
38
- last_name: string;
39
- phone: string;
40
- date_of_birth: string;
41
- gender: string;
42
- sms_allowed: boolean;
43
- email_allowed: boolean;
44
- };
45
-
46
- export type ContactFormSubject = [
47
- {
48
- id: string;
49
- is_order_needed: boolean;
50
- text: string;
51
- }
52
- ];
53
-
54
- interface LoyaltyTransactions {
55
- count: number;
56
- results: {
57
- amount: string;
58
- created_date: string;
59
- transaction: {
60
- created_date: string;
61
- order: string;
62
- };
63
- }[];
64
- }
65
-
66
- const accountApi = api.injectEndpoints({
67
- endpoints: (builder) => ({
68
- updatePassword: builder.mutation<void, AccountChangePasswordFormType>({
69
- query: (body) => ({
70
- url: buildClientRequestUrl(account.updatePassword, {
71
- contentType: 'application/json'
72
- }),
73
- method: 'POST',
74
- body
75
- })
76
- }),
77
- updateEmail: builder.mutation<void, AccountChangeEmailFormType>({
78
- query: (body) => ({
79
- url: buildClientRequestUrl(account.updateEmail, {
80
- contentType: 'application/json'
81
- }),
82
- method: 'POST',
83
- body
84
- })
85
- }),
86
- updateProfile: builder.mutation<void, AccountProfileFormFilteredType>({
87
- query: (body) => ({
88
- url: buildClientRequestUrl(account.updateProfile, {
89
- accept: 'application/json',
90
- contentType: 'application/json'
91
- }),
92
- method: 'PATCH',
93
- body
94
- }),
95
- invalidatesTags: ['Profile']
96
- }),
97
- getProfileInfo: builder.query<any, void>({
98
- query: () => buildClientRequestUrl(user.profiles),
99
- providesTags: ['Profile']
100
- }),
101
- getContactSubjects: builder.query<ContactFormSubject, void>({
102
- query: () => buildClientRequestUrl(account.getContactSubjects)
103
- }),
104
- getOrder: builder.query<any, string>({
105
- query: (id) => buildClientRequestUrl(account.orderId(id))
106
- }),
107
- getOrders: builder.query<GetOrdersResponse, GetOrdersParams>({
108
- query: ({ page, limit, createdDate } = {}) =>
109
- buildClientRequestUrl(account.getOrders({ page, limit, createdDate }))
110
- }),
111
- getQuotations: builder.query<GetQuotationsResponse, void>({
112
- query: () => buildClientRequestUrl(account.getQuotations)
113
- }),
114
- sendContact: builder.mutation<void, ContactFormType>({
115
- query: (body) => ({
116
- url: buildClientRequestUrl(account.sendContact, {
117
- contentType: 'application/json',
118
- responseType: 'text'
119
- }),
120
- method: 'POST',
121
- body
122
- })
123
- }),
124
- cancelOrder: builder.mutation<void, AccountOrderCancellation>({
125
- query: ({ id, ...body }) => ({
126
- url: buildClientRequestUrl(account.cancelOrder(id), {
127
- contentType: 'application/json'
128
- }),
129
- method: 'POST',
130
- body
131
- })
132
- }),
133
- bulkCancellation: builder.mutation<void, AccountOrderCancellation>({
134
- query: (body) => ({
135
- url: buildClientRequestUrl(account.bulkCancellationRequest, {
136
- contentType: 'application/json'
137
- }),
138
- method: 'POST',
139
- body
140
- })
141
- }),
142
- getCancellationReasons: builder.query<AccountOrderCancellationReason, void>(
143
- {
144
- query: () => buildClientRequestUrl(account.cancellationReasons)
145
- }
146
- ),
147
- passwordReset: builder.mutation<void, PasswordResetType>({
148
- query: ({ slug, password, repeatPassword }) => ({
149
- url: buildClientRequestUrl(account.passwordReset(slug), {
150
- useFormData: true
151
- }),
152
- method: 'POST',
153
- body: {
154
- new_password1: password,
155
- new_password2: repeatPassword
156
- }
157
- })
158
- }),
159
- getBasketOffers: builder.query<any, void>({
160
- query: () => buildClientRequestUrl('/account/basket-offers')
161
- }),
162
- getFutureBasketOffers: builder.query<any, void>({
163
- query: () => buildClientRequestUrl('/account/future-basket-offers')
164
- }),
165
- getExpiredBasketOffers: builder.query<any, void>({
166
- query: () => buildClientRequestUrl('/account/expired-basket-offers')
167
- }),
168
- getDiscountItems: builder.query<any, void>({
169
- query: () => buildClientRequestUrl('/account/discount-items')
170
- }),
171
- anonymize: builder.mutation<string, void>({
172
- query: () => ({
173
- url: buildClientRequestUrl(account.anonymize),
174
- method: 'PATCH'
175
- })
176
- }),
177
- getLoyaltyBalance: builder.query<{ balance: number }, void>({
178
- query: () => buildClientRequestUrl(account.loyaltyBalance)
179
- }),
180
- getLoyaltyTransactions: builder.query<LoyaltyTransactions, void>({
181
- query: () => buildClientRequestUrl(account.loyaltyTransactions)
182
- })
183
- }),
184
- overrideExisting: true
185
- });
186
-
187
- export const {
188
- useGetContactSubjectsQuery,
189
- useGetOrderQuery,
190
- useGetOrdersQuery,
191
- useGetQuotationsQuery,
192
- useSendContactMutation,
193
- useUpdateEmailMutation,
194
- useUpdatePasswordMutation,
195
- useUpdateProfileMutation,
196
- useGetProfileInfoQuery,
197
- useCancelOrderMutation,
198
- useBulkCancellationMutation,
199
- useGetCancellationReasonsQuery,
200
- useGetBasketOffersQuery,
201
- useGetFutureBasketOffersQuery,
202
- useGetExpiredBasketOffersQuery,
203
- useGetDiscountItemsQuery,
204
- usePasswordResetMutation,
205
- useAnonymizeMutation,
206
- useGetLoyaltyBalanceQuery,
207
- useGetLoyaltyTransactionsQuery
208
- } = accountApi;
1
+ import { api } from './api';
2
+ import { account, user } from '../urls';
3
+ import { buildClientRequestUrl } from '../../utils';
4
+ import {
5
+ AccountChangeEmailFormType,
6
+ AccountChangePasswordFormType,
7
+ AccountOrderCancellation,
8
+ AccountOrderCancellationReason,
9
+ ContactFormType,
10
+ Order,
11
+ Quotations
12
+ } from '../../types';
13
+
14
+ interface GetOrdersResponse {
15
+ count: number;
16
+ results: Order[];
17
+ }
18
+
19
+ interface GetOrdersParams {
20
+ limit?: number;
21
+ page?: number;
22
+ createdDate?: string;
23
+ }
24
+
25
+ export interface GetQuotationsResponse {
26
+ count: number;
27
+ results: Quotations[];
28
+ }
29
+
30
+ export type PasswordResetType = {
31
+ password: string;
32
+ repeatPassword: string;
33
+ slug: string;
34
+ };
35
+
36
+ export type AccountProfileFormFilteredType = {
37
+ first_name: string;
38
+ last_name: string;
39
+ phone: string;
40
+ date_of_birth: string;
41
+ gender: string;
42
+ sms_allowed: boolean;
43
+ email_allowed: boolean;
44
+ };
45
+
46
+ export type ContactFormSubject = [
47
+ {
48
+ id: string;
49
+ is_order_needed: boolean;
50
+ text: string;
51
+ }
52
+ ];
53
+
54
+ interface LoyaltyTransactions {
55
+ count: number;
56
+ results: {
57
+ amount: string;
58
+ created_date: string;
59
+ transaction: {
60
+ created_date: string;
61
+ order: string;
62
+ };
63
+ }[];
64
+ }
65
+
66
+ const accountApi = api.injectEndpoints({
67
+ endpoints: (builder) => ({
68
+ updatePassword: builder.mutation<void, AccountChangePasswordFormType>({
69
+ query: (body) => ({
70
+ url: buildClientRequestUrl(account.updatePassword, {
71
+ contentType: 'application/json'
72
+ }),
73
+ method: 'POST',
74
+ body
75
+ })
76
+ }),
77
+ updateEmail: builder.mutation<void, AccountChangeEmailFormType>({
78
+ query: (body) => ({
79
+ url: buildClientRequestUrl(account.updateEmail, {
80
+ contentType: 'application/json'
81
+ }),
82
+ method: 'POST',
83
+ body
84
+ })
85
+ }),
86
+ updateProfile: builder.mutation<void, AccountProfileFormFilteredType>({
87
+ query: (body) => ({
88
+ url: buildClientRequestUrl(account.updateProfile, {
89
+ accept: 'application/json',
90
+ contentType: 'application/json'
91
+ }),
92
+ method: 'PATCH',
93
+ body
94
+ }),
95
+ invalidatesTags: ['Profile']
96
+ }),
97
+ getProfileInfo: builder.query<any, void>({
98
+ query: () => buildClientRequestUrl(user.profiles),
99
+ providesTags: ['Profile']
100
+ }),
101
+ getContactSubjects: builder.query<ContactFormSubject, void>({
102
+ query: () => buildClientRequestUrl(account.getContactSubjects)
103
+ }),
104
+ getOrder: builder.query<any, string>({
105
+ query: (id) => buildClientRequestUrl(account.orderId(id))
106
+ }),
107
+ getOrders: builder.query<GetOrdersResponse, GetOrdersParams>({
108
+ query: ({ page, limit, createdDate } = {}) =>
109
+ buildClientRequestUrl(account.getOrders({ page, limit, createdDate }))
110
+ }),
111
+ getQuotations: builder.query<GetQuotationsResponse, void>({
112
+ query: () => buildClientRequestUrl(account.getQuotations)
113
+ }),
114
+ sendContact: builder.mutation<void, ContactFormType>({
115
+ query: (body) => ({
116
+ url: buildClientRequestUrl(account.sendContact, {
117
+ contentType: 'application/json',
118
+ responseType: 'text'
119
+ }),
120
+ method: 'POST',
121
+ body
122
+ })
123
+ }),
124
+ cancelOrder: builder.mutation<void, AccountOrderCancellation>({
125
+ query: ({ id, ...body }) => ({
126
+ url: buildClientRequestUrl(account.cancelOrder(id), {
127
+ contentType: 'application/json'
128
+ }),
129
+ method: 'POST',
130
+ body
131
+ })
132
+ }),
133
+ bulkCancellation: builder.mutation<void, AccountOrderCancellation>({
134
+ query: (body) => ({
135
+ url: buildClientRequestUrl(account.bulkCancellationRequest, {
136
+ contentType: 'application/json'
137
+ }),
138
+ method: 'POST',
139
+ body
140
+ })
141
+ }),
142
+ getCancellationReasons: builder.query<AccountOrderCancellationReason, void>(
143
+ {
144
+ query: () => buildClientRequestUrl(account.cancellationReasons)
145
+ }
146
+ ),
147
+ passwordReset: builder.mutation<void, PasswordResetType>({
148
+ query: ({ slug, password, repeatPassword }) => ({
149
+ url: buildClientRequestUrl(account.passwordReset(slug), {
150
+ useFormData: true
151
+ }),
152
+ method: 'POST',
153
+ body: {
154
+ new_password1: password,
155
+ new_password2: repeatPassword
156
+ }
157
+ })
158
+ }),
159
+ getBasketOffers: builder.query<any, void>({
160
+ query: () => buildClientRequestUrl('/account/basket-offers')
161
+ }),
162
+ getFutureBasketOffers: builder.query<any, void>({
163
+ query: () => buildClientRequestUrl('/account/future-basket-offers')
164
+ }),
165
+ getExpiredBasketOffers: builder.query<any, void>({
166
+ query: () => buildClientRequestUrl('/account/expired-basket-offers')
167
+ }),
168
+ getDiscountItems: builder.query<any, void>({
169
+ query: () => buildClientRequestUrl('/account/discount-items')
170
+ }),
171
+ anonymize: builder.mutation<string, void>({
172
+ query: () => ({
173
+ url: buildClientRequestUrl(account.anonymize),
174
+ method: 'PATCH'
175
+ })
176
+ }),
177
+ getLoyaltyBalance: builder.query<{ balance: number }, void>({
178
+ query: () => buildClientRequestUrl(account.loyaltyBalance)
179
+ }),
180
+ getLoyaltyTransactions: builder.query<LoyaltyTransactions, void>({
181
+ query: () => buildClientRequestUrl(account.loyaltyTransactions)
182
+ })
183
+ }),
184
+ overrideExisting: true
185
+ });
186
+
187
+ export const {
188
+ useGetContactSubjectsQuery,
189
+ useGetOrderQuery,
190
+ useGetOrdersQuery,
191
+ useGetQuotationsQuery,
192
+ useSendContactMutation,
193
+ useUpdateEmailMutation,
194
+ useUpdatePasswordMutation,
195
+ useUpdateProfileMutation,
196
+ useGetProfileInfoQuery,
197
+ useCancelOrderMutation,
198
+ useBulkCancellationMutation,
199
+ useGetCancellationReasonsQuery,
200
+ useGetBasketOffersQuery,
201
+ useGetFutureBasketOffersQuery,
202
+ useGetExpiredBasketOffersQuery,
203
+ useGetDiscountItemsQuery,
204
+ usePasswordResetMutation,
205
+ useAnonymizeMutation,
206
+ useGetLoyaltyBalanceQuery,
207
+ useGetLoyaltyTransactionsQuery
208
+ } = accountApi;
@@ -1,85 +1,85 @@
1
- import {
2
- createApi,
3
- fetchBaseQuery,
4
- retry,
5
- BaseQueryFn,
6
- FetchBaseQueryError,
7
- FetchBaseQueryMeta,
8
- FetchArgs,
9
- BaseQueryApi
10
- } from '@reduxjs/toolkit/query/react';
11
- import settings from 'settings';
12
- import { getCookie } from '../../utils';
13
- import { RootState } from '@theme/redux/store';
14
-
15
- interface CustomBaseQueryApi extends BaseQueryApi {
16
- getState: () => RootState;
17
- }
18
-
19
- const customBaseQuery: BaseQueryFn<
20
- string | FetchArgs,
21
- unknown,
22
- FetchBaseQueryError,
23
- {},
24
- FetchBaseQueryMeta
25
- > = async (args, api: CustomBaseQueryApi, extraOptions) => {
26
- const mutations = Object.entries(api.getState()?.api?.mutations ?? {}).map(
27
- (x) => x[1]
28
- );
29
-
30
- if (
31
- api.type === 'mutation' &&
32
- mutations.filter(
33
- (m) => m.status === 'pending' && m.endpointName === api.endpoint
34
- ).length > 1
35
- ) {
36
- api.abort('Mutation already in progress.');
37
- }
38
-
39
- const baseQuery = fetchBaseQuery({
40
- prepareHeaders: async (headers) => {
41
- const csrfCookie = getCookie('csrftoken');
42
- const activeLocale = getCookie('pz-locale');
43
- const localeApiValue = settings.localization.locales.find(
44
- (locale) => locale.value === activeLocale
45
- )?.apiValue;
46
- const activeCurrency = getCookie('pz-currency');
47
-
48
- headers.set('Accept-Language', `${localeApiValue}`);
49
- headers.set('x-currency', `${activeCurrency}`);
50
-
51
- if (csrfCookie) {
52
- headers.set('x-csrftoken', `${csrfCookie}`);
53
- }
54
- return headers;
55
- },
56
- credentials: 'include'
57
- });
58
- try {
59
- const result = await baseQuery(args, api, extraOptions);
60
- return result;
61
- } catch (error) {
62
- return { error };
63
- }
64
- };
65
-
66
- export const api = createApi({
67
- reducerPath: 'api',
68
- baseQuery: retry(customBaseQuery, { maxRetries: 3 }),
69
- tagTypes: [
70
- 'Basket',
71
- 'BasketB2b',
72
- 'DraftsB2b',
73
- 'Product',
74
- 'Checkout',
75
- 'Favorite',
76
- 'Addresses',
77
- 'Profile',
78
- 'StockAlert'
79
- ],
80
- endpoints: () => ({})
81
- });
82
-
83
- export const {
84
- util: { invalidateTags }
85
- } = api;
1
+ import {
2
+ createApi,
3
+ fetchBaseQuery,
4
+ retry,
5
+ BaseQueryFn,
6
+ FetchBaseQueryError,
7
+ FetchBaseQueryMeta,
8
+ FetchArgs,
9
+ BaseQueryApi
10
+ } from '@reduxjs/toolkit/query/react';
11
+ import settings from 'settings';
12
+ import { getCookie } from '../../utils';
13
+ import { RootState } from '@theme/redux/store';
14
+
15
+ interface CustomBaseQueryApi extends BaseQueryApi {
16
+ getState: () => RootState;
17
+ }
18
+
19
+ const customBaseQuery: BaseQueryFn<
20
+ string | FetchArgs,
21
+ unknown,
22
+ FetchBaseQueryError,
23
+ {},
24
+ FetchBaseQueryMeta
25
+ > = async (args, api: CustomBaseQueryApi, extraOptions) => {
26
+ const mutations = Object.entries(api.getState()?.api?.mutations ?? {}).map(
27
+ (x) => x[1]
28
+ );
29
+
30
+ if (
31
+ api.type === 'mutation' &&
32
+ mutations.filter(
33
+ (m) => m.status === 'pending' && m.endpointName === api.endpoint
34
+ ).length > 1
35
+ ) {
36
+ api.abort('Mutation already in progress.');
37
+ }
38
+
39
+ const baseQuery = fetchBaseQuery({
40
+ prepareHeaders: async (headers) => {
41
+ const csrfCookie = getCookie('csrftoken');
42
+ const activeLocale = getCookie('pz-locale');
43
+ const localeApiValue = settings.localization.locales.find(
44
+ (locale) => locale.value === activeLocale
45
+ )?.apiValue;
46
+ const activeCurrency = getCookie('pz-currency');
47
+
48
+ headers.set('Accept-Language', `${localeApiValue}`);
49
+ headers.set('x-currency', `${activeCurrency}`);
50
+
51
+ if (csrfCookie) {
52
+ headers.set('x-csrftoken', `${csrfCookie}`);
53
+ }
54
+ return headers;
55
+ },
56
+ credentials: 'include'
57
+ });
58
+ try {
59
+ const result = await baseQuery(args, api, extraOptions);
60
+ return result;
61
+ } catch (error) {
62
+ return { error };
63
+ }
64
+ };
65
+
66
+ export const api = createApi({
67
+ reducerPath: 'api',
68
+ baseQuery: retry(customBaseQuery, { maxRetries: 3 }),
69
+ tagTypes: [
70
+ 'Basket',
71
+ 'BasketB2b',
72
+ 'DraftsB2b',
73
+ 'Product',
74
+ 'Checkout',
75
+ 'Favorite',
76
+ 'Addresses',
77
+ 'Profile',
78
+ 'StockAlert'
79
+ ],
80
+ endpoints: () => ({})
81
+ });
82
+
83
+ export const {
84
+ util: { invalidateTags }
85
+ } = api;