@akinon/projectzero 1.99.0 → 1.100.0-rc.71
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 +233 -4
- package/app-template/.env.example +1 -0
- package/app-template/CHANGELOG.md +4982 -320
- package/app-template/README.md +25 -1
- package/app-template/package.json +19 -19
- package/app-template/public/locales/en/common.json +48 -1
- package/app-template/public/locales/tr/common.json +48 -1
- package/app-template/src/app/[commerce]/[locale]/[currency]/basket/page.tsx +9 -82
- package/app-template/src/app/[commerce]/[locale]/[currency]/category/[pk]/page.tsx +17 -4
- package/app-template/src/app/[commerce]/[locale]/[currency]/flat-page/[pk]/page.tsx +12 -1
- package/app-template/src/app/[commerce]/[locale]/[currency]/group-product/[pk]/page.tsx +29 -11
- package/app-template/src/app/[commerce]/[locale]/[currency]/landing-page/[pk]/page.tsx +12 -1
- package/app-template/src/app/[commerce]/[locale]/[currency]/product/[pk]/loading.tsx +67 -0
- package/app-template/src/app/[commerce]/[locale]/[currency]/product/[pk]/page.tsx +28 -10
- package/app-template/src/app/[commerce]/[locale]/[currency]/special-page/[pk]/page.tsx +12 -1
- package/app-template/src/app/api/form/[...id]/route.ts +1 -7
- package/app-template/src/app/api/image-proxy/route.ts +1 -0
- package/app-template/src/app/api/similar-product-list/route.ts +1 -0
- package/app-template/src/app/api/similar-products/route.ts +1 -0
- package/app-template/src/assets/fonts/pz-icon.css +3 -0
- package/app-template/src/components/__tests__/link.test.tsx +2 -0
- package/app-template/src/components/accordion.tsx +22 -19
- package/app-template/src/components/currency-select.tsx +1 -0
- package/app-template/src/components/file-input.tsx +27 -7
- package/app-template/src/components/generate-form-fields.tsx +43 -4
- package/app-template/src/components/input.tsx +9 -2
- package/app-template/src/components/modal.tsx +32 -16
- package/app-template/src/components/pagination.tsx +1 -0
- package/app-template/src/components/select.tsx +38 -26
- package/app-template/src/components/types/index.ts +25 -1
- package/app-template/src/hooks/index.ts +2 -0
- package/app-template/src/hooks/use-product-cart.ts +77 -0
- package/app-template/src/hooks/use-stock-alert.ts +74 -0
- package/app-template/src/plugins.js +3 -1
- package/app-template/src/settings.js +8 -2
- package/app-template/src/types/index.ts +74 -3
- package/app-template/src/utils/variant-validation.ts +41 -0
- package/app-template/src/views/account/address-form.tsx +8 -4
- package/app-template/src/views/account/contact-form.tsx +1 -1
- package/app-template/src/views/account/content-header.tsx +2 -2
- package/app-template/src/views/account/faq/faq-tabs.tsx +8 -2
- package/app-template/src/views/basket/basket-content.tsx +106 -0
- package/app-template/src/views/basket/basket-item.tsx +22 -14
- package/app-template/src/views/basket/summary.tsx +10 -7
- package/app-template/src/views/breadcrumb.tsx +2 -2
- package/app-template/src/views/category/category-info.tsx +1 -0
- package/app-template/src/views/category/filters/index.tsx +1 -1
- package/app-template/src/views/guest-login/index.tsx +6 -1
- package/app-template/src/views/header/action-menu.tsx +1 -1
- package/app-template/src/views/header/search/index.tsx +17 -5
- package/app-template/src/views/login/index.tsx +11 -10
- package/app-template/src/views/otp-login/index.tsx +11 -6
- package/app-template/src/views/product/product-actions.tsx +165 -0
- package/app-template/src/views/product/product-info.tsx +62 -263
- package/app-template/src/views/product/product-share.tsx +56 -0
- package/app-template/src/views/product/product-variants.tsx +26 -0
- package/app-template/src/views/product/slider.tsx +86 -73
- package/app-template/src/views/register/index.tsx +15 -11
- package/app-template/src/widgets/footer-menu.tsx +6 -2
- package/commands/plugins.ts +63 -16
- package/dist/commands/plugins.js +57 -16
- package/package.json +1 -1
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Variant } from '@theme/views/product';
|
|
3
|
+
import { VariantType } from '@akinon/next/types';
|
|
4
|
+
|
|
5
|
+
interface ProductVariantsProps {
|
|
6
|
+
variants: VariantType[];
|
|
7
|
+
onVariantChange: () => void;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const ProductVariants: React.FC<ProductVariantsProps> = ({
|
|
11
|
+
variants,
|
|
12
|
+
onVariantChange
|
|
13
|
+
}) => {
|
|
14
|
+
return (
|
|
15
|
+
<div className="flex flex-col">
|
|
16
|
+
{variants.map((variant) => (
|
|
17
|
+
<Variant
|
|
18
|
+
key={variant.attribute_key}
|
|
19
|
+
{...variant}
|
|
20
|
+
className="items-center mt-8"
|
|
21
|
+
onChange={onVariantChange}
|
|
22
|
+
/>
|
|
23
|
+
))}
|
|
24
|
+
</div>
|
|
25
|
+
);
|
|
26
|
+
};
|
|
@@ -7,6 +7,7 @@ import { Product } from '@akinon/next/types';
|
|
|
7
7
|
import { Image } from '@akinon/next/components/image';
|
|
8
8
|
import useFavButton from '../../hooks/use-fav-button';
|
|
9
9
|
import { twMerge } from 'tailwind-merge';
|
|
10
|
+
import PluginModule, { Component } from '@akinon/next/components/plugin-module';
|
|
10
11
|
|
|
11
12
|
type ProductSliderItem = {
|
|
12
13
|
product: Product;
|
|
@@ -35,90 +36,102 @@ export default function ProductInfoSlider({ product }: ProductSliderItem) {
|
|
|
35
36
|
carouselRef.current?.next();
|
|
36
37
|
};
|
|
37
38
|
|
|
38
|
-
const handleThumbnailClick = (index) => {
|
|
39
|
+
const handleThumbnailClick = (index: number) => {
|
|
39
40
|
setActiveIndex(index);
|
|
40
41
|
carouselRef.current?.goToSlide(index);
|
|
41
42
|
};
|
|
42
43
|
|
|
43
44
|
return (
|
|
44
|
-
|
|
45
|
-
<div className="lg:
|
|
46
|
-
<div className="
|
|
47
|
-
<
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
45
|
+
<>
|
|
46
|
+
<div className="lg:grid lg:grid-cols-6">
|
|
47
|
+
<div className="lg:col-span-1">
|
|
48
|
+
<div className="flex flex-col items-center justify-center md:mr-[6px]">
|
|
49
|
+
<button
|
|
50
|
+
onClick={goToPrev}
|
|
51
|
+
className={twMerge(
|
|
52
|
+
'hidden justify-center p-2 mb-3 border border-gray-100 rounded-full cursor-pointer lg:block',
|
|
53
|
+
[activeIndex === 0 && 'cursor-not-allowed opacity-45']
|
|
54
|
+
)}
|
|
55
|
+
disabled={activeIndex === 0}
|
|
56
|
+
>
|
|
57
|
+
<Icon name="chevron-up" size={15} className="fill-[#000000]" />
|
|
58
|
+
</button>
|
|
59
|
+
<div className="hidden flex-col items-center overflow-scroll w-[80px] max-h-[620px] lg:block">
|
|
60
|
+
{product?.productimage_set?.map((item, index) => (
|
|
61
|
+
<Image
|
|
62
|
+
key={index}
|
|
63
|
+
src={item.image}
|
|
64
|
+
alt={`Thumbnail ${index}`}
|
|
65
|
+
width={80}
|
|
66
|
+
height={128}
|
|
67
|
+
aspectRatio={80 / 128}
|
|
68
|
+
className={twMerge('cursor-pointer', [
|
|
69
|
+
activeIndex === index && 'border-2 border-primary'
|
|
70
|
+
])}
|
|
71
|
+
onClick={() => handleThumbnailClick(index)}
|
|
72
|
+
/>
|
|
73
|
+
))}
|
|
74
|
+
</div>
|
|
75
|
+
<button
|
|
76
|
+
onClick={goToNext}
|
|
77
|
+
className={twMerge(
|
|
78
|
+
'hidden justify-center p-2 mt-3 border border-gray-100 rounded-full cursor-pointer lg:block',
|
|
79
|
+
[
|
|
80
|
+
activeIndex === product.productimage_set.length - 1 &&
|
|
81
|
+
'cursor-not-allowed opacity-45'
|
|
82
|
+
]
|
|
83
|
+
)}
|
|
84
|
+
disabled={activeIndex === product.productimage_set.length - 1}
|
|
85
|
+
>
|
|
86
|
+
<Icon name="chevron-down" size={15} className="fill-[#000000]" />
|
|
87
|
+
</button>
|
|
88
|
+
</div>
|
|
89
|
+
</div>
|
|
90
|
+
|
|
91
|
+
<div className="relative lg:col-span-5">
|
|
92
|
+
<FavButton className="absolute right-8 top-6 z-[20] sm:hidden" />
|
|
93
|
+
|
|
94
|
+
<PluginModule
|
|
95
|
+
component={Component.ProductImageSearchFeature}
|
|
96
|
+
props={{
|
|
97
|
+
product,
|
|
98
|
+
activeIndex,
|
|
99
|
+
showResetButton: true
|
|
100
|
+
}}
|
|
101
|
+
/>
|
|
102
|
+
|
|
103
|
+
<CarouselCore
|
|
104
|
+
responsive={{
|
|
105
|
+
all: {
|
|
106
|
+
breakpoint: { max: 5000, min: 0 },
|
|
107
|
+
items: 1
|
|
108
|
+
}
|
|
109
|
+
}}
|
|
110
|
+
arrows={false}
|
|
111
|
+
swipeable={true}
|
|
112
|
+
ref={carouselRef}
|
|
113
|
+
afterChange={(previousSlide, { currentSlide }) => {
|
|
114
|
+
setActiveIndex(currentSlide);
|
|
115
|
+
}}
|
|
116
|
+
containerAspectRatio={{ mobile: 520 / 798, desktop: 484 / 726 }}
|
|
54
117
|
>
|
|
55
|
-
|
|
56
|
-
</button>
|
|
57
|
-
<div className="hidden flex-col items-center overflow-scroll w-[80px] max-h-[620px] lg:block">
|
|
58
|
-
{product?.productimage_set?.map((item, index) => (
|
|
118
|
+
{product?.productimage_set?.map((item, i) => (
|
|
59
119
|
<Image
|
|
60
|
-
key={
|
|
120
|
+
key={i}
|
|
61
121
|
src={item.image}
|
|
62
|
-
alt={
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
122
|
+
alt={product?.name || 'Product image'}
|
|
123
|
+
draggable={false}
|
|
124
|
+
aspectRatio={484 / 726}
|
|
125
|
+
sizes="(min-width: 425px) 512px,
|
|
126
|
+
(min-width: 601px) 576px,
|
|
127
|
+
(min-width: 768px) 336px,
|
|
128
|
+
(min-width: 1024px) 484px, 368px"
|
|
129
|
+
fill
|
|
69
130
|
/>
|
|
70
131
|
))}
|
|
71
|
-
</
|
|
72
|
-
<button
|
|
73
|
-
onClick={goToNext}
|
|
74
|
-
className={twMerge(
|
|
75
|
-
'hidden justify-center p-2 mt-3 border border-gray-100 rounded-full cursor-pointer lg:block',
|
|
76
|
-
[
|
|
77
|
-
activeIndex === product.productimage_set.length - 1 &&
|
|
78
|
-
'cursor-not-allowed opacity-45'
|
|
79
|
-
]
|
|
80
|
-
)}
|
|
81
|
-
disabled={activeIndex === product.productimage_set.length - 1}
|
|
82
|
-
>
|
|
83
|
-
<Icon name="chevron-down" size={15} className="fill-[#000000]" />
|
|
84
|
-
</button>
|
|
132
|
+
</CarouselCore>
|
|
85
133
|
</div>
|
|
86
134
|
</div>
|
|
87
|
-
|
|
88
|
-
<div className="relative lg:col-span-5">
|
|
89
|
-
<FavButton className="absolute right-8 top-6 z-[20] sm:hidden" />
|
|
90
|
-
|
|
91
|
-
<CarouselCore
|
|
92
|
-
responsive={{
|
|
93
|
-
all: {
|
|
94
|
-
breakpoint: { max: 5000, min: 0 },
|
|
95
|
-
items: 1
|
|
96
|
-
}
|
|
97
|
-
}}
|
|
98
|
-
arrows={false}
|
|
99
|
-
swipeable={true}
|
|
100
|
-
ref={carouselRef}
|
|
101
|
-
afterChange={(previousSlide, { currentSlide }) => {
|
|
102
|
-
setActiveIndex(currentSlide);
|
|
103
|
-
}}
|
|
104
|
-
containerAspectRatio={{ mobile: 520 / 798, desktop: 484 / 726 }}
|
|
105
|
-
>
|
|
106
|
-
{product?.productimage_set?.map((item, i) => (
|
|
107
|
-
<Image
|
|
108
|
-
key={i}
|
|
109
|
-
src={item.image}
|
|
110
|
-
alt={product.name}
|
|
111
|
-
draggable={false}
|
|
112
|
-
aspectRatio={484 / 726}
|
|
113
|
-
sizes="(min-width: 425px) 512px,
|
|
114
|
-
(min-width: 601px) 576px,
|
|
115
|
-
(min-width: 768px) 336px,
|
|
116
|
-
(min-width: 1024px) 484px, 368px"
|
|
117
|
-
fill
|
|
118
|
-
/>
|
|
119
|
-
))}
|
|
120
|
-
</CarouselCore>
|
|
121
|
-
</div>
|
|
122
|
-
</div>
|
|
135
|
+
</>
|
|
123
136
|
);
|
|
124
137
|
}
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
import { yupResolver } from '@hookform/resolvers/yup';
|
|
4
4
|
import clsx from 'clsx';
|
|
5
|
-
import { signIn
|
|
5
|
+
import { signIn } from 'next-auth/react';
|
|
6
6
|
import { useState } from 'react';
|
|
7
7
|
import { SubmitHandler, useForm } from 'react-hook-form';
|
|
8
8
|
import { useAppDispatch, useAppSelector } from '@akinon/next/redux/hooks';
|
|
9
|
-
import { RegisterFormType } from '@theme/types';
|
|
9
|
+
import { RegisterFormType, FormType, PzSignInOptions } from '@theme/types';
|
|
10
10
|
import { Button, Checkbox, Icon, Input, Modal } from '@theme/components';
|
|
11
11
|
import * as yup from 'yup';
|
|
12
12
|
import { useCaptcha, useLocalization, useRouter } from '@akinon/next/hooks';
|
|
@@ -125,8 +125,9 @@ export const Register = () => {
|
|
|
125
125
|
redirect: false,
|
|
126
126
|
callbackUrl: '/',
|
|
127
127
|
captchaValidated,
|
|
128
|
-
...data
|
|
129
|
-
|
|
128
|
+
...data,
|
|
129
|
+
formType: FormType.register
|
|
130
|
+
} as PzSignInOptions);
|
|
130
131
|
};
|
|
131
132
|
|
|
132
133
|
const onSubmit: SubmitHandler<RegisterFormType> = async (data) => {
|
|
@@ -143,7 +144,6 @@ export const Register = () => {
|
|
|
143
144
|
if (registerResponse.error) {
|
|
144
145
|
const errors: AuthError[] = JSON.parse(registerResponse.error);
|
|
145
146
|
|
|
146
|
-
|
|
147
147
|
if (errors.find((error) => error.type === 'captcha')) {
|
|
148
148
|
if (await validateCaptcha()) {
|
|
149
149
|
onSubmit(data);
|
|
@@ -171,25 +171,25 @@ export const Register = () => {
|
|
|
171
171
|
try {
|
|
172
172
|
parsedValue = JSON.parse(item.value);
|
|
173
173
|
} catch {
|
|
174
|
-
parsedValue = [item.value];
|
|
174
|
+
parsedValue = [item.value];
|
|
175
175
|
}
|
|
176
176
|
} else {
|
|
177
|
-
parsedValue = item.value;
|
|
177
|
+
parsedValue = item.value;
|
|
178
178
|
}
|
|
179
179
|
|
|
180
180
|
if (Array.isArray(parsedValue)) {
|
|
181
181
|
setError(item.name as keyof RegisterFormType, {
|
|
182
182
|
type: 'custom',
|
|
183
|
-
message: parsedValue.join(', ')
|
|
183
|
+
message: parsedValue.join(', ')
|
|
184
184
|
});
|
|
185
185
|
} else {
|
|
186
186
|
Object.keys(parsedValue).forEach((key) => {
|
|
187
187
|
const fieldName = key as keyof RegisterFormType;
|
|
188
188
|
const errorMessages = parsedValue[key] as string[];
|
|
189
|
-
|
|
189
|
+
|
|
190
190
|
setError(fieldName, {
|
|
191
191
|
type: 'custom',
|
|
192
|
-
message: errorMessages.join(', ')
|
|
192
|
+
message: errorMessages.join(', ')
|
|
193
193
|
});
|
|
194
194
|
});
|
|
195
195
|
}
|
|
@@ -247,7 +247,11 @@ export const Register = () => {
|
|
|
247
247
|
</p>
|
|
248
248
|
|
|
249
249
|
<form onSubmit={handleSubmit(onSubmit)} className="flex flex-col gap-4">
|
|
250
|
-
<input
|
|
250
|
+
<input
|
|
251
|
+
type="hidden"
|
|
252
|
+
value={FormType.register}
|
|
253
|
+
{...register('formType')}
|
|
254
|
+
/>
|
|
251
255
|
<input type="hidden" value={locale} {...register('locale')} />
|
|
252
256
|
|
|
253
257
|
<div className={clsx({ 'mb-4': errors.email })}>
|
|
@@ -2,6 +2,7 @@ import 'server-only';
|
|
|
2
2
|
|
|
3
3
|
import { Link, Accordion } from '@theme/components';
|
|
4
4
|
import { getWidgetData } from '@akinon/next/data/server';
|
|
5
|
+
import { ServerVariables } from '@akinon/next/utils/server-variables';
|
|
5
6
|
|
|
6
7
|
type SideItem = {
|
|
7
8
|
value: string;
|
|
@@ -47,6 +48,7 @@ type FooterMenuType = {
|
|
|
47
48
|
|
|
48
49
|
export default async function FooterMenu() {
|
|
49
50
|
const data = await getWidgetData<FooterMenuType>({ slug: 'footer-menu' });
|
|
51
|
+
const { locale } = ServerVariables;
|
|
50
52
|
|
|
51
53
|
return (
|
|
52
54
|
<div className="flex-1">
|
|
@@ -72,7 +74,7 @@ export default async function FooterMenu() {
|
|
|
72
74
|
: '_self'
|
|
73
75
|
}
|
|
74
76
|
data-testid={`footer-categories-${item?.value?.name
|
|
75
|
-
?.toLocaleLowerCase()
|
|
77
|
+
?.toLocaleLowerCase(locale)
|
|
76
78
|
.split(' ')
|
|
77
79
|
.join('')}`}
|
|
78
80
|
>
|
|
@@ -96,7 +98,9 @@ export default async function FooterMenu() {
|
|
|
96
98
|
? '_blank'
|
|
97
99
|
: '_self'
|
|
98
100
|
}
|
|
99
|
-
data-testid={`footer-categories-${item?.value?.name?.toLocaleLowerCase(
|
|
101
|
+
data-testid={`footer-categories-${item?.value?.name?.toLocaleLowerCase(
|
|
102
|
+
locale
|
|
103
|
+
)}`}
|
|
100
104
|
>
|
|
101
105
|
{item?.value?.name}
|
|
102
106
|
</Link>
|
package/commands/plugins.ts
CHANGED
|
@@ -29,7 +29,14 @@ async function checkVersion(pkg: PackageJson) {
|
|
|
29
29
|
|
|
30
30
|
if (!semver.satisfies(pkg.dependencies['@akinon/next'], latestVersion)) {
|
|
31
31
|
console.warn(
|
|
32
|
-
`\x1b[
|
|
32
|
+
`\x1b[43m Warning: The "${packageName}" package is currently at`,
|
|
33
|
+
`\x1b[41m version ${pkg.dependencies['@akinon/next']}`,
|
|
34
|
+
`\x1b[43m Please upgrade it to the latest version (${latestVersion}) to ensure plugin compatibility.`,
|
|
35
|
+
'\x1b[0m\n'
|
|
36
|
+
);
|
|
37
|
+
} else {
|
|
38
|
+
console.log(
|
|
39
|
+
`\x1b[42m Info: The package "${packageName}" is currently in the current version (${latestVersion}).`,
|
|
33
40
|
'\x1b[0m\n'
|
|
34
41
|
);
|
|
35
42
|
}
|
|
@@ -54,7 +61,27 @@ export default async () => {
|
|
|
54
61
|
}
|
|
55
62
|
}
|
|
56
63
|
|
|
57
|
-
|
|
64
|
+
function findPackageJson(): PackageJson {
|
|
65
|
+
const packageJsonPaths = [
|
|
66
|
+
path.resolve(rootDir, './package.json'),
|
|
67
|
+
path.resolve(rootDir, './apps/projectzeronext/package.json')
|
|
68
|
+
];
|
|
69
|
+
|
|
70
|
+
for (const packageJsonPath of packageJsonPaths) {
|
|
71
|
+
try {
|
|
72
|
+
const pkg = require(packageJsonPath);
|
|
73
|
+
if (pkg.dependencies['@akinon/next']) {
|
|
74
|
+
return pkg;
|
|
75
|
+
}
|
|
76
|
+
} catch (error) {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
throw new Error('Could not find package.json with @akinon/next dependency');
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const pkg = findPackageJson();
|
|
58
85
|
await checkVersion(pkg);
|
|
59
86
|
|
|
60
87
|
const pluginsFilePath = findPluginsFilePath();
|
|
@@ -69,45 +96,65 @@ export default async () => {
|
|
|
69
96
|
}
|
|
70
97
|
|
|
71
98
|
const definedPlugins = [
|
|
99
|
+
{
|
|
100
|
+
name: 'Akifast',
|
|
101
|
+
value: 'pz-akifast'
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
name: 'Apple Pay',
|
|
105
|
+
value: 'pz-apple-pay'
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: 'B2B',
|
|
109
|
+
value: 'pz-b2b'
|
|
110
|
+
},
|
|
72
111
|
{
|
|
73
112
|
name: 'Basket Gift Pack',
|
|
74
113
|
value: 'pz-basket-gift-pack'
|
|
75
114
|
},
|
|
76
115
|
{
|
|
77
|
-
name: '
|
|
78
|
-
value: 'pz-
|
|
116
|
+
name: 'BKM Express',
|
|
117
|
+
value: 'pz-bkm'
|
|
79
118
|
},
|
|
80
119
|
{
|
|
81
120
|
name: 'Checkout Gift Pack',
|
|
82
121
|
value: 'pz-checkout-gift-pack'
|
|
83
122
|
},
|
|
84
123
|
{
|
|
85
|
-
name: '
|
|
86
|
-
value: 'pz-
|
|
124
|
+
name: 'Click & Collect',
|
|
125
|
+
value: 'pz-click-collect'
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
name: 'Credit Payment',
|
|
129
|
+
value: 'pz-credit-payment'
|
|
87
130
|
},
|
|
88
131
|
{
|
|
89
132
|
name: 'Garanti Pay',
|
|
90
133
|
value: 'pz-gpay'
|
|
91
134
|
},
|
|
92
135
|
{
|
|
93
|
-
name: '
|
|
94
|
-
value: 'pz-
|
|
136
|
+
name: 'Masterpass',
|
|
137
|
+
value: 'pz-masterpass'
|
|
95
138
|
},
|
|
96
139
|
{
|
|
97
|
-
name: '
|
|
98
|
-
value: 'pz-
|
|
140
|
+
name: 'Multi Basket',
|
|
141
|
+
value: 'pz-multi-basket'
|
|
99
142
|
},
|
|
100
143
|
{
|
|
101
|
-
name: '
|
|
102
|
-
value: 'pz-
|
|
144
|
+
name: 'One Click Checkout',
|
|
145
|
+
value: 'pz-one-click-checkout'
|
|
103
146
|
},
|
|
104
147
|
{
|
|
105
|
-
name: '
|
|
106
|
-
value: 'pz-
|
|
148
|
+
name: 'Otp',
|
|
149
|
+
value: 'pz-otp'
|
|
107
150
|
},
|
|
108
151
|
{
|
|
109
|
-
name: '
|
|
110
|
-
value: 'pz-
|
|
152
|
+
name: 'Pay On Delivery',
|
|
153
|
+
value: 'pz-pay-on-delivery'
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
name: 'Saved Card',
|
|
157
|
+
value: 'pz-saved-card'
|
|
111
158
|
},
|
|
112
159
|
{
|
|
113
160
|
name: 'Tabby Payment Extension',
|
package/dist/commands/plugins.js
CHANGED
|
@@ -50,7 +50,10 @@ function checkVersion(pkg) {
|
|
|
50
50
|
const pkgInfo = (yield response.json());
|
|
51
51
|
const latestVersion = pkgInfo['dist-tags'].latest;
|
|
52
52
|
if (!semver_1.default.satisfies(pkg.dependencies['@akinon/next'], latestVersion)) {
|
|
53
|
-
console.warn(`\x1b[
|
|
53
|
+
console.warn(`\x1b[43m Warning: The "${packageName}" package is currently at`, `\x1b[41m version ${pkg.dependencies['@akinon/next']}`, `\x1b[43m Please upgrade it to the latest version (${latestVersion}) to ensure plugin compatibility.`, '\x1b[0m\n');
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
console.log(`\x1b[42m Info: The package "${packageName}" is currently in the current version (${latestVersion}).`, '\x1b[0m\n');
|
|
54
57
|
}
|
|
55
58
|
}
|
|
56
59
|
catch (error) {
|
|
@@ -72,7 +75,25 @@ exports.default = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
72
75
|
throw new Error('plugins.js was not found in either of the expected locations.');
|
|
73
76
|
}
|
|
74
77
|
}
|
|
75
|
-
|
|
78
|
+
function findPackageJson() {
|
|
79
|
+
const packageJsonPaths = [
|
|
80
|
+
path_1.default.resolve(rootDir, './package.json'),
|
|
81
|
+
path_1.default.resolve(rootDir, './apps/projectzeronext/package.json')
|
|
82
|
+
];
|
|
83
|
+
for (const packageJsonPath of packageJsonPaths) {
|
|
84
|
+
try {
|
|
85
|
+
const pkg = require(packageJsonPath);
|
|
86
|
+
if (pkg.dependencies['@akinon/next']) {
|
|
87
|
+
return pkg;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
throw new Error('Could not find package.json with @akinon/next dependency');
|
|
95
|
+
}
|
|
96
|
+
const pkg = findPackageJson();
|
|
76
97
|
yield checkVersion(pkg);
|
|
77
98
|
const pluginsFilePath = findPluginsFilePath();
|
|
78
99
|
let installedPlugins = [];
|
|
@@ -84,45 +105,65 @@ exports.default = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
84
105
|
process.exit(1);
|
|
85
106
|
}
|
|
86
107
|
const definedPlugins = [
|
|
108
|
+
{
|
|
109
|
+
name: 'Akifast',
|
|
110
|
+
value: 'pz-akifast'
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: 'Apple Pay',
|
|
114
|
+
value: 'pz-apple-pay'
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
name: 'B2B',
|
|
118
|
+
value: 'pz-b2b'
|
|
119
|
+
},
|
|
87
120
|
{
|
|
88
121
|
name: 'Basket Gift Pack',
|
|
89
122
|
value: 'pz-basket-gift-pack'
|
|
90
123
|
},
|
|
91
124
|
{
|
|
92
|
-
name: '
|
|
93
|
-
value: 'pz-
|
|
125
|
+
name: 'BKM Express',
|
|
126
|
+
value: 'pz-bkm'
|
|
94
127
|
},
|
|
95
128
|
{
|
|
96
129
|
name: 'Checkout Gift Pack',
|
|
97
130
|
value: 'pz-checkout-gift-pack'
|
|
98
131
|
},
|
|
99
132
|
{
|
|
100
|
-
name: '
|
|
101
|
-
value: 'pz-
|
|
133
|
+
name: 'Click & Collect',
|
|
134
|
+
value: 'pz-click-collect'
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
name: 'Credit Payment',
|
|
138
|
+
value: 'pz-credit-payment'
|
|
102
139
|
},
|
|
103
140
|
{
|
|
104
141
|
name: 'Garanti Pay',
|
|
105
142
|
value: 'pz-gpay'
|
|
106
143
|
},
|
|
107
144
|
{
|
|
108
|
-
name: '
|
|
109
|
-
value: 'pz-
|
|
145
|
+
name: 'Masterpass',
|
|
146
|
+
value: 'pz-masterpass'
|
|
110
147
|
},
|
|
111
148
|
{
|
|
112
|
-
name: '
|
|
113
|
-
value: 'pz-
|
|
149
|
+
name: 'Multi Basket',
|
|
150
|
+
value: 'pz-multi-basket'
|
|
114
151
|
},
|
|
115
152
|
{
|
|
116
|
-
name: '
|
|
117
|
-
value: 'pz-
|
|
153
|
+
name: 'One Click Checkout',
|
|
154
|
+
value: 'pz-one-click-checkout'
|
|
118
155
|
},
|
|
119
156
|
{
|
|
120
|
-
name: '
|
|
121
|
-
value: 'pz-
|
|
157
|
+
name: 'Otp',
|
|
158
|
+
value: 'pz-otp'
|
|
122
159
|
},
|
|
123
160
|
{
|
|
124
|
-
name: '
|
|
125
|
-
value: 'pz-
|
|
161
|
+
name: 'Pay On Delivery',
|
|
162
|
+
value: 'pz-pay-on-delivery'
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
name: 'Saved Card',
|
|
166
|
+
value: 'pz-saved-card'
|
|
126
167
|
},
|
|
127
168
|
{
|
|
128
169
|
name: 'Tabby Payment Extension',
|