@akinon/next 1.59.0 → 1.60.0-rc.7
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.
- package/CHANGELOG.md +659 -0
- package/api/client.ts +23 -2
- package/assets/styles/index.css +49 -0
- package/assets/styles/index.css.map +1 -0
- package/assets/styles/index.scss +50 -26
- package/bin/pz-generate-translations.js +41 -0
- package/bin/pz-prebuild.js +1 -0
- package/bin/pz-predev.js +1 -0
- package/components/file-input.tsx +8 -0
- package/components/index.ts +1 -0
- package/components/input.tsx +21 -7
- package/components/link.tsx +17 -13
- package/components/plugin-module.tsx +8 -3
- package/components/price.tsx +11 -4
- package/components/pz-root.tsx +15 -3
- package/components/selected-payment-option-view.tsx +2 -1
- package/data/client/api.ts +1 -1
- package/data/client/b2b.ts +35 -2
- package/data/client/basket.ts +6 -5
- package/data/client/checkout.ts +55 -10
- package/data/client/user.ts +3 -2
- package/data/server/category.ts +43 -19
- package/data/server/flatpage.ts +29 -7
- package/data/server/form.ts +29 -11
- package/data/server/landingpage.ts +26 -7
- package/data/server/list.ts +16 -6
- package/data/server/menu.ts +15 -2
- package/data/server/product.ts +33 -13
- package/data/server/seo.ts +17 -24
- package/data/server/special-page.ts +15 -5
- package/data/server/widget.ts +14 -7
- package/data/urls.ts +8 -1
- package/hocs/server/with-segment-defaults.tsx +4 -1
- package/hooks/index.ts +2 -1
- package/hooks/use-message-listener.ts +24 -0
- package/hooks/use-pagination.ts +2 -2
- package/hooks/use-payment-options.ts +2 -1
- package/lib/cache-handler.mjs +33 -0
- package/lib/cache.ts +8 -6
- package/middlewares/currency.ts +2 -1
- package/middlewares/default.ts +226 -152
- package/middlewares/index.ts +3 -1
- package/middlewares/oauth-login.ts +3 -1
- package/middlewares/pretty-url.ts +11 -1
- package/middlewares/saved-card-redirection.ts +179 -0
- package/middlewares/url-redirection.ts +4 -0
- package/package.json +4 -3
- package/plugins.d.ts +6 -0
- package/plugins.js +2 -1
- package/redux/middlewares/checkout.ts +78 -14
- package/redux/reducers/checkout.ts +23 -3
- package/redux/reducers/index.ts +3 -1
- package/routes/pretty-url.tsx +192 -0
- package/types/commerce/address.ts +1 -1
- package/types/commerce/b2b.ts +12 -2
- package/types/commerce/checkout.ts +30 -0
- package/types/commerce/order.ts +1 -0
- package/types/index.ts +17 -2
- package/utils/app-fetch.ts +16 -8
- package/utils/generate-commerce-search-params.ts +3 -1
- package/utils/index.ts +27 -6
- package/utils/redirection-iframe.ts +85 -0
- package/utils/server-translation.ts +11 -1
- package/with-pz-config.js +13 -2
package/data/client/checkout.ts
CHANGED
|
@@ -57,6 +57,7 @@ export interface CompleteCreditCardParams {
|
|
|
57
57
|
card_month: string;
|
|
58
58
|
card_year: string;
|
|
59
59
|
use_three_d?: boolean;
|
|
60
|
+
save?: boolean;
|
|
60
61
|
}
|
|
61
62
|
|
|
62
63
|
interface GetContractResponse {
|
|
@@ -228,7 +229,8 @@ export const checkoutApi = api.injectEndpoints({
|
|
|
228
229
|
card_number,
|
|
229
230
|
card_month,
|
|
230
231
|
card_year,
|
|
231
|
-
use_three_d = true
|
|
232
|
+
use_three_d = true,
|
|
233
|
+
save = undefined
|
|
232
234
|
}) => {
|
|
233
235
|
const paymentOption =
|
|
234
236
|
store.getState().checkout?.preOrder?.payment_option;
|
|
@@ -242,20 +244,26 @@ export const checkoutApi = api.injectEndpoints({
|
|
|
242
244
|
};
|
|
243
245
|
}
|
|
244
246
|
|
|
247
|
+
const body: Record<string, string> = {
|
|
248
|
+
agreement: '1',
|
|
249
|
+
use_three_d: use_three_d ? '1' : '0',
|
|
250
|
+
card_cvv,
|
|
251
|
+
card_holder,
|
|
252
|
+
card_month,
|
|
253
|
+
card_number,
|
|
254
|
+
card_year
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
if (save !== undefined) {
|
|
258
|
+
body.save = save ? '1' : '0';
|
|
259
|
+
}
|
|
260
|
+
|
|
245
261
|
return {
|
|
246
262
|
url: buildClientRequestUrl(checkout.completeCreditCardPayment, {
|
|
247
263
|
useFormData: true
|
|
248
264
|
}),
|
|
249
265
|
method: 'POST',
|
|
250
|
-
body
|
|
251
|
-
agreement: '1',
|
|
252
|
-
use_three_d: use_three_d ? '1' : '0',
|
|
253
|
-
card_cvv,
|
|
254
|
-
card_holder,
|
|
255
|
-
card_month,
|
|
256
|
-
card_number,
|
|
257
|
-
card_year
|
|
258
|
-
}
|
|
266
|
+
body
|
|
259
267
|
};
|
|
260
268
|
},
|
|
261
269
|
async onQueryStarted(args, { dispatch, queryFulfilled }) {
|
|
@@ -380,6 +388,22 @@ export const checkoutApi = api.injectEndpoints({
|
|
|
380
388
|
dispatch(setShippingStepBusy(false));
|
|
381
389
|
}
|
|
382
390
|
}),
|
|
391
|
+
setDataSourceShippingOptions: build.mutation<CheckoutResponse, number[]>({
|
|
392
|
+
query: (pks) => ({
|
|
393
|
+
url: buildClientRequestUrl(checkout.setDataSourceShippingOption, {
|
|
394
|
+
useFormData: true
|
|
395
|
+
}),
|
|
396
|
+
method: 'POST',
|
|
397
|
+
body: {
|
|
398
|
+
data_source_shipping_options: JSON.stringify(pks)
|
|
399
|
+
}
|
|
400
|
+
}),
|
|
401
|
+
async onQueryStarted(arg, { dispatch, queryFulfilled }) {
|
|
402
|
+
dispatch(setShippingStepBusy(true));
|
|
403
|
+
await queryFulfilled;
|
|
404
|
+
dispatch(setShippingStepBusy(false));
|
|
405
|
+
}
|
|
406
|
+
}),
|
|
383
407
|
setRetailStore: build.mutation<CheckoutResponse, SetRetailStoreParams>({
|
|
384
408
|
query: ({ retailStorePk, billingAddressPk }) => ({
|
|
385
409
|
url: buildClientRequestUrl(
|
|
@@ -681,6 +705,25 @@ export const checkoutApi = api.injectEndpoints({
|
|
|
681
705
|
};
|
|
682
706
|
}
|
|
683
707
|
}),
|
|
708
|
+
setAttributeBasedShippingOptions: build.mutation<
|
|
709
|
+
CheckoutResponse,
|
|
710
|
+
Record<string, number>
|
|
711
|
+
>({
|
|
712
|
+
query: (options) => ({
|
|
713
|
+
url: buildClientRequestUrl(checkout.setAttributeBasedShippingOption, {
|
|
714
|
+
useFormData: true
|
|
715
|
+
}),
|
|
716
|
+
method: 'POST',
|
|
717
|
+
body: {
|
|
718
|
+
attribute_based_shipping_options: JSON.stringify(options)
|
|
719
|
+
}
|
|
720
|
+
}),
|
|
721
|
+
async onQueryStarted(arg, { dispatch, queryFulfilled }) {
|
|
722
|
+
dispatch(setShippingStepBusy(true));
|
|
723
|
+
await queryFulfilled;
|
|
724
|
+
dispatch(setShippingStepBusy(false));
|
|
725
|
+
}
|
|
726
|
+
}),
|
|
684
727
|
setOrderSelectionPage: build.mutation<
|
|
685
728
|
CheckoutResponse,
|
|
686
729
|
{ extra_field: ExtraField }
|
|
@@ -712,6 +755,7 @@ export const {
|
|
|
712
755
|
useSetDeliveryOptionMutation,
|
|
713
756
|
useSetAddressesMutation,
|
|
714
757
|
useSetShippingOptionMutation,
|
|
758
|
+
useSetDataSourceShippingOptionsMutation,
|
|
715
759
|
useSetPaymentOptionMutation,
|
|
716
760
|
useSetBinNumberMutation,
|
|
717
761
|
useSetInstallmentOptionMutation,
|
|
@@ -730,5 +774,6 @@ export const {
|
|
|
730
774
|
usePayWithLoyaltyBalanceMutation,
|
|
731
775
|
useSetOrderNoteMutation,
|
|
732
776
|
useSetDeliveryBagsMutation,
|
|
777
|
+
useSetAttributeBasedShippingOptionsMutation,
|
|
733
778
|
useSetOrderSelectionPageMutation
|
|
734
779
|
} = checkoutApi;
|
package/data/client/user.ts
CHANGED
|
@@ -22,11 +22,12 @@ const userApi = api.injectEndpoints({
|
|
|
22
22
|
getCaptcha: build.query<GetCaptchaResponse, void>({
|
|
23
23
|
query: () => buildClientRequestUrl(user.captcha),
|
|
24
24
|
transformResponse: (response: { html: string }) => {
|
|
25
|
-
const
|
|
25
|
+
const siteKey = response.html.match(/data-sitekey="([^"]+)"/i)[1];
|
|
26
|
+
|
|
26
27
|
const csrfTokenMatch = response.html.match(
|
|
27
28
|
/name=['|"]csrfmiddlewaretoken['|"] value=['|"][^'"]+/gi
|
|
28
29
|
);
|
|
29
|
-
|
|
30
|
+
|
|
30
31
|
const csrfToken =
|
|
31
32
|
csrfTokenMatch?.[0].replace(
|
|
32
33
|
/name=['|"]csrfmiddlewaretoken['|"] value=['|"]/gi,
|
package/data/server/category.ts
CHANGED
|
@@ -5,26 +5,32 @@ import { category, product } from '../urls';
|
|
|
5
5
|
import { Cache, CacheKey } from '../../lib/cache';
|
|
6
6
|
import { parse } from 'lossless-json';
|
|
7
7
|
import logger from '../../utils/log';
|
|
8
|
+
import { headers as nHeaders } from 'next/headers';
|
|
9
|
+
import { ServerVariables } from '../../utils/server-variables';
|
|
8
10
|
|
|
9
11
|
function getCategoryDataHandler(
|
|
10
12
|
pk: number,
|
|
13
|
+
locale: string,
|
|
14
|
+
currency: string,
|
|
11
15
|
searchParams?: URLSearchParams,
|
|
12
16
|
headers?: Record<string, string>
|
|
13
17
|
) {
|
|
14
18
|
return async function () {
|
|
15
19
|
const params = generateCommerceSearchParams(searchParams);
|
|
16
20
|
|
|
17
|
-
const rawData = await appFetch<string>(
|
|
18
|
-
`${category.getCategoryByPk(pk)}${params ? params : ''}`,
|
|
19
|
-
|
|
21
|
+
const rawData = await appFetch<string>({
|
|
22
|
+
url: `${category.getCategoryByPk(pk)}${params ? params : ''}`,
|
|
23
|
+
locale,
|
|
24
|
+
currency,
|
|
25
|
+
init: {
|
|
20
26
|
headers: {
|
|
21
27
|
Accept: 'application/json',
|
|
22
28
|
'Content-Type': 'application/json',
|
|
23
29
|
...(headers ?? {})
|
|
24
30
|
}
|
|
25
31
|
},
|
|
26
|
-
FetchResponseType.TEXT
|
|
27
|
-
);
|
|
32
|
+
responseType: FetchResponseType.TEXT
|
|
33
|
+
});
|
|
28
34
|
|
|
29
35
|
let data: GetCategoryResponse;
|
|
30
36
|
|
|
@@ -58,15 +64,17 @@ function getCategoryDataHandler(
|
|
|
58
64
|
return { data, breadcrumbData: undefined };
|
|
59
65
|
}
|
|
60
66
|
|
|
61
|
-
const breadcrumbData = await appFetch<any>(
|
|
62
|
-
product.breadcrumbUrl(menuItemModel),
|
|
63
|
-
|
|
67
|
+
const breadcrumbData = await appFetch<any>({
|
|
68
|
+
url: product.breadcrumbUrl(menuItemModel),
|
|
69
|
+
locale,
|
|
70
|
+
currency,
|
|
71
|
+
init: {
|
|
64
72
|
headers: {
|
|
65
73
|
Accept: 'application/json',
|
|
66
74
|
'Content-Type': 'application/json'
|
|
67
75
|
}
|
|
68
76
|
}
|
|
69
|
-
);
|
|
77
|
+
});
|
|
70
78
|
|
|
71
79
|
return { data, breadcrumbData: breadcrumbData?.menu };
|
|
72
80
|
};
|
|
@@ -75,33 +83,44 @@ function getCategoryDataHandler(
|
|
|
75
83
|
export const getCategoryData = ({
|
|
76
84
|
pk,
|
|
77
85
|
searchParams,
|
|
78
|
-
headers
|
|
86
|
+
headers,
|
|
87
|
+
locale = ServerVariables.locale,
|
|
88
|
+
currency = ServerVariables.currency
|
|
79
89
|
}: {
|
|
80
90
|
pk: number;
|
|
91
|
+
locale?: string;
|
|
92
|
+
currency?: string;
|
|
81
93
|
searchParams?: URLSearchParams;
|
|
82
94
|
headers?: Record<string, string>;
|
|
83
95
|
}) => {
|
|
84
96
|
return Cache.wrap(
|
|
85
97
|
CacheKey.Category(pk, searchParams, headers),
|
|
86
|
-
|
|
98
|
+
locale,
|
|
99
|
+
getCategoryDataHandler(pk, locale, currency, searchParams, headers),
|
|
87
100
|
{
|
|
88
101
|
expire: 300
|
|
89
102
|
}
|
|
90
103
|
);
|
|
91
104
|
};
|
|
92
105
|
|
|
93
|
-
function getCategoryBySlugDataHandler(
|
|
106
|
+
function getCategoryBySlugDataHandler(
|
|
107
|
+
slug: string,
|
|
108
|
+
locale: string,
|
|
109
|
+
currency: string
|
|
110
|
+
) {
|
|
94
111
|
return async function () {
|
|
95
|
-
const rawData = await appFetch<string>(
|
|
96
|
-
category.getCategoryBySlug(slug),
|
|
97
|
-
|
|
112
|
+
const rawData = await appFetch<string>({
|
|
113
|
+
url: category.getCategoryBySlug(slug),
|
|
114
|
+
locale,
|
|
115
|
+
currency,
|
|
116
|
+
init: {
|
|
98
117
|
headers: {
|
|
99
118
|
Accept: 'application/json',
|
|
100
119
|
'Content-Type': 'application/json'
|
|
101
120
|
}
|
|
102
121
|
},
|
|
103
|
-
FetchResponseType.TEXT
|
|
104
|
-
);
|
|
122
|
+
responseType: FetchResponseType.TEXT
|
|
123
|
+
});
|
|
105
124
|
|
|
106
125
|
let data: GetCategoryResponse;
|
|
107
126
|
|
|
@@ -129,10 +148,15 @@ function getCategoryBySlugDataHandler(slug: string) {
|
|
|
129
148
|
};
|
|
130
149
|
}
|
|
131
150
|
|
|
132
|
-
export const getCategoryBySlugData = async ({
|
|
151
|
+
export const getCategoryBySlugData = async ({
|
|
152
|
+
slug,
|
|
153
|
+
locale = ServerVariables.locale,
|
|
154
|
+
currency = ServerVariables.currency
|
|
155
|
+
}) => {
|
|
133
156
|
return Cache.wrap(
|
|
134
157
|
CacheKey.CategorySlug(slug),
|
|
135
|
-
|
|
158
|
+
locale,
|
|
159
|
+
getCategoryBySlugDataHandler(slug, locale, currency),
|
|
136
160
|
{
|
|
137
161
|
expire: 300
|
|
138
162
|
}
|
package/data/server/flatpage.ts
CHANGED
|
@@ -2,13 +2,23 @@ import { flatpage } from '../urls';
|
|
|
2
2
|
import { FlatPage } from '../../types';
|
|
3
3
|
import appFetch from '../../utils/app-fetch';
|
|
4
4
|
import { Cache, CacheKey } from '../../lib/cache';
|
|
5
|
+
import { ServerVariables } from '../../utils/server-variables';
|
|
5
6
|
|
|
6
|
-
const getFlatPageDataHandler = (
|
|
7
|
+
const getFlatPageDataHandler = (
|
|
8
|
+
pk: number,
|
|
9
|
+
locale: string,
|
|
10
|
+
currency: string
|
|
11
|
+
) => {
|
|
7
12
|
return async function () {
|
|
8
|
-
const data = await appFetch<FlatPage>(
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
13
|
+
const data = await appFetch<FlatPage>({
|
|
14
|
+
url: flatpage.getFlatPageByPk(pk),
|
|
15
|
+
locale,
|
|
16
|
+
currency,
|
|
17
|
+
init: {
|
|
18
|
+
headers: {
|
|
19
|
+
Accept: 'application/json',
|
|
20
|
+
'Content-Type': 'application/json'
|
|
21
|
+
}
|
|
12
22
|
}
|
|
13
23
|
});
|
|
14
24
|
|
|
@@ -16,6 +26,18 @@ const getFlatPageDataHandler = (pk: number) => {
|
|
|
16
26
|
};
|
|
17
27
|
};
|
|
18
28
|
|
|
19
|
-
export const getFlatPageData = ({
|
|
20
|
-
|
|
29
|
+
export const getFlatPageData = ({
|
|
30
|
+
pk,
|
|
31
|
+
locale = ServerVariables.locale,
|
|
32
|
+
currency = ServerVariables.currency
|
|
33
|
+
}: {
|
|
34
|
+
pk: number;
|
|
35
|
+
locale?: string;
|
|
36
|
+
currency?: string;
|
|
37
|
+
}) => {
|
|
38
|
+
return Cache.wrap(
|
|
39
|
+
CacheKey.FlatPage(pk),
|
|
40
|
+
locale,
|
|
41
|
+
getFlatPageDataHandler(pk, locale, currency)
|
|
42
|
+
);
|
|
21
43
|
};
|
package/data/server/form.ts
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
|
-
import { Cache, CacheKey } from
|
|
2
|
-
import { FormType } from
|
|
1
|
+
import { Cache, CacheKey } from '../../lib/cache';
|
|
2
|
+
import { FormType } from '../../types/commerce/form';
|
|
3
3
|
|
|
4
|
-
import appFetch from
|
|
5
|
-
import {
|
|
4
|
+
import appFetch from '../../utils/app-fetch';
|
|
5
|
+
import { ServerVariables } from '../../utils/server-variables';
|
|
6
|
+
import { form } from '../urls';
|
|
6
7
|
|
|
7
|
-
const getFormDataHandler = (pk: number) => {
|
|
8
|
+
const getFormDataHandler = (pk: number, locale: string, currency: string) => {
|
|
8
9
|
return async function () {
|
|
9
|
-
const data = await appFetch<FormType>(
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
const data = await appFetch<FormType>({
|
|
11
|
+
url: form.getForm(pk),
|
|
12
|
+
locale,
|
|
13
|
+
currency,
|
|
14
|
+
init: {
|
|
15
|
+
headers: {
|
|
16
|
+
Accept: 'application/json',
|
|
17
|
+
'Content-Type': 'application/json'
|
|
18
|
+
}
|
|
13
19
|
}
|
|
14
20
|
});
|
|
15
21
|
|
|
@@ -17,6 +23,18 @@ const getFormDataHandler = (pk: number) => {
|
|
|
17
23
|
};
|
|
18
24
|
};
|
|
19
25
|
|
|
20
|
-
export const getFormData = ({
|
|
21
|
-
|
|
26
|
+
export const getFormData = ({
|
|
27
|
+
pk,
|
|
28
|
+
locale = ServerVariables.locale,
|
|
29
|
+
currency = ServerVariables.currency
|
|
30
|
+
}: {
|
|
31
|
+
pk: number;
|
|
32
|
+
locale?: string;
|
|
33
|
+
currency?: string;
|
|
34
|
+
}) => {
|
|
35
|
+
return Cache.wrap(
|
|
36
|
+
CacheKey.Form(pk),
|
|
37
|
+
locale,
|
|
38
|
+
getFormDataHandler(pk, locale, currency)
|
|
39
|
+
);
|
|
22
40
|
};
|
|
@@ -2,23 +2,42 @@ import { landingpage } from '../urls';
|
|
|
2
2
|
import { LandingPage } from '../../types/commerce/landingpage';
|
|
3
3
|
import appFetch from '../../utils/app-fetch';
|
|
4
4
|
import { Cache, CacheKey } from '../../lib/cache';
|
|
5
|
+
import { ServerVariables } from '../../utils/server-variables';
|
|
5
6
|
|
|
6
|
-
const getLandingPageHandler = (
|
|
7
|
+
const getLandingPageHandler = (
|
|
8
|
+
pk: number,
|
|
9
|
+
locale: string,
|
|
10
|
+
currency: string
|
|
11
|
+
) => {
|
|
7
12
|
return async function () {
|
|
8
|
-
const data = await appFetch<LandingPage>(
|
|
9
|
-
landingpage.getLandingPageByPk(pk),
|
|
10
|
-
|
|
13
|
+
const data = await appFetch<LandingPage>({
|
|
14
|
+
url: landingpage.getLandingPageByPk(pk),
|
|
15
|
+
locale,
|
|
16
|
+
currency,
|
|
17
|
+
init: {
|
|
11
18
|
headers: {
|
|
12
19
|
Accept: 'application/json',
|
|
13
20
|
'Content-Type': 'application/json'
|
|
14
21
|
}
|
|
15
22
|
}
|
|
16
|
-
);
|
|
23
|
+
});
|
|
17
24
|
|
|
18
25
|
return data;
|
|
19
26
|
};
|
|
20
27
|
};
|
|
21
28
|
|
|
22
|
-
export const getLandingPageData = ({
|
|
23
|
-
|
|
29
|
+
export const getLandingPageData = ({
|
|
30
|
+
pk,
|
|
31
|
+
locale = ServerVariables.locale,
|
|
32
|
+
currency = ServerVariables.currency
|
|
33
|
+
}: {
|
|
34
|
+
pk: number;
|
|
35
|
+
locale?: string;
|
|
36
|
+
currency?: string;
|
|
37
|
+
}) => {
|
|
38
|
+
return Cache.wrap(
|
|
39
|
+
CacheKey.LandingPage(pk),
|
|
40
|
+
locale,
|
|
41
|
+
getLandingPageHandler(pk, locale, currency)
|
|
42
|
+
);
|
|
24
43
|
};
|
package/data/server/list.ts
CHANGED
|
@@ -5,25 +5,30 @@ import { generateCommerceSearchParams } from '../../utils';
|
|
|
5
5
|
import appFetch, { FetchResponseType } from '../../utils/app-fetch';
|
|
6
6
|
import { parse } from 'lossless-json';
|
|
7
7
|
import logger from '../../utils/log';
|
|
8
|
+
import { ServerVariables } from '../../utils/server-variables';
|
|
8
9
|
|
|
9
10
|
const getListDataHandler = (
|
|
11
|
+
locale,
|
|
12
|
+
currency,
|
|
10
13
|
searchParams: URLSearchParams,
|
|
11
14
|
headers?: Record<string, string>
|
|
12
15
|
) => {
|
|
13
16
|
return async function () {
|
|
14
17
|
const params = generateCommerceSearchParams(searchParams);
|
|
15
18
|
|
|
16
|
-
const rawData = await appFetch<string>(
|
|
17
|
-
`${category.list}${params}`,
|
|
18
|
-
|
|
19
|
+
const rawData = await appFetch<string>({
|
|
20
|
+
url: `${category.list}${params}`,
|
|
21
|
+
locale,
|
|
22
|
+
currency,
|
|
23
|
+
init: {
|
|
19
24
|
headers: {
|
|
20
25
|
Accept: 'application/json',
|
|
21
26
|
'Content-Type': 'application/json',
|
|
22
27
|
...(headers ?? {})
|
|
23
28
|
}
|
|
24
29
|
},
|
|
25
|
-
FetchResponseType.TEXT
|
|
26
|
-
);
|
|
30
|
+
responseType: FetchResponseType.TEXT
|
|
31
|
+
});
|
|
27
32
|
|
|
28
33
|
let data: GetCategoryResponse;
|
|
29
34
|
|
|
@@ -51,15 +56,20 @@ const getListDataHandler = (
|
|
|
51
56
|
};
|
|
52
57
|
|
|
53
58
|
export const getListData = async ({
|
|
59
|
+
locale = ServerVariables.locale,
|
|
60
|
+
currency = ServerVariables.currency,
|
|
54
61
|
searchParams,
|
|
55
62
|
headers
|
|
56
63
|
}: {
|
|
64
|
+
locale?: string;
|
|
65
|
+
currency?: string;
|
|
57
66
|
searchParams: URLSearchParams;
|
|
58
67
|
headers?: Record<string, string>;
|
|
59
68
|
}) => {
|
|
60
69
|
return Cache.wrap(
|
|
61
70
|
CacheKey.List(searchParams, headers),
|
|
62
|
-
|
|
71
|
+
locale,
|
|
72
|
+
getListDataHandler(locale, currency, searchParams, headers),
|
|
63
73
|
{
|
|
64
74
|
expire: 300
|
|
65
75
|
}
|
package/data/server/menu.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Cache, CacheKey } from '../../lib/cache';
|
|
2
2
|
import { MenuItemType } from '../../types';
|
|
3
3
|
import appFetch from '../../utils/app-fetch';
|
|
4
|
+
import { ServerVariables } from '../../utils/server-variables';
|
|
4
5
|
import { misc } from '../urls';
|
|
5
6
|
|
|
6
7
|
interface MenuResponse {
|
|
@@ -8,6 +9,8 @@ interface MenuResponse {
|
|
|
8
9
|
}
|
|
9
10
|
|
|
10
11
|
interface MenuHandlerParams {
|
|
12
|
+
locale?: string;
|
|
13
|
+
currency?: string;
|
|
11
14
|
depth?: number;
|
|
12
15
|
parent?: string;
|
|
13
16
|
}
|
|
@@ -15,9 +18,18 @@ interface MenuHandlerParams {
|
|
|
15
18
|
const DEFAULT_DEPTH = 3;
|
|
16
19
|
|
|
17
20
|
const getMenuHandler =
|
|
18
|
-
({
|
|
21
|
+
({
|
|
22
|
+
locale = ServerVariables.locale,
|
|
23
|
+
currency = ServerVariables.currency,
|
|
24
|
+
depth,
|
|
25
|
+
parent
|
|
26
|
+
}: MenuHandlerParams = {}) =>
|
|
19
27
|
async () => {
|
|
20
|
-
const response = await appFetch<MenuResponse>(
|
|
28
|
+
const response = await appFetch<MenuResponse>({
|
|
29
|
+
url: misc.menus(depth ?? DEFAULT_DEPTH, parent),
|
|
30
|
+
locale,
|
|
31
|
+
currency
|
|
32
|
+
});
|
|
21
33
|
|
|
22
34
|
return response?.menu;
|
|
23
35
|
};
|
|
@@ -30,6 +42,7 @@ const getMenuHandler =
|
|
|
30
42
|
export const getMenu = async (params?: MenuHandlerParams) => {
|
|
31
43
|
return Cache.wrap(
|
|
32
44
|
CacheKey.Menu(params?.depth ?? DEFAULT_DEPTH, params?.parent),
|
|
45
|
+
params?.locale ?? ServerVariables.locale,
|
|
33
46
|
getMenuHandler(params)
|
|
34
47
|
);
|
|
35
48
|
};
|
package/data/server/product.ts
CHANGED
|
@@ -2,16 +2,21 @@ import { Cache, CacheKey } from '../../lib/cache';
|
|
|
2
2
|
import { product } from '../urls';
|
|
3
3
|
import { ProductCategoryResult, ProductResult } from '../../types';
|
|
4
4
|
import appFetch from '../../utils/app-fetch';
|
|
5
|
+
import { ServerVariables } from '../../utils/server-variables';
|
|
5
6
|
import logger from '../../utils/log';
|
|
6
7
|
|
|
7
8
|
type GetProduct = {
|
|
8
9
|
pk: number;
|
|
10
|
+
locale?: string;
|
|
11
|
+
currency?: string;
|
|
9
12
|
searchParams?: URLSearchParams;
|
|
10
13
|
groupProduct?: boolean;
|
|
11
14
|
};
|
|
12
15
|
|
|
13
16
|
const getProductDataHandler = ({
|
|
14
17
|
pk,
|
|
18
|
+
locale,
|
|
19
|
+
currency,
|
|
15
20
|
searchParams,
|
|
16
21
|
groupProduct
|
|
17
22
|
}: GetProduct) => {
|
|
@@ -28,24 +33,31 @@ const getProductDataHandler = ({
|
|
|
28
33
|
.join('&');
|
|
29
34
|
}
|
|
30
35
|
|
|
31
|
-
const data = await appFetch<ProductResult>(
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
36
|
+
const data = await appFetch<ProductResult>({
|
|
37
|
+
url,
|
|
38
|
+
locale,
|
|
39
|
+
currency,
|
|
40
|
+
init: {
|
|
41
|
+
headers: {
|
|
42
|
+
Accept: 'application/json',
|
|
43
|
+
'Content-Type': 'application/json'
|
|
44
|
+
}
|
|
35
45
|
}
|
|
36
46
|
});
|
|
37
47
|
|
|
38
48
|
const categoryUrl = product.categoryUrl(data.product.pk);
|
|
39
49
|
|
|
40
|
-
const productCategoryData = await appFetch<ProductCategoryResult>(
|
|
41
|
-
categoryUrl,
|
|
42
|
-
|
|
50
|
+
const productCategoryData = await appFetch<ProductCategoryResult>({
|
|
51
|
+
url: categoryUrl,
|
|
52
|
+
locale,
|
|
53
|
+
currency,
|
|
54
|
+
init: {
|
|
43
55
|
headers: {
|
|
44
56
|
Accept: 'application/json',
|
|
45
57
|
'Content-Type': 'application/json'
|
|
46
58
|
}
|
|
47
59
|
}
|
|
48
|
-
);
|
|
60
|
+
});
|
|
49
61
|
|
|
50
62
|
const menuItemModel = productCategoryData?.results[0]?.menuitemmodel;
|
|
51
63
|
|
|
@@ -59,10 +71,15 @@ const getProductDataHandler = ({
|
|
|
59
71
|
|
|
60
72
|
const breadcrumbUrl = product.breadcrumbUrl(menuItemModel);
|
|
61
73
|
|
|
62
|
-
const breadcrumbData = await appFetch<any>(
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
74
|
+
const breadcrumbData = await appFetch<any>({
|
|
75
|
+
url: breadcrumbUrl,
|
|
76
|
+
locale,
|
|
77
|
+
currency,
|
|
78
|
+
init: {
|
|
79
|
+
headers: {
|
|
80
|
+
Accept: 'application/json',
|
|
81
|
+
'Content-Type': 'application/json'
|
|
82
|
+
}
|
|
66
83
|
}
|
|
67
84
|
});
|
|
68
85
|
|
|
@@ -75,6 +92,8 @@ const getProductDataHandler = ({
|
|
|
75
92
|
|
|
76
93
|
export const getProductData = async ({
|
|
77
94
|
pk,
|
|
95
|
+
locale = ServerVariables.locale,
|
|
96
|
+
currency = ServerVariables.currency,
|
|
78
97
|
searchParams,
|
|
79
98
|
groupProduct
|
|
80
99
|
}: GetProduct) => {
|
|
@@ -83,7 +102,8 @@ export const getProductData = async ({
|
|
|
83
102
|
pk,
|
|
84
103
|
searchParams ?? new URLSearchParams()
|
|
85
104
|
),
|
|
86
|
-
|
|
105
|
+
locale,
|
|
106
|
+
getProductDataHandler({ pk, locale, currency, searchParams, groupProduct }),
|
|
87
107
|
{
|
|
88
108
|
expire: 300
|
|
89
109
|
}
|
package/data/server/seo.ts
CHANGED
|
@@ -1,23 +1,15 @@
|
|
|
1
1
|
import appFetch from '../../utils/app-fetch';
|
|
2
2
|
import { Cache, CacheKey } from '../../lib/cache';
|
|
3
3
|
import { misc } from '../../data/urls';
|
|
4
|
-
import
|
|
4
|
+
import { ServerVariables } from '../../utils/server-variables';
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
try {
|
|
11
|
-
data = await appFetch<{ [key: string]: string }>(misc.cmsSeo('/'));
|
|
12
|
-
} catch (error) {
|
|
13
|
-
logger.error('Error while fetching root seo data', error);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
return data;
|
|
17
|
-
};
|
|
6
|
+
interface SeoDataParams {
|
|
7
|
+
url: string;
|
|
8
|
+
locale?: string;
|
|
9
|
+
currency?: string;
|
|
18
10
|
}
|
|
19
11
|
|
|
20
|
-
function getSeoDataHandler(url:
|
|
12
|
+
function getSeoDataHandler({ url, locale, currency }: SeoDataParams) {
|
|
21
13
|
return async function () {
|
|
22
14
|
let data = {} as {
|
|
23
15
|
title: string;
|
|
@@ -27,7 +19,7 @@ function getSeoDataHandler(url: string) {
|
|
|
27
19
|
};
|
|
28
20
|
|
|
29
21
|
try {
|
|
30
|
-
data = await appFetch(misc.cmsSeo(url));
|
|
22
|
+
data = await appFetch({ url: misc.cmsSeo(url), locale, currency });
|
|
31
23
|
} catch (error) {
|
|
32
24
|
// logger.error('Error while fetching seo data', { url, error });
|
|
33
25
|
}
|
|
@@ -36,13 +28,14 @@ function getSeoDataHandler(url: string) {
|
|
|
36
28
|
};
|
|
37
29
|
}
|
|
38
30
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
31
|
+
export const getSeoData = async (
|
|
32
|
+
url,
|
|
33
|
+
locale = ServerVariables.locale,
|
|
34
|
+
currency = ServerVariables.currency
|
|
35
|
+
) => {
|
|
36
|
+
return Cache.wrap(
|
|
37
|
+
CacheKey.Seo(url),
|
|
38
|
+
locale,
|
|
39
|
+
getSeoDataHandler({ url, locale, currency })
|
|
40
|
+
);
|
|
48
41
|
};
|