@akinon/projectzero 1.33.0-rc.0 → 1.33.1
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 +8 -2
- package/app-template/.eslintrc.js +31 -0
- package/app-template/CHANGELOG.md +26 -35
- package/app-template/package.json +10 -10
- package/app-template/src/app/[commerce]/[locale]/[currency]/account/profile/page.tsx +0 -1
- package/app-template/src/components/checkbox.tsx +1 -2
- package/app-template/src/components/input.tsx +7 -19
- package/app-template/src/components/pagination.tsx +1 -1
- package/app-template/src/components/price.tsx +3 -3
- package/app-template/src/redux/reducers/category.ts +1 -23
- package/app-template/src/settings.js +1 -2
- package/app-template/src/views/category/category-active-filters.tsx +35 -24
- package/app-template/src/views/category/category-info.tsx +2 -2
- package/app-template/src/views/category/filters/index.tsx +13 -32
- package/app-template/src/views/product/product-info.tsx +1 -8
- package/app-template/tsconfig.json +3 -1
- package/commands/create.ts +1 -1
- package/dist/commands/create.js +1 -1
- package/package.json +1 -1
- package/app-template/eslint.config.js +0 -10
- package/app-template/public/locales/en/not_found.json +0 -5
- package/app-template/public/locales/tr/not_found.json +0 -5
- package/app-template/src/app/[commerce]/[locale]/[currency]/pz-not-found/page.tsx +0 -24
package/CHANGELOG.md
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
# @akinon/projectzero
|
|
2
2
|
|
|
3
|
-
## 1.33.
|
|
3
|
+
## 1.33.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 10123f9: ZERO-2632: rename projectzero-cli to projectzero
|
|
8
|
+
|
|
9
|
+
## 1.33.0
|
|
4
10
|
|
|
5
11
|
### Minor Changes
|
|
6
12
|
|
|
7
|
-
-
|
|
13
|
+
- 53ada1e: ZERO-2563: The create command cli now doesnt get it from bitbucket but clones the repository from a localized clone version
|
|
8
14
|
|
|
9
15
|
## 1.32.0
|
|
10
16
|
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
env: {
|
|
3
|
+
browser: true,
|
|
4
|
+
es6: true,
|
|
5
|
+
node: true,
|
|
6
|
+
jest: true
|
|
7
|
+
},
|
|
8
|
+
extends: [
|
|
9
|
+
'next/core-web-vitals',
|
|
10
|
+
'eslint:recommended',
|
|
11
|
+
'plugin:@typescript-eslint/recommended',
|
|
12
|
+
'prettier',
|
|
13
|
+
'plugin:@akinon/projectzero/core', // DO NOT remove this config for stability
|
|
14
|
+
'plugin:@akinon/projectzero/recommended' // Optional
|
|
15
|
+
],
|
|
16
|
+
plugins: ['@typescript-eslint', '@akinon/projectzero'],
|
|
17
|
+
parser: '@typescript-eslint/parser',
|
|
18
|
+
parserOptions: {
|
|
19
|
+
ecmaVersion: 2021,
|
|
20
|
+
sourceType: 'module'
|
|
21
|
+
},
|
|
22
|
+
settings: {
|
|
23
|
+
next: {
|
|
24
|
+
rootDir: ['src/*/']
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
rules: {
|
|
28
|
+
'@typescript-eslint/no-unused-vars': 'warn',
|
|
29
|
+
'@typescript-eslint/no-explicit-any': 'warn'
|
|
30
|
+
}
|
|
31
|
+
};
|
|
@@ -1,43 +1,34 @@
|
|
|
1
1
|
# projectzeronext
|
|
2
2
|
|
|
3
|
-
## 1.33.
|
|
3
|
+
## 1.33.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 10123f9: ZERO-2632: rename projectzero-cli to projectzero
|
|
8
|
+
- Updated dependencies [10123f9]
|
|
9
|
+
- @akinon/next@1.33.1
|
|
10
|
+
- @akinon/pz-b2b@1.33.1
|
|
11
|
+
- @akinon/pz-gpay@1.33.1
|
|
12
|
+
- @akinon/pz-masterpass@1.33.1
|
|
13
|
+
- @akinon/pz-one-click-checkout@1.33.1
|
|
14
|
+
- @akinon/pz-otp@1.33.1
|
|
15
|
+
- @akinon/pz-pay-on-delivery@1.33.1
|
|
16
|
+
|
|
17
|
+
## 1.33.0
|
|
4
18
|
|
|
5
19
|
### Minor Changes
|
|
6
20
|
|
|
7
|
-
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
|
|
18
|
-
### Patch Changes
|
|
19
|
-
|
|
20
|
-
- Updated dependencies [d09b677]
|
|
21
|
-
- Updated dependencies [6d4aadb]
|
|
22
|
-
- Updated dependencies [ebb63ce]
|
|
23
|
-
- Updated dependencies [7cebe87]
|
|
24
|
-
- Updated dependencies [f3b595e]
|
|
25
|
-
- Updated dependencies [f0c23bc]
|
|
26
|
-
- Updated dependencies [3420416]
|
|
27
|
-
- Updated dependencies [495d155]
|
|
28
|
-
- Updated dependencies [6c18543]
|
|
29
|
-
- Updated dependencies [40ad73e]
|
|
30
|
-
- Updated dependencies [495d155]
|
|
31
|
-
- Updated dependencies [f046f8e]
|
|
32
|
-
- Updated dependencies [6b2972b]
|
|
33
|
-
- Updated dependencies [3e68768]
|
|
34
|
-
- @akinon/next@1.33.0-rc.0
|
|
35
|
-
- @akinon/pz-masterpass@1.33.0-rc.0
|
|
36
|
-
- @akinon/pz-one-click-checkout@1.33.0-rc.0
|
|
37
|
-
- @akinon/pz-b2b@1.33.0-rc.0
|
|
38
|
-
- @akinon/pz-gpay@1.33.0-rc.0
|
|
39
|
-
- @akinon/pz-otp@1.33.0-rc.0
|
|
40
|
-
- @akinon/pz-pay-on-delivery@1.33.0-rc.0
|
|
21
|
+
- 53ada1e: ZERO-2563: The create command cli now doesnt get it from bitbucket but clones the repository from a localized clone version
|
|
22
|
+
|
|
23
|
+
### Patch Changes
|
|
24
|
+
|
|
25
|
+
- @akinon/next@1.33.0
|
|
26
|
+
- @akinon/pz-b2b@1.33.0
|
|
27
|
+
- @akinon/pz-gpay@1.33.0
|
|
28
|
+
- @akinon/pz-masterpass@1.33.0
|
|
29
|
+
- @akinon/pz-one-click-checkout@1.33.0
|
|
30
|
+
- @akinon/pz-otp@1.33.0
|
|
31
|
+
- @akinon/pz-pay-on-delivery@1.33.0
|
|
41
32
|
|
|
42
33
|
## 1.32.0
|
|
43
34
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "projectzeronext",
|
|
3
|
-
"version": "1.33.
|
|
3
|
+
"version": "1.33.1",
|
|
4
4
|
"private": true,
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"scripts": {
|
|
@@ -22,13 +22,13 @@
|
|
|
22
22
|
"prestart": "pz-prestart"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@akinon/next": "1.33.
|
|
26
|
-
"@akinon/pz-b2b": "1.33.
|
|
27
|
-
"@akinon/pz-gpay": "1.33.
|
|
28
|
-
"@akinon/pz-masterpass": "1.33.
|
|
29
|
-
"@akinon/pz-one-click-checkout": "1.33.
|
|
30
|
-
"@akinon/pz-otp": "1.33.
|
|
31
|
-
"@akinon/pz-pay-on-delivery": "1.33.
|
|
25
|
+
"@akinon/next": "1.33.1",
|
|
26
|
+
"@akinon/pz-b2b": "1.33.1",
|
|
27
|
+
"@akinon/pz-gpay": "1.33.1",
|
|
28
|
+
"@akinon/pz-masterpass": "1.33.1",
|
|
29
|
+
"@akinon/pz-one-click-checkout": "1.33.1",
|
|
30
|
+
"@akinon/pz-otp": "1.33.1",
|
|
31
|
+
"@akinon/pz-pay-on-delivery": "1.33.1",
|
|
32
32
|
"@hookform/resolvers": "2.9.0",
|
|
33
33
|
"@next/third-parties": "14.1.0",
|
|
34
34
|
"@react-google-maps/api": "2.17.1",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"yup": "0.32.11"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
|
-
"@akinon/eslint-plugin-projectzero": "1.33.
|
|
55
|
+
"@akinon/eslint-plugin-projectzero": "1.33.1",
|
|
56
56
|
"@semantic-release/changelog": "6.0.2",
|
|
57
57
|
"@semantic-release/exec": "6.0.3",
|
|
58
58
|
"@semantic-release/git": "10.0.1",
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
"jest-css-modules-transform": "4.3.0",
|
|
80
80
|
"lint-staged": "13.1.0",
|
|
81
81
|
"prettier": "2.6.2",
|
|
82
|
-
"react-number-format": "
|
|
82
|
+
"react-number-format": "4.9.3",
|
|
83
83
|
"sass": "1.49.9",
|
|
84
84
|
"semantic-release": "19.0.5",
|
|
85
85
|
"server-only": "0.0.1",
|
|
@@ -3,7 +3,7 @@ import { CheckboxProps } from '@theme/components/types';
|
|
|
3
3
|
import { twMerge } from 'tailwind-merge';
|
|
4
4
|
|
|
5
5
|
const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>((props, ref) => {
|
|
6
|
-
const { children,
|
|
6
|
+
const { children, error, ...rest } = props;
|
|
7
7
|
|
|
8
8
|
return (
|
|
9
9
|
<label className={twMerge('flex flex-col text-xs', props.className)}>
|
|
@@ -12,7 +12,6 @@ const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>((props, ref) => {
|
|
|
12
12
|
type="checkbox"
|
|
13
13
|
{...rest}
|
|
14
14
|
ref={ref}
|
|
15
|
-
checked={checked ?? false}
|
|
16
15
|
className="w-4 h-4 shrink-0"
|
|
17
16
|
/>
|
|
18
17
|
{children && <span className="ml-2">{children}</span>}
|
|
@@ -1,28 +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
|
-
import {
|
|
4
|
+
import NumberFormat, { NumberFormatProps } from 'react-number-format';
|
|
5
5
|
import { InputProps } from '@theme/components/types';
|
|
6
6
|
import { twMerge } from 'tailwind-merge';
|
|
7
7
|
|
|
8
|
-
const PatternFormatWithRef = forwardRef(
|
|
9
|
-
(props: PatternFormatProps, ref: Ref<HTMLInputElement>) => {
|
|
10
|
-
return <PatternFormat {...props} getInputRef={ref} />;
|
|
11
|
-
}
|
|
12
|
-
);
|
|
13
|
-
PatternFormatWithRef.displayName = 'PatternFormatWithRef';
|
|
14
|
-
|
|
15
8
|
export const Input = forwardRef<
|
|
16
9
|
HTMLInputElement,
|
|
17
10
|
InputProps &
|
|
18
11
|
Pick<
|
|
19
|
-
|
|
20
|
-
'mask' | 'allowEmptyFormatting' | 'onValueChange'
|
|
21
|
-
>
|
|
22
|
-
format?: string;
|
|
23
|
-
defaultValue?: string;
|
|
24
|
-
type?: string;
|
|
25
|
-
}
|
|
12
|
+
NumberFormatProps,
|
|
13
|
+
'format' | 'mask' | 'allowEmptyFormatting' | 'onValueChange'
|
|
14
|
+
>
|
|
26
15
|
>((props, ref) => {
|
|
27
16
|
const [focused, setFocused] = useState(false);
|
|
28
17
|
const [hasValue, setHasValue] = useState(false);
|
|
@@ -48,7 +37,6 @@ export const Input = forwardRef<
|
|
|
48
37
|
),
|
|
49
38
|
props.className
|
|
50
39
|
);
|
|
51
|
-
|
|
52
40
|
const inputProps: any = {
|
|
53
41
|
id,
|
|
54
42
|
ref,
|
|
@@ -91,14 +79,14 @@ export const Input = forwardRef<
|
|
|
91
79
|
<Controller
|
|
92
80
|
name={props.name ?? ''}
|
|
93
81
|
control={props.control}
|
|
82
|
+
defaultValue={false}
|
|
94
83
|
render={({ field }) => (
|
|
95
|
-
<
|
|
84
|
+
<NumberFormat
|
|
96
85
|
format={format}
|
|
97
86
|
mask={mask ?? ''}
|
|
98
87
|
{...rest}
|
|
99
88
|
{...field}
|
|
100
89
|
{...inputProps}
|
|
101
|
-
type={props.type as 'text' | 'password' | 'tel'}
|
|
102
90
|
/>
|
|
103
91
|
)}
|
|
104
92
|
/>
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { useMemo } from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import NumberFormat, { NumberFormatProps } from 'react-number-format';
|
|
3
3
|
import { getCurrency } from '@akinon/next/utils';
|
|
4
4
|
import { PriceProps } from '@theme/types';
|
|
5
5
|
import { useLocalization } from '@akinon/next/hooks';
|
|
6
6
|
|
|
7
|
-
export const Price = (props:
|
|
7
|
+
export const Price = (props: NumberFormatProps & PriceProps) => {
|
|
8
8
|
const {
|
|
9
9
|
value,
|
|
10
10
|
currencyCode,
|
|
@@ -38,7 +38,7 @@ export const Price = (props: NumericFormatProps & PriceProps) => {
|
|
|
38
38
|
);
|
|
39
39
|
|
|
40
40
|
return (
|
|
41
|
-
<
|
|
41
|
+
<NumberFormat
|
|
42
42
|
value={useNegative ? `-${useNegativeSpace}${_value}` : _value}
|
|
43
43
|
{...{
|
|
44
44
|
[useCurrencyAfterPrice ? 'suffix' : 'prefix']: currency
|
|
@@ -31,10 +31,7 @@ const categorySlice = createSlice({
|
|
|
31
31
|
if (facet.key === action.payload.facet.key) {
|
|
32
32
|
facet.data.choices = facet.data.choices
|
|
33
33
|
.map((choice) => {
|
|
34
|
-
if (
|
|
35
|
-
action.payload.facet.widget_type === WIDGET_TYPE.category &&
|
|
36
|
-
choice.is_selected
|
|
37
|
-
) {
|
|
34
|
+
if (action.payload.facet.widget_type === WIDGET_TYPE.category) {
|
|
38
35
|
choice.is_selected = false;
|
|
39
36
|
}
|
|
40
37
|
return choice;
|
|
@@ -51,24 +48,6 @@ const categorySlice = createSlice({
|
|
|
51
48
|
return facet;
|
|
52
49
|
});
|
|
53
50
|
},
|
|
54
|
-
removeCategoryFacet(state, action) {
|
|
55
|
-
state.selectedFacets = state.selectedFacets.map((facet) => {
|
|
56
|
-
if (facet.key === action.payload.facet.key) {
|
|
57
|
-
facet.data.choices = facet.data.choices.map((choice) => {
|
|
58
|
-
if (choice.value === action.payload.choice.value) {
|
|
59
|
-
choice.is_selected = false;
|
|
60
|
-
}
|
|
61
|
-
return choice;
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
return facet;
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
state.selectedFacets = state.selectedFacets.filter(
|
|
69
|
-
(facet) => facet.key !== action.payload.facet.key
|
|
70
|
-
);
|
|
71
|
-
},
|
|
72
51
|
resetSelectedFacets(state) {
|
|
73
52
|
return {
|
|
74
53
|
...state,
|
|
@@ -82,7 +61,6 @@ export const {
|
|
|
82
61
|
setFacets,
|
|
83
62
|
setSelectedFacets,
|
|
84
63
|
toggleFacet,
|
|
85
|
-
removeCategoryFacet,
|
|
86
64
|
resetSelectedFacets
|
|
87
65
|
} = categorySlice.actions;
|
|
88
66
|
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
import { useAppDispatch, useAppSelector } from '@akinon/next/redux/hooks';
|
|
2
2
|
import React, { useEffect, useMemo } from 'react';
|
|
3
|
-
import {
|
|
4
|
-
removeCategoryFacet,
|
|
5
|
-
toggleFacet
|
|
6
|
-
} from '@theme/redux/reducers/category';
|
|
3
|
+
import { toggleFacet } from '@theme/redux/reducers/category';
|
|
7
4
|
import { useRouter } from '@akinon/next/hooks';
|
|
8
5
|
import convertFacetSearchParams from '@theme/utils/convert-facet-search-params';
|
|
9
6
|
import { usePathname } from 'next/navigation';
|
|
10
7
|
import { WIDGET_TYPE } from '@theme/types';
|
|
11
8
|
import { useSearchParams } from 'next/dist/client/components/navigation';
|
|
12
|
-
import { Icon } from '@theme/components';
|
|
13
9
|
|
|
14
10
|
const CategoryActiveFilters = () => {
|
|
15
11
|
const dispatch = useAppDispatch();
|
|
@@ -20,11 +16,6 @@ const CategoryActiveFilters = () => {
|
|
|
20
16
|
const { facets, selectedFacets } = useAppSelector((state) => state.category);
|
|
21
17
|
|
|
22
18
|
const handleRemoveFilter = ({ facet, choice }) => {
|
|
23
|
-
if (facet.widget_type === WIDGET_TYPE.category) {
|
|
24
|
-
dispatch(removeCategoryFacet({ facet, choice }));
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
19
|
dispatch(toggleFacet({ facet, choice }));
|
|
29
20
|
};
|
|
30
21
|
|
|
@@ -62,23 +53,43 @@ const CategoryActiveFilters = () => {
|
|
|
62
53
|
{facets.map((facet) =>
|
|
63
54
|
facet.data.choices
|
|
64
55
|
.filter((choice) => choice.is_selected)
|
|
65
|
-
.map(
|
|
66
|
-
|
|
67
|
-
|
|
56
|
+
.map((choice) => (
|
|
57
|
+
<div
|
|
58
|
+
className="flex justify-between text-xs text-black-800 py-3.5 px-4 border border-gray-400 hover:bg-gray-300 cursor-default items-center"
|
|
59
|
+
key={`${facet.key}-${choice.label}`}
|
|
60
|
+
>
|
|
61
|
+
<div>
|
|
62
|
+
{facet.widget_type !== WIDGET_TYPE.category && (
|
|
63
|
+
<span>{facet.name}: </span>
|
|
64
|
+
)}
|
|
65
|
+
<span>{choice.label}</span>
|
|
66
|
+
</div>
|
|
67
|
+
{facet.widget_type !== WIDGET_TYPE.category && (
|
|
68
68
|
<div
|
|
69
|
-
className="
|
|
70
|
-
|
|
69
|
+
className="cursor-pointer ml-4"
|
|
70
|
+
onClick={() => handleRemoveFilter({ facet, choice })}
|
|
71
71
|
>
|
|
72
|
-
<
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
72
|
+
<svg
|
|
73
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
74
|
+
viewBox="0 0 13.5 13.5"
|
|
75
|
+
width="1em"
|
|
76
|
+
height="1em"
|
|
77
|
+
>
|
|
78
|
+
<path
|
|
79
|
+
d="m.75 12.75 12-12m-12 0 12 12"
|
|
80
|
+
style={{
|
|
81
|
+
fill: 'none',
|
|
82
|
+
stroke: '#000',
|
|
83
|
+
strokeLinecap: 'round',
|
|
84
|
+
strokeLinejoin: 'round',
|
|
85
|
+
strokeWidth: '1.5px'
|
|
86
|
+
}}
|
|
87
|
+
/>
|
|
88
|
+
</svg>
|
|
79
89
|
</div>
|
|
80
|
-
)
|
|
81
|
-
|
|
90
|
+
)}
|
|
91
|
+
</div>
|
|
92
|
+
))
|
|
82
93
|
)}
|
|
83
94
|
</div>
|
|
84
95
|
);
|
|
@@ -70,7 +70,7 @@ export default function ListPage(props: ListPageProps) {
|
|
|
70
70
|
></div>
|
|
71
71
|
<div className="flex flex-col items-center lg:items-stretch col-span-2 lg:col-span-1">
|
|
72
72
|
<CategoryHeader
|
|
73
|
-
totalCount={data.pagination
|
|
73
|
+
totalCount={data.pagination.total_count}
|
|
74
74
|
setMenuStatus={() => setIsMenuOpen(true)}
|
|
75
75
|
sortOptions={data.sorters}
|
|
76
76
|
/>
|
|
@@ -78,7 +78,7 @@ export default function ListPage(props: ListPageProps) {
|
|
|
78
78
|
<CategoryActiveFilters />
|
|
79
79
|
</div>
|
|
80
80
|
|
|
81
|
-
{data.products
|
|
81
|
+
{data.products.length === 0 && page === 1 && (
|
|
82
82
|
<div className="text-center bg-gray-200 px-5 py-20">
|
|
83
83
|
<p className="pb-4">{t('category.search.not_found')}</p>
|
|
84
84
|
<Link className="underline" href={ROUTES.HOME}>
|
|
@@ -6,7 +6,7 @@ import clsx from 'clsx';
|
|
|
6
6
|
import { Accordion, Button, Checkbox, Icon, Radio } from '@theme/components';
|
|
7
7
|
import { SizeFilter } from './size-filter';
|
|
8
8
|
|
|
9
|
-
import { useLocalization
|
|
9
|
+
import { useLocalization } from '@akinon/next/hooks';
|
|
10
10
|
import { Facet, FacetChoice } from '@akinon/next/types';
|
|
11
11
|
import { useAppDispatch, useAppSelector } from '@akinon/next/redux/hooks';
|
|
12
12
|
import {
|
|
@@ -14,8 +14,7 @@ import {
|
|
|
14
14
|
toggleFacet
|
|
15
15
|
} from '@theme/redux/reducers/category';
|
|
16
16
|
import CategoryActiveFilters from '@theme/views/category/category-active-filters';
|
|
17
|
-
import {
|
|
18
|
-
import { commonProductAttributes } from '@theme/settings';
|
|
17
|
+
import { useMemo } from 'react';
|
|
19
18
|
|
|
20
19
|
const COMPONENT_TYPES = {
|
|
21
20
|
[WIDGET_TYPE.category]: Radio,
|
|
@@ -28,7 +27,6 @@ interface Props {
|
|
|
28
27
|
}
|
|
29
28
|
|
|
30
29
|
export const Filters = (props: Props) => {
|
|
31
|
-
const router = useRouter();
|
|
32
30
|
const facets = useAppSelector((state) => state.category.facets);
|
|
33
31
|
const dispatch = useAppDispatch();
|
|
34
32
|
const { t } = useLocalization();
|
|
@@ -41,16 +39,12 @@ export const Filters = (props: Props) => {
|
|
|
41
39
|
facet: Facet;
|
|
42
40
|
choice: FacetChoice;
|
|
43
41
|
}) => {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
choice
|
|
51
|
-
})
|
|
52
|
-
);
|
|
53
|
-
}
|
|
42
|
+
dispatch(
|
|
43
|
+
toggleFacet({
|
|
44
|
+
facet,
|
|
45
|
+
choice
|
|
46
|
+
})
|
|
47
|
+
);
|
|
54
48
|
};
|
|
55
49
|
|
|
56
50
|
const haveFilter = useMemo(() => {
|
|
@@ -66,19 +60,6 @@ export const Filters = (props: Props) => {
|
|
|
66
60
|
dispatch(resetSelectedFacets());
|
|
67
61
|
};
|
|
68
62
|
|
|
69
|
-
useEffect(() => {
|
|
70
|
-
const url = new URL(window.location.href);
|
|
71
|
-
if (url.searchParams.has('category_ids')) {
|
|
72
|
-
url.searchParams.delete('category_ids');
|
|
73
|
-
const newHref = url.pathname + url.search;
|
|
74
|
-
window.history.replaceState({}, '', newHref);
|
|
75
|
-
}
|
|
76
|
-
}, [router]);
|
|
77
|
-
|
|
78
|
-
const sizeKey = commonProductAttributes.find(
|
|
79
|
-
(item) => item.translationKey === 'size'
|
|
80
|
-
).key;
|
|
81
|
-
|
|
82
63
|
return (
|
|
83
64
|
<div
|
|
84
65
|
className={clsx(
|
|
@@ -100,7 +81,7 @@ export const Filters = (props: Props) => {
|
|
|
100
81
|
let Component = null;
|
|
101
82
|
const choices = [...facet.data.choices];
|
|
102
83
|
|
|
103
|
-
if (facet.key ===
|
|
84
|
+
if (facet.key === 'integration_SizeId') {
|
|
104
85
|
// If it's a size facet, use the custom size filter component
|
|
105
86
|
Component = SizeFilter;
|
|
106
87
|
|
|
@@ -126,8 +107,8 @@ export const Filters = (props: Props) => {
|
|
|
126
107
|
>
|
|
127
108
|
<div
|
|
128
109
|
className={clsx(
|
|
129
|
-
'flex gap-4
|
|
130
|
-
facet.key ===
|
|
110
|
+
'flex gap-4',
|
|
111
|
+
facet.key === 'integration_SizeId' ? 'flex-row' : 'flex-col' // TODO: This condition must be refactor to a better way
|
|
131
112
|
)}
|
|
132
113
|
>
|
|
133
114
|
{choices.map((choice, index) => (
|
|
@@ -136,13 +117,13 @@ export const Filters = (props: Props) => {
|
|
|
136
117
|
data={choice}
|
|
137
118
|
name={facet.key}
|
|
138
119
|
onChange={() => {
|
|
139
|
-
if (facet.key !==
|
|
120
|
+
if (facet.key !== 'integration_SizeId') {
|
|
140
121
|
// TODO: This condition must be refactor to a better way
|
|
141
122
|
handleSelectFilter({ facet, choice });
|
|
142
123
|
}
|
|
143
124
|
}}
|
|
144
125
|
onClick={() => {
|
|
145
|
-
if (facet.key ===
|
|
126
|
+
if (facet.key === 'integration_SizeId') {
|
|
146
127
|
// TODO: This condition must be refactor to a better way
|
|
147
128
|
handleSelectFilter({ facet, choice });
|
|
148
129
|
}
|
|
@@ -206,14 +206,7 @@ export default function ProductInfo({ data }: ProductPageProps) {
|
|
|
206
206
|
'after:bg-[#d02c2f]',
|
|
207
207
|
'after:rounded-xl',
|
|
208
208
|
'after:left-1'
|
|
209
|
-
])
|
|
210
|
-
onError: (error) =>
|
|
211
|
-
setProductError(
|
|
212
|
-
error?.data?.non_field_errors ||
|
|
213
|
-
Object.keys(error?.data).map(
|
|
214
|
-
(key) => `${key}: ${error?.data[key].join(', ')}`
|
|
215
|
-
)
|
|
216
|
-
)
|
|
209
|
+
])
|
|
217
210
|
}}
|
|
218
211
|
/>
|
|
219
212
|
|
package/commands/create.ts
CHANGED
|
@@ -132,7 +132,7 @@ export default async (): Promise<void> => {
|
|
|
132
132
|
|
|
133
133
|
const templatesDir = path.resolve(
|
|
134
134
|
__dirname,
|
|
135
|
-
'../../../projectzero
|
|
135
|
+
'../../../projectzero/app-template'
|
|
136
136
|
);
|
|
137
137
|
|
|
138
138
|
fs.cpSync(templatesDir, projectDir, { recursive: true });
|
package/dist/commands/create.js
CHANGED
|
@@ -122,7 +122,7 @@ exports.default = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
122
122
|
if (!fs.existsSync(projectDir)) {
|
|
123
123
|
fs.mkdirSync(projectDir, { recursive: true });
|
|
124
124
|
}
|
|
125
|
-
const templatesDir = path_1.default.resolve(__dirname, '../../../projectzero
|
|
125
|
+
const templatesDir = path_1.default.resolve(__dirname, '../../../projectzero/app-template');
|
|
126
126
|
fs.cpSync(templatesDir, projectDir, { recursive: true });
|
|
127
127
|
updatePluginsFile(projectDir);
|
|
128
128
|
if (answers.projectDescription) {
|
package/package.json
CHANGED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import React from 'react';
|
|
4
|
-
import { Button, Link } from '@theme/components';
|
|
5
|
-
import { useLocalization } from '@akinon/next/hooks';
|
|
6
|
-
|
|
7
|
-
const NotFound = () => {
|
|
8
|
-
const { t } = useLocalization();
|
|
9
|
-
|
|
10
|
-
return (
|
|
11
|
-
<div className="py-6 flex flex-col items-center justify-center">
|
|
12
|
-
<div className="text-8xl font-bold">404</div>
|
|
13
|
-
<h1 className="text-4xl font-bold mb-4">{t('not_found.title')}</h1>
|
|
14
|
-
<p className="text-lg mb-6">{t('not_found.sub_title')}</p>
|
|
15
|
-
<Link href={'/'}>
|
|
16
|
-
<Button className="h-auto mt-4 text-base py-3 px-6">
|
|
17
|
-
{t('not_found.button')}
|
|
18
|
-
</Button>
|
|
19
|
-
</Link>
|
|
20
|
-
</div>
|
|
21
|
-
);
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
export default NotFound;
|