@medusajs/dashboard 3.0.0-snapshot-20251202221811 → 3.0.0-snapshot-20251208164410

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.
Files changed (241) hide show
  1. package/dist/{adjust-inventory-WZOCLB5V.mjs → adjust-inventory-ZB3AVET7.mjs} +1 -1
  2. package/dist/{api-key-management-create-W7NL2IYN.mjs → api-key-management-create-U6VGZK7R.mjs} +3 -3
  3. package/dist/{api-key-management-detail-LDBEO446.mjs → api-key-management-detail-OEAWWV5O.mjs} +13 -13
  4. package/dist/{api-key-management-edit-TLVLXAVK.mjs → api-key-management-edit-TJM737A7.mjs} +3 -3
  5. package/dist/{api-key-management-list-FTLC3ELT.mjs → api-key-management-list-ZRYMMTF5.mjs} +3 -3
  6. package/dist/{api-key-management-sales-channels-NYY3NZOE.mjs → api-key-management-sales-channels-D2RAHI7W.mjs} +4 -4
  7. package/dist/app.css +3 -3
  8. package/dist/app.js +17416 -15980
  9. package/dist/app.mjs +11 -11
  10. package/dist/{campaign-create-LHL7FKQK.mjs → campaign-create-IXOWJQ4L.mjs} +3 -3
  11. package/dist/{campaign-detail-T3V6M3XE.mjs → campaign-detail-TFQCDDIN.mjs} +10 -10
  12. package/dist/{categories-metadata-V6FDXGSN.mjs → categories-metadata-7JFVYYUN.mjs} +10 -10
  13. package/dist/{category-create-ELMCLH4J.mjs → category-create-BTMZYQ5R.mjs} +5 -5
  14. package/dist/{category-detail-DNWTF4FV.mjs → category-detail-UUEMLEVJ.mjs} +14 -14
  15. package/dist/{category-edit-TYKLEYGE.mjs → category-edit-Q3KEELHO.mjs} +2 -2
  16. package/dist/{category-list-IJ3DLPYQ.mjs → category-list-Z6HS6N75.mjs} +5 -5
  17. package/dist/{category-organize-PDLC54E2.mjs → category-organize-45NPSRNG.mjs} +2 -2
  18. package/dist/{category-products-ATK63QHB.mjs → category-products-KW6X3JDW.mjs} +13 -13
  19. package/dist/{chunk-WPXYFJEP.mjs → chunk-2WLOIS3L.mjs} +1 -1
  20. package/dist/{chunk-UHIPGDJZ.mjs → chunk-35G7IXTE.mjs} +15 -15
  21. package/dist/{chunk-DODQ3KJT.mjs → chunk-3RRA56WC.mjs} +8 -3
  22. package/dist/{chunk-DKIUGYWW.mjs → chunk-3ZJ55SFA.mjs} +2 -2
  23. package/dist/{chunk-OXPE5TAY.mjs → chunk-42TMWI76.mjs} +1 -1
  24. package/dist/{chunk-OFN7DIZA.mjs → chunk-5AM254NB.mjs} +83 -3
  25. package/dist/{chunk-56TDUOXV.mjs → chunk-5N33TBBX.mjs} +1 -1
  26. package/dist/{chunk-5LGRZSEH.mjs → chunk-67RC6SEX.mjs} +1 -1
  27. package/dist/{chunk-O4RZ3Y65.mjs → chunk-7H6DB666.mjs} +1 -1
  28. package/dist/{chunk-5EGFR4EO.mjs → chunk-AGBHQZZT.mjs} +318 -236
  29. package/dist/{chunk-E3AFVPLW.mjs → chunk-BWU3ZE4W.mjs} +1 -1
  30. package/dist/{chunk-IKTS7EHT.mjs → chunk-D55WNQYO.mjs} +1 -1
  31. package/dist/{chunk-XDLBQGST.mjs → chunk-EFRTOOI5.mjs} +1 -1
  32. package/dist/{chunk-ETOJCN3Q.mjs → chunk-FJHAGJ5G.mjs} +1 -1
  33. package/dist/{chunk-K5QWNI6V.mjs → chunk-FNQ227BC.mjs} +1 -1
  34. package/dist/{chunk-A6PWH2CK.mjs → chunk-GHBURGZC.mjs} +1 -1
  35. package/dist/{chunk-4MG5LND4.mjs → chunk-HEYM67GY.mjs} +1 -1
  36. package/dist/{chunk-QHRVYT5N.mjs → chunk-HRSO6H4F.mjs} +3 -3
  37. package/dist/{chunk-REUYEF7L.mjs → chunk-MB7M5THW.mjs} +1 -1
  38. package/dist/{chunk-KLNRCI3K.mjs → chunk-MOGV3UZD.mjs} +1 -1
  39. package/dist/{chunk-3C6WQ7NH.mjs → chunk-NFEW5CVI.mjs} +37 -3
  40. package/dist/{chunk-VGXF4DOW.mjs → chunk-NKGKWMUU.mjs} +5 -5
  41. package/dist/{chunk-RLDK4LY5.mjs → chunk-NTYLG6Y3.mjs} +1 -1
  42. package/dist/{chunk-AF7A24XI.mjs → chunk-O5DGX2NZ.mjs} +1 -1
  43. package/dist/{chunk-T2ANPJ36.mjs → chunk-OMRGW7JS.mjs} +3 -3
  44. package/dist/{chunk-7V2JZU2B.mjs → chunk-P23S5LDK.mjs} +2 -2
  45. package/dist/{chunk-OAW7KLET.mjs → chunk-PPRHEG37.mjs} +2 -2
  46. package/dist/{chunk-AENRV3N7.mjs → chunk-QW4SQVMT.mjs} +109 -50
  47. package/dist/{chunk-MWBKAP7W.mjs → chunk-RNYL6AXZ.mjs} +2 -2
  48. package/dist/{chunk-KWP436SM.mjs → chunk-S3MMZPMX.mjs} +2 -2
  49. package/dist/{chunk-ND5YSIPU.mjs → chunk-SAZHCRHS.mjs} +1 -1
  50. package/dist/{chunk-M3CKVBZC.mjs → chunk-YGEJFHC3.mjs} +1 -1
  51. package/dist/chunk-ZHH3W7CN.mjs +171 -0
  52. package/dist/{collection-add-products-7WSD7YU4.mjs → collection-add-products-YSTEEHMF.mjs} +14 -14
  53. package/dist/{collection-create-I2A2X4VK.mjs → collection-create-RIGJHEX5.mjs} +2 -2
  54. package/dist/{collection-detail-NVE55BPK.mjs → collection-detail-P5JWWFHH.mjs} +14 -14
  55. package/dist/{collection-edit-RGH7NCUE.mjs → collection-edit-WX5G3FHR.mjs} +2 -2
  56. package/dist/{collection-list-SXHRKTIU.mjs → collection-list-PU6SWYVL.mjs} +24 -23
  57. package/dist/{collection-metadata-ZREV7BND.mjs → collection-metadata-R55DUZSX.mjs} +11 -11
  58. package/dist/{customer-detail-O4L55RY6.mjs → customer-detail-HVGU3DRM.mjs} +14 -14
  59. package/dist/{customer-group-detail-LSZA4ARM.mjs → customer-group-detail-QKFWIFYH.mjs} +13 -13
  60. package/dist/{customer-group-list-6JTEUJAC.mjs → customer-group-list-WLG2ZMBD.mjs} +13 -13
  61. package/dist/{customers-add-customer-group-MHJ34FDF.mjs → customers-add-customer-group-KL5UXXOR.mjs} +13 -13
  62. package/dist/{edit-inventory-item-LMDNUI6M.mjs → edit-inventory-item-O6JLGZE4.mjs} +1 -1
  63. package/dist/{edit-inventory-item-attributes-DPJIHBP3.mjs → edit-inventory-item-attributes-AUVR3GYY.mjs} +1 -1
  64. package/dist/{edit-reservation-IOOZBJ2T.mjs → edit-reservation-GQ6R6GVA.mjs} +2 -2
  65. package/dist/{edit-rules-CEE2IKS6.mjs → edit-rules-PJWEWMM7.mjs} +12 -12
  66. package/dist/en.json +49 -3
  67. package/dist/{inventory-create-H62EOWR6.mjs → inventory-create-P3WYAGQZ.mjs} +10 -10
  68. package/dist/{inventory-detail-ALOIH3H7.mjs → inventory-detail-C2NU7GTA.mjs} +10 -10
  69. package/dist/{inventory-list-RQBI7UJX.mjs → inventory-list-ADJQDNX5.mjs} +1 -1
  70. package/dist/{inventory-metadata-ICOCEY75.mjs → inventory-metadata-V2N3HOPG.mjs} +10 -10
  71. package/dist/{inventory-stock-LDEZTKU4.mjs → inventory-stock-5DCIGKBI.mjs} +10 -10
  72. package/dist/{location-detail-UNXAQQSZ.mjs → location-detail-2CJWVT5M.mjs} +15 -15
  73. package/dist/{location-fulfillment-providers-XVFFAB6I.mjs → location-fulfillment-providers-PYPUR74W.mjs} +15 -14
  74. package/dist/{location-sales-channels-UVYT52SH.mjs → location-sales-channels-JPH5BTUY.mjs} +3 -3
  75. package/dist/{location-service-zone-shipping-option-create-THNTZX5P.mjs → location-service-zone-shipping-option-create-HLZLP422.mjs} +11 -11
  76. package/dist/{location-service-zone-shipping-option-edit-TQNTCYII.mjs → location-service-zone-shipping-option-edit-OYTEZGGC.mjs} +4 -4
  77. package/dist/{login-EMANCYJH.mjs → login-AKO3BIQT.mjs} +10 -10
  78. package/dist/{manage-locations-2VDQ3ILT.mjs → manage-locations-ATCDVTSR.mjs} +1 -1
  79. package/dist/{order-allocate-items-FCJTB2IB.mjs → order-allocate-items-2H25GRTK.mjs} +3 -3
  80. package/dist/{order-create-claim-P5ADYS5P.mjs → order-create-claim-CWGDAFFU.mjs} +17 -17
  81. package/dist/{order-create-edit-CVPRRPOA.mjs → order-create-edit-KJODOQXN.mjs} +11 -11
  82. package/dist/{order-create-exchange-IHV6VKO5.mjs → order-create-exchange-TM4FQLKM.mjs} +23 -23
  83. package/dist/{order-create-fulfillment-SY6UM3NJ.mjs → order-create-fulfillment-2WJZPAWX.mjs} +14 -14
  84. package/dist/{order-create-refund-AGKPMCF6.mjs → order-create-refund-A6WKCHX7.mjs} +15 -15
  85. package/dist/{order-create-return-5UH7FN3H.mjs → order-create-return-NDKTI4E5.mjs} +5 -5
  86. package/dist/{order-create-shipment-J34CYL32.mjs → order-create-shipment-3AVEAGAY.mjs} +10 -10
  87. package/dist/{order-detail-EVDCA6UP.mjs → order-detail-7HXZEBWJ.mjs} +31 -31
  88. package/dist/{order-edit-billing-address-JH3XNOCQ.mjs → order-edit-billing-address-DPK7HTLM.mjs} +10 -10
  89. package/dist/{order-edit-email-KV2IHQRT.mjs → order-edit-email-UJ2OUKHJ.mjs} +10 -10
  90. package/dist/{order-edit-shipping-address-WMNNU53B.mjs → order-edit-shipping-address-5ZCGHHZE.mjs} +10 -10
  91. package/dist/{order-list-26YQAIRH.mjs → order-list-5C4TVJRH.mjs} +4 -4
  92. package/dist/{order-metadata-F4LZ73LR.mjs → order-metadata-UKTGLYWR.mjs} +10 -10
  93. package/dist/{order-receive-return-LSMD7POH.mjs → order-receive-return-N7VLM2GX.mjs} +11 -11
  94. package/dist/{order-request-transfer-A3EBBZ5N.mjs → order-request-transfer-5ENT7IOT.mjs} +11 -11
  95. package/dist/{price-list-configuration-2G3WFC3J.mjs → price-list-configuration-SS2VMD4N.mjs} +4 -4
  96. package/dist/{price-list-create-RLT7G7KF.mjs → price-list-create-FF4F6M2A.mjs} +17 -17
  97. package/dist/{price-list-detail-TKRELOK2.mjs → price-list-detail-HQF4ZR2U.mjs} +17 -17
  98. package/dist/{price-list-edit-6URYI6AK.mjs → price-list-edit-VRI5T4W3.mjs} +2 -2
  99. package/dist/{price-list-list-FLINOQCK.mjs → price-list-list-S2HWTXKV.mjs} +3 -3
  100. package/dist/{price-list-prices-add-UPUY72HG.mjs → price-list-prices-add-JYZAHKAQ.mjs} +13 -13
  101. package/dist/{price-list-prices-edit-ZHAQDPWX.mjs → price-list-prices-edit-TRCLLGU4.mjs} +2 -2
  102. package/dist/{product-attributes-ZR63AQWA.mjs → product-attributes-NEXVST24.mjs} +12 -12
  103. package/dist/{product-create-EQ6SN5QT.mjs → product-create-WU4YFCMM.mjs} +377 -554
  104. package/dist/{product-create-variant-7C5PKKX7.mjs → product-create-variant-RDEE4IX7.mjs} +11 -11
  105. package/dist/{product-detail-ATPFDPI2.mjs → product-detail-J4JYWH2M.mjs} +38 -54
  106. package/dist/{product-edit-XPUNYMD7.mjs → product-edit-ZF2WYHPB.mjs} +12 -12
  107. package/dist/{product-export-GFLEIKIM.mjs → product-export-QDX6343F.mjs} +23 -22
  108. package/dist/{product-image-variants-edit-TC3M4PGX.mjs → product-image-variants-edit-5L5J32SO.mjs} +10 -10
  109. package/dist/{product-import-2Z5I7RXI.mjs → product-import-6TEVSKGQ.mjs} +10 -10
  110. package/dist/{product-list-33ANLONH.mjs → product-list-BHGGJX6B.mjs} +17 -17
  111. package/dist/{product-media-WCLPCVR3.mjs → product-media-EKXMOSO4.mjs} +2 -2
  112. package/dist/{product-metadata-GQU7EVZ3.mjs → product-metadata-BCJJNWAC.mjs} +10 -10
  113. package/dist/product-option-create-3Z73MSHD.mjs +336 -0
  114. package/dist/product-option-detail-4VRUA7KT.mjs +322 -0
  115. package/dist/product-option-edit-YIKFL6OY.mjs +324 -0
  116. package/dist/product-option-list-CR7NCCMH.mjs +267 -0
  117. package/dist/product-option-metadata-7CSZUQ7M.mjs +71 -0
  118. package/dist/product-options-manage-QOMXMPGW.mjs +304 -0
  119. package/dist/{product-organization-T2TQ5EH6.mjs → product-organization-IG54OB75.mjs} +14 -14
  120. package/dist/{product-prices-MKMKBH6P.mjs → product-prices-UMEIS5AZ.mjs} +1 -1
  121. package/dist/{product-sales-channels-5YIO22UW.mjs → product-sales-channels-2SALTLTF.mjs} +3 -3
  122. package/dist/{product-shipping-profile-PL76UMVZ.mjs → product-shipping-profile-VPHZLKDT.mjs} +13 -13
  123. package/dist/{product-stock-6QHBTDUQ.mjs → product-stock-3ILUPCVN.mjs} +10 -10
  124. package/dist/{product-tag-create-B6EOKDJT.mjs → product-tag-create-OOUTLHHD.mjs} +10 -10
  125. package/dist/{product-tag-detail-TQP7ZWSR.mjs → product-tag-detail-YVKJEAKT.mjs} +28 -27
  126. package/dist/{product-tag-edit-RPLWDG5A.mjs → product-tag-edit-RV5WITSN.mjs} +10 -10
  127. package/dist/{product-tag-list-PZTGHM7M.mjs → product-tag-list-ZSPFYZIL.mjs} +26 -25
  128. package/dist/{product-tag-metadata-FKKOT5CD.mjs → product-tag-metadata-S5YL3FUL.mjs} +10 -10
  129. package/dist/{product-type-detail-DDIBFR7O.mjs → product-type-detail-EFVZRETM.mjs} +13 -13
  130. package/dist/{product-type-metadata-EXCYTTQG.mjs → product-type-metadata-TNAASDKX.mjs} +10 -10
  131. package/dist/{product-variant-detail-GCESZH4H.mjs → product-variant-detail-CLP5FJP6.mjs} +10 -10
  132. package/dist/{product-variant-edit-JHOQJN6U.mjs → product-variant-edit-REMB77V7.mjs} +11 -11
  133. package/dist/{product-variant-manage-inventory-items-B7TUBSD5.mjs → product-variant-manage-inventory-items-IGDCLZQE.mjs} +2 -2
  134. package/dist/{product-variant-media-6WWLRINP.mjs → product-variant-media-EKI4BTEV.mjs} +1 -1
  135. package/dist/{product-variant-metadata-NEZIGTEP.mjs → product-variant-metadata-5JIY5KLN.mjs} +10 -10
  136. package/dist/{promotion-add-campaign-MKDYE7MW.mjs → promotion-add-campaign-DOALJUKJ.mjs} +3 -3
  137. package/dist/{promotion-create-CUAQY2NH.mjs → promotion-create-2PTB6NQI.mjs} +18 -18
  138. package/dist/{promotion-detail-2S7FWTXF.mjs → promotion-detail-RGXCA2XS.mjs} +10 -10
  139. package/dist/{refund-reason-create-4YAO4325.mjs → refund-reason-create-AGEFXEIZ.mjs} +10 -10
  140. package/dist/{refund-reason-edit-5J2VIRIL.mjs → refund-reason-edit-DL56EKBY.mjs} +10 -10
  141. package/dist/{refund-reason-list-453DXONV.mjs → refund-reason-list-RL2ZG7IJ.mjs} +13 -13
  142. package/dist/{region-create-QLPSK6TX.mjs → region-create-UVJICJRX.mjs} +1 -1
  143. package/dist/{region-edit-JCJHA6TY.mjs → region-edit-3NVXQECN.mjs} +1 -1
  144. package/dist/{region-metadata-C7DIBM35.mjs → region-metadata-2HO3SAPM.mjs} +10 -10
  145. package/dist/{reservation-create-BW4CDTWR.mjs → reservation-create-Z7TWUE2L.mjs} +3 -3
  146. package/dist/{reservation-detail-GFNWLSI2.mjs → reservation-detail-2AOBK5EY.mjs} +10 -10
  147. package/dist/{reservation-list-RGL67CIU.mjs → reservation-list-MN22JYAW.mjs} +2 -2
  148. package/dist/{reservation-metadata-OI2G4BDW.mjs → reservation-metadata-BFPJTXK6.mjs} +10 -10
  149. package/dist/{sales-channel-add-products-63NGB37Z.mjs → sales-channel-add-products-4LNP2TUM.mjs} +13 -13
  150. package/dist/{sales-channel-create-TOBEDYFD.mjs → sales-channel-create-UFFXX5HK.mjs} +2 -2
  151. package/dist/{sales-channel-detail-LJPQAJDT.mjs → sales-channel-detail-UMYMS2JA.mjs} +13 -13
  152. package/dist/{sales-channel-edit-XUTE5GB5.mjs → sales-channel-edit-SP2HF4E3.mjs} +2 -2
  153. package/dist/{sales-channel-list-TBAN7UT6.mjs → sales-channel-list-CV4V6R7H.mjs} +11 -11
  154. package/dist/{sales-channel-metadata-SE4TGSDB.mjs → sales-channel-metadata-REOQHHUT.mjs} +10 -10
  155. package/dist/{shipping-option-type-create-MB4ENYKV.mjs → shipping-option-type-create-XAWQO66M.mjs} +10 -10
  156. package/dist/{shipping-option-type-detail-IX4JGSTK.mjs → shipping-option-type-detail-G4WLGIAA.mjs} +11 -11
  157. package/dist/{shipping-option-type-edit-B5KU5LER.mjs → shipping-option-type-edit-OI6TBKGG.mjs} +10 -10
  158. package/dist/{shipping-option-type-list-TVR5OE2C.mjs → shipping-option-type-list-6GNCKAFB.mjs} +11 -11
  159. package/dist/{shipping-profile-metadata-Z35SYLBS.mjs → shipping-profile-metadata-MANQ7ZEI.mjs} +10 -10
  160. package/dist/{store-detail-VUJSSOKZ.mjs → store-detail-N2CP3MTB.mjs} +10 -10
  161. package/dist/{store-edit-3XS6IC2Z.mjs → store-edit-Q25HCMCQ.mjs} +1 -1
  162. package/dist/{store-metadata-TYFTDOEK.mjs → store-metadata-U22TVWK2.mjs} +10 -10
  163. package/dist/{tax-region-create-ZTCTKE4C.mjs → tax-region-create-JZB7NFIG.mjs} +11 -11
  164. package/dist/{tax-region-detail-MHM4MAOS.mjs → tax-region-detail-CBZ3ZJN2.mjs} +29 -28
  165. package/dist/{tax-region-edit-SFJGFTAV.mjs → tax-region-edit-E56XVHW2.mjs} +11 -11
  166. package/dist/{tax-region-province-detail-VMOV4JPV.mjs → tax-region-province-detail-2DC2U4EN.mjs} +29 -28
  167. package/dist/{tax-region-tax-override-create-GRXLTURD.mjs → tax-region-tax-override-create-JWGWGYB4.mjs} +28 -27
  168. package/dist/{tax-region-tax-override-edit-D2YBOBEI.mjs → tax-region-tax-override-edit-7DCU55AS.mjs} +27 -26
  169. package/dist/{user-detail-N6PT3KRP.mjs → user-detail-K5UMPO2L.mjs} +1 -1
  170. package/dist/{user-metadata-D5HNZWZY.mjs → user-metadata-EX5WDGCR.mjs} +10 -10
  171. package/dist/{workflow-execution-detail-GSUDCTN3.mjs → workflow-execution-detail-GBPFVG3O.mjs} +10 -10
  172. package/package.json +9 -9
  173. package/src/components/inputs/combobox/combobox.tsx +173 -92
  174. package/src/components/layout/main-layout/main-layout.tsx +7 -4
  175. package/src/dashboard-app/routes/get-route.map.tsx +64 -12
  176. package/src/hooks/api/index.ts +1 -0
  177. package/src/hooks/api/product-options.tsx +151 -0
  178. package/src/hooks/api/products.tsx +26 -66
  179. package/src/hooks/table/columns/use-product-option-table-columns.tsx +44 -0
  180. package/src/hooks/table/filters/index.ts +1 -0
  181. package/src/hooks/table/filters/use-product-option-table-filters.tsx +33 -0
  182. package/src/hooks/table/query/use-product-option-table-query.tsx +34 -0
  183. package/src/i18n/translations/$schema.json +171 -4
  184. package/src/i18n/translations/en.json +49 -3
  185. package/src/routes/product-options/common/hooks/use-delete-product-option-action.tsx +41 -0
  186. package/src/routes/product-options/product-option-create/components/create-product-option-form/create-product-option-details.tsx +71 -0
  187. package/src/routes/product-options/product-option-create/components/create-product-option-form/create-product-option-form.tsx +192 -0
  188. package/src/routes/product-options/product-option-create/components/create-product-option-form/create-product-option-organize.tsx +77 -0
  189. package/src/routes/product-options/product-option-create/components/create-product-option-form/index.ts +1 -0
  190. package/src/routes/product-options/product-option-create/components/create-product-option-form/schema.ts +15 -0
  191. package/src/routes/product-options/product-option-create/index.ts +1 -0
  192. package/src/routes/product-options/product-option-create/product-option-create.tsx +10 -0
  193. package/src/routes/product-options/product-option-detail/breadcrumb.tsx +14 -0
  194. package/src/routes/product-options/product-option-detail/components/product-option-general-section/index.ts +1 -0
  195. package/src/routes/product-options/product-option-detail/components/product-option-general-section/product-option-general-section.tsx +81 -0
  196. package/src/routes/product-options/product-option-detail/components/product-option-product-section/index.ts +1 -0
  197. package/src/routes/product-options/product-option-detail/components/product-option-product-section/product-option-product-section.tsx +74 -0
  198. package/src/routes/product-options/product-option-detail/index.ts +3 -0
  199. package/src/routes/product-options/product-option-detail/loader.ts +17 -0
  200. package/src/routes/product-options/product-option-detail/product-option-detail.tsx +50 -0
  201. package/src/routes/product-options/product-option-edit/components/edit-product-option-form/edit-product-option-details.tsx +94 -0
  202. package/src/routes/product-options/product-option-edit/components/edit-product-option-form/edit-product-option-form.tsx +116 -0
  203. package/src/routes/product-options/product-option-edit/components/edit-product-option-form/edit-product-option-organize.tsx +77 -0
  204. package/src/routes/product-options/product-option-edit/components/edit-product-option-form/index.ts +1 -0
  205. package/src/routes/product-options/product-option-edit/components/edit-product-option-form/schema.ts +13 -0
  206. package/src/routes/product-options/product-option-edit/index.ts +1 -0
  207. package/src/routes/product-options/product-option-edit/product-option-edit.tsx +34 -0
  208. package/src/routes/product-options/product-option-list/components/product-option-list-table/index.ts +1 -0
  209. package/src/routes/product-options/product-option-list/components/product-option-list-table/product-option-list-table.tsx +140 -0
  210. package/src/routes/product-options/product-option-list/index.ts +1 -0
  211. package/src/routes/product-options/product-option-list/product-option-list.tsx +19 -0
  212. package/src/routes/product-options/product-option-metadata/index.ts +1 -0
  213. package/src/routes/product-options/product-option-metadata/product-option-metadata.tsx +27 -0
  214. package/src/routes/products/product-create/components/product-create-details-form/components/product-create-details-general-section/product-create-general-section.tsx +16 -4
  215. package/src/routes/products/product-create/components/product-create-details-form/components/product-create-details-variant-section/product-create-details-variant-section.tsx +220 -198
  216. package/src/routes/products/product-create/components/product-create-form/product-create-form.tsx +4 -7
  217. package/src/routes/products/product-create/constants.ts +2 -0
  218. package/src/routes/products/product-create/utils.ts +6 -1
  219. package/src/routes/products/product-detail/components/product-option-section/product-option-section.tsx +31 -49
  220. package/src/routes/products/product-options-manage/components/product-options-manage-form/index.ts +1 -0
  221. package/src/routes/products/product-options-manage/components/product-options-manage-form/product-options-manage-form.tsx +284 -0
  222. package/src/routes/products/product-options-manage/index.ts +1 -0
  223. package/src/routes/products/product-options-manage/product-options-manage.tsx +35 -0
  224. package/dist/product-create-option-GAEPSU6J.mjs +0 -145
  225. package/dist/product-edit-option-VIU3ZICO.mjs +0 -150
  226. package/src/routes/products/product-create-option/components/create-product-option-form/create-product-option-form.tsx +0 -122
  227. package/src/routes/products/product-create-option/components/create-product-option-form/index.ts +0 -1
  228. package/src/routes/products/product-create-option/index.ts +0 -1
  229. package/src/routes/products/product-create-option/product-create-option.tsx +0 -26
  230. package/src/routes/products/product-edit-option/components/edit-product-option-form/edit-product-option-form.tsx +0 -123
  231. package/src/routes/products/product-edit-option/components/edit-product-option-form/index.ts +0 -1
  232. package/src/routes/products/product-edit-option/index.ts +0 -1
  233. package/src/routes/products/product-edit-option/product-edit-option.tsx +0 -32
  234. package/dist/{chunk-ACJ3PPQJ.mjs → chunk-2QH2TBJ2.mjs} +3 -3
  235. package/dist/{customer-group-add-customers-QU4Q56SS.mjs → customer-group-add-customers-2Y2GVCDV.mjs} +3 -3
  236. package/dist/{customer-list-ZXCGIXJC.mjs → customer-list-TG4D4QOT.mjs} +3 -3
  237. package/dist/{location-list-OYBI7EGV.mjs → location-list-ZJMZZ6T3.mjs} +1 -1
  238. package/dist/{product-type-list-QX7QC6RI.mjs → product-type-list-7WQ5D2KV.mjs} +3 -3
  239. package/dist/{region-list-XQRIBDMF.mjs → region-list-JAQXIBYD.mjs} +3 -3
  240. package/dist/{return-reason-list-VYLLXDG4.mjs → return-reason-list-ATE2XU4H.mjs} +3 -3
  241. package/dist/{user-list-6KATHOTJ.mjs → user-list-KPI3BTOA.mjs} +3 -3
@@ -0,0 +1,284 @@
1
+ import { HttpTypes } from "@medusajs/types"
2
+ import { Button, Hint, Label, toast } from "@medusajs/ui"
3
+ import { useMemo, useState } from "react"
4
+ import { useTranslation } from "react-i18next"
5
+ import * as zod from "zod"
6
+
7
+ import { Form } from "../../../../../components/common/form"
8
+ import { Combobox } from "../../../../../components/inputs/combobox"
9
+ import { RouteDrawer, useRouteModal } from "../../../../../components/modals"
10
+ import { KeyboundForm } from "../../../../../components/utilities/keybound-form"
11
+ import { useExtendableForm } from "../../../../../dashboard-app"
12
+ import {
13
+ useLinkProductOptions,
14
+ useProductOptions,
15
+ } from "../../../../../hooks/api"
16
+ import { useExtension } from "../../../../../providers/extension-provider"
17
+
18
+ type ProductOptionsManageFormProps = {
19
+ product: HttpTypes.AdminProduct
20
+ }
21
+
22
+ const ProductOptionsManageSchema = zod.object({
23
+ option_ids: zod.array(zod.string()),
24
+ option_values: zod.record(zod.array(zod.string())).optional(),
25
+ })
26
+
27
+ export const ProductOptionsManageForm = ({
28
+ product,
29
+ }: ProductOptionsManageFormProps) => {
30
+ const { t } = useTranslation()
31
+ const { handleSuccess } = useRouteModal()
32
+ const { getFormConfigs } = useExtension()
33
+ const configs = getFormConfigs("product", "edit")
34
+
35
+ const { product_options = [], isLoading } = useProductOptions({
36
+ is_exclusive: false,
37
+ })
38
+
39
+ const productOptionChoices = useMemo(() => {
40
+ return product_options.map((option) => ({
41
+ value: option.id,
42
+ label: option.title,
43
+ }))
44
+ }, [product_options])
45
+
46
+ const [selectedOptionIds, setSelectedOptionIds] = useState<string[]>(
47
+ product.options?.map((opt) => opt.id) || []
48
+ )
49
+
50
+ const [selectedOptionValues, setSelectedOptionValues] = useState<
51
+ Record<string, string[]>
52
+ >(() => {
53
+ // Initialize with existing product option values
54
+ const initialValues: Record<string, string[]> = {}
55
+ product.options?.forEach((opt) => {
56
+ initialValues[opt.id] = opt.values?.map((v) => v.id) || []
57
+ })
58
+ return initialValues
59
+ })
60
+
61
+ const form = useExtendableForm({
62
+ defaultValues: {
63
+ option_ids: product.options?.map((opt) => opt.id) || [],
64
+ option_values: (() => {
65
+ const initialValues: Record<string, string[]> = {}
66
+ product.options?.forEach((opt) => {
67
+ initialValues[opt.id] = opt.values?.map((v) => v.id) || []
68
+ })
69
+ return initialValues
70
+ })(),
71
+ },
72
+ schema: ProductOptionsManageSchema,
73
+ configs: configs,
74
+ data: product,
75
+ })
76
+
77
+ const { mutateAsync, isPending } = useLinkProductOptions(product.id)
78
+
79
+ const handleProductOptionSelect = (optionIds: string[]) => {
80
+ setSelectedOptionIds(optionIds)
81
+ form.setValue("option_ids", optionIds)
82
+
83
+ // Initialize selected values for new options (select all by default)
84
+ const newSelectedValues: Record<string, string[]> = {}
85
+ const selectedProductOptions = product_options.filter((option) =>
86
+ optionIds.includes(option.id)
87
+ )
88
+
89
+ selectedProductOptions.forEach((option) => {
90
+ // If option was already selected, keep its current value selection
91
+ if (selectedOptionValues[option.id]) {
92
+ newSelectedValues[option.id] = selectedOptionValues[option.id]
93
+ } else {
94
+ // New option - select all values by default
95
+ newSelectedValues[option.id] = option.values?.map((v) => v.id) || []
96
+ }
97
+ })
98
+
99
+ setSelectedOptionValues(newSelectedValues)
100
+ form.setValue("option_values", newSelectedValues)
101
+ }
102
+
103
+ const handleValueChange = (optionId: string, valueIds: string[]) => {
104
+ // Ensure at least one value is selected
105
+ if (valueIds.length === 0) {
106
+ return
107
+ }
108
+
109
+ const updatedSelectedValues = {
110
+ ...selectedOptionValues,
111
+ [optionId]: valueIds,
112
+ }
113
+
114
+ setSelectedOptionValues(updatedSelectedValues)
115
+ form.setValue("option_values", updatedSelectedValues)
116
+ }
117
+
118
+ const handleSubmit = form.handleSubmit(async (data) => {
119
+ const currentOptionIds = product.options?.map((opt) => opt.id) || []
120
+ const newOptionIds = data.option_ids
121
+
122
+ const optionsToAdd: (string | { id: string; value_ids: string[] })[] = []
123
+ const optionsToRemove: string[] = []
124
+
125
+ // Check for completely removed options
126
+ for (const currentId of currentOptionIds) {
127
+ if (!newOptionIds.includes(currentId)) {
128
+ optionsToRemove.push(currentId)
129
+ }
130
+ }
131
+
132
+ // Check for new options or options with changed values
133
+ for (const newId of newOptionIds) {
134
+ const isNewOption = !currentOptionIds.includes(newId)
135
+
136
+ if (isNewOption) {
137
+ optionsToAdd.push(
138
+ data.option_values
139
+ ? {
140
+ id: newId,
141
+ value_ids: data.option_values[newId],
142
+ }
143
+ : newId
144
+ )
145
+ } else {
146
+ const currentOption = product.options?.find((opt) => opt.id === newId)
147
+ const currentValueIds =
148
+ currentOption?.values?.map((v) => v.id).sort() || []
149
+ const newValueIds = [...(data.option_values?.[newId] || [])].sort()
150
+
151
+ const valuesChanged =
152
+ currentValueIds.length !== newValueIds.length ||
153
+ currentValueIds.some((id, index) => id !== newValueIds[index])
154
+
155
+ if (valuesChanged) {
156
+ optionsToRemove.push(newId)
157
+ optionsToAdd.push(
158
+ data.option_values
159
+ ? {
160
+ id: newId,
161
+ value_ids: data.option_values[newId],
162
+ }
163
+ : newId
164
+ )
165
+ }
166
+ }
167
+ }
168
+
169
+ await mutateAsync(
170
+ {
171
+ add: optionsToAdd,
172
+ remove: optionsToRemove,
173
+ },
174
+ {
175
+ onSuccess: ({ product }) => {
176
+ toast.success(
177
+ t("products.organization.edit.toasts.success", {
178
+ title: product.title,
179
+ })
180
+ )
181
+ handleSuccess()
182
+ },
183
+ onError: (error) => {
184
+ toast.error(error.message)
185
+ },
186
+ }
187
+ )
188
+ })
189
+
190
+ return (
191
+ <RouteDrawer.Form form={form}>
192
+ <KeyboundForm onSubmit={handleSubmit} className="flex h-full flex-col">
193
+ <RouteDrawer.Body>
194
+ <div className="flex h-full flex-col gap-y-4">
195
+ <Form.Field
196
+ control={form.control}
197
+ name="option_ids"
198
+ render={({ field }) => {
199
+ return (
200
+ <Form.Item>
201
+ <Form.Label>
202
+ {t("products.options.manage.label")}
203
+ </Form.Label>
204
+ <Form.Hint>{t("products.options.manage.hint")}</Form.Hint>
205
+ <Form.Control>
206
+ <Combobox
207
+ {...field}
208
+ value={selectedOptionIds}
209
+ onChange={(value) =>
210
+ handleProductOptionSelect(value as string[])
211
+ }
212
+ options={productOptionChoices}
213
+ placeholder={t("products.options.manage.placeholder")}
214
+ disabled={isLoading}
215
+ displayMode="chips"
216
+ />
217
+ </Form.Control>
218
+ <Form.ErrorMessage />
219
+ </Form.Item>
220
+ )
221
+ }}
222
+ />
223
+ {selectedOptionIds.length > 0 && (
224
+ <div className="flex flex-col gap-y-4">
225
+ <div className="flex flex-col">
226
+ <Label weight="plus">{t("fields.values")}</Label>
227
+ <Hint>{t("products.create.variants.selectValuesHint")}</Hint>
228
+ </div>
229
+ <div className="flex flex-col gap-y-3">
230
+ {product_options
231
+ .filter((option) => selectedOptionIds.includes(option.id))
232
+ .map((option) => {
233
+ const valueOptions =
234
+ option.values
235
+ ?.sort((a, b) => {
236
+ const rankA = a.rank ?? Number.MAX_VALUE
237
+ const rankB = b.rank ?? Number.MAX_VALUE
238
+ return rankA - rankB
239
+ })
240
+ .map((v) => ({
241
+ value: v.id,
242
+ label: v.value,
243
+ })) || []
244
+
245
+ return (
246
+ <div key={option.id} className="flex flex-col gap-y-2">
247
+ <Label size="small" weight="plus">
248
+ {option.title}
249
+ </Label>
250
+ <Combobox
251
+ value={selectedOptionValues[option.id] || []}
252
+ onChange={(value) =>
253
+ handleValueChange(option.id, value as string[])
254
+ }
255
+ options={valueOptions}
256
+ placeholder={t(
257
+ "products.fields.options.variantionsPlaceholder"
258
+ )}
259
+ displayMode="chips"
260
+ />
261
+ </div>
262
+ )
263
+ })}
264
+ </div>
265
+ </div>
266
+ )}
267
+ </div>
268
+ </RouteDrawer.Body>
269
+ <RouteDrawer.Footer>
270
+ <div className="flex items-center justify-end gap-x-2">
271
+ <RouteDrawer.Close asChild>
272
+ <Button size="small" variant="secondary">
273
+ {t("actions.cancel")}
274
+ </Button>
275
+ </RouteDrawer.Close>
276
+ <Button size="small" type="submit" isLoading={isPending}>
277
+ {t("actions.save")}
278
+ </Button>
279
+ </div>
280
+ </RouteDrawer.Footer>
281
+ </KeyboundForm>
282
+ </RouteDrawer.Form>
283
+ )
284
+ }
@@ -0,0 +1 @@
1
+ export { ProductOptionsManage as Component } from "./product-options-manage"
@@ -0,0 +1,35 @@
1
+ import { Heading } from "@medusajs/ui"
2
+ import { useTranslation } from "react-i18next"
3
+ import { useParams } from "react-router-dom"
4
+
5
+ import { RouteDrawer } from "../../../components/modals"
6
+ import { useProduct } from "../../../hooks/api"
7
+ import { PRODUCT_DETAIL_FIELDS } from "../product-detail/constants"
8
+ import { ProductOptionsManageForm } from "./components/product-options-manage-form"
9
+
10
+ export const ProductOptionsManage = () => {
11
+ const { id } = useParams()
12
+ const { t } = useTranslation()
13
+
14
+ const { product, isLoading, isError, error } = useProduct(id!, {
15
+ fields: PRODUCT_DETAIL_FIELDS,
16
+ })
17
+
18
+ if (isError) {
19
+ throw error
20
+ }
21
+
22
+ return (
23
+ <RouteDrawer>
24
+ <RouteDrawer.Header>
25
+ <RouteDrawer.Title asChild>
26
+ <Heading>{t("products.options.manage.header")}</Heading>
27
+ </RouteDrawer.Title>
28
+ <RouteDrawer.Description className="sr-only">
29
+ {t("products.options.manage.description")}
30
+ </RouteDrawer.Description>
31
+ </RouteDrawer.Header>
32
+ {!isLoading && product && <ProductOptionsManageForm product={product} />}
33
+ </RouteDrawer>
34
+ )
35
+ }
@@ -1,145 +0,0 @@
1
- import {
2
- ChipInput
3
- } from "./chunk-XDJ7OMBR.mjs";
4
- import "./chunk-IUCDCPJU.mjs";
5
- import {
6
- KeyboundForm
7
- } from "./chunk-6HTZNHPT.mjs";
8
- import {
9
- RouteDrawer,
10
- useRouteModal
11
- } from "./chunk-AERWK3TJ.mjs";
12
- import {
13
- Form
14
- } from "./chunk-OBQI23QM.mjs";
15
- import {
16
- useCreateProductOption,
17
- useProduct
18
- } from "./chunk-AENRV3N7.mjs";
19
- import "./chunk-FXYH54JP.mjs";
20
- import "./chunk-774WSTCC.mjs";
21
- import "./chunk-NFEK63OE.mjs";
22
- import "./chunk-QZ7TP4HQ.mjs";
23
-
24
- // src/routes/products/product-create-option/product-create-option.tsx
25
- import { Heading } from "@medusajs/ui";
26
- import { useTranslation as useTranslation2 } from "react-i18next";
27
- import { useParams } from "react-router-dom";
28
-
29
- // src/routes/products/product-create-option/components/create-product-option-form/create-product-option-form.tsx
30
- import { zodResolver } from "@hookform/resolvers/zod";
31
- import { Button, Input, toast } from "@medusajs/ui";
32
- import { useForm } from "react-hook-form";
33
- import { useTranslation } from "react-i18next";
34
- import { z } from "zod";
35
- import { jsx, jsxs } from "react/jsx-runtime";
36
- var CreateProductOptionSchema = z.object({
37
- title: z.string().min(1),
38
- values: z.array(z.string()).optional()
39
- });
40
- var CreateProductOptionForm = ({
41
- product
42
- }) => {
43
- const { t } = useTranslation();
44
- const { handleSuccess } = useRouteModal();
45
- const form = useForm({
46
- defaultValues: {
47
- title: "",
48
- values: []
49
- },
50
- resolver: zodResolver(CreateProductOptionSchema)
51
- });
52
- const { mutateAsync, isPending } = useCreateProductOption(product.id);
53
- const handleSubmit = form.handleSubmit(async (values) => {
54
- mutateAsync(values, {
55
- onSuccess: () => {
56
- toast.success(
57
- t("products.options.create.successToast", {
58
- title: values.title
59
- })
60
- );
61
- handleSuccess();
62
- },
63
- onError: async (err) => {
64
- toast.error(err.message);
65
- }
66
- });
67
- });
68
- return /* @__PURE__ */ jsx(RouteDrawer.Form, { form, children: /* @__PURE__ */ jsxs(
69
- KeyboundForm,
70
- {
71
- onSubmit: handleSubmit,
72
- className: "flex flex-1 flex-col overflow-hidden",
73
- children: [
74
- /* @__PURE__ */ jsxs(RouteDrawer.Body, { className: "flex flex-1 flex-col gap-y-4 overflow-auto", children: [
75
- /* @__PURE__ */ jsx(
76
- Form.Field,
77
- {
78
- control: form.control,
79
- name: "title",
80
- render: ({ field }) => {
81
- return /* @__PURE__ */ jsxs(Form.Item, { children: [
82
- /* @__PURE__ */ jsx(Form.Label, { children: t("products.fields.options.optionTitle") }),
83
- /* @__PURE__ */ jsx(Form.Control, { children: /* @__PURE__ */ jsx(
84
- Input,
85
- {
86
- ...field,
87
- placeholder: t(
88
- "products.fields.options.optionTitlePlaceholder"
89
- )
90
- }
91
- ) }),
92
- /* @__PURE__ */ jsx(Form.ErrorMessage, {})
93
- ] });
94
- }
95
- }
96
- ),
97
- /* @__PURE__ */ jsx(
98
- Form.Field,
99
- {
100
- control: form.control,
101
- name: "values",
102
- render: ({ field }) => {
103
- return /* @__PURE__ */ jsxs(Form.Item, { children: [
104
- /* @__PURE__ */ jsx(Form.Label, { children: t("products.fields.options.variations") }),
105
- /* @__PURE__ */ jsx(Form.Control, { children: /* @__PURE__ */ jsx(
106
- ChipInput,
107
- {
108
- ...field,
109
- placeholder: t(
110
- "products.fields.options.variantionsPlaceholder"
111
- )
112
- }
113
- ) }),
114
- /* @__PURE__ */ jsx(Form.ErrorMessage, {})
115
- ] });
116
- }
117
- }
118
- )
119
- ] }),
120
- /* @__PURE__ */ jsx(RouteDrawer.Footer, { children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-end gap-x-2", children: [
121
- /* @__PURE__ */ jsx(RouteDrawer.Close, { asChild: true, children: /* @__PURE__ */ jsx(Button, { variant: "secondary", size: "small", children: t("actions.cancel") }) }),
122
- /* @__PURE__ */ jsx(Button, { type: "submit", size: "small", isLoading: isPending, children: t("actions.save") })
123
- ] }) })
124
- ]
125
- }
126
- ) });
127
- };
128
-
129
- // src/routes/products/product-create-option/product-create-option.tsx
130
- import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
131
- var ProductCreateOption = () => {
132
- const { id } = useParams();
133
- const { t } = useTranslation2();
134
- const { product, isLoading, isError, error } = useProduct(id);
135
- if (isError) {
136
- throw error;
137
- }
138
- return /* @__PURE__ */ jsxs2(RouteDrawer, { children: [
139
- /* @__PURE__ */ jsx2(RouteDrawer.Header, { children: /* @__PURE__ */ jsx2(Heading, { children: t("products.options.create.header") }) }),
140
- !isLoading && product && /* @__PURE__ */ jsx2(CreateProductOptionForm, { product })
141
- ] });
142
- };
143
- export {
144
- ProductCreateOption as Component
145
- };
@@ -1,150 +0,0 @@
1
- import {
2
- ChipInput
3
- } from "./chunk-XDJ7OMBR.mjs";
4
- import "./chunk-IUCDCPJU.mjs";
5
- import {
6
- KeyboundForm
7
- } from "./chunk-6HTZNHPT.mjs";
8
- import {
9
- RouteDrawer,
10
- useRouteModal
11
- } from "./chunk-AERWK3TJ.mjs";
12
- import {
13
- Form
14
- } from "./chunk-OBQI23QM.mjs";
15
- import {
16
- useProduct,
17
- useUpdateProductOption
18
- } from "./chunk-AENRV3N7.mjs";
19
- import "./chunk-FXYH54JP.mjs";
20
- import "./chunk-774WSTCC.mjs";
21
- import "./chunk-NFEK63OE.mjs";
22
- import "./chunk-QZ7TP4HQ.mjs";
23
-
24
- // src/routes/products/product-edit-option/product-edit-option.tsx
25
- import { Heading } from "@medusajs/ui";
26
- import { useTranslation as useTranslation2 } from "react-i18next";
27
- import { json, useParams } from "react-router-dom";
28
-
29
- // src/routes/products/product-edit-option/components/edit-product-option-form/edit-product-option-form.tsx
30
- import { zodResolver } from "@hookform/resolvers/zod";
31
- import { Button, Input } from "@medusajs/ui";
32
- import { useForm } from "react-hook-form";
33
- import { useTranslation } from "react-i18next";
34
- import { z } from "zod";
35
- import { jsx, jsxs } from "react/jsx-runtime";
36
- var CreateProductOptionSchema = z.object({
37
- title: z.string().min(1),
38
- values: z.array(z.string()).optional()
39
- });
40
- var CreateProductOptionForm = ({
41
- option
42
- }) => {
43
- const { t } = useTranslation();
44
- const { handleSuccess } = useRouteModal();
45
- const form = useForm({
46
- defaultValues: {
47
- title: option.title,
48
- values: option.values.map((v) => v.value)
49
- },
50
- resolver: zodResolver(CreateProductOptionSchema)
51
- });
52
- const { mutateAsync, isPending } = useUpdateProductOption(
53
- option.product_id,
54
- option.id
55
- );
56
- const handleSubmit = form.handleSubmit(async (values) => {
57
- mutateAsync(
58
- {
59
- id: option.id,
60
- ...values
61
- },
62
- {
63
- onSuccess: () => {
64
- handleSuccess();
65
- }
66
- }
67
- );
68
- });
69
- return /* @__PURE__ */ jsx(RouteDrawer.Form, { form, children: /* @__PURE__ */ jsxs(
70
- KeyboundForm,
71
- {
72
- onSubmit: handleSubmit,
73
- className: "flex flex-1 flex-col overflow-hidden",
74
- children: [
75
- /* @__PURE__ */ jsxs(RouteDrawer.Body, { className: "flex flex-1 flex-col gap-y-4 overflow-auto", children: [
76
- /* @__PURE__ */ jsx(
77
- Form.Field,
78
- {
79
- control: form.control,
80
- name: "title",
81
- render: ({ field }) => {
82
- return /* @__PURE__ */ jsxs(Form.Item, { children: [
83
- /* @__PURE__ */ jsx(Form.Label, { children: t("products.fields.options.optionTitle") }),
84
- /* @__PURE__ */ jsx(Form.Control, { children: /* @__PURE__ */ jsx(
85
- Input,
86
- {
87
- ...field,
88
- placeholder: t(
89
- "products.fields.options.optionTitlePlaceholder"
90
- )
91
- }
92
- ) }),
93
- /* @__PURE__ */ jsx(Form.ErrorMessage, {})
94
- ] });
95
- }
96
- }
97
- ),
98
- /* @__PURE__ */ jsx(
99
- Form.Field,
100
- {
101
- control: form.control,
102
- name: "values",
103
- render: ({ field: { ...field } }) => {
104
- return /* @__PURE__ */ jsxs(Form.Item, { children: [
105
- /* @__PURE__ */ jsx(Form.Label, { children: t("products.fields.options.variations") }),
106
- /* @__PURE__ */ jsx(Form.Control, { children: /* @__PURE__ */ jsx(
107
- ChipInput,
108
- {
109
- ...field,
110
- placeholder: t(
111
- "products.fields.options.variantionsPlaceholder"
112
- )
113
- }
114
- ) }),
115
- /* @__PURE__ */ jsx(Form.ErrorMessage, {})
116
- ] });
117
- }
118
- }
119
- )
120
- ] }),
121
- /* @__PURE__ */ jsx(RouteDrawer.Footer, { children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-end gap-x-2", children: [
122
- /* @__PURE__ */ jsx(RouteDrawer.Close, { asChild: true, children: /* @__PURE__ */ jsx(Button, { variant: "secondary", size: "small", children: t("actions.cancel") }) }),
123
- /* @__PURE__ */ jsx(Button, { type: "submit", size: "small", isLoading: isPending, children: t("actions.save") })
124
- ] }) })
125
- ]
126
- }
127
- ) });
128
- };
129
-
130
- // src/routes/products/product-edit-option/product-edit-option.tsx
131
- import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
132
- var ProductEditOption = () => {
133
- const { id, option_id } = useParams();
134
- const { t } = useTranslation2();
135
- const { product, isPending, isFetching, isError, error } = useProduct(id);
136
- const option = product?.options.find((o) => o.id === option_id);
137
- if (!isPending && !isFetching && !option) {
138
- throw json({ message: `An option with ID ${option_id} was not found` }, 404);
139
- }
140
- if (isError) {
141
- throw error;
142
- }
143
- return /* @__PURE__ */ jsxs2(RouteDrawer, { children: [
144
- /* @__PURE__ */ jsx2(RouteDrawer.Header, { children: /* @__PURE__ */ jsx2(Heading, { children: t("products.options.edit.header") }) }),
145
- option && /* @__PURE__ */ jsx2(CreateProductOptionForm, { option })
146
- ] });
147
- };
148
- export {
149
- ProductEditOption as Component
150
- };