@classytic/commerce-sdk 0.1.1 → 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 +187 -74
- 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 -587
- 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-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-ANYGZ6O5.js +0 -830
- package/dist/chunk-ANYGZ6O5.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-J4JBQET2.js +0 -76
- package/dist/chunk-J4JBQET2.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-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-Cs7E_usr.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-CrpKadKE.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-B3dCvHgK.d.ts +0 -360
- 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-BCqkx2-K.d.ts +0 -527
- 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,201 @@
|
|
|
1
|
+
import { ApiResponse } from "../../core/api-factory.js";
|
|
2
|
+
import { Category, CategoryTreeNode, CategoryTreeResponse, CreateCategoryPayload, UpdateCategoryPayload } from "../types/category.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/category.d.ts
|
|
9
|
+
interface FlattenedNode extends CategoryTreeNode {
|
|
10
|
+
depth: number;
|
|
11
|
+
displayName: string;
|
|
12
|
+
}
|
|
13
|
+
interface SelectOption {
|
|
14
|
+
value: string;
|
|
15
|
+
label: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Category CRUD hooks
|
|
19
|
+
*/
|
|
20
|
+
declare const categoryHooks: _classytic_arc_next0.CrudHooksReturn<Category, CreateCategoryPayload, UpdateCategoryPayload>;
|
|
21
|
+
declare const CATEGORY_KEYS: _classytic_arc_next_query0.QueryKeys, useCategories: {
|
|
22
|
+
(params?: Record<string, unknown>, options?: _classytic_arc_next_query0.ListQueryOptions<Category> | undefined): _classytic_arc_next_query0.ListQueryResult<Category>;
|
|
23
|
+
(token: string | null, params?: Record<string, unknown>, options?: _classytic_arc_next_query0.ListQueryOptions<Category> | undefined): _classytic_arc_next_query0.ListQueryResult<Category>;
|
|
24
|
+
}, useCategoryDetail: {
|
|
25
|
+
(id: string | null, options?: _classytic_arc_next_query0.DetailQueryOptions<Category> | undefined): _classytic_arc_next_query0.DetailQueryResult<Category>;
|
|
26
|
+
(id: string | null, token: string | null, options?: _classytic_arc_next_query0.DetailQueryOptions<Category> | undefined): _classytic_arc_next_query0.DetailQueryResult<Category>;
|
|
27
|
+
}, useCategoryActions: () => _classytic_arc_next0.CrudActions<Category, CreateCategoryPayload, UpdateCategoryPayload>, useCategoryNavigation: () => _classytic_arc_next0.NavigateFn<Category>;
|
|
28
|
+
/**
|
|
29
|
+
* Hook to get category tree (nested structure)
|
|
30
|
+
* FE should cache this and derive everything else from it
|
|
31
|
+
*
|
|
32
|
+
* @param token - Auth token (optional for public access)
|
|
33
|
+
* @param options - React Query options
|
|
34
|
+
* @returns Query result with tree data
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```tsx
|
|
38
|
+
* function CategoryNav() {
|
|
39
|
+
* const { data, isLoading } = useCategoryTree(token);
|
|
40
|
+
*
|
|
41
|
+
* if (isLoading) return <Spinner />;
|
|
42
|
+
*
|
|
43
|
+
* return (
|
|
44
|
+
* <nav>
|
|
45
|
+
* {data?.data?.map(category => (
|
|
46
|
+
* <CategoryItem key={category.slug} category={category} />
|
|
47
|
+
* ))}
|
|
48
|
+
* </nav>
|
|
49
|
+
* );
|
|
50
|
+
* }
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
declare function useCategoryTree(token?: string | null, options?: Omit<UseQueryOptions<CategoryTreeResponse>, "queryKey" | "queryFn">): _tanstack_react_query0.UseQueryResult<CategoryTreeResponse, Error>;
|
|
54
|
+
/**
|
|
55
|
+
* Hook to get category by slug
|
|
56
|
+
*
|
|
57
|
+
* @param token - Auth token (optional for public access)
|
|
58
|
+
* @param slug - Category slug
|
|
59
|
+
* @param options - React Query options
|
|
60
|
+
* @returns Query result with category data
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```tsx
|
|
64
|
+
* function CategoryPage({ slug }) {
|
|
65
|
+
* const { data, isLoading } = useCategoryBySlug(token, slug);
|
|
66
|
+
*
|
|
67
|
+
* if (isLoading) return <Spinner />;
|
|
68
|
+
*
|
|
69
|
+
* return <h1>{data?.data?.name}</h1>;
|
|
70
|
+
* }
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
declare function useCategoryBySlug(token: string | null | undefined, slug: string, options?: Omit<UseQueryOptions<ApiResponse<Category>>, "queryKey" | "queryFn">): _tanstack_react_query0.UseQueryResult<ApiResponse<Category>, Error>;
|
|
74
|
+
/**
|
|
75
|
+
* Hook to sync product counts for all categories
|
|
76
|
+
* POST /categories/sync-product-count
|
|
77
|
+
*
|
|
78
|
+
* Use when manual data fixes or migrations may have desynced counts.
|
|
79
|
+
*
|
|
80
|
+
* @param token - Auth token (admin or inventory staff required)
|
|
81
|
+
* @returns Mutation result with sync function
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```tsx
|
|
85
|
+
* function AdminPanel() {
|
|
86
|
+
* const { mutate: sync, isPending } = useCategorySyncProductCount(token);
|
|
87
|
+
*
|
|
88
|
+
* return (
|
|
89
|
+
* <Button onClick={() => sync()} disabled={isPending}>
|
|
90
|
+
* Sync Product Counts
|
|
91
|
+
* </Button>
|
|
92
|
+
* );
|
|
93
|
+
* }
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
declare function useCategorySyncProductCount(token: string): _tanstack_react_query0.UseMutationResult<ApiResponse<{
|
|
97
|
+
updated: number;
|
|
98
|
+
}>, Error, void, unknown>;
|
|
99
|
+
/**
|
|
100
|
+
* Flatten category tree with depth indicator
|
|
101
|
+
* Useful for building hierarchical selects
|
|
102
|
+
*
|
|
103
|
+
* @param nodes - Category tree nodes
|
|
104
|
+
* @param depth - Current depth (used recursively)
|
|
105
|
+
* @param result - Accumulator array (used recursively)
|
|
106
|
+
* @returns Flattened array with depth and displayName
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* ```typescript
|
|
110
|
+
* const { data } = useCategoryTree(token);
|
|
111
|
+
* const flat = flattenCategoryTree(data?.data);
|
|
112
|
+
* // flat = [
|
|
113
|
+
* // { slug: 'clothing', displayName: 'Clothing', depth: 0, ... },
|
|
114
|
+
* // { slug: 't-shirts', displayName: ' T-Shirts', depth: 1, ... },
|
|
115
|
+
* // ]
|
|
116
|
+
* ```
|
|
117
|
+
*/
|
|
118
|
+
declare function flattenCategoryTree(nodes: CategoryTreeNode[] | undefined, depth?: number, result?: FlattenedNode[]): FlattenedNode[];
|
|
119
|
+
/**
|
|
120
|
+
* Build parent category options for select (root categories only)
|
|
121
|
+
*
|
|
122
|
+
* @param tree - Category tree from useCategoryTree
|
|
123
|
+
* @returns Options array with value/label for select inputs
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* ```tsx
|
|
127
|
+
* function ParentSelect() {
|
|
128
|
+
* const { data } = useCategoryTree(token);
|
|
129
|
+
* const options = getParentCategoryOptions(data?.data);
|
|
130
|
+
*
|
|
131
|
+
* return (
|
|
132
|
+
* <Select>
|
|
133
|
+
* {options.map(opt => (
|
|
134
|
+
* <SelectItem key={opt.value} value={opt.value}>
|
|
135
|
+
* {opt.label}
|
|
136
|
+
* </SelectItem>
|
|
137
|
+
* ))}
|
|
138
|
+
* </Select>
|
|
139
|
+
* );
|
|
140
|
+
* }
|
|
141
|
+
* ```
|
|
142
|
+
*/
|
|
143
|
+
declare function getParentCategoryOptions(tree: CategoryTreeNode[] | undefined): SelectOption[];
|
|
144
|
+
/**
|
|
145
|
+
* Build all category options for select (flattened with hierarchy)
|
|
146
|
+
*
|
|
147
|
+
* @param tree - Category tree from useCategoryTree
|
|
148
|
+
* @returns Options array with value/label showing hierarchy
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* ```tsx
|
|
152
|
+
* function CategorySelect() {
|
|
153
|
+
* const { data } = useCategoryTree(token);
|
|
154
|
+
* const options = getAllCategoryOptions(data?.data);
|
|
155
|
+
*
|
|
156
|
+
* return (
|
|
157
|
+
* <Select>
|
|
158
|
+
* {options.map(opt => (
|
|
159
|
+
* <SelectItem key={opt.value} value={opt.value}>
|
|
160
|
+
* {opt.label}
|
|
161
|
+
* </SelectItem>
|
|
162
|
+
* ))}
|
|
163
|
+
* </Select>
|
|
164
|
+
* );
|
|
165
|
+
* }
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
declare function getAllCategoryOptions(tree: CategoryTreeNode[] | undefined): SelectOption[];
|
|
169
|
+
/**
|
|
170
|
+
* Find a category in the tree by slug
|
|
171
|
+
*
|
|
172
|
+
* @param tree - Category tree nodes
|
|
173
|
+
* @param slug - Category slug to find
|
|
174
|
+
* @returns Category node or undefined
|
|
175
|
+
*/
|
|
176
|
+
declare function findCategoryBySlug(tree: CategoryTreeNode[] | undefined, slug: string): CategoryTreeNode | undefined;
|
|
177
|
+
/**
|
|
178
|
+
* Get breadcrumb path for a category
|
|
179
|
+
*
|
|
180
|
+
* @param tree - Category tree nodes
|
|
181
|
+
* @param slug - Category slug
|
|
182
|
+
* @returns Array of categories from root to target
|
|
183
|
+
*/
|
|
184
|
+
declare function getCategoryBreadcrumb(tree: CategoryTreeNode[] | undefined, slug: string): CategoryTreeNode[];
|
|
185
|
+
/**
|
|
186
|
+
* Get all children slugs for a category (recursive)
|
|
187
|
+
*
|
|
188
|
+
* @param tree - Category tree nodes
|
|
189
|
+
* @param parentSlug - Parent category slug
|
|
190
|
+
* @returns Array of child category slugs
|
|
191
|
+
*/
|
|
192
|
+
declare function getChildCategorySlugs(tree: CategoryTreeNode[] | undefined, parentSlug: string): string[];
|
|
193
|
+
/**
|
|
194
|
+
* Get root categories only
|
|
195
|
+
*
|
|
196
|
+
* @param tree - Category tree nodes
|
|
197
|
+
* @returns Array of root category nodes
|
|
198
|
+
*/
|
|
199
|
+
declare function getRootCategories(tree: CategoryTreeNode[] | undefined): CategoryTreeNode[];
|
|
200
|
+
//#endregion
|
|
201
|
+
export { CATEGORY_KEYS, categoryHooks, findCategoryBySlug, flattenCategoryTree, getAllCategoryOptions, getCategoryBreadcrumb, getChildCategorySlugs, getParentCategoryOptions, getRootCategories, useCategories, useCategoryActions, useCategoryBySlug, useCategoryDetail, useCategoryNavigation, useCategorySyncProductCount, useCategoryTree };
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { getToastHandler } from "../../core/react/mutation.factory.js";
|
|
4
|
+
import { createCrudHooks } from "../../core/react/crud.factory.js";
|
|
5
|
+
import { categoryApi } from "../api/category.js";
|
|
6
|
+
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
7
|
+
|
|
8
|
+
//#region src/catalog/hooks/category.ts
|
|
9
|
+
/**
|
|
10
|
+
* Category Hooks
|
|
11
|
+
*
|
|
12
|
+
* Pre-built hooks for category CRUD operations with:
|
|
13
|
+
* - Category tree support
|
|
14
|
+
* - Optimistic updates
|
|
15
|
+
* - Smart caching
|
|
16
|
+
* - Type safety
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Category CRUD hooks
|
|
20
|
+
*/
|
|
21
|
+
const categoryHooks = createCrudHooks({
|
|
22
|
+
api: categoryApi,
|
|
23
|
+
entityKey: "categories",
|
|
24
|
+
singular: "Category",
|
|
25
|
+
plural: "Categories",
|
|
26
|
+
defaults: { staleTime: 600 * 1e3 }
|
|
27
|
+
});
|
|
28
|
+
const { KEYS: CATEGORY_KEYS, useList: useCategories, useDetail: useCategoryDetail, useActions: useCategoryActions, useNavigation: useCategoryNavigation } = categoryHooks;
|
|
29
|
+
/**
|
|
30
|
+
* Hook to get category tree (nested structure)
|
|
31
|
+
* FE should cache this and derive everything else from it
|
|
32
|
+
*
|
|
33
|
+
* @param token - Auth token (optional for public access)
|
|
34
|
+
* @param options - React Query options
|
|
35
|
+
* @returns Query result with tree data
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```tsx
|
|
39
|
+
* function CategoryNav() {
|
|
40
|
+
* const { data, isLoading } = useCategoryTree(token);
|
|
41
|
+
*
|
|
42
|
+
* if (isLoading) return <Spinner />;
|
|
43
|
+
*
|
|
44
|
+
* return (
|
|
45
|
+
* <nav>
|
|
46
|
+
* {data?.data?.map(category => (
|
|
47
|
+
* <CategoryItem key={category.slug} category={category} />
|
|
48
|
+
* ))}
|
|
49
|
+
* </nav>
|
|
50
|
+
* );
|
|
51
|
+
* }
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
function useCategoryTree(token, options = {}) {
|
|
55
|
+
return useQuery({
|
|
56
|
+
queryKey: [...CATEGORY_KEYS.all, "tree"],
|
|
57
|
+
queryFn: () => categoryApi.getTree({ token }),
|
|
58
|
+
staleTime: 1800 * 1e3,
|
|
59
|
+
gcTime: 3600 * 1e3,
|
|
60
|
+
...options
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Hook to get category by slug
|
|
65
|
+
*
|
|
66
|
+
* @param token - Auth token (optional for public access)
|
|
67
|
+
* @param slug - Category slug
|
|
68
|
+
* @param options - React Query options
|
|
69
|
+
* @returns Query result with category data
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```tsx
|
|
73
|
+
* function CategoryPage({ slug }) {
|
|
74
|
+
* const { data, isLoading } = useCategoryBySlug(token, slug);
|
|
75
|
+
*
|
|
76
|
+
* if (isLoading) return <Spinner />;
|
|
77
|
+
*
|
|
78
|
+
* return <h1>{data?.data?.name}</h1>;
|
|
79
|
+
* }
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
function useCategoryBySlug(token, slug, options = {}) {
|
|
83
|
+
return useQuery({
|
|
84
|
+
queryKey: [
|
|
85
|
+
...CATEGORY_KEYS.all,
|
|
86
|
+
"slug",
|
|
87
|
+
slug
|
|
88
|
+
],
|
|
89
|
+
queryFn: () => categoryApi.getBySlug({
|
|
90
|
+
token,
|
|
91
|
+
slug
|
|
92
|
+
}),
|
|
93
|
+
enabled: !!slug,
|
|
94
|
+
staleTime: 1800 * 1e3,
|
|
95
|
+
...options
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Hook to sync product counts for all categories
|
|
100
|
+
* POST /categories/sync-product-count
|
|
101
|
+
*
|
|
102
|
+
* Use when manual data fixes or migrations may have desynced counts.
|
|
103
|
+
*
|
|
104
|
+
* @param token - Auth token (admin or inventory staff required)
|
|
105
|
+
* @returns Mutation result with sync function
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```tsx
|
|
109
|
+
* function AdminPanel() {
|
|
110
|
+
* const { mutate: sync, isPending } = useCategorySyncProductCount(token);
|
|
111
|
+
*
|
|
112
|
+
* return (
|
|
113
|
+
* <Button onClick={() => sync()} disabled={isPending}>
|
|
114
|
+
* Sync Product Counts
|
|
115
|
+
* </Button>
|
|
116
|
+
* );
|
|
117
|
+
* }
|
|
118
|
+
* ```
|
|
119
|
+
*/
|
|
120
|
+
function useCategorySyncProductCount(token) {
|
|
121
|
+
const queryClient = useQueryClient();
|
|
122
|
+
const toast = getToastHandler();
|
|
123
|
+
return useMutation({
|
|
124
|
+
mutationFn: () => categoryApi.syncProductCount({ token }),
|
|
125
|
+
onSuccess: (result) => {
|
|
126
|
+
const count = result?.data?.updated ?? 0;
|
|
127
|
+
toast.success(`Synced product counts for ${count} categories`);
|
|
128
|
+
queryClient.invalidateQueries({ queryKey: CATEGORY_KEYS.all });
|
|
129
|
+
},
|
|
130
|
+
onError: (error) => {
|
|
131
|
+
toast.error(error.message || "Failed to sync product counts");
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Flatten category tree with depth indicator
|
|
137
|
+
* Useful for building hierarchical selects
|
|
138
|
+
*
|
|
139
|
+
* @param nodes - Category tree nodes
|
|
140
|
+
* @param depth - Current depth (used recursively)
|
|
141
|
+
* @param result - Accumulator array (used recursively)
|
|
142
|
+
* @returns Flattened array with depth and displayName
|
|
143
|
+
*
|
|
144
|
+
* @example
|
|
145
|
+
* ```typescript
|
|
146
|
+
* const { data } = useCategoryTree(token);
|
|
147
|
+
* const flat = flattenCategoryTree(data?.data);
|
|
148
|
+
* // flat = [
|
|
149
|
+
* // { slug: 'clothing', displayName: 'Clothing', depth: 0, ... },
|
|
150
|
+
* // { slug: 't-shirts', displayName: ' T-Shirts', depth: 1, ... },
|
|
151
|
+
* // ]
|
|
152
|
+
* ```
|
|
153
|
+
*/
|
|
154
|
+
function flattenCategoryTree(nodes, depth = 0, result = []) {
|
|
155
|
+
for (const node of nodes || []) {
|
|
156
|
+
result.push({
|
|
157
|
+
...node,
|
|
158
|
+
depth,
|
|
159
|
+
displayName: "\xA0\xA0".repeat(depth) + node.name
|
|
160
|
+
});
|
|
161
|
+
if (node.children?.length) flattenCategoryTree(node.children, depth + 1, result);
|
|
162
|
+
}
|
|
163
|
+
return result;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Build parent category options for select (root categories only)
|
|
167
|
+
*
|
|
168
|
+
* @param tree - Category tree from useCategoryTree
|
|
169
|
+
* @returns Options array with value/label for select inputs
|
|
170
|
+
*
|
|
171
|
+
* @example
|
|
172
|
+
* ```tsx
|
|
173
|
+
* function ParentSelect() {
|
|
174
|
+
* const { data } = useCategoryTree(token);
|
|
175
|
+
* const options = getParentCategoryOptions(data?.data);
|
|
176
|
+
*
|
|
177
|
+
* return (
|
|
178
|
+
* <Select>
|
|
179
|
+
* {options.map(opt => (
|
|
180
|
+
* <SelectItem key={opt.value} value={opt.value}>
|
|
181
|
+
* {opt.label}
|
|
182
|
+
* </SelectItem>
|
|
183
|
+
* ))}
|
|
184
|
+
* </Select>
|
|
185
|
+
* );
|
|
186
|
+
* }
|
|
187
|
+
* ```
|
|
188
|
+
*/
|
|
189
|
+
function getParentCategoryOptions(tree) {
|
|
190
|
+
return (tree || []).map((node) => ({
|
|
191
|
+
value: node.slug,
|
|
192
|
+
label: node.name
|
|
193
|
+
}));
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Build all category options for select (flattened with hierarchy)
|
|
197
|
+
*
|
|
198
|
+
* @param tree - Category tree from useCategoryTree
|
|
199
|
+
* @returns Options array with value/label showing hierarchy
|
|
200
|
+
*
|
|
201
|
+
* @example
|
|
202
|
+
* ```tsx
|
|
203
|
+
* function CategorySelect() {
|
|
204
|
+
* const { data } = useCategoryTree(token);
|
|
205
|
+
* const options = getAllCategoryOptions(data?.data);
|
|
206
|
+
*
|
|
207
|
+
* return (
|
|
208
|
+
* <Select>
|
|
209
|
+
* {options.map(opt => (
|
|
210
|
+
* <SelectItem key={opt.value} value={opt.value}>
|
|
211
|
+
* {opt.label}
|
|
212
|
+
* </SelectItem>
|
|
213
|
+
* ))}
|
|
214
|
+
* </Select>
|
|
215
|
+
* );
|
|
216
|
+
* }
|
|
217
|
+
* ```
|
|
218
|
+
*/
|
|
219
|
+
function getAllCategoryOptions(tree) {
|
|
220
|
+
return flattenCategoryTree(tree).map((node) => ({
|
|
221
|
+
value: node.slug,
|
|
222
|
+
label: node.displayName
|
|
223
|
+
}));
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Find a category in the tree by slug
|
|
227
|
+
*
|
|
228
|
+
* @param tree - Category tree nodes
|
|
229
|
+
* @param slug - Category slug to find
|
|
230
|
+
* @returns Category node or undefined
|
|
231
|
+
*/
|
|
232
|
+
function findCategoryBySlug(tree, slug) {
|
|
233
|
+
if (!tree || !slug) return void 0;
|
|
234
|
+
for (const node of tree) {
|
|
235
|
+
if (node.slug === slug) return node;
|
|
236
|
+
if (node.children?.length) {
|
|
237
|
+
const found = findCategoryBySlug(node.children, slug);
|
|
238
|
+
if (found) return found;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Get breadcrumb path for a category
|
|
244
|
+
*
|
|
245
|
+
* @param tree - Category tree nodes
|
|
246
|
+
* @param slug - Category slug
|
|
247
|
+
* @returns Array of categories from root to target
|
|
248
|
+
*/
|
|
249
|
+
function getCategoryBreadcrumb(tree, slug) {
|
|
250
|
+
if (!tree || !slug) return [];
|
|
251
|
+
function findPath(nodes, target, path = []) {
|
|
252
|
+
for (const node of nodes) {
|
|
253
|
+
const currentPath = [...path, node];
|
|
254
|
+
if (node.slug === target) return currentPath;
|
|
255
|
+
if (node.children?.length) {
|
|
256
|
+
const found = findPath(node.children, target, currentPath);
|
|
257
|
+
if (found) return found;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
return findPath(tree, slug) || [];
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Get all children slugs for a category (recursive)
|
|
266
|
+
*
|
|
267
|
+
* @param tree - Category tree nodes
|
|
268
|
+
* @param parentSlug - Parent category slug
|
|
269
|
+
* @returns Array of child category slugs
|
|
270
|
+
*/
|
|
271
|
+
function getChildCategorySlugs(tree, parentSlug) {
|
|
272
|
+
const parent = findCategoryBySlug(tree, parentSlug);
|
|
273
|
+
if (!parent?.children?.length) return [];
|
|
274
|
+
const slugs = [];
|
|
275
|
+
function collectSlugs(nodes) {
|
|
276
|
+
for (const node of nodes) {
|
|
277
|
+
slugs.push(node.slug);
|
|
278
|
+
if (node.children?.length) collectSlugs(node.children);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
collectSlugs(parent.children);
|
|
282
|
+
return slugs;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Get root categories only
|
|
286
|
+
*
|
|
287
|
+
* @param tree - Category tree nodes
|
|
288
|
+
* @returns Array of root category nodes
|
|
289
|
+
*/
|
|
290
|
+
function getRootCategories(tree) {
|
|
291
|
+
return tree || [];
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
//#endregion
|
|
295
|
+
export { CATEGORY_KEYS, categoryHooks, findCategoryBySlug, flattenCategoryTree, getAllCategoryOptions, getCategoryBreadcrumb, getChildCategorySlugs, getParentCategoryOptions, getRootCategories, useCategories, useCategoryActions, useCategoryBySlug, useCategoryDetail, useCategoryNavigation, useCategorySyncProductCount, useCategoryTree };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { PRODUCT_KEYS, UseProductRecommendationsReturn, productHooks, useDeletedProducts, useHardDeleteProduct, useProductActions, useProductBySlug, useProductDetail, useProductNavigation, useProductRecommendations, useProducts, useRestoreProduct, useSyncProductStock } from "./product.js";
|
|
2
|
+
import { CATEGORY_KEYS, categoryHooks, findCategoryBySlug, flattenCategoryTree, getAllCategoryOptions, getCategoryBreadcrumb, getChildCategorySlugs, getParentCategoryOptions, getRootCategories, useCategories, useCategoryActions, useCategoryBySlug, useCategoryDetail, useCategoryNavigation, useCategorySyncProductCount, useCategoryTree } from "./category.js";
|
|
3
|
+
import { SIZE_GUIDE_KEYS, findSizeGuideById, findSizeGuideBySlug, formatMeasurement, getSizeGuideOptions, getSizeTableHeaders, getSizeTableRows, sizeGuideHooks, useSizeGuideActions, useSizeGuideBySlug, useSizeGuideDetail, useSizeGuideNavigation, useSizeGuides } from "./size-guide.js";
|
|
4
|
+
import { REVIEW_KEYS, reviewHooks, useMyReview, useReviewActions, useReviewDetail, useReviewNavigation, useReviews } from "./review.js";
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { ApiResponse, PaginatedResponse } from "../../core/api-factory.js";
|
|
2
|
+
import { CreateProductPayload, Product, ProductSyncStockResponse, UpdateProductPayload } from "../types/product.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/product.d.ts
|
|
9
|
+
/**
|
|
10
|
+
* Product CRUD hooks with optimistic updates
|
|
11
|
+
*/
|
|
12
|
+
declare const productHooks: _classytic_arc_next0.CrudHooksReturn<Product, CreateProductPayload, UpdateProductPayload>;
|
|
13
|
+
declare const PRODUCT_KEYS: _classytic_arc_next_query0.QueryKeys, useProducts: {
|
|
14
|
+
(params?: Record<string, unknown>, options?: _classytic_arc_next_query0.ListQueryOptions<Product> | undefined): _classytic_arc_next_query0.ListQueryResult<Product>;
|
|
15
|
+
(token: string | null, params?: Record<string, unknown>, options?: _classytic_arc_next_query0.ListQueryOptions<Product> | undefined): _classytic_arc_next_query0.ListQueryResult<Product>;
|
|
16
|
+
}, useProductDetail: {
|
|
17
|
+
(id: string | null, options?: _classytic_arc_next_query0.DetailQueryOptions<Product> | undefined): _classytic_arc_next_query0.DetailQueryResult<Product>;
|
|
18
|
+
(id: string | null, token: string | null, options?: _classytic_arc_next_query0.DetailQueryOptions<Product> | undefined): _classytic_arc_next_query0.DetailQueryResult<Product>;
|
|
19
|
+
}, useProductActions: () => _classytic_arc_next0.CrudActions<Product, CreateProductPayload, UpdateProductPayload>, useProductNavigation: () => _classytic_arc_next0.NavigateFn<Product>;
|
|
20
|
+
/**
|
|
21
|
+
* Hook to get product by slug
|
|
22
|
+
*
|
|
23
|
+
* @param token - Auth token (optional for public access)
|
|
24
|
+
* @param slug - Product slug
|
|
25
|
+
* @param options - React Query options
|
|
26
|
+
* @returns Query result with product data
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```tsx
|
|
30
|
+
* function ProductPage({ slug }) {
|
|
31
|
+
* const { data, isLoading } = useProductBySlug(null, slug);
|
|
32
|
+
*
|
|
33
|
+
* if (isLoading) return <Spinner />;
|
|
34
|
+
*
|
|
35
|
+
* return <h1>{data?.data?.name}</h1>;
|
|
36
|
+
* }
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
declare function useProductBySlug(token: string | null | undefined, slug: string, options?: Omit<UseQueryOptions<ApiResponse<Product>>, "queryKey" | "queryFn">): _tanstack_react_query0.UseQueryResult<ApiResponse<Product>, Error>;
|
|
40
|
+
interface UseProductRecommendationsReturn {
|
|
41
|
+
recommendations: Product[];
|
|
42
|
+
isLoading: boolean;
|
|
43
|
+
error: Error | null;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Hook to get product recommendations
|
|
47
|
+
*
|
|
48
|
+
* @param productId - Product ID to get recommendations for
|
|
49
|
+
* @param options - React Query options
|
|
50
|
+
* @returns Object with recommendations array, isLoading, and error
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```tsx
|
|
54
|
+
* function ProductRecommendations({ productId }) {
|
|
55
|
+
* const { recommendations, isLoading } = useProductRecommendations(productId);
|
|
56
|
+
*
|
|
57
|
+
* if (isLoading) return <Spinner />;
|
|
58
|
+
*
|
|
59
|
+
* return (
|
|
60
|
+
* <div>
|
|
61
|
+
* {recommendations.map(product => (
|
|
62
|
+
* <ProductCard key={product._id} product={product} />
|
|
63
|
+
* ))}
|
|
64
|
+
* </div>
|
|
65
|
+
* );
|
|
66
|
+
* }
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
declare function useProductRecommendations(productId: string, options?: Omit<UseQueryOptions<ApiResponse<Product[]>>, "queryKey" | "queryFn">): UseProductRecommendationsReturn;
|
|
70
|
+
/**
|
|
71
|
+
* Hook to get soft-deleted products (Recycle Bin)
|
|
72
|
+
*
|
|
73
|
+
* @param token - Auth token (required, admin only)
|
|
74
|
+
* @param params - Query parameters for pagination/filtering
|
|
75
|
+
* @param options - React Query options
|
|
76
|
+
* @returns Query result with deleted products
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```tsx
|
|
80
|
+
* function RecycleBin() {
|
|
81
|
+
* const { data, isLoading } = useDeletedProducts(token, { page: 1, limit: 20 });
|
|
82
|
+
*
|
|
83
|
+
* if (isLoading) return <Spinner />;
|
|
84
|
+
*
|
|
85
|
+
* return (
|
|
86
|
+
* <div>
|
|
87
|
+
* {data?.docs?.map(product => (
|
|
88
|
+
* <DeletedProductRow key={product._id} product={product} />
|
|
89
|
+
* ))}
|
|
90
|
+
* </div>
|
|
91
|
+
* );
|
|
92
|
+
* }
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
declare function useDeletedProducts(token: string, params?: Record<string, unknown>, options?: Omit<UseQueryOptions<PaginatedResponse<Product>>, "queryKey" | "queryFn">): _tanstack_react_query0.UseQueryResult<PaginatedResponse<Product>, Error>;
|
|
96
|
+
/**
|
|
97
|
+
* Hook to restore a soft-deleted product
|
|
98
|
+
*
|
|
99
|
+
* @param token - Auth token (required, admin only)
|
|
100
|
+
* @returns Mutation result with restore function
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```tsx
|
|
104
|
+
* function RestoreButton({ productId }) {
|
|
105
|
+
* const { mutate: restore, isPending } = useRestoreProduct(token);
|
|
106
|
+
*
|
|
107
|
+
* return (
|
|
108
|
+
* <Button onClick={() => restore(productId)} disabled={isPending}>
|
|
109
|
+
* Restore Product
|
|
110
|
+
* </Button>
|
|
111
|
+
* );
|
|
112
|
+
* }
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
115
|
+
declare function useRestoreProduct(token: string): _tanstack_react_query0.UseMutationResult<ApiResponse<Product>, Error, string, unknown>;
|
|
116
|
+
/**
|
|
117
|
+
* Hook to permanently delete a product (Hard delete)
|
|
118
|
+
*
|
|
119
|
+
* @param token - Auth token (required, admin only)
|
|
120
|
+
* @returns Mutation result with hard delete function
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```tsx
|
|
124
|
+
* function PermanentDeleteButton({ productId }) {
|
|
125
|
+
* const { mutate: hardDelete, isPending } = useHardDeleteProduct(token);
|
|
126
|
+
*
|
|
127
|
+
* return (
|
|
128
|
+
* <Button
|
|
129
|
+
* variant="destructive"
|
|
130
|
+
* onClick={() => hardDelete(productId)}
|
|
131
|
+
* disabled={isPending}
|
|
132
|
+
* >
|
|
133
|
+
* Permanently Delete
|
|
134
|
+
* </Button>
|
|
135
|
+
* );
|
|
136
|
+
* }
|
|
137
|
+
* ```
|
|
138
|
+
*/
|
|
139
|
+
declare function useHardDeleteProduct(token: string): _tanstack_react_query0.UseMutationResult<ApiResponse<{
|
|
140
|
+
deleted: boolean;
|
|
141
|
+
}>, Error, string, unknown>;
|
|
142
|
+
/**
|
|
143
|
+
* Hook to sync product stock quantity
|
|
144
|
+
*
|
|
145
|
+
* Recomputes product.quantity by summing all StockEntry quantities across branches.
|
|
146
|
+
*
|
|
147
|
+
* @param token - Auth token (requires: admin, warehouse-admin, warehouse-staff, or store-manager role)
|
|
148
|
+
* @returns Mutation result with sync function
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* ```tsx
|
|
152
|
+
* function SyncStockButton({ productId }) {
|
|
153
|
+
* const { mutate: syncStock, isPending } = useSyncProductStock(token);
|
|
154
|
+
*
|
|
155
|
+
* return (
|
|
156
|
+
* <Button onClick={() => syncStock(productId)} disabled={isPending}>
|
|
157
|
+
* Sync Stock
|
|
158
|
+
* </Button>
|
|
159
|
+
* );
|
|
160
|
+
* }
|
|
161
|
+
* ```
|
|
162
|
+
*/
|
|
163
|
+
declare function useSyncProductStock(token: string): _tanstack_react_query0.UseMutationResult<ProductSyncStockResponse, Error, string, unknown>;
|
|
164
|
+
//#endregion
|
|
165
|
+
export { PRODUCT_KEYS, UseProductRecommendationsReturn, productHooks, useDeletedProducts, useHardDeleteProduct, useProductActions, useProductBySlug, useProductDetail, useProductNavigation, useProductRecommendations, useProducts, useRestoreProduct, useSyncProductStock };
|