@rovela-ai/sdk 0.1.2 → 0.1.3
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.d.ts +32 -0
- package/dist/admin/api/auth.d.ts.map +1 -0
- package/dist/admin/api/auth.js +43 -0
- package/dist/admin/api/auth.js.map +1 -0
- package/dist/admin/api/categories.d.ts +68 -0
- package/dist/admin/api/categories.d.ts.map +1 -0
- package/dist/admin/api/categories.js +247 -0
- package/dist/admin/api/categories.js.map +1 -0
- package/dist/admin/api/customers.d.ts +41 -0
- package/dist/admin/api/customers.d.ts.map +1 -0
- package/dist/admin/api/customers.js +113 -0
- package/dist/admin/api/customers.js.map +1 -0
- package/dist/admin/api/index.d.ts +56 -0
- package/dist/admin/api/index.d.ts.map +1 -0
- package/dist/admin/api/index.js +87 -0
- package/dist/admin/api/index.js.map +1 -0
- package/dist/admin/api/orders.d.ts +59 -0
- package/dist/admin/api/orders.d.ts.map +1 -0
- package/dist/admin/api/orders.js +209 -0
- package/dist/admin/api/orders.js.map +1 -0
- package/dist/admin/api/products.d.ts +103 -0
- package/dist/admin/api/products.d.ts.map +1 -0
- package/dist/admin/api/products.js +329 -0
- package/dist/admin/api/products.js.map +1 -0
- package/dist/admin/api/refund.d.ts +29 -0
- package/dist/admin/api/refund.d.ts.map +1 -0
- package/dist/admin/api/refund.js +136 -0
- package/dist/admin/api/refund.js.map +1 -0
- package/dist/admin/api/stats.d.ts +40 -0
- package/dist/admin/api/stats.d.ts.map +1 -0
- package/dist/admin/api/stats.js +74 -0
- package/dist/admin/api/stats.js.map +1 -0
- package/dist/admin/components/AdminGuard.d.ts +40 -0
- package/dist/admin/components/AdminGuard.d.ts.map +1 -0
- package/dist/admin/components/AdminGuard.js +97 -0
- package/dist/admin/components/AdminGuard.js.map +1 -0
- package/dist/admin/components/AdminHeader.d.ts +18 -0
- package/dist/admin/components/AdminHeader.d.ts.map +1 -0
- package/dist/admin/components/AdminHeader.js +33 -0
- package/dist/admin/components/AdminHeader.js.map +1 -0
- package/dist/admin/components/AdminLayout.d.ts +50 -0
- package/dist/admin/components/AdminLayout.d.ts.map +1 -0
- package/dist/admin/components/AdminLayout.js +46 -0
- package/dist/admin/components/AdminLayout.js.map +1 -0
- package/dist/admin/components/AdminLoginForm.d.ts +18 -0
- package/dist/admin/components/AdminLoginForm.d.ts.map +1 -0
- package/dist/admin/components/AdminLoginForm.js +58 -0
- package/dist/admin/components/AdminLoginForm.js.map +1 -0
- package/dist/admin/components/AdminNav.d.ts +34 -0
- package/dist/admin/components/AdminNav.d.ts.map +1 -0
- package/dist/admin/components/AdminNav.js +61 -0
- package/dist/admin/components/AdminNav.js.map +1 -0
- package/dist/admin/components/InventoryEditor.d.ts +15 -0
- package/dist/admin/components/InventoryEditor.d.ts.map +1 -0
- package/dist/admin/components/InventoryEditor.js +83 -0
- package/dist/admin/components/InventoryEditor.js.map +1 -0
- package/dist/admin/components/LowStockAlert.d.ts +11 -0
- package/dist/admin/components/LowStockAlert.d.ts.map +1 -0
- package/dist/admin/components/LowStockAlert.js +35 -0
- package/dist/admin/components/LowStockAlert.js.map +1 -0
- package/dist/admin/components/OrderDetails.d.ts +14 -0
- package/dist/admin/components/OrderDetails.d.ts.map +1 -0
- package/dist/admin/components/OrderDetails.js +94 -0
- package/dist/admin/components/OrderDetails.js.map +1 -0
- package/dist/admin/components/OrderTable.d.ts +13 -0
- package/dist/admin/components/OrderTable.d.ts.map +1 -0
- package/dist/admin/components/OrderTable.js +89 -0
- package/dist/admin/components/OrderTable.js.map +1 -0
- package/dist/admin/components/ProductForm.d.ts +18 -0
- package/dist/admin/components/ProductForm.d.ts.map +1 -0
- package/dist/admin/components/ProductForm.js +127 -0
- package/dist/admin/components/ProductForm.js.map +1 -0
- package/dist/admin/components/ProductTable.d.ts +13 -0
- package/dist/admin/components/ProductTable.d.ts.map +1 -0
- package/dist/admin/components/ProductTable.js +81 -0
- package/dist/admin/components/ProductTable.js.map +1 -0
- package/dist/admin/components/RecentOrders.d.ts +11 -0
- package/dist/admin/components/RecentOrders.d.ts.map +1 -0
- package/dist/admin/components/RecentOrders.js +58 -0
- package/dist/admin/components/RecentOrders.js.map +1 -0
- package/dist/admin/components/RefundDialog.d.ts +17 -0
- package/dist/admin/components/RefundDialog.d.ts.map +1 -0
- package/dist/admin/components/RefundDialog.js +86 -0
- package/dist/admin/components/RefundDialog.js.map +1 -0
- package/dist/admin/components/StatsCards.d.ts +23 -0
- package/dist/admin/components/StatsCards.d.ts.map +1 -0
- package/dist/admin/components/StatsCards.js +82 -0
- package/dist/admin/components/StatsCards.js.map +1 -0
- package/dist/admin/components/StoreSettings.d.ts +14 -0
- package/dist/admin/components/StoreSettings.d.ts.map +1 -0
- package/dist/admin/components/StoreSettings.js +88 -0
- package/dist/admin/components/StoreSettings.js.map +1 -0
- package/dist/admin/components/index.d.ts +21 -0
- package/dist/admin/components/index.d.ts.map +1 -0
- package/dist/admin/components/index.js +57 -0
- package/dist/admin/components/index.js.map +1 -0
- package/dist/admin/config.d.ts +74 -0
- package/dist/admin/config.d.ts.map +1 -0
- package/dist/admin/config.js +229 -0
- package/dist/admin/config.js.map +1 -0
- package/dist/admin/hooks/index.d.ts +10 -0
- package/dist/admin/hooks/index.d.ts.map +1 -0
- package/dist/admin/hooks/index.js +17 -0
- package/dist/admin/hooks/index.js.map +1 -0
- package/dist/admin/hooks/useAdminOrders.d.ts +41 -0
- package/dist/admin/hooks/useAdminOrders.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminOrders.js +191 -0
- package/dist/admin/hooks/useAdminOrders.js.map +1 -0
- package/dist/admin/hooks/useAdminProducts.d.ts +39 -0
- package/dist/admin/hooks/useAdminProducts.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminProducts.js +235 -0
- package/dist/admin/hooks/useAdminProducts.js.map +1 -0
- package/dist/admin/hooks/useAdminStats.d.ts +50 -0
- package/dist/admin/hooks/useAdminStats.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminStats.js +111 -0
- package/dist/admin/hooks/useAdminStats.js.map +1 -0
- package/dist/admin/index.d.ts +63 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +148 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/server/admin-service.d.ts +130 -0
- package/dist/admin/server/admin-service.d.ts.map +1 -0
- package/dist/admin/server/admin-service.js +298 -0
- package/dist/admin/server/admin-service.js.map +1 -0
- package/dist/admin/server/index.d.ts +8 -0
- package/dist/admin/server/index.d.ts.map +1 -0
- package/dist/admin/server/index.js +25 -0
- package/dist/admin/server/index.js.map +1 -0
- package/dist/admin/types.d.ts +549 -0
- package/dist/admin/types.d.ts.map +1 -0
- package/dist/admin/types.js +11 -0
- package/dist/admin/types.js.map +1 -0
- package/dist/auth/api/auth.d.ts +54 -0
- package/dist/auth/api/auth.d.ts.map +1 -0
- package/dist/auth/api/auth.js +67 -0
- package/dist/auth/api/auth.js.map +1 -0
- package/dist/auth/api/forgot-password.d.ts +41 -0
- package/dist/auth/api/forgot-password.d.ts.map +1 -0
- package/dist/auth/api/forgot-password.js +68 -0
- package/dist/auth/api/forgot-password.js.map +1 -0
- package/dist/auth/api/index.d.ts +34 -0
- package/dist/auth/api/index.d.ts.map +1 -0
- package/dist/auth/api/index.js +52 -0
- package/dist/auth/api/index.js.map +1 -0
- package/dist/auth/api/register.d.ts +41 -0
- package/dist/auth/api/register.d.ts.map +1 -0
- package/dist/auth/api/register.js +93 -0
- package/dist/auth/api/register.js.map +1 -0
- package/dist/auth/api/resend-verification.d.ts +41 -0
- package/dist/auth/api/resend-verification.d.ts.map +1 -0
- package/dist/auth/api/resend-verification.js +71 -0
- package/dist/auth/api/resend-verification.js.map +1 -0
- package/dist/auth/api/reset-password.d.ts +67 -0
- package/dist/auth/api/reset-password.d.ts.map +1 -0
- package/dist/auth/api/reset-password.js +110 -0
- package/dist/auth/api/reset-password.js.map +1 -0
- package/dist/auth/api/verify-email.d.ts +47 -0
- package/dist/auth/api/verify-email.d.ts.map +1 -0
- package/dist/auth/api/verify-email.js +94 -0
- package/dist/auth/api/verify-email.js.map +1 -0
- package/dist/auth/components/AuthGuard.d.ts +52 -0
- package/dist/auth/components/AuthGuard.d.ts.map +1 -0
- package/dist/auth/components/AuthGuard.js +113 -0
- package/dist/auth/components/AuthGuard.js.map +1 -0
- package/dist/auth/components/ForgotPasswordForm.d.ts +15 -0
- package/dist/auth/components/ForgotPasswordForm.d.ts.map +1 -0
- package/dist/auth/components/ForgotPasswordForm.js +44 -0
- package/dist/auth/components/ForgotPasswordForm.js.map +1 -0
- package/dist/auth/components/ResetPasswordForm.d.ts +18 -0
- package/dist/auth/components/ResetPasswordForm.d.ts.map +1 -0
- package/dist/auth/components/ResetPasswordForm.js +88 -0
- package/dist/auth/components/ResetPasswordForm.js.map +1 -0
- package/dist/auth/components/SignInForm.d.ts +21 -0
- package/dist/auth/components/SignInForm.d.ts.map +1 -0
- package/dist/auth/components/SignInForm.js +63 -0
- package/dist/auth/components/SignInForm.js.map +1 -0
- package/dist/auth/components/SignUpForm.d.ts +18 -0
- package/dist/auth/components/SignUpForm.d.ts.map +1 -0
- package/dist/auth/components/SignUpForm.js +79 -0
- package/dist/auth/components/SignUpForm.js.map +1 -0
- package/dist/auth/components/UserMenu.d.ts +18 -0
- package/dist/auth/components/UserMenu.d.ts.map +1 -0
- package/dist/auth/components/UserMenu.js +75 -0
- package/dist/auth/components/UserMenu.js.map +1 -0
- package/dist/auth/components/VerifyEmailNotice.d.ts +20 -0
- package/dist/auth/components/VerifyEmailNotice.d.ts.map +1 -0
- package/dist/auth/components/VerifyEmailNotice.js +59 -0
- package/dist/auth/components/VerifyEmailNotice.js.map +1 -0
- package/dist/auth/components/index.d.ts +13 -0
- package/dist/auth/components/index.d.ts.map +1 -0
- package/dist/auth/components/index.js +24 -0
- package/dist/auth/components/index.js.map +1 -0
- package/dist/auth/config.d.ts +42 -0
- package/dist/auth/config.d.ts.map +1 -0
- package/dist/auth/config.js +174 -0
- package/dist/auth/config.js.map +1 -0
- package/dist/auth/hooks/index.d.ts +7 -0
- package/dist/auth/hooks/index.d.ts.map +1 -0
- package/dist/auth/hooks/index.js +11 -0
- package/dist/auth/hooks/index.js.map +1 -0
- package/dist/auth/index.d.ts +54 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +88 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/server/customer-service.d.ts +138 -0
- package/dist/auth/server/customer-service.d.ts.map +1 -0
- package/dist/auth/server/customer-service.js +309 -0
- package/dist/auth/server/customer-service.js.map +1 -0
- package/dist/auth/server/email-sender.d.ts +64 -0
- package/dist/auth/server/email-sender.d.ts.map +1 -0
- package/dist/auth/server/email-sender.js +112 -0
- package/dist/auth/server/email-sender.js.map +1 -0
- package/dist/auth/server/index.d.ts +13 -0
- package/dist/auth/server/index.d.ts.map +1 -0
- package/dist/auth/server/index.js +48 -0
- package/dist/auth/server/index.js.map +1 -0
- package/dist/auth/server/password-reset-service.d.ts +86 -0
- package/dist/auth/server/password-reset-service.d.ts.map +1 -0
- package/dist/auth/server/password-reset-service.js +236 -0
- package/dist/auth/server/password-reset-service.js.map +1 -0
- package/dist/auth/server/password.d.ts +58 -0
- package/dist/auth/server/password.d.ts.map +1 -0
- package/dist/auth/server/password.js +94 -0
- package/dist/auth/server/password.js.map +1 -0
- package/dist/auth/server/verification-service.d.ts +87 -0
- package/dist/auth/server/verification-service.d.ts.map +1 -0
- package/dist/auth/server/verification-service.js +268 -0
- package/dist/auth/server/verification-service.js.map +1 -0
- package/dist/auth/types.d.ts +305 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +8 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/cart/CartProvider.d.ts +65 -0
- package/dist/cart/CartProvider.d.ts.map +1 -0
- package/dist/cart/CartProvider.js +101 -0
- package/dist/cart/CartProvider.js.map +1 -0
- package/dist/cart/components/AddToCartButton.d.ts +77 -0
- package/dist/cart/components/AddToCartButton.d.ts.map +1 -0
- package/dist/cart/components/AddToCartButton.js +124 -0
- package/dist/cart/components/AddToCartButton.js.map +1 -0
- package/dist/cart/components/CartDrawer.d.ts +71 -0
- package/dist/cart/components/CartDrawer.d.ts.map +1 -0
- package/dist/cart/components/CartDrawer.js +108 -0
- package/dist/cart/components/CartDrawer.js.map +1 -0
- package/dist/cart/components/CartIcon.d.ts +36 -0
- package/dist/cart/components/CartIcon.d.ts.map +1 -0
- package/dist/cart/components/CartIcon.js +70 -0
- package/dist/cart/components/CartIcon.js.map +1 -0
- package/dist/cart/components/CartItem.d.ts +52 -0
- package/dist/cart/components/CartItem.d.ts.map +1 -0
- package/dist/cart/components/CartItem.js +55 -0
- package/dist/cart/components/CartItem.js.map +1 -0
- package/dist/cart/components/CartSummary.d.ts +43 -0
- package/dist/cart/components/CartSummary.d.ts.map +1 -0
- package/dist/cart/components/CartSummary.js +58 -0
- package/dist/cart/components/CartSummary.js.map +1 -0
- package/dist/cart/components/QuantitySelector.d.ts +39 -0
- package/dist/cart/components/QuantitySelector.d.ts.map +1 -0
- package/dist/cart/components/QuantitySelector.js +87 -0
- package/dist/cart/components/QuantitySelector.js.map +1 -0
- package/dist/cart/components/index.d.ts +18 -0
- package/dist/cart/components/index.d.ts.map +1 -0
- package/dist/cart/components/index.js +21 -0
- package/dist/cart/components/index.js.map +1 -0
- package/dist/cart/index.d.ts +109 -0
- package/dist/cart/index.d.ts.map +1 -0
- package/dist/cart/index.js +129 -0
- package/dist/cart/index.js.map +1 -0
- package/dist/cart/store.d.ts +101 -0
- package/dist/cart/store.d.ts.map +1 -0
- package/dist/cart/store.js +207 -0
- package/dist/cart/store.js.map +1 -0
- package/dist/checkout/api/checkout.d.ts +31 -0
- package/dist/checkout/api/checkout.d.ts.map +1 -0
- package/dist/checkout/api/checkout.js +103 -0
- package/dist/checkout/api/checkout.js.map +1 -0
- package/dist/checkout/api/index.d.ts +8 -0
- package/dist/checkout/api/index.d.ts.map +1 -0
- package/dist/checkout/api/index.js +13 -0
- package/dist/checkout/api/index.js.map +1 -0
- package/dist/checkout/api/webhook.d.ts +30 -0
- package/dist/checkout/api/webhook.d.ts.map +1 -0
- package/dist/checkout/api/webhook.js +58 -0
- package/dist/checkout/api/webhook.js.map +1 -0
- package/dist/checkout/components/CheckoutButton.d.ts +44 -0
- package/dist/checkout/components/CheckoutButton.d.ts.map +1 -0
- package/dist/checkout/components/CheckoutButton.js +97 -0
- package/dist/checkout/components/CheckoutButton.js.map +1 -0
- package/dist/checkout/components/CheckoutSuccess.d.ts +29 -0
- package/dist/checkout/components/CheckoutSuccess.d.ts.map +1 -0
- package/dist/checkout/components/CheckoutSuccess.js +60 -0
- package/dist/checkout/components/CheckoutSuccess.js.map +1 -0
- package/dist/checkout/components/OrderSummary.d.ts +37 -0
- package/dist/checkout/components/OrderSummary.d.ts.map +1 -0
- package/dist/checkout/components/OrderSummary.js +70 -0
- package/dist/checkout/components/OrderSummary.js.map +1 -0
- package/dist/checkout/components/ShippingForm.d.ts +30 -0
- package/dist/checkout/components/ShippingForm.d.ts.map +1 -0
- package/dist/checkout/components/ShippingForm.js +125 -0
- package/dist/checkout/components/ShippingForm.js.map +1 -0
- package/dist/checkout/components/index.d.ts +10 -0
- package/dist/checkout/components/index.d.ts.map +1 -0
- package/dist/checkout/components/index.js +17 -0
- package/dist/checkout/components/index.js.map +1 -0
- package/dist/checkout/hooks/index.d.ts +7 -0
- package/dist/checkout/hooks/index.d.ts.map +1 -0
- package/dist/checkout/hooks/index.js +12 -0
- package/dist/checkout/hooks/index.js.map +1 -0
- package/dist/checkout/hooks/useCheckout.d.ts +61 -0
- package/dist/checkout/hooks/useCheckout.d.ts.map +1 -0
- package/dist/checkout/hooks/useCheckout.js +174 -0
- package/dist/checkout/hooks/useCheckout.js.map +1 -0
- package/dist/checkout/index.d.ts +111 -0
- package/dist/checkout/index.d.ts.map +1 -0
- package/dist/checkout/index.js +148 -0
- package/dist/checkout/index.js.map +1 -0
- package/dist/checkout/server/create-checkout-session.d.ts +69 -0
- package/dist/checkout/server/create-checkout-session.d.ts.map +1 -0
- package/dist/checkout/server/create-checkout-session.js +190 -0
- package/dist/checkout/server/create-checkout-session.js.map +1 -0
- package/dist/checkout/server/handle-webhook.d.ts +35 -0
- package/dist/checkout/server/handle-webhook.d.ts.map +1 -0
- package/dist/checkout/server/handle-webhook.js +279 -0
- package/dist/checkout/server/handle-webhook.js.map +1 -0
- package/dist/checkout/server/index.d.ts +10 -0
- package/dist/checkout/server/index.d.ts.map +1 -0
- package/dist/checkout/server/index.js +19 -0
- package/dist/checkout/server/index.js.map +1 -0
- package/dist/checkout/server/order-service.d.ts +43 -0
- package/dist/checkout/server/order-service.d.ts.map +1 -0
- package/dist/checkout/server/order-service.js +196 -0
- package/dist/checkout/server/order-service.js.map +1 -0
- package/dist/checkout/stripe/client.d.ts +72 -0
- package/dist/checkout/stripe/client.d.ts.map +1 -0
- package/dist/checkout/stripe/client.js +189 -0
- package/dist/checkout/stripe/client.js.map +1 -0
- package/dist/checkout/stripe/index.d.ts +7 -0
- package/dist/checkout/stripe/index.d.ts.map +1 -0
- package/dist/checkout/stripe/index.js +21 -0
- package/dist/checkout/stripe/index.js.map +1 -0
- package/dist/checkout/types.d.ts +263 -0
- package/dist/checkout/types.d.ts.map +1 -0
- package/dist/checkout/types.js +9 -0
- package/dist/checkout/types.js.map +1 -0
- package/dist/core/config.d.ts +296 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +162 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/db/client.d.ts +69 -0
- package/dist/core/db/client.d.ts.map +1 -0
- package/dist/core/db/client.js +202 -0
- package/dist/core/db/client.js.map +1 -0
- package/dist/core/db/index.d.ts +11 -0
- package/dist/core/db/index.d.ts.map +1 -0
- package/dist/core/db/index.js +87 -0
- package/dist/core/db/index.js.map +1 -0
- package/dist/core/db/queries.d.ts +658 -0
- package/dist/core/db/queries.d.ts.map +1 -0
- package/dist/core/db/queries.js +735 -0
- package/dist/core/db/queries.js.map +1 -0
- package/dist/core/db/schema.d.ts +1628 -0
- package/dist/core/db/schema.d.ts.map +1 -0
- package/dist/core/db/schema.js +262 -0
- package/dist/core/db/schema.js.map +1 -0
- package/dist/core/index.d.ts +20 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +71 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/server/index.d.ts +17 -0
- package/dist/core/server/index.d.ts.map +1 -0
- package/dist/core/server/index.js +68 -0
- package/dist/core/server/index.js.map +1 -0
- package/dist/core/types.d.ts +230 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +9 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/utils.d.ts +153 -0
- package/dist/core/utils.d.ts.map +1 -0
- package/dist/core/utils.js +356 -0
- package/dist/core/utils.js.map +1 -0
- package/dist/emails/config.d.ts +42 -0
- package/dist/emails/config.d.ts.map +1 -0
- package/dist/emails/config.js +89 -0
- package/dist/emails/config.js.map +1 -0
- package/dist/emails/index.d.ts +85 -0
- package/dist/emails/index.d.ts.map +1 -0
- package/dist/emails/index.js +170 -0
- package/dist/emails/index.js.map +1 -0
- package/dist/emails/send/auth.d.ts +91 -0
- package/dist/emails/send/auth.d.ts.map +1 -0
- package/dist/emails/send/auth.js +132 -0
- package/dist/emails/send/auth.js.map +1 -0
- package/dist/emails/send/index.d.ts +10 -0
- package/dist/emails/send/index.d.ts.map +1 -0
- package/dist/emails/send/index.js +33 -0
- package/dist/emails/send/index.js.map +1 -0
- package/dist/emails/send/orders.d.ts +180 -0
- package/dist/emails/send/orders.d.ts.map +1 -0
- package/dist/emails/send/orders.js +259 -0
- package/dist/emails/send/orders.js.map +1 -0
- package/dist/emails/sender.d.ts +72 -0
- package/dist/emails/sender.d.ts.map +1 -0
- package/dist/emails/sender.js +118 -0
- package/dist/emails/sender.js.map +1 -0
- package/dist/emails/templates/base.d.ts +105 -0
- package/dist/emails/templates/base.d.ts.map +1 -0
- package/dist/emails/templates/base.js +291 -0
- package/dist/emails/templates/base.js.map +1 -0
- package/dist/emails/templates/email-verification.d.ts +28 -0
- package/dist/emails/templates/email-verification.d.ts.map +1 -0
- package/dist/emails/templates/email-verification.js +56 -0
- package/dist/emails/templates/email-verification.js.map +1 -0
- package/dist/emails/templates/index.d.ts +15 -0
- package/dist/emails/templates/index.d.ts.map +1 -0
- package/dist/emails/templates/index.js +58 -0
- package/dist/emails/templates/index.js.map +1 -0
- package/dist/emails/templates/order-cancelled.d.ts +30 -0
- package/dist/emails/templates/order-cancelled.d.ts.map +1 -0
- package/dist/emails/templates/order-cancelled.js +87 -0
- package/dist/emails/templates/order-cancelled.js.map +1 -0
- package/dist/emails/templates/order-confirmation.d.ts +36 -0
- package/dist/emails/templates/order-confirmation.d.ts.map +1 -0
- package/dist/emails/templates/order-confirmation.js +161 -0
- package/dist/emails/templates/order-confirmation.js.map +1 -0
- package/dist/emails/templates/order-delivered.d.ts +31 -0
- package/dist/emails/templates/order-delivered.d.ts.map +1 -0
- package/dist/emails/templates/order-delivered.js +95 -0
- package/dist/emails/templates/order-delivered.js.map +1 -0
- package/dist/emails/templates/order-shipped.d.ts +32 -0
- package/dist/emails/templates/order-shipped.d.ts.map +1 -0
- package/dist/emails/templates/order-shipped.js +87 -0
- package/dist/emails/templates/order-shipped.js.map +1 -0
- package/dist/emails/templates/password-reset.d.ts +27 -0
- package/dist/emails/templates/password-reset.d.ts.map +1 -0
- package/dist/emails/templates/password-reset.js +55 -0
- package/dist/emails/templates/password-reset.js.map +1 -0
- package/dist/emails/templates/refund-processed.d.ts +32 -0
- package/dist/emails/templates/refund-processed.d.ts.map +1 -0
- package/dist/emails/templates/refund-processed.js +96 -0
- package/dist/emails/templates/refund-processed.js.map +1 -0
- package/dist/emails/templates/welcome.d.ts +27 -0
- package/dist/emails/templates/welcome.d.ts.map +1 -0
- package/dist/emails/templates/welcome.js +56 -0
- package/dist/emails/templates/welcome.js.map +1 -0
- package/dist/emails/types.d.ts +202 -0
- package/dist/emails/types.d.ts.map +1 -0
- package/dist/emails/types.js +8 -0
- package/dist/emails/types.js.map +1 -0
- package/dist/emails/utils.d.ts +94 -0
- package/dist/emails/utils.d.ts.map +1 -0
- package/dist/emails/utils.js +229 -0
- package/dist/emails/utils.js.map +1 -0
- package/dist/index.d.ts +40 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +225 -0
- package/dist/index.js.map +1 -0
- package/dist/products/api/categories.d.ts +29 -0
- package/dist/products/api/categories.d.ts.map +1 -0
- package/dist/products/api/categories.js +49 -0
- package/dist/products/api/categories.js.map +1 -0
- package/dist/products/api/index.d.ts +24 -0
- package/dist/products/api/index.d.ts.map +1 -0
- package/dist/products/api/index.js +30 -0
- package/dist/products/api/index.js.map +1 -0
- package/dist/products/api/product.d.ts +36 -0
- package/dist/products/api/product.d.ts.map +1 -0
- package/dist/products/api/product.js +70 -0
- package/dist/products/api/product.js.map +1 -0
- package/dist/products/api/products.d.ts +41 -0
- package/dist/products/api/products.d.ts.map +1 -0
- package/dist/products/api/products.js +102 -0
- package/dist/products/api/products.js.map +1 -0
- package/dist/products/components/CategoryNav.d.ts +51 -0
- package/dist/products/components/CategoryNav.d.ts.map +1 -0
- package/dist/products/components/CategoryNav.js +115 -0
- package/dist/products/components/CategoryNav.js.map +1 -0
- package/dist/products/components/ProductBreadcrumb.d.ts +52 -0
- package/dist/products/components/ProductBreadcrumb.d.ts.map +1 -0
- package/dist/products/components/ProductBreadcrumb.js +78 -0
- package/dist/products/components/ProductBreadcrumb.js.map +1 -0
- package/dist/products/components/ProductCard.d.ts +54 -0
- package/dist/products/components/ProductCard.d.ts.map +1 -0
- package/dist/products/components/ProductCard.js +65 -0
- package/dist/products/components/ProductCard.js.map +1 -0
- package/dist/products/components/ProductDetails.d.ts +63 -0
- package/dist/products/components/ProductDetails.d.ts.map +1 -0
- package/dist/products/components/ProductDetails.js +105 -0
- package/dist/products/components/ProductDetails.js.map +1 -0
- package/dist/products/components/ProductFilters.d.ts +70 -0
- package/dist/products/components/ProductFilters.d.ts.map +1 -0
- package/dist/products/components/ProductFilters.js +127 -0
- package/dist/products/components/ProductFilters.js.map +1 -0
- package/dist/products/components/ProductGallery.d.ts +37 -0
- package/dist/products/components/ProductGallery.d.ts.map +1 -0
- package/dist/products/components/ProductGallery.js +80 -0
- package/dist/products/components/ProductGallery.js.map +1 -0
- package/dist/products/components/ProductGrid.d.ts +50 -0
- package/dist/products/components/ProductGrid.d.ts.map +1 -0
- package/dist/products/components/ProductGrid.js +83 -0
- package/dist/products/components/ProductGrid.js.map +1 -0
- package/dist/products/components/ProductSearch.d.ts +43 -0
- package/dist/products/components/ProductSearch.d.ts.map +1 -0
- package/dist/products/components/ProductSearch.js +99 -0
- package/dist/products/components/ProductSearch.js.map +1 -0
- package/dist/products/components/ProductSort.d.ts +43 -0
- package/dist/products/components/ProductSort.d.ts.map +1 -0
- package/dist/products/components/ProductSort.js +61 -0
- package/dist/products/components/ProductSort.js.map +1 -0
- package/dist/products/components/VariantSelector.d.ts +43 -0
- package/dist/products/components/VariantSelector.d.ts.map +1 -0
- package/dist/products/components/VariantSelector.js +147 -0
- package/dist/products/components/VariantSelector.js.map +1 -0
- package/dist/products/components/index.d.ts +26 -0
- package/dist/products/components/index.d.ts.map +1 -0
- package/dist/products/components/index.js +32 -0
- package/dist/products/components/index.js.map +1 -0
- package/dist/products/hooks/index.d.ts +14 -0
- package/dist/products/hooks/index.d.ts.map +1 -0
- package/dist/products/hooks/index.js +17 -0
- package/dist/products/hooks/index.js.map +1 -0
- package/dist/products/hooks/useCategories.d.ts +56 -0
- package/dist/products/hooks/useCategories.d.ts.map +1 -0
- package/dist/products/hooks/useCategories.js +126 -0
- package/dist/products/hooks/useCategories.js.map +1 -0
- package/dist/products/hooks/useProduct.d.ts +44 -0
- package/dist/products/hooks/useProduct.d.ts.map +1 -0
- package/dist/products/hooks/useProduct.js +86 -0
- package/dist/products/hooks/useProduct.js.map +1 -0
- package/dist/products/hooks/useProductAttributes.d.ts +59 -0
- package/dist/products/hooks/useProductAttributes.d.ts.map +1 -0
- package/dist/products/hooks/useProductAttributes.js +148 -0
- package/dist/products/hooks/useProductAttributes.js.map +1 -0
- package/dist/products/hooks/useProducts.d.ts +67 -0
- package/dist/products/hooks/useProducts.d.ts.map +1 -0
- package/dist/products/hooks/useProducts.js +132 -0
- package/dist/products/hooks/useProducts.js.map +1 -0
- package/dist/products/index.d.ts +94 -0
- package/dist/products/index.d.ts.map +1 -0
- package/dist/products/index.js +123 -0
- package/dist/products/index.js.map +1 -0
- package/dist/theme/ThemeProvider.d.ts +70 -0
- package/dist/theme/ThemeProvider.d.ts.map +1 -0
- package/dist/theme/ThemeProvider.js +77 -0
- package/dist/theme/ThemeProvider.js.map +1 -0
- package/dist/theme/colors.d.ts +148 -0
- package/dist/theme/colors.d.ts.map +1 -0
- package/dist/theme/colors.js +219 -0
- package/dist/theme/colors.js.map +1 -0
- package/dist/theme/defaults.d.ts +212 -0
- package/dist/theme/defaults.d.ts.map +1 -0
- package/dist/theme/defaults.js +278 -0
- package/dist/theme/defaults.js.map +1 -0
- package/dist/theme/fonts.d.ts +59 -0
- package/dist/theme/fonts.d.ts.map +1 -0
- package/dist/theme/fonts.js +202 -0
- package/dist/theme/fonts.js.map +1 -0
- package/dist/theme/generator.d.ts +50 -0
- package/dist/theme/generator.d.ts.map +1 -0
- package/dist/theme/generator.js +322 -0
- package/dist/theme/generator.js.map +1 -0
- package/dist/theme/hooks.d.ts +110 -0
- package/dist/theme/hooks.d.ts.map +1 -0
- package/dist/theme/hooks.js +106 -0
- package/dist/theme/hooks.js.map +1 -0
- package/dist/theme/index.d.ts +37 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +85 -0
- package/dist/theme/index.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.InventoryEditor = InventoryEditor;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
/**
|
|
7
|
+
* @rovela/sdk/admin/components/InventoryEditor
|
|
8
|
+
*
|
|
9
|
+
* Inline inventory editing for product variants.
|
|
10
|
+
*/
|
|
11
|
+
const react_1 = require("react");
|
|
12
|
+
const useAdminProducts_1 = require("../hooks/useAdminProducts");
|
|
13
|
+
// =============================================================================
|
|
14
|
+
// Component
|
|
15
|
+
// =============================================================================
|
|
16
|
+
/**
|
|
17
|
+
* Inline inventory editor for product variants.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```tsx
|
|
21
|
+
* <InventoryEditor
|
|
22
|
+
* productId="123"
|
|
23
|
+
* variants={product.variants}
|
|
24
|
+
* onUpdate={() => refetch()}
|
|
25
|
+
* />
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
function InventoryEditor({ productId, variants, onUpdate, className = '', }) {
|
|
29
|
+
const { updateVariant } = (0, useAdminProducts_1.useAdminProducts)();
|
|
30
|
+
const [editingId, setEditingId] = (0, react_1.useState)(null);
|
|
31
|
+
const [editValue, setEditValue] = (0, react_1.useState)(0);
|
|
32
|
+
const [isUpdating, setIsUpdating] = (0, react_1.useState)(false);
|
|
33
|
+
const handleStartEdit = (0, react_1.useCallback)((variantId, currentValue) => {
|
|
34
|
+
setEditingId(variantId);
|
|
35
|
+
setEditValue(currentValue);
|
|
36
|
+
}, []);
|
|
37
|
+
const handleCancelEdit = (0, react_1.useCallback)(() => {
|
|
38
|
+
setEditingId(null);
|
|
39
|
+
setEditValue(0);
|
|
40
|
+
}, []);
|
|
41
|
+
const handleSave = (0, react_1.useCallback)(async (variantId) => {
|
|
42
|
+
setIsUpdating(true);
|
|
43
|
+
try {
|
|
44
|
+
const result = await updateVariant(productId, variantId, {
|
|
45
|
+
inventory: editValue,
|
|
46
|
+
});
|
|
47
|
+
if (result.success) {
|
|
48
|
+
setEditingId(null);
|
|
49
|
+
onUpdate?.();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
setIsUpdating(false);
|
|
54
|
+
}
|
|
55
|
+
}, [productId, editValue, updateVariant, onUpdate]);
|
|
56
|
+
const handleKeyDown = (0, react_1.useCallback)((e, variantId) => {
|
|
57
|
+
if (e.key === 'Enter') {
|
|
58
|
+
handleSave(variantId);
|
|
59
|
+
}
|
|
60
|
+
else if (e.key === 'Escape') {
|
|
61
|
+
handleCancelEdit();
|
|
62
|
+
}
|
|
63
|
+
}, [handleSave, handleCancelEdit]);
|
|
64
|
+
if (!variants || variants.length === 0) {
|
|
65
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: `rounded-lg border border-border bg-card p-6 ${className}`, children: (0, jsx_runtime_1.jsx)("p", { className: "text-center text-muted-foreground", children: "No variants to manage inventory for." }) }));
|
|
66
|
+
}
|
|
67
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: `rounded-lg border border-border bg-card overflow-hidden ${className}`, children: [(0, jsx_runtime_1.jsxs)("div", { className: "border-b border-border px-6 py-4", children: [(0, jsx_runtime_1.jsx)("h3", { className: "text-lg font-medium text-foreground", children: "Inventory Management" }), (0, jsx_runtime_1.jsx)("p", { className: "mt-1 text-sm text-muted-foreground", children: "Click on inventory count to edit" })] }), (0, jsx_runtime_1.jsx)("div", { className: "overflow-x-auto", children: (0, jsx_runtime_1.jsxs)("table", { className: "w-full", children: [(0, jsx_runtime_1.jsx)("thead", { children: (0, jsx_runtime_1.jsxs)("tr", { className: "border-b border-border bg-muted/50 text-left text-xs font-medium uppercase text-muted-foreground", children: [(0, jsx_runtime_1.jsx)("th", { className: "px-6 py-3", children: "Variant" }), (0, jsx_runtime_1.jsx)("th", { className: "px-6 py-3", children: "SKU" }), (0, jsx_runtime_1.jsx)("th", { className: "px-6 py-3", children: "Price" }), (0, jsx_runtime_1.jsx)("th", { className: "px-6 py-3", children: "Inventory" }), (0, jsx_runtime_1.jsx)("th", { className: "px-6 py-3", children: "Status" })] }) }), (0, jsx_runtime_1.jsx)("tbody", { className: "divide-y divide-border", children: variants.map((variant) => {
|
|
68
|
+
const isEditing = editingId === variant.id;
|
|
69
|
+
const isLowStock = variant.inventory !== undefined && variant.inventory <= 10;
|
|
70
|
+
const isOutOfStock = variant.inventory === 0;
|
|
71
|
+
return ((0, jsx_runtime_1.jsxs)("tr", { className: "hover:bg-muted/50", children: [(0, jsx_runtime_1.jsxs)("td", { className: "px-6 py-4", children: [(0, jsx_runtime_1.jsx)("div", { className: "font-medium text-foreground", children: variant.name }), variant.attributes && Object.keys(variant.attributes).length > 0 && ((0, jsx_runtime_1.jsx)("div", { className: "mt-1 flex flex-wrap gap-1", children: Object.entries(variant.attributes).map(([key, value]) => ((0, jsx_runtime_1.jsxs)("span", { className: "rounded bg-muted px-1.5 py-0.5 text-xs text-muted-foreground", children: [key, ": ", value] }, key))) }))] }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4 text-sm text-muted-foreground", children: variant.sku || '—' }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4 text-sm text-foreground", children: variant.price
|
|
72
|
+
? new Intl.NumberFormat('en-US', {
|
|
73
|
+
style: 'currency',
|
|
74
|
+
currency: 'USD',
|
|
75
|
+
}).format(parseFloat(variant.price))
|
|
76
|
+
: '—' }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4", children: isEditing ? ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [(0, jsx_runtime_1.jsx)("input", { type: "number", min: "0", value: editValue, onChange: (e) => setEditValue(parseInt(e.target.value) || 0), onKeyDown: (e) => handleKeyDown(e, variant.id), autoFocus: true, disabled: isUpdating, className: "w-20 rounded-md border border-input bg-background px-2 py-1 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary disabled:opacity-50" }), (0, jsx_runtime_1.jsx)("button", { onClick: () => handleSave(variant.id), disabled: isUpdating, className: "rounded-md bg-primary px-2 py-1 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50", children: isUpdating ? '...' : 'Save' }), (0, jsx_runtime_1.jsx)("button", { onClick: handleCancelEdit, disabled: isUpdating, className: "rounded-md border border-border px-2 py-1 text-xs text-foreground hover:bg-accent disabled:opacity-50", children: "Cancel" })] })) : ((0, jsx_runtime_1.jsx)("button", { onClick: () => handleStartEdit(variant.id, variant.inventory ?? 0), className: "rounded-md border border-transparent px-2 py-1 text-sm font-medium text-foreground hover:border-border hover:bg-muted", children: variant.inventory ?? 0 })) }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4", children: (0, jsx_runtime_1.jsx)("span", { className: `inline-flex rounded-full px-2 py-1 text-xs font-medium ${isOutOfStock
|
|
77
|
+
? 'bg-red-100 text-red-800'
|
|
78
|
+
: isLowStock
|
|
79
|
+
? 'bg-amber-100 text-amber-800'
|
|
80
|
+
: 'bg-green-100 text-green-800'}`, children: isOutOfStock ? 'Out of stock' : isLowStock ? 'Low stock' : 'In stock' }) })] }, variant.id));
|
|
81
|
+
}) })] }) })] }));
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=InventoryEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InventoryEditor.js","sourceRoot":"","sources":["../../../src/admin/components/InventoryEditor.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAA;;AA4BZ,0CAuKC;;AAjMD;;;;GAIG;AAEH,iCAA6C;AAC7C,gEAA4D;AAG5D,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF;;;;;;;;;;;GAWG;AACH,SAAgB,eAAe,CAAC,EAC9B,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,SAAS,GAAG,EAAE,GACO;IACrB,MAAM,EAAE,aAAa,EAAE,GAAG,IAAA,mCAAgB,GAAE,CAAA;IAC5C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAgB,IAAI,CAAC,CAAA;IAC/D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAS,CAAC,CAAC,CAAA;IACrD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAA;IAEnD,MAAM,eAAe,GAAG,IAAA,mBAAW,EAAC,CAAC,SAAiB,EAAE,YAAoB,EAAE,EAAE;QAC9E,YAAY,CAAC,SAAS,CAAC,CAAA;QACvB,YAAY,CAAC,YAAY,CAAC,CAAA;IAC5B,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,gBAAgB,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QACxC,YAAY,CAAC,IAAI,CAAC,CAAA;QAClB,YAAY,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,UAAU,GAAG,IAAA,mBAAW,EAAC,KAAK,EAAE,SAAiB,EAAE,EAAE;QACzD,aAAa,CAAC,IAAI,CAAC,CAAA;QACnB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE;gBACvD,SAAS,EAAE,SAAS;aACO,CAAC,CAAA;YAE9B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,YAAY,CAAC,IAAI,CAAC,CAAA;gBAClB,QAAQ,EAAE,EAAE,CAAA;YACd,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,aAAa,CAAC,KAAK,CAAC,CAAA;QACtB,CAAC;IACH,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAA;IAEnD,MAAM,aAAa,GAAG,IAAA,mBAAW,EAAC,CAAC,CAAsB,EAAE,SAAiB,EAAE,EAAE;QAC9E,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;YACtB,UAAU,CAAC,SAAS,CAAC,CAAA;QACvB,CAAC;aAAM,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC9B,gBAAgB,EAAE,CAAA;QACpB,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAA;IAElC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,CACL,gCAAK,SAAS,EAAE,+CAA+C,SAAS,EAAE,YACxE,8BAAG,SAAS,EAAC,mCAAmC,qDAE5C,GACA,CACP,CAAA;IACH,CAAC;IAED,OAAO,CACL,iCAAK,SAAS,EAAE,2DAA2D,SAAS,EAAE,aACpF,iCAAK,SAAS,EAAC,kCAAkC,aAC/C,+BAAI,SAAS,EAAC,qCAAqC,qCAA0B,EAC7E,8BAAG,SAAS,EAAC,oCAAoC,iDAE7C,IACA,EAEN,gCAAK,SAAS,EAAC,iBAAiB,YAC9B,mCAAO,SAAS,EAAC,QAAQ,aACvB,4CACE,gCAAI,SAAS,EAAC,kGAAkG,aAC9G,+BAAI,SAAS,EAAC,WAAW,wBAAa,EACtC,+BAAI,SAAS,EAAC,WAAW,oBAAS,EAClC,+BAAI,SAAS,EAAC,WAAW,sBAAW,EACpC,+BAAI,SAAS,EAAC,WAAW,0BAAe,EACxC,+BAAI,SAAS,EAAC,WAAW,uBAAY,IAClC,GACC,EACR,kCAAO,SAAS,EAAC,wBAAwB,YACtC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;gCACxB,MAAM,SAAS,GAAG,SAAS,KAAK,OAAO,CAAC,EAAE,CAAA;gCAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,SAAS,IAAI,EAAE,CAAA;gCAC7E,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,KAAK,CAAC,CAAA;gCAE5C,OAAO,CACL,gCAAqB,SAAS,EAAC,mBAAmB,aAChD,gCAAI,SAAS,EAAC,WAAW,aACvB,gCAAK,SAAS,EAAC,6BAA6B,YAAE,OAAO,CAAC,IAAI,GAAO,EAChE,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CACnE,gCAAK,SAAS,EAAC,2BAA2B,YACvC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CACxD,kCAEE,SAAS,EAAC,8DAA8D,aAEvE,GAAG,QAAI,KAAK,KAHR,GAAG,CAIH,CACR,CAAC,GACE,CACP,IACE,EACL,+BAAI,SAAS,EAAC,yCAAyC,YACpD,OAAO,CAAC,GAAG,IAAI,GAAG,GAChB,EACL,+BAAI,SAAS,EAAC,mCAAmC,YAC9C,OAAO,CAAC,KAAK;gDACZ,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;oDAC7B,KAAK,EAAE,UAAU;oDACjB,QAAQ,EAAE,KAAK;iDAChB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gDACtC,CAAC,CAAC,GAAG,GACJ,EACL,+BAAI,SAAS,EAAC,WAAW,YACtB,SAAS,CAAC,CAAC,CAAC,CACX,iCAAK,SAAS,EAAC,yBAAyB,aACtC,kCACE,IAAI,EAAC,QAAQ,EACb,GAAG,EAAC,GAAG,EACP,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAC5D,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,EAC9C,SAAS,QACT,QAAQ,EAAE,UAAU,EACpB,SAAS,EAAC,iKAAiK,GAC3K,EACF,mCACE,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,EACrC,QAAQ,EAAE,UAAU,EACpB,SAAS,EAAC,qHAAqH,YAE9H,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GACrB,EACT,mCACE,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,UAAU,EACpB,SAAS,EAAC,uGAAuG,uBAG1G,IACL,CACP,CAAC,CAAC,CAAC,CACF,mCACE,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC,EAClE,SAAS,EAAC,uHAAuH,YAEhI,OAAO,CAAC,SAAS,IAAI,CAAC,GAChB,CACV,GACE,EACL,+BAAI,SAAS,EAAC,WAAW,YACvB,iCACE,SAAS,EAAE,0DACT,YAAY;oDACV,CAAC,CAAC,yBAAyB;oDAC3B,CAAC,CAAC,UAAU;wDACZ,CAAC,CAAC,6BAA6B;wDAC/B,CAAC,CAAC,6BACN,EAAE,YAED,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,GACjE,GACJ,KA5EE,OAAO,CAAC,EAAE,CA6Ed,CACN,CAAA;4BACH,CAAC,CAAC,GACI,IACF,GACJ,IACF,CACP,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { LowStockAlertProps } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Low stock alert widget for dashboard.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```tsx
|
|
7
|
+
* <LowStockAlert threshold={10} viewAllHref="/admin/products?filter=low-stock" />
|
|
8
|
+
* ```
|
|
9
|
+
*/
|
|
10
|
+
export declare function LowStockAlert({ threshold, viewAllHref, className, }: LowStockAlertProps): import("react/jsx-runtime").JSX.Element | null;
|
|
11
|
+
//# sourceMappingURL=LowStockAlert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LowStockAlert.d.ts","sourceRoot":"","sources":["../../../src/admin/components/LowStockAlert.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAMlD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,EAC5B,SAAc,EACd,WAA+B,EAC/B,SAAc,GACf,EAAE,kBAAkB,kDAiGpB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.LowStockAlert = LowStockAlert;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
/**
|
|
7
|
+
* @rovela/sdk/admin/components/LowStockAlert
|
|
8
|
+
*
|
|
9
|
+
* Low stock inventory warning widget.
|
|
10
|
+
*/
|
|
11
|
+
const useAdminStats_1 = require("../hooks/useAdminStats");
|
|
12
|
+
// =============================================================================
|
|
13
|
+
// Component
|
|
14
|
+
// =============================================================================
|
|
15
|
+
/**
|
|
16
|
+
* Low stock alert widget for dashboard.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```tsx
|
|
20
|
+
* <LowStockAlert threshold={10} viewAllHref="/admin/products?filter=low-stock" />
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
function LowStockAlert({ threshold = 10, viewAllHref = '/admin/products', className = '', }) {
|
|
24
|
+
const { lowStock, isLoading } = (0, useAdminStats_1.useAdminStats)({
|
|
25
|
+
lowStockThreshold: threshold,
|
|
26
|
+
});
|
|
27
|
+
// Don't show if no low stock items
|
|
28
|
+
if (!isLoading && lowStock.length === 0) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: `rounded-lg border border-border bg-card ${className}`, children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between border-b border-border px-6 py-4", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [(0, jsx_runtime_1.jsx)("svg", { className: "h-5 w-5 text-amber-500", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" }) }), (0, jsx_runtime_1.jsx)("h3", { className: "text-lg font-medium text-foreground", children: "Low Stock Alert" }), !isLoading && ((0, jsx_runtime_1.jsxs)("span", { className: "rounded-full bg-amber-100 px-2 py-0.5 text-xs font-medium text-amber-800", children: [lowStock.length, " item", lowStock.length !== 1 ? 's' : ''] }))] }), (0, jsx_runtime_1.jsx)("a", { href: viewAllHref, className: "text-sm text-primary hover:underline", children: "View all" })] }), (0, jsx_runtime_1.jsx)("div", { className: "divide-y divide-border", children: isLoading ? ((0, jsx_runtime_1.jsx)("div", { className: "p-6", children: (0, jsx_runtime_1.jsx)("div", { className: "space-y-4", children: [...Array(3)].map((_, i) => ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { className: "space-y-2", children: [(0, jsx_runtime_1.jsx)("div", { className: "h-4 w-32 animate-pulse rounded bg-muted" }), (0, jsx_runtime_1.jsx)("div", { className: "h-3 w-20 animate-pulse rounded bg-muted" })] }), (0, jsx_runtime_1.jsx)("div", { className: "h-6 w-16 animate-pulse rounded bg-muted" })] }, i))) }) })) : (lowStock.slice(0, 5).map((item) => ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between px-6 py-4 hover:bg-muted/50", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("a", { href: `/admin/products/${item.productId}`, className: "font-medium text-foreground hover:text-primary", children: item.productName }), (0, jsx_runtime_1.jsx)("p", { className: "text-sm text-muted-foreground", children: item.variantName })] }), (0, jsx_runtime_1.jsx)("div", { className: "flex items-center gap-2", children: (0, jsx_runtime_1.jsx)("span", { className: `rounded-full px-2 py-1 text-xs font-medium ${item.inventory === 0
|
|
32
|
+
? 'bg-red-100 text-red-800'
|
|
33
|
+
: 'bg-amber-100 text-amber-800'}`, children: item.inventory === 0 ? 'Out of stock' : `${item.inventory} left` }) })] }, item.variantId)))) }), !isLoading && lowStock.length > 5 && ((0, jsx_runtime_1.jsx)("div", { className: "border-t border-border px-6 py-3 text-center", children: (0, jsx_runtime_1.jsxs)("a", { href: viewAllHref, className: "text-sm text-primary hover:underline", children: ["+", lowStock.length - 5, " more items"] }) }))] }));
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=LowStockAlert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LowStockAlert.js","sourceRoot":"","sources":["../../../src/admin/components/LowStockAlert.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { OrderDetailsProps } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Order details view with items and actions.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```tsx
|
|
7
|
+
* <OrderDetails
|
|
8
|
+
* orderId="123"
|
|
9
|
+
* onRefund={() => setShowRefundDialog(true)}
|
|
10
|
+
* />
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export declare function OrderDetails({ orderId, onRefund, onBack, className, }: OrderDetailsProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=OrderDetails.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrderDetails.d.ts","sourceRoot":"","sources":["../../../src/admin/components/OrderDetails.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,iBAAiB,EAAoB,MAAM,UAAU,CAAA;AAiCnE;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAc,GACf,EAAE,iBAAiB,2CA0PnB"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.OrderDetails = OrderDetails;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
/**
|
|
7
|
+
* @rovela/sdk/admin/components/OrderDetails
|
|
8
|
+
*
|
|
9
|
+
* Full order details view with items, addresses, and actions.
|
|
10
|
+
*/
|
|
11
|
+
const react_1 = require("react");
|
|
12
|
+
const useAdminOrders_1 = require("../hooks/useAdminOrders");
|
|
13
|
+
// =============================================================================
|
|
14
|
+
// Status Badge
|
|
15
|
+
// =============================================================================
|
|
16
|
+
function StatusBadge({ status }) {
|
|
17
|
+
const statusStyles = {
|
|
18
|
+
pending: 'bg-yellow-100 text-yellow-800',
|
|
19
|
+
paid: 'bg-green-100 text-green-800',
|
|
20
|
+
shipped: 'bg-blue-100 text-blue-800',
|
|
21
|
+
delivered: 'bg-green-100 text-green-800',
|
|
22
|
+
cancelled: 'bg-red-100 text-red-800',
|
|
23
|
+
refunded: 'bg-gray-100 text-gray-800',
|
|
24
|
+
};
|
|
25
|
+
return ((0, jsx_runtime_1.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
|
+
}
|
|
27
|
+
// =============================================================================
|
|
28
|
+
// Component
|
|
29
|
+
// =============================================================================
|
|
30
|
+
/**
|
|
31
|
+
* Order details view with items and actions.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```tsx
|
|
35
|
+
* <OrderDetails
|
|
36
|
+
* orderId="123"
|
|
37
|
+
* onRefund={() => setShowRefundDialog(true)}
|
|
38
|
+
* />
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
function OrderDetails({ orderId, onRefund, onBack, className = '', }) {
|
|
42
|
+
const { getOrder, updateStatus } = (0, useAdminOrders_1.useAdminOrders)();
|
|
43
|
+
const [order, setOrder] = (0, react_1.useState)(null);
|
|
44
|
+
const [isLoading, setIsLoading] = (0, react_1.useState)(true);
|
|
45
|
+
const [isUpdating, setIsUpdating] = (0, react_1.useState)(false);
|
|
46
|
+
(0, react_1.useEffect)(() => {
|
|
47
|
+
if (orderId) {
|
|
48
|
+
setIsLoading(true);
|
|
49
|
+
getOrder(orderId).then((data) => {
|
|
50
|
+
setOrder(data);
|
|
51
|
+
setIsLoading(false);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}, [orderId, getOrder]);
|
|
55
|
+
const handleStatusChange = (0, react_1.useCallback)(async (newStatus) => {
|
|
56
|
+
if (!order)
|
|
57
|
+
return;
|
|
58
|
+
setIsUpdating(true);
|
|
59
|
+
const success = await updateStatus(order.id, newStatus);
|
|
60
|
+
if (success) {
|
|
61
|
+
setOrder((prev) => prev ? { ...prev, status: newStatus } : null);
|
|
62
|
+
}
|
|
63
|
+
setIsUpdating(false);
|
|
64
|
+
}, [order, updateStatus]);
|
|
65
|
+
const formatDate = (dateString) => {
|
|
66
|
+
return new Date(dateString).toLocaleDateString('en-US', {
|
|
67
|
+
weekday: 'long',
|
|
68
|
+
year: 'numeric',
|
|
69
|
+
month: 'long',
|
|
70
|
+
day: 'numeric',
|
|
71
|
+
hour: '2-digit',
|
|
72
|
+
minute: '2-digit',
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
const formatCurrency = (value) => {
|
|
76
|
+
const numValue = typeof value === 'string' ? parseFloat(value) : value;
|
|
77
|
+
return new Intl.NumberFormat('en-US', {
|
|
78
|
+
style: 'currency',
|
|
79
|
+
currency: 'USD',
|
|
80
|
+
}).format(numValue);
|
|
81
|
+
};
|
|
82
|
+
if (isLoading) {
|
|
83
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: `space-y-6 ${className}`, children: [(0, jsx_runtime_1.jsx)("div", { className: "h-8 w-48 animate-pulse rounded bg-muted" }), (0, jsx_runtime_1.jsx)("div", { className: "rounded-lg border border-border bg-card p-6", children: (0, jsx_runtime_1.jsx)("div", { className: "space-y-4", children: [...Array(4)].map((_, i) => ((0, jsx_runtime_1.jsx)("div", { className: "h-6 w-full animate-pulse rounded bg-muted" }, i))) }) })] }));
|
|
84
|
+
}
|
|
85
|
+
if (!order) {
|
|
86
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: `rounded-lg border border-border bg-card p-12 text-center ${className}`, children: [(0, jsx_runtime_1.jsx)("p", { className: "text-muted-foreground", children: "Order not found" }), onBack && ((0, jsx_runtime_1.jsx)("button", { onClick: onBack, className: "mt-4 text-sm text-primary hover:underline", children: "Go back" }))] }));
|
|
87
|
+
}
|
|
88
|
+
const canRefund = order.status === 'paid' || order.status === 'shipped' || order.status === 'delivered';
|
|
89
|
+
const canUpdateStatus = order.status !== 'refunded' && order.status !== 'cancelled';
|
|
90
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: `space-y-6 ${className}`, children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-4", children: [onBack && ((0, jsx_runtime_1.jsx)("button", { onClick: onBack, className: "rounded-md border border-border p-2 hover:bg-accent", children: (0, jsx_runtime_1.jsx)("svg", { className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }) }) })), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("h1", { className: "text-2xl font-semibold text-foreground", children: ["Order #", order.id.slice(-8).toUpperCase()] }), (0, jsx_runtime_1.jsxs)("p", { className: "text-sm text-muted-foreground", children: ["Placed on ", formatDate(order.createdAt)] })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3", children: [(0, jsx_runtime_1.jsx)(StatusBadge, { status: order.status }), canRefund && onRefund && ((0, jsx_runtime_1.jsx)("button", { onClick: () => onRefund(order.id), className: "rounded-md border border-destructive px-3 py-1.5 text-sm text-destructive hover:bg-destructive/10", children: "Refund" }))] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "grid gap-6 lg:grid-cols-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "lg:col-span-2 space-y-6", children: [(0, jsx_runtime_1.jsxs)("div", { className: "rounded-lg border border-border bg-card", children: [(0, jsx_runtime_1.jsx)("div", { className: "border-b border-border px-6 py-4", children: (0, jsx_runtime_1.jsx)("h2", { className: "font-medium text-foreground", children: "Order Items" }) }), (0, jsx_runtime_1.jsx)("div", { className: "divide-y divide-border", children: order.items?.map((item, index) => ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-4 px-6 py-4", children: [(0, jsx_runtime_1.jsx)("div", { className: "flex h-16 w-16 items-center justify-center rounded bg-muted text-muted-foreground", children: (0, jsx_runtime_1.jsx)("svg", { className: "h-6 w-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4" }) }) }), (0, jsx_runtime_1.jsxs)("div", { className: "flex-1", children: [(0, jsx_runtime_1.jsx)("p", { className: "font-medium text-foreground", children: item.name }), item.attributes && Object.keys(item.attributes).length > 0 && ((0, jsx_runtime_1.jsx)("p", { className: "text-sm text-muted-foreground", children: Object.entries(item.attributes).map(([k, v]) => `${k}: ${v}`).join(', ') }))] }), (0, jsx_runtime_1.jsxs)("div", { className: "text-right", children: [(0, jsx_runtime_1.jsx)("p", { className: "font-medium text-foreground", children: formatCurrency(item.price) }), (0, jsx_runtime_1.jsxs)("p", { className: "text-sm text-muted-foreground", children: ["Qty: ", item.quantity] })] })] }, index))) })] }), canUpdateStatus && ((0, jsx_runtime_1.jsxs)("div", { className: "rounded-lg border border-border bg-card p-6", children: [(0, jsx_runtime_1.jsx)("h2", { className: "mb-4 font-medium text-foreground", children: "Update Status" }), (0, jsx_runtime_1.jsx)("div", { className: "flex flex-wrap gap-2", children: ['pending', 'paid', 'shipped', 'delivered', 'cancelled'].map((s) => ((0, jsx_runtime_1.jsx)("button", { onClick: () => handleStatusChange(s), disabled: isUpdating || order.status === s, className: `rounded-md px-3 py-1.5 text-sm font-medium transition-colors ${order.status === s
|
|
91
|
+
? 'bg-primary text-primary-foreground'
|
|
92
|
+
: 'border border-border hover:bg-accent'} disabled:opacity-50`, children: s.charAt(0).toUpperCase() + s.slice(1) }, s))) })] }))] }), (0, jsx_runtime_1.jsxs)("div", { className: "space-y-6", children: [(0, jsx_runtime_1.jsxs)("div", { className: "rounded-lg border border-border bg-card p-6", children: [(0, jsx_runtime_1.jsx)("h2", { className: "mb-4 font-medium text-foreground", children: "Order Summary" }), (0, jsx_runtime_1.jsxs)("div", { className: "space-y-2 text-sm", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-muted-foreground", children: "Subtotal" }), (0, jsx_runtime_1.jsx)("span", { className: "text-foreground", children: formatCurrency(order.subtotal) })] }), order.tax && parseFloat(order.tax) > 0 && ((0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-muted-foreground", children: "Tax" }), (0, jsx_runtime_1.jsx)("span", { className: "text-foreground", children: formatCurrency(order.tax) })] })), order.shipping && parseFloat(order.shipping) > 0 && ((0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-muted-foreground", children: "Shipping" }), (0, jsx_runtime_1.jsx)("span", { className: "text-foreground", children: formatCurrency(order.shipping) })] })), (0, jsx_runtime_1.jsx)("div", { className: "border-t border-border pt-2", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between font-medium", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-foreground", children: "Total" }), (0, jsx_runtime_1.jsx)("span", { className: "text-foreground", children: formatCurrency(order.total) })] }) })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "rounded-lg border border-border bg-card p-6", children: [(0, jsx_runtime_1.jsx)("h2", { className: "mb-4 font-medium text-foreground", children: "Customer" }), (0, jsx_runtime_1.jsxs)("div", { className: "space-y-2 text-sm", children: [(0, jsx_runtime_1.jsx)("p", { className: "text-foreground", children: order.email }), order.customerId && ((0, jsx_runtime_1.jsx)("a", { href: `/admin/customers/${order.customerId}`, className: "text-primary hover:underline", children: "View customer profile" }))] })] }), order.shippingAddress && ((0, jsx_runtime_1.jsxs)("div", { className: "rounded-lg border border-border bg-card p-6", children: [(0, jsx_runtime_1.jsx)("h2", { className: "mb-4 font-medium text-foreground", children: "Shipping Address" }), (0, jsx_runtime_1.jsxs)("div", { className: "space-y-1 text-sm text-muted-foreground", children: [(0, jsx_runtime_1.jsx)("p", { children: order.shippingAddress.name }), (0, jsx_runtime_1.jsx)("p", { children: order.shippingAddress.line1 }), order.shippingAddress.line2 && (0, jsx_runtime_1.jsx)("p", { children: order.shippingAddress.line2 }), (0, jsx_runtime_1.jsxs)("p", { children: [order.shippingAddress.city, ", ", order.shippingAddress.state, " ", order.shippingAddress.postalCode] }), (0, jsx_runtime_1.jsx)("p", { children: order.shippingAddress.country })] })] })), order.stripePaymentIntentId && ((0, jsx_runtime_1.jsxs)("div", { className: "rounded-lg border border-border bg-card p-6", children: [(0, jsx_runtime_1.jsx)("h2", { className: "mb-4 font-medium text-foreground", children: "Payment" }), (0, jsx_runtime_1.jsx)("div", { className: "space-y-2 text-sm", children: (0, jsx_runtime_1.jsxs)("p", { className: "text-muted-foreground", children: ["Payment Intent: ", order.stripePaymentIntentId.slice(-8)] }) })] }))] })] })] }));
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=OrderDetails.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrderDetails.js","sourceRoot":"","sources":["../../../src/admin/components/OrderDetails.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { OrderTableProps } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Orders data table with filters and pagination.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```tsx
|
|
7
|
+
* <OrderTable
|
|
8
|
+
* onOrderClick={(id) => router.push(`/admin/orders/${id}`)}
|
|
9
|
+
* />
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
12
|
+
export declare function OrderTable({ initialSearch, initialStatus, pageSize, onOrderClick, className, }: OrderTableProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
//# sourceMappingURL=OrderTable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrderTable.d.ts","sourceRoot":"","sources":["../../../src/admin/components/OrderTable.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAsB,MAAM,UAAU,CAAA;AAsCnE;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,EACzB,aAAa,EACb,aAAa,EACb,QAAa,EACb,YAAY,EACZ,SAAc,GACf,EAAE,eAAe,2CAsNjB"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.OrderTable = OrderTable;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
/**
|
|
7
|
+
* @rovela/sdk/admin/components/OrderTable
|
|
8
|
+
*
|
|
9
|
+
* Orders data table with filtering, sorting, and pagination.
|
|
10
|
+
*/
|
|
11
|
+
const react_1 = require("react");
|
|
12
|
+
const useAdminOrders_1 = require("../hooks/useAdminOrders");
|
|
13
|
+
// =============================================================================
|
|
14
|
+
// Status Badge
|
|
15
|
+
// =============================================================================
|
|
16
|
+
function StatusBadge({ status }) {
|
|
17
|
+
const statusStyles = {
|
|
18
|
+
pending: 'bg-yellow-100 text-yellow-800',
|
|
19
|
+
paid: 'bg-green-100 text-green-800',
|
|
20
|
+
shipped: 'bg-blue-100 text-blue-800',
|
|
21
|
+
delivered: 'bg-green-100 text-green-800',
|
|
22
|
+
cancelled: 'bg-red-100 text-red-800',
|
|
23
|
+
refunded: 'bg-gray-100 text-gray-800',
|
|
24
|
+
};
|
|
25
|
+
return ((0, jsx_runtime_1.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
|
+
}
|
|
27
|
+
// =============================================================================
|
|
28
|
+
// Component
|
|
29
|
+
// =============================================================================
|
|
30
|
+
/**
|
|
31
|
+
* Orders data table with filters and pagination.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```tsx
|
|
35
|
+
* <OrderTable
|
|
36
|
+
* onOrderClick={(id) => router.push(`/admin/orders/${id}`)}
|
|
37
|
+
* />
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
function OrderTable({ initialSearch, initialStatus, pageSize = 20, onOrderClick, className = '', }) {
|
|
41
|
+
const { orders, total, page, isLoading, fetchOrders, updateStatus } = (0, useAdminOrders_1.useAdminOrders)();
|
|
42
|
+
const [search, setSearch] = (0, react_1.useState)(initialSearch || '');
|
|
43
|
+
const [status, setStatus] = (0, react_1.useState)(initialStatus || '');
|
|
44
|
+
const [sort, setSort] = (0, react_1.useState)('newest');
|
|
45
|
+
// Fetch orders on filter change
|
|
46
|
+
(0, react_1.useEffect)(() => {
|
|
47
|
+
fetchOrders({
|
|
48
|
+
search: search || undefined,
|
|
49
|
+
status: status || undefined,
|
|
50
|
+
sort,
|
|
51
|
+
page: 1,
|
|
52
|
+
limit: pageSize,
|
|
53
|
+
});
|
|
54
|
+
}, [search, status, sort, pageSize, fetchOrders]);
|
|
55
|
+
const handlePageChange = (0, react_1.useCallback)((newPage) => {
|
|
56
|
+
fetchOrders({
|
|
57
|
+
search: search || undefined,
|
|
58
|
+
status: status || undefined,
|
|
59
|
+
sort,
|
|
60
|
+
page: newPage,
|
|
61
|
+
limit: pageSize,
|
|
62
|
+
});
|
|
63
|
+
}, [search, status, sort, pageSize, fetchOrders]);
|
|
64
|
+
const handleStatusChange = (0, react_1.useCallback)(async (orderId, newStatus) => {
|
|
65
|
+
const success = await updateStatus(orderId, newStatus);
|
|
66
|
+
if (success) {
|
|
67
|
+
fetchOrders({ search, status: status || undefined, sort, page, limit: pageSize });
|
|
68
|
+
}
|
|
69
|
+
}, [updateStatus, fetchOrders, search, status, sort, page, pageSize]);
|
|
70
|
+
const formatDate = (dateString) => {
|
|
71
|
+
const date = new Date(dateString);
|
|
72
|
+
return date.toLocaleDateString('en-US', {
|
|
73
|
+
month: 'short',
|
|
74
|
+
day: 'numeric',
|
|
75
|
+
year: 'numeric',
|
|
76
|
+
hour: '2-digit',
|
|
77
|
+
minute: '2-digit',
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
const formatCurrency = (value) => {
|
|
81
|
+
return new Intl.NumberFormat('en-US', {
|
|
82
|
+
style: 'currency',
|
|
83
|
+
currency: 'USD',
|
|
84
|
+
}).format(parseFloat(value));
|
|
85
|
+
};
|
|
86
|
+
const totalPages = Math.ceil(total / pageSize);
|
|
87
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: `space-y-4 ${className}`, children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex flex-wrap gap-4", children: [(0, jsx_runtime_1.jsx)("div", { className: "flex-1", children: (0, jsx_runtime_1.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" }) }), (0, jsx_runtime_1.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: [(0, jsx_runtime_1.jsx)("option", { value: "", children: "All Status" }), (0, jsx_runtime_1.jsx)("option", { value: "pending", children: "Pending" }), (0, jsx_runtime_1.jsx)("option", { value: "paid", children: "Paid" }), (0, jsx_runtime_1.jsx)("option", { value: "shipped", children: "Shipped" }), (0, jsx_runtime_1.jsx)("option", { value: "delivered", children: "Delivered" }), (0, jsx_runtime_1.jsx)("option", { value: "cancelled", children: "Cancelled" }), (0, jsx_runtime_1.jsx)("option", { value: "refunded", children: "Refunded" })] }), (0, jsx_runtime_1.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: [(0, jsx_runtime_1.jsx)("option", { value: "newest", children: "Newest First" }), (0, jsx_runtime_1.jsx)("option", { value: "oldest", children: "Oldest First" }), (0, jsx_runtime_1.jsx)("option", { value: "total-desc", children: "Highest Total" }), (0, jsx_runtime_1.jsx)("option", { value: "total-asc", children: "Lowest Total" })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "rounded-lg border border-border bg-card overflow-hidden", children: [(0, jsx_runtime_1.jsx)("div", { className: "overflow-x-auto", children: (0, jsx_runtime_1.jsxs)("table", { className: "w-full", children: [(0, jsx_runtime_1.jsx)("thead", { children: (0, jsx_runtime_1.jsxs)("tr", { className: "border-b border-border bg-muted/50 text-left text-xs font-medium uppercase text-muted-foreground", children: [(0, jsx_runtime_1.jsx)("th", { className: "px-6 py-3", children: "Order" }), (0, jsx_runtime_1.jsx)("th", { className: "px-6 py-3", children: "Customer" }), (0, jsx_runtime_1.jsx)("th", { className: "px-6 py-3", children: "Status" }), (0, jsx_runtime_1.jsx)("th", { className: "px-6 py-3", children: "Total" }), (0, jsx_runtime_1.jsx)("th", { className: "px-6 py-3", children: "Date" }), (0, jsx_runtime_1.jsx)("th", { className: "px-6 py-3", children: "Actions" })] }) }), (0, jsx_runtime_1.jsx)("tbody", { className: "divide-y divide-border", children: isLoading ? ([...Array(5)].map((_, i) => ((0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4", children: (0, jsx_runtime_1.jsx)("div", { className: "h-4 w-24 animate-pulse rounded bg-muted" }) }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4", children: (0, jsx_runtime_1.jsx)("div", { className: "h-4 w-32 animate-pulse rounded bg-muted" }) }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4", children: (0, jsx_runtime_1.jsx)("div", { className: "h-6 w-16 animate-pulse rounded bg-muted" }) }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4", children: (0, jsx_runtime_1.jsx)("div", { className: "h-4 w-20 animate-pulse rounded bg-muted" }) }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4", children: (0, jsx_runtime_1.jsx)("div", { className: "h-4 w-28 animate-pulse rounded bg-muted" }) }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4", children: (0, jsx_runtime_1.jsx)("div", { className: "h-4 w-20 animate-pulse rounded bg-muted" }) })] }, i)))) : orders.length === 0 ? ((0, jsx_runtime_1.jsx)("tr", { children: (0, jsx_runtime_1.jsx)("td", { colSpan: 6, className: "px-6 py-12 text-center text-muted-foreground", children: "No orders found" }) })) : (orders.map((order) => ((0, jsx_runtime_1.jsxs)("tr", { className: "hover:bg-muted/50", children: [(0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4", children: (0, jsx_runtime_1.jsxs)("button", { onClick: () => onOrderClick?.(order.id), className: "font-medium text-primary hover:underline", children: ["#", order.id.slice(-8).toUpperCase()] }) }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4 text-sm text-foreground", children: order.email }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4", children: (0, jsx_runtime_1.jsx)(StatusBadge, { status: order.status }) }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4 text-sm font-medium text-foreground", children: formatCurrency(order.total) }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4 text-sm text-muted-foreground", children: formatDate(order.createdAt) }), (0, jsx_runtime_1.jsx)("td", { className: "px-6 py-4", children: (0, jsx_runtime_1.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: [(0, jsx_runtime_1.jsx)("option", { value: "pending", children: "Pending" }), (0, jsx_runtime_1.jsx)("option", { value: "paid", children: "Paid" }), (0, jsx_runtime_1.jsx)("option", { value: "shipped", children: "Shipped" }), (0, jsx_runtime_1.jsx)("option", { value: "delivered", children: "Delivered" }), (0, jsx_runtime_1.jsx)("option", { value: "cancelled", children: "Cancelled" }), (0, jsx_runtime_1.jsx)("option", { value: "refunded", disabled: true, children: "Refunded" })] }) })] }, order.id)))) })] }) }), totalPages > 1 && ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between border-t border-border px-6 py-3", children: [(0, jsx_runtime_1.jsxs)("p", { className: "text-sm text-muted-foreground", children: ["Showing ", (page - 1) * pageSize + 1, " to ", Math.min(page * pageSize, total), " of ", total] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex gap-2", children: [(0, jsx_runtime_1.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" }), (0, jsx_runtime_1.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
|
+
}
|
|
89
|
+
//# sourceMappingURL=OrderTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrderTable.js","sourceRoot":"","sources":["../../../src/admin/components/OrderTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ProductFormProps } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Product form for create and edit.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```tsx
|
|
7
|
+
* // Create mode
|
|
8
|
+
* <ProductForm onSuccess={(id) => router.push(`/admin/products/${id}`)} />
|
|
9
|
+
*
|
|
10
|
+
* // Edit mode
|
|
11
|
+
* <ProductForm
|
|
12
|
+
* productId="123"
|
|
13
|
+
* onSuccess={() => router.push('/admin/products')}
|
|
14
|
+
* />
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export declare function ProductForm({ productId, initialData, onSuccess, onCancel, className, }: ProductFormProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
//# sourceMappingURL=ProductForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProductForm.d.ts","sourceRoot":"","sources":["../../../src/admin/components/ProductForm.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAmB,MAAM,UAAU,CAAA;AAMjE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAc,GACf,EAAE,gBAAgB,2CA+SlB"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.ProductForm = ProductForm;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
/**
|
|
7
|
+
* @rovela/sdk/admin/components/ProductForm
|
|
8
|
+
*
|
|
9
|
+
* Product create/edit form.
|
|
10
|
+
*/
|
|
11
|
+
const react_1 = require("react");
|
|
12
|
+
const useAdminProducts_1 = require("../hooks/useAdminProducts");
|
|
13
|
+
// =============================================================================
|
|
14
|
+
// Component
|
|
15
|
+
// =============================================================================
|
|
16
|
+
/**
|
|
17
|
+
* Product form for create and edit.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```tsx
|
|
21
|
+
* // Create mode
|
|
22
|
+
* <ProductForm onSuccess={(id) => router.push(`/admin/products/${id}`)} />
|
|
23
|
+
*
|
|
24
|
+
* // Edit mode
|
|
25
|
+
* <ProductForm
|
|
26
|
+
* productId="123"
|
|
27
|
+
* onSuccess={() => router.push('/admin/products')}
|
|
28
|
+
* />
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
function ProductForm({ productId, initialData, onSuccess, onCancel, className = '', }) {
|
|
32
|
+
const { getProduct, createProduct, updateProduct } = (0, useAdminProducts_1.useAdminProducts)();
|
|
33
|
+
const isEditMode = !!productId;
|
|
34
|
+
const [formData, setFormData] = (0, react_1.useState)({
|
|
35
|
+
name: initialData?.name || '',
|
|
36
|
+
slug: initialData?.slug || '',
|
|
37
|
+
description: initialData?.description || '',
|
|
38
|
+
price: initialData?.price || 0,
|
|
39
|
+
comparePrice: initialData?.comparePrice,
|
|
40
|
+
images: initialData?.images || [],
|
|
41
|
+
status: initialData?.status || 'draft',
|
|
42
|
+
categoryId: initialData?.categoryId,
|
|
43
|
+
hasVariants: initialData?.hasVariants || false,
|
|
44
|
+
metaTitle: initialData?.metaTitle,
|
|
45
|
+
metaDescription: initialData?.metaDescription,
|
|
46
|
+
metaKeywords: initialData?.metaKeywords || [],
|
|
47
|
+
});
|
|
48
|
+
const [imageUrl, setImageUrl] = (0, react_1.useState)('');
|
|
49
|
+
const [isLoading, setIsLoading] = (0, react_1.useState)(false);
|
|
50
|
+
const [isFetching, setIsFetching] = (0, react_1.useState)(false);
|
|
51
|
+
const [error, setError] = (0, react_1.useState)(null);
|
|
52
|
+
// Load product data in edit mode
|
|
53
|
+
(0, react_1.useEffect)(() => {
|
|
54
|
+
if (productId && !initialData) {
|
|
55
|
+
setIsFetching(true);
|
|
56
|
+
getProduct(productId).then((product) => {
|
|
57
|
+
if (product) {
|
|
58
|
+
const p = product;
|
|
59
|
+
setFormData({
|
|
60
|
+
name: p.name,
|
|
61
|
+
slug: p.slug,
|
|
62
|
+
description: p.description,
|
|
63
|
+
price: parseFloat(p.price),
|
|
64
|
+
comparePrice: p.comparePrice ? parseFloat(p.comparePrice) : undefined,
|
|
65
|
+
images: p.images || [],
|
|
66
|
+
status: p.status,
|
|
67
|
+
categoryId: p.categoryId || undefined,
|
|
68
|
+
hasVariants: p.hasVariants,
|
|
69
|
+
metaTitle: p.metaTitle || undefined,
|
|
70
|
+
metaDescription: p.metaDescription || undefined,
|
|
71
|
+
metaKeywords: p.metaKeywords || [],
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
setIsFetching(false);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}, [productId, initialData, getProduct]);
|
|
78
|
+
const handleChange = (0, react_1.useCallback)((e) => {
|
|
79
|
+
const { name, value, type } = e.target;
|
|
80
|
+
setFormData((prev) => ({
|
|
81
|
+
...prev,
|
|
82
|
+
[name]: type === 'number' ? (value ? parseFloat(value) : 0) : value,
|
|
83
|
+
}));
|
|
84
|
+
}, []);
|
|
85
|
+
const handleAddImage = (0, react_1.useCallback)(() => {
|
|
86
|
+
if (imageUrl.trim()) {
|
|
87
|
+
setFormData((prev) => ({
|
|
88
|
+
...prev,
|
|
89
|
+
images: [...prev.images, imageUrl.trim()],
|
|
90
|
+
}));
|
|
91
|
+
setImageUrl('');
|
|
92
|
+
}
|
|
93
|
+
}, [imageUrl]);
|
|
94
|
+
const handleRemoveImage = (0, react_1.useCallback)((index) => {
|
|
95
|
+
setFormData((prev) => ({
|
|
96
|
+
...prev,
|
|
97
|
+
images: prev.images.filter((_, i) => i !== index),
|
|
98
|
+
}));
|
|
99
|
+
}, []);
|
|
100
|
+
const handleSubmit = (0, react_1.useCallback)(async (e) => {
|
|
101
|
+
e.preventDefault();
|
|
102
|
+
setError(null);
|
|
103
|
+
setIsLoading(true);
|
|
104
|
+
try {
|
|
105
|
+
const result = isEditMode
|
|
106
|
+
? await updateProduct(productId, formData)
|
|
107
|
+
: await createProduct(formData);
|
|
108
|
+
if (!result.success) {
|
|
109
|
+
setError(result.error || 'Failed to save product');
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const savedProduct = result.data;
|
|
113
|
+
onSuccess?.(savedProduct.id);
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
setError('An unexpected error occurred');
|
|
117
|
+
}
|
|
118
|
+
finally {
|
|
119
|
+
setIsLoading(false);
|
|
120
|
+
}
|
|
121
|
+
}, [isEditMode, productId, formData, createProduct, updateProduct, onSuccess]);
|
|
122
|
+
if (isFetching) {
|
|
123
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "flex items-center justify-center py-12", children: (0, jsx_runtime_1.jsx)("div", { className: "h-8 w-8 animate-spin rounded-full border-2 border-primary border-t-transparent" }) }));
|
|
124
|
+
}
|
|
125
|
+
return ((0, jsx_runtime_1.jsxs)("form", { onSubmit: handleSubmit, className: `space-y-6 ${className}`, children: [error && ((0, jsx_runtime_1.jsx)("div", { className: "rounded-md bg-destructive/10 px-4 py-3 text-sm text-destructive", children: error })), (0, jsx_runtime_1.jsxs)("div", { className: "rounded-lg border border-border bg-card p-6", children: [(0, jsx_runtime_1.jsx)("h3", { className: "mb-4 text-lg font-medium text-foreground", children: "Basic Information" }), (0, jsx_runtime_1.jsxs)("div", { className: "space-y-4", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "name", className: "block text-sm font-medium text-foreground", children: "Product Name *" }), (0, jsx_runtime_1.jsx)("input", { id: "name", name: "name", type: "text", value: formData.name, onChange: handleChange, required: true, 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" })] }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "slug", className: "block text-sm font-medium text-foreground", children: "Slug" }), (0, jsx_runtime_1.jsx)("input", { id: "slug", name: "slug", type: "text", value: formData.slug, onChange: handleChange, placeholder: "auto-generated-from-name", 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" })] }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "description", className: "block text-sm font-medium text-foreground", children: "Description" }), (0, jsx_runtime_1.jsx)("textarea", { id: "description", name: "description", value: formData.description, onChange: handleChange, rows: 4, 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" })] })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "rounded-lg border border-border bg-card p-6", children: [(0, jsx_runtime_1.jsx)("h3", { className: "mb-4 text-lg font-medium text-foreground", children: "Pricing" }), (0, jsx_runtime_1.jsxs)("div", { className: "grid gap-4 sm:grid-cols-2", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "price", className: "block text-sm font-medium text-foreground", children: "Price *" }), (0, jsx_runtime_1.jsx)("input", { id: "price", name: "price", type: "number", step: "0.01", min: "0", value: formData.price, onChange: handleChange, required: true, 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" })] }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "comparePrice", className: "block text-sm font-medium text-foreground", children: "Compare at Price" }), (0, jsx_runtime_1.jsx)("input", { id: "comparePrice", name: "comparePrice", type: "number", step: "0.01", min: "0", value: formData.comparePrice || '', onChange: handleChange, placeholder: "Original price for sales", 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" })] })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "rounded-lg border border-border bg-card p-6", children: [(0, jsx_runtime_1.jsx)("h3", { className: "mb-4 text-lg font-medium text-foreground", children: "Images" }), (0, jsx_runtime_1.jsxs)("div", { className: "space-y-4", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex gap-2", children: [(0, jsx_runtime_1.jsx)("input", { type: "url", value: imageUrl, onChange: (e) => setImageUrl(e.target.value), placeholder: "Enter 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" }), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: handleAddImage, className: "rounded-md bg-secondary px-4 py-2 text-sm font-medium text-secondary-foreground hover:bg-secondary/80", children: "Add" })] }), formData.images.length > 0 && ((0, jsx_runtime_1.jsx)("div", { className: "grid grid-cols-4 gap-4", children: formData.images.map((url, index) => ((0, jsx_runtime_1.jsxs)("div", { className: "relative", children: [(0, jsx_runtime_1.jsx)("img", { src: url, alt: `Product ${index + 1}`, className: "h-24 w-full rounded object-cover" }), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => handleRemoveImage(index), className: "absolute -right-2 -top-2 rounded-full bg-destructive p-1 text-destructive-foreground hover:bg-destructive/80", children: (0, jsx_runtime_1.jsx)("svg", { className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) })] }, index))) }))] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "rounded-lg border border-border bg-card p-6", children: [(0, jsx_runtime_1.jsx)("h3", { className: "mb-4 text-lg font-medium text-foreground", children: "Status" }), (0, jsx_runtime_1.jsxs)("select", { name: "status", value: formData.status, onChange: handleChange, className: "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", children: [(0, jsx_runtime_1.jsx)("option", { value: "draft", children: "Draft" }), (0, jsx_runtime_1.jsx)("option", { value: "active", children: "Active" }), (0, jsx_runtime_1.jsx)("option", { value: "archived", children: "Archived" })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex justify-end gap-4", children: [onCancel && ((0, jsx_runtime_1.jsx)("button", { type: "button", onClick: onCancel, className: "rounded-md border border-border px-4 py-2 text-sm font-medium text-foreground hover:bg-accent", children: "Cancel" })), (0, jsx_runtime_1.jsx)("button", { type: "submit", disabled: isLoading, className: "rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50", children: isLoading ? 'Saving...' : isEditMode ? 'Update Product' : 'Create Product' })] })] }));
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=ProductForm.js.map
|