@vendure/dashboard 3.3.6-master-202507050232 → 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 (391) 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 +4 -3
  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 +24 -47
  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 +21 -30
  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 +72 -105
  276. package/src/lib/framework/layout-engine/page-layout.tsx +52 -70
  277. package/src/lib/framework/page/detail-page-route-loader.tsx +7 -26
  278. package/src/lib/framework/page/detail-page.tsx +37 -94
  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/overridden-form-component.tsx +0 -51
  379. package/src/lib/framework/form-engine/utils.ts +0 -58
  380. package/src/lib/framework/layout-engine/page-block-provider.tsx +0 -6
  381. package/src/lib/graphql/common-operations.ts +0 -18
  382. package/src/lib/hooks/use-extended-detail-query.ts +0 -37
  383. package/src/lib/hooks/use-extended-list-query.ts +0 -73
  384. package/src/lib/hooks/use-page-block.tsx +0 -18
  385. package/vite/tests/barrel-exports/my-plugin/index.ts +0 -1
  386. package/vite/tests/barrel-exports/my-plugin/src/my.plugin.ts +0 -8
  387. package/vite/tests/barrel-exports/package.json +0 -6
  388. package/vite/tests/barrel-exports/vendure-config.ts +0 -19
  389. package/vite/tests/barrel-exports.spec.ts +0 -21
  390. package/vite/vite-plugin-tailwind-source.ts +0 -65
  391. /package/src/lib/components/data-table/{types.ts → data-table-types.ts} +0 -0
@@ -1,81 +0,0 @@
1
- import {
2
- DataDisplayComponent,
3
- DataInputComponent,
4
- } from '@/vdb/framework/component-registry/component-registry.js';
5
- import { DocumentNode } from 'graphql';
6
-
7
- /**
8
- * @description
9
- * Allows you to define custom input components for specific fields in detail forms.
10
- * The pageId is already defined in the detail form extension, so only the blockId and field are needed.
11
- *
12
- * @docsCategory extensions
13
- * @since 3.4.0
14
- */
15
- export interface DashboardDetailFormInputComponent {
16
- /**
17
- * @description
18
- * The ID of the block where this input component should be used.
19
- */
20
- blockId: string;
21
- /**
22
- * @description
23
- * The name of the field where this input component should be used.
24
- */
25
- field: string;
26
- /**
27
- * @description
28
- * The React component that will be rendered as the input.
29
- * It should accept `value`, `onChange`, and other standard input props.
30
- */
31
- component: DataInputComponent;
32
- }
33
-
34
- /**
35
- * @description
36
- * Allows you to define custom display components for specific fields in detail forms.
37
- * The pageId is already defined in the detail form extension, so only the blockId and field are needed.
38
- *
39
- * @docsCategory extensions
40
- * @since 3.4.0
41
- */
42
- export interface DashboardDetailFormDisplayComponent {
43
- /**
44
- * @description
45
- * The ID of the block where this display component should be used.
46
- */
47
- blockId: string;
48
- /**
49
- * @description
50
- * The name of the field where this display component should be used.
51
- */
52
- field: string;
53
- /**
54
- * @description
55
- * The React component that will be rendered as the display.
56
- * It should accept `value` and other standard display props.
57
- */
58
- component: DataDisplayComponent;
59
- }
60
-
61
- export interface DashboardDetailFormExtensionDefinition {
62
- /**
63
- * @description
64
- * The ID of the page where the detail form is located, e.g. `'product-detail'`, `'order-detail'`.
65
- */
66
- pageId: string;
67
- /**
68
- * @description
69
- */
70
- extendDetailDocument?: string | DocumentNode | (() => DocumentNode | string);
71
- /**
72
- * @description
73
- * Custom input components for specific fields in the detail form.
74
- */
75
- inputs?: DashboardDetailFormInputComponent[];
76
- /**
77
- * @description
78
- * Custom display components for specific fields in the detail form.
79
- */
80
- displays?: DashboardDetailFormDisplayComponent[];
81
- }
@@ -1,32 +0,0 @@
1
- import type React from 'react';
2
-
3
- import { CustomFormComponentInputProps } from '../../form-engine/custom-form-component.js';
4
-
5
- /**
6
- * @description
7
- * Allows you to define custom form components for custom fields in the dashboard.
8
- *
9
- * @docsCategory extensions
10
- * @since 3.4.0
11
- */
12
- export interface DashboardCustomFormComponent {
13
- id: string;
14
- component: React.FunctionComponent<CustomFormComponentInputProps>;
15
- }
16
-
17
- /**
18
- * @description
19
- * Interface for registering custom field components in the dashboard.
20
- * For input and display components, use the co-located approach with detailForms.
21
- *
22
- * @docsCategory extensions
23
- * @since 3.4.0
24
- */
25
- export interface DashboardCustomFormComponents {
26
- /**
27
- * @description
28
- * Custom form components for custom fields. These are used when rendering
29
- * custom fields in forms.
30
- */
31
- customFields?: DashboardCustomFormComponent[];
32
- }
@@ -1,8 +0,0 @@
1
- // Re-export all domain-specific types
2
- export * from './alerts.js';
3
- export * from './data-table.js';
4
- export * from './detail-forms.js';
5
- export * from './form-components.js';
6
- export * from './layout.js';
7
- export * from './navigation.js';
8
- export * from './widgets.js';
@@ -1,78 +0,0 @@
1
- import type React from 'react';
2
-
3
- import { PageContextValue } from '../../layout-engine/page-provider.js';
4
-
5
- export interface ActionBarButtonState {
6
- disabled: boolean;
7
- visible: boolean;
8
- }
9
-
10
- /**
11
- * @description
12
- * **Status: Developer Preview**
13
- *
14
- * Allows you to define custom action bar items for any page in the dashboard.
15
- *
16
- * @docsCategory extensions
17
- * @since 3.3.0
18
- */
19
- export interface DashboardActionBarItem {
20
- /**
21
- * @description
22
- * The ID of the page where the action bar item should be displayed.
23
- */
24
- pageId: string;
25
- /**
26
- * @description
27
- * A React component that will be rendered in the action bar.
28
- */
29
- component: React.FunctionComponent<{ context: PageContextValue }>;
30
- /**
31
- * @description
32
- * Any permissions that are required to display this action bar item.
33
- */
34
- requiresPermission?: string | string[];
35
- }
36
-
37
- export interface DashboardActionBarDropdownMenuItem {
38
- locationId: string;
39
- component: React.FunctionComponent<{ context: PageContextValue }>;
40
- requiresPermission?: string | string[];
41
- }
42
-
43
- export type PageBlockPosition = { blockId: string; order: 'before' | 'after' | 'replace' };
44
-
45
- /**
46
- * @description
47
- * **Status: Developer Preview**
48
- *
49
- * The location of a page block in the dashboard. The location can be found by turning on
50
- * "developer mode" in the dashboard user menu (bottom left corner) and then
51
- * clicking the `< />` icon when hovering over a page block.
52
- *
53
- * @docsCategory extensions
54
- * @since 3.3.0
55
- */
56
- export type PageBlockLocation = {
57
- pageId: string;
58
- position: PageBlockPosition;
59
- column: 'main' | 'side';
60
- };
61
-
62
- /**
63
- * @description
64
- * **Status: Developer Preview**
65
- *
66
- * This allows you to insert a custom component into a specific location
67
- * on any page in the dashboard.
68
- *
69
- * @docsCategory extensions
70
- * @since 3.3.0
71
- */
72
- export interface DashboardPageBlockDefinition {
73
- id: string;
74
- title?: React.ReactNode;
75
- location: PageBlockLocation;
76
- component: React.FunctionComponent<{ context: PageContextValue }>;
77
- requiresPermission?: string | string[];
78
- }
@@ -1,19 +0,0 @@
1
- import { AnyRoute, RouteOptions } from '@tanstack/react-router';
2
- import { LucideIcon } from 'lucide-react';
3
- import type React from 'react';
4
-
5
- import { NavMenuItem } from '../../nav-menu/nav-menu-extensions.js';
6
-
7
- export interface DashboardRouteDefinition {
8
- component: (route: AnyRoute) => React.ReactNode;
9
- path: string;
10
- navMenuItem?: Partial<NavMenuItem> & { sectionId: string };
11
- loader?: RouteOptions['loader'];
12
- }
13
-
14
- export interface DashboardNavSectionDefinition {
15
- id: string;
16
- title: string;
17
- icon?: LucideIcon;
18
- order?: number;
19
- }
@@ -1,97 +0,0 @@
1
- import React, { PropsWithChildren } from 'react';
2
-
3
- /**
4
- * @description
5
- * **Status: Developer Preview**
6
- *
7
- * Base props interface for dashboard widgets.
8
- *
9
- * @docsCategory extensions
10
- * @since 3.3.0
11
- */
12
- export type DashboardBaseWidgetProps = PropsWithChildren<{
13
- id: string;
14
- title?: string;
15
- description?: string;
16
- config?: Record<string, unknown>;
17
- actions?: React.ReactNode;
18
- }>;
19
-
20
- /**
21
- * @description
22
- * **Status: Developer Preview**
23
- *
24
- * Represents an instance of a dashboard widget with its layout and configuration.
25
- *
26
- * @docsCategory extensions
27
- * @since 3.3.0
28
- */
29
- export type DashboardWidgetInstance = {
30
- /**
31
- * @description
32
- * A unique identifier for the widget instance.
33
- */
34
- id: string;
35
- /**
36
- * @description
37
- * The ID of the widget definition this instance is based on.
38
- */
39
- widgetId: string;
40
- /**
41
- * @description
42
- * The layout configuration for the widget.
43
- */
44
- layout: {
45
- x: number;
46
- y: number;
47
- w: number;
48
- h: number;
49
- };
50
- /**
51
- * @description
52
- * Optional configuration data for the widget.
53
- */
54
- config?: Record<string, unknown>;
55
- };
56
-
57
- /**
58
- * @description
59
- * **Status: Developer Preview**
60
- *
61
- * Defines a dashboard widget that can be added to the dashboard.
62
- *
63
- * @docsCategory extensions
64
- * @since 3.3.0
65
- */
66
- export type DashboardWidgetDefinition = {
67
- /**
68
- * @description
69
- * A unique identifier for the widget.
70
- */
71
- id: string;
72
- /**
73
- * @description
74
- * The display name of the widget.
75
- */
76
- name: string;
77
- /**
78
- * @description
79
- * The React component that renders the widget.
80
- */
81
- component: React.ComponentType<DashboardBaseWidgetProps>;
82
- /**
83
- * @description
84
- * The default size and position of the widget.
85
- */
86
- defaultSize: { w: number; h: number; x?: number; y?: number };
87
- /**
88
- * @description
89
- * The minimum size constraints for the widget.
90
- */
91
- minSize?: { w: number; h: number };
92
- /**
93
- * @description
94
- * The maximum size constraints for the widget.
95
- */
96
- maxSize?: { w: number; h: number };
97
- };
@@ -1,38 +0,0 @@
1
- import { DocumentNode } from 'graphql';
2
-
3
- import { DashboardCustomFormComponent } from '../extension-api/extension-api-types.js';
4
- import { globalRegistry } from '../registry/global-registry.js';
5
-
6
- import { CustomFormComponentInputProps } from './custom-form-component.js';
7
-
8
- globalRegistry.register(
9
- 'customFormComponents',
10
- new Map<string, React.FunctionComponent<CustomFormComponentInputProps>>(),
11
- );
12
-
13
- globalRegistry.register('detailQueryDocumentRegistry', new Map<string, DocumentNode[]>());
14
-
15
- export function getCustomFormComponent(
16
- id: string,
17
- ): React.FunctionComponent<CustomFormComponentInputProps> | undefined {
18
- return globalRegistry.get('customFormComponents').get(id);
19
- }
20
-
21
- export function addCustomFormComponent({ id, component }: DashboardCustomFormComponent) {
22
- const customFormComponents = globalRegistry.get('customFormComponents');
23
- if (customFormComponents.has(id)) {
24
- // eslint-disable-next-line no-console
25
- console.warn(`Custom form component with id "${id}" is already registered and will be overwritten.`);
26
- }
27
- customFormComponents.set(id, component);
28
- }
29
-
30
- export function getDetailQueryDocuments(pageId: string): DocumentNode[] {
31
- return globalRegistry.get('detailQueryDocumentRegistry').get(pageId) || [];
32
- }
33
-
34
- export function addDetailQueryDocument(pageId: string, document: DocumentNode) {
35
- const listQueryDocumentRegistry = globalRegistry.get('detailQueryDocumentRegistry');
36
- const existingDocuments = listQueryDocumentRegistry.get(pageId) || [];
37
- listQueryDocumentRegistry.set(pageId, [...existingDocuments, document]);
38
- }
@@ -1,33 +0,0 @@
1
- import { CustomFieldConfig } from '@vendure/common/lib/generated-types';
2
- import {
3
- ControllerFieldState,
4
- ControllerRenderProps,
5
- FieldPath,
6
- FieldValues,
7
- UseFormStateReturn,
8
- } from 'react-hook-form';
9
- import { getCustomFormComponent } from './custom-form-component-extensions.js';
10
-
11
- export interface CustomFormComponentProps {
12
- fieldProps: CustomFormComponentInputProps;
13
- fieldDef: Pick<CustomFieldConfig, 'ui' | 'type' | 'name'>;
14
- }
15
-
16
- export interface CustomFormComponentInputProps<
17
- TFieldValues extends FieldValues = FieldValues,
18
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
19
- > {
20
- field: ControllerRenderProps<TFieldValues, TName>;
21
- fieldState: ControllerFieldState;
22
- formState: UseFormStateReturn<TFieldValues>;
23
- }
24
-
25
- export function CustomFormComponent({ fieldDef, fieldProps }: CustomFormComponentProps) {
26
- const Component = getCustomFormComponent(fieldDef.ui?.component);
27
-
28
- if (!Component) {
29
- return null;
30
- }
31
-
32
- return <Component {...fieldProps} />;
33
- }
@@ -1,51 +0,0 @@
1
- import {
2
- DataDisplayComponent,
3
- DataInputComponent,
4
- useComponentRegistry,
5
- } from '@/vdb/framework/component-registry/component-registry.js';
6
- import { generateInputComponentKey } from '@/vdb/framework/extension-api/input-component-extensions.js';
7
- import { usePageBlock } from '@/vdb/hooks/use-page-block.js';
8
- import { usePage } from '@/vdb/hooks/use-page.js';
9
- import { ControllerRenderProps, FieldPath, FieldValues } from 'react-hook-form';
10
-
11
- export interface OverriddenFormComponent<
12
- TFieldValues extends FieldValues = any,
13
- TName extends FieldPath<TFieldValues> = any,
14
- > {
15
- fieldName: string;
16
- field: ControllerRenderProps<TFieldValues, TName>;
17
- children?: React.ReactNode;
18
- }
19
-
20
- /**
21
- * @description
22
- * Based on the pageId and blockId of where this is placed, it will check whether any custom components
23
- * are registered and render them if so. Otherwise, it will render the children, which act as the
24
- * default if this location has not been overridden.
25
- *
26
- * ```tsx
27
- * <OverriddenFormComponent fieldName="myField" field={field}>
28
- * <Input {...field} />
29
- * </OverriddenFormComponent>
30
- * ```
31
- */
32
- export function OverriddenFormComponent({ fieldName, field, children }: Readonly<OverriddenFormComponent>) {
33
- const page = usePage();
34
- const pageBlock = usePageBlock({ optional: true });
35
- const componentRegistry = useComponentRegistry();
36
- let DisplayComponent: DataDisplayComponent | undefined;
37
- let InputComponent: DataInputComponent | undefined;
38
- if (page.pageId && pageBlock?.blockId) {
39
- const customInputComponentKey = generateInputComponentKey(page.pageId, pageBlock.blockId, fieldName);
40
- DisplayComponent = componentRegistry.getDisplayComponent(customInputComponentKey);
41
- InputComponent = componentRegistry.getInputComponent(customInputComponentKey);
42
- }
43
- if (DisplayComponent) {
44
- return <DisplayComponent {...field} />;
45
- }
46
-
47
- if (InputComponent) {
48
- return <InputComponent {...field} />;
49
- }
50
- return children ?? null;
51
- }
@@ -1,58 +0,0 @@
1
- import { FieldInfo } from '../document-introspection/get-document-structure.js';
2
-
3
- /**
4
- * Transforms relation fields in an entity, extracting IDs from relation objects.
5
- * This is primarily used for custom fields of type "ID".
6
- *
7
- * @param fields - Array of field information
8
- * @param entity - The entity to transform
9
- * @returns A new entity with transformed relation fields
10
- */
11
- export function transformRelationFields<E extends Record<string, any>>(fields: FieldInfo[], entity: E): E {
12
- // Create a shallow copy to avoid mutating the original entity
13
- const processedEntity = { ...entity };
14
-
15
- // Skip processing if there are no custom fields
16
- if (!entity.customFields || !processedEntity.customFields) {
17
- return processedEntity;
18
- }
19
-
20
- // Find the customFields field info
21
- const customFieldsInfo = fields.find(field => field.name === 'customFields' && field.typeInfo);
22
- if (!customFieldsInfo?.typeInfo) {
23
- return processedEntity;
24
- }
25
-
26
- // Process only ID type custom fields
27
- const idTypeCustomFields = customFieldsInfo.typeInfo.filter(field => field.type === 'ID');
28
-
29
- for (const customField of idTypeCustomFields) {
30
- const relationField = customField.name;
31
-
32
- if (customField.list) {
33
- // For list fields, the accessor is the field name without the "Ids" suffix
34
- const propertyAccessorKey = customField.name.replace(/Ids$/, '');
35
- const relationValue = entity.customFields[propertyAccessorKey];
36
-
37
- if (relationValue) {
38
- const relationIdValue = relationValue.map((v: { id: string }) => v.id);
39
- if (relationIdValue && relationIdValue.length > 0) {
40
- processedEntity.customFields[relationField] = relationIdValue;
41
- }
42
- }
43
- } else {
44
- // For single fields, the accessor is the field name without the "Id" suffix
45
- const propertyAccessorKey = customField.name.replace(/Id$/, '');
46
- const relationValue = entity.customFields[propertyAccessorKey];
47
-
48
- if (relationValue) {
49
- const relationIdValue = relationValue.id;
50
- if (relationIdValue) {
51
- processedEntity.customFields[relationField] = relationIdValue;
52
- }
53
- }
54
- }
55
- }
56
-
57
- return processedEntity;
58
- }
@@ -1,6 +0,0 @@
1
- import { PageBlockProps } from '@/vdb/framework/layout-engine/page-layout.js';
2
- import { createContext } from 'react';
3
-
4
- export type PageBlockContextValue = Pick<PageBlockProps, 'blockId' | 'column' | 'title' | 'description'>;
5
-
6
- export const PageBlockContext = createContext<PageBlockContextValue | undefined>(undefined);
@@ -1,18 +0,0 @@
1
- import { graphql } from './graphql.js';
2
-
3
- export const duplicateEntityDocument = graphql(`
4
- mutation DuplicateEntity($input: DuplicateEntityInput!) {
5
- duplicateEntity(input: $input) {
6
- ... on DuplicateEntitySuccess {
7
- newEntityId
8
- }
9
- ... on ErrorResult {
10
- errorCode
11
- message
12
- }
13
- ... on DuplicateEntityError {
14
- duplicationError
15
- }
16
- }
17
- }
18
- `);
@@ -1,37 +0,0 @@
1
- import { extendDetailFormQuery } from '@/vdb/framework/document-extension/extend-detail-form-query.js';
2
- import { useLingui } from '@/vdb/lib/trans.js';
3
- import { DocumentNode } from 'graphql';
4
- import { useEffect, useMemo, useRef } from 'react';
5
- import { toast } from 'sonner';
6
-
7
- /**
8
- * @description
9
- * Extends a detail page query document with any registered extensions provided by
10
- * the `extendDetailDocument` function for the given page.
11
- */
12
- export function useExtendedDetailQuery<T extends DocumentNode>(detailQuery: T, pageId?: string) {
13
- const hasShownError = useRef(false);
14
- const { i18n } = useLingui();
15
-
16
- const extendedDetailQuery = useMemo(() => {
17
- if (!pageId || !detailQuery) {
18
- return detailQuery;
19
- }
20
- const result = extendDetailFormQuery(detailQuery, pageId);
21
- if (result.errorMessage && !hasShownError.current) {
22
- // Show a user-friendly toast notification
23
- toast.error(i18n.t('Query extension error'), {
24
- description:
25
- result.errorMessage + '. ' + i18n.t('The page will continue with the default query.'),
26
- });
27
- }
28
- return result.extendedQuery;
29
- }, [detailQuery, pageId]);
30
-
31
- // Reset error flag when dependencies change
32
- useEffect(() => {
33
- hasShownError.current = false;
34
- }, [detailQuery, pageId]);
35
-
36
- return extendedDetailQuery;
37
- }
@@ -1,73 +0,0 @@
1
- import { getListQueryDocuments } from '@/vdb/framework/data-table/data-table-extensions.js';
2
- import { extendDocument } from '@/vdb/framework/document-extension/extend-document.js';
3
- import { useLingui } from '@/vdb/lib/trans.js';
4
- import { DocumentNode } from 'graphql';
5
- import { useEffect, useMemo, useRef } from 'react';
6
- import { toast } from 'sonner';
7
-
8
- import { usePageBlock } from './use-page-block.js';
9
- import { usePage } from './use-page.js';
10
-
11
- export function useExtendedListQuery<T extends DocumentNode>(listQuery: T) {
12
- const { pageId } = usePage();
13
- const { blockId } = usePageBlock();
14
- const { i18n } = useLingui();
15
- const listQueryExtensions = pageId && blockId ? getListQueryDocuments(pageId, blockId) : [];
16
- const hasShownError = useRef(false);
17
-
18
- const extendedListQuery = useMemo(() => {
19
- let result: T = listQuery;
20
- let error: Error | null = null;
21
-
22
- try {
23
- result = listQueryExtensions.reduce(
24
- (acc, extension) => extendDocument(acc, extension),
25
- listQuery,
26
- ) as T;
27
- } catch (err) {
28
- error = err instanceof Error ? err : new Error(String(err));
29
- // Continue with the original query instead of the extended one
30
- result = listQuery;
31
- }
32
-
33
- // Store error for useEffect to handle
34
- if (error && !hasShownError.current) {
35
- hasShownError.current = true;
36
-
37
- // Provide a helpful error message based on the error type
38
- let errorMessage = i18n.t('Failed to extend query document');
39
- if (error.message.includes('Extension query must have at least one top-level field')) {
40
- errorMessage = i18n.t('Query extension is invalid: must have at least one top-level field');
41
- } else if (error.message.includes('The query extension must extend the')) {
42
- errorMessage = i18n.t('Query extension mismatch: ') + error.message;
43
- } else if (error.message.includes('Syntax Error')) {
44
- errorMessage = i18n.t('Query extension contains invalid GraphQL syntax');
45
- } else {
46
- errorMessage = i18n.t('Query extension error: ') + error.message;
47
- }
48
-
49
- // Log the error and continue with the original query
50
- // eslint-disable-next-line no-console
51
- console.warn(`${errorMessage}. Continuing with original query.`, {
52
- pageId,
53
- blockId,
54
- extensionsCount: listQueryExtensions.length,
55
- error: error.message,
56
- });
57
-
58
- // Show a user-friendly toast notification
59
- toast.error(i18n.t('Query extension error'), {
60
- description: errorMessage + '. ' + i18n.t('The page will continue with the default query.'),
61
- });
62
- }
63
-
64
- return result;
65
- }, [listQuery, listQueryExtensions, pageId, blockId]);
66
-
67
- // Reset error flag when dependencies change
68
- useEffect(() => {
69
- hasShownError.current = false;
70
- }, [listQuery, listQueryExtensions, pageId, blockId]);
71
-
72
- return extendedListQuery;
73
- }
@@ -1,18 +0,0 @@
1
- import { PageBlockContext } from '@/vdb/framework/layout-engine/page-block-provider.js';
2
- import { useContext } from 'react';
3
-
4
- /**
5
- * @description
6
- * Returns the current PageBlock context, which means there must be
7
- * a PageBlock ancestor component higher in the tree.
8
- *
9
- * If `optional` is set to true, the hook will not throw if no PageBlock
10
- * exists higher in the tree, but will just return undefined.
11
- */
12
- export function usePageBlock({ optional }: { optional?: boolean } = {}) {
13
- const pageBlock = useContext(PageBlockContext);
14
- if (!pageBlock && !optional) {
15
- throw new Error('PageBlockProvider not found');
16
- }
17
- return pageBlock;
18
- }
@@ -1 +0,0 @@
1
- export * from './src/my.plugin';
@@ -1,8 +0,0 @@
1
- import { PluginCommonModule, VendurePlugin } from '@vendure/core';
2
-
3
- @VendurePlugin({
4
- imports: [PluginCommonModule],
5
- providers: [],
6
- dashboard: './dashboard/index.tsx',
7
- })
8
- export class MyPlugin {}
@@ -1,6 +0,0 @@
1
- {
2
- "type": "commonjs",
3
- "name": "barrel-exports",
4
- "version": "0.0.1",
5
- "main": "index.ts"
6
- }