@akinon/next 1.56.0-rc.7 → 1.57.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.
- package/CHANGELOG.md +4 -554
- package/api/client.ts +2 -23
- package/assets/styles/index.scss +26 -50
- package/bin/pz-prebuild.js +0 -1
- package/bin/pz-predev.js +0 -1
- package/components/index.ts +0 -1
- package/components/input.tsx +7 -21
- package/components/link.tsx +13 -17
- package/components/price.tsx +4 -11
- package/components/pz-root.tsx +3 -15
- package/components/selected-payment-option-view.tsx +2 -1
- package/data/client/api.ts +1 -1
- package/data/client/b2b.ts +2 -35
- package/data/client/basket.ts +5 -6
- package/data/client/checkout.ts +0 -37
- package/data/client/user.ts +2 -3
- package/data/server/category.ts +19 -43
- package/data/server/flatpage.ts +7 -29
- package/data/server/form.ts +11 -29
- package/data/server/landingpage.ts +7 -26
- package/data/server/list.ts +6 -16
- package/data/server/menu.ts +2 -15
- package/data/server/product.ts +13 -33
- package/data/server/seo.ts +24 -17
- package/data/server/special-page.ts +5 -15
- package/data/server/widget.ts +7 -14
- package/data/urls.ts +1 -8
- package/hocs/server/with-segment-defaults.tsx +1 -4
- package/hooks/index.ts +1 -2
- package/hooks/use-pagination.ts +2 -2
- package/lib/cache.ts +6 -8
- package/middlewares/default.ts +2 -46
- package/middlewares/pretty-url.ts +1 -11
- package/middlewares/url-redirection.ts +0 -4
- package/package.json +3 -4
- package/plugins.d.ts +0 -1
- package/plugins.js +1 -2
- package/redux/middlewares/checkout.ts +11 -71
- package/redux/reducers/checkout.ts +3 -23
- package/types/commerce/address.ts +1 -1
- package/types/commerce/b2b.ts +2 -12
- package/types/commerce/checkout.ts +0 -30
- package/types/commerce/order.ts +0 -1
- package/types/index.ts +2 -17
- package/utils/app-fetch.ts +8 -16
- package/utils/generate-commerce-search-params.ts +1 -3
- package/utils/index.ts +6 -27
- package/utils/server-translation.ts +1 -11
- package/with-pz-config.js +2 -13
- package/assets/styles/index.css +0 -49
- package/assets/styles/index.css.map +0 -1
- package/bin/pz-generate-translations.js +0 -41
- package/components/file-input.tsx +0 -8
- package/hooks/use-message-listener.ts +0 -24
- package/lib/cache-handler.mjs +0 -33
- package/routes/pretty-url.tsx +0 -192
- package/utils/redirection-iframe.ts +0 -85
package/assets/styles/index.scss
CHANGED
|
@@ -1,53 +1,29 @@
|
|
|
1
1
|
.checkout-payment-iframe-wrapper {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
iframe {
|
|
12
|
+
width: 100%;
|
|
13
|
+
height: 100%;
|
|
14
|
+
border: none;
|
|
15
|
+
background-color: white;
|
|
16
|
+
}
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
+
}
|
package/bin/pz-prebuild.js
CHANGED
package/bin/pz-predev.js
CHANGED
package/components/index.ts
CHANGED
package/components/input.tsx
CHANGED
|
@@ -1,30 +1,17 @@
|
|
|
1
1
|
import clsx from 'clsx';
|
|
2
|
-
import { forwardRef, FocusEvent, useState
|
|
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
|
-
|
|
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
|
-
<
|
|
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
|
/>
|
package/components/link.tsx
CHANGED
|
@@ -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 (
|
|
21
|
-
return
|
|
18
|
+
if (typeof href !== 'string' || href.startsWith('http')) {
|
|
19
|
+
return href;
|
|
22
20
|
}
|
|
23
21
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const hrefWithLocale = `/${locale}${pathnameWithoutLocale}`;
|
|
22
|
+
const pathnameWithoutLocale = href.replace(urlLocaleMatcherRegex, '');
|
|
23
|
+
const hrefWithLocale = `/${locale}${pathnameWithoutLocale}`;
|
|
27
24
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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 (
|
package/components/price.tsx
CHANGED
|
@@ -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:
|
|
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
|
-
<
|
|
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={
|
|
49
|
+
decimalScale={decimalScale}
|
|
57
50
|
decimalSeparator={decimalSeparator}
|
|
58
51
|
fixedDecimalScale={fixedDecimalScale}
|
|
59
52
|
{...rest}
|
package/components/pz-root.tsx
CHANGED
|
@@ -3,29 +3,17 @@ import ClientRoot from './client-root';
|
|
|
3
3
|
import { cookies } from 'next/headers';
|
|
4
4
|
import PzProviders from './pz-providers';
|
|
5
5
|
import { WebVitals } from './web-vitals';
|
|
6
|
-
import settings from 'settings';
|
|
7
6
|
|
|
8
|
-
export default
|
|
7
|
+
export default function PzRoot({
|
|
9
8
|
translations,
|
|
10
|
-
children
|
|
11
|
-
locale
|
|
9
|
+
children
|
|
12
10
|
}: {
|
|
13
|
-
translations
|
|
11
|
+
translations: any;
|
|
14
12
|
children: React.ReactNode;
|
|
15
|
-
locale?: string;
|
|
16
13
|
}) {
|
|
17
14
|
const nextCookies = cookies();
|
|
18
15
|
const sessionid = nextCookies.get('osessionid')?.value;
|
|
19
16
|
|
|
20
|
-
if (!translations) {
|
|
21
|
-
const { getTranslations } =
|
|
22
|
-
settings.useOptimizedTranslations && locale
|
|
23
|
-
? require('translations')
|
|
24
|
-
: require('../utils/server-translation');
|
|
25
|
-
|
|
26
|
-
translations = await getTranslations(locale);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
17
|
return (
|
|
30
18
|
<PzProviders translations={translations}>
|
|
31
19
|
<WebVitals />
|
|
@@ -44,7 +44,8 @@ export default function SelectedPaymentOptionView() {
|
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
const view = paymentTypeToView[payment_option?.payment_type];
|
|
47
|
+
const view = paymentTypeToView[payment_option?.payment_type] || null;
|
|
48
|
+
|
|
48
49
|
if (view) {
|
|
49
50
|
try {
|
|
50
51
|
const mod = await import(
|
package/data/client/api.ts
CHANGED
package/data/client/b2b.ts
CHANGED
|
@@ -12,9 +12,7 @@ import {
|
|
|
12
12
|
SaveBasketParams,
|
|
13
13
|
UpdateProductParams,
|
|
14
14
|
DeleteProductParams,
|
|
15
|
-
CreateQuotationParams
|
|
16
|
-
BasketStatusResponse,
|
|
17
|
-
ExportBasketResponse
|
|
15
|
+
CreateQuotationParams
|
|
18
16
|
} from '../../types';
|
|
19
17
|
|
|
20
18
|
const b2bApi = api.injectEndpoints({
|
|
@@ -91,34 +89,6 @@ const b2bApi = api.injectEndpoints({
|
|
|
91
89
|
}),
|
|
92
90
|
invalidatesTags: ['BasketB2b', 'DraftsB2b']
|
|
93
91
|
}),
|
|
94
|
-
exportBasket: build.mutation<ExportBasketResponse, string>({
|
|
95
|
-
query: (queryString) => {
|
|
96
|
-
return {
|
|
97
|
-
url: buildClientRequestUrl(b2b.basketExport(queryString)),
|
|
98
|
-
method: 'GET'
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
}),
|
|
102
|
-
getBasketStatus: build.mutation<BasketStatusResponse, string>({
|
|
103
|
-
query: (cacheKey) => {
|
|
104
|
-
return {
|
|
105
|
-
url: buildClientRequestUrl(b2b.statusBasket(cacheKey)),
|
|
106
|
-
method: 'GET'
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
}),
|
|
110
|
-
uploadFile: build.mutation<void, FormData>({
|
|
111
|
-
query: (body) => {
|
|
112
|
-
return {
|
|
113
|
-
url: buildClientRequestUrl(b2b.basketImport, {
|
|
114
|
-
useFormData: true
|
|
115
|
-
}),
|
|
116
|
-
method: 'POST',
|
|
117
|
-
body
|
|
118
|
-
};
|
|
119
|
-
},
|
|
120
|
-
invalidatesTags: ['BasketB2b']
|
|
121
|
-
})
|
|
122
92
|
}),
|
|
123
93
|
overrideExisting: true
|
|
124
94
|
});
|
|
@@ -132,8 +102,5 @@ export const {
|
|
|
132
102
|
useLoadBasketMutation,
|
|
133
103
|
useUpdateProductMutation,
|
|
134
104
|
useDeleteProductMutation,
|
|
135
|
-
useCreateQuotationMutation
|
|
136
|
-
useGetBasketStatusMutation,
|
|
137
|
-
useExportBasketMutation,
|
|
138
|
-
useUploadFileMutation
|
|
105
|
+
useCreateQuotationMutation
|
|
139
106
|
} = b2bApi;
|
package/data/client/basket.ts
CHANGED
|
@@ -28,7 +28,7 @@ export const basketApi = api.injectEndpoints({
|
|
|
28
28
|
query: ({ namespace }) =>
|
|
29
29
|
buildClientRequestUrl(basket.getBasketDetail(namespace)),
|
|
30
30
|
transformResponse: (response: { basket: Basket }) => response.basket,
|
|
31
|
-
providesTags: ['
|
|
31
|
+
providesTags: ['AllBaskets']
|
|
32
32
|
}),
|
|
33
33
|
getAllBaskets: build.query<Basket[], void>({
|
|
34
34
|
query: () =>
|
|
@@ -36,7 +36,7 @@ export const basketApi = api.injectEndpoints({
|
|
|
36
36
|
contentType: 'application/json'
|
|
37
37
|
}),
|
|
38
38
|
transformResponse: (response: { baskets: Basket[] }) => response.baskets,
|
|
39
|
-
providesTags: ['
|
|
39
|
+
providesTags: ['AllBaskets']
|
|
40
40
|
}),
|
|
41
41
|
removeBasket: build.mutation<Basket, { pk: number }>({
|
|
42
42
|
query: ({ pk }) => ({
|
|
@@ -46,7 +46,7 @@ export const basketApi = api.injectEndpoints({
|
|
|
46
46
|
method: 'DELETE',
|
|
47
47
|
body: { pk }
|
|
48
48
|
}),
|
|
49
|
-
invalidatesTags: ['
|
|
49
|
+
invalidatesTags: ['AllBaskets', 'Basket']
|
|
50
50
|
}),
|
|
51
51
|
selectMainBasket: build.mutation<Basket, { pk: number }>({
|
|
52
52
|
query: ({ pk }) => ({
|
|
@@ -57,7 +57,7 @@ export const basketApi = api.injectEndpoints({
|
|
|
57
57
|
body: { pk }
|
|
58
58
|
}),
|
|
59
59
|
transformResponse: (response: { baskets: Basket }) => response.baskets,
|
|
60
|
-
invalidatesTags: ['
|
|
60
|
+
invalidatesTags: ['AllBaskets', 'Basket']
|
|
61
61
|
}),
|
|
62
62
|
updateQuantity: build.mutation<
|
|
63
63
|
UpdateQuantityResponse,
|
|
@@ -69,8 +69,7 @@ export const basketApi = api.injectEndpoints({
|
|
|
69
69
|
}),
|
|
70
70
|
method: 'PUT',
|
|
71
71
|
body
|
|
72
|
-
})
|
|
73
|
-
invalidatesTags: ['MultiBasket', 'Basket']
|
|
72
|
+
})
|
|
74
73
|
}),
|
|
75
74
|
clearBasket: build.mutation<Basket, void>({
|
|
76
75
|
query: (body) => ({
|
package/data/client/checkout.ts
CHANGED
|
@@ -380,22 +380,6 @@ export const checkoutApi = api.injectEndpoints({
|
|
|
380
380
|
dispatch(setShippingStepBusy(false));
|
|
381
381
|
}
|
|
382
382
|
}),
|
|
383
|
-
setDataSourceShippingOptions: build.mutation<CheckoutResponse, number[]>({
|
|
384
|
-
query: (pks) => ({
|
|
385
|
-
url: buildClientRequestUrl(checkout.setDataSourceShippingOption, {
|
|
386
|
-
useFormData: true
|
|
387
|
-
}),
|
|
388
|
-
method: 'POST',
|
|
389
|
-
body: {
|
|
390
|
-
data_source_shipping_options: JSON.stringify(pks)
|
|
391
|
-
}
|
|
392
|
-
}),
|
|
393
|
-
async onQueryStarted(arg, { dispatch, queryFulfilled }) {
|
|
394
|
-
dispatch(setShippingStepBusy(true));
|
|
395
|
-
await queryFulfilled;
|
|
396
|
-
dispatch(setShippingStepBusy(false));
|
|
397
|
-
}
|
|
398
|
-
}),
|
|
399
383
|
setRetailStore: build.mutation<CheckoutResponse, SetRetailStoreParams>({
|
|
400
384
|
query: ({ retailStorePk, billingAddressPk }) => ({
|
|
401
385
|
url: buildClientRequestUrl(
|
|
@@ -697,25 +681,6 @@ export const checkoutApi = api.injectEndpoints({
|
|
|
697
681
|
};
|
|
698
682
|
}
|
|
699
683
|
}),
|
|
700
|
-
setAttributeBasedShippingOptions: build.mutation<
|
|
701
|
-
CheckoutResponse,
|
|
702
|
-
Record<string, number>
|
|
703
|
-
>({
|
|
704
|
-
query: (options) => ({
|
|
705
|
-
url: buildClientRequestUrl(checkout.setAttributeBasedShippingOption, {
|
|
706
|
-
useFormData: true
|
|
707
|
-
}),
|
|
708
|
-
method: 'POST',
|
|
709
|
-
body: {
|
|
710
|
-
attribute_based_shipping_options: JSON.stringify(options)
|
|
711
|
-
}
|
|
712
|
-
}),
|
|
713
|
-
async onQueryStarted(arg, { dispatch, queryFulfilled }) {
|
|
714
|
-
dispatch(setShippingStepBusy(true));
|
|
715
|
-
await queryFulfilled;
|
|
716
|
-
dispatch(setShippingStepBusy(false));
|
|
717
|
-
}
|
|
718
|
-
}),
|
|
719
684
|
setOrderSelectionPage: build.mutation<
|
|
720
685
|
CheckoutResponse,
|
|
721
686
|
{ extra_field: ExtraField }
|
|
@@ -747,7 +712,6 @@ export const {
|
|
|
747
712
|
useSetDeliveryOptionMutation,
|
|
748
713
|
useSetAddressesMutation,
|
|
749
714
|
useSetShippingOptionMutation,
|
|
750
|
-
useSetDataSourceShippingOptionsMutation,
|
|
751
715
|
useSetPaymentOptionMutation,
|
|
752
716
|
useSetBinNumberMutation,
|
|
753
717
|
useSetInstallmentOptionMutation,
|
|
@@ -766,6 +730,5 @@ export const {
|
|
|
766
730
|
usePayWithLoyaltyBalanceMutation,
|
|
767
731
|
useSetOrderNoteMutation,
|
|
768
732
|
useSetDeliveryBagsMutation,
|
|
769
|
-
useSetAttributeBasedShippingOptionsMutation,
|
|
770
733
|
useSetOrderSelectionPageMutation
|
|
771
734
|
} = checkoutApi;
|
package/data/client/user.ts
CHANGED
|
@@ -22,12 +22,11 @@ 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
|
|
26
|
-
|
|
25
|
+
const siteKeyMatch = response.html.match(/sitekey=["|'][^"']+/gi);
|
|
27
26
|
const csrfTokenMatch = response.html.match(
|
|
28
27
|
/name=['|"]csrfmiddlewaretoken['|"] value=['|"][^'"]+/gi
|
|
29
28
|
);
|
|
30
|
-
|
|
29
|
+
const siteKey = siteKeyMatch?.[0].replace(/sitekey=["|']/, '') || '';
|
|
31
30
|
const csrfToken =
|
|
32
31
|
csrfTokenMatch?.[0].replace(
|
|
33
32
|
/name=['|"]csrfmiddlewaretoken['|"] value=['|"]/gi,
|
package/data/server/category.ts
CHANGED
|
@@ -5,32 +5,26 @@ 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';
|
|
10
8
|
|
|
11
9
|
function getCategoryDataHandler(
|
|
12
10
|
pk: number,
|
|
13
|
-
locale: string,
|
|
14
|
-
currency: string,
|
|
15
11
|
searchParams?: URLSearchParams,
|
|
16
12
|
headers?: Record<string, string>
|
|
17
13
|
) {
|
|
18
14
|
return async function () {
|
|
19
15
|
const params = generateCommerceSearchParams(searchParams);
|
|
20
16
|
|
|
21
|
-
const rawData = await appFetch<string>(
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
currency,
|
|
25
|
-
init: {
|
|
17
|
+
const rawData = await appFetch<string>(
|
|
18
|
+
`${category.getCategoryByPk(pk)}${params ? params : ''}`,
|
|
19
|
+
{
|
|
26
20
|
headers: {
|
|
27
21
|
Accept: 'application/json',
|
|
28
22
|
'Content-Type': 'application/json',
|
|
29
23
|
...(headers ?? {})
|
|
30
24
|
}
|
|
31
25
|
},
|
|
32
|
-
|
|
33
|
-
|
|
26
|
+
FetchResponseType.TEXT
|
|
27
|
+
);
|
|
34
28
|
|
|
35
29
|
let data: GetCategoryResponse;
|
|
36
30
|
|
|
@@ -64,17 +58,15 @@ function getCategoryDataHandler(
|
|
|
64
58
|
return { data, breadcrumbData: undefined };
|
|
65
59
|
}
|
|
66
60
|
|
|
67
|
-
const breadcrumbData = await appFetch<any>(
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
currency,
|
|
71
|
-
init: {
|
|
61
|
+
const breadcrumbData = await appFetch<any>(
|
|
62
|
+
product.breadcrumbUrl(menuItemModel),
|
|
63
|
+
{
|
|
72
64
|
headers: {
|
|
73
65
|
Accept: 'application/json',
|
|
74
66
|
'Content-Type': 'application/json'
|
|
75
67
|
}
|
|
76
68
|
}
|
|
77
|
-
|
|
69
|
+
);
|
|
78
70
|
|
|
79
71
|
return { data, breadcrumbData: breadcrumbData?.menu };
|
|
80
72
|
};
|
|
@@ -83,44 +75,33 @@ function getCategoryDataHandler(
|
|
|
83
75
|
export const getCategoryData = ({
|
|
84
76
|
pk,
|
|
85
77
|
searchParams,
|
|
86
|
-
headers
|
|
87
|
-
locale = ServerVariables.locale,
|
|
88
|
-
currency = ServerVariables.currency
|
|
78
|
+
headers
|
|
89
79
|
}: {
|
|
90
80
|
pk: number;
|
|
91
|
-
locale?: string;
|
|
92
|
-
currency?: string;
|
|
93
81
|
searchParams?: URLSearchParams;
|
|
94
82
|
headers?: Record<string, string>;
|
|
95
83
|
}) => {
|
|
96
84
|
return Cache.wrap(
|
|
97
85
|
CacheKey.Category(pk, searchParams, headers),
|
|
98
|
-
|
|
99
|
-
getCategoryDataHandler(pk, locale, currency, searchParams, headers),
|
|
86
|
+
getCategoryDataHandler(pk, searchParams, headers),
|
|
100
87
|
{
|
|
101
88
|
expire: 300
|
|
102
89
|
}
|
|
103
90
|
);
|
|
104
91
|
};
|
|
105
92
|
|
|
106
|
-
function getCategoryBySlugDataHandler(
|
|
107
|
-
slug: string,
|
|
108
|
-
locale: string,
|
|
109
|
-
currency: string
|
|
110
|
-
) {
|
|
93
|
+
function getCategoryBySlugDataHandler(slug: string) {
|
|
111
94
|
return async function () {
|
|
112
|
-
const rawData = await appFetch<string>(
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
currency,
|
|
116
|
-
init: {
|
|
95
|
+
const rawData = await appFetch<string>(
|
|
96
|
+
category.getCategoryBySlug(slug),
|
|
97
|
+
{
|
|
117
98
|
headers: {
|
|
118
99
|
Accept: 'application/json',
|
|
119
100
|
'Content-Type': 'application/json'
|
|
120
101
|
}
|
|
121
102
|
},
|
|
122
|
-
|
|
123
|
-
|
|
103
|
+
FetchResponseType.TEXT
|
|
104
|
+
);
|
|
124
105
|
|
|
125
106
|
let data: GetCategoryResponse;
|
|
126
107
|
|
|
@@ -148,15 +129,10 @@ function getCategoryBySlugDataHandler(
|
|
|
148
129
|
};
|
|
149
130
|
}
|
|
150
131
|
|
|
151
|
-
export const getCategoryBySlugData = async ({
|
|
152
|
-
slug,
|
|
153
|
-
locale = ServerVariables.locale,
|
|
154
|
-
currency = ServerVariables.currency
|
|
155
|
-
}) => {
|
|
132
|
+
export const getCategoryBySlugData = async ({ slug }) => {
|
|
156
133
|
return Cache.wrap(
|
|
157
134
|
CacheKey.CategorySlug(slug),
|
|
158
|
-
|
|
159
|
-
getCategoryBySlugDataHandler(slug, locale, currency),
|
|
135
|
+
getCategoryBySlugDataHandler(slug),
|
|
160
136
|
{
|
|
161
137
|
expire: 300
|
|
162
138
|
}
|
package/data/server/flatpage.ts
CHANGED
|
@@ -2,23 +2,13 @@ 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';
|
|
6
5
|
|
|
7
|
-
const getFlatPageDataHandler = (
|
|
8
|
-
pk: number,
|
|
9
|
-
locale: string,
|
|
10
|
-
currency: string
|
|
11
|
-
) => {
|
|
6
|
+
const getFlatPageDataHandler = (pk: number) => {
|
|
12
7
|
return async function () {
|
|
13
|
-
const data = await appFetch<FlatPage>({
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
init: {
|
|
18
|
-
headers: {
|
|
19
|
-
Accept: 'application/json',
|
|
20
|
-
'Content-Type': 'application/json'
|
|
21
|
-
}
|
|
8
|
+
const data = await appFetch<FlatPage>(flatpage.getFlatPageByPk(pk), {
|
|
9
|
+
headers: {
|
|
10
|
+
Accept: 'application/json',
|
|
11
|
+
'Content-Type': 'application/json'
|
|
22
12
|
}
|
|
23
13
|
});
|
|
24
14
|
|
|
@@ -26,18 +16,6 @@ const getFlatPageDataHandler = (
|
|
|
26
16
|
};
|
|
27
17
|
};
|
|
28
18
|
|
|
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
|
-
);
|
|
19
|
+
export const getFlatPageData = ({ pk }: { pk: number }) => {
|
|
20
|
+
return Cache.wrap(CacheKey.FlatPage(pk), getFlatPageDataHandler(pk));
|
|
43
21
|
};
|