@vendure/dashboard 3.3.6-master-202507041203 → 3.4.0-minor-202506250934

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 (390) hide show
  1. package/README.md +4 -41
  2. package/dist/plugin/utils/config-loader.d.ts +1 -70
  3. package/dist/plugin/utils/config-loader.js +9 -33
  4. package/dist/plugin/vite-plugin-config-loader.js +1 -6
  5. package/dist/plugin/vite-plugin-config.js +7 -6
  6. package/dist/plugin/vite-plugin-dashboard-metadata.d.ts +3 -1
  7. package/dist/plugin/vite-plugin-dashboard-metadata.js +8 -1
  8. package/dist/plugin/vite-plugin-vendure-dashboard.d.ts +0 -41
  9. package/dist/plugin/vite-plugin-vendure-dashboard.js +2 -5
  10. package/package.json +131 -131
  11. package/src/app/app-providers.tsx +6 -6
  12. package/src/app/main.tsx +9 -9
  13. package/src/app/routes/__root.tsx +2 -1
  14. package/src/app/routes/_authenticated/_administrators/administrators.graphql.ts +1 -10
  15. package/src/app/routes/_authenticated/_administrators/administrators.tsx +8 -15
  16. package/src/app/routes/_authenticated/_administrators/administrators_.$id.tsx +12 -16
  17. package/src/app/routes/_authenticated/_administrators/components/role-permissions-display.tsx +16 -16
  18. package/src/app/routes/_authenticated/_assets/assets.graphql.ts +2 -13
  19. package/src/app/routes/_authenticated/_assets/assets.tsx +4 -16
  20. package/src/app/routes/_authenticated/_assets/assets_.$id.tsx +38 -52
  21. package/src/app/routes/_authenticated/_channels/channels.graphql.ts +1 -10
  22. package/src/app/routes/_authenticated/_channels/channels.tsx +10 -17
  23. package/src/app/routes/_authenticated/_channels/channels_.$id.tsx +17 -21
  24. package/src/app/routes/_authenticated/_collections/collections.graphql.ts +3 -60
  25. package/src/app/routes/_authenticated/_collections/collections.tsx +124 -168
  26. package/src/app/routes/_authenticated/_collections/collections_.$id.tsx +16 -20
  27. package/src/app/routes/_authenticated/_collections/components/collection-contents-preview-table.tsx +8 -7
  28. package/src/app/routes/_authenticated/_collections/components/collection-contents-sheet.tsx +5 -9
  29. package/src/app/routes/_authenticated/_collections/components/collection-contents-table.tsx +9 -10
  30. package/src/app/routes/_authenticated/_collections/components/collection-filters-selector.tsx +7 -7
  31. package/src/app/routes/_authenticated/_countries/countries.graphql.ts +2 -11
  32. package/src/app/routes/_authenticated/_countries/countries.tsx +6 -13
  33. package/src/app/routes/_authenticated/_countries/countries_.$id.tsx +17 -21
  34. package/src/app/routes/_authenticated/_customer-groups/components/customer-group-members-sheet.tsx +5 -12
  35. package/src/app/routes/_authenticated/_customer-groups/components/customer-group-members-table.tsx +17 -22
  36. package/src/app/routes/_authenticated/_customer-groups/customer-groups.graphql.ts +2 -11
  37. package/src/app/routes/_authenticated/_customer-groups/customer-groups.tsx +6 -13
  38. package/src/app/routes/_authenticated/_customer-groups/customer-groups_.$id.tsx +15 -18
  39. package/src/app/routes/_authenticated/_customers/components/customer-address-card.tsx +19 -19
  40. package/src/app/routes/_authenticated/_customers/components/customer-address-form.tsx +10 -10
  41. package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history-container.tsx +5 -5
  42. package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history.tsx +7 -11
  43. package/src/app/routes/_authenticated/_customers/components/customer-history/use-customer-history.ts +4 -4
  44. package/src/app/routes/_authenticated/_customers/components/customer-order-table.tsx +73 -75
  45. package/src/app/routes/_authenticated/_customers/components/customer-status-badge.tsx +4 -4
  46. package/src/app/routes/_authenticated/_customers/customers.graphql.ts +2 -10
  47. package/src/app/routes/_authenticated/_customers/customers.tsx +6 -13
  48. package/src/app/routes/_authenticated/_customers/customers_.$id.tsx +15 -19
  49. package/src/app/routes/_authenticated/_facets/components/edit-facet-value.tsx +9 -9
  50. package/src/app/routes/_authenticated/_facets/components/facet-values-sheet.tsx +4 -4
  51. package/src/app/routes/_authenticated/_facets/components/facet-values-table.tsx +11 -15
  52. package/src/app/routes/_authenticated/_facets/facets.graphql.ts +1 -31
  53. package/src/app/routes/_authenticated/_facets/facets.tsx +7 -31
  54. package/src/app/routes/_authenticated/_facets/facets_.$id.tsx +13 -17
  55. package/src/app/routes/_authenticated/_global-settings/global-settings.graphql.ts +1 -1
  56. package/src/app/routes/_authenticated/_global-settings/global-settings.tsx +13 -13
  57. package/src/app/routes/_authenticated/_orders/components/customer-address-selector.tsx +14 -11
  58. package/src/app/routes/_authenticated/_orders/components/edit-order-table.tsx +55 -93
  59. package/src/app/routes/_authenticated/_orders/components/money-gross-net.tsx +9 -11
  60. package/src/app/routes/_authenticated/_orders/components/order-address.tsx +6 -5
  61. package/src/app/routes/_authenticated/_orders/components/order-history/order-history-container.tsx +62 -67
  62. package/src/app/routes/_authenticated/_orders/components/order-history/order-history.tsx +6 -11
  63. package/src/app/routes/_authenticated/_orders/components/order-history/use-order-history.ts +5 -9
  64. package/src/app/routes/_authenticated/_orders/components/order-line-custom-fields-form.tsx +7 -11
  65. package/src/app/routes/_authenticated/_orders/components/order-table-totals.tsx +22 -39
  66. package/src/app/routes/_authenticated/_orders/components/order-table.tsx +4 -4
  67. package/src/app/routes/_authenticated/_orders/components/order-tax-summary.tsx +36 -37
  68. package/src/app/routes/_authenticated/_orders/components/payment-details.tsx +33 -18
  69. package/src/app/routes/_authenticated/_orders/components/shipping-method-selector.tsx +44 -43
  70. package/src/app/routes/_authenticated/_orders/orders.graphql.ts +3 -101
  71. package/src/app/routes/_authenticated/_orders/orders.tsx +20 -21
  72. package/src/app/routes/_authenticated/_orders/orders_.$id.tsx +16 -72
  73. package/src/app/routes/_authenticated/_orders/orders_.draft.$id.tsx +90 -188
  74. package/src/app/routes/_authenticated/_payment-methods/components/payment-eligibility-checker-selector.tsx +7 -10
  75. package/src/app/routes/_authenticated/_payment-methods/components/payment-handler-selector.tsx +11 -11
  76. package/src/app/routes/_authenticated/_payment-methods/payment-methods.graphql.ts +2 -29
  77. package/src/app/routes/_authenticated/_payment-methods/payment-methods.tsx +14 -36
  78. package/src/app/routes/_authenticated/_payment-methods/payment-methods_.$id.tsx +15 -22
  79. package/src/app/routes/_authenticated/_product-variants/components/variant-price-detail.tsx +6 -7
  80. package/src/app/routes/_authenticated/_product-variants/product-variants.graphql.ts +3 -64
  81. package/src/app/routes/_authenticated/_product-variants/product-variants.tsx +9 -39
  82. package/src/app/routes/_authenticated/_product-variants/product-variants_.$id.tsx +22 -33
  83. package/src/app/routes/_authenticated/_products/components/add-product-variant-dialog.tsx +10 -10
  84. package/src/app/routes/_authenticated/_products/components/create-product-options-dialog.tsx +41 -57
  85. package/src/app/routes/_authenticated/_products/components/create-product-variants-dialog.tsx +11 -11
  86. package/src/app/routes/_authenticated/_products/components/create-product-variants.tsx +14 -18
  87. package/src/app/routes/_authenticated/_products/components/option-value-input.tsx +15 -21
  88. package/src/app/routes/_authenticated/_products/components/product-option-select.tsx +34 -28
  89. package/src/app/routes/_authenticated/_products/components/product-variants-table.tsx +53 -84
  90. package/src/app/routes/_authenticated/_products/products.graphql.ts +2 -70
  91. package/src/app/routes/_authenticated/_products/products.tsx +7 -36
  92. package/src/app/routes/_authenticated/_products/products_.$id.tsx +24 -33
  93. package/src/app/routes/_authenticated/_profile/profile.graphql.ts +1 -1
  94. package/src/app/routes/_authenticated/_profile/profile.tsx +8 -8
  95. package/src/app/routes/_authenticated/_promotions/components/promotion-actions-selector.tsx +11 -14
  96. package/src/app/routes/_authenticated/_promotions/components/promotion-conditions-selector.tsx +11 -14
  97. package/src/app/routes/_authenticated/_promotions/promotions.graphql.ts +2 -27
  98. package/src/app/routes/_authenticated/_promotions/promotions.tsx +7 -31
  99. package/src/app/routes/_authenticated/_promotions/promotions_.$id.tsx +16 -20
  100. package/src/app/routes/_authenticated/_roles/components/expandable-permissions.tsx +5 -5
  101. package/src/app/routes/_authenticated/_roles/components/permissions-grid.tsx +17 -21
  102. package/src/app/routes/_authenticated/_roles/roles.graphql.ts +1 -10
  103. package/src/app/routes/_authenticated/_roles/roles.tsx +10 -17
  104. package/src/app/routes/_authenticated/_roles/roles_.$id.tsx +12 -16
  105. package/src/app/routes/_authenticated/_sellers/sellers.graphql.ts +1 -10
  106. package/src/app/routes/_authenticated/_sellers/sellers.tsx +6 -13
  107. package/src/app/routes/_authenticated/_sellers/sellers_.$id.tsx +13 -17
  108. package/src/app/routes/_authenticated/_shipping-methods/components/fulfillment-handler-selector.tsx +6 -6
  109. package/src/app/routes/_authenticated/_shipping-methods/components/shipping-calculator-selector.tsx +21 -23
  110. package/src/app/routes/_authenticated/_shipping-methods/components/shipping-eligibility-checker-selector.tsx +21 -25
  111. package/src/app/routes/_authenticated/_shipping-methods/components/test-shipping-method-dialog.tsx +3 -3
  112. package/src/app/routes/_authenticated/_shipping-methods/shipping-methods.graphql.ts +2 -29
  113. package/src/app/routes/_authenticated/_shipping-methods/shipping-methods.tsx +6 -25
  114. package/src/app/routes/_authenticated/_shipping-methods/shipping-methods_.$id.tsx +13 -17
  115. package/src/app/routes/_authenticated/_stock-locations/stock-locations.graphql.ts +1 -26
  116. package/src/app/routes/_authenticated/_stock-locations/stock-locations.tsx +6 -25
  117. package/src/app/routes/_authenticated/_stock-locations/stock-locations_.$id.tsx +12 -16
  118. package/src/app/routes/_authenticated/_system/components/payload-dialog.tsx +4 -4
  119. package/src/app/routes/_authenticated/_system/healthchecks.tsx +4 -4
  120. package/src/app/routes/_authenticated/_system/job-queue.graphql.ts +1 -1
  121. package/src/app/routes/_authenticated/_system/job-queue.tsx +6 -10
  122. package/src/app/routes/_authenticated/_system/scheduled-tasks.tsx +28 -34
  123. package/src/app/routes/_authenticated/_tax-categories/tax-categories.graphql.ts +2 -11
  124. package/src/app/routes/_authenticated/_tax-categories/tax-categories.tsx +7 -14
  125. package/src/app/routes/_authenticated/_tax-categories/tax-categories_.$id.tsx +16 -20
  126. package/src/app/routes/_authenticated/_tax-rates/tax-rates.graphql.ts +2 -11
  127. package/src/app/routes/_authenticated/_tax-rates/tax-rates.tsx +8 -15
  128. package/src/app/routes/_authenticated/_tax-rates/tax-rates_.$id.tsx +18 -22
  129. package/src/app/routes/_authenticated/_zones/components/zone-countries-sheet.tsx +4 -4
  130. package/src/app/routes/_authenticated/_zones/components/zone-countries-table.tsx +8 -12
  131. package/src/app/routes/_authenticated/_zones/zones.graphql.ts +2 -11
  132. package/src/app/routes/_authenticated/_zones/zones.tsx +6 -13
  133. package/src/app/routes/_authenticated/_zones/zones_.$id.tsx +14 -18
  134. package/src/app/routes/_authenticated/index.tsx +4 -4
  135. package/src/app/routes/_authenticated.tsx +3 -3
  136. package/src/app/routes/login.tsx +2 -2
  137. package/src/app/styles.css +1 -4
  138. package/src/lib/components/data-display/boolean.tsx +1 -1
  139. package/src/lib/components/data-display/date-time.tsx +2 -2
  140. package/src/lib/components/data-display/json.tsx +1 -1
  141. package/src/lib/components/data-display/money.tsx +3 -2
  142. package/src/lib/components/data-input/affixed-input.tsx +8 -3
  143. package/src/lib/components/data-input/customer-group-input.tsx +2 -2
  144. package/src/lib/components/data-input/datetime-input.tsx +146 -129
  145. package/src/lib/components/data-input/facet-value-input.tsx +22 -30
  146. package/src/lib/components/data-input/money-input.tsx +12 -5
  147. package/src/lib/components/data-input/{rich-text-input.tsx → richt-text-input.tsx} +1 -1
  148. package/src/lib/components/data-table/add-filter-menu.tsx +18 -9
  149. package/src/lib/components/data-table/data-table-column-header.tsx +22 -4
  150. package/src/lib/components/data-table/data-table-faceted-filter.tsx +8 -8
  151. package/src/lib/components/data-table/data-table-filter-badge.tsx +8 -16
  152. package/src/lib/components/data-table/data-table-filter-dialog.tsx +8 -8
  153. package/src/lib/components/data-table/data-table-pagination.tsx +4 -4
  154. package/src/lib/components/data-table/data-table-view-options.tsx +21 -25
  155. package/src/lib/components/data-table/data-table.tsx +41 -85
  156. package/src/lib/components/data-table/filters/data-table-boolean-filter.tsx +8 -11
  157. package/src/lib/components/data-table/filters/data-table-datetime-filter.tsx +23 -14
  158. package/src/lib/components/data-table/filters/data-table-id-filter.tsx +10 -15
  159. package/src/lib/components/data-table/filters/data-table-number-filter.tsx +17 -18
  160. package/src/lib/components/data-table/filters/data-table-string-filter.tsx +12 -29
  161. package/src/lib/components/data-table/human-readable-operator.tsx +3 -3
  162. package/src/lib/components/data-table/refresh-button.tsx +15 -30
  163. package/src/lib/components/layout/app-layout.tsx +8 -8
  164. package/src/lib/components/layout/app-sidebar.tsx +5 -5
  165. package/src/lib/components/layout/channel-switcher.tsx +8 -8
  166. package/src/lib/components/layout/content-language-selector.tsx +10 -16
  167. package/src/lib/components/layout/generated-breadcrumbs.tsx +1 -1
  168. package/src/lib/components/layout/language-dialog.tsx +11 -5
  169. package/src/lib/components/layout/nav-main.tsx +4 -4
  170. package/src/lib/components/layout/nav-projects.tsx +2 -2
  171. package/src/lib/components/layout/nav-user.tsx +7 -7
  172. package/src/lib/components/layout/prerelease-popup.tsx +1 -1
  173. package/src/lib/components/login/login-form.tsx +5 -5
  174. package/src/lib/components/shared/alerts.tsx +3 -3
  175. package/src/lib/components/shared/animated-number.tsx +2 -2
  176. package/src/lib/components/shared/asset/asset-focal-point-editor.tsx +19 -29
  177. package/src/lib/components/shared/asset/asset-gallery.tsx +18 -23
  178. package/src/lib/components/shared/asset/asset-picker-dialog.tsx +66 -63
  179. package/src/lib/components/shared/asset/asset-preview-dialog.tsx +7 -3
  180. package/src/lib/components/shared/asset/asset-preview-selector.tsx +6 -4
  181. package/src/lib/components/shared/asset/asset-preview.tsx +15 -7
  182. package/src/lib/components/shared/asset/asset-properties.tsx +9 -7
  183. package/src/lib/components/shared/asset/focal-point-control.tsx +13 -5
  184. package/src/lib/components/shared/assigned-facet-values.tsx +5 -1
  185. package/src/lib/components/shared/channel-code-label.tsx +4 -3
  186. package/src/lib/components/shared/channel-selector.tsx +6 -6
  187. package/src/lib/components/shared/configurable-operation-arg-input.tsx +2 -2
  188. package/src/lib/components/shared/configurable-operation-input.tsx +16 -15
  189. package/src/lib/components/shared/confirmation-dialog.tsx +2 -2
  190. package/src/lib/components/shared/copyable-text.tsx +3 -2
  191. package/src/lib/components/shared/country-selector.tsx +18 -21
  192. package/src/lib/components/shared/currency-selector.tsx +5 -5
  193. package/src/lib/components/shared/custom-fields-form.tsx +51 -253
  194. package/src/lib/components/shared/customer-address-form.tsx +13 -18
  195. package/src/lib/components/shared/customer-group-selector.tsx +6 -6
  196. package/src/lib/components/shared/customer-selector.tsx +18 -24
  197. package/src/lib/components/shared/detail-page-button.tsx +1 -3
  198. package/src/lib/components/shared/entity-assets.tsx +34 -33
  199. package/src/lib/components/shared/error-page.tsx +6 -6
  200. package/src/lib/components/shared/facet-value-chip.tsx +5 -12
  201. package/src/lib/components/shared/facet-value-selector.tsx +63 -64
  202. package/src/lib/components/shared/form-field-wrapper.tsx +13 -22
  203. package/src/lib/components/shared/history-timeline/history-entry.tsx +6 -12
  204. package/src/lib/components/shared/history-timeline/history-note-checkbox.tsx +3 -3
  205. package/src/lib/components/shared/history-timeline/history-note-editor.tsx +4 -4
  206. package/src/lib/components/shared/history-timeline/history-note-input.tsx +3 -3
  207. package/src/lib/components/shared/history-timeline/history-timeline.tsx +8 -15
  208. package/src/lib/components/shared/language-selector.tsx +5 -5
  209. package/src/lib/components/shared/logo-mark.tsx +2 -2
  210. package/src/lib/components/shared/multi-select.tsx +5 -5
  211. package/src/lib/components/shared/navigation-confirmation.tsx +9 -24
  212. package/src/lib/components/shared/option-value-input.tsx +15 -17
  213. package/src/lib/components/shared/paginated-list-data-table.tsx +24 -100
  214. package/src/lib/components/shared/permission-guard.tsx +4 -4
  215. package/src/lib/components/shared/product-variant-selector.tsx +31 -32
  216. package/src/lib/components/shared/role-code-label.tsx +6 -10
  217. package/src/lib/components/shared/role-selector.tsx +4 -4
  218. package/src/lib/components/shared/seller-selector.tsx +17 -21
  219. package/src/lib/components/shared/stock-level-label.tsx +5 -5
  220. package/src/lib/components/shared/tax-category-selector.tsx +5 -5
  221. package/src/lib/components/shared/translatable-form-field.tsx +10 -5
  222. package/src/lib/components/shared/vendure-image.tsx +2 -31
  223. package/src/lib/components/shared/zone-selector.tsx +6 -5
  224. package/src/lib/components/ui/accordion.tsx +3 -3
  225. package/src/lib/components/ui/alert-dialog.tsx +10 -10
  226. package/src/lib/components/ui/alert.tsx +3 -3
  227. package/src/lib/components/ui/badge.tsx +2 -2
  228. package/src/lib/components/ui/breadcrumb.tsx +4 -4
  229. package/src/lib/components/ui/button.tsx +3 -10
  230. package/src/lib/components/ui/calendar.tsx +459 -392
  231. package/src/lib/components/ui/card.tsx +2 -2
  232. package/src/lib/components/ui/checkbox.tsx +2 -2
  233. package/src/lib/components/ui/command.tsx +6 -12
  234. package/src/lib/components/ui/dialog.tsx +2 -2
  235. package/src/lib/components/ui/dropdown-menu.tsx +7 -7
  236. package/src/lib/components/ui/form.tsx +4 -4
  237. package/src/lib/components/ui/hover-card.tsx +3 -3
  238. package/src/lib/components/ui/input.tsx +1 -1
  239. package/src/lib/components/ui/label.tsx +2 -2
  240. package/src/lib/components/ui/pagination.tsx +108 -87
  241. package/src/lib/components/ui/popover.tsx +3 -3
  242. package/src/lib/components/ui/scroll-area.tsx +2 -2
  243. package/src/lib/components/ui/select.tsx +129 -151
  244. package/src/lib/components/ui/separator.tsx +2 -2
  245. package/src/lib/components/ui/sheet.tsx +5 -5
  246. package/src/lib/components/ui/sidebar.tsx +10 -10
  247. package/src/lib/components/ui/skeleton.tsx +1 -1
  248. package/src/lib/components/ui/switch.tsx +2 -2
  249. package/src/lib/components/ui/table.tsx +2 -2
  250. package/src/lib/components/ui/tabs.tsx +3 -3
  251. package/src/lib/components/ui/textarea.tsx +1 -1
  252. package/src/lib/components/ui/tooltip.tsx +3 -3
  253. package/src/lib/framework/alert/alert-extensions.tsx +3 -2
  254. package/src/lib/framework/alert/alert-item.tsx +3 -5
  255. package/src/lib/framework/alert/types.ts +13 -0
  256. package/src/lib/framework/component-registry/component-registry.tsx +47 -33
  257. package/src/lib/framework/dashboard-widget/base-widget.tsx +13 -5
  258. package/src/lib/framework/dashboard-widget/latest-orders-widget/index.tsx +8 -8
  259. package/src/lib/framework/dashboard-widget/latest-orders-widget/latest-orders-widget.graphql.ts +1 -1
  260. package/src/lib/framework/dashboard-widget/metrics-widget/index.tsx +7 -6
  261. package/src/lib/framework/dashboard-widget/metrics-widget/metrics-widget.graphql.ts +1 -1
  262. package/src/lib/framework/dashboard-widget/orders-summary/index.tsx +6 -7
  263. package/src/lib/framework/dashboard-widget/orders-summary/order-summary-widget.graphql.ts +1 -1
  264. package/src/lib/framework/dashboard-widget/types.ts +22 -0
  265. package/src/lib/framework/dashboard-widget/widget-extensions.tsx +1 -1
  266. package/src/lib/framework/defaults.ts +1 -1
  267. package/src/lib/framework/document-introspection/add-custom-fields.ts +2 -50
  268. package/src/lib/framework/document-introspection/get-document-structure.ts +10 -43
  269. package/src/lib/framework/document-introspection/hooks.ts +1 -4
  270. package/src/lib/framework/extension-api/define-dashboard-extension.ts +49 -31
  271. package/src/lib/framework/extension-api/extension-api-types.ts +98 -25
  272. package/src/lib/framework/extension-api/use-dashboard-extensions.ts +1 -2
  273. package/src/lib/framework/form-engine/form-schema-tools.ts +1 -1
  274. package/src/lib/framework/form-engine/use-generated-form.tsx +18 -57
  275. package/src/lib/framework/layout-engine/location-wrapper.tsx +8 -11
  276. package/src/lib/framework/layout-engine/page-layout.tsx +48 -66
  277. package/src/lib/framework/page/detail-page-route-loader.tsx +7 -26
  278. package/src/lib/framework/page/detail-page.tsx +37 -122
  279. package/src/lib/framework/page/list-page.tsx +11 -9
  280. package/src/lib/framework/page/use-detail-page.ts +7 -38
  281. package/src/lib/framework/page/use-extended-router.tsx +5 -4
  282. package/src/lib/framework/registry/registry-types.ts +5 -15
  283. package/src/lib/graphql/{fragments.ts → fragments.tsx} +2 -1
  284. package/src/lib/graphql/graphql-env.d.ts +13 -16
  285. package/src/lib/hooks/use-auth.tsx +1 -1
  286. package/src/lib/hooks/use-channel.ts +1 -1
  287. package/src/lib/hooks/use-grouped-permissions.ts +2 -3
  288. package/src/lib/hooks/use-page.tsx +2 -2
  289. package/src/lib/hooks/use-permissions.ts +2 -3
  290. package/src/lib/hooks/use-server-config.ts +1 -1
  291. package/src/lib/hooks/use-theme.ts +1 -1
  292. package/src/lib/hooks/use-user-settings.tsx +1 -1
  293. package/src/lib/index.ts +6 -65
  294. package/src/lib/lib/trans.tsx +3 -3
  295. package/src/lib/lib/utils.ts +0 -49
  296. package/src/lib/providers/auth.tsx +14 -37
  297. package/src/lib/providers/channel-provider.tsx +4 -4
  298. package/src/lib/providers/server-config.tsx +11 -13
  299. package/src/lib/providers/theme-provider.tsx +3 -2
  300. package/vite/utils/config-loader.ts +10 -120
  301. package/vite/vite-plugin-config-loader.ts +1 -6
  302. package/vite/vite-plugin-config.ts +7 -6
  303. package/vite/vite-plugin-dashboard-metadata.ts +9 -1
  304. package/vite/vite-plugin-vendure-dashboard.ts +4 -48
  305. package/dist/plugin/tests/barrel-exports/my-plugin/index.d.ts +0 -1
  306. package/dist/plugin/tests/barrel-exports/my-plugin/index.js +0 -17
  307. package/dist/plugin/tests/barrel-exports/my-plugin/src/my.plugin.d.ts +0 -2
  308. package/dist/plugin/tests/barrel-exports/my-plugin/src/my.plugin.js +0 -20
  309. package/dist/plugin/tests/barrel-exports/vendure-config.d.ts +0 -2
  310. package/dist/plugin/tests/barrel-exports/vendure-config.js +0 -19
  311. package/dist/plugin/tests/barrel-exports.spec.d.ts +0 -1
  312. package/dist/plugin/tests/barrel-exports.spec.js +0 -14
  313. package/dist/plugin/vite-plugin-tailwind-source.d.ts +0 -7
  314. package/dist/plugin/vite-plugin-tailwind-source.js +0 -49
  315. package/src/app/common/delete-bulk-action.tsx +0 -148
  316. package/src/app/common/duplicate-bulk-action.tsx +0 -134
  317. package/src/app/routes/_authenticated/_administrators/components/administrator-bulk-actions.tsx +0 -15
  318. package/src/app/routes/_authenticated/_assets/components/asset-bulk-actions.tsx +0 -45
  319. package/src/app/routes/_authenticated/_channels/components/channel-bulk-actions.tsx +0 -15
  320. package/src/app/routes/_authenticated/_collections/components/collection-bulk-actions.tsx +0 -123
  321. package/src/app/routes/_authenticated/_collections/components/move-collections-dialog.tsx +0 -430
  322. package/src/app/routes/_authenticated/_collections/components/move-single-collection.tsx +0 -33
  323. package/src/app/routes/_authenticated/_countries/components/country-bulk-actions.tsx +0 -15
  324. package/src/app/routes/_authenticated/_customer-groups/components/customer-group-bulk-actions.tsx +0 -15
  325. package/src/app/routes/_authenticated/_customers/components/customer-bulk-actions.tsx +0 -15
  326. package/src/app/routes/_authenticated/_facets/components/facet-bulk-actions.tsx +0 -104
  327. package/src/app/routes/_authenticated/_orders/components/add-manual-payment-dialog.tsx +0 -191
  328. package/src/app/routes/_authenticated/_orders/components/fulfill-order-dialog.tsx +0 -320
  329. package/src/app/routes/_authenticated/_orders/components/fulfillment-details.tsx +0 -173
  330. package/src/app/routes/_authenticated/_orders/utils/order-types.ts +0 -7
  331. package/src/app/routes/_authenticated/_orders/utils/order-utils.ts +0 -77
  332. package/src/app/routes/_authenticated/_payment-methods/components/payment-method-bulk-actions.tsx +0 -58
  333. package/src/app/routes/_authenticated/_product-variants/components/product-variant-bulk-actions.tsx +0 -110
  334. package/src/app/routes/_authenticated/_products/components/assign-facet-values-dialog.tsx +0 -281
  335. package/src/app/routes/_authenticated/_products/components/product-bulk-actions.tsx +0 -123
  336. package/src/app/routes/_authenticated/_promotions/components/promotion-bulk-actions.tsx +0 -82
  337. package/src/app/routes/_authenticated/_roles/components/role-bulk-actions.tsx +0 -15
  338. package/src/app/routes/_authenticated/_sellers/components/seller-bulk-actions.tsx +0 -15
  339. package/src/app/routes/_authenticated/_shipping-methods/components/shipping-method-bulk-actions.tsx +0 -61
  340. package/src/app/routes/_authenticated/_stock-locations/components/stock-location-bulk-actions.tsx +0 -58
  341. package/src/app/routes/_authenticated/_tax-categories/components/tax-category-bulk-actions.tsx +0 -15
  342. package/src/app/routes/_authenticated/_tax-rates/components/tax-rate-bulk-actions.tsx +0 -15
  343. package/src/app/routes/_authenticated/_zones/components/zone-bulk-actions.tsx +0 -15
  344. package/src/lib/components/data-input/index.ts +0 -11
  345. package/src/lib/components/data-input/relation-input.tsx +0 -153
  346. package/src/lib/components/data-input/relation-selector.tsx +0 -468
  347. package/src/lib/components/data-table/data-table-bulk-action-item.tsx +0 -101
  348. package/src/lib/components/data-table/data-table-bulk-actions.tsx +0 -95
  349. package/src/lib/components/labeled-data.tsx +0 -21
  350. package/src/lib/components/shared/asset/asset-bulk-actions.tsx +0 -94
  351. package/src/lib/components/shared/assign-to-channel-bulk-action.tsx +0 -71
  352. package/src/lib/components/shared/assign-to-channel-dialog.tsx +0 -155
  353. package/src/lib/components/shared/remove-from-channel-bulk-action.tsx +0 -90
  354. package/src/lib/framework/data-table/data-table-extensions.ts +0 -35
  355. package/src/lib/framework/document-extension/extend-detail-form-query.ts +0 -50
  356. package/src/lib/framework/document-extension/extend-document.spec.ts +0 -884
  357. package/src/lib/framework/document-extension/extend-document.ts +0 -159
  358. package/src/lib/framework/extension-api/display-component-extensions.tsx +0 -69
  359. package/src/lib/framework/extension-api/input-component-extensions.tsx +0 -69
  360. package/src/lib/framework/extension-api/logic/alerts.ts +0 -10
  361. package/src/lib/framework/extension-api/logic/data-table.ts +0 -60
  362. package/src/lib/framework/extension-api/logic/detail-forms.ts +0 -48
  363. package/src/lib/framework/extension-api/logic/form-components.ts +0 -13
  364. package/src/lib/framework/extension-api/logic/index.ts +0 -8
  365. package/src/lib/framework/extension-api/logic/layout.ts +0 -22
  366. package/src/lib/framework/extension-api/logic/navigation.ts +0 -37
  367. package/src/lib/framework/extension-api/logic/widgets.ts +0 -10
  368. package/src/lib/framework/extension-api/types/alerts.ts +0 -54
  369. package/src/lib/framework/extension-api/types/data-table.ts +0 -87
  370. package/src/lib/framework/extension-api/types/detail-forms.ts +0 -81
  371. package/src/lib/framework/extension-api/types/form-components.ts +0 -32
  372. package/src/lib/framework/extension-api/types/index.ts +0 -8
  373. package/src/lib/framework/extension-api/types/layout.ts +0 -78
  374. package/src/lib/framework/extension-api/types/navigation.ts +0 -19
  375. package/src/lib/framework/extension-api/types/widgets.ts +0 -97
  376. package/src/lib/framework/form-engine/custom-form-component-extensions.ts +0 -38
  377. package/src/lib/framework/form-engine/custom-form-component.tsx +0 -33
  378. package/src/lib/framework/form-engine/utils.ts +0 -58
  379. package/src/lib/framework/layout-engine/page-block-provider.tsx +0 -6
  380. package/src/lib/graphql/common-operations.ts +0 -18
  381. package/src/lib/hooks/use-extended-detail-query.ts +0 -37
  382. package/src/lib/hooks/use-extended-list-query.ts +0 -73
  383. package/src/lib/hooks/use-page-block.tsx +0 -10
  384. package/vite/tests/barrel-exports/my-plugin/index.ts +0 -1
  385. package/vite/tests/barrel-exports/my-plugin/src/my.plugin.ts +0 -8
  386. package/vite/tests/barrel-exports/package.json +0 -6
  387. package/vite/tests/barrel-exports/vendure-config.ts +0 -19
  388. package/vite/tests/barrel-exports.spec.ts +0 -21
  389. package/vite/vite-plugin-tailwind-source.ts +0 -65
  390. /package/src/lib/components/data-table/{types.ts → data-table-types.ts} +0 -0
@@ -1,5 +1,4 @@
1
- import { FormFieldWrapper } from '@/vdb/components/shared/form-field-wrapper.js';
2
- import { Button } from '@/vdb/components/ui/button.js';
1
+ import { Button } from '@/components/ui/button.js';
3
2
  import {
4
3
  Dialog,
5
4
  DialogContent,
@@ -7,12 +6,13 @@ import {
7
6
  DialogHeader,
8
7
  DialogTitle,
9
8
  DialogTrigger,
10
- } from '@/vdb/components/ui/dialog.js';
11
- import { Form } from '@/vdb/components/ui/form.js';
12
- import { Input } from '@/vdb/components/ui/input.js';
13
- import { api } from '@/vdb/graphql/api.js';
14
- import { graphql } from '@/vdb/graphql/graphql.js';
15
- import { Trans, useLingui } from '@/vdb/lib/trans.js';
9
+ } from '@/components/ui/dialog.js';
10
+ import { Form } from '@/components/ui/form.js';
11
+ import { Input } from '@/components/ui/input.js';
12
+ import { FormFieldWrapper } from '@/components/shared/form-field-wrapper.js';
13
+ import { api } from '@/graphql/api.js';
14
+ import { graphql } from '@/graphql/graphql.js';
15
+ import { Trans, useLingui } from '@/lib/trans.js';
16
16
  import { zodResolver } from '@hookform/resolvers/zod';
17
17
  import { useMutation, useQuery } from '@tanstack/react-query';
18
18
  import { Plus, Trash2 } from 'lucide-react';
@@ -99,16 +99,10 @@ const updateProductVariantDocument = graphql(`
99
99
  `);
100
100
 
101
101
  const formSchema = z.object({
102
- optionGroups: z
103
- .array(
104
- z.object({
105
- name: z.string().min(1, 'Option group name is required'),
106
- options: z
107
- .array(z.string().min(1, 'Option name is required'))
108
- .min(1, 'At least one option is required'),
109
- }),
110
- )
111
- .min(1, 'At least one option group is required'),
102
+ optionGroups: z.array(z.object({
103
+ name: z.string().min(1, 'Option group name is required'),
104
+ options: z.array(z.string().min(1, 'Option name is required')).min(1, 'At least one option is required'),
105
+ })).min(1, 'At least one option group is required'),
112
106
  existingVariantOptionIds: z.array(z.string()).min(1, 'Must select an option for the existing variant'),
113
107
  });
114
108
 
@@ -152,11 +146,11 @@ export function CreateProductOptionsDialog({
152
146
  setOpen(false);
153
147
  onSuccess?.();
154
148
  },
155
- onError: error => {
149
+ onError: (error) => {
156
150
  toast.error(i18n.t('Failed to create product options'), {
157
151
  description: error instanceof Error ? error.message : i18n.t('Unknown error'),
158
152
  });
159
- },
153
+ }
160
154
  });
161
155
 
162
156
  const onSubmit = async (values: FormValues) => {
@@ -165,13 +159,13 @@ export function CreateProductOptionsDialog({
165
159
  try {
166
160
  // Create all option groups and their options
167
161
  const createdOptionGroups = await Promise.all(
168
- values.optionGroups.map(async group => {
162
+ values.optionGroups.map(async (group) => {
169
163
  const result = await createProductOptionGroupMutation.mutateAsync({
170
164
  input: {
171
165
  code: group.name.toLowerCase().replace(/\s+/g, '-'),
172
166
  translations: [
173
167
  {
174
- languageCode: 'en',
168
+ languageCode: "en",
175
169
  name: group.name,
176
170
  },
177
171
  ],
@@ -179,7 +173,7 @@ export function CreateProductOptionsDialog({
179
173
  code: option.toLowerCase().replace(/\s+/g, '-'),
180
174
  translations: [
181
175
  {
182
- languageCode: 'en',
176
+ languageCode: "en",
183
177
  name: option,
184
178
  },
185
179
  ],
@@ -194,11 +188,14 @@ export function CreateProductOptionsDialog({
194
188
  });
195
189
 
196
190
  return result.createProductOptionGroup;
197
- }),
191
+ })
198
192
  );
199
193
 
200
194
  // Combine existing and newly created option groups
201
- const allOptionGroups = [...(productData.product.optionGroups || []), ...createdOptionGroups];
195
+ const allOptionGroups = [
196
+ ...(productData.product.optionGroups || []),
197
+ ...createdOptionGroups,
198
+ ];
202
199
 
203
200
  // Map the selected option names to their IDs
204
201
  const selectedOptionIds = values.existingVariantOptionIds.map((optionName, index) => {
@@ -230,7 +227,7 @@ export function CreateProductOptionsDialog({
230
227
  optionIds: selectedOptionIds,
231
228
  translations: [
232
229
  {
233
- languageCode: 'en',
230
+ languageCode: "en",
234
231
  name: newVariantName,
235
232
  },
236
233
  ],
@@ -251,10 +248,7 @@ export function CreateProductOptionsDialog({
251
248
 
252
249
  const removeOptionGroup = (index: number) => {
253
250
  const currentGroups = form.getValues('optionGroups');
254
- form.setValue(
255
- 'optionGroups',
256
- currentGroups.filter((_, i) => i !== index),
257
- );
251
+ form.setValue('optionGroups', currentGroups.filter((_, i) => i !== index));
258
252
  };
259
253
 
260
254
  const addOption = (groupIndex: number) => {
@@ -267,9 +261,7 @@ export function CreateProductOptionsDialog({
267
261
  const removeOption = (groupIndex: number, optionIndex: number) => {
268
262
  const currentGroups = form.getValues('optionGroups');
269
263
  const updatedGroups = [...currentGroups];
270
- updatedGroups[groupIndex].options = updatedGroups[groupIndex].options.filter(
271
- (_, i) => i !== optionIndex,
272
- );
264
+ updatedGroups[groupIndex].options = updatedGroups[groupIndex].options.filter((_, i) => i !== optionIndex);
273
265
  form.setValue('optionGroups', updatedGroups);
274
266
  };
275
267
 
@@ -319,10 +311,7 @@ export function CreateProductOptionsDialog({
319
311
  name={`optionGroups.${groupIndex}.options.${optionIndex}`}
320
312
  label={<Trans>Option name</Trans>}
321
313
  render={({ field }) => (
322
- <Input
323
- {...field}
324
- placeholder={i18n.t('e.g. Small')}
325
- />
314
+ <Input {...field} placeholder={i18n.t('e.g. Small')} />
326
315
  )}
327
316
  />
328
317
  {optionIndex > 0 && (
@@ -348,7 +337,12 @@ export function CreateProductOptionsDialog({
348
337
  </div>
349
338
  </div>
350
339
  ))}
351
- <Button type="button" variant="outline" size="sm" onClick={addOptionGroup}>
340
+ <Button
341
+ type="button"
342
+ variant="outline"
343
+ size="sm"
344
+ onClick={addOptionGroup}
345
+ >
352
346
  <Plus className="mr-2 h-4 w-4" />
353
347
  <Trans>Add another option group</Trans>
354
348
  </Button>
@@ -360,10 +354,7 @@ export function CreateProductOptionsDialog({
360
354
  <Trans>Assign options to existing variant</Trans>
361
355
  </h3>
362
356
  <p className="text-sm text-muted-foreground">
363
- <Trans>
364
- Select which options should apply to the existing variant "
365
- {productData.product.variants[0].name}"
366
- </Trans>
357
+ <Trans>Select which options should apply to the existing variant "{productData.product.variants[0].name}"</Trans>
367
358
  </p>
368
359
  {/* Show existing option groups first */}
369
360
  {productData.product.optionGroups?.map((group, groupIndex) => (
@@ -376,16 +367,14 @@ export function CreateProductOptionsDialog({
376
367
  <select
377
368
  className="w-full p-2 border rounded-md"
378
369
  value={field.value}
379
- onChange={e => {
380
- const newValues = [
381
- ...form.getValues('existingVariantOptionIds'),
382
- ];
370
+ onChange={(e) => {
371
+ const newValues = [...form.getValues('existingVariantOptionIds')];
383
372
  newValues[groupIndex] = e.target.value;
384
373
  form.setValue('existingVariantOptionIds', newValues);
385
374
  }}
386
375
  >
387
376
  <option value="">Select an option</option>
388
- {group.options.map(option => (
377
+ {group.options.map((option) => (
389
378
  <option key={option.id} value={option.name}>
390
379
  {option.name}
391
380
  </option>
@@ -405,14 +394,9 @@ export function CreateProductOptionsDialog({
405
394
  <select
406
395
  className="w-full p-2 border rounded-md"
407
396
  value={field.value}
408
- onChange={e => {
409
- const newValues = [
410
- ...form.getValues('existingVariantOptionIds'),
411
- ];
412
- newValues[
413
- (productData?.product?.optionGroups?.length || 0) +
414
- groupIndex
415
- ] = e.target.value;
397
+ onChange={(e) => {
398
+ const newValues = [...form.getValues('existingVariantOptionIds')];
399
+ newValues[(productData?.product?.optionGroups?.length || 0) + groupIndex] = e.target.value;
416
400
  form.setValue('existingVariantOptionIds', newValues);
417
401
  }}
418
402
  >
@@ -436,7 +420,7 @@ export function CreateProductOptionsDialog({
436
420
  createProductOptionGroupMutation.isPending ||
437
421
  addOptionGroupToProductMutation.isPending ||
438
422
  updateProductVariantMutation.isPending ||
439
- (productData?.product?.variants[0] &&
423
+ (productData?.product?.variants[0] &&
440
424
  form.watch('existingVariantOptionIds').some(value => !value))
441
425
  }
442
426
  >
@@ -448,4 +432,4 @@ export function CreateProductOptionsDialog({
448
432
  </DialogContent>
449
433
  </Dialog>
450
434
  );
451
- }
435
+ }
@@ -1,22 +1,22 @@
1
- import { Button } from '@/vdb/components/ui/button.js';
1
+ import { useCallback, useMemo, useState } from 'react';
2
+ import { CreateProductVariants, VariantConfiguration } from './create-product-variants.js';
2
3
  import {
3
4
  Dialog,
4
5
  DialogContent,
5
- DialogDescription,
6
6
  DialogFooter,
7
7
  DialogHeader,
8
8
  DialogTitle,
9
+ DialogDescription,
9
10
  DialogTrigger,
10
- } from '@/vdb/components/ui/dialog.js';
11
- import { api } from '@/vdb/graphql/api.js';
12
- import { graphql } from '@/vdb/graphql/graphql.js';
13
- import { useChannel } from '@/vdb/hooks/use-channel.js';
14
- import { Trans } from '@/vdb/lib/trans.js';
15
- import { normalizeString } from '@/vdb/lib/utils.js';
16
- import { useMutation } from '@tanstack/react-query';
11
+ } from '@/components/ui/dialog.js';
12
+ import { Button } from '@/components/ui/button.js';
17
13
  import { Plus } from 'lucide-react';
18
- import { useCallback, useState } from 'react';
19
- import { CreateProductVariants, VariantConfiguration } from './create-product-variants.js';
14
+ import { useChannel } from '@/hooks/use-channel.js';
15
+ import { Trans } from '@/lib/trans.js';
16
+ import { graphql } from '@/graphql/graphql.js';
17
+ import { api } from '@/graphql/api.js';
18
+ import { useMutation } from '@tanstack/react-query';
19
+ import { normalizeString } from '@/lib/utils.js';
20
20
 
21
21
  const createProductOptionsMutation = graphql(`
22
22
  mutation CreateOptionGroups($input: CreateProductOptionGroupInput!) {
@@ -1,18 +1,19 @@
1
- import { Alert, AlertDescription } from '@/vdb/components/ui/alert.js';
2
- import { Button } from '@/vdb/components/ui/button.js';
3
- import { Checkbox } from '@/vdb/components/ui/checkbox.js';
4
- import { FormControl, FormField, FormItem, FormLabel, FormMessage } from '@/vdb/components/ui/form.js';
5
- import { Input } from '@/vdb/components/ui/input.js';
6
- import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/vdb/components/ui/table.js';
7
- import { api } from '@/vdb/graphql/api.js';
8
- import { graphql } from '@/vdb/graphql/graphql.js';
9
- import { Trans } from '@/vdb/lib/trans.js';
10
1
  import { zodResolver } from '@hookform/resolvers/zod';
11
- import { useQuery } from '@tanstack/react-query';
2
+ import { Trans } from '@/lib/trans.js';
12
3
  import { Plus, Trash2 } from 'lucide-react';
13
4
  import { useEffect, useMemo } from 'react';
14
5
  import { FormProvider, useFieldArray, useForm } from 'react-hook-form';
15
6
  import { z } from 'zod';
7
+ import { useQuery } from '@tanstack/react-query';
8
+ import { Alert, AlertDescription } from '@/components/ui/alert.js';
9
+ import { Button } from '@/components/ui/button.js';
10
+ import { Card } from '@/components/ui/card.js';
11
+ import { Checkbox } from '@/components/ui/checkbox.js';
12
+ import { FormControl, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form.js';
13
+ import { Input } from '@/components/ui/input.js';
14
+ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table.js';
15
+ import { graphql } from '@/graphql/graphql.js';
16
+ import { api } from '@/graphql/api.js';
16
17
  import { OptionValueInput } from './option-value-input.js';
17
18
 
18
19
  const getStockLocationsDocument = graphql(`
@@ -38,6 +39,7 @@ const optionGroupSchema = z.object({
38
39
  values: z.array(optionValueSchema).min(1, { message: 'At least one value is required' }),
39
40
  });
40
41
 
42
+
41
43
  type VariantOption = {
42
44
  name: string;
43
45
  value: string;
@@ -97,10 +99,7 @@ interface CreateProductVariantsProps {
97
99
  onChange?: ({ data }: { data: VariantConfiguration }) => void;
98
100
  }
99
101
 
100
- export function CreateProductVariants({
101
- currencyCode = 'USD',
102
- onChange,
103
- }: Readonly<CreateProductVariantsProps>) {
102
+ export function CreateProductVariants({ currencyCode = 'USD', onChange }: CreateProductVariantsProps) {
104
103
  const { data: stockLocationsResult } = useQuery({
105
104
  queryKey: ['stockLocations'],
106
105
  queryFn: () => api.query(getStockLocationsDocument, { options: { take: 100 } }),
@@ -128,10 +127,7 @@ export function CreateProductVariants({
128
127
 
129
128
  const watchedOptionGroups = watch('optionGroups');
130
129
  // memoize the variants
131
- const variants = useMemo(
132
- () => generateVariants(watchedOptionGroups),
133
- [JSON.stringify(watchedOptionGroups)],
134
- );
130
+ const variants = useMemo(() => generateVariants(watchedOptionGroups), [JSON.stringify(watchedOptionGroups)]);
135
131
 
136
132
  // Use the handleSubmit approach for the entire form
137
133
  useEffect(() => {
@@ -1,9 +1,10 @@
1
- import { Badge } from '@/vdb/components/ui/badge.js';
2
- import { Button } from '@/vdb/components/ui/button.js';
3
- import { Input } from '@/vdb/components/ui/input.js';
4
- import { Plus, X } from 'lucide-react';
5
- import { useState } from 'react';
6
- import { useFieldArray, useFormContext } from 'react-hook-form';
1
+ import { useFieldArray } from "react-hook-form";
2
+ import { useFormContext } from "react-hook-form";
3
+ import { useState } from "react";
4
+ import { Input } from "@/components/ui/input.js";
5
+ import { Button } from "@/components/ui/button.js";
6
+ import { Badge } from "@/components/ui/badge.js";
7
+ import { Plus, X } from "lucide-react";
7
8
 
8
9
  interface OptionValue {
9
10
  value: string;
@@ -15,15 +16,12 @@ interface FormValues {
15
16
  name: string;
16
17
  values: OptionValue[];
17
18
  }[];
18
- variants: Record<
19
- string,
20
- {
21
- enabled: boolean;
22
- sku: string;
23
- price: string;
24
- stock: string;
25
- }
26
- >;
19
+ variants: Record<string, {
20
+ enabled: boolean;
21
+ sku: string;
22
+ price: string;
23
+ stock: string;
24
+ }>;
27
25
  }
28
26
 
29
27
  interface OptionValueInputProps {
@@ -32,11 +30,7 @@ interface OptionValueInputProps {
32
30
  disabled?: boolean;
33
31
  }
34
32
 
35
- export function OptionValueInput({
36
- groupName,
37
- groupIndex,
38
- disabled = false,
39
- }: Readonly<OptionValueInputProps>) {
33
+ export function OptionValueInput({ groupName, groupIndex, disabled = false }: OptionValueInputProps) {
40
34
  const { control, watch } = useFormContext<FormValues>();
41
35
  const { fields, append, remove } = useFieldArray({
42
36
  control,
@@ -99,4 +93,4 @@ export function OptionValueInput({
99
93
  </div>
100
94
  </div>
101
95
  );
102
- }
96
+ }
@@ -1,17 +1,21 @@
1
- import { FormFieldWrapper } from '@/vdb/components/shared/form-field-wrapper.js';
2
- import { Button } from '@/vdb/components/ui/button.js';
1
+ import { useState } from 'react';
2
+ import { Plus, Check, ChevronsUpDown } from 'lucide-react';
3
+ import { Button } from '@/components/ui/button.js';
4
+ import { FormFieldWrapper } from '@/components/shared/form-field-wrapper.js';
3
5
  import {
4
6
  Command,
5
7
  CommandEmpty,
6
8
  CommandGroup,
7
9
  CommandInput,
8
10
  CommandItem,
9
- } from '@/vdb/components/ui/command.js';
10
- import { Popover, PopoverContent, PopoverTrigger } from '@/vdb/components/ui/popover.js';
11
- import { Trans, useLingui } from '@/vdb/lib/trans.js';
12
- import { cn } from '@/vdb/lib/utils.js';
13
- import { Check, ChevronsUpDown, Plus } from 'lucide-react';
14
- import { useState } from 'react';
11
+ } from '@/components/ui/command.js';
12
+ import {
13
+ Popover,
14
+ PopoverContent,
15
+ PopoverTrigger,
16
+ } from '@/components/ui/popover.js';
17
+ import { cn } from '@/lib/utils.js';
18
+ import { Trans, useLingui } from '@/lib/trans.js';
15
19
 
16
20
  interface ProductOption {
17
21
  id: string;
@@ -33,12 +37,7 @@ interface ProductOptionSelectProps {
33
37
  onCreateOption: (name: string) => void;
34
38
  }
35
39
 
36
- export function ProductOptionSelect({
37
- group,
38
- value,
39
- onChange,
40
- onCreateOption,
41
- }: Readonly<ProductOptionSelectProps>) {
40
+ export function ProductOptionSelect({ group, value, onChange, onCreateOption }: ProductOptionSelectProps) {
42
41
  const [open, setOpen] = useState(false);
43
42
  const [newOptionInput, setNewOptionInput] = useState('');
44
43
  const { i18n } = useLingui();
@@ -49,24 +48,31 @@ export function ProductOptionSelect({
49
48
  name={`options.${group.id}`}
50
49
  label={group.name}
51
50
  render={() => (
52
- <Popover open={open} onOpenChange={setOpen}>
51
+ <Popover
52
+ open={open}
53
+ onOpenChange={setOpen}
54
+ >
53
55
  <PopoverTrigger asChild>
54
- <Button variant="outline" role="combobox" className="w-full justify-between">
55
- {value ? (
56
- group.options.find(option => option.id === value)?.name
57
- ) : (
58
- <Trans>Select {group.name}</Trans>
59
- )}
56
+ <Button
57
+ variant="outline"
58
+ role="combobox"
59
+ className="w-full justify-between"
60
+ >
61
+ {value
62
+ ? group.options.find(
63
+ (option) => option.id === value,
64
+ )?.name
65
+ : <Trans>Select {group.name}</Trans>}
60
66
  <ChevronsUpDown className="ml-2 h-4 w-4 shrink-0 opacity-50" />
61
67
  </Button>
62
68
  </PopoverTrigger>
63
69
  <PopoverContent className="w-full p-0">
64
70
  <Command>
65
- <CommandInput
66
- placeholder={i18n.t('Search {name}...').replace('{name}', group.name)}
71
+ <CommandInput
72
+ placeholder={i18n.t('Search {name}...').replace('{name}', group.name)}
67
73
  onValueChange={setNewOptionInput}
68
74
  />
69
- <CommandEmpty className="py-2">
75
+ <CommandEmpty className='py-2'>
70
76
  <div className="p-2">
71
77
  <Button
72
78
  variant="outline"
@@ -83,7 +89,7 @@ export function ProductOptionSelect({
83
89
  </div>
84
90
  </CommandEmpty>
85
91
  <CommandGroup>
86
- {group.options.map(option => (
92
+ {group.options.map((option) => (
87
93
  <CommandItem
88
94
  key={option.id}
89
95
  value={option.name}
@@ -94,8 +100,8 @@ export function ProductOptionSelect({
94
100
  >
95
101
  <Check
96
102
  className={cn(
97
- 'mr-2 h-4 w-4',
98
- value === option.id ? 'opacity-100' : 'opacity-0',
103
+ "mr-2 h-4 w-4",
104
+ value === option.id ? "opacity-100" : "opacity-0"
99
105
  )}
100
106
  />
101
107
  {option.name}
@@ -108,4 +114,4 @@ export function ProductOptionSelect({
108
114
  )}
109
115
  />
110
116
  );
111
- }
117
+ }
@@ -1,97 +1,66 @@
1
- import { Money } from '@/vdb/components/data-display/money.js';
2
- import { DetailPageButton } from '@/vdb/components/shared/detail-page-button.js';
3
- import {
4
- PaginatedListDataTable,
5
- PaginatedListRefresherRegisterFn,
6
- } from '@/vdb/components/shared/paginated-list-data-table.js';
7
- import { StockLevelLabel } from '@/vdb/components/shared/stock-level-label.js';
8
- import { graphql } from '@/vdb/graphql/graphql.js';
9
- import { useLocalFormat } from '@/vdb/hooks/use-local-format.js';
10
- import { ColumnFiltersState, SortingState } from '@tanstack/react-table';
11
- import { useState } from 'react';
12
- import { productVariantListDocument } from '../products.graphql.js';
13
-
14
- export const deleteProductVariantDocument = graphql(`
15
- mutation DeleteProductVariant($id: ID!) {
16
- deleteProductVariant(id: $id) {
17
- result
18
- message
19
- }
20
- }
21
- `);
1
+ import { Money } from "@/components/data-display/money.js";
2
+ import { PaginatedListDataTable, PaginatedListRefresherRegisterFn } from "@/components/shared/paginated-list-data-table.js";
3
+ import { StockLevelLabel } from "@/components/shared/stock-level-label.js";
4
+ import { useLocalFormat } from "@/hooks/use-local-format.js";
5
+ import { DetailPageButton } from "@/index.js";
6
+ import { ColumnFiltersState, SortingState } from "@tanstack/react-table";
7
+ import { useState } from "react";
8
+ import { productVariantListDocument } from "../products.graphql.js";
22
9
 
23
10
  interface ProductVariantsTableProps {
24
11
  productId: string;
25
12
  registerRefresher?: PaginatedListRefresherRegisterFn;
26
- fromProductDetailPage?: boolean;
27
13
  }
28
14
 
29
- export function ProductVariantsTable({
30
- productId,
31
- registerRefresher,
32
- fromProductDetailPage,
33
- }: ProductVariantsTableProps) {
15
+ export function ProductVariantsTable({ productId, registerRefresher }: ProductVariantsTableProps) {
34
16
  const { formatCurrencyName } = useLocalFormat();
35
17
  const [page, setPage] = useState(1);
36
18
  const [pageSize, setPageSize] = useState(10);
37
19
  const [sorting, setSorting] = useState<SortingState>([]);
38
20
  const [filters, setFilters] = useState<ColumnFiltersState>([]);
39
21
 
40
- return (
41
- <PaginatedListDataTable
42
- registerRefresher={registerRefresher}
43
- listQuery={productVariantListDocument}
44
- deleteMutation={deleteProductVariantDocument}
45
- transformVariables={variables => ({
46
- ...variables,
47
- productId,
48
- })}
49
- defaultVisibility={{
50
- id: false,
51
- currencyCode: false,
52
- }}
53
- customizeColumns={{
54
- name: {
55
- header: 'Variant name',
56
- cell: ({ row: { original } }) => (
57
- <DetailPageButton
58
- href={`../../product-variants/${original.id}`}
59
- label={original.name}
60
- search={fromProductDetailPage ? { from: 'product' } : undefined}
61
- />
62
- ),
63
- },
64
- currencyCode: {
65
- cell: ({ row: { original } }) => formatCurrencyName(original.currencyCode, 'full'),
66
- },
67
- price: {
68
- cell: ({ row: { original } }) => (
69
- <Money value={original.price} currency={original.currencyCode} />
70
- ),
71
- },
72
- priceWithTax: {
73
- cell: ({ row: { original } }) => (
74
- <Money value={original.priceWithTax} currency={original.currencyCode} />
75
- ),
76
- },
77
- stockLevels: {
78
- cell: ({ row: { original } }) => <StockLevelLabel stockLevels={original.stockLevels} />,
79
- },
80
- }}
81
- page={page}
82
- itemsPerPage={pageSize}
83
- sorting={sorting}
84
- columnFilters={filters}
85
- onPageChange={(_, page, perPage) => {
86
- setPage(page);
87
- setPageSize(perPage);
88
- }}
89
- onSortChange={(_, sorting) => {
90
- setSorting(sorting);
91
- }}
92
- onFilterChange={(_, filters) => {
93
- setFilters(filters);
94
- }}
95
- />
96
- );
22
+ return <PaginatedListDataTable
23
+ registerRefresher={registerRefresher}
24
+ listQuery={productVariantListDocument}
25
+ transformVariables={variables => ({
26
+ ...variables,
27
+ productId,
28
+ })}
29
+ defaultVisibility={{
30
+ id: false,
31
+ currencyCode: false,
32
+ }}
33
+ customizeColumns={{
34
+ name: {
35
+ header: 'Variant name',
36
+ cell: ({ row: { original } }) => <DetailPageButton href={`../../product-variants/${original.id}`} label={original.name} />,
37
+ },
38
+ currencyCode: {
39
+ cell: ({ row: { original } }) => formatCurrencyName(original.currencyCode, 'full'),
40
+ },
41
+ price: {
42
+ cell: ({ row: { original } }) => <Money value={original.price} currency={original.currencyCode} />,
43
+ },
44
+ priceWithTax: {
45
+ cell: ({ row: { original } }) => <Money value={original.priceWithTax} currency={original.currencyCode} />,
46
+ },
47
+ stockLevels: {
48
+ cell: ({ row: { original } }) => <StockLevelLabel stockLevels={original.stockLevels} />,
49
+ },
50
+ }}
51
+ page={page}
52
+ itemsPerPage={pageSize}
53
+ sorting={sorting}
54
+ columnFilters={filters}
55
+ onPageChange={(_, page, perPage) => {
56
+ setPage(page);
57
+ setPageSize(perPage);
58
+ }}
59
+ onSortChange={(_, sorting) => {
60
+ setSorting(sorting);
61
+ }}
62
+ onFilterChange={(_, filters) => {
63
+ setFilters(filters);
64
+ }}
65
+ />;
97
66
  }