@mohasinac/appkit 2.7.36 → 2.7.37
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/dist/_internal/client/features/layout/DashboardLayoutClient.js +1 -1
- package/dist/_internal/client/features/seller/print-center/InventoryLabel.d.ts +12 -0
- package/dist/_internal/client/features/seller/print-center/InventoryLabel.js +49 -0
- package/dist/_internal/client/features/seller/print-center/LabelDesignPicker.d.ts +7 -0
- package/dist/_internal/client/features/seller/print-center/LabelDesignPicker.js +32 -0
- package/dist/_internal/client/features/seller/print-center/OrderPackingLabel.d.ts +28 -0
- package/dist/_internal/client/features/seller/print-center/OrderPackingLabel.js +33 -0
- package/dist/_internal/client/features/seller/print-center/PhysicalLocationModal.d.ts +12 -0
- package/dist/_internal/client/features/seller/print-center/PhysicalLocationModal.js +30 -0
- package/dist/_internal/client/features/seller/print-center/PrintCenterView.d.ts +12 -0
- package/dist/_internal/client/features/seller/print-center/PrintCenterView.js +102 -0
- package/dist/_internal/client/features/seller/print-center/PrintGrid.d.ts +12 -0
- package/dist/_internal/client/features/seller/print-center/PrintGrid.js +13 -0
- package/dist/_internal/client/features/seller/print-center/StoreCard.d.ts +19 -0
- package/dist/_internal/client/features/seller/print-center/StoreCard.js +30 -0
- package/dist/_internal/client/features/seller/print-center/WebsiteCard.d.ts +11 -0
- package/dist/_internal/client/features/seller/print-center/WebsiteCard.js +25 -0
- package/dist/_internal/client/features/seller/print-center/index.d.ts +11 -0
- package/dist/_internal/client/features/seller/print-center/index.js +10 -0
- package/dist/_internal/client/features/seller/print-center/types.d.ts +20 -0
- package/dist/_internal/client/features/seller/print-center/types.js +20 -0
- package/dist/_internal/client/features/seller/print-center/useInventoryPdf.d.ts +18 -0
- package/dist/_internal/client/features/seller/print-center/useInventoryPdf.js +76 -0
- package/dist/_internal/server/jobs/core/draftPrune.d.ts +2 -0
- package/dist/_internal/server/jobs/core/draftPrune.js +15 -0
- package/dist/_internal/server/jobs/core/onBidPlaced.js +1 -1
- package/dist/_internal/server/jobs/core/promotions.d.ts +1 -0
- package/dist/_internal/server/jobs/core/promotions.js +21 -6
- package/dist/_internal/server/jobs/handlers/assignSpinPrize.js +18 -1
- package/dist/_internal/server/jobs/handlers/draftPrune.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/draftPrune.js +2 -0
- package/dist/_internal/server/jobs/handlers/index.d.ts +1 -0
- package/dist/_internal/server/jobs/handlers/index.js +2 -0
- package/dist/_internal/server/jobs/handlers/triggerEventRaffle.js +15 -1
- package/dist/_internal/shared/actions/action-registry.js +32 -0
- package/dist/_internal/shared/features/blog/schema.d.ts +8 -8
- package/dist/_internal/shared/features/categories/bundle-schemas.d.ts +10 -10
- package/dist/_internal/shared/features/orders/schema.d.ts +8 -8
- package/dist/_internal/shared/features/products/schema.d.ts +8 -8
- package/dist/_internal/shared/features/promotions/schema.d.ts +6 -6
- package/dist/_internal/shared/features/reviews/schema.d.ts +2 -2
- package/dist/client.d.ts +11 -1
- package/dist/client.js +6 -1
- package/dist/configs/next.js +1 -0
- package/dist/constants/api-endpoints.d.ts +6 -0
- package/dist/constants/api-endpoints.js +2 -0
- package/dist/core/server-action.d.ts +4 -0
- package/dist/errors/error-codes.d.ts +18 -0
- package/dist/errors/error-codes.js +18 -0
- package/dist/errors/index.d.ts +1 -1
- package/dist/errors/index.js +1 -1
- package/dist/errors/messages.d.ts +1 -0
- package/dist/errors/messages.js +1 -0
- package/dist/features/account/components/UserSidebar.js +1 -1
- package/dist/features/account/schemas/index.d.ts +12 -12
- package/dist/features/admin/components/AdminSidebar.js +1 -1
- package/dist/features/auctions/actions/bid-actions.js +13 -6
- package/dist/features/auctions/components/PlaceBidFormClient.js +10 -2
- package/dist/features/auctions/repository/bid.repository.d.ts +7 -0
- package/dist/features/auctions/repository/bid.repository.js +16 -0
- package/dist/features/auctions/schemas/index.d.ts +18 -18
- package/dist/features/auth/schemas/index.d.ts +2 -2
- package/dist/features/before-after/schemas/index.d.ts +2 -2
- package/dist/features/blog/actions/blog-actions.d.ts +32 -32
- package/dist/features/blog/components/BlogPostForm.js +1 -1
- package/dist/features/blog/schemas/index.d.ts +38 -38
- package/dist/features/categories/schemas/index.d.ts +10 -10
- package/dist/features/collections/schemas/index.d.ts +4 -4
- package/dist/features/consultation/schemas/index.d.ts +9 -9
- package/dist/features/corporate/schemas/index.d.ts +4 -4
- package/dist/features/events/schemas/index.d.ts +50 -50
- package/dist/features/faq/actions/faq-actions.d.ts +6 -6
- package/dist/features/faq/schemas/index.d.ts +8 -8
- package/dist/features/homepage/actions/homepage-section-actions.d.ts +4 -4
- package/dist/features/layout/AppLayoutShell.js +1 -1
- package/dist/features/layout/AutoBreadcrumbs.js +1 -1
- package/dist/features/media/AvatarUpload.js +1 -1
- package/dist/features/media/types/index.d.ts +4 -4
- package/dist/features/media/upload/ImageUpload.js +18 -9
- package/dist/features/media/upload/MediaUploadList.js +2 -2
- package/dist/features/orders/schemas/firestore.d.ts +6 -0
- package/dist/features/orders/schemas/index.d.ts +10 -10
- package/dist/features/orders/types/index.d.ts +5 -0
- package/dist/features/payments/schemas/index.d.ts +4 -4
- package/dist/features/pre-orders/schemas/index.d.ts +8 -8
- package/dist/features/products/components/PrizeDrawItemsEditor.js +1 -1
- package/dist/features/products/components/ProductForm.js +20 -2
- package/dist/features/products/repository/products.repository.d.ts +3 -1
- package/dist/features/products/repository/products.repository.js +12 -1
- package/dist/features/products/schemas/firestore.d.ts +7 -0
- package/dist/features/products/schemas/index.d.ts +34 -34
- package/dist/features/products/schemas/product-features.validators.d.ts +6 -6
- package/dist/features/products/types/index.d.ts +6 -0
- package/dist/features/promotions/schemas/index.d.ts +14 -14
- package/dist/features/reviews/schemas/index.d.ts +18 -18
- package/dist/features/seller/actions/offer-actions.js +10 -1
- package/dist/features/seller/components/PhysicalLocationModal.d.ts +12 -0
- package/dist/features/seller/components/PhysicalLocationModal.js +30 -0
- package/dist/features/seller/components/PrintCenterView.d.ts +40 -0
- package/dist/features/seller/components/PrintCenterView.js +6 -0
- package/dist/features/seller/components/SellerOrdersView.js +48 -3
- package/dist/features/seller/components/SellerProductShell.d.ts +1 -0
- package/dist/features/seller/components/SellerProductShell.js +26 -4
- package/dist/features/seller/components/SellerProductsView.js +54 -13
- package/dist/features/seller/components/SellerSidebar.js +1 -1
- package/dist/features/seller/components/index.d.ts +1 -0
- package/dist/features/seller/components/index.js +1 -0
- package/dist/features/seller/schemas/firestore.d.ts +2 -0
- package/dist/features/seller/schemas/firestore.js +1 -0
- package/dist/features/seller/schemas/index.d.ts +22 -22
- package/dist/features/shell/FormShell.js +1 -1
- package/dist/features/shell/StepForm.d.ts +3 -1
- package/dist/features/shell/StepForm.js +3 -3
- package/dist/features/stores/schemas/index.d.ts +4 -4
- package/dist/index.d.ts +9 -1
- package/dist/index.js +6 -1
- package/dist/next/routing/route-map.d.ts +8 -0
- package/dist/next/routing/route-map.js +3 -0
- package/dist/tailwind-utilities.css +1 -1
- package/dist/ui/components/RowActionMenu.js +45 -10
- package/dist/ui/components/SideDrawer.style.css +2 -2
- package/dist/ui/forms/FieldCheckbox.d.ts +13 -0
- package/dist/ui/forms/FieldCheckbox.js +25 -0
- package/dist/ui/forms/FieldInput.d.ts +11 -0
- package/dist/ui/forms/FieldInput.js +25 -0
- package/dist/ui/forms/FieldSelect.d.ts +17 -0
- package/dist/ui/forms/FieldSelect.js +25 -0
- package/dist/ui/forms/FormShell.d.ts +48 -0
- package/dist/ui/forms/FormShell.js +176 -0
- package/dist/ui/forms/FormShell.style.css +287 -0
- package/dist/ui/forms/index.d.ts +8 -0
- package/dist/ui/forms/index.js +4 -0
- package/dist/ui/index.d.ts +9 -0
- package/dist/ui/index.js +5 -0
- package/dist/utils/action-response.d.ts +6 -0
- package/dist/utils/action-response.js +22 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/validation/schemas.d.ts +10 -10
- package/package.json +2 -2
|
@@ -16,8 +16,8 @@ export declare const orderItemSchema: z.ZodObject<{
|
|
|
16
16
|
productId: string;
|
|
17
17
|
quantity: number;
|
|
18
18
|
currency?: string | undefined;
|
|
19
|
-
storeId?: string | undefined;
|
|
20
19
|
image?: string | undefined;
|
|
20
|
+
storeId?: string | undefined;
|
|
21
21
|
attributes?: Record<string, string> | undefined;
|
|
22
22
|
}, {
|
|
23
23
|
title: string;
|
|
@@ -25,8 +25,8 @@ export declare const orderItemSchema: z.ZodObject<{
|
|
|
25
25
|
productId: string;
|
|
26
26
|
quantity: number;
|
|
27
27
|
currency?: string | undefined;
|
|
28
|
-
storeId?: string | undefined;
|
|
29
28
|
image?: string | undefined;
|
|
29
|
+
storeId?: string | undefined;
|
|
30
30
|
attributes?: Record<string, string> | undefined;
|
|
31
31
|
}>;
|
|
32
32
|
export declare const orderTimelineSchema: z.ZodObject<{
|
|
@@ -76,8 +76,8 @@ export declare const orderSchema: z.ZodObject<{
|
|
|
76
76
|
productId: string;
|
|
77
77
|
quantity: number;
|
|
78
78
|
currency?: string | undefined;
|
|
79
|
-
storeId?: string | undefined;
|
|
80
79
|
image?: string | undefined;
|
|
80
|
+
storeId?: string | undefined;
|
|
81
81
|
attributes?: Record<string, string> | undefined;
|
|
82
82
|
}, {
|
|
83
83
|
title: string;
|
|
@@ -85,8 +85,8 @@ export declare const orderSchema: z.ZodObject<{
|
|
|
85
85
|
productId: string;
|
|
86
86
|
quantity: number;
|
|
87
87
|
currency?: string | undefined;
|
|
88
|
-
storeId?: string | undefined;
|
|
89
88
|
image?: string | undefined;
|
|
89
|
+
storeId?: string | undefined;
|
|
90
90
|
attributes?: Record<string, string> | undefined;
|
|
91
91
|
}>, "many">;
|
|
92
92
|
address: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
@@ -131,8 +131,8 @@ export declare const orderSchema: z.ZodObject<{
|
|
|
131
131
|
productId: string;
|
|
132
132
|
quantity: number;
|
|
133
133
|
currency?: string | undefined;
|
|
134
|
-
storeId?: string | undefined;
|
|
135
134
|
image?: string | undefined;
|
|
135
|
+
storeId?: string | undefined;
|
|
136
136
|
attributes?: Record<string, string> | undefined;
|
|
137
137
|
}[];
|
|
138
138
|
total: number;
|
|
@@ -143,10 +143,10 @@ export declare const orderSchema: z.ZodObject<{
|
|
|
143
143
|
createdAt?: string | undefined;
|
|
144
144
|
updatedAt?: string | undefined;
|
|
145
145
|
notes?: string | undefined;
|
|
146
|
+
tax?: number | undefined;
|
|
146
147
|
trackingNumber?: string | undefined;
|
|
147
148
|
couponCode?: string | undefined;
|
|
148
149
|
shippingCarrier?: string | undefined;
|
|
149
|
-
tax?: number | undefined;
|
|
150
150
|
discount?: number | undefined;
|
|
151
151
|
paymentGateway?: string | undefined;
|
|
152
152
|
shippingCost?: number | undefined;
|
|
@@ -166,8 +166,8 @@ export declare const orderSchema: z.ZodObject<{
|
|
|
166
166
|
productId: string;
|
|
167
167
|
quantity: number;
|
|
168
168
|
currency?: string | undefined;
|
|
169
|
-
storeId?: string | undefined;
|
|
170
169
|
image?: string | undefined;
|
|
170
|
+
storeId?: string | undefined;
|
|
171
171
|
attributes?: Record<string, string> | undefined;
|
|
172
172
|
}[];
|
|
173
173
|
total: number;
|
|
@@ -178,10 +178,10 @@ export declare const orderSchema: z.ZodObject<{
|
|
|
178
178
|
createdAt?: string | undefined;
|
|
179
179
|
updatedAt?: string | undefined;
|
|
180
180
|
notes?: string | undefined;
|
|
181
|
+
tax?: number | undefined;
|
|
181
182
|
trackingNumber?: string | undefined;
|
|
182
183
|
couponCode?: string | undefined;
|
|
183
184
|
shippingCarrier?: string | undefined;
|
|
184
|
-
tax?: number | undefined;
|
|
185
185
|
discount?: number | undefined;
|
|
186
186
|
paymentGateway?: string | undefined;
|
|
187
187
|
shippingCost?: number | undefined;
|
|
@@ -202,15 +202,15 @@ export declare const orderListParamsSchema: z.ZodObject<{
|
|
|
202
202
|
perPage: z.ZodOptional<z.ZodNumber>;
|
|
203
203
|
}, "strip", z.ZodTypeAny, {
|
|
204
204
|
sort?: string | undefined;
|
|
205
|
-
perPage?: number | undefined;
|
|
206
205
|
page?: number | undefined;
|
|
206
|
+
perPage?: number | undefined;
|
|
207
207
|
userId?: string | undefined;
|
|
208
208
|
paymentStatus?: string | undefined;
|
|
209
209
|
orderStatus?: "pending" | "processing" | "refunded" | "confirmed" | "shipped" | "delivered" | "cancelled" | "return_requested" | "returned" | undefined;
|
|
210
210
|
}, {
|
|
211
211
|
sort?: string | undefined;
|
|
212
|
-
perPage?: number | undefined;
|
|
213
212
|
page?: number | undefined;
|
|
213
|
+
perPage?: number | undefined;
|
|
214
214
|
userId?: string | undefined;
|
|
215
215
|
paymentStatus?: string | undefined;
|
|
216
216
|
orderStatus?: "pending" | "processing" | "refunded" | "confirmed" | "shipped" | "delivered" | "cancelled" | "return_requested" | "returned" | undefined;
|
|
@@ -39,8 +39,8 @@ export declare const paymentRecordSchema: z.ZodObject<{
|
|
|
39
39
|
createdAt: z.ZodOptional<z.ZodString>;
|
|
40
40
|
}, "strip", z.ZodTypeAny, {
|
|
41
41
|
currency: string;
|
|
42
|
+
status: "pending" | "failed" | "captured" | "authorized" | "refunded" | "partially_refunded";
|
|
42
43
|
id: string;
|
|
43
|
-
status: "failed" | "captured" | "pending" | "authorized" | "refunded" | "partially_refunded";
|
|
44
44
|
amount: number;
|
|
45
45
|
orderId: string;
|
|
46
46
|
gateway: "bank_transfer" | "upi" | "razorpay" | "stripe" | "paypal" | "cod" | "whatsapp";
|
|
@@ -52,8 +52,8 @@ export declare const paymentRecordSchema: z.ZodObject<{
|
|
|
52
52
|
orderId: string;
|
|
53
53
|
gateway: "bank_transfer" | "upi" | "razorpay" | "stripe" | "paypal" | "cod" | "whatsapp";
|
|
54
54
|
currency?: string | undefined;
|
|
55
|
+
status?: "pending" | "failed" | "captured" | "authorized" | "refunded" | "partially_refunded" | undefined;
|
|
55
56
|
createdAt?: string | undefined;
|
|
56
|
-
status?: "failed" | "captured" | "pending" | "authorized" | "refunded" | "partially_refunded" | undefined;
|
|
57
57
|
gatewayPaymentId?: string | undefined;
|
|
58
58
|
}>;
|
|
59
59
|
export declare const paymentGatewayConfigSchema: z.ZodObject<{
|
|
@@ -64,14 +64,14 @@ export declare const paymentGatewayConfigSchema: z.ZodObject<{
|
|
|
64
64
|
sortOrder: z.ZodDefault<z.ZodNumber>;
|
|
65
65
|
}, "strip", z.ZodTypeAny, {
|
|
66
66
|
id: string;
|
|
67
|
+
displayName: string;
|
|
67
68
|
gateway: "bank_transfer" | "upi" | "razorpay" | "stripe" | "paypal" | "cod" | "whatsapp";
|
|
68
69
|
isEnabled: boolean;
|
|
69
|
-
displayName: string;
|
|
70
70
|
sortOrder: number;
|
|
71
71
|
}, {
|
|
72
72
|
id: string;
|
|
73
|
-
gateway: "bank_transfer" | "upi" | "razorpay" | "stripe" | "paypal" | "cod" | "whatsapp";
|
|
74
73
|
displayName: string;
|
|
74
|
+
gateway: "bank_transfer" | "upi" | "razorpay" | "stripe" | "paypal" | "cod" | "whatsapp";
|
|
75
75
|
isEnabled?: boolean | undefined;
|
|
76
76
|
sortOrder?: number | undefined;
|
|
77
77
|
}>;
|
|
@@ -22,18 +22,18 @@ export declare const preorderItemSchema: z.ZodObject<{
|
|
|
22
22
|
source: z.ZodOptional<z.ZodEnum<["upload", "youtube", "external"]>>;
|
|
23
23
|
youtubeId: z.ZodOptional<z.ZodString>;
|
|
24
24
|
}, "strip", z.ZodTypeAny, {
|
|
25
|
-
type: "video" | "image" | "file";
|
|
26
25
|
url: string;
|
|
27
|
-
|
|
26
|
+
type: "image" | "video" | "file";
|
|
28
27
|
alt?: string | undefined;
|
|
29
28
|
thumbnailUrl?: string | undefined;
|
|
29
|
+
source?: "upload" | "youtube" | "external" | undefined;
|
|
30
30
|
youtubeId?: string | undefined;
|
|
31
31
|
}, {
|
|
32
|
-
type: "video" | "image" | "file";
|
|
33
32
|
url: string;
|
|
34
|
-
|
|
33
|
+
type: "image" | "video" | "file";
|
|
35
34
|
alt?: string | undefined;
|
|
36
35
|
thumbnailUrl?: string | undefined;
|
|
36
|
+
source?: "upload" | "youtube" | "external" | undefined;
|
|
37
37
|
youtubeId?: string | undefined;
|
|
38
38
|
}>, "many">>;
|
|
39
39
|
salePrice: z.ZodNumber;
|
|
@@ -56,11 +56,11 @@ export declare const preorderItemSchema: z.ZodObject<{
|
|
|
56
56
|
brand?: string | undefined;
|
|
57
57
|
images?: string[] | undefined;
|
|
58
58
|
media?: {
|
|
59
|
-
type: "video" | "image" | "file";
|
|
60
59
|
url: string;
|
|
61
|
-
|
|
60
|
+
type: "image" | "video" | "file";
|
|
62
61
|
alt?: string | undefined;
|
|
63
62
|
thumbnailUrl?: string | undefined;
|
|
63
|
+
source?: "upload" | "youtube" | "external" | undefined;
|
|
64
64
|
youtubeId?: string | undefined;
|
|
65
65
|
}[] | undefined;
|
|
66
66
|
franchise?: string | undefined;
|
|
@@ -75,11 +75,11 @@ export declare const preorderItemSchema: z.ZodObject<{
|
|
|
75
75
|
brand?: string | undefined;
|
|
76
76
|
images?: string[] | undefined;
|
|
77
77
|
media?: {
|
|
78
|
-
type: "video" | "image" | "file";
|
|
79
78
|
url: string;
|
|
80
|
-
|
|
79
|
+
type: "image" | "video" | "file";
|
|
81
80
|
alt?: string | undefined;
|
|
82
81
|
thumbnailUrl?: string | undefined;
|
|
82
|
+
source?: "upload" | "youtube" | "external" | undefined;
|
|
83
83
|
youtubeId?: string | undefined;
|
|
84
84
|
}[] | undefined;
|
|
85
85
|
active?: boolean | undefined;
|
|
@@ -93,7 +93,7 @@ export function PrizeDrawItemsEditor({ items, onChange, onUploadImage, onUploadV
|
|
|
93
93
|
}), disabled: locked, placeholder: "2999" }) })] }), _jsxs(Stack, { gap: "xs", children: [_jsxs(Text, { className: "text-sm font-medium", children: ["Images (", (it.images ?? []).length, "/", MAX_IMAGES_PER_ITEM, ")"] }), _jsx(Row, { gap: "sm", className: "flex-wrap", children: Array.from({ length: MAX_IMAGES_PER_ITEM }).map((_, slot) => {
|
|
94
94
|
const existing = (it.images ?? [])[slot];
|
|
95
95
|
return (_jsxs(Div, { className: "w-40", children: [_jsx(ImageUpload, { currentImage: existing, label: existing ? "Replace" : `Image ${slot + 1}`, onUpload: (file) => onUploadImage(file, it.itemNumber), onChange: (url) => setImage(index, slot, url) }), existing && !locked ? (_jsx(Button, { type: "button", variant: "ghost", size: "sm", onClick: () => removeImage(index, slot), children: "Remove" })) : null] }, slot));
|
|
96
|
-
}) })] }), onUploadVideo ? (_jsxs(Stack, { gap: "xs", children: [_jsx(Text, { className: "text-sm font-medium", children: "Video (optional)" }), _jsx("input", { type: "file", accept: "video
|
|
96
|
+
}) })] }), onUploadVideo ? (_jsxs(Stack, { gap: "xs", children: [_jsx(Text, { className: "text-sm font-medium", children: "Video (optional)" }), _jsx("input", { type: "file", accept: "video/*", disabled: locked, onChange: (e) => handleVideoFileChange(e, index, it.itemNumber) }), it.video?.url ? (_jsxs(Text, { className: "text-xs text-[var(--appkit-color-text-muted)] truncate", children: ["Current: ", it.video.url] })) : null] })) : null] })] }, `prize-item-${it.itemNumber}-${index}`));
|
|
97
97
|
}) }), items.length < MIN_ITEMS ? (_jsxs(Div, { className: "rounded border border-red-400/40 bg-red-50 px-3 py-2 text-sm text-red-900 dark:bg-red-900/30 dark:text-red-100", children: ["At least ", MIN_ITEMS, " prizes are required."] })) : null] }));
|
|
98
98
|
}
|
|
99
99
|
export default PrizeDrawItemsEditor;
|
|
@@ -90,7 +90,7 @@ export function ProductForm({ product, onChange, isReadonly = false, renderDescr
|
|
|
90
90
|
name: product.title || "product",
|
|
91
91
|
category: (product.categorySlugs?.[0] ?? product.category) || "uncategorized",
|
|
92
92
|
store: product.storeName || "store",
|
|
93
|
-
}), onChange: (url) => update({ mainImage: url }), label: t("formMainImage"), helperText: "Recommended: 800x800px (1:1)" })), isReadonly && product.mainImage && (_jsx(FormField, { name: "mainImage", label: t("formMainImage"), type: "text", value: product.mainImage, onChange: () => { }, disabled: true })), !isReadonly && (_jsx(MediaUploadList, { label: t("formGalleryImages"), value: galleryImages, onChange: (fields) => update({ images: fields.map((f) => f.url) }), onUpload: handleGalleryUpload, accept: "image/*", maxItems: 5, maxSizeMB: 10, helperText: t("formGalleryImagesHelper"), onAbort: onMediaAbort })), !isReadonly && (_jsx(MediaUploadField, { label: t("formVideo"), value: product.video?.url || "", onChange: (url) => update({
|
|
93
|
+
}), onChange: (url) => update({ mainImage: url }), label: t("formMainImage"), helperText: "Recommended: 800x800px (1:1)" })), isReadonly && product.mainImage && (_jsx(FormField, { name: "mainImage", label: t("formMainImage"), type: "text", value: product.mainImage, onChange: () => { }, disabled: true })), !isReadonly && (_jsx(MediaUploadList, { label: t("formGalleryImages"), value: galleryImages, onChange: (fields) => update({ images: fields.map((f) => f.url) }), onUpload: handleGalleryUpload, accept: "image/*,video/*", maxItems: 5, maxSizeMB: 10, helperText: t("formGalleryImagesHelper"), onAbort: onMediaAbort })), !isReadonly && (_jsx(MediaUploadField, { label: t("formVideo"), value: product.video?.url || "", onChange: (url) => update({
|
|
94
94
|
video: url
|
|
95
95
|
? {
|
|
96
96
|
url,
|
|
@@ -178,5 +178,23 @@ export function ProductForm({ product, onChange, isReadonly = false, renderDescr
|
|
|
178
178
|
? "auction"
|
|
179
179
|
: isPreOrderListing(product)
|
|
180
180
|
? "preorder"
|
|
181
|
-
: "product"), storeId: product.storeId, disabled: isReadonly }), _jsxs(Div, { children: [_jsx(Heading, { level: 3, className: "mb-1 text-sm font-semibold text-zinc-700 dark:text-zinc-300", children: "Custom Sections" }), _jsx(Text, { className: "mb-3 text-xs text-zinc-500 dark:text-zinc-400", children: "Add up to 3 custom tabs to your product page \u2014 e.g. \"Box Contents\", \"Compatibility\", \"Grading Details\"." }), _jsx(CustomSectionsEditor, { sections: product.customSections ?? [], onChange: (sections) => update({ customSections: sections }) })] }), _jsx(FormField, { name: "shippingInfo", label: t("formShipping"), type: "textarea", value: product.shippingInfo || "", onChange: (value) => update({ shippingInfo: value }), disabled: isReadonly, placeholder: "Shipping information..." }), _jsx(FormField, { name: "returnPolicy", label: t("formReturnPolicy"), type: "textarea", value: product.returnPolicy || "", onChange: (value) => update({ returnPolicy: value }), disabled: isReadonly, placeholder: "Return policy details..." }),
|
|
181
|
+
: "product"), storeId: product.storeId, disabled: isReadonly }), _jsxs(Div, { children: [_jsx(Heading, { level: 3, className: "mb-1 text-sm font-semibold text-zinc-700 dark:text-zinc-300", children: "Custom Sections" }), _jsx(Text, { className: "mb-3 text-xs text-zinc-500 dark:text-zinc-400", children: "Add up to 3 custom tabs to your product page \u2014 e.g. \"Box Contents\", \"Compatibility\", \"Grading Details\"." }), _jsx(CustomSectionsEditor, { sections: product.customSections ?? [], onChange: (sections) => update({ customSections: sections }) })] }), _jsx(FormField, { name: "shippingInfo", label: t("formShipping"), type: "textarea", value: product.shippingInfo || "", onChange: (value) => update({ shippingInfo: value }), disabled: isReadonly, placeholder: "Shipping information..." }), _jsx(FormField, { name: "returnPolicy", label: t("formReturnPolicy"), type: "textarea", value: product.returnPolicy || "", onChange: (value) => update({ returnPolicy: value }), disabled: isReadonly, placeholder: "Return policy details..." }), _jsxs(Div, { children: [_jsx(Heading, { level: 3, className: "mb-1 text-sm font-semibold text-zinc-700 dark:text-zinc-300", children: "Physical Inventory" }), _jsx(Text, { className: "mb-3 text-xs text-zinc-500 dark:text-zinc-400", children: "Assign a storage location for warehouse or shelf organisation. Used by the Print & Label Center." }), _jsxs(FormGroup, { columns: 3, children: [_jsx(FormField, { name: "physicalLocation.zone", label: "Zone", type: "text", placeholder: "e.g. A", value: product.physicalLocation?.zone ?? "", onChange: (v) => update({
|
|
182
|
+
physicalLocation: {
|
|
183
|
+
zone: v,
|
|
184
|
+
shelf: product.physicalLocation?.shelf ?? "",
|
|
185
|
+
bin: product.physicalLocation?.bin ?? "",
|
|
186
|
+
},
|
|
187
|
+
}), disabled: isReadonly }), _jsx(FormField, { name: "physicalLocation.shelf", label: "Shelf", type: "text", placeholder: "e.g. 3", value: product.physicalLocation?.shelf ?? "", onChange: (v) => update({
|
|
188
|
+
physicalLocation: {
|
|
189
|
+
zone: product.physicalLocation?.zone ?? "",
|
|
190
|
+
shelf: v,
|
|
191
|
+
bin: product.physicalLocation?.bin ?? "",
|
|
192
|
+
},
|
|
193
|
+
}), disabled: isReadonly }), _jsx(FormField, { name: "physicalLocation.bin", label: "Bin", type: "text", placeholder: "e.g. Blue", value: product.physicalLocation?.bin ?? "", onChange: (v) => update({
|
|
194
|
+
physicalLocation: {
|
|
195
|
+
zone: product.physicalLocation?.zone ?? "",
|
|
196
|
+
shelf: product.physicalLocation?.shelf ?? "",
|
|
197
|
+
bin: v,
|
|
198
|
+
},
|
|
199
|
+
}), disabled: isReadonly })] })] }), product.storeName && (_jsx(FormField, { name: "storeName", label: t("formSeller"), type: "text", value: product.storeName, onChange: () => { }, disabled: true }))] }));
|
|
182
200
|
}
|
|
@@ -239,7 +239,7 @@ export declare class ProductRepository extends BaseRepository<ProductDocument> {
|
|
|
239
239
|
/**
|
|
240
240
|
* Cloud Functions: stage an atomic bid-count increment into a caller-owned WriteBatch.
|
|
241
241
|
*/
|
|
242
|
-
incrementBidCountInBatch(batch: WriteBatch, productId: string, currentBid: number): void;
|
|
242
|
+
incrementBidCountInBatch(batch: WriteBatch, productId: string, currentBid: number, leadingBidderId?: string): void;
|
|
243
243
|
/**
|
|
244
244
|
* SB6-C / SB4-H — atomically bump `prizeCurrentEntries` by `count`. The
|
|
245
245
|
* checkout transaction calls this after pool-cap validation; the reveal
|
|
@@ -248,6 +248,8 @@ export declare class ProductRepository extends BaseRepository<ProductDocument> {
|
|
|
248
248
|
*/
|
|
249
249
|
incrementPrizeEntriesInBatch(batch: WriteBatch, productId: string, count: number): void;
|
|
250
250
|
productRef(productId: string): DocumentReference;
|
|
251
|
+
/** Cloud Functions: returns refs for draft products older than `cutoff` (for 30-day prune). */
|
|
252
|
+
getStaleDraftRefs(cutoff: Date): Promise<DocumentReference[]>;
|
|
251
253
|
}
|
|
252
254
|
export declare class ProductsRepository extends ProductRepository {
|
|
253
255
|
}
|
|
@@ -385,10 +385,11 @@ export class ProductRepository extends BaseRepository {
|
|
|
385
385
|
/**
|
|
386
386
|
* Cloud Functions: stage an atomic bid-count increment into a caller-owned WriteBatch.
|
|
387
387
|
*/
|
|
388
|
-
incrementBidCountInBatch(batch, productId, currentBid) {
|
|
388
|
+
incrementBidCountInBatch(batch, productId, currentBid, leadingBidderId) {
|
|
389
389
|
batch.update(this.db.collection(this.collection).doc(productId), {
|
|
390
390
|
currentBid,
|
|
391
391
|
bidCount: increment(1),
|
|
392
|
+
...(leadingBidderId && { leadingBidderId }),
|
|
392
393
|
// SB-UNI-H 2026-05-13 — flip `bidsHaveStarted` when any bid lands.
|
|
393
394
|
// Idempotent on subsequent bids; the BIN button is hidden by the PDP
|
|
394
395
|
// as soon as this is true (eBay-style hybrid auction rule).
|
|
@@ -411,6 +412,16 @@ export class ProductRepository extends BaseRepository {
|
|
|
411
412
|
productRef(productId) {
|
|
412
413
|
return this.db.collection(this.collection).doc(productId);
|
|
413
414
|
}
|
|
415
|
+
/** Cloud Functions: returns refs for draft products older than `cutoff` (for 30-day prune). */
|
|
416
|
+
async getStaleDraftRefs(cutoff) {
|
|
417
|
+
const snap = await this.db
|
|
418
|
+
.collection(this.collection)
|
|
419
|
+
.where("status", "==", "draft")
|
|
420
|
+
.where("updatedAt", "<", cutoff)
|
|
421
|
+
.limit(200)
|
|
422
|
+
.get();
|
|
423
|
+
return snap.docs.map((d) => d.ref);
|
|
424
|
+
}
|
|
414
425
|
}
|
|
415
426
|
ProductRepository.CACHE_TTL_MS = 30000;
|
|
416
427
|
ProductRepository.SIEVE_FIELDS = {
|
|
@@ -146,6 +146,7 @@ export interface ProductDocument {
|
|
|
146
146
|
startingBid?: number;
|
|
147
147
|
currentBid?: number;
|
|
148
148
|
bidCount?: number;
|
|
149
|
+
leadingBidderId?: string;
|
|
149
150
|
reservePrice?: number;
|
|
150
151
|
buyNowPrice?: number;
|
|
151
152
|
minBidIncrement?: number;
|
|
@@ -237,6 +238,12 @@ export interface ProductDocument {
|
|
|
237
238
|
etaDaysMax?: number;
|
|
238
239
|
}>;
|
|
239
240
|
};
|
|
241
|
+
/** Physical storage location for inventory management (Print & Label Center). */
|
|
242
|
+
physicalLocation?: {
|
|
243
|
+
zone: string;
|
|
244
|
+
shelf: string;
|
|
245
|
+
bin: string;
|
|
246
|
+
};
|
|
240
247
|
createdAt: Date;
|
|
241
248
|
updatedAt: Date;
|
|
242
249
|
}
|
|
@@ -60,18 +60,18 @@ export declare const productItemSchema: z.ZodObject<{
|
|
|
60
60
|
source: z.ZodOptional<z.ZodEnum<["upload", "youtube", "external"]>>;
|
|
61
61
|
youtubeId: z.ZodOptional<z.ZodString>;
|
|
62
62
|
}, "strip", z.ZodTypeAny, {
|
|
63
|
-
type: "video" | "image" | "file";
|
|
64
63
|
url: string;
|
|
65
|
-
|
|
64
|
+
type: "image" | "video" | "file";
|
|
66
65
|
alt?: string | undefined;
|
|
67
66
|
thumbnailUrl?: string | undefined;
|
|
67
|
+
source?: "upload" | "youtube" | "external" | undefined;
|
|
68
68
|
youtubeId?: string | undefined;
|
|
69
69
|
}, {
|
|
70
|
-
type: "video" | "image" | "file";
|
|
71
70
|
url: string;
|
|
72
|
-
|
|
71
|
+
type: "image" | "video" | "file";
|
|
73
72
|
alt?: string | undefined;
|
|
74
73
|
thumbnailUrl?: string | undefined;
|
|
74
|
+
source?: "upload" | "youtube" | "external" | undefined;
|
|
75
75
|
youtubeId?: string | undefined;
|
|
76
76
|
}>, "many">>;
|
|
77
77
|
video: z.ZodOptional<z.ZodObject<{
|
|
@@ -232,13 +232,13 @@ export declare const productItemSchema: z.ZodObject<{
|
|
|
232
232
|
value: z.ZodString;
|
|
233
233
|
unit: z.ZodOptional<z.ZodString>;
|
|
234
234
|
}, "strip", z.ZodTypeAny, {
|
|
235
|
+
type: "number" | "boolean" | "url" | "text";
|
|
235
236
|
value: string;
|
|
236
|
-
type: "number" | "boolean" | "text" | "url";
|
|
237
237
|
key: string;
|
|
238
238
|
unit?: string | undefined;
|
|
239
239
|
}, {
|
|
240
|
+
type: "number" | "boolean" | "url" | "text";
|
|
240
241
|
value: string;
|
|
241
|
-
type: "number" | "boolean" | "text" | "url";
|
|
242
242
|
key: string;
|
|
243
243
|
unit?: string | undefined;
|
|
244
244
|
}>, "many">>;
|
|
@@ -252,13 +252,13 @@ export declare const productItemSchema: z.ZodObject<{
|
|
|
252
252
|
value: z.ZodString;
|
|
253
253
|
unit: z.ZodOptional<z.ZodString>;
|
|
254
254
|
}, "strip", z.ZodTypeAny, {
|
|
255
|
+
type: "number" | "boolean" | "url" | "text";
|
|
255
256
|
value: string;
|
|
256
|
-
type: "number" | "boolean" | "text" | "url";
|
|
257
257
|
key: string;
|
|
258
258
|
unit?: string | undefined;
|
|
259
259
|
}, {
|
|
260
|
+
type: "number" | "boolean" | "url" | "text";
|
|
260
261
|
value: string;
|
|
261
|
-
type: "number" | "boolean" | "text" | "url";
|
|
262
262
|
key: string;
|
|
263
263
|
unit?: string | undefined;
|
|
264
264
|
}>, "many">>;
|
|
@@ -267,8 +267,8 @@ export declare const productItemSchema: z.ZodObject<{
|
|
|
267
267
|
title: string;
|
|
268
268
|
text?: string | undefined;
|
|
269
269
|
fields?: {
|
|
270
|
+
type: "number" | "boolean" | "url" | "text";
|
|
270
271
|
value: string;
|
|
271
|
-
type: "number" | "boolean" | "text" | "url";
|
|
272
272
|
key: string;
|
|
273
273
|
unit?: string | undefined;
|
|
274
274
|
}[] | undefined;
|
|
@@ -277,29 +277,28 @@ export declare const productItemSchema: z.ZodObject<{
|
|
|
277
277
|
title: string;
|
|
278
278
|
text?: string | undefined;
|
|
279
279
|
fields?: {
|
|
280
|
+
type: "number" | "boolean" | "url" | "text";
|
|
280
281
|
value: string;
|
|
281
|
-
type: "number" | "boolean" | "text" | "url";
|
|
282
282
|
key: string;
|
|
283
283
|
unit?: string | undefined;
|
|
284
284
|
}[] | undefined;
|
|
285
285
|
}>, "many">>;
|
|
286
286
|
}, "strip", z.ZodTypeAny, {
|
|
287
|
-
id: string;
|
|
288
287
|
status: "draft" | "published" | "archived" | "sold" | "out_of_stock" | "discontinued";
|
|
288
|
+
id: string;
|
|
289
289
|
title: string;
|
|
290
290
|
price: number;
|
|
291
291
|
currency?: string | undefined;
|
|
292
|
-
createdAt?: string | undefined;
|
|
293
|
-
updatedAt?: string | undefined;
|
|
294
|
-
storeId?: string | undefined;
|
|
295
292
|
video?: {
|
|
296
293
|
url: string;
|
|
297
294
|
thumbnailUrl?: string | undefined;
|
|
298
295
|
} | undefined;
|
|
296
|
+
storeId?: string | undefined;
|
|
299
297
|
category?: string | undefined;
|
|
300
298
|
featured?: boolean | undefined;
|
|
301
299
|
listingType?: "standard" | "auction" | "pre-order" | "prize-draw" | "bundle" | undefined;
|
|
302
300
|
isPromoted?: boolean | undefined;
|
|
301
|
+
createdAt?: string | undefined;
|
|
303
302
|
description?: string | undefined;
|
|
304
303
|
slug?: string | undefined;
|
|
305
304
|
subcategory?: string | undefined;
|
|
@@ -351,8 +350,8 @@ export declare const productItemSchema: z.ZodObject<{
|
|
|
351
350
|
allowOffers?: boolean | undefined;
|
|
352
351
|
minOfferPercent?: number | undefined;
|
|
353
352
|
customFields?: {
|
|
353
|
+
type: "number" | "boolean" | "url" | "text";
|
|
354
354
|
value: string;
|
|
355
|
-
type: "number" | "boolean" | "text" | "url";
|
|
356
355
|
key: string;
|
|
357
356
|
unit?: string | undefined;
|
|
358
357
|
}[] | undefined;
|
|
@@ -361,8 +360,8 @@ export declare const productItemSchema: z.ZodObject<{
|
|
|
361
360
|
title: string;
|
|
362
361
|
text?: string | undefined;
|
|
363
362
|
fields?: {
|
|
363
|
+
type: "number" | "boolean" | "url" | "text";
|
|
364
364
|
value: string;
|
|
365
|
-
type: "number" | "boolean" | "text" | "url";
|
|
366
365
|
key: string;
|
|
367
366
|
unit?: string | undefined;
|
|
368
367
|
}[] | undefined;
|
|
@@ -388,15 +387,16 @@ export declare const productItemSchema: z.ZodObject<{
|
|
|
388
387
|
prizeCurrentEntries?: number | undefined;
|
|
389
388
|
prizeRevealWindowStart?: string | Date | undefined;
|
|
390
389
|
prizeRevealWindowEnd?: string | Date | undefined;
|
|
391
|
-
prizeRevealStatus?: "pending" | "
|
|
390
|
+
prizeRevealStatus?: "pending" | "open" | "closed" | undefined;
|
|
392
391
|
prizeRevealDeadlineDays?: number | undefined;
|
|
393
392
|
prizeGithubFileUrl?: string | undefined;
|
|
393
|
+
updatedAt?: string | undefined;
|
|
394
394
|
media?: {
|
|
395
|
-
type: "video" | "image" | "file";
|
|
396
395
|
url: string;
|
|
397
|
-
|
|
396
|
+
type: "image" | "video" | "file";
|
|
398
397
|
alt?: string | undefined;
|
|
399
398
|
thumbnailUrl?: string | undefined;
|
|
399
|
+
source?: "upload" | "youtube" | "external" | undefined;
|
|
400
400
|
youtubeId?: string | undefined;
|
|
401
401
|
}[] | undefined;
|
|
402
402
|
inStock?: boolean | undefined;
|
|
@@ -413,22 +413,21 @@ export declare const productItemSchema: z.ZodObject<{
|
|
|
413
413
|
} | undefined;
|
|
414
414
|
publishedAt?: string | undefined;
|
|
415
415
|
}, {
|
|
416
|
-
id: string;
|
|
417
416
|
status: "draft" | "published" | "archived" | "sold" | "out_of_stock" | "discontinued";
|
|
417
|
+
id: string;
|
|
418
418
|
title: string;
|
|
419
419
|
price: number;
|
|
420
420
|
currency?: string | undefined;
|
|
421
|
-
createdAt?: string | undefined;
|
|
422
|
-
updatedAt?: string | undefined;
|
|
423
|
-
storeId?: string | undefined;
|
|
424
421
|
video?: {
|
|
425
422
|
url: string;
|
|
426
423
|
thumbnailUrl?: string | undefined;
|
|
427
424
|
} | undefined;
|
|
425
|
+
storeId?: string | undefined;
|
|
428
426
|
category?: string | undefined;
|
|
429
427
|
featured?: boolean | undefined;
|
|
430
428
|
listingType?: "standard" | "auction" | "pre-order" | "prize-draw" | "bundle" | undefined;
|
|
431
429
|
isPromoted?: boolean | undefined;
|
|
430
|
+
createdAt?: string | undefined;
|
|
432
431
|
description?: string | undefined;
|
|
433
432
|
slug?: string | undefined;
|
|
434
433
|
subcategory?: string | undefined;
|
|
@@ -480,8 +479,8 @@ export declare const productItemSchema: z.ZodObject<{
|
|
|
480
479
|
allowOffers?: boolean | undefined;
|
|
481
480
|
minOfferPercent?: number | undefined;
|
|
482
481
|
customFields?: {
|
|
482
|
+
type: "number" | "boolean" | "url" | "text";
|
|
483
483
|
value: string;
|
|
484
|
-
type: "number" | "boolean" | "text" | "url";
|
|
485
484
|
key: string;
|
|
486
485
|
unit?: string | undefined;
|
|
487
486
|
}[] | undefined;
|
|
@@ -490,8 +489,8 @@ export declare const productItemSchema: z.ZodObject<{
|
|
|
490
489
|
title: string;
|
|
491
490
|
text?: string | undefined;
|
|
492
491
|
fields?: {
|
|
492
|
+
type: "number" | "boolean" | "url" | "text";
|
|
493
493
|
value: string;
|
|
494
|
-
type: "number" | "boolean" | "text" | "url";
|
|
495
494
|
key: string;
|
|
496
495
|
unit?: string | undefined;
|
|
497
496
|
}[] | undefined;
|
|
@@ -517,15 +516,16 @@ export declare const productItemSchema: z.ZodObject<{
|
|
|
517
516
|
prizeCurrentEntries?: number | undefined;
|
|
518
517
|
prizeRevealWindowStart?: string | Date | undefined;
|
|
519
518
|
prizeRevealWindowEnd?: string | Date | undefined;
|
|
520
|
-
prizeRevealStatus?: "pending" | "
|
|
519
|
+
prizeRevealStatus?: "pending" | "open" | "closed" | undefined;
|
|
521
520
|
prizeRevealDeadlineDays?: number | undefined;
|
|
522
521
|
prizeGithubFileUrl?: string | undefined;
|
|
522
|
+
updatedAt?: string | undefined;
|
|
523
523
|
media?: {
|
|
524
|
-
type: "video" | "image" | "file";
|
|
525
524
|
url: string;
|
|
526
|
-
|
|
525
|
+
type: "image" | "video" | "file";
|
|
527
526
|
alt?: string | undefined;
|
|
528
527
|
thumbnailUrl?: string | undefined;
|
|
528
|
+
source?: "upload" | "youtube" | "external" | undefined;
|
|
529
529
|
youtubeId?: string | undefined;
|
|
530
530
|
}[] | undefined;
|
|
531
531
|
inStock?: boolean | undefined;
|
|
@@ -558,30 +558,30 @@ export declare const productListParamsSchema: z.ZodObject<{
|
|
|
558
558
|
perPage: z.ZodOptional<z.ZodNumber>;
|
|
559
559
|
featured: z.ZodOptional<z.ZodBoolean>;
|
|
560
560
|
}, "strip", z.ZodTypeAny, {
|
|
561
|
+
status?: "draft" | "published" | "archived" | "sold" | "out_of_stock" | "discontinued" | undefined;
|
|
561
562
|
sort?: string | undefined;
|
|
562
|
-
perPage?: number | undefined;
|
|
563
563
|
storeId?: string | undefined;
|
|
564
|
-
status?: "draft" | "published" | "archived" | "sold" | "out_of_stock" | "discontinued" | undefined;
|
|
565
|
-
q?: string | undefined;
|
|
566
564
|
category?: string | undefined;
|
|
567
565
|
featured?: boolean | undefined;
|
|
568
566
|
listingType?: "standard" | "auction" | "pre-order" | "prize-draw" | "bundle" | undefined;
|
|
569
567
|
condition?: "new" | "used" | "refurbished" | "broken" | "like_new" | "good" | "fair" | "poor" | undefined;
|
|
568
|
+
q?: string | undefined;
|
|
570
569
|
page?: number | undefined;
|
|
570
|
+
perPage?: number | undefined;
|
|
571
571
|
minPrice?: number | undefined;
|
|
572
572
|
maxPrice?: number | undefined;
|
|
573
573
|
inStock?: boolean | undefined;
|
|
574
574
|
}, {
|
|
575
|
+
status?: "draft" | "published" | "archived" | "sold" | "out_of_stock" | "discontinued" | undefined;
|
|
575
576
|
sort?: string | undefined;
|
|
576
|
-
perPage?: number | undefined;
|
|
577
577
|
storeId?: string | undefined;
|
|
578
|
-
status?: "draft" | "published" | "archived" | "sold" | "out_of_stock" | "discontinued" | undefined;
|
|
579
|
-
q?: string | undefined;
|
|
580
578
|
category?: string | undefined;
|
|
581
579
|
featured?: boolean | undefined;
|
|
582
580
|
listingType?: "standard" | "auction" | "pre-order" | "prize-draw" | "bundle" | undefined;
|
|
583
581
|
condition?: "new" | "used" | "refurbished" | "broken" | "like_new" | "good" | "fair" | "poor" | undefined;
|
|
582
|
+
q?: string | undefined;
|
|
584
583
|
page?: number | undefined;
|
|
584
|
+
perPage?: number | undefined;
|
|
585
585
|
minPrice?: number | undefined;
|
|
586
586
|
maxPrice?: number | undefined;
|
|
587
587
|
inStock?: boolean | undefined;
|
|
@@ -22,9 +22,9 @@ export declare const productFeatureAdminCreateSchema: z.ZodObject<{
|
|
|
22
22
|
isActive: z.ZodBoolean;
|
|
23
23
|
displayOrder: z.ZodNumber;
|
|
24
24
|
}, "strip", z.ZodTypeAny, {
|
|
25
|
+
category: "seller" | "custom" | "auction" | "condition" | "shipping" | "preorder" | "platform";
|
|
25
26
|
label: string;
|
|
26
27
|
scope: "store" | "platform";
|
|
27
|
-
category: "seller" | "custom" | "auction" | "condition" | "shipping" | "preorder" | "platform";
|
|
28
28
|
icon: string;
|
|
29
29
|
isActive: boolean;
|
|
30
30
|
displayOrder: number;
|
|
@@ -33,9 +33,9 @@ export declare const productFeatureAdminCreateSchema: z.ZodObject<{
|
|
|
33
33
|
description?: string | undefined;
|
|
34
34
|
iconColor?: string | undefined;
|
|
35
35
|
}, {
|
|
36
|
+
category: "seller" | "custom" | "auction" | "condition" | "shipping" | "preorder" | "platform";
|
|
36
37
|
label: string;
|
|
37
38
|
scope: "store" | "platform";
|
|
38
|
-
category: "seller" | "custom" | "auction" | "condition" | "shipping" | "preorder" | "platform";
|
|
39
39
|
icon: string;
|
|
40
40
|
isActive: boolean;
|
|
41
41
|
displayOrder: number;
|
|
@@ -55,8 +55,8 @@ export declare const productFeatureStoreCreateSchema: z.ZodObject<{
|
|
|
55
55
|
isActive: z.ZodBoolean;
|
|
56
56
|
displayOrder: z.ZodNumber;
|
|
57
57
|
}, "strip", z.ZodTypeAny, {
|
|
58
|
-
label: string;
|
|
59
58
|
category: "seller" | "custom" | "auction" | "condition" | "shipping" | "preorder" | "platform";
|
|
59
|
+
label: string;
|
|
60
60
|
icon: string;
|
|
61
61
|
isActive: boolean;
|
|
62
62
|
displayOrder: number;
|
|
@@ -64,8 +64,8 @@ export declare const productFeatureStoreCreateSchema: z.ZodObject<{
|
|
|
64
64
|
description?: string | undefined;
|
|
65
65
|
iconColor?: string | undefined;
|
|
66
66
|
}, {
|
|
67
|
-
label: string;
|
|
68
67
|
category: "seller" | "custom" | "auction" | "condition" | "shipping" | "preorder" | "platform";
|
|
68
|
+
label: string;
|
|
69
69
|
icon: string;
|
|
70
70
|
isActive: boolean;
|
|
71
71
|
displayOrder: number;
|
|
@@ -84,18 +84,18 @@ export declare const productFeatureUpdateSchema: z.ZodObject<{
|
|
|
84
84
|
isActive: z.ZodOptional<z.ZodBoolean>;
|
|
85
85
|
displayOrder: z.ZodOptional<z.ZodNumber>;
|
|
86
86
|
}, "strip", z.ZodTypeAny, {
|
|
87
|
-
label?: string | undefined;
|
|
88
87
|
category?: "seller" | "custom" | "auction" | "condition" | "shipping" | "preorder" | "platform" | undefined;
|
|
89
88
|
description?: string | undefined;
|
|
89
|
+
label?: string | undefined;
|
|
90
90
|
icon?: string | undefined;
|
|
91
91
|
isActive?: boolean | undefined;
|
|
92
92
|
iconColor?: string | undefined;
|
|
93
93
|
displayOrder?: number | undefined;
|
|
94
94
|
productTypes?: ("auction" | "prize-draw" | "classified" | "digital-code" | "live" | "all" | "product" | "preorder")[] | undefined;
|
|
95
95
|
}, {
|
|
96
|
-
label?: string | undefined;
|
|
97
96
|
category?: "seller" | "custom" | "auction" | "condition" | "shipping" | "preorder" | "platform" | undefined;
|
|
98
97
|
description?: string | undefined;
|
|
98
|
+
label?: string | undefined;
|
|
99
99
|
icon?: string | undefined;
|
|
100
100
|
isActive?: boolean | undefined;
|
|
101
101
|
iconColor?: string | undefined;
|
|
@@ -139,6 +139,12 @@ export interface ProductItem {
|
|
|
139
139
|
insuranceCost?: number;
|
|
140
140
|
customFields?: CustomField[];
|
|
141
141
|
customSections?: CustomSection[];
|
|
142
|
+
/** Physical storage location set in the Print & Label Center. */
|
|
143
|
+
physicalLocation?: {
|
|
144
|
+
zone: string;
|
|
145
|
+
shelf: string;
|
|
146
|
+
bin: string;
|
|
147
|
+
};
|
|
142
148
|
}
|
|
143
149
|
export interface ProductListResponse {
|
|
144
150
|
items: ProductItem[];
|