@akinon/next 1.13.0 → 1.14.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/.editorconfig +7 -0
- package/.eslintrc.js +40 -40
- package/.prettierrc +13 -13
- package/CHANGELOG.md +19 -0
- package/api/auth.ts +231 -231
- package/api/cache.ts +44 -44
- package/api/client.ts +174 -174
- package/api/logout.ts +42 -42
- package/assets/styles/index.scss +28 -28
- package/bin/pz-check-dependencies.js +98 -98
- package/bin/pz-install-plugins.js +33 -33
- package/bin/pz-install-theme.js +58 -58
- package/bin/pz-postbuild.js +1 -1
- package/bin/pz-postdev.js +1 -1
- package/bin/pz-postinstall.js +6 -6
- package/bin/pz-poststart.js +1 -1
- package/bin/pz-prebuild.js +4 -4
- package/bin/pz-predev.js +4 -4
- package/bin/pz-prestart.js +1 -1
- package/bin/run-script.js +44 -44
- package/components/accordion.tsx +52 -0
- package/components/button.tsx +46 -0
- package/components/client-root.tsx +19 -19
- package/components/icon.tsx +18 -18
- package/components/image.tsx +133 -133
- package/components/index.ts +17 -1
- package/components/input.tsx +110 -0
- package/components/lazy-component.tsx +33 -33
- package/components/loader-spinner.tsx +23 -23
- package/components/mobile-app-toggler.tsx +26 -26
- package/components/oauth-login.tsx +24 -24
- package/components/plugin-module.tsx +11 -8
- package/components/price.tsx +55 -0
- package/components/pz-providers.tsx +24 -24
- package/components/pz-root.tsx +21 -21
- package/components/radio.tsx +18 -18
- package/components/react-portal.tsx +45 -45
- package/components/redirect-three-d/content/index.tsx +74 -74
- package/components/redirect-three-d/index.tsx +17 -17
- package/components/selected-payment-option-view.tsx +7 -0
- package/components/trans.tsx +39 -39
- package/data/client/account.ts +208 -208
- package/data/client/address.ts +107 -107
- package/data/client/api.ts +85 -84
- package/data/client/b2b.ts +106 -106
- package/data/client/basket.ts +82 -82
- package/data/client/checkout.ts +516 -479
- package/data/client/misc.ts +101 -101
- package/data/client/product.ts +89 -89
- package/data/client/user.ts +99 -99
- package/data/client/wishlist.ts +118 -88
- package/data/server/category.ts +132 -128
- package/data/server/flatpage.ts +21 -21
- package/data/server/form.ts +22 -22
- package/data/server/index.ts +10 -10
- package/data/server/landingpage.ts +24 -24
- package/data/server/list.ts +67 -62
- package/data/server/menu.ts +35 -35
- package/data/server/product.ts +86 -86
- package/data/server/seo.ts +48 -48
- package/data/server/special-page.ts +47 -47
- package/data/server/widget.ts +27 -27
- package/data/urls.ts +221 -210
- package/hocs/client/index.ts +1 -1
- package/hocs/client/with-segment-defaults.tsx +25 -25
- package/hocs/server/index.ts +1 -1
- package/hocs/server/with-segment-defaults.tsx +85 -85
- package/hooks/index.ts +10 -10
- package/hooks/use-captcha.tsx +76 -76
- package/hooks/use-common-product-attributes.ts +36 -36
- package/hooks/use-debounce.ts +20 -20
- package/hooks/use-localization.ts +78 -78
- package/hooks/use-media-query.ts +36 -36
- package/hooks/use-mobile-iframe-handler.ts +23 -23
- package/hooks/use-on-click-outside.tsx +28 -28
- package/hooks/use-payment-options.ts +12 -16
- package/hooks/use-router.ts +45 -45
- package/hooks/use-translation.ts +14 -14
- package/lib/cache.ts +215 -215
- package/localization/index.ts +5 -5
- package/localization/provider.tsx +58 -58
- package/middlewares/currency.ts +100 -100
- package/middlewares/default.ts +256 -256
- package/middlewares/index.ts +29 -29
- package/middlewares/locale.ts +68 -68
- package/middlewares/oauth-login.ts +79 -79
- package/middlewares/pretty-url.ts +104 -104
- package/middlewares/redirection-payment.ts +160 -160
- package/middlewares/three-d-redirection.ts +159 -159
- package/middlewares/url-redirection.ts +65 -65
- package/package.json +2 -2
- package/plugins.js +2 -1
- package/redux/hooks.ts +7 -7
- package/redux/middlewares/checkout.ts +265 -260
- package/redux/middlewares/index.ts +50 -50
- package/redux/reducers/checkout.ts +184 -171
- package/redux/reducers/config.ts +28 -28
- package/redux/reducers/header.ts +59 -59
- package/redux/reducers/index.ts +14 -14
- package/redux/reducers/root.ts +61 -61
- package/sentry/index.ts +27 -27
- package/tailwind/rtl.js +137 -137
- package/types/commerce/account.ts +64 -64
- package/types/commerce/address.ts +94 -94
- package/types/commerce/b2b.ts +117 -117
- package/types/commerce/basket.ts +43 -43
- package/types/commerce/category.ts +114 -114
- package/types/commerce/checkout.ts +143 -136
- package/types/commerce/flatpage.ts +7 -7
- package/types/commerce/form.ts +66 -66
- package/types/commerce/index.ts +12 -12
- package/types/commerce/landingpage.ts +7 -7
- package/types/commerce/misc.ts +127 -127
- package/types/commerce/order.ts +119 -119
- package/types/commerce/product.ts +109 -109
- package/types/commerce/widget.ts +28 -28
- package/types/gtm.ts +16 -16
- package/types/index.ts +274 -237
- package/types/metadata.ts +7 -7
- package/types/next-auth.d.ts +24 -24
- package/utils/app-fetch.ts +69 -69
- package/utils/deep-merge.js +24 -24
- package/utils/generate-commerce-search-params.ts +22 -22
- package/utils/get-currency.ts +29 -29
- package/utils/image-loader.ts +31 -31
- package/utils/index.ts +150 -150
- package/utils/localization.ts +29 -29
- package/utils/log.ts +138 -138
- package/utils/menu-generator.ts +27 -27
- package/utils/mobile-3d-iframe.ts +77 -77
- package/utils/server-translation.ts +57 -57
- package/utils/server-variables.ts +9 -9
- package/with-pz-config.js +94 -94
package/data/server/list.ts
CHANGED
|
@@ -1,62 +1,67 @@
|
|
|
1
|
-
import { Cache, CacheKey } from '../../lib/cache';
|
|
2
|
-
import { category } from '../urls';
|
|
3
|
-
import { GetCategoryResponse } from '../../types';
|
|
4
|
-
import { generateCommerceSearchParams } from '../../utils';
|
|
5
|
-
import appFetch, { FetchResponseType } from '../../utils/app-fetch';
|
|
6
|
-
import { parse } from 'lossless-json';
|
|
7
|
-
import logger from '../../utils/log';
|
|
8
|
-
|
|
9
|
-
const getListDataHandler = (
|
|
10
|
-
searchParams: URLSearchParams,
|
|
11
|
-
headers?: Record<string, string>
|
|
12
|
-
) => {
|
|
13
|
-
return async function () {
|
|
14
|
-
const params = generateCommerceSearchParams(searchParams);
|
|
15
|
-
|
|
16
|
-
const rawData = await appFetch<string>(
|
|
17
|
-
`${category.list}${params}`,
|
|
18
|
-
{
|
|
19
|
-
headers: {
|
|
20
|
-
Accept: 'application/json',
|
|
21
|
-
'Content-Type': 'application/json',
|
|
22
|
-
...(headers ?? {})
|
|
23
|
-
}
|
|
24
|
-
},
|
|
25
|
-
FetchResponseType.TEXT
|
|
26
|
-
);
|
|
27
|
-
|
|
28
|
-
let data: GetCategoryResponse;
|
|
29
|
-
|
|
30
|
-
try {
|
|
31
|
-
const numberValueParser = (value) => {
|
|
32
|
-
return String(value);
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
data = parse(
|
|
36
|
-
rawData,
|
|
37
|
-
undefined,
|
|
38
|
-
numberValueParser
|
|
39
|
-
) as GetCategoryResponse;
|
|
40
|
-
} catch (error) {
|
|
41
|
-
logger.error('Error while parsing list data', {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
1
|
+
import { Cache, CacheKey } from '../../lib/cache';
|
|
2
|
+
import { category } from '../urls';
|
|
3
|
+
import { GetCategoryResponse } from '../../types';
|
|
4
|
+
import { generateCommerceSearchParams } from '../../utils';
|
|
5
|
+
import appFetch, { FetchResponseType } from '../../utils/app-fetch';
|
|
6
|
+
import { parse } from 'lossless-json';
|
|
7
|
+
import logger from '../../utils/log';
|
|
8
|
+
|
|
9
|
+
const getListDataHandler = (
|
|
10
|
+
searchParams: URLSearchParams,
|
|
11
|
+
headers?: Record<string, string>
|
|
12
|
+
) => {
|
|
13
|
+
return async function () {
|
|
14
|
+
const params = generateCommerceSearchParams(searchParams);
|
|
15
|
+
|
|
16
|
+
const rawData = await appFetch<string>(
|
|
17
|
+
`${category.list}${params}`,
|
|
18
|
+
{
|
|
19
|
+
headers: {
|
|
20
|
+
Accept: 'application/json',
|
|
21
|
+
'Content-Type': 'application/json',
|
|
22
|
+
...(headers ?? {})
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
FetchResponseType.TEXT
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
let data: GetCategoryResponse;
|
|
29
|
+
|
|
30
|
+
try {
|
|
31
|
+
const numberValueParser = (value) => {
|
|
32
|
+
return String(value);
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
data = parse(
|
|
36
|
+
rawData,
|
|
37
|
+
undefined,
|
|
38
|
+
numberValueParser
|
|
39
|
+
) as GetCategoryResponse;
|
|
40
|
+
} catch (error) {
|
|
41
|
+
logger.error('Error while parsing list data', {
|
|
42
|
+
error,
|
|
43
|
+
rawData: rawData.startsWith('<!DOCTYPE html>')
|
|
44
|
+
? `${rawData.substring(0, 50)}...`
|
|
45
|
+
: rawData
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return data;
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export const getListData = async ({
|
|
54
|
+
searchParams,
|
|
55
|
+
headers
|
|
56
|
+
}: {
|
|
57
|
+
searchParams: URLSearchParams;
|
|
58
|
+
headers?: Record<string, string>;
|
|
59
|
+
}) => {
|
|
60
|
+
return Cache.wrap(
|
|
61
|
+
CacheKey.List(searchParams, headers),
|
|
62
|
+
getListDataHandler(searchParams, headers),
|
|
63
|
+
{
|
|
64
|
+
expire: 300
|
|
65
|
+
}
|
|
66
|
+
);
|
|
67
|
+
};
|
package/data/server/menu.ts
CHANGED
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
import { Cache, CacheKey } from '../../lib/cache';
|
|
2
|
-
import { MenuItemType } from '../../types';
|
|
3
|
-
import appFetch from '../../utils/app-fetch';
|
|
4
|
-
import { misc } from '../urls';
|
|
5
|
-
|
|
6
|
-
interface MenuResponse {
|
|
7
|
-
menu: MenuItemType[];
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
interface MenuHandlerParams {
|
|
11
|
-
depth?: number;
|
|
12
|
-
parent?: string;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
const DEFAULT_DEPTH = 3;
|
|
16
|
-
|
|
17
|
-
const getMenuHandler =
|
|
18
|
-
({ depth, parent }: MenuHandlerParams = { depth: DEFAULT_DEPTH }) =>
|
|
19
|
-
async () => {
|
|
20
|
-
const response = await appFetch<MenuResponse>(misc.menus(depth, parent));
|
|
21
|
-
|
|
22
|
-
return response?.menu;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Returns menu data.
|
|
27
|
-
*
|
|
28
|
-
* Default depth is 3
|
|
29
|
-
*/
|
|
30
|
-
export const getMenu = async (params?: MenuHandlerParams) => {
|
|
31
|
-
return Cache.wrap(
|
|
32
|
-
CacheKey.Menu(params?.depth ?? DEFAULT_DEPTH, params?.parent),
|
|
33
|
-
getMenuHandler(params)
|
|
34
|
-
);
|
|
35
|
-
};
|
|
1
|
+
import { Cache, CacheKey } from '../../lib/cache';
|
|
2
|
+
import { MenuItemType } from '../../types';
|
|
3
|
+
import appFetch from '../../utils/app-fetch';
|
|
4
|
+
import { misc } from '../urls';
|
|
5
|
+
|
|
6
|
+
interface MenuResponse {
|
|
7
|
+
menu: MenuItemType[];
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
interface MenuHandlerParams {
|
|
11
|
+
depth?: number;
|
|
12
|
+
parent?: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const DEFAULT_DEPTH = 3;
|
|
16
|
+
|
|
17
|
+
const getMenuHandler =
|
|
18
|
+
({ depth, parent }: MenuHandlerParams = { depth: DEFAULT_DEPTH }) =>
|
|
19
|
+
async () => {
|
|
20
|
+
const response = await appFetch<MenuResponse>(misc.menus(depth, parent));
|
|
21
|
+
|
|
22
|
+
return response?.menu;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Returns menu data.
|
|
27
|
+
*
|
|
28
|
+
* Default depth is 3
|
|
29
|
+
*/
|
|
30
|
+
export const getMenu = async (params?: MenuHandlerParams) => {
|
|
31
|
+
return Cache.wrap(
|
|
32
|
+
CacheKey.Menu(params?.depth ?? DEFAULT_DEPTH, params?.parent),
|
|
33
|
+
getMenuHandler(params)
|
|
34
|
+
);
|
|
35
|
+
};
|
package/data/server/product.ts
CHANGED
|
@@ -1,86 +1,86 @@
|
|
|
1
|
-
import { Cache, CacheKey } from '../../lib/cache';
|
|
2
|
-
import { product } from '../urls';
|
|
3
|
-
import {
|
|
4
|
-
BreadcrumbResultType,
|
|
5
|
-
ProductCategoryResult,
|
|
6
|
-
ProductResult
|
|
7
|
-
} from '../../types';
|
|
8
|
-
import appFetch from '../../utils/app-fetch';
|
|
9
|
-
|
|
10
|
-
type GetProduct = {
|
|
11
|
-
pk: number;
|
|
12
|
-
searchParams?: URLSearchParams;
|
|
13
|
-
groupProduct?: boolean;
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
const getProductDataHandler = ({
|
|
17
|
-
pk,
|
|
18
|
-
searchParams,
|
|
19
|
-
groupProduct
|
|
20
|
-
}: GetProduct) => {
|
|
21
|
-
return async function () {
|
|
22
|
-
let url = groupProduct
|
|
23
|
-
? product.getGroupProductByPk(pk)
|
|
24
|
-
: product.getProductByPk(pk);
|
|
25
|
-
|
|
26
|
-
if (searchParams) {
|
|
27
|
-
url +=
|
|
28
|
-
'?' +
|
|
29
|
-
Object.keys(searchParams)
|
|
30
|
-
.map((key) => `${key}=${searchParams[key]}`)
|
|
31
|
-
.join('&');
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const data = await appFetch<ProductResult>(url, {
|
|
35
|
-
headers: {
|
|
36
|
-
Accept: 'application/json',
|
|
37
|
-
'Content-Type': 'application/json'
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
const categoryUrl = product.categoryUrl(data.product.pk);
|
|
42
|
-
|
|
43
|
-
const productCategoryData = await appFetch<ProductCategoryResult>(
|
|
44
|
-
categoryUrl,
|
|
45
|
-
{
|
|
46
|
-
headers: {
|
|
47
|
-
Accept: 'application/json',
|
|
48
|
-
'Content-Type': 'application/json'
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
);
|
|
52
|
-
|
|
53
|
-
const breadcrumbUrl = product.breadcrumbUrl(
|
|
54
|
-
productCategoryData.results[0].menuitemmodel
|
|
55
|
-
);
|
|
56
|
-
|
|
57
|
-
const breadcrumbData = await appFetch<any>(breadcrumbUrl, {
|
|
58
|
-
headers: {
|
|
59
|
-
Accept: 'application/json',
|
|
60
|
-
'Content-Type': 'application/json'
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
return {
|
|
65
|
-
data,
|
|
66
|
-
breadcrumbData: breadcrumbData?.menu
|
|
67
|
-
};
|
|
68
|
-
};
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
export const getProductData = async ({
|
|
72
|
-
pk,
|
|
73
|
-
searchParams,
|
|
74
|
-
groupProduct
|
|
75
|
-
}: GetProduct) => {
|
|
76
|
-
return Cache.wrap(
|
|
77
|
-
CacheKey[groupProduct ? 'GroupProduct' : 'Product'](
|
|
78
|
-
pk,
|
|
79
|
-
searchParams ?? new URLSearchParams()
|
|
80
|
-
),
|
|
81
|
-
getProductDataHandler({ pk, searchParams, groupProduct }),
|
|
82
|
-
{
|
|
83
|
-
expire: 300
|
|
84
|
-
}
|
|
85
|
-
);
|
|
86
|
-
};
|
|
1
|
+
import { Cache, CacheKey } from '../../lib/cache';
|
|
2
|
+
import { product } from '../urls';
|
|
3
|
+
import {
|
|
4
|
+
BreadcrumbResultType,
|
|
5
|
+
ProductCategoryResult,
|
|
6
|
+
ProductResult
|
|
7
|
+
} from '../../types';
|
|
8
|
+
import appFetch from '../../utils/app-fetch';
|
|
9
|
+
|
|
10
|
+
type GetProduct = {
|
|
11
|
+
pk: number;
|
|
12
|
+
searchParams?: URLSearchParams;
|
|
13
|
+
groupProduct?: boolean;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const getProductDataHandler = ({
|
|
17
|
+
pk,
|
|
18
|
+
searchParams,
|
|
19
|
+
groupProduct
|
|
20
|
+
}: GetProduct) => {
|
|
21
|
+
return async function () {
|
|
22
|
+
let url = groupProduct
|
|
23
|
+
? product.getGroupProductByPk(pk)
|
|
24
|
+
: product.getProductByPk(pk);
|
|
25
|
+
|
|
26
|
+
if (searchParams) {
|
|
27
|
+
url +=
|
|
28
|
+
'?' +
|
|
29
|
+
Object.keys(searchParams)
|
|
30
|
+
.map((key) => `${key}=${searchParams[key]}`)
|
|
31
|
+
.join('&');
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const data = await appFetch<ProductResult>(url, {
|
|
35
|
+
headers: {
|
|
36
|
+
Accept: 'application/json',
|
|
37
|
+
'Content-Type': 'application/json'
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
const categoryUrl = product.categoryUrl(data.product.pk);
|
|
42
|
+
|
|
43
|
+
const productCategoryData = await appFetch<ProductCategoryResult>(
|
|
44
|
+
categoryUrl,
|
|
45
|
+
{
|
|
46
|
+
headers: {
|
|
47
|
+
Accept: 'application/json',
|
|
48
|
+
'Content-Type': 'application/json'
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
const breadcrumbUrl = product.breadcrumbUrl(
|
|
54
|
+
productCategoryData.results[0].menuitemmodel
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
const breadcrumbData = await appFetch<any>(breadcrumbUrl, {
|
|
58
|
+
headers: {
|
|
59
|
+
Accept: 'application/json',
|
|
60
|
+
'Content-Type': 'application/json'
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
return {
|
|
65
|
+
data,
|
|
66
|
+
breadcrumbData: breadcrumbData?.menu
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
export const getProductData = async ({
|
|
72
|
+
pk,
|
|
73
|
+
searchParams,
|
|
74
|
+
groupProduct
|
|
75
|
+
}: GetProduct) => {
|
|
76
|
+
return Cache.wrap(
|
|
77
|
+
CacheKey[groupProduct ? 'GroupProduct' : 'Product'](
|
|
78
|
+
pk,
|
|
79
|
+
searchParams ?? new URLSearchParams()
|
|
80
|
+
),
|
|
81
|
+
getProductDataHandler({ pk, searchParams, groupProduct }),
|
|
82
|
+
{
|
|
83
|
+
expire: 300
|
|
84
|
+
}
|
|
85
|
+
);
|
|
86
|
+
};
|
package/data/server/seo.ts
CHANGED
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
import appFetch from '../../utils/app-fetch';
|
|
2
|
-
import { Cache, CacheKey } from '../../lib/cache';
|
|
3
|
-
import { misc } from '../../data/urls';
|
|
4
|
-
import logger from '../../utils/log';
|
|
5
|
-
|
|
6
|
-
function getRootSeoDataHandler() {
|
|
7
|
-
return async function () {
|
|
8
|
-
let data = {};
|
|
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
|
-
};
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
function getSeoDataHandler(url: string) {
|
|
21
|
-
return async function () {
|
|
22
|
-
let data = {} as {
|
|
23
|
-
title: string;
|
|
24
|
-
description: string;
|
|
25
|
-
keywords: string;
|
|
26
|
-
[key: string]: string;
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
try {
|
|
30
|
-
data = await appFetch(misc.cmsSeo(url));
|
|
31
|
-
} catch (error) {
|
|
32
|
-
// logger.error('Error while fetching seo data', { url, error });
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
return data;
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* @deprecated Use getSeoData instead
|
|
41
|
-
*/
|
|
42
|
-
export const getRootSeo = async () => {
|
|
43
|
-
return Cache.wrap(CacheKey.RootSeo, getRootSeoDataHandler());
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
export const getSeoData = async (url: string) => {
|
|
47
|
-
return Cache.wrap(CacheKey.Seo(url), getSeoDataHandler(url));
|
|
48
|
-
};
|
|
1
|
+
import appFetch from '../../utils/app-fetch';
|
|
2
|
+
import { Cache, CacheKey } from '../../lib/cache';
|
|
3
|
+
import { misc } from '../../data/urls';
|
|
4
|
+
import logger from '../../utils/log';
|
|
5
|
+
|
|
6
|
+
function getRootSeoDataHandler() {
|
|
7
|
+
return async function () {
|
|
8
|
+
let data = {};
|
|
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
|
+
};
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function getSeoDataHandler(url: string) {
|
|
21
|
+
return async function () {
|
|
22
|
+
let data = {} as {
|
|
23
|
+
title: string;
|
|
24
|
+
description: string;
|
|
25
|
+
keywords: string;
|
|
26
|
+
[key: string]: string;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
try {
|
|
30
|
+
data = await appFetch(misc.cmsSeo(url));
|
|
31
|
+
} catch (error) {
|
|
32
|
+
// logger.error('Error while fetching seo data', { url, error });
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return data;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @deprecated Use getSeoData instead
|
|
41
|
+
*/
|
|
42
|
+
export const getRootSeo = async () => {
|
|
43
|
+
return Cache.wrap(CacheKey.RootSeo, getRootSeoDataHandler());
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export const getSeoData = async (url: string) => {
|
|
47
|
+
return Cache.wrap(CacheKey.Seo(url), getSeoDataHandler(url));
|
|
48
|
+
};
|
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
import { Cache, CacheKey } from '../../lib/cache';
|
|
2
|
-
import { category } from '../urls';
|
|
3
|
-
import { GetCategoryResponse } from '../../types';
|
|
4
|
-
import { generateCommerceSearchParams } from '../../utils';
|
|
5
|
-
import appFetch from '../../utils/app-fetch';
|
|
6
|
-
import header from '../../redux/reducers/header';
|
|
7
|
-
|
|
8
|
-
const getSpecialPageDataHandler = (
|
|
9
|
-
pk: number,
|
|
10
|
-
searchParams: URLSearchParams,
|
|
11
|
-
headers?: Record<string, string>
|
|
12
|
-
) => {
|
|
13
|
-
return async function () {
|
|
14
|
-
const params = generateCommerceSearchParams(searchParams);
|
|
15
|
-
|
|
16
|
-
const data: GetCategoryResponse = await appFetch(
|
|
17
|
-
`${category.getSpecialPageByPk(pk)}${params}`,
|
|
18
|
-
{
|
|
19
|
-
headers: {
|
|
20
|
-
Accept: 'application/json',
|
|
21
|
-
'Content-Type': 'application/json',
|
|
22
|
-
...(headers ?? {})
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
);
|
|
26
|
-
|
|
27
|
-
return data;
|
|
28
|
-
};
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
export const getSpecialPageData = async ({
|
|
32
|
-
pk,
|
|
33
|
-
searchParams,
|
|
34
|
-
headers
|
|
35
|
-
}: {
|
|
36
|
-
pk: number;
|
|
37
|
-
searchParams: URLSearchParams;
|
|
38
|
-
headers?: Record<string, string>;
|
|
39
|
-
}) => {
|
|
40
|
-
return Cache.wrap(
|
|
41
|
-
CacheKey.SpecialPage(pk, searchParams, headers),
|
|
42
|
-
getSpecialPageDataHandler(pk, searchParams, headers),
|
|
43
|
-
{
|
|
44
|
-
expire: 300
|
|
45
|
-
}
|
|
46
|
-
);
|
|
47
|
-
};
|
|
1
|
+
import { Cache, CacheKey } from '../../lib/cache';
|
|
2
|
+
import { category } from '../urls';
|
|
3
|
+
import { GetCategoryResponse } from '../../types';
|
|
4
|
+
import { generateCommerceSearchParams } from '../../utils';
|
|
5
|
+
import appFetch from '../../utils/app-fetch';
|
|
6
|
+
import header from '../../redux/reducers/header';
|
|
7
|
+
|
|
8
|
+
const getSpecialPageDataHandler = (
|
|
9
|
+
pk: number,
|
|
10
|
+
searchParams: URLSearchParams,
|
|
11
|
+
headers?: Record<string, string>
|
|
12
|
+
) => {
|
|
13
|
+
return async function () {
|
|
14
|
+
const params = generateCommerceSearchParams(searchParams);
|
|
15
|
+
|
|
16
|
+
const data: GetCategoryResponse = await appFetch(
|
|
17
|
+
`${category.getSpecialPageByPk(pk)}${params}`,
|
|
18
|
+
{
|
|
19
|
+
headers: {
|
|
20
|
+
Accept: 'application/json',
|
|
21
|
+
'Content-Type': 'application/json',
|
|
22
|
+
...(headers ?? {})
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
return data;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export const getSpecialPageData = async ({
|
|
32
|
+
pk,
|
|
33
|
+
searchParams,
|
|
34
|
+
headers
|
|
35
|
+
}: {
|
|
36
|
+
pk: number;
|
|
37
|
+
searchParams: URLSearchParams;
|
|
38
|
+
headers?: Record<string, string>;
|
|
39
|
+
}) => {
|
|
40
|
+
return Cache.wrap(
|
|
41
|
+
CacheKey.SpecialPage(pk, searchParams, headers),
|
|
42
|
+
getSpecialPageDataHandler(pk, searchParams, headers),
|
|
43
|
+
{
|
|
44
|
+
expire: 300
|
|
45
|
+
}
|
|
46
|
+
);
|
|
47
|
+
};
|
package/data/server/widget.ts
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import { Cache, CacheKey } from '../../lib/cache';
|
|
2
|
-
import 'server-only';
|
|
3
|
-
import { CacheOptions, WidgetResultType } from '../../types';
|
|
4
|
-
import appFetch from '../../utils/app-fetch';
|
|
5
|
-
import { widgets } from '../urls';
|
|
6
|
-
|
|
7
|
-
const getWidgetDataHandler = (slug: string) => async () => {
|
|
8
|
-
if (!slug) {
|
|
9
|
-
return null;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
return await appFetch(widgets.getWidget(slug));
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
export const getWidgetData = async <T>({
|
|
16
|
-
slug,
|
|
17
|
-
cacheOptions
|
|
18
|
-
}: {
|
|
19
|
-
slug: string;
|
|
20
|
-
cacheOptions?: CacheOptions;
|
|
21
|
-
}): Promise<WidgetResultType<T>> => {
|
|
22
|
-
return Cache.wrap(
|
|
23
|
-
CacheKey.Widget(slug),
|
|
24
|
-
getWidgetDataHandler(slug),
|
|
25
|
-
cacheOptions
|
|
26
|
-
);
|
|
27
|
-
};
|
|
1
|
+
import { Cache, CacheKey } from '../../lib/cache';
|
|
2
|
+
import 'server-only';
|
|
3
|
+
import { CacheOptions, WidgetResultType } from '../../types';
|
|
4
|
+
import appFetch from '../../utils/app-fetch';
|
|
5
|
+
import { widgets } from '../urls';
|
|
6
|
+
|
|
7
|
+
const getWidgetDataHandler = (slug: string) => async () => {
|
|
8
|
+
if (!slug) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
return await appFetch(widgets.getWidget(slug));
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export const getWidgetData = async <T>({
|
|
16
|
+
slug,
|
|
17
|
+
cacheOptions
|
|
18
|
+
}: {
|
|
19
|
+
slug: string;
|
|
20
|
+
cacheOptions?: CacheOptions;
|
|
21
|
+
}): Promise<WidgetResultType<T>> => {
|
|
22
|
+
return Cache.wrap(
|
|
23
|
+
CacheKey.Widget(slug),
|
|
24
|
+
getWidgetDataHandler(slug),
|
|
25
|
+
cacheOptions
|
|
26
|
+
);
|
|
27
|
+
};
|