@classytic/commerce-sdk 0.1.2 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +277 -146
- package/dist/accounting/api/account.d.ts +49 -0
- package/dist/accounting/api/account.js +45 -0
- package/dist/accounting/api/budget.d.ts +76 -0
- package/dist/accounting/api/budget.js +82 -0
- package/dist/accounting/api/constants.d.ts +58 -0
- package/dist/accounting/api/constants.js +79 -0
- package/dist/accounting/api/fiscal-period.d.ts +31 -0
- package/dist/accounting/api/fiscal-period.js +30 -0
- package/dist/accounting/api/index.d.ts +7 -0
- package/dist/accounting/api/journal-entry.d.ts +66 -0
- package/dist/accounting/api/journal-entry.js +72 -0
- package/dist/accounting/api/posting.d.ts +55 -0
- package/dist/accounting/api/posting.js +70 -0
- package/dist/accounting/api/reports.d.ts +63 -0
- package/dist/accounting/api/reports.js +81 -0
- package/dist/accounting/hooks/account.d.ts +29 -0
- package/dist/accounting/hooks/account.js +102 -0
- package/dist/accounting/hooks/budget.d.ts +39 -0
- package/dist/accounting/hooks/budget.js +106 -0
- package/dist/accounting/hooks/fiscal-period.d.ts +22 -0
- package/dist/accounting/hooks/fiscal-period.js +52 -0
- package/dist/accounting/hooks/index.d.ts +6 -0
- package/dist/accounting/hooks/journal-entry.d.ts +37 -0
- package/dist/accounting/hooks/journal-entry.js +89 -0
- package/dist/accounting/hooks/posting.d.ts +128 -0
- package/dist/accounting/hooks/posting.js +119 -0
- package/dist/accounting/hooks/reports.d.ts +32 -0
- package/dist/accounting/hooks/reports.js +131 -0
- package/dist/accounting/index.d.ts +15 -0
- package/dist/accounting/index.js +15 -0
- package/dist/accounting/types/index.d.ts +375 -0
- package/dist/analytics/api/analytics.d.ts +16 -0
- package/dist/analytics/api/analytics.js +27 -0
- package/dist/analytics/api/index.d.ts +1 -0
- package/dist/analytics/hooks/analytics.d.ts +12 -0
- package/dist/analytics/hooks/analytics.js +33 -0
- package/dist/analytics/hooks/index.d.ts +1 -0
- package/dist/analytics/index.d.ts +4 -27
- package/dist/analytics/index.js +4 -6
- package/dist/analytics/types.d.ts +46 -0
- package/dist/audit/api/audit.d.ts +17 -0
- package/dist/audit/api/audit.js +21 -0
- package/dist/audit/hooks/audit.d.ts +17 -0
- package/dist/audit/hooks/audit.js +38 -0
- package/dist/audit/index.d.ts +4 -0
- package/dist/audit/index.js +4 -0
- package/dist/audit/types/index.d.ts +32 -0
- package/dist/auth/api/user-data.d.ts +30 -0
- package/dist/auth/api/user-data.js +70 -0
- package/dist/auth/hooks/user-search.d.ts +32 -0
- package/dist/auth/hooks/user-search.js +51 -0
- package/dist/auth/index.d.ts +4 -39
- package/dist/auth/index.js +5 -5
- package/dist/auth/types.d.ts +46 -0
- package/dist/auth/types.js +27 -0
- package/dist/catalog/api/category.d.ts +97 -0
- package/dist/catalog/api/category.js +109 -0
- package/dist/catalog/api/index.d.ts +4 -0
- package/dist/catalog/api/product.d.ts +136 -0
- package/dist/catalog/api/product.js +142 -0
- package/dist/catalog/api/review.d.ts +32 -0
- package/dist/catalog/api/review.js +41 -0
- package/dist/catalog/api/size-guide.d.ts +46 -0
- package/dist/catalog/api/size-guide.js +58 -0
- package/dist/catalog/hooks/category.d.ts +201 -0
- package/dist/catalog/hooks/category.js +295 -0
- package/dist/catalog/hooks/index.d.ts +4 -0
- package/dist/catalog/hooks/product.d.ts +165 -0
- package/dist/catalog/hooks/product.js +267 -0
- package/dist/catalog/hooks/review.d.ts +18 -0
- package/dist/catalog/hooks/review.js +38 -0
- package/dist/catalog/hooks/size-guide.d.ts +136 -0
- package/dist/catalog/hooks/size-guide.js +173 -0
- package/dist/catalog/index.d.ts +13 -571
- package/dist/catalog/index.js +10 -9
- package/dist/catalog/prefetch.d.ts +29 -0
- package/dist/catalog/prefetch.js +32 -0
- package/dist/catalog/types/category.d.ts +168 -0
- package/dist/catalog/types/index.d.ts +4 -0
- package/dist/catalog/types/product.d.ts +261 -0
- package/dist/catalog/types/review.d.ts +48 -0
- package/dist/catalog/types/size-guide.d.ts +118 -0
- package/dist/client.d.ts +138 -0
- package/dist/client.js +129 -0
- package/dist/content/api/cms.d.ts +27 -0
- package/dist/content/api/cms.js +43 -0
- package/dist/content/api/index.d.ts +2 -0
- package/dist/content/api/media.d.ts +74 -0
- package/dist/content/api/media.js +77 -0
- package/dist/content/hooks/cms.d.ts +31 -0
- package/dist/content/hooks/cms.js +62 -0
- package/dist/content/hooks/index.d.ts +2 -0
- package/dist/content/hooks/media.d.ts +74 -0
- package/dist/content/hooks/media.js +153 -0
- package/dist/content/index.d.ts +7 -309
- package/dist/content/index.js +6 -6
- package/dist/content/types/cms.d.ts +390 -0
- package/dist/content/types/media.d.ts +110 -0
- package/dist/core/api-factory.d.ts +17 -0
- package/dist/core/api-factory.js +39 -0
- package/dist/core/api-handler.d.ts +53 -0
- package/dist/core/api-handler.js +89 -0
- package/dist/core/index.d.ts +4 -166
- package/dist/core/index.js +4 -5
- package/dist/core/prefetch.d.ts +2 -0
- package/dist/core/prefetch.js +3 -0
- package/dist/core/react/crud.factory.d.ts +3 -0
- package/dist/core/react/crud.factory.js +5 -0
- package/dist/core/react/index.d.ts +4 -0
- package/dist/core/react/index.js +7 -0
- package/dist/core/react/mutation.factory.d.ts +9 -0
- package/dist/core/react/mutation.factory.js +21 -0
- package/dist/core/react/query.factory.d.ts +12 -0
- package/dist/core/react/query.factory.js +5 -0
- package/dist/core/server-context.d.ts +6 -0
- package/dist/core/server-context.js +12 -0
- package/dist/core/types/shared.d.ts +29 -0
- package/dist/finance/api/finance.d.ts +22 -0
- package/dist/finance/api/finance.js +29 -0
- package/dist/finance/api/index.d.ts +1 -0
- package/dist/finance/hooks/finance.d.ts +32 -0
- package/dist/finance/hooks/finance.js +66 -0
- package/dist/finance/hooks/index.d.ts +1 -0
- package/dist/finance/index.d.ts +4 -81
- package/dist/finance/index.js +4 -5
- package/dist/finance/types/finance.d.ts +82 -0
- package/dist/index.d.ts +139 -32
- package/dist/index.js +113 -29
- package/dist/inventory/api/adjustment.d.ts +123 -0
- package/dist/inventory/api/adjustment.js +120 -0
- package/dist/inventory/api/availability.d.ts +70 -0
- package/dist/inventory/api/availability.js +47 -0
- package/dist/inventory/api/cost.d.ts +58 -0
- package/dist/inventory/api/cost.js +34 -0
- package/dist/inventory/api/index.d.ts +18 -0
- package/dist/inventory/api/lot.d.ts +82 -0
- package/dist/inventory/api/lot.js +46 -0
- package/dist/inventory/api/movement.d.ts +71 -0
- package/dist/inventory/api/movement.js +75 -0
- package/dist/inventory/api/package.d.ts +97 -0
- package/dist/inventory/api/package.js +56 -0
- package/dist/inventory/api/procurement.d.ts +110 -0
- package/dist/inventory/api/procurement.js +59 -0
- package/dist/inventory/api/purchase.d.ts +106 -0
- package/dist/inventory/api/purchase.js +115 -0
- package/dist/inventory/api/replenishment.d.ts +145 -0
- package/dist/inventory/api/replenishment.js +63 -0
- package/dist/inventory/api/report.d.ts +102 -0
- package/dist/inventory/api/report.js +54 -0
- package/dist/inventory/api/request.d.ts +157 -0
- package/dist/inventory/api/request.js +140 -0
- package/dist/inventory/api/reservation.d.ts +77 -0
- package/dist/inventory/api/reservation.js +51 -0
- package/dist/inventory/api/scan.d.ts +29 -0
- package/dist/inventory/api/scan.js +30 -0
- package/dist/inventory/api/supplier.d.ts +9 -0
- package/dist/inventory/api/supplier.js +24 -0
- package/dist/inventory/api/trace.d.ts +71 -0
- package/dist/inventory/api/trace.js +39 -0
- package/dist/inventory/api/transfer.d.ts +162 -0
- package/dist/inventory/api/transfer.js +155 -0
- package/dist/inventory/api/warehouse.d.ts +199 -0
- package/dist/inventory/api/warehouse.js +155 -0
- package/dist/inventory/hooks/adjustment.d.ts +24 -0
- package/dist/inventory/hooks/adjustment.js +30 -0
- package/dist/inventory/hooks/availability.d.ts +16 -0
- package/dist/inventory/hooks/availability.js +35 -0
- package/dist/inventory/hooks/cost.d.ts +21 -0
- package/dist/inventory/hooks/cost.js +50 -0
- package/dist/inventory/hooks/index.d.ts +18 -0
- package/dist/inventory/hooks/inventory.d.ts +130 -0
- package/dist/inventory/hooks/inventory.js +267 -0
- package/dist/inventory/hooks/lot.d.ts +26 -0
- package/dist/inventory/hooks/lot.js +67 -0
- package/dist/inventory/hooks/movement.d.ts +68 -0
- package/dist/inventory/hooks/movement.js +106 -0
- package/dist/inventory/hooks/package.d.ts +32 -0
- package/dist/inventory/hooks/package.js +80 -0
- package/dist/inventory/hooks/procurement.d.ts +28 -0
- package/dist/inventory/hooks/procurement.js +87 -0
- package/dist/inventory/hooks/purchase.d.ts +63 -0
- package/dist/inventory/hooks/purchase.js +119 -0
- package/dist/inventory/hooks/replenishment.d.ts +34 -0
- package/dist/inventory/hooks/replenishment.js +87 -0
- package/dist/inventory/hooks/report.d.ts +37 -0
- package/dist/inventory/hooks/report.js +79 -0
- package/dist/inventory/hooks/request.d.ts +113 -0
- package/dist/inventory/hooks/request.js +218 -0
- package/dist/inventory/hooks/reservation.d.ts +25 -0
- package/dist/inventory/hooks/reservation.js +56 -0
- package/dist/inventory/hooks/scan.d.ts +14 -0
- package/dist/inventory/hooks/scan.js +22 -0
- package/dist/inventory/hooks/supplier.d.ts +24 -0
- package/dist/inventory/hooks/supplier.js +30 -0
- package/dist/inventory/hooks/trace.d.ts +19 -0
- package/dist/inventory/hooks/trace.js +55 -0
- package/dist/inventory/hooks/transfer.d.ts +90 -0
- package/dist/inventory/hooks/transfer.js +197 -0
- package/dist/inventory/hooks/warehouse.d.ts +87 -0
- package/dist/inventory/hooks/warehouse.js +240 -0
- package/dist/inventory/index.d.ts +39 -512
- package/dist/inventory/index.js +37 -16
- package/dist/inventory/types/index.d.ts +3 -0
- package/dist/inventory/types/inventory.d.ts +485 -0
- package/dist/inventory/types/supplier.d.ts +90 -0
- package/dist/inventory/types/warehouse.d.ts +182 -0
- package/dist/logistics/api/index.d.ts +1 -0
- package/dist/logistics/api/logistics.d.ts +260 -0
- package/dist/logistics/api/logistics.js +249 -0
- package/dist/logistics/hooks/index.d.ts +1 -0
- package/dist/logistics/hooks/logistics.d.ts +252 -0
- package/dist/logistics/hooks/logistics.js +370 -0
- package/dist/logistics/index.d.ts +4 -248
- package/dist/logistics/index.js +4 -7
- package/dist/logistics/types/logistics.d.ts +188 -0
- package/dist/node_modules/@tanstack/query-core/build/modern/hydration-C-jfQLut.d.ts +270 -0
- package/dist/notifications/api/notification.d.ts +15 -0
- package/dist/notifications/api/notification.js +43 -0
- package/dist/notifications/hooks/notification.d.ts +34 -0
- package/dist/notifications/hooks/notification.js +86 -0
- package/dist/notifications/hooks/stream.d.ts +22 -0
- package/dist/notifications/hooks/stream.js +80 -0
- package/dist/notifications/index.d.ts +5 -0
- package/dist/notifications/index.js +5 -0
- package/dist/notifications/types/index.d.ts +57 -0
- package/dist/payments/api/index.d.ts +1 -0
- package/dist/payments/api/payment.d.ts +89 -0
- package/dist/payments/api/payment.js +93 -0
- package/dist/payments/hooks/payment.d.ts +53 -0
- package/dist/payments/hooks/payment.js +93 -0
- package/dist/payments/index.d.ts +4 -55
- package/dist/payments/index.js +4 -6
- package/dist/payments/types/payment.d.ts +50 -0
- package/dist/permissions/checker.d.ts +125 -0
- package/dist/permissions/checker.js +150 -0
- package/dist/permissions/index.d.ts +3 -0
- package/dist/permissions/index.js +4 -0
- package/dist/permissions/roles.d.ts +39 -0
- package/dist/permissions/roles.js +66 -0
- package/dist/platform/api/branch.d.ts +57 -0
- package/dist/platform/api/branch.js +73 -0
- package/dist/platform/api/config.d.ts +67 -0
- package/dist/platform/api/config.js +83 -0
- package/dist/platform/api/features.d.ts +15 -0
- package/dist/platform/api/features.js +20 -0
- package/dist/platform/api/index.d.ts +6 -0
- package/dist/platform/api/promo.d.ts +286 -0
- package/dist/platform/api/promo.js +276 -0
- package/dist/platform/api/user.d.ts +10 -0
- package/dist/platform/api/user.js +29 -0
- package/dist/platform/api/webhook.d.ts +102 -0
- package/dist/platform/api/webhook.js +124 -0
- package/dist/platform/hooks/branch.d.ts +24 -0
- package/dist/platform/hooks/branch.js +31 -0
- package/dist/platform/hooks/config.d.ts +61 -0
- package/dist/platform/hooks/config.js +100 -0
- package/dist/platform/hooks/features.d.ts +22 -0
- package/dist/platform/hooks/features.js +75 -0
- package/dist/platform/hooks/index.d.ts +6 -0
- package/dist/platform/hooks/promo.d.ts +218 -0
- package/dist/platform/hooks/promo.js +451 -0
- package/dist/platform/hooks/user.d.ts +24 -0
- package/dist/platform/hooks/user.js +30 -0
- package/dist/platform/index.d.ts +18 -645
- package/dist/platform/index.js +14 -8
- package/dist/platform/prefetch.d.ts +9 -0
- package/dist/platform/prefetch.js +11 -0
- package/dist/platform/types/branch.d.ts +110 -0
- package/dist/platform/types/branch.js +16 -0
- package/dist/platform/types/config.d.ts +137 -0
- package/dist/platform/types/features.d.ts +46 -0
- package/dist/platform/types/promo.d.ts +260 -0
- package/dist/platform/types/user.d.ts +72 -0
- package/dist/platform/types/webhook.d.ts +165 -0
- package/dist/sales/api/cart.d.ts +34 -0
- package/dist/sales/api/cart.js +38 -0
- package/dist/sales/api/customer.d.ts +40 -0
- package/dist/sales/api/customer.js +52 -0
- package/dist/sales/api/earning-rules.d.ts +54 -0
- package/dist/sales/api/earning-rules.js +56 -0
- package/dist/sales/api/index.d.ts +9 -0
- package/dist/sales/api/loyalty.d.ts +54 -0
- package/dist/sales/api/loyalty.js +57 -0
- package/dist/sales/api/order.d.ts +147 -0
- package/dist/sales/api/order.js +69 -0
- package/dist/sales/api/pos.d.ts +81 -0
- package/dist/sales/api/pos.js +95 -0
- package/dist/sales/api/referrals.d.ts +63 -0
- package/dist/sales/api/referrals.js +62 -0
- package/dist/sales/api/tiers.d.ts +66 -0
- package/dist/sales/api/tiers.js +59 -0
- package/dist/sales/hooks/cart.d.ts +50 -0
- package/dist/sales/hooks/cart.js +161 -0
- package/dist/sales/hooks/customer.d.ts +100 -0
- package/dist/sales/hooks/customer.js +130 -0
- package/dist/sales/hooks/earning-rules.d.ts +31 -0
- package/dist/sales/hooks/earning-rules.js +112 -0
- package/dist/sales/hooks/index.d.ts +8 -0
- package/dist/sales/hooks/loyalty.d.ts +51 -0
- package/dist/sales/hooks/loyalty.js +122 -0
- package/dist/sales/hooks/order.d.ts +219 -0
- package/dist/sales/hooks/order.js +401 -0
- package/dist/sales/hooks/pos.d.ts +87 -0
- package/dist/sales/hooks/pos.js +222 -0
- package/dist/sales/hooks/referrals.d.ts +34 -0
- package/dist/sales/hooks/referrals.js +132 -0
- package/dist/sales/hooks/tiers.d.ts +32 -0
- package/dist/sales/hooks/tiers.js +144 -0
- package/dist/sales/index.d.ts +25 -620
- package/dist/sales/index.js +19 -9
- package/dist/sales/prefetch.d.ts +10 -0
- package/dist/sales/prefetch.js +13 -0
- package/dist/sales/types/cart.d.ts +123 -0
- package/dist/sales/types/customer.d.ts +119 -0
- package/dist/sales/types/earning-rules.d.ts +75 -0
- package/dist/sales/types/index.d.ts +8 -0
- package/dist/sales/types/loyalty.d.ts +120 -0
- package/dist/sales/types/order.d.ts +487 -0
- package/dist/sales/types/order.js +22 -0
- package/dist/sales/types/pos.d.ts +227 -0
- package/dist/sales/types/referrals.d.ts +51 -0
- package/dist/sales/types/tiers.d.ts +56 -0
- package/dist/server.d.ts +41 -23
- package/dist/server.js +41 -36
- package/dist/transaction/api/index.d.ts +1 -0
- package/dist/transaction/api/transaction.d.ts +63 -0
- package/dist/transaction/api/transaction.js +84 -0
- package/dist/transaction/hooks/index.d.ts +1 -0
- package/dist/transaction/hooks/transaction.d.ts +106 -0
- package/dist/transaction/hooks/transaction.js +156 -0
- package/dist/transaction/index.d.ts +4 -104
- package/dist/transaction/index.js +5 -8
- package/dist/transaction/types/transaction.d.ts +440 -0
- package/dist/transaction/types/transaction.js +86 -0
- package/package.json +36 -25
- package/dist/adjustment-MNH3AT6S.js +0 -5
- package/dist/adjustment-MNH3AT6S.js.map +0 -1
- package/dist/analytics/index.js.map +0 -1
- package/dist/analytics-DMcD-o8w.d.ts +0 -76
- package/dist/api-factory-B_h4RKBm.d.ts +0 -280
- package/dist/auth/index.js.map +0 -1
- package/dist/catalog/index.js.map +0 -1
- package/dist/chunk-24FDD6UR.js +0 -75
- package/dist/chunk-24FDD6UR.js.map +0 -1
- package/dist/chunk-2TF7QNYV.js +0 -159
- package/dist/chunk-2TF7QNYV.js.map +0 -1
- package/dist/chunk-2YAZ5WG6.js +0 -479
- package/dist/chunk-2YAZ5WG6.js.map +0 -1
- package/dist/chunk-36NLLAVH.js +0 -177
- package/dist/chunk-36NLLAVH.js.map +0 -1
- package/dist/chunk-3OYSJB3P.js +0 -126
- package/dist/chunk-3OYSJB3P.js.map +0 -1
- package/dist/chunk-4IYW6RF3.js +0 -862
- package/dist/chunk-4IYW6RF3.js.map +0 -1
- package/dist/chunk-5E57JODA.js +0 -135
- package/dist/chunk-5E57JODA.js.map +0 -1
- package/dist/chunk-7LZCW4VF.js +0 -13
- package/dist/chunk-7LZCW4VF.js.map +0 -1
- package/dist/chunk-AQAISI4F.js +0 -183
- package/dist/chunk-AQAISI4F.js.map +0 -1
- package/dist/chunk-B6MPVOV7.js +0 -328
- package/dist/chunk-B6MPVOV7.js.map +0 -1
- package/dist/chunk-CILP56G2.js +0 -94
- package/dist/chunk-CILP56G2.js.map +0 -1
- package/dist/chunk-ERQ52WHY.js +0 -534
- package/dist/chunk-ERQ52WHY.js.map +0 -1
- package/dist/chunk-FOTUJPM4.js +0 -640
- package/dist/chunk-FOTUJPM4.js.map +0 -1
- package/dist/chunk-IHCBBLLW.js +0 -198
- package/dist/chunk-IHCBBLLW.js.map +0 -1
- package/dist/chunk-L4OEI4VZ.js +0 -123
- package/dist/chunk-L4OEI4VZ.js.map +0 -1
- package/dist/chunk-LRV7MWWX.js +0 -616
- package/dist/chunk-LRV7MWWX.js.map +0 -1
- package/dist/chunk-M3B4DFTT.js +0 -76
- package/dist/chunk-M3B4DFTT.js.map +0 -1
- package/dist/chunk-N43VE355.js +0 -126
- package/dist/chunk-N43VE355.js.map +0 -1
- package/dist/chunk-PYYLHUV6.js +0 -3
- package/dist/chunk-PYYLHUV6.js.map +0 -1
- package/dist/chunk-QCTXAMLA.js +0 -261
- package/dist/chunk-QCTXAMLA.js.map +0 -1
- package/dist/chunk-RIKAPJNG.js +0 -40
- package/dist/chunk-RIKAPJNG.js.map +0 -1
- package/dist/chunk-U3XT35GZ.js +0 -202
- package/dist/chunk-U3XT35GZ.js.map +0 -1
- package/dist/chunk-W22WB3WZ.js +0 -148
- package/dist/chunk-W22WB3WZ.js.map +0 -1
- package/dist/chunk-WTIJMKML.js +0 -27
- package/dist/chunk-WTIJMKML.js.map +0 -1
- package/dist/chunk-X2CQFJPR.js +0 -75
- package/dist/chunk-X2CQFJPR.js.map +0 -1
- package/dist/chunk-YYFKLOKO.js +0 -769
- package/dist/chunk-YYFKLOKO.js.map +0 -1
- package/dist/client-BPG8fbae.d.ts +0 -113
- package/dist/content/index.js.map +0 -1
- package/dist/core/index.js.map +0 -1
- package/dist/core/react.d.ts +0 -107
- package/dist/core/react.js +0 -5
- package/dist/core/react.js.map +0 -1
- package/dist/coupon-BZSZ0y3n.d.ts +0 -129
- package/dist/coupon-CDzL4bJG.d.ts +0 -655
- package/dist/crud.factory-DyKaPHcU.d.ts +0 -181
- package/dist/finance/index.js.map +0 -1
- package/dist/finance-BJdfKRw0.d.ts +0 -135
- package/dist/index.js.map +0 -1
- package/dist/inventory/index.js.map +0 -1
- package/dist/inventory-B5pssqRx.d.ts +0 -748
- package/dist/logistics/index.js.map +0 -1
- package/dist/logistics-REVDorcc.d.ts +0 -410
- package/dist/media-CNLJK93J.d.ts +0 -721
- package/dist/movement-R3CERFAM.js +0 -5
- package/dist/movement-R3CERFAM.js.map +0 -1
- package/dist/order-BfdPxZiA.d.ts +0 -412
- package/dist/payment-BRboLqvU.d.ts +0 -127
- package/dist/payments/index.js.map +0 -1
- package/dist/platform/index.js.map +0 -1
- package/dist/pos-C-sBzevg.d.ts +0 -538
- package/dist/product-p09zXkXB.d.ts +0 -260
- package/dist/purchase-54PER2PY.js +0 -5
- package/dist/purchase-54PER2PY.js.map +0 -1
- package/dist/request-MP6NV5ZE.js +0 -5
- package/dist/request-MP6NV5ZE.js.map +0 -1
- package/dist/sales/index.js.map +0 -1
- package/dist/server.js.map +0 -1
- package/dist/size-guide-DgjzjM5P.d.ts +0 -554
- package/dist/stock-2LP4HJSB.js +0 -5
- package/dist/stock-2LP4HJSB.js.map +0 -1
- package/dist/stock-CfrU5_Wr.d.ts +0 -632
- package/dist/supplier-BWJTRZ5Z.js +0 -5
- package/dist/supplier-BWJTRZ5Z.js.map +0 -1
- package/dist/transaction/index.js.map +0 -1
- package/dist/transaction-Bf6WjYCh.d.ts +0 -84
- package/dist/transaction-dL3WW-er.d.ts +0 -442
- package/dist/transfer-4XSS6HWT.js +0 -5
- package/dist/transfer-4XSS6HWT.js.map +0 -1
- package/dist/user-data-DdLjAGwO.d.ts +0 -132
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { getToastHandler } from "../../core/react/mutation.factory.js";
|
|
4
|
+
import { createCrudHooks } from "../../core/react/crud.factory.js";
|
|
5
|
+
import { productApi } from "../api/product.js";
|
|
6
|
+
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
7
|
+
|
|
8
|
+
//#region src/catalog/hooks/product.ts
|
|
9
|
+
/**
|
|
10
|
+
* Product Hooks
|
|
11
|
+
*
|
|
12
|
+
* Pre-built hooks for product CRUD operations with:
|
|
13
|
+
* - Optimistic updates
|
|
14
|
+
* - Smart caching
|
|
15
|
+
* - Type safety
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Product CRUD hooks with optimistic updates
|
|
19
|
+
*/
|
|
20
|
+
const productHooks = createCrudHooks({
|
|
21
|
+
api: productApi,
|
|
22
|
+
entityKey: "products",
|
|
23
|
+
singular: "Product",
|
|
24
|
+
plural: "Products",
|
|
25
|
+
defaults: { staleTime: 300 * 1e3 }
|
|
26
|
+
});
|
|
27
|
+
const { KEYS: PRODUCT_KEYS, useList: useProducts, useDetail: useProductDetail, useActions: useProductActions, useNavigation: useProductNavigation } = productHooks;
|
|
28
|
+
/**
|
|
29
|
+
* Hook to get product by slug
|
|
30
|
+
*
|
|
31
|
+
* @param token - Auth token (optional for public access)
|
|
32
|
+
* @param slug - Product slug
|
|
33
|
+
* @param options - React Query options
|
|
34
|
+
* @returns Query result with product data
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```tsx
|
|
38
|
+
* function ProductPage({ slug }) {
|
|
39
|
+
* const { data, isLoading } = useProductBySlug(null, slug);
|
|
40
|
+
*
|
|
41
|
+
* if (isLoading) return <Spinner />;
|
|
42
|
+
*
|
|
43
|
+
* return <h1>{data?.data?.name}</h1>;
|
|
44
|
+
* }
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
function useProductBySlug(token, slug, options = {}) {
|
|
48
|
+
return useQuery({
|
|
49
|
+
queryKey: [
|
|
50
|
+
...PRODUCT_KEYS.all,
|
|
51
|
+
"slug",
|
|
52
|
+
slug
|
|
53
|
+
],
|
|
54
|
+
queryFn: () => productApi.getBySlug({
|
|
55
|
+
token,
|
|
56
|
+
slug
|
|
57
|
+
}),
|
|
58
|
+
enabled: !!slug,
|
|
59
|
+
staleTime: 300 * 1e3,
|
|
60
|
+
...options
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Hook to get product recommendations
|
|
65
|
+
*
|
|
66
|
+
* @param productId - Product ID to get recommendations for
|
|
67
|
+
* @param options - React Query options
|
|
68
|
+
* @returns Object with recommendations array, isLoading, and error
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```tsx
|
|
72
|
+
* function ProductRecommendations({ productId }) {
|
|
73
|
+
* const { recommendations, isLoading } = useProductRecommendations(productId);
|
|
74
|
+
*
|
|
75
|
+
* if (isLoading) return <Spinner />;
|
|
76
|
+
*
|
|
77
|
+
* return (
|
|
78
|
+
* <div>
|
|
79
|
+
* {recommendations.map(product => (
|
|
80
|
+
* <ProductCard key={product._id} product={product} />
|
|
81
|
+
* ))}
|
|
82
|
+
* </div>
|
|
83
|
+
* );
|
|
84
|
+
* }
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
function useProductRecommendations(productId, options = {}) {
|
|
88
|
+
const { data, isLoading, error } = useQuery({
|
|
89
|
+
queryKey: [
|
|
90
|
+
...PRODUCT_KEYS.all,
|
|
91
|
+
"recommendations",
|
|
92
|
+
productId
|
|
93
|
+
],
|
|
94
|
+
queryFn: () => productApi.getRecommendations({
|
|
95
|
+
token: null,
|
|
96
|
+
productId
|
|
97
|
+
}),
|
|
98
|
+
enabled: !!productId,
|
|
99
|
+
staleTime: 600 * 1e3,
|
|
100
|
+
...options
|
|
101
|
+
});
|
|
102
|
+
return {
|
|
103
|
+
recommendations: data?.data ?? [],
|
|
104
|
+
isLoading,
|
|
105
|
+
error
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Hook to get soft-deleted products (Recycle Bin)
|
|
110
|
+
*
|
|
111
|
+
* @param token - Auth token (required, admin only)
|
|
112
|
+
* @param params - Query parameters for pagination/filtering
|
|
113
|
+
* @param options - React Query options
|
|
114
|
+
* @returns Query result with deleted products
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* ```tsx
|
|
118
|
+
* function RecycleBin() {
|
|
119
|
+
* const { data, isLoading } = useDeletedProducts(token, { page: 1, limit: 20 });
|
|
120
|
+
*
|
|
121
|
+
* if (isLoading) return <Spinner />;
|
|
122
|
+
*
|
|
123
|
+
* return (
|
|
124
|
+
* <div>
|
|
125
|
+
* {data?.docs?.map(product => (
|
|
126
|
+
* <DeletedProductRow key={product._id} product={product} />
|
|
127
|
+
* ))}
|
|
128
|
+
* </div>
|
|
129
|
+
* );
|
|
130
|
+
* }
|
|
131
|
+
* ```
|
|
132
|
+
*/
|
|
133
|
+
function useDeletedProducts(token, params = {}, options = {}) {
|
|
134
|
+
return useQuery({
|
|
135
|
+
queryKey: [
|
|
136
|
+
...PRODUCT_KEYS.all,
|
|
137
|
+
"deleted",
|
|
138
|
+
params
|
|
139
|
+
],
|
|
140
|
+
queryFn: () => productApi.getDeleted({
|
|
141
|
+
token,
|
|
142
|
+
params
|
|
143
|
+
}),
|
|
144
|
+
enabled: !!token,
|
|
145
|
+
staleTime: 120 * 1e3,
|
|
146
|
+
...options
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Hook to restore a soft-deleted product
|
|
151
|
+
*
|
|
152
|
+
* @param token - Auth token (required, admin only)
|
|
153
|
+
* @returns Mutation result with restore function
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* ```tsx
|
|
157
|
+
* function RestoreButton({ productId }) {
|
|
158
|
+
* const { mutate: restore, isPending } = useRestoreProduct(token);
|
|
159
|
+
*
|
|
160
|
+
* return (
|
|
161
|
+
* <Button onClick={() => restore(productId)} disabled={isPending}>
|
|
162
|
+
* Restore Product
|
|
163
|
+
* </Button>
|
|
164
|
+
* );
|
|
165
|
+
* }
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
function useRestoreProduct(token) {
|
|
169
|
+
const queryClient = useQueryClient();
|
|
170
|
+
const toast = getToastHandler();
|
|
171
|
+
return useMutation({
|
|
172
|
+
mutationFn: (id) => productApi.restore({
|
|
173
|
+
token,
|
|
174
|
+
id
|
|
175
|
+
}),
|
|
176
|
+
onSuccess: () => {
|
|
177
|
+
toast.success("Product restored successfully");
|
|
178
|
+
queryClient.invalidateQueries({ queryKey: [...PRODUCT_KEYS.all, "deleted"] });
|
|
179
|
+
queryClient.invalidateQueries({ queryKey: PRODUCT_KEYS.lists() });
|
|
180
|
+
},
|
|
181
|
+
onError: (error) => {
|
|
182
|
+
toast.error(error.message || "Failed to restore product");
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Hook to permanently delete a product (Hard delete)
|
|
188
|
+
*
|
|
189
|
+
* @param token - Auth token (required, admin only)
|
|
190
|
+
* @returns Mutation result with hard delete function
|
|
191
|
+
*
|
|
192
|
+
* @example
|
|
193
|
+
* ```tsx
|
|
194
|
+
* function PermanentDeleteButton({ productId }) {
|
|
195
|
+
* const { mutate: hardDelete, isPending } = useHardDeleteProduct(token);
|
|
196
|
+
*
|
|
197
|
+
* return (
|
|
198
|
+
* <Button
|
|
199
|
+
* variant="destructive"
|
|
200
|
+
* onClick={() => hardDelete(productId)}
|
|
201
|
+
* disabled={isPending}
|
|
202
|
+
* >
|
|
203
|
+
* Permanently Delete
|
|
204
|
+
* </Button>
|
|
205
|
+
* );
|
|
206
|
+
* }
|
|
207
|
+
* ```
|
|
208
|
+
*/
|
|
209
|
+
function useHardDeleteProduct(token) {
|
|
210
|
+
const queryClient = useQueryClient();
|
|
211
|
+
const toast = getToastHandler();
|
|
212
|
+
return useMutation({
|
|
213
|
+
mutationFn: (id) => productApi.hardDelete({
|
|
214
|
+
token,
|
|
215
|
+
id
|
|
216
|
+
}),
|
|
217
|
+
onSuccess: () => {
|
|
218
|
+
toast.success("Product permanently deleted");
|
|
219
|
+
queryClient.invalidateQueries({ queryKey: [...PRODUCT_KEYS.all, "deleted"] });
|
|
220
|
+
},
|
|
221
|
+
onError: (error) => {
|
|
222
|
+
toast.error(error.message || "Failed to permanently delete product");
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Hook to sync product stock quantity
|
|
228
|
+
*
|
|
229
|
+
* Recomputes product.quantity by summing all StockEntry quantities across branches.
|
|
230
|
+
*
|
|
231
|
+
* @param token - Auth token (requires: admin, warehouse-admin, warehouse-staff, or store-manager role)
|
|
232
|
+
* @returns Mutation result with sync function
|
|
233
|
+
*
|
|
234
|
+
* @example
|
|
235
|
+
* ```tsx
|
|
236
|
+
* function SyncStockButton({ productId }) {
|
|
237
|
+
* const { mutate: syncStock, isPending } = useSyncProductStock(token);
|
|
238
|
+
*
|
|
239
|
+
* return (
|
|
240
|
+
* <Button onClick={() => syncStock(productId)} disabled={isPending}>
|
|
241
|
+
* Sync Stock
|
|
242
|
+
* </Button>
|
|
243
|
+
* );
|
|
244
|
+
* }
|
|
245
|
+
* ```
|
|
246
|
+
*/
|
|
247
|
+
function useSyncProductStock(token) {
|
|
248
|
+
const queryClient = useQueryClient();
|
|
249
|
+
const toast = getToastHandler();
|
|
250
|
+
return useMutation({
|
|
251
|
+
mutationFn: (id) => productApi.syncStock({
|
|
252
|
+
token,
|
|
253
|
+
id
|
|
254
|
+
}),
|
|
255
|
+
onSuccess: (result, id) => {
|
|
256
|
+
toast.success(`Stock synced: ${result.totalQuantity} units`);
|
|
257
|
+
queryClient.invalidateQueries({ queryKey: PRODUCT_KEYS.detail(id) });
|
|
258
|
+
queryClient.invalidateQueries({ queryKey: PRODUCT_KEYS.lists() });
|
|
259
|
+
},
|
|
260
|
+
onError: (error) => {
|
|
261
|
+
toast.error(error.message || "Failed to sync stock");
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
//#endregion
|
|
267
|
+
export { PRODUCT_KEYS, productHooks, useDeletedProducts, useHardDeleteProduct, useProductActions, useProductBySlug, useProductDetail, useProductNavigation, useProductRecommendations, useProducts, useRestoreProduct, useSyncProductStock };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { CreateReviewPayload, Review, ReviewResponse, UpdateReviewPayload } from "../types/review.js";
|
|
2
|
+
import * as _tanstack_react_query0 from "@tanstack/react-query";
|
|
3
|
+
import { UseQueryOptions } from "@tanstack/react-query";
|
|
4
|
+
import * as _classytic_arc_next_query0 from "@classytic/arc-next/query";
|
|
5
|
+
import * as _classytic_arc_next0 from "@classytic/arc-next";
|
|
6
|
+
|
|
7
|
+
//#region src/catalog/hooks/review.d.ts
|
|
8
|
+
declare const reviewHooks: _classytic_arc_next0.CrudHooksReturn<Review, CreateReviewPayload, UpdateReviewPayload>;
|
|
9
|
+
declare const REVIEW_KEYS: _classytic_arc_next_query0.QueryKeys, useReviews: {
|
|
10
|
+
(params?: Record<string, unknown>, options?: _classytic_arc_next_query0.ListQueryOptions<Review> | undefined): _classytic_arc_next_query0.ListQueryResult<Review>;
|
|
11
|
+
(token: string | null, params?: Record<string, unknown>, options?: _classytic_arc_next_query0.ListQueryOptions<Review> | undefined): _classytic_arc_next_query0.ListQueryResult<Review>;
|
|
12
|
+
}, useReviewDetail: {
|
|
13
|
+
(id: string | null, options?: _classytic_arc_next_query0.DetailQueryOptions<Review> | undefined): _classytic_arc_next_query0.DetailQueryResult<Review>;
|
|
14
|
+
(id: string | null, token: string | null, options?: _classytic_arc_next_query0.DetailQueryOptions<Review> | undefined): _classytic_arc_next_query0.DetailQueryResult<Review>;
|
|
15
|
+
}, useReviewActions: () => _classytic_arc_next0.CrudActions<Review, CreateReviewPayload, UpdateReviewPayload>, useReviewNavigation: () => _classytic_arc_next0.NavigateFn<Review>;
|
|
16
|
+
declare function useMyReview(token: string | null | undefined, productId: string | null | undefined, options?: Omit<UseQueryOptions<ReviewResponse>, "queryKey" | "queryFn">): _tanstack_react_query0.UseQueryResult<ReviewResponse, Error>;
|
|
17
|
+
//#endregion
|
|
18
|
+
export { REVIEW_KEYS, reviewHooks, useMyReview, useReviewActions, useReviewDetail, useReviewNavigation, useReviews };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { createCrudHooks } from "../../core/react/crud.factory.js";
|
|
4
|
+
import { reviewApi } from "../api/review.js";
|
|
5
|
+
import { useQuery } from "@tanstack/react-query";
|
|
6
|
+
|
|
7
|
+
//#region src/catalog/hooks/review.ts
|
|
8
|
+
/**
|
|
9
|
+
* Review Hooks
|
|
10
|
+
*
|
|
11
|
+
* CRUD hooks + current user's review helper.
|
|
12
|
+
*/
|
|
13
|
+
const reviewHooks = createCrudHooks({
|
|
14
|
+
api: reviewApi,
|
|
15
|
+
entityKey: "reviews",
|
|
16
|
+
singular: "Review",
|
|
17
|
+
plural: "Reviews",
|
|
18
|
+
defaults: { staleTime: 300 * 1e3 }
|
|
19
|
+
});
|
|
20
|
+
const { KEYS: REVIEW_KEYS, useList: useReviews, useDetail: useReviewDetail, useActions: useReviewActions, useNavigation: useReviewNavigation } = reviewHooks;
|
|
21
|
+
function useMyReview(token, productId, options = {}) {
|
|
22
|
+
return useQuery({
|
|
23
|
+
queryKey: [
|
|
24
|
+
...REVIEW_KEYS.all,
|
|
25
|
+
"my",
|
|
26
|
+
productId
|
|
27
|
+
],
|
|
28
|
+
queryFn: () => reviewApi.getMyReview({
|
|
29
|
+
token,
|
|
30
|
+
productId
|
|
31
|
+
}),
|
|
32
|
+
enabled: Boolean(token && productId),
|
|
33
|
+
...options
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
//#endregion
|
|
38
|
+
export { REVIEW_KEYS, reviewHooks, useMyReview, useReviewActions, useReviewDetail, useReviewNavigation, useReviews };
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { ApiResponse } from "../../core/api-factory.js";
|
|
2
|
+
import { CreateSizeGuidePayload, SizeGuide, UpdateSizeGuidePayload } from "../types/size-guide.js";
|
|
3
|
+
import * as _tanstack_react_query0 from "@tanstack/react-query";
|
|
4
|
+
import { UseQueryOptions } from "@tanstack/react-query";
|
|
5
|
+
import * as _classytic_arc_next_query0 from "@classytic/arc-next/query";
|
|
6
|
+
import * as _classytic_arc_next0 from "@classytic/arc-next";
|
|
7
|
+
|
|
8
|
+
//#region src/catalog/hooks/size-guide.d.ts
|
|
9
|
+
/**
|
|
10
|
+
* Size Guide CRUD hooks
|
|
11
|
+
*/
|
|
12
|
+
declare const sizeGuideHooks: _classytic_arc_next0.CrudHooksReturn<SizeGuide, CreateSizeGuidePayload, UpdateSizeGuidePayload>;
|
|
13
|
+
declare const SIZE_GUIDE_KEYS: _classytic_arc_next_query0.QueryKeys, useSizeGuides: {
|
|
14
|
+
(params?: Record<string, unknown>, options?: _classytic_arc_next_query0.ListQueryOptions<SizeGuide> | undefined): _classytic_arc_next_query0.ListQueryResult<SizeGuide>;
|
|
15
|
+
(token: string | null, params?: Record<string, unknown>, options?: _classytic_arc_next_query0.ListQueryOptions<SizeGuide> | undefined): _classytic_arc_next_query0.ListQueryResult<SizeGuide>;
|
|
16
|
+
}, useSizeGuideDetail: {
|
|
17
|
+
(id: string | null, options?: _classytic_arc_next_query0.DetailQueryOptions<SizeGuide> | undefined): _classytic_arc_next_query0.DetailQueryResult<SizeGuide>;
|
|
18
|
+
(id: string | null, token: string | null, options?: _classytic_arc_next_query0.DetailQueryOptions<SizeGuide> | undefined): _classytic_arc_next_query0.DetailQueryResult<SizeGuide>;
|
|
19
|
+
}, useSizeGuideActions: () => _classytic_arc_next0.CrudActions<SizeGuide, CreateSizeGuidePayload, UpdateSizeGuidePayload>, useSizeGuideNavigation: () => _classytic_arc_next0.NavigateFn<SizeGuide>;
|
|
20
|
+
/**
|
|
21
|
+
* Hook to get size guide by slug
|
|
22
|
+
*
|
|
23
|
+
* @param token - Auth token (optional for public access)
|
|
24
|
+
* @param slug - Size guide slug
|
|
25
|
+
* @param options - React Query options
|
|
26
|
+
* @returns Query result with size guide data
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```tsx
|
|
30
|
+
* function SizeGuideDisplay({ slug }) {
|
|
31
|
+
* const { data, isLoading } = useSizeGuideBySlug(null, slug);
|
|
32
|
+
*
|
|
33
|
+
* if (isLoading) return <Spinner />;
|
|
34
|
+
*
|
|
35
|
+
* return (
|
|
36
|
+
* <div>
|
|
37
|
+
* <h2>{data?.data?.name}</h2>
|
|
38
|
+
* <SizeTable guide={data?.data} />
|
|
39
|
+
* </div>
|
|
40
|
+
* );
|
|
41
|
+
* }
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
declare function useSizeGuideBySlug(token: string | null | undefined, slug: string, options?: Omit<UseQueryOptions<ApiResponse<SizeGuide>>, "queryKey" | "queryFn">): _tanstack_react_query0.UseQueryResult<ApiResponse<SizeGuide>, Error>;
|
|
45
|
+
/**
|
|
46
|
+
* Format size guide as select options
|
|
47
|
+
*
|
|
48
|
+
* @param sizeGuides - Array of size guides
|
|
49
|
+
* @returns Options array with value/label for select inputs
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```tsx
|
|
53
|
+
* function SizeGuideSelect() {
|
|
54
|
+
* const { data } = useSizeGuides(token);
|
|
55
|
+
* const options = getSizeGuideOptions(data?.docs);
|
|
56
|
+
*
|
|
57
|
+
* return (
|
|
58
|
+
* <Select>
|
|
59
|
+
* {options.map(opt => (
|
|
60
|
+
* <SelectItem key={opt.value} value={opt.value}>
|
|
61
|
+
* {opt.label}
|
|
62
|
+
* </SelectItem>
|
|
63
|
+
* ))}
|
|
64
|
+
* </Select>
|
|
65
|
+
* );
|
|
66
|
+
* }
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
declare function getSizeGuideOptions(sizeGuides: SizeGuide[] | undefined): {
|
|
70
|
+
value: string;
|
|
71
|
+
label: string;
|
|
72
|
+
}[];
|
|
73
|
+
/**
|
|
74
|
+
* Get size guide by ID from a list
|
|
75
|
+
*
|
|
76
|
+
* @param sizeGuides - Array of size guides
|
|
77
|
+
* @param id - Size guide ID
|
|
78
|
+
* @returns Size guide or undefined
|
|
79
|
+
*/
|
|
80
|
+
declare function findSizeGuideById(sizeGuides: SizeGuide[] | undefined, id: string): SizeGuide | undefined;
|
|
81
|
+
/**
|
|
82
|
+
* Get size guide by slug from a list
|
|
83
|
+
*
|
|
84
|
+
* @param sizeGuides - Array of size guides
|
|
85
|
+
* @param slug - Size guide slug
|
|
86
|
+
* @returns Size guide or undefined
|
|
87
|
+
*/
|
|
88
|
+
declare function findSizeGuideBySlug(sizeGuides: SizeGuide[] | undefined, slug: string): SizeGuide | undefined;
|
|
89
|
+
/**
|
|
90
|
+
* Format measurement value with unit
|
|
91
|
+
*
|
|
92
|
+
* @param value - Measurement value
|
|
93
|
+
* @param unit - Measurement unit ('inches' or 'cm')
|
|
94
|
+
* @returns Formatted measurement string
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```typescript
|
|
98
|
+
* formatMeasurement("34-36", "inches") // "34-36 in"
|
|
99
|
+
* formatMeasurement("88", "cm") // "88 cm"
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
declare function formatMeasurement(value: string, unit: 'inches' | 'cm'): string;
|
|
103
|
+
/**
|
|
104
|
+
* Get measurement labels as table headers
|
|
105
|
+
*
|
|
106
|
+
* @param guide - Size guide object
|
|
107
|
+
* @returns Array of header labels including "Size" as first column
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* ```typescript
|
|
111
|
+
* const headers = getSizeTableHeaders(sizeGuide);
|
|
112
|
+
* // ["Size", "Chest", "Length", "Shoulder"]
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
115
|
+
declare function getSizeTableHeaders(guide: SizeGuide | undefined): string[];
|
|
116
|
+
/**
|
|
117
|
+
* Get size table rows
|
|
118
|
+
*
|
|
119
|
+
* @param guide - Size guide object
|
|
120
|
+
* @returns Array of row data with size name and measurements
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```typescript
|
|
124
|
+
* const rows = getSizeTableRows(sizeGuide);
|
|
125
|
+
* // [
|
|
126
|
+
* // { name: "S", measurements: { chest: "34-36", length: "28" } },
|
|
127
|
+
* // { name: "M", measurements: { chest: "38-40", length: "29" } },
|
|
128
|
+
* // ]
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
declare function getSizeTableRows(guide: SizeGuide | undefined): Array<{
|
|
132
|
+
name: string;
|
|
133
|
+
measurements: Record<string, string>;
|
|
134
|
+
}>;
|
|
135
|
+
//#endregion
|
|
136
|
+
export { SIZE_GUIDE_KEYS, findSizeGuideById, findSizeGuideBySlug, formatMeasurement, getSizeGuideOptions, getSizeTableHeaders, getSizeTableRows, sizeGuideHooks, useSizeGuideActions, useSizeGuideBySlug, useSizeGuideDetail, useSizeGuideNavigation, useSizeGuides };
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { createCrudHooks } from "../../core/react/crud.factory.js";
|
|
4
|
+
import { sizeGuideApi } from "../api/size-guide.js";
|
|
5
|
+
import { useQuery } from "@tanstack/react-query";
|
|
6
|
+
|
|
7
|
+
//#region src/catalog/hooks/size-guide.ts
|
|
8
|
+
/**
|
|
9
|
+
* Size Guide Hooks
|
|
10
|
+
*
|
|
11
|
+
* Pre-built hooks for size guide CRUD operations with:
|
|
12
|
+
* - Optimistic updates
|
|
13
|
+
* - Smart caching
|
|
14
|
+
* - Type safety
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Size Guide CRUD hooks
|
|
18
|
+
*/
|
|
19
|
+
const sizeGuideHooks = createCrudHooks({
|
|
20
|
+
api: sizeGuideApi,
|
|
21
|
+
entityKey: "size-guides",
|
|
22
|
+
singular: "Size Guide",
|
|
23
|
+
plural: "Size Guides",
|
|
24
|
+
defaults: { staleTime: 1800 * 1e3 }
|
|
25
|
+
});
|
|
26
|
+
const { KEYS: SIZE_GUIDE_KEYS, useList: useSizeGuides, useDetail: useSizeGuideDetail, useActions: useSizeGuideActions, useNavigation: useSizeGuideNavigation } = sizeGuideHooks;
|
|
27
|
+
/**
|
|
28
|
+
* Hook to get size guide by slug
|
|
29
|
+
*
|
|
30
|
+
* @param token - Auth token (optional for public access)
|
|
31
|
+
* @param slug - Size guide slug
|
|
32
|
+
* @param options - React Query options
|
|
33
|
+
* @returns Query result with size guide data
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```tsx
|
|
37
|
+
* function SizeGuideDisplay({ slug }) {
|
|
38
|
+
* const { data, isLoading } = useSizeGuideBySlug(null, slug);
|
|
39
|
+
*
|
|
40
|
+
* if (isLoading) return <Spinner />;
|
|
41
|
+
*
|
|
42
|
+
* return (
|
|
43
|
+
* <div>
|
|
44
|
+
* <h2>{data?.data?.name}</h2>
|
|
45
|
+
* <SizeTable guide={data?.data} />
|
|
46
|
+
* </div>
|
|
47
|
+
* );
|
|
48
|
+
* }
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
function useSizeGuideBySlug(token, slug, options = {}) {
|
|
52
|
+
return useQuery({
|
|
53
|
+
queryKey: [
|
|
54
|
+
...SIZE_GUIDE_KEYS.all,
|
|
55
|
+
"slug",
|
|
56
|
+
slug
|
|
57
|
+
],
|
|
58
|
+
queryFn: () => sizeGuideApi.getBySlug({
|
|
59
|
+
token,
|
|
60
|
+
slug
|
|
61
|
+
}),
|
|
62
|
+
enabled: !!slug,
|
|
63
|
+
staleTime: 1800 * 1e3,
|
|
64
|
+
...options
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Format size guide as select options
|
|
69
|
+
*
|
|
70
|
+
* @param sizeGuides - Array of size guides
|
|
71
|
+
* @returns Options array with value/label for select inputs
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```tsx
|
|
75
|
+
* function SizeGuideSelect() {
|
|
76
|
+
* const { data } = useSizeGuides(token);
|
|
77
|
+
* const options = getSizeGuideOptions(data?.docs);
|
|
78
|
+
*
|
|
79
|
+
* return (
|
|
80
|
+
* <Select>
|
|
81
|
+
* {options.map(opt => (
|
|
82
|
+
* <SelectItem key={opt.value} value={opt.value}>
|
|
83
|
+
* {opt.label}
|
|
84
|
+
* </SelectItem>
|
|
85
|
+
* ))}
|
|
86
|
+
* </Select>
|
|
87
|
+
* );
|
|
88
|
+
* }
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
function getSizeGuideOptions(sizeGuides) {
|
|
92
|
+
return (sizeGuides || []).map((guide) => ({
|
|
93
|
+
value: guide._id,
|
|
94
|
+
label: guide.name
|
|
95
|
+
}));
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get size guide by ID from a list
|
|
99
|
+
*
|
|
100
|
+
* @param sizeGuides - Array of size guides
|
|
101
|
+
* @param id - Size guide ID
|
|
102
|
+
* @returns Size guide or undefined
|
|
103
|
+
*/
|
|
104
|
+
function findSizeGuideById(sizeGuides, id) {
|
|
105
|
+
return sizeGuides?.find((guide) => guide._id === id);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Get size guide by slug from a list
|
|
109
|
+
*
|
|
110
|
+
* @param sizeGuides - Array of size guides
|
|
111
|
+
* @param slug - Size guide slug
|
|
112
|
+
* @returns Size guide or undefined
|
|
113
|
+
*/
|
|
114
|
+
function findSizeGuideBySlug(sizeGuides, slug) {
|
|
115
|
+
return sizeGuides?.find((guide) => guide.slug === slug);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Format measurement value with unit
|
|
119
|
+
*
|
|
120
|
+
* @param value - Measurement value
|
|
121
|
+
* @param unit - Measurement unit ('inches' or 'cm')
|
|
122
|
+
* @returns Formatted measurement string
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* ```typescript
|
|
126
|
+
* formatMeasurement("34-36", "inches") // "34-36 in"
|
|
127
|
+
* formatMeasurement("88", "cm") // "88 cm"
|
|
128
|
+
* ```
|
|
129
|
+
*/
|
|
130
|
+
function formatMeasurement(value, unit) {
|
|
131
|
+
return `${value} ${unit === "inches" ? "in" : "cm"}`;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Get measurement labels as table headers
|
|
135
|
+
*
|
|
136
|
+
* @param guide - Size guide object
|
|
137
|
+
* @returns Array of header labels including "Size" as first column
|
|
138
|
+
*
|
|
139
|
+
* @example
|
|
140
|
+
* ```typescript
|
|
141
|
+
* const headers = getSizeTableHeaders(sizeGuide);
|
|
142
|
+
* // ["Size", "Chest", "Length", "Shoulder"]
|
|
143
|
+
* ```
|
|
144
|
+
*/
|
|
145
|
+
function getSizeTableHeaders(guide) {
|
|
146
|
+
if (!guide?.measurementLabels) return ["Size"];
|
|
147
|
+
return ["Size", ...guide.measurementLabels];
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Get size table rows
|
|
151
|
+
*
|
|
152
|
+
* @param guide - Size guide object
|
|
153
|
+
* @returns Array of row data with size name and measurements
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* ```typescript
|
|
157
|
+
* const rows = getSizeTableRows(sizeGuide);
|
|
158
|
+
* // [
|
|
159
|
+
* // { name: "S", measurements: { chest: "34-36", length: "28" } },
|
|
160
|
+
* // { name: "M", measurements: { chest: "38-40", length: "29" } },
|
|
161
|
+
* // ]
|
|
162
|
+
* ```
|
|
163
|
+
*/
|
|
164
|
+
function getSizeTableRows(guide) {
|
|
165
|
+
if (!guide?.sizes) return [];
|
|
166
|
+
return guide.sizes.map((size) => ({
|
|
167
|
+
name: size.name,
|
|
168
|
+
measurements: size.measurements
|
|
169
|
+
}));
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
//#endregion
|
|
173
|
+
export { SIZE_GUIDE_KEYS, findSizeGuideById, findSizeGuideBySlug, formatMeasurement, getSizeGuideOptions, getSizeTableHeaders, getSizeTableRows, sizeGuideHooks, useSizeGuideActions, useSizeGuideBySlug, useSizeGuideDetail, useSizeGuideNavigation, useSizeGuides };
|