@rovela-ai/sdk 0.1.18 → 0.1.20
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/admin/api/auth.js +5 -11
- package/dist/admin/api/auth.js.map +1 -1
- package/dist/admin/api/categories.js +43 -50
- package/dist/admin/api/categories.js.map +1 -1
- package/dist/admin/api/check.js +6 -9
- package/dist/admin/api/check.js.map +1 -1
- package/dist/admin/api/customers.js +17 -21
- package/dist/admin/api/customers.js.map +1 -1
- package/dist/admin/api/index.js +10 -38
- package/dist/admin/api/index.js.map +1 -1
- package/dist/admin/api/orders.js +30 -35
- package/dist/admin/api/orders.js.map +1 -1
- package/dist/admin/api/products.js +56 -66
- package/dist/admin/api/products.js.map +1 -1
- package/dist/admin/api/refund.js +26 -29
- package/dist/admin/api/refund.js.map +1 -1
- package/dist/admin/api/settings.js +17 -21
- package/dist/admin/api/settings.js.map +1 -1
- package/dist/admin/api/setup.js +17 -20
- package/dist/admin/api/setup.js.map +1 -1
- package/dist/admin/api/stats.js +14 -17
- package/dist/admin/api/stats.js.map +1 -1
- package/dist/admin/components/AdminGuard.js +13 -17
- package/dist/admin/components/AdminGuard.js.map +1 -1
- package/dist/admin/components/AdminHeader.js +8 -11
- package/dist/admin/components/AdminHeader.js.map +1 -1
- package/dist/admin/components/AdminLayout.js +5 -8
- package/dist/admin/components/AdminLayout.js.map +1 -1
- package/dist/admin/components/AdminLoginForm.js +11 -14
- package/dist/admin/components/AdminLoginForm.js.map +1 -1
- package/dist/admin/components/AdminNav.d.ts.map +1 -1
- package/dist/admin/components/AdminNav.js +16 -14
- package/dist/admin/components/AdminNav.js.map +1 -1
- package/dist/admin/components/AdminSetupForm.js +11 -14
- package/dist/admin/components/AdminSetupForm.js.map +1 -1
- package/dist/admin/components/CategoryForm.d.ts +30 -0
- package/dist/admin/components/CategoryForm.d.ts.map +1 -0
- package/dist/admin/components/CategoryForm.js +153 -0
- package/dist/admin/components/CategoryForm.js.map +1 -0
- package/dist/admin/components/CategorySelect.d.ts +32 -0
- package/dist/admin/components/CategorySelect.d.ts.map +1 -0
- package/dist/admin/components/CategorySelect.js +148 -0
- package/dist/admin/components/CategorySelect.js.map +1 -0
- package/dist/admin/components/InventoryEditor.js +16 -19
- package/dist/admin/components/InventoryEditor.js.map +1 -1
- package/dist/admin/components/LowStockAlert.js +6 -9
- package/dist/admin/components/LowStockAlert.js.map +1 -1
- package/dist/admin/components/OrderDetails.js +15 -18
- package/dist/admin/components/OrderDetails.js.map +1 -1
- package/dist/admin/components/OrderTable.js +13 -16
- package/dist/admin/components/OrderTable.js.map +1 -1
- package/dist/admin/components/ProductForm.d.ts +2 -2
- package/dist/admin/components/ProductForm.d.ts.map +1 -1
- package/dist/admin/components/ProductForm.js +140 -27
- package/dist/admin/components/ProductForm.js.map +1 -1
- package/dist/admin/components/ProductTable.js +15 -18
- package/dist/admin/components/ProductTable.js.map +1 -1
- package/dist/admin/components/RecentOrders.js +6 -9
- package/dist/admin/components/RecentOrders.js.map +1 -1
- package/dist/admin/components/RefundDialog.js +12 -15
- package/dist/admin/components/RefundDialog.js.map +1 -1
- package/dist/admin/components/SEOPreview.d.ts +32 -0
- package/dist/admin/components/SEOPreview.d.ts.map +1 -0
- package/dist/admin/components/SEOPreview.js +30 -0
- package/dist/admin/components/SEOPreview.js.map +1 -0
- package/dist/admin/components/StatsCards.js +7 -10
- package/dist/admin/components/StatsCards.js.map +1 -1
- package/dist/admin/components/StoreSettings.js +10 -13
- package/dist/admin/components/StoreSettings.js.map +1 -1
- package/dist/admin/components/TagInput.d.ts +29 -0
- package/dist/admin/components/TagInput.d.ts.map +1 -0
- package/dist/admin/components/TagInput.js +73 -0
- package/dist/admin/components/TagInput.js.map +1 -0
- package/dist/admin/components/VariantManager.d.ts +42 -0
- package/dist/admin/components/VariantManager.d.ts.map +1 -0
- package/dist/admin/components/VariantManager.js +175 -0
- package/dist/admin/components/VariantManager.js.map +1 -0
- package/dist/admin/components/index.d.ts +5 -0
- package/dist/admin/components/index.d.ts.map +1 -1
- package/dist/admin/components/index.js +27 -35
- package/dist/admin/components/index.js.map +1 -1
- package/dist/admin/config.js +12 -54
- package/dist/admin/config.js.map +1 -1
- package/dist/admin/hooks/index.d.ts +2 -0
- package/dist/admin/hooks/index.d.ts.map +1 -1
- package/dist/admin/hooks/index.js +5 -11
- package/dist/admin/hooks/index.js.map +1 -1
- package/dist/admin/hooks/useAdminAuth.js +9 -12
- package/dist/admin/hooks/useAdminAuth.js.map +1 -1
- package/dist/admin/hooks/useAdminCategories.d.ts +36 -0
- package/dist/admin/hooks/useAdminCategories.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminCategories.js +217 -0
- package/dist/admin/hooks/useAdminCategories.js.map +1 -0
- package/dist/admin/hooks/useAdminOrders.js +11 -14
- package/dist/admin/hooks/useAdminOrders.js.map +1 -1
- package/dist/admin/hooks/useAdminProducts.js +13 -16
- package/dist/admin/hooks/useAdminProducts.js.map +1 -1
- package/dist/admin/hooks/useAdminStats.js +11 -14
- package/dist/admin/hooks/useAdminStats.js.map +1 -1
- package/dist/admin/index.d.ts +3 -2
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +17 -66
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/server/admin-service.js +39 -83
- package/dist/admin/server/admin-service.js.map +1 -1
- package/dist/admin/server/index.js +3 -13
- package/dist/admin/server/index.js.map +1 -1
- package/dist/admin/types.js +1 -2
- package/dist/admin/types.js.map +1 -1
- package/dist/auth/api/auth.js +6 -14
- package/dist/auth/api/auth.js.map +1 -1
- package/dist/auth/api/forgot-password.js +8 -11
- package/dist/auth/api/forgot-password.js.map +1 -1
- package/dist/auth/api/index.js +6 -18
- package/dist/auth/api/index.js.map +1 -1
- package/dist/auth/api/register.js +17 -20
- package/dist/auth/api/register.js.map +1 -1
- package/dist/auth/api/resend-verification.js +9 -12
- package/dist/auth/api/resend-verification.js.map +1 -1
- package/dist/auth/api/reset-password.js +18 -22
- package/dist/auth/api/reset-password.js.map +1 -1
- package/dist/auth/api/verify-email.js +14 -18
- package/dist/auth/api/verify-email.js.map +1 -1
- package/dist/auth/components/AuthGuard.js +13 -17
- package/dist/auth/components/AuthGuard.js.map +1 -1
- package/dist/auth/components/ForgotPasswordForm.js +11 -14
- package/dist/auth/components/ForgotPasswordForm.js.map +1 -1
- package/dist/auth/components/ResetPasswordForm.js +18 -21
- package/dist/auth/components/ResetPasswordForm.js.map +1 -1
- package/dist/auth/components/SignInForm.js +13 -16
- package/dist/auth/components/SignInForm.js.map +1 -1
- package/dist/auth/components/SignUpForm.js +15 -18
- package/dist/auth/components/SignUpForm.js.map +1 -1
- package/dist/auth/components/UserMenu.js +13 -16
- package/dist/auth/components/UserMenu.js.map +1 -1
- package/dist/auth/components/VerifyEmailNotice.js +10 -13
- package/dist/auth/components/VerifyEmailNotice.js.map +1 -1
- package/dist/auth/components/index.js +7 -18
- package/dist/auth/components/index.js.map +1 -1
- package/dist/auth/config.js +9 -49
- package/dist/auth/config.js.map +1 -1
- package/dist/auth/hooks/index.js +1 -5
- package/dist/auth/hooks/index.js.map +1 -1
- package/dist/auth/hooks/useAuth.js +14 -17
- package/dist/auth/hooks/useAuth.js.map +1 -1
- package/dist/auth/index.js +15 -37
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/server/customer-service.js +39 -83
- package/dist/auth/server/customer-service.js.map +1 -1
- package/dist/auth/server/email-sender.js +11 -17
- package/dist/auth/server/email-sender.js.map +1 -1
- package/dist/auth/server/index.js +5 -36
- package/dist/auth/server/index.js.map +1 -1
- package/dist/auth/server/password-reset-service.js +30 -70
- package/dist/auth/server/password-reset-service.js.map +1 -1
- package/dist/auth/server/password.js +9 -18
- package/dist/auth/server/password.js.map +1 -1
- package/dist/auth/server/verification-service.js +35 -76
- package/dist/auth/server/verification-service.js.map +1 -1
- package/dist/auth/types.js +1 -2
- package/dist/auth/types.js.map +1 -1
- package/dist/cart/CartProvider.js +13 -17
- package/dist/cart/CartProvider.js.map +1 -1
- package/dist/cart/components/AddToCartButton.js +16 -19
- package/dist/cart/components/AddToCartButton.js.map +1 -1
- package/dist/cart/components/CartDrawer.js +17 -23
- package/dist/cart/components/CartDrawer.js.map +1 -1
- package/dist/cart/components/CartIcon.js +9 -12
- package/dist/cart/components/CartIcon.js.map +1 -1
- package/dist/cart/components/CartItem.js +7 -13
- package/dist/cart/components/CartItem.js.map +1 -1
- package/dist/cart/components/CartSummary.js +12 -15
- package/dist/cart/components/CartSummary.js.map +1 -1
- package/dist/cart/components/QuantitySelector.js +9 -12
- package/dist/cart/components/QuantitySelector.js.map +1 -1
- package/dist/cart/components/index.js +6 -15
- package/dist/cart/components/index.js.map +1 -1
- package/dist/cart/index.js +3 -17
- package/dist/cart/index.js.map +1 -1
- package/dist/cart/store.js +8 -13
- package/dist/cart/store.js.map +1 -1
- package/dist/checkout/api/checkout.js +12 -15
- package/dist/checkout/api/checkout.js.map +1 -1
- package/dist/checkout/api/index.js +2 -7
- package/dist/checkout/api/index.js.map +1 -1
- package/dist/checkout/api/webhook.js +8 -11
- package/dist/checkout/api/webhook.js.map +1 -1
- package/dist/checkout/components/CheckoutButton.js +8 -11
- package/dist/checkout/components/CheckoutButton.js.map +1 -1
- package/dist/checkout/components/CheckoutSuccess.js +11 -14
- package/dist/checkout/components/CheckoutSuccess.js.map +1 -1
- package/dist/checkout/components/OrderSummary.js +8 -11
- package/dist/checkout/components/OrderSummary.js.map +1 -1
- package/dist/checkout/components/ShippingForm.js +14 -17
- package/dist/checkout/components/ShippingForm.js.map +1 -1
- package/dist/checkout/components/index.js +4 -11
- package/dist/checkout/components/index.js.map +1 -1
- package/dist/checkout/hooks/index.js +1 -6
- package/dist/checkout/hooks/index.js.map +1 -1
- package/dist/checkout/hooks/useCheckout.js +10 -19
- package/dist/checkout/hooks/useCheckout.js.map +1 -1
- package/dist/checkout/index.js +7 -28
- package/dist/checkout/index.js.map +1 -1
- package/dist/checkout/server/create-checkout-session.js +11 -16
- package/dist/checkout/server/create-checkout-session.js.map +1 -1
- package/dist/checkout/server/handle-webhook.js +21 -24
- package/dist/checkout/server/handle-webhook.js.map +1 -1
- package/dist/checkout/server/index.js +3 -13
- package/dist/checkout/server/index.js.map +1 -1
- package/dist/checkout/server/order-service.js +11 -16
- package/dist/checkout/server/order-service.js.map +1 -1
- package/dist/checkout/stripe/client.js +13 -29
- package/dist/checkout/stripe/client.js.map +1 -1
- package/dist/checkout/stripe/index.js +1 -15
- package/dist/checkout/stripe/index.js.map +1 -1
- package/dist/checkout/types.js +1 -2
- package/dist/checkout/types.js.map +1 -1
- package/dist/core/StoreSettingsProvider.d.ts +104 -0
- package/dist/core/StoreSettingsProvider.d.ts.map +1 -0
- package/dist/core/StoreSettingsProvider.js +195 -0
- package/dist/core/StoreSettingsProvider.js.map +1 -0
- package/dist/core/api/index.d.ts +7 -0
- package/dist/core/api/index.d.ts.map +1 -0
- package/dist/core/api/index.js +7 -0
- package/dist/core/api/index.js.map +1 -0
- package/dist/core/api/settings.d.ts +42 -0
- package/dist/core/api/settings.d.ts.map +1 -0
- package/dist/core/api/settings.js +74 -0
- package/dist/core/api/settings.js.map +1 -0
- package/dist/core/config.js +12 -57
- package/dist/core/config.js.map +1 -1
- package/dist/core/db/client.js +16 -62
- package/dist/core/db/client.js.map +1 -1
- package/dist/core/db/index.js +14 -93
- package/dist/core/db/index.js.map +1 -1
- package/dist/core/db/queries.d.ts +6 -6
- package/dist/core/db/queries.js +207 -284
- package/dist/core/db/queries.js.map +1 -1
- package/dist/core/db/schema.js +179 -182
- package/dist/core/db/schema.js.map +1 -1
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +14 -42
- package/dist/core/index.js.map +1 -1
- package/dist/core/server/index.js +16 -68
- package/dist/core/server/index.js.map +1 -1
- package/dist/core/types.js +1 -2
- package/dist/core/types.js.map +1 -1
- package/dist/core/utils.js +26 -51
- package/dist/core/utils.js.map +1 -1
- package/dist/emails/config.js +13 -21
- package/dist/emails/config.js.map +1 -1
- package/dist/emails/index.js +10 -72
- package/dist/emails/index.js.map +1 -1
- package/dist/emails/send/auth.js +26 -34
- package/dist/emails/send/auth.js.map +1 -1
- package/dist/emails/send/index.js +2 -21
- package/dist/emails/send/index.js.map +1 -1
- package/dist/emails/send/orders.js +38 -50
- package/dist/emails/send/orders.js.map +1 -1
- package/dist/emails/sender.js +7 -12
- package/dist/emails/sender.js.map +1 -1
- package/dist/emails/templates/base.js +37 -53
- package/dist/emails/templates/base.js.map +1 -1
- package/dist/emails/templates/email-verification.js +12 -16
- package/dist/emails/templates/email-verification.js.map +1 -1
- package/dist/emails/templates/index.js +9 -43
- package/dist/emails/templates/index.js.map +1 -1
- package/dist/emails/templates/order-cancelled.js +18 -22
- package/dist/emails/templates/order-cancelled.js.map +1 -1
- package/dist/emails/templates/order-confirmation.js +30 -34
- package/dist/emails/templates/order-confirmation.js.map +1 -1
- package/dist/emails/templates/order-delivered.js +20 -24
- package/dist/emails/templates/order-delivered.js.map +1 -1
- package/dist/emails/templates/order-shipped.js +19 -23
- package/dist/emails/templates/order-shipped.js.map +1 -1
- package/dist/emails/templates/password-reset.js +12 -16
- package/dist/emails/templates/password-reset.js.map +1 -1
- package/dist/emails/templates/refund-processed.js +17 -21
- package/dist/emails/templates/refund-processed.js.map +1 -1
- package/dist/emails/templates/welcome.js +11 -15
- package/dist/emails/templates/welcome.js.map +1 -1
- package/dist/emails/types.js +1 -2
- package/dist/emails/types.js.map +1 -1
- package/dist/emails/utils.js +9 -20
- package/dist/emails/utils.js.map +1 -1
- package/dist/index.js +24 -176
- package/dist/index.js.map +1 -1
- package/dist/products/api/categories.js +7 -10
- package/dist/products/api/categories.js.map +1 -1
- package/dist/products/api/index.js +3 -9
- package/dist/products/api/index.js.map +1 -1
- package/dist/products/api/product.js +10 -13
- package/dist/products/api/product.js.map +1 -1
- package/dist/products/api/products.js +8 -11
- package/dist/products/api/products.js.map +1 -1
- package/dist/products/components/CategoryNav.js +20 -26
- package/dist/products/components/CategoryNav.js.map +1 -1
- package/dist/products/components/ProductBreadcrumb.js +7 -13
- package/dist/products/components/ProductBreadcrumb.js.map +1 -1
- package/dist/products/components/ProductCard.js +6 -12
- package/dist/products/components/ProductCard.js.map +1 -1
- package/dist/products/components/ProductDetails.js +14 -17
- package/dist/products/components/ProductDetails.js.map +1 -1
- package/dist/products/components/ProductFilters.js +15 -18
- package/dist/products/components/ProductFilters.js.map +1 -1
- package/dist/products/components/ProductGallery.js +17 -23
- package/dist/products/components/ProductGallery.js.map +1 -1
- package/dist/products/components/ProductGrid.js +10 -13
- package/dist/products/components/ProductGrid.js.map +1 -1
- package/dist/products/components/ProductSearch.js +14 -17
- package/dist/products/components/ProductSearch.js.map +1 -1
- package/dist/products/components/ProductSort.js +8 -11
- package/dist/products/components/ProductSort.js.map +1 -1
- package/dist/products/components/VariantSelector.js +16 -19
- package/dist/products/components/VariantSelector.js.map +1 -1
- package/dist/products/components/index.js +10 -23
- package/dist/products/components/index.js.map +1 -1
- package/dist/products/hooks/index.js +4 -11
- package/dist/products/hooks/index.js.map +1 -1
- package/dist/products/hooks/useCategories.js +12 -15
- package/dist/products/hooks/useCategories.js.map +1 -1
- package/dist/products/hooks/useProduct.js +9 -12
- package/dist/products/hooks/useProduct.js.map +1 -1
- package/dist/products/hooks/useProductAttributes.js +10 -13
- package/dist/products/hooks/useProductAttributes.js.map +1 -1
- package/dist/products/hooks/useProducts.js +15 -18
- package/dist/products/hooks/useProducts.js.map +1 -1
- package/dist/products/index.js +6 -23
- package/dist/products/index.js.map +1 -1
- package/dist/theme/ThemeProvider.js +12 -14
- package/dist/theme/ThemeProvider.js.map +1 -1
- package/dist/theme/colors.js +3 -8
- package/dist/theme/colors.js.map +1 -1
- package/dist/theme/defaults.js +27 -30
- package/dist/theme/defaults.js.map +1 -1
- package/dist/theme/fonts.js +12 -18
- package/dist/theme/fonts.js.map +1 -1
- package/dist/theme/generator.js +63 -69
- package/dist/theme/generator.js.map +1 -1
- package/dist/theme/hooks.js +11 -16
- package/dist/theme/hooks.js.map +1 -1
- package/dist/theme/index.js +6 -42
- package/dist/theme/index.js.map +1 -1
- package/package.json +35 -30
|
@@ -1,15 +1,12 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
'use client';
|
|
3
|
-
|
|
4
|
-
exports.OrderTable = OrderTable;
|
|
5
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
3
|
/**
|
|
7
4
|
* @rovela/sdk/admin/components/OrderTable
|
|
8
5
|
*
|
|
9
6
|
* Orders data table with filtering, sorting, and pagination.
|
|
10
7
|
*/
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
import { useState, useEffect, useCallback } from 'react';
|
|
9
|
+
import { useAdminOrders } from '../hooks/useAdminOrders';
|
|
13
10
|
// =============================================================================
|
|
14
11
|
// Status Badge
|
|
15
12
|
// =============================================================================
|
|
@@ -22,7 +19,7 @@ function StatusBadge({ status }) {
|
|
|
22
19
|
cancelled: 'bg-red-100 text-red-800',
|
|
23
20
|
refunded: 'bg-gray-100 text-gray-800',
|
|
24
21
|
};
|
|
25
|
-
return ((
|
|
22
|
+
return (_jsx("span", { className: `inline-flex rounded-full px-2 py-1 text-xs font-medium ${statusStyles[status] || 'bg-gray-100 text-gray-800'}`, children: status.charAt(0).toUpperCase() + status.slice(1) }));
|
|
26
23
|
}
|
|
27
24
|
// =============================================================================
|
|
28
25
|
// Component
|
|
@@ -37,13 +34,13 @@ function StatusBadge({ status }) {
|
|
|
37
34
|
* />
|
|
38
35
|
* ```
|
|
39
36
|
*/
|
|
40
|
-
function OrderTable({ initialSearch, initialStatus, pageSize = 20, onOrderClick, className = '', }) {
|
|
41
|
-
const { orders, total, page, isLoading, fetchOrders, updateStatus } =
|
|
42
|
-
const [search, setSearch] =
|
|
43
|
-
const [status, setStatus] =
|
|
44
|
-
const [sort, setSort] =
|
|
37
|
+
export function OrderTable({ initialSearch, initialStatus, pageSize = 20, onOrderClick, className = '', }) {
|
|
38
|
+
const { orders, total, page, isLoading, fetchOrders, updateStatus } = useAdminOrders();
|
|
39
|
+
const [search, setSearch] = useState(initialSearch || '');
|
|
40
|
+
const [status, setStatus] = useState(initialStatus || '');
|
|
41
|
+
const [sort, setSort] = useState('newest');
|
|
45
42
|
// Fetch orders on filter change
|
|
46
|
-
|
|
43
|
+
useEffect(() => {
|
|
47
44
|
fetchOrders({
|
|
48
45
|
search: search || undefined,
|
|
49
46
|
status: status || undefined,
|
|
@@ -52,7 +49,7 @@ function OrderTable({ initialSearch, initialStatus, pageSize = 20, onOrderClick,
|
|
|
52
49
|
limit: pageSize,
|
|
53
50
|
});
|
|
54
51
|
}, [search, status, sort, pageSize, fetchOrders]);
|
|
55
|
-
const handlePageChange =
|
|
52
|
+
const handlePageChange = useCallback((newPage) => {
|
|
56
53
|
fetchOrders({
|
|
57
54
|
search: search || undefined,
|
|
58
55
|
status: status || undefined,
|
|
@@ -61,7 +58,7 @@ function OrderTable({ initialSearch, initialStatus, pageSize = 20, onOrderClick,
|
|
|
61
58
|
limit: pageSize,
|
|
62
59
|
});
|
|
63
60
|
}, [search, status, sort, pageSize, fetchOrders]);
|
|
64
|
-
const handleStatusChange =
|
|
61
|
+
const handleStatusChange = useCallback(async (orderId, newStatus) => {
|
|
65
62
|
const success = await updateStatus(orderId, newStatus);
|
|
66
63
|
if (success) {
|
|
67
64
|
fetchOrders({ search, status: status || undefined, sort, page, limit: pageSize });
|
|
@@ -84,6 +81,6 @@ function OrderTable({ initialSearch, initialStatus, pageSize = 20, onOrderClick,
|
|
|
84
81
|
}).format(parseFloat(value));
|
|
85
82
|
};
|
|
86
83
|
const totalPages = Math.ceil(total / pageSize);
|
|
87
|
-
return ((
|
|
84
|
+
return (_jsxs("div", { className: `space-y-4 ${className}`, children: [_jsxs("div", { className: "flex flex-wrap gap-4", children: [_jsx("div", { className: "flex-1", children: _jsx("input", { type: "text", value: search, onChange: (e) => setSearch(e.target.value), placeholder: "Search by order ID or email...", className: "w-full max-w-xs rounded-md border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary" }) }), _jsxs("select", { value: status, onChange: (e) => setStatus(e.target.value), className: "rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary", children: [_jsx("option", { value: "", children: "All Status" }), _jsx("option", { value: "pending", children: "Pending" }), _jsx("option", { value: "paid", children: "Paid" }), _jsx("option", { value: "shipped", children: "Shipped" }), _jsx("option", { value: "delivered", children: "Delivered" }), _jsx("option", { value: "cancelled", children: "Cancelled" }), _jsx("option", { value: "refunded", children: "Refunded" })] }), _jsxs("select", { value: sort, onChange: (e) => setSort(e.target.value), className: "rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary", children: [_jsx("option", { value: "newest", children: "Newest First" }), _jsx("option", { value: "oldest", children: "Oldest First" }), _jsx("option", { value: "total-desc", children: "Highest Total" }), _jsx("option", { value: "total-asc", children: "Lowest Total" })] })] }), _jsxs("div", { className: "rounded-lg border border-border bg-card overflow-hidden", children: [_jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full", children: [_jsx("thead", { children: _jsxs("tr", { className: "border-b border-border bg-muted/50 text-left text-xs font-medium uppercase text-muted-foreground", children: [_jsx("th", { className: "px-6 py-3", children: "Order" }), _jsx("th", { className: "px-6 py-3", children: "Customer" }), _jsx("th", { className: "px-6 py-3", children: "Status" }), _jsx("th", { className: "px-6 py-3", children: "Total" }), _jsx("th", { className: "px-6 py-3", children: "Date" }), _jsx("th", { className: "px-6 py-3", children: "Actions" })] }) }), _jsx("tbody", { className: "divide-y divide-border", children: isLoading ? ([...Array(5)].map((_, i) => (_jsxs("tr", { children: [_jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "h-4 w-24 animate-pulse rounded bg-muted" }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "h-4 w-32 animate-pulse rounded bg-muted" }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "h-6 w-16 animate-pulse rounded bg-muted" }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "h-4 w-20 animate-pulse rounded bg-muted" }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "h-4 w-28 animate-pulse rounded bg-muted" }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "h-4 w-20 animate-pulse rounded bg-muted" }) })] }, i)))) : orders.length === 0 ? (_jsx("tr", { children: _jsx("td", { colSpan: 6, className: "px-6 py-12 text-center text-muted-foreground", children: "No orders found" }) })) : (orders.map((order) => (_jsxs("tr", { className: "hover:bg-muted/50", children: [_jsx("td", { className: "px-6 py-4", children: _jsxs("button", { onClick: () => onOrderClick?.(order.id), className: "font-medium text-primary hover:underline", children: ["#", order.id.slice(-8).toUpperCase()] }) }), _jsx("td", { className: "px-6 py-4 text-sm text-foreground", children: order.email }), _jsx("td", { className: "px-6 py-4", children: _jsx(StatusBadge, { status: order.status }) }), _jsx("td", { className: "px-6 py-4 text-sm font-medium text-foreground", children: formatCurrency(order.total) }), _jsx("td", { className: "px-6 py-4 text-sm text-muted-foreground", children: formatDate(order.createdAt) }), _jsx("td", { className: "px-6 py-4", children: _jsxs("select", { value: order.status, onChange: (e) => handleStatusChange(order.id, e.target.value), disabled: order.status === 'refunded' || order.status === 'cancelled', className: "rounded-md border border-input bg-background px-2 py-1 text-xs focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary disabled:opacity-50", children: [_jsx("option", { value: "pending", children: "Pending" }), _jsx("option", { value: "paid", children: "Paid" }), _jsx("option", { value: "shipped", children: "Shipped" }), _jsx("option", { value: "delivered", children: "Delivered" }), _jsx("option", { value: "cancelled", children: "Cancelled" }), _jsx("option", { value: "refunded", disabled: true, children: "Refunded" })] }) })] }, order.id)))) })] }) }), totalPages > 1 && (_jsxs("div", { className: "flex items-center justify-between border-t border-border px-6 py-3", children: [_jsxs("p", { className: "text-sm text-muted-foreground", children: ["Showing ", (page - 1) * pageSize + 1, " to ", Math.min(page * pageSize, total), " of ", total] }), _jsxs("div", { className: "flex gap-2", children: [_jsx("button", { onClick: () => handlePageChange(page - 1), disabled: page === 1, className: "rounded-md border border-border px-3 py-1 text-sm disabled:opacity-50", children: "Previous" }), _jsx("button", { onClick: () => handlePageChange(page + 1), disabled: page >= totalPages, className: "rounded-md border border-border px-3 py-1 text-sm disabled:opacity-50", children: "Next" })] })] }))] })] }));
|
|
88
85
|
}
|
|
89
86
|
//# sourceMappingURL=OrderTable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrderTable.js","sourceRoot":"","sources":["../../../src/admin/components/OrderTable.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OrderTable.js","sourceRoot":"","sources":["../../../src/admin/components/OrderTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { ProductFormProps } from '../types';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Enhanced product form for create and edit.
|
|
4
4
|
*
|
|
5
5
|
* @example
|
|
6
6
|
* ```tsx
|
|
7
7
|
* // Create mode
|
|
8
|
-
* <ProductForm onSuccess={(
|
|
8
|
+
* <ProductForm onSuccess={() => router.push('/admin/products')} />
|
|
9
9
|
*
|
|
10
10
|
* // Edit mode
|
|
11
11
|
* <ProductForm
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductForm.d.ts","sourceRoot":"","sources":["../../../src/admin/components/ProductForm.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ProductForm.d.ts","sourceRoot":"","sources":["../../../src/admin/components/ProductForm.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,gBAAgB,EAAoC,MAAM,UAAU,CAAA;AAkBlF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAc,GACf,EAAE,gBAAgB,2CAmvBlB"}
|
|
@@ -1,25 +1,28 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
'use client';
|
|
3
|
-
|
|
4
|
-
exports.ProductForm = ProductForm;
|
|
5
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
3
|
/**
|
|
7
4
|
* @rovela/sdk/admin/components/ProductForm
|
|
8
5
|
*
|
|
9
|
-
*
|
|
6
|
+
* Enhanced product create/edit form with 2-column layout.
|
|
7
|
+
* Includes: Basic info, Media, Pricing, Inventory, Variants, SEO, Organization.
|
|
10
8
|
*/
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
import { useState, useCallback, useEffect, useMemo } from 'react';
|
|
10
|
+
import { useAdminProducts } from '../hooks/useAdminProducts';
|
|
11
|
+
import { CategorySelect } from './CategorySelect';
|
|
12
|
+
import { SEOPreview } from './SEOPreview';
|
|
13
|
+
import { TagInput } from './TagInput';
|
|
14
|
+
import { VariantManager } from './VariantManager';
|
|
15
|
+
import { ImagePlus, Trash2, GripVertical, Info, ChevronDown, ChevronUp, Package } from 'lucide-react';
|
|
13
16
|
// =============================================================================
|
|
14
17
|
// Component
|
|
15
18
|
// =============================================================================
|
|
16
19
|
/**
|
|
17
|
-
*
|
|
20
|
+
* Enhanced product form for create and edit.
|
|
18
21
|
*
|
|
19
22
|
* @example
|
|
20
23
|
* ```tsx
|
|
21
24
|
* // Create mode
|
|
22
|
-
* <ProductForm onSuccess={(
|
|
25
|
+
* <ProductForm onSuccess={() => router.push('/admin/products')} />
|
|
23
26
|
*
|
|
24
27
|
* // Edit mode
|
|
25
28
|
* <ProductForm
|
|
@@ -28,10 +31,11 @@ const useAdminProducts_1 = require("../hooks/useAdminProducts");
|
|
|
28
31
|
* />
|
|
29
32
|
* ```
|
|
30
33
|
*/
|
|
31
|
-
function ProductForm({ productId, initialData, onSuccess, onCancel, className = '', }) {
|
|
32
|
-
const { getProduct, createProduct, updateProduct } =
|
|
34
|
+
export function ProductForm({ productId, initialData, onSuccess, onCancel, className = '', }) {
|
|
35
|
+
const { getProduct, createProduct, updateProduct } = useAdminProducts();
|
|
33
36
|
const isEditMode = !!productId;
|
|
34
|
-
|
|
37
|
+
// Form state
|
|
38
|
+
const [formData, setFormData] = useState({
|
|
35
39
|
name: initialData?.name || '',
|
|
36
40
|
slug: initialData?.slug || '',
|
|
37
41
|
description: initialData?.description || '',
|
|
@@ -44,13 +48,30 @@ function ProductForm({ productId, initialData, onSuccess, onCancel, className =
|
|
|
44
48
|
metaTitle: initialData?.metaTitle,
|
|
45
49
|
metaDescription: initialData?.metaDescription,
|
|
46
50
|
metaKeywords: initialData?.metaKeywords || [],
|
|
51
|
+
sku: '',
|
|
52
|
+
inventory: 0,
|
|
53
|
+
trackInventory: true,
|
|
47
54
|
});
|
|
48
|
-
|
|
49
|
-
const [
|
|
50
|
-
const [
|
|
51
|
-
const [
|
|
55
|
+
// Variant state
|
|
56
|
+
const [variantOptions, setVariantOptions] = useState([]);
|
|
57
|
+
const [variants, setVariants] = useState([]);
|
|
58
|
+
const [existingVariants, setExistingVariants] = useState([]);
|
|
59
|
+
// Image URL input
|
|
60
|
+
const [imageUrl, setImageUrl] = useState('');
|
|
61
|
+
// UI state
|
|
62
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
63
|
+
const [isFetching, setIsFetching] = useState(false);
|
|
64
|
+
const [error, setError] = useState(null);
|
|
65
|
+
const [seoExpanded, setSeoExpanded] = useState(false);
|
|
66
|
+
// Auto-generate slug from name
|
|
67
|
+
const autoSlug = useMemo(() => {
|
|
68
|
+
return formData.name
|
|
69
|
+
.toLowerCase()
|
|
70
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
71
|
+
.replace(/^-|-$/g, '');
|
|
72
|
+
}, [formData.name]);
|
|
52
73
|
// Load product data in edit mode
|
|
53
|
-
|
|
74
|
+
useEffect(() => {
|
|
54
75
|
if (productId && !initialData) {
|
|
55
76
|
setIsFetching(true);
|
|
56
77
|
getProduct(productId).then((product) => {
|
|
@@ -70,19 +91,66 @@ function ProductForm({ productId, initialData, onSuccess, onCancel, className =
|
|
|
70
91
|
metaDescription: p.metaDescription || undefined,
|
|
71
92
|
metaKeywords: p.metaKeywords || [],
|
|
72
93
|
});
|
|
94
|
+
// Load existing variants
|
|
95
|
+
if (p.variants && p.variants.length > 0) {
|
|
96
|
+
setExistingVariants(p.variants.map((v) => ({
|
|
97
|
+
sku: v.sku,
|
|
98
|
+
name: v.name,
|
|
99
|
+
price: v.price ? parseFloat(v.price) : undefined,
|
|
100
|
+
inventory: v.inventory,
|
|
101
|
+
attributes: v.attributes,
|
|
102
|
+
})));
|
|
103
|
+
// Reconstruct variant options from existing variants
|
|
104
|
+
const optionNames = new Set();
|
|
105
|
+
const optionValuesMap = new Map();
|
|
106
|
+
for (const variant of p.variants) {
|
|
107
|
+
for (const [key, value] of Object.entries(variant.attributes)) {
|
|
108
|
+
optionNames.add(key);
|
|
109
|
+
if (!optionValuesMap.has(key)) {
|
|
110
|
+
optionValuesMap.set(key, new Set());
|
|
111
|
+
}
|
|
112
|
+
optionValuesMap.get(key).add(value);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
const reconstructedOptions = Array.from(optionNames).map((name) => ({
|
|
116
|
+
name,
|
|
117
|
+
values: Array.from(optionValuesMap.get(name) || []),
|
|
118
|
+
}));
|
|
119
|
+
setVariantOptions(reconstructedOptions);
|
|
120
|
+
// Set variants
|
|
121
|
+
setVariants(p.variants.map((v) => ({
|
|
122
|
+
id: v.id,
|
|
123
|
+
sku: v.sku,
|
|
124
|
+
name: v.name,
|
|
125
|
+
price: v.price ? parseFloat(v.price) : null,
|
|
126
|
+
inventory: v.inventory,
|
|
127
|
+
attributes: v.attributes,
|
|
128
|
+
})));
|
|
129
|
+
}
|
|
130
|
+
// Auto-expand SEO if has values
|
|
131
|
+
if (p.metaTitle || p.metaDescription || (p.metaKeywords && p.metaKeywords.length > 0)) {
|
|
132
|
+
setSeoExpanded(true);
|
|
133
|
+
}
|
|
73
134
|
}
|
|
74
135
|
setIsFetching(false);
|
|
75
136
|
});
|
|
76
137
|
}
|
|
77
138
|
}, [productId, initialData, getProduct]);
|
|
78
|
-
|
|
139
|
+
// Handle field changes
|
|
140
|
+
const handleChange = useCallback((e) => {
|
|
79
141
|
const { name, value, type } = e.target;
|
|
142
|
+
const checked = e.target.checked;
|
|
80
143
|
setFormData((prev) => ({
|
|
81
144
|
...prev,
|
|
82
|
-
[name]: type === '
|
|
145
|
+
[name]: type === 'checkbox'
|
|
146
|
+
? checked
|
|
147
|
+
: type === 'number'
|
|
148
|
+
? (value ? parseFloat(value) : 0)
|
|
149
|
+
: value,
|
|
83
150
|
}));
|
|
84
151
|
}, []);
|
|
85
|
-
|
|
152
|
+
// Handle image add
|
|
153
|
+
const handleAddImage = useCallback(() => {
|
|
86
154
|
if (imageUrl.trim()) {
|
|
87
155
|
setFormData((prev) => ({
|
|
88
156
|
...prev,
|
|
@@ -91,20 +159,56 @@ function ProductForm({ productId, initialData, onSuccess, onCancel, className =
|
|
|
91
159
|
setImageUrl('');
|
|
92
160
|
}
|
|
93
161
|
}, [imageUrl]);
|
|
94
|
-
|
|
162
|
+
// Handle image remove
|
|
163
|
+
const handleRemoveImage = useCallback((index) => {
|
|
95
164
|
setFormData((prev) => ({
|
|
96
165
|
...prev,
|
|
97
166
|
images: prev.images.filter((_, i) => i !== index),
|
|
98
167
|
}));
|
|
99
168
|
}, []);
|
|
100
|
-
|
|
169
|
+
// Handle image reorder
|
|
170
|
+
const handleMoveImage = useCallback((fromIndex, toIndex) => {
|
|
171
|
+
setFormData((prev) => {
|
|
172
|
+
const newImages = [...prev.images];
|
|
173
|
+
const [removed] = newImages.splice(fromIndex, 1);
|
|
174
|
+
newImages.splice(toIndex, 0, removed);
|
|
175
|
+
return { ...prev, images: newImages };
|
|
176
|
+
});
|
|
177
|
+
}, []);
|
|
178
|
+
// Handle submit
|
|
179
|
+
const handleSubmit = useCallback(async (e) => {
|
|
101
180
|
e.preventDefault();
|
|
102
181
|
setError(null);
|
|
103
182
|
setIsLoading(true);
|
|
104
183
|
try {
|
|
184
|
+
// Build data
|
|
185
|
+
const data = {
|
|
186
|
+
name: formData.name,
|
|
187
|
+
slug: formData.slug || autoSlug,
|
|
188
|
+
description: formData.description,
|
|
189
|
+
price: formData.price,
|
|
190
|
+
comparePrice: formData.comparePrice,
|
|
191
|
+
images: formData.images,
|
|
192
|
+
status: isEditMode ? formData.status : 'draft', // Always create as draft
|
|
193
|
+
categoryId: formData.categoryId,
|
|
194
|
+
hasVariants: formData.hasVariants,
|
|
195
|
+
metaTitle: formData.metaTitle,
|
|
196
|
+
metaDescription: formData.metaDescription,
|
|
197
|
+
metaKeywords: formData.metaKeywords,
|
|
198
|
+
};
|
|
199
|
+
// Add variants if product has variants
|
|
200
|
+
if (formData.hasVariants && variants.length > 0) {
|
|
201
|
+
data.variants = variants.map((v) => ({
|
|
202
|
+
sku: v.sku,
|
|
203
|
+
name: v.name,
|
|
204
|
+
price: v.price ?? undefined,
|
|
205
|
+
inventory: v.inventory,
|
|
206
|
+
attributes: v.attributes,
|
|
207
|
+
}));
|
|
208
|
+
}
|
|
105
209
|
const result = isEditMode
|
|
106
|
-
? await updateProduct(productId,
|
|
107
|
-
: await createProduct(
|
|
210
|
+
? await updateProduct(productId, data)
|
|
211
|
+
: await createProduct(data);
|
|
108
212
|
if (!result.success) {
|
|
109
213
|
setError(result.error || 'Failed to save product');
|
|
110
214
|
return;
|
|
@@ -118,10 +222,19 @@ function ProductForm({ productId, initialData, onSuccess, onCancel, className =
|
|
|
118
222
|
finally {
|
|
119
223
|
setIsLoading(false);
|
|
120
224
|
}
|
|
121
|
-
}, [isEditMode, productId, formData, createProduct, updateProduct, onSuccess]);
|
|
225
|
+
}, [isEditMode, productId, formData, autoSlug, variants, createProduct, updateProduct, onSuccess]);
|
|
226
|
+
// Loading state
|
|
122
227
|
if (isFetching) {
|
|
123
|
-
return ((
|
|
228
|
+
return (_jsx("div", { className: "flex items-center justify-center py-12", children: _jsx("div", { className: "h-8 w-8 animate-spin rounded-full border-2 border-primary border-t-transparent" }) }));
|
|
124
229
|
}
|
|
125
|
-
return ((
|
|
230
|
+
return (_jsxs("form", { onSubmit: handleSubmit, className: `${className}`, children: [error && (_jsx("div", { className: "mb-6 rounded-md bg-destructive/10 px-4 py-3 text-sm text-destructive", children: error })), _jsxs("div", { className: "grid gap-6 lg:grid-cols-3", children: [_jsxs("div", { className: "space-y-6 lg:col-span-2", children: [_jsxs("div", { className: "rounded-lg border border-border bg-card p-6", children: [_jsx("h3", { className: "mb-4 text-lg font-medium text-foreground", children: "Basic Information" }), _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { children: [_jsxs("label", { htmlFor: "name", className: "block text-sm font-medium text-foreground", children: ["Product Name ", _jsx("span", { className: "text-destructive", children: "*" })] }), _jsx("input", { id: "name", name: "name", type: "text", value: formData.name, onChange: handleChange, required: true, placeholder: "e.g., Premium Cotton T-Shirt", className: "mt-1 block w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "slug", className: "block text-sm font-medium text-foreground", children: "URL Handle" }), _jsxs("div", { className: "mt-1 flex rounded-md border border-input focus-within:border-primary focus-within:ring-1 focus-within:ring-primary", children: [_jsx("span", { className: "inline-flex items-center rounded-l-md border-r border-input bg-muted px-3 text-sm text-muted-foreground", children: "/products/" }), _jsx("input", { id: "slug", name: "slug", type: "text", value: formData.slug, onChange: handleChange, placeholder: autoSlug || 'auto-generated', className: "flex-1 rounded-r-md border-0 bg-background px-3 py-2 text-sm focus:outline-none" })] }), _jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: "Leave blank to auto-generate from product name" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "description", className: "block text-sm font-medium text-foreground", children: "Description" }), _jsx("textarea", { id: "description", name: "description", value: formData.description, onChange: handleChange, rows: 5, placeholder: "Describe your product in detail...", className: "mt-1 block w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary" }), _jsxs("p", { className: "mt-1 text-xs text-muted-foreground", children: [formData.description.length, " characters"] })] })] })] }), _jsxs("div", { className: "rounded-lg border border-border bg-card p-6", children: [_jsx("h3", { className: "mb-4 text-lg font-medium text-foreground", children: "Media" }), _jsxs("div", { className: "space-y-4", children: [formData.images.length > 0 && (_jsx("div", { className: "grid grid-cols-2 gap-4 sm:grid-cols-3 md:grid-cols-4", children: formData.images.map((url, index) => (_jsxs("div", { className: "group relative aspect-square overflow-hidden rounded-lg border border-border bg-muted", children: [_jsx("img", { src: url, alt: `Product ${index + 1}`, className: "h-full w-full object-cover" }), index === 0 && (_jsx("span", { className: "absolute left-2 top-2 rounded bg-primary px-2 py-0.5 text-xs font-medium text-primary-foreground", children: "Primary" })), _jsxs("div", { className: "absolute inset-0 flex items-center justify-center gap-2 bg-black/50 opacity-0 transition-opacity group-hover:opacity-100", children: [index > 0 && (_jsx("button", { type: "button", onClick: () => handleMoveImage(index, 0), className: "rounded-full bg-white p-2 text-foreground hover:bg-gray-100", title: "Make primary", children: _jsx(GripVertical, { className: "h-4 w-4" }) })), _jsx("button", { type: "button", onClick: () => handleRemoveImage(index), className: "rounded-full bg-destructive p-2 text-destructive-foreground hover:bg-destructive/90", title: "Remove", children: _jsx(Trash2, { className: "h-4 w-4" }) })] })] }, index))) })), _jsxs("div", { className: "flex gap-2", children: [_jsx("input", { type: "url", value: imageUrl, onChange: (e) => setImageUrl(e.target.value), onKeyDown: (e) => {
|
|
231
|
+
if (e.key === 'Enter') {
|
|
232
|
+
e.preventDefault();
|
|
233
|
+
handleAddImage();
|
|
234
|
+
}
|
|
235
|
+
}, placeholder: "Paste image URL...", className: "flex-1 rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary" }), _jsxs("button", { type: "button", onClick: handleAddImage, disabled: !imageUrl.trim(), className: "inline-flex items-center gap-2 rounded-md bg-secondary px-4 py-2 text-sm font-medium text-secondary-foreground hover:bg-secondary/80 disabled:opacity-50", children: [_jsx(ImagePlus, { className: "h-4 w-4" }), "Add"] })] }), formData.images.length === 0 && (_jsxs("div", { className: "rounded-lg border-2 border-dashed border-border p-8 text-center", children: [_jsx(ImagePlus, { className: "mx-auto h-10 w-10 text-muted-foreground" }), _jsx("p", { className: "mt-2 text-sm text-muted-foreground", children: "Add images by pasting URLs above" })] }))] })] }), _jsxs("div", { className: "rounded-lg border border-border bg-card p-6", children: [_jsx("h3", { className: "mb-4 text-lg font-medium text-foreground", children: "Pricing" }), _jsxs("div", { className: "grid gap-4 sm:grid-cols-2", children: [_jsxs("div", { children: [_jsxs("label", { htmlFor: "price", className: "block text-sm font-medium text-foreground", children: ["Price ", _jsx("span", { className: "text-destructive", children: "*" })] }), _jsxs("div", { className: "mt-1 relative", children: [_jsx("span", { className: "absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground", children: "$" }), _jsx("input", { id: "price", name: "price", type: "number", step: "0.01", min: "0", value: formData.price, onChange: handleChange, required: true, className: "block w-full rounded-md border border-input bg-background pl-7 pr-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary" })] })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "comparePrice", className: "block text-sm font-medium text-foreground", children: "Compare at Price" }), _jsxs("div", { className: "mt-1 relative", children: [_jsx("span", { className: "absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground", children: "$" }), _jsx("input", { id: "comparePrice", name: "comparePrice", type: "number", step: "0.01", min: "0", value: formData.comparePrice || '', onChange: handleChange, placeholder: "Original price", className: "block w-full rounded-md border border-input bg-background pl-7 pr-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary" })] }), _jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: "Shows as strikethrough price for sales" })] })] }), formData.comparePrice && formData.comparePrice > formData.price && (_jsxs("div", { className: "mt-4 flex items-center gap-2 rounded-md bg-green-50 dark:bg-green-950/20 px-3 py-2 text-sm text-green-700 dark:text-green-400", children: [_jsx(Info, { className: "h-4 w-4" }), Math.round(((formData.comparePrice - formData.price) / formData.comparePrice) * 100), "% discount from compare price"] }))] }), !formData.hasVariants && (_jsxs("div", { className: "rounded-lg border border-border bg-card p-6", children: [_jsx("h3", { className: "mb-4 text-lg font-medium text-foreground", children: "Inventory" }), _jsxs("div", { className: "grid gap-4 sm:grid-cols-2", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "sku", className: "block text-sm font-medium text-foreground", children: "SKU (Stock Keeping Unit)" }), _jsx("input", { id: "sku", name: "sku", type: "text", value: formData.sku || '', onChange: handleChange, placeholder: "e.g., SHIRT-001", className: "mt-1 block w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "inventory", className: "block text-sm font-medium text-foreground", children: "Quantity" }), _jsx("input", { id: "inventory", name: "inventory", type: "number", min: "0", value: formData.inventory || 0, onChange: handleChange, className: "mt-1 block w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary" })] })] })] })), _jsxs("div", { className: "rounded-lg border border-border bg-card p-6", children: [_jsxs("div", { className: "flex items-center justify-between mb-4", children: [_jsxs("div", { children: [_jsx("h3", { className: "text-lg font-medium text-foreground", children: "Variants" }), _jsx("p", { className: "text-sm text-muted-foreground", children: "Add options like size or color to create product variants" })] }), _jsxs("label", { className: "relative inline-flex cursor-pointer items-center", children: [_jsx("input", { type: "checkbox", name: "hasVariants", checked: formData.hasVariants, onChange: handleChange, className: "peer sr-only" }), _jsx("div", { className: "peer h-6 w-11 rounded-full bg-muted after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:bg-white after:transition-all after:content-[''] peer-checked:bg-primary peer-checked:after:translate-x-full peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-primary/20" })] })] }), formData.hasVariants && (_jsx(VariantManager, { options: variantOptions, variants: variants, onOptionsChange: setVariantOptions, onVariantsChange: setVariants, basePrice: formData.price }))] }), _jsxs("div", { className: "rounded-lg border border-border bg-card", children: [_jsxs("button", { type: "button", onClick: () => setSeoExpanded(!seoExpanded), className: "flex w-full items-center justify-between p-6 text-left", children: [_jsxs("div", { children: [_jsx("h3", { className: "text-lg font-medium text-foreground", children: "Search Engine Listing" }), _jsx("p", { className: "text-sm text-muted-foreground", children: "Customize how this product appears in search results" })] }), seoExpanded ? (_jsx(ChevronUp, { className: "h-5 w-5 text-muted-foreground" })) : (_jsx(ChevronDown, { className: "h-5 w-5 text-muted-foreground" }))] }), seoExpanded && (_jsxs("div", { className: "border-t border-border p-6 space-y-4", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "metaTitle", className: "block text-sm font-medium text-foreground", children: "Meta Title" }), _jsx("input", { id: "metaTitle", name: "metaTitle", type: "text", value: formData.metaTitle || '', onChange: handleChange, maxLength: 70, placeholder: formData.name || 'Product title', className: "mt-1 block w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary" }), _jsxs("p", { className: "mt-1 text-xs text-muted-foreground", children: [(formData.metaTitle || '').length, "/70 characters"] })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "metaDescription", className: "block text-sm font-medium text-foreground", children: "Meta Description" }), _jsx("textarea", { id: "metaDescription", name: "metaDescription", value: formData.metaDescription || '', onChange: handleChange, maxLength: 160, rows: 3, placeholder: "Brief description for search engines...", className: "mt-1 block w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary" }), _jsxs("p", { className: "mt-1 text-xs text-muted-foreground", children: [(formData.metaDescription || '').length, "/160 characters"] })] }), _jsxs("div", { children: [_jsx("label", { className: "block text-sm font-medium text-foreground mb-1", children: "Meta Keywords" }), _jsx(TagInput, { value: formData.metaKeywords || [], onChange: (tags) => setFormData((prev) => ({ ...prev, metaKeywords: tags })), placeholder: "Add keywords...", maxTags: 10 })] }), _jsx(SEOPreview, { title: formData.metaTitle || formData.name, description: formData.metaDescription || formData.description.slice(0, 160), slug: formData.slug || autoSlug, className: "mt-4" })] }))] })] }), _jsxs("div", { className: "space-y-6", children: [isEditMode && (_jsxs("div", { className: "rounded-lg border border-border bg-card p-6", children: [_jsx("h3", { className: "mb-4 text-lg font-medium text-foreground", children: "Status" }), _jsxs("div", { className: "space-y-3", children: [_jsxs("label", { className: "flex items-center gap-3 cursor-pointer", children: [_jsx("input", { type: "radio", name: "status", value: "draft", checked: formData.status === 'draft', onChange: handleChange, className: "h-4 w-4 text-primary focus:ring-primary" }), _jsxs("div", { children: [_jsx("span", { className: "text-sm font-medium text-foreground", children: "Draft" }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Not visible to customers" })] })] }), _jsxs("label", { className: "flex items-center gap-3 cursor-pointer", children: [_jsx("input", { type: "radio", name: "status", value: "active", checked: formData.status === 'active', onChange: handleChange, className: "h-4 w-4 text-primary focus:ring-primary" }), _jsxs("div", { children: [_jsx("span", { className: "text-sm font-medium text-foreground", children: "Active" }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Visible to customers" })] })] }), _jsxs("label", { className: "flex items-center gap-3 cursor-pointer", children: [_jsx("input", { type: "radio", name: "status", value: "archived", checked: formData.status === 'archived', onChange: handleChange, className: "h-4 w-4 text-primary focus:ring-primary" }), _jsxs("div", { children: [_jsx("span", { className: "text-sm font-medium text-foreground", children: "Archived" }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Hidden and not for sale" })] })] })] })] })), _jsxs("div", { className: "rounded-lg border border-border bg-card p-6", children: [_jsx("h3", { className: "mb-4 text-lg font-medium text-foreground", children: "Organization" }), _jsx("div", { className: "space-y-4", children: _jsxs("div", { children: [_jsx("label", { className: "block text-sm font-medium text-foreground mb-1", children: "Category" }), _jsx(CategorySelect, { value: formData.categoryId || null, onChange: (id) => setFormData((prev) => ({ ...prev, categoryId: id || undefined })), placeholder: "Select category", showAddNew: true, onAddNew: () => {
|
|
236
|
+
// Open category management in new tab
|
|
237
|
+
window.open('/admin/categories', '_blank');
|
|
238
|
+
} })] }) })] }), _jsxs("div", { className: "rounded-lg border border-border bg-card p-6", children: [_jsxs("h3", { className: "mb-4 text-lg font-medium text-foreground flex items-center gap-2", children: [_jsx(Package, { className: "h-5 w-5" }), "Summary"] }), _jsxs("dl", { className: "space-y-2 text-sm", children: [_jsxs("div", { className: "flex justify-between", children: [_jsx("dt", { className: "text-muted-foreground", children: "Price" }), _jsxs("dd", { className: "font-medium", children: ["$", formData.price.toFixed(2)] })] }), formData.hasVariants && variants.length > 0 && (_jsxs("div", { className: "flex justify-between", children: [_jsx("dt", { className: "text-muted-foreground", children: "Variants" }), _jsx("dd", { className: "font-medium", children: variants.length })] })), _jsxs("div", { className: "flex justify-between", children: [_jsx("dt", { className: "text-muted-foreground", children: "Images" }), _jsx("dd", { className: "font-medium", children: formData.images.length })] }), formData.hasVariants && variants.length > 0 && (_jsxs("div", { className: "flex justify-between", children: [_jsx("dt", { className: "text-muted-foreground", children: "Total Inventory" }), _jsx("dd", { className: "font-medium", children: variants.reduce((sum, v) => sum + v.inventory, 0) })] }))] })] }), _jsxs("div", { className: "rounded-lg border border-border bg-card p-6 lg:sticky lg:top-6", children: [_jsxs("div", { className: "space-y-3", children: [_jsx("button", { type: "submit", disabled: isLoading, className: "w-full rounded-md bg-primary px-4 py-2.5 text-sm font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50", children: isLoading ? 'Saving...' : isEditMode ? 'Save Changes' : 'Create Product' }), onCancel && (_jsx("button", { type: "button", onClick: onCancel, className: "w-full rounded-md border border-border px-4 py-2.5 text-sm font-medium text-foreground hover:bg-accent", children: "Cancel" }))] }), !isEditMode && (_jsx("p", { className: "mt-3 text-xs text-center text-muted-foreground", children: "Product will be saved as draft" }))] })] })] })] }));
|
|
126
239
|
}
|
|
127
240
|
//# sourceMappingURL=ProductForm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductForm.js","sourceRoot":"","sources":["../../../src/admin/components/ProductForm.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ProductForm.js","sourceRoot":"","sources":["../../../src/admin/components/ProductForm.tsx"],"names":[],"mappings":"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"}
|