@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.
- package/README.md +4 -41
- package/dist/plugin/utils/config-loader.d.ts +1 -70
- package/dist/plugin/utils/config-loader.js +9 -33
- package/dist/plugin/vite-plugin-config-loader.js +1 -6
- package/dist/plugin/vite-plugin-config.js +7 -6
- package/dist/plugin/vite-plugin-dashboard-metadata.d.ts +3 -1
- package/dist/plugin/vite-plugin-dashboard-metadata.js +8 -1
- package/dist/plugin/vite-plugin-vendure-dashboard.d.ts +0 -41
- package/dist/plugin/vite-plugin-vendure-dashboard.js +2 -5
- package/package.json +131 -131
- package/src/app/app-providers.tsx +6 -6
- package/src/app/main.tsx +9 -9
- package/src/app/routes/__root.tsx +2 -1
- package/src/app/routes/_authenticated/_administrators/administrators.graphql.ts +1 -10
- package/src/app/routes/_authenticated/_administrators/administrators.tsx +8 -15
- package/src/app/routes/_authenticated/_administrators/administrators_.$id.tsx +12 -16
- package/src/app/routes/_authenticated/_administrators/components/role-permissions-display.tsx +16 -16
- package/src/app/routes/_authenticated/_assets/assets.graphql.ts +2 -13
- package/src/app/routes/_authenticated/_assets/assets.tsx +4 -16
- package/src/app/routes/_authenticated/_assets/assets_.$id.tsx +38 -52
- package/src/app/routes/_authenticated/_channels/channels.graphql.ts +1 -10
- package/src/app/routes/_authenticated/_channels/channels.tsx +10 -17
- package/src/app/routes/_authenticated/_channels/channels_.$id.tsx +17 -21
- package/src/app/routes/_authenticated/_collections/collections.graphql.ts +3 -60
- package/src/app/routes/_authenticated/_collections/collections.tsx +124 -168
- package/src/app/routes/_authenticated/_collections/collections_.$id.tsx +16 -20
- package/src/app/routes/_authenticated/_collections/components/collection-contents-preview-table.tsx +8 -7
- package/src/app/routes/_authenticated/_collections/components/collection-contents-sheet.tsx +5 -9
- package/src/app/routes/_authenticated/_collections/components/collection-contents-table.tsx +9 -10
- package/src/app/routes/_authenticated/_collections/components/collection-filters-selector.tsx +7 -7
- package/src/app/routes/_authenticated/_countries/countries.graphql.ts +2 -11
- package/src/app/routes/_authenticated/_countries/countries.tsx +6 -13
- package/src/app/routes/_authenticated/_countries/countries_.$id.tsx +17 -21
- package/src/app/routes/_authenticated/_customer-groups/components/customer-group-members-sheet.tsx +5 -12
- package/src/app/routes/_authenticated/_customer-groups/components/customer-group-members-table.tsx +17 -22
- package/src/app/routes/_authenticated/_customer-groups/customer-groups.graphql.ts +2 -11
- package/src/app/routes/_authenticated/_customer-groups/customer-groups.tsx +6 -13
- package/src/app/routes/_authenticated/_customer-groups/customer-groups_.$id.tsx +15 -18
- package/src/app/routes/_authenticated/_customers/components/customer-address-card.tsx +19 -19
- package/src/app/routes/_authenticated/_customers/components/customer-address-form.tsx +10 -10
- package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history-container.tsx +5 -5
- package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history.tsx +7 -11
- package/src/app/routes/_authenticated/_customers/components/customer-history/use-customer-history.ts +4 -4
- package/src/app/routes/_authenticated/_customers/components/customer-order-table.tsx +73 -75
- package/src/app/routes/_authenticated/_customers/components/customer-status-badge.tsx +4 -4
- package/src/app/routes/_authenticated/_customers/customers.graphql.ts +2 -10
- package/src/app/routes/_authenticated/_customers/customers.tsx +6 -13
- package/src/app/routes/_authenticated/_customers/customers_.$id.tsx +15 -19
- package/src/app/routes/_authenticated/_facets/components/edit-facet-value.tsx +9 -9
- package/src/app/routes/_authenticated/_facets/components/facet-values-sheet.tsx +4 -4
- package/src/app/routes/_authenticated/_facets/components/facet-values-table.tsx +11 -15
- package/src/app/routes/_authenticated/_facets/facets.graphql.ts +1 -31
- package/src/app/routes/_authenticated/_facets/facets.tsx +7 -31
- package/src/app/routes/_authenticated/_facets/facets_.$id.tsx +13 -17
- package/src/app/routes/_authenticated/_global-settings/global-settings.graphql.ts +1 -1
- package/src/app/routes/_authenticated/_global-settings/global-settings.tsx +13 -13
- package/src/app/routes/_authenticated/_orders/components/customer-address-selector.tsx +14 -11
- package/src/app/routes/_authenticated/_orders/components/edit-order-table.tsx +55 -93
- package/src/app/routes/_authenticated/_orders/components/money-gross-net.tsx +9 -11
- package/src/app/routes/_authenticated/_orders/components/order-address.tsx +6 -5
- package/src/app/routes/_authenticated/_orders/components/order-history/order-history-container.tsx +62 -67
- package/src/app/routes/_authenticated/_orders/components/order-history/order-history.tsx +6 -11
- package/src/app/routes/_authenticated/_orders/components/order-history/use-order-history.ts +5 -9
- package/src/app/routes/_authenticated/_orders/components/order-line-custom-fields-form.tsx +7 -11
- package/src/app/routes/_authenticated/_orders/components/order-table-totals.tsx +22 -39
- package/src/app/routes/_authenticated/_orders/components/order-table.tsx +4 -4
- package/src/app/routes/_authenticated/_orders/components/order-tax-summary.tsx +36 -37
- package/src/app/routes/_authenticated/_orders/components/payment-details.tsx +33 -18
- package/src/app/routes/_authenticated/_orders/components/shipping-method-selector.tsx +44 -43
- package/src/app/routes/_authenticated/_orders/orders.graphql.ts +3 -101
- package/src/app/routes/_authenticated/_orders/orders.tsx +20 -21
- package/src/app/routes/_authenticated/_orders/orders_.$id.tsx +16 -72
- package/src/app/routes/_authenticated/_orders/orders_.draft.$id.tsx +90 -188
- package/src/app/routes/_authenticated/_payment-methods/components/payment-eligibility-checker-selector.tsx +7 -10
- package/src/app/routes/_authenticated/_payment-methods/components/payment-handler-selector.tsx +11 -11
- package/src/app/routes/_authenticated/_payment-methods/payment-methods.graphql.ts +2 -29
- package/src/app/routes/_authenticated/_payment-methods/payment-methods.tsx +14 -36
- package/src/app/routes/_authenticated/_payment-methods/payment-methods_.$id.tsx +15 -22
- package/src/app/routes/_authenticated/_product-variants/components/variant-price-detail.tsx +6 -7
- package/src/app/routes/_authenticated/_product-variants/product-variants.graphql.ts +3 -64
- package/src/app/routes/_authenticated/_product-variants/product-variants.tsx +9 -39
- package/src/app/routes/_authenticated/_product-variants/product-variants_.$id.tsx +22 -33
- package/src/app/routes/_authenticated/_products/components/add-product-variant-dialog.tsx +10 -10
- package/src/app/routes/_authenticated/_products/components/create-product-options-dialog.tsx +41 -57
- package/src/app/routes/_authenticated/_products/components/create-product-variants-dialog.tsx +11 -11
- package/src/app/routes/_authenticated/_products/components/create-product-variants.tsx +14 -18
- package/src/app/routes/_authenticated/_products/components/option-value-input.tsx +15 -21
- package/src/app/routes/_authenticated/_products/components/product-option-select.tsx +34 -28
- package/src/app/routes/_authenticated/_products/components/product-variants-table.tsx +53 -84
- package/src/app/routes/_authenticated/_products/products.graphql.ts +2 -70
- package/src/app/routes/_authenticated/_products/products.tsx +7 -36
- package/src/app/routes/_authenticated/_products/products_.$id.tsx +24 -33
- package/src/app/routes/_authenticated/_profile/profile.graphql.ts +1 -1
- package/src/app/routes/_authenticated/_profile/profile.tsx +8 -8
- package/src/app/routes/_authenticated/_promotions/components/promotion-actions-selector.tsx +11 -14
- package/src/app/routes/_authenticated/_promotions/components/promotion-conditions-selector.tsx +11 -14
- package/src/app/routes/_authenticated/_promotions/promotions.graphql.ts +2 -27
- package/src/app/routes/_authenticated/_promotions/promotions.tsx +7 -31
- package/src/app/routes/_authenticated/_promotions/promotions_.$id.tsx +16 -20
- package/src/app/routes/_authenticated/_roles/components/expandable-permissions.tsx +5 -5
- package/src/app/routes/_authenticated/_roles/components/permissions-grid.tsx +17 -21
- package/src/app/routes/_authenticated/_roles/roles.graphql.ts +1 -10
- package/src/app/routes/_authenticated/_roles/roles.tsx +10 -17
- package/src/app/routes/_authenticated/_roles/roles_.$id.tsx +12 -16
- package/src/app/routes/_authenticated/_sellers/sellers.graphql.ts +1 -10
- package/src/app/routes/_authenticated/_sellers/sellers.tsx +6 -13
- package/src/app/routes/_authenticated/_sellers/sellers_.$id.tsx +13 -17
- package/src/app/routes/_authenticated/_shipping-methods/components/fulfillment-handler-selector.tsx +6 -6
- package/src/app/routes/_authenticated/_shipping-methods/components/shipping-calculator-selector.tsx +21 -23
- package/src/app/routes/_authenticated/_shipping-methods/components/shipping-eligibility-checker-selector.tsx +21 -25
- package/src/app/routes/_authenticated/_shipping-methods/components/test-shipping-method-dialog.tsx +3 -3
- package/src/app/routes/_authenticated/_shipping-methods/shipping-methods.graphql.ts +2 -29
- package/src/app/routes/_authenticated/_shipping-methods/shipping-methods.tsx +6 -25
- package/src/app/routes/_authenticated/_shipping-methods/shipping-methods_.$id.tsx +13 -17
- package/src/app/routes/_authenticated/_stock-locations/stock-locations.graphql.ts +1 -26
- package/src/app/routes/_authenticated/_stock-locations/stock-locations.tsx +6 -25
- package/src/app/routes/_authenticated/_stock-locations/stock-locations_.$id.tsx +12 -16
- package/src/app/routes/_authenticated/_system/components/payload-dialog.tsx +4 -4
- package/src/app/routes/_authenticated/_system/healthchecks.tsx +4 -4
- package/src/app/routes/_authenticated/_system/job-queue.graphql.ts +1 -1
- package/src/app/routes/_authenticated/_system/job-queue.tsx +6 -10
- package/src/app/routes/_authenticated/_system/scheduled-tasks.tsx +28 -34
- package/src/app/routes/_authenticated/_tax-categories/tax-categories.graphql.ts +2 -11
- package/src/app/routes/_authenticated/_tax-categories/tax-categories.tsx +7 -14
- package/src/app/routes/_authenticated/_tax-categories/tax-categories_.$id.tsx +16 -20
- package/src/app/routes/_authenticated/_tax-rates/tax-rates.graphql.ts +2 -11
- package/src/app/routes/_authenticated/_tax-rates/tax-rates.tsx +8 -15
- package/src/app/routes/_authenticated/_tax-rates/tax-rates_.$id.tsx +18 -22
- package/src/app/routes/_authenticated/_zones/components/zone-countries-sheet.tsx +4 -4
- package/src/app/routes/_authenticated/_zones/components/zone-countries-table.tsx +8 -12
- package/src/app/routes/_authenticated/_zones/zones.graphql.ts +2 -11
- package/src/app/routes/_authenticated/_zones/zones.tsx +6 -13
- package/src/app/routes/_authenticated/_zones/zones_.$id.tsx +14 -18
- package/src/app/routes/_authenticated/index.tsx +4 -4
- package/src/app/routes/_authenticated.tsx +3 -3
- package/src/app/routes/login.tsx +2 -2
- package/src/app/styles.css +1 -4
- package/src/lib/components/data-display/boolean.tsx +1 -1
- package/src/lib/components/data-display/date-time.tsx +2 -2
- package/src/lib/components/data-display/json.tsx +1 -1
- package/src/lib/components/data-display/money.tsx +3 -2
- package/src/lib/components/data-input/affixed-input.tsx +8 -3
- package/src/lib/components/data-input/customer-group-input.tsx +2 -2
- package/src/lib/components/data-input/datetime-input.tsx +146 -129
- package/src/lib/components/data-input/facet-value-input.tsx +22 -30
- package/src/lib/components/data-input/money-input.tsx +12 -5
- package/src/lib/components/data-input/{rich-text-input.tsx → richt-text-input.tsx} +1 -1
- package/src/lib/components/data-table/add-filter-menu.tsx +18 -9
- package/src/lib/components/data-table/data-table-column-header.tsx +22 -4
- package/src/lib/components/data-table/data-table-faceted-filter.tsx +8 -8
- package/src/lib/components/data-table/data-table-filter-badge.tsx +8 -16
- package/src/lib/components/data-table/data-table-filter-dialog.tsx +8 -8
- package/src/lib/components/data-table/data-table-pagination.tsx +4 -4
- package/src/lib/components/data-table/data-table-view-options.tsx +21 -25
- package/src/lib/components/data-table/data-table.tsx +41 -85
- package/src/lib/components/data-table/filters/data-table-boolean-filter.tsx +8 -11
- package/src/lib/components/data-table/filters/data-table-datetime-filter.tsx +23 -14
- package/src/lib/components/data-table/filters/data-table-id-filter.tsx +10 -15
- package/src/lib/components/data-table/filters/data-table-number-filter.tsx +17 -18
- package/src/lib/components/data-table/filters/data-table-string-filter.tsx +12 -29
- package/src/lib/components/data-table/human-readable-operator.tsx +3 -3
- package/src/lib/components/data-table/refresh-button.tsx +15 -30
- package/src/lib/components/layout/app-layout.tsx +8 -8
- package/src/lib/components/layout/app-sidebar.tsx +5 -5
- package/src/lib/components/layout/channel-switcher.tsx +8 -8
- package/src/lib/components/layout/content-language-selector.tsx +10 -16
- package/src/lib/components/layout/generated-breadcrumbs.tsx +1 -1
- package/src/lib/components/layout/language-dialog.tsx +11 -5
- package/src/lib/components/layout/nav-main.tsx +4 -4
- package/src/lib/components/layout/nav-projects.tsx +2 -2
- package/src/lib/components/layout/nav-user.tsx +7 -7
- package/src/lib/components/layout/prerelease-popup.tsx +1 -1
- package/src/lib/components/login/login-form.tsx +5 -5
- package/src/lib/components/shared/alerts.tsx +3 -3
- package/src/lib/components/shared/animated-number.tsx +2 -2
- package/src/lib/components/shared/asset/asset-focal-point-editor.tsx +19 -29
- package/src/lib/components/shared/asset/asset-gallery.tsx +18 -23
- package/src/lib/components/shared/asset/asset-picker-dialog.tsx +66 -63
- package/src/lib/components/shared/asset/asset-preview-dialog.tsx +7 -3
- package/src/lib/components/shared/asset/asset-preview-selector.tsx +6 -4
- package/src/lib/components/shared/asset/asset-preview.tsx +15 -7
- package/src/lib/components/shared/asset/asset-properties.tsx +9 -7
- package/src/lib/components/shared/asset/focal-point-control.tsx +13 -5
- package/src/lib/components/shared/assigned-facet-values.tsx +5 -1
- package/src/lib/components/shared/channel-code-label.tsx +4 -3
- package/src/lib/components/shared/channel-selector.tsx +6 -6
- package/src/lib/components/shared/configurable-operation-arg-input.tsx +2 -2
- package/src/lib/components/shared/configurable-operation-input.tsx +16 -15
- package/src/lib/components/shared/confirmation-dialog.tsx +2 -2
- package/src/lib/components/shared/copyable-text.tsx +4 -3
- package/src/lib/components/shared/country-selector.tsx +18 -21
- package/src/lib/components/shared/currency-selector.tsx +5 -5
- package/src/lib/components/shared/custom-fields-form.tsx +51 -253
- package/src/lib/components/shared/customer-address-form.tsx +13 -18
- package/src/lib/components/shared/customer-group-selector.tsx +6 -6
- package/src/lib/components/shared/customer-selector.tsx +18 -24
- package/src/lib/components/shared/detail-page-button.tsx +1 -3
- package/src/lib/components/shared/entity-assets.tsx +34 -33
- package/src/lib/components/shared/error-page.tsx +6 -6
- package/src/lib/components/shared/facet-value-chip.tsx +5 -12
- package/src/lib/components/shared/facet-value-selector.tsx +63 -64
- package/src/lib/components/shared/form-field-wrapper.tsx +24 -47
- package/src/lib/components/shared/history-timeline/history-entry.tsx +6 -12
- package/src/lib/components/shared/history-timeline/history-note-checkbox.tsx +3 -3
- package/src/lib/components/shared/history-timeline/history-note-editor.tsx +4 -4
- package/src/lib/components/shared/history-timeline/history-note-input.tsx +3 -3
- package/src/lib/components/shared/history-timeline/history-timeline.tsx +8 -15
- package/src/lib/components/shared/language-selector.tsx +5 -5
- package/src/lib/components/shared/logo-mark.tsx +2 -2
- package/src/lib/components/shared/multi-select.tsx +5 -5
- package/src/lib/components/shared/navigation-confirmation.tsx +9 -24
- package/src/lib/components/shared/option-value-input.tsx +15 -17
- package/src/lib/components/shared/paginated-list-data-table.tsx +24 -100
- package/src/lib/components/shared/permission-guard.tsx +4 -4
- package/src/lib/components/shared/product-variant-selector.tsx +31 -32
- package/src/lib/components/shared/role-code-label.tsx +6 -10
- package/src/lib/components/shared/role-selector.tsx +4 -4
- package/src/lib/components/shared/seller-selector.tsx +17 -21
- package/src/lib/components/shared/stock-level-label.tsx +5 -5
- package/src/lib/components/shared/tax-category-selector.tsx +5 -5
- package/src/lib/components/shared/translatable-form-field.tsx +21 -30
- package/src/lib/components/shared/vendure-image.tsx +2 -31
- package/src/lib/components/shared/zone-selector.tsx +6 -5
- package/src/lib/components/ui/accordion.tsx +3 -3
- package/src/lib/components/ui/alert-dialog.tsx +10 -10
- package/src/lib/components/ui/alert.tsx +3 -3
- package/src/lib/components/ui/badge.tsx +2 -2
- package/src/lib/components/ui/breadcrumb.tsx +4 -4
- package/src/lib/components/ui/button.tsx +3 -10
- package/src/lib/components/ui/calendar.tsx +459 -392
- package/src/lib/components/ui/card.tsx +2 -2
- package/src/lib/components/ui/checkbox.tsx +2 -2
- package/src/lib/components/ui/command.tsx +6 -12
- package/src/lib/components/ui/dialog.tsx +2 -2
- package/src/lib/components/ui/dropdown-menu.tsx +7 -7
- package/src/lib/components/ui/form.tsx +4 -4
- package/src/lib/components/ui/hover-card.tsx +3 -3
- package/src/lib/components/ui/input.tsx +1 -1
- package/src/lib/components/ui/label.tsx +2 -2
- package/src/lib/components/ui/pagination.tsx +108 -87
- package/src/lib/components/ui/popover.tsx +3 -3
- package/src/lib/components/ui/scroll-area.tsx +2 -2
- package/src/lib/components/ui/select.tsx +129 -151
- package/src/lib/components/ui/separator.tsx +2 -2
- package/src/lib/components/ui/sheet.tsx +5 -5
- package/src/lib/components/ui/sidebar.tsx +10 -10
- package/src/lib/components/ui/skeleton.tsx +1 -1
- package/src/lib/components/ui/switch.tsx +2 -2
- package/src/lib/components/ui/table.tsx +2 -2
- package/src/lib/components/ui/tabs.tsx +3 -3
- package/src/lib/components/ui/textarea.tsx +1 -1
- package/src/lib/components/ui/tooltip.tsx +3 -3
- package/src/lib/framework/alert/alert-extensions.tsx +3 -2
- package/src/lib/framework/alert/alert-item.tsx +3 -5
- package/src/lib/framework/alert/types.ts +13 -0
- package/src/lib/framework/component-registry/component-registry.tsx +47 -33
- package/src/lib/framework/dashboard-widget/base-widget.tsx +13 -5
- package/src/lib/framework/dashboard-widget/latest-orders-widget/index.tsx +8 -8
- package/src/lib/framework/dashboard-widget/latest-orders-widget/latest-orders-widget.graphql.ts +1 -1
- package/src/lib/framework/dashboard-widget/metrics-widget/index.tsx +7 -6
- package/src/lib/framework/dashboard-widget/metrics-widget/metrics-widget.graphql.ts +1 -1
- package/src/lib/framework/dashboard-widget/orders-summary/index.tsx +6 -7
- package/src/lib/framework/dashboard-widget/orders-summary/order-summary-widget.graphql.ts +1 -1
- package/src/lib/framework/dashboard-widget/types.ts +22 -0
- package/src/lib/framework/dashboard-widget/widget-extensions.tsx +1 -1
- package/src/lib/framework/defaults.ts +1 -1
- package/src/lib/framework/document-introspection/add-custom-fields.ts +2 -50
- package/src/lib/framework/document-introspection/get-document-structure.ts +10 -43
- package/src/lib/framework/document-introspection/hooks.ts +1 -4
- package/src/lib/framework/extension-api/define-dashboard-extension.ts +49 -31
- package/src/lib/framework/extension-api/extension-api-types.ts +98 -25
- package/src/lib/framework/extension-api/use-dashboard-extensions.ts +1 -2
- package/src/lib/framework/form-engine/form-schema-tools.ts +1 -1
- package/src/lib/framework/form-engine/use-generated-form.tsx +18 -57
- package/src/lib/framework/layout-engine/location-wrapper.tsx +72 -105
- package/src/lib/framework/layout-engine/page-layout.tsx +52 -70
- package/src/lib/framework/page/detail-page-route-loader.tsx +7 -26
- package/src/lib/framework/page/detail-page.tsx +37 -94
- package/src/lib/framework/page/list-page.tsx +11 -9
- package/src/lib/framework/page/use-detail-page.ts +7 -38
- package/src/lib/framework/page/use-extended-router.tsx +5 -4
- package/src/lib/framework/registry/registry-types.ts +5 -15
- package/src/lib/graphql/{fragments.ts → fragments.tsx} +2 -1
- package/src/lib/graphql/graphql-env.d.ts +13 -16
- package/src/lib/hooks/use-auth.tsx +1 -1
- package/src/lib/hooks/use-channel.ts +1 -1
- package/src/lib/hooks/use-grouped-permissions.ts +2 -3
- package/src/lib/hooks/use-page.tsx +2 -2
- package/src/lib/hooks/use-permissions.ts +2 -3
- package/src/lib/hooks/use-server-config.ts +1 -1
- package/src/lib/hooks/use-theme.ts +1 -1
- package/src/lib/hooks/use-user-settings.tsx +1 -1
- package/src/lib/index.ts +6 -65
- package/src/lib/lib/trans.tsx +3 -3
- package/src/lib/lib/utils.ts +0 -49
- package/src/lib/providers/auth.tsx +14 -37
- package/src/lib/providers/channel-provider.tsx +4 -4
- package/src/lib/providers/server-config.tsx +11 -13
- package/src/lib/providers/theme-provider.tsx +3 -2
- package/vite/utils/config-loader.ts +10 -120
- package/vite/vite-plugin-config-loader.ts +1 -6
- package/vite/vite-plugin-config.ts +7 -6
- package/vite/vite-plugin-dashboard-metadata.ts +9 -1
- package/vite/vite-plugin-vendure-dashboard.ts +4 -48
- package/dist/plugin/tests/barrel-exports/my-plugin/index.d.ts +0 -1
- package/dist/plugin/tests/barrel-exports/my-plugin/index.js +0 -17
- package/dist/plugin/tests/barrel-exports/my-plugin/src/my.plugin.d.ts +0 -2
- package/dist/plugin/tests/barrel-exports/my-plugin/src/my.plugin.js +0 -20
- package/dist/plugin/tests/barrel-exports/vendure-config.d.ts +0 -2
- package/dist/plugin/tests/barrel-exports/vendure-config.js +0 -19
- package/dist/plugin/tests/barrel-exports.spec.d.ts +0 -1
- package/dist/plugin/tests/barrel-exports.spec.js +0 -14
- package/dist/plugin/vite-plugin-tailwind-source.d.ts +0 -7
- package/dist/plugin/vite-plugin-tailwind-source.js +0 -49
- package/src/app/common/delete-bulk-action.tsx +0 -148
- package/src/app/common/duplicate-bulk-action.tsx +0 -134
- package/src/app/routes/_authenticated/_administrators/components/administrator-bulk-actions.tsx +0 -15
- package/src/app/routes/_authenticated/_assets/components/asset-bulk-actions.tsx +0 -45
- package/src/app/routes/_authenticated/_channels/components/channel-bulk-actions.tsx +0 -15
- package/src/app/routes/_authenticated/_collections/components/collection-bulk-actions.tsx +0 -123
- package/src/app/routes/_authenticated/_collections/components/move-collections-dialog.tsx +0 -430
- package/src/app/routes/_authenticated/_collections/components/move-single-collection.tsx +0 -33
- package/src/app/routes/_authenticated/_countries/components/country-bulk-actions.tsx +0 -15
- package/src/app/routes/_authenticated/_customer-groups/components/customer-group-bulk-actions.tsx +0 -15
- package/src/app/routes/_authenticated/_customers/components/customer-bulk-actions.tsx +0 -15
- package/src/app/routes/_authenticated/_facets/components/facet-bulk-actions.tsx +0 -104
- package/src/app/routes/_authenticated/_orders/components/add-manual-payment-dialog.tsx +0 -191
- package/src/app/routes/_authenticated/_orders/components/fulfill-order-dialog.tsx +0 -320
- package/src/app/routes/_authenticated/_orders/components/fulfillment-details.tsx +0 -173
- package/src/app/routes/_authenticated/_orders/utils/order-types.ts +0 -7
- package/src/app/routes/_authenticated/_orders/utils/order-utils.ts +0 -77
- package/src/app/routes/_authenticated/_payment-methods/components/payment-method-bulk-actions.tsx +0 -58
- package/src/app/routes/_authenticated/_product-variants/components/product-variant-bulk-actions.tsx +0 -110
- package/src/app/routes/_authenticated/_products/components/assign-facet-values-dialog.tsx +0 -281
- package/src/app/routes/_authenticated/_products/components/product-bulk-actions.tsx +0 -123
- package/src/app/routes/_authenticated/_promotions/components/promotion-bulk-actions.tsx +0 -82
- package/src/app/routes/_authenticated/_roles/components/role-bulk-actions.tsx +0 -15
- package/src/app/routes/_authenticated/_sellers/components/seller-bulk-actions.tsx +0 -15
- package/src/app/routes/_authenticated/_shipping-methods/components/shipping-method-bulk-actions.tsx +0 -61
- package/src/app/routes/_authenticated/_stock-locations/components/stock-location-bulk-actions.tsx +0 -58
- package/src/app/routes/_authenticated/_tax-categories/components/tax-category-bulk-actions.tsx +0 -15
- package/src/app/routes/_authenticated/_tax-rates/components/tax-rate-bulk-actions.tsx +0 -15
- package/src/app/routes/_authenticated/_zones/components/zone-bulk-actions.tsx +0 -15
- package/src/lib/components/data-input/index.ts +0 -11
- package/src/lib/components/data-input/relation-input.tsx +0 -153
- package/src/lib/components/data-input/relation-selector.tsx +0 -468
- package/src/lib/components/data-table/data-table-bulk-action-item.tsx +0 -101
- package/src/lib/components/data-table/data-table-bulk-actions.tsx +0 -95
- package/src/lib/components/labeled-data.tsx +0 -21
- package/src/lib/components/shared/asset/asset-bulk-actions.tsx +0 -94
- package/src/lib/components/shared/assign-to-channel-bulk-action.tsx +0 -71
- package/src/lib/components/shared/assign-to-channel-dialog.tsx +0 -155
- package/src/lib/components/shared/remove-from-channel-bulk-action.tsx +0 -90
- package/src/lib/framework/data-table/data-table-extensions.ts +0 -35
- package/src/lib/framework/document-extension/extend-detail-form-query.ts +0 -50
- package/src/lib/framework/document-extension/extend-document.spec.ts +0 -884
- package/src/lib/framework/document-extension/extend-document.ts +0 -159
- package/src/lib/framework/extension-api/display-component-extensions.tsx +0 -69
- package/src/lib/framework/extension-api/input-component-extensions.tsx +0 -69
- package/src/lib/framework/extension-api/logic/alerts.ts +0 -10
- package/src/lib/framework/extension-api/logic/data-table.ts +0 -60
- package/src/lib/framework/extension-api/logic/detail-forms.ts +0 -48
- package/src/lib/framework/extension-api/logic/form-components.ts +0 -13
- package/src/lib/framework/extension-api/logic/index.ts +0 -8
- package/src/lib/framework/extension-api/logic/layout.ts +0 -22
- package/src/lib/framework/extension-api/logic/navigation.ts +0 -37
- package/src/lib/framework/extension-api/logic/widgets.ts +0 -10
- package/src/lib/framework/extension-api/types/alerts.ts +0 -54
- package/src/lib/framework/extension-api/types/data-table.ts +0 -87
- package/src/lib/framework/extension-api/types/detail-forms.ts +0 -81
- package/src/lib/framework/extension-api/types/form-components.ts +0 -32
- package/src/lib/framework/extension-api/types/index.ts +0 -8
- package/src/lib/framework/extension-api/types/layout.ts +0 -78
- package/src/lib/framework/extension-api/types/navigation.ts +0 -19
- package/src/lib/framework/extension-api/types/widgets.ts +0 -97
- package/src/lib/framework/form-engine/custom-form-component-extensions.ts +0 -38
- package/src/lib/framework/form-engine/custom-form-component.tsx +0 -33
- package/src/lib/framework/form-engine/overridden-form-component.tsx +0 -51
- package/src/lib/framework/form-engine/utils.ts +0 -58
- package/src/lib/framework/layout-engine/page-block-provider.tsx +0 -6
- package/src/lib/graphql/common-operations.ts +0 -18
- package/src/lib/hooks/use-extended-detail-query.ts +0 -37
- package/src/lib/hooks/use-extended-list-query.ts +0 -73
- package/src/lib/hooks/use-page-block.tsx +0 -18
- package/vite/tests/barrel-exports/my-plugin/index.ts +0 -1
- package/vite/tests/barrel-exports/my-plugin/src/my.plugin.ts +0 -8
- package/vite/tests/barrel-exports/package.json +0 -6
- package/vite/tests/barrel-exports/vendure-config.ts +0 -19
- package/vite/tests/barrel-exports.spec.ts +0 -21
- package/vite/vite-plugin-tailwind-source.ts +0 -65
- /package/src/lib/components/data-table/{types.ts → data-table-types.ts} +0 -0
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
import { Variables } from '@/vdb/graphql/api.js';
|
|
2
|
-
import type { TypedDocumentNode } from '@graphql-typed-document-node/core';
|
|
3
|
-
import {
|
|
4
|
-
DefinitionNode,
|
|
5
|
-
DocumentNode,
|
|
6
|
-
FieldNode,
|
|
7
|
-
FragmentDefinitionNode,
|
|
8
|
-
Kind,
|
|
9
|
-
OperationDefinitionNode,
|
|
10
|
-
parse,
|
|
11
|
-
SelectionNode,
|
|
12
|
-
SelectionSetNode,
|
|
13
|
-
} from 'graphql';
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Type-safe template string function for extending GraphQL documents
|
|
17
|
-
*/
|
|
18
|
-
export function extendDocument<T extends TypedDocumentNode, V extends Variables = Variables>(
|
|
19
|
-
defaultDocument: T,
|
|
20
|
-
template: TemplateStringsArray,
|
|
21
|
-
...values: any[]
|
|
22
|
-
): T;
|
|
23
|
-
export function extendDocument<T extends TypedDocumentNode, V extends Variables = Variables>(
|
|
24
|
-
defaultDocument: T,
|
|
25
|
-
sdl: string | DocumentNode,
|
|
26
|
-
): T;
|
|
27
|
-
export function extendDocument<T extends TypedDocumentNode, V extends Variables = Variables>(
|
|
28
|
-
defaultDocument: T,
|
|
29
|
-
template: TemplateStringsArray | string | DocumentNode,
|
|
30
|
-
...values: any[]
|
|
31
|
-
): T {
|
|
32
|
-
// Handle template strings, regular strings, and DocumentNode
|
|
33
|
-
let extensionDocument: DocumentNode;
|
|
34
|
-
if (Array.isArray(template)) {
|
|
35
|
-
// Template string array
|
|
36
|
-
const sdl = (template as TemplateStringsArray).reduce((result, str, i) => {
|
|
37
|
-
return result + str + String(values[i] ?? '');
|
|
38
|
-
}, '');
|
|
39
|
-
extensionDocument = parse(sdl);
|
|
40
|
-
} else if (typeof template === 'string') {
|
|
41
|
-
// Regular string
|
|
42
|
-
extensionDocument = parse(template);
|
|
43
|
-
} else {
|
|
44
|
-
// DocumentNode
|
|
45
|
-
extensionDocument = template as DocumentNode;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// Merge the documents
|
|
49
|
-
const mergedDocument = mergeDocuments(defaultDocument, extensionDocument);
|
|
50
|
-
|
|
51
|
-
return mergedDocument as T;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Merges two GraphQL documents, adding fields from the extension to the base document
|
|
56
|
-
*/
|
|
57
|
-
function mergeDocuments(baseDocument: DocumentNode, extensionDocument: DocumentNode): DocumentNode {
|
|
58
|
-
const baseClone = JSON.parse(JSON.stringify(baseDocument)) as DocumentNode;
|
|
59
|
-
|
|
60
|
-
// Get all operation definitions from both documents
|
|
61
|
-
const baseOperations = baseClone.definitions.filter(isOperationDefinition);
|
|
62
|
-
const extensionOperations = extensionDocument.definitions.filter(isOperationDefinition);
|
|
63
|
-
|
|
64
|
-
// Get all fragment definitions from both documents
|
|
65
|
-
const baseFragments = baseClone.definitions.filter(isFragmentDefinition);
|
|
66
|
-
const extensionFragments = extensionDocument.definitions.filter(isFragmentDefinition);
|
|
67
|
-
|
|
68
|
-
// Merge fragments first (extensions can reference them)
|
|
69
|
-
const mergedFragments = [...baseFragments, ...extensionFragments];
|
|
70
|
-
|
|
71
|
-
// For each operation in the extension, find the corresponding base operation and merge
|
|
72
|
-
for (const extensionOp of extensionOperations) {
|
|
73
|
-
// Get the top-level field name from the extension operation
|
|
74
|
-
const extensionField = extensionOp.selectionSet.selections[0] as FieldNode;
|
|
75
|
-
if (!extensionField) {
|
|
76
|
-
throw new Error('Extension query must have at least one top-level field');
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// Find a base operation that has the same top-level field
|
|
80
|
-
const baseOp = baseOperations.find(op => {
|
|
81
|
-
const baseField = op.selectionSet.selections[0] as FieldNode;
|
|
82
|
-
return baseField && baseField.name.value === extensionField.name.value;
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
if (!baseOp) {
|
|
86
|
-
const validQueryFields = baseOperations
|
|
87
|
-
.map(op => {
|
|
88
|
-
const field = op.selectionSet.selections[0] as FieldNode;
|
|
89
|
-
return field ? field.name.value : 'unknown';
|
|
90
|
-
})
|
|
91
|
-
.join(', ');
|
|
92
|
-
throw new Error(
|
|
93
|
-
`The query extension must extend the '${validQueryFields}' query. ` +
|
|
94
|
-
`Got '${extensionField.name.value}' instead.`,
|
|
95
|
-
);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// Merge the selection sets of the matching top-level fields
|
|
99
|
-
const baseFieldNode = baseOp.selectionSet.selections[0] as FieldNode;
|
|
100
|
-
if (baseFieldNode.selectionSet && extensionField.selectionSet) {
|
|
101
|
-
mergeSelectionSets(baseFieldNode.selectionSet, extensionField.selectionSet);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
// Update the document with merged definitions
|
|
106
|
-
(baseClone as any).definitions = [...baseOperations, ...mergedFragments];
|
|
107
|
-
|
|
108
|
-
return baseClone;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Merges two selection sets, adding fields from the extension to the base
|
|
113
|
-
*/
|
|
114
|
-
function mergeSelectionSets(
|
|
115
|
-
baseSelectionSet: SelectionSetNode,
|
|
116
|
-
extensionSelectionSet: SelectionSetNode,
|
|
117
|
-
): void {
|
|
118
|
-
const baseFields = baseSelectionSet.selections.filter(isFieldNode);
|
|
119
|
-
const extensionFields = extensionSelectionSet.selections.filter(isFieldNode);
|
|
120
|
-
|
|
121
|
-
for (const extensionField of extensionFields) {
|
|
122
|
-
const existingField = baseFields.find(field => field.name.value === extensionField.name.value);
|
|
123
|
-
|
|
124
|
-
if (existingField) {
|
|
125
|
-
// Field already exists, merge their selection sets if both have them
|
|
126
|
-
if (existingField.selectionSet && extensionField.selectionSet) {
|
|
127
|
-
mergeSelectionSets(existingField.selectionSet, extensionField.selectionSet);
|
|
128
|
-
} else if (extensionField.selectionSet && !existingField.selectionSet) {
|
|
129
|
-
// Extension has a selection set but base doesn't, add it
|
|
130
|
-
(existingField as any).selectionSet = extensionField.selectionSet;
|
|
131
|
-
}
|
|
132
|
-
} else {
|
|
133
|
-
// Field doesn't exist, add it
|
|
134
|
-
(baseSelectionSet as any).selections.push(extensionField);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Type guards
|
|
141
|
-
*/
|
|
142
|
-
function isOperationDefinition(value: DefinitionNode): value is OperationDefinitionNode {
|
|
143
|
-
return value.kind === Kind.OPERATION_DEFINITION;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
function isFragmentDefinition(value: DefinitionNode): value is FragmentDefinitionNode {
|
|
147
|
-
return value.kind === Kind.FRAGMENT_DEFINITION;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
function isFieldNode(value: SelectionNode): value is FieldNode {
|
|
151
|
-
return value.kind === Kind.FIELD;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* Utility function to create a template string tag for better DX
|
|
156
|
-
*/
|
|
157
|
-
export function gqlExtend(strings: TemplateStringsArray, ...values: any[]) {
|
|
158
|
-
return (defaultDocument: DocumentNode) => extendDocument(defaultDocument, strings, ...values);
|
|
159
|
-
}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { BooleanDisplayBadge, BooleanDisplayCheckbox } from '@/vdb/components/data-display/boolean.js';
|
|
2
|
-
import { DateTime } from '@/vdb/components/data-display/date-time.js';
|
|
3
|
-
import { Money } from '@/vdb/components/data-display/money.js';
|
|
4
|
-
import { VendureImage } from '@/vdb/components/shared/vendure-image.js';
|
|
5
|
-
import { DataDisplayComponent } from '../component-registry/component-registry.js';
|
|
6
|
-
import { globalRegistry } from '../registry/global-registry.js';
|
|
7
|
-
|
|
8
|
-
globalRegistry.register('displayComponents', new Map<string, DataDisplayComponent>());
|
|
9
|
-
|
|
10
|
-
// Create component function for asset display
|
|
11
|
-
const AssetDisplay: DataDisplayComponent = ({ value }) => <VendureImage asset={value} preset="tiny" />;
|
|
12
|
-
|
|
13
|
-
// Register built-in display components
|
|
14
|
-
const displayComponents = globalRegistry.get('displayComponents');
|
|
15
|
-
displayComponents.set('vendure:booleanCheckbox', BooleanDisplayCheckbox);
|
|
16
|
-
displayComponents.set('vendure:booleanBadge', BooleanDisplayBadge);
|
|
17
|
-
displayComponents.set('vendure:dateTime', DateTime);
|
|
18
|
-
displayComponents.set('vendure:asset', AssetDisplay);
|
|
19
|
-
displayComponents.set('vendure:money', Money);
|
|
20
|
-
|
|
21
|
-
export function getDisplayComponent(id: string): DataDisplayComponent | undefined {
|
|
22
|
-
return globalRegistry.get('displayComponents').get(id);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* @description
|
|
27
|
-
* Gets a display component using the targeting properties.
|
|
28
|
-
* Uses the same key pattern as registration: pageId_blockId_fieldName
|
|
29
|
-
*/
|
|
30
|
-
export function getTargetedDisplayComponent(
|
|
31
|
-
pageId: string,
|
|
32
|
-
blockId: string,
|
|
33
|
-
field: string,
|
|
34
|
-
): DataDisplayComponent | undefined {
|
|
35
|
-
const key = generateDisplayComponentKey(pageId, blockId, field);
|
|
36
|
-
return globalRegistry.get('displayComponents').get(key);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* @description
|
|
41
|
-
* Generates a display component key based on the targeting properties.
|
|
42
|
-
* Follows the existing pattern: pageId_blockId_fieldName
|
|
43
|
-
*/
|
|
44
|
-
export function generateDisplayComponentKey(pageId: string, blockId: string, field: string): string {
|
|
45
|
-
return `${pageId}_${blockId}_${field}`;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export function addDisplayComponent({
|
|
49
|
-
pageId,
|
|
50
|
-
blockId,
|
|
51
|
-
field,
|
|
52
|
-
component,
|
|
53
|
-
}: {
|
|
54
|
-
pageId: string;
|
|
55
|
-
blockId: string;
|
|
56
|
-
field: string;
|
|
57
|
-
component: React.ComponentType<{ value: any; [key: string]: any }>;
|
|
58
|
-
}) {
|
|
59
|
-
const displayComponents = globalRegistry.get('displayComponents');
|
|
60
|
-
|
|
61
|
-
// Generate the key using the helper function
|
|
62
|
-
const key = generateDisplayComponentKey(pageId, blockId, field);
|
|
63
|
-
|
|
64
|
-
if (displayComponents.has(key)) {
|
|
65
|
-
// eslint-disable-next-line no-console
|
|
66
|
-
console.warn(`Display component with key "${key}" is already registered and will be overwritten.`);
|
|
67
|
-
}
|
|
68
|
-
displayComponents.set(key, component);
|
|
69
|
-
}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { DateTimeInput } from '@/vdb/components/data-input/datetime-input.js';
|
|
2
|
-
import { FacetValueInput } from '@/vdb/components/data-input/facet-value-input.js';
|
|
3
|
-
import { MoneyInput } from '@/vdb/components/data-input/money-input.js';
|
|
4
|
-
import { Checkbox } from '@/vdb/components/ui/checkbox.js';
|
|
5
|
-
import { Input } from '@/vdb/components/ui/input.js';
|
|
6
|
-
import { DataInputComponent } from '../component-registry/component-registry.js';
|
|
7
|
-
import { globalRegistry } from '../registry/global-registry.js';
|
|
8
|
-
|
|
9
|
-
globalRegistry.register('inputComponents', new Map<string, DataInputComponent>());
|
|
10
|
-
|
|
11
|
-
// Create component functions for built-in components
|
|
12
|
-
const TextInput: DataInputComponent = props => (
|
|
13
|
-
<Input {...props} onChange={e => props.onChange(e.target.value)} />
|
|
14
|
-
);
|
|
15
|
-
const NumberInput: DataInputComponent = props => (
|
|
16
|
-
<Input {...props} onChange={e => props.onChange(e.target.valueAsNumber)} type="number" />
|
|
17
|
-
);
|
|
18
|
-
const CheckboxInput: DataInputComponent = props => (
|
|
19
|
-
<Checkbox
|
|
20
|
-
{...props}
|
|
21
|
-
checked={props.value === 'true' || props.value === true}
|
|
22
|
-
onCheckedChange={value => props.onChange(value)}
|
|
23
|
-
/>
|
|
24
|
-
);
|
|
25
|
-
|
|
26
|
-
// Register built-in input components
|
|
27
|
-
const inputComponents = globalRegistry.get('inputComponents');
|
|
28
|
-
inputComponents.set('vendure:moneyInput', MoneyInput);
|
|
29
|
-
inputComponents.set('vendure:textInput', TextInput);
|
|
30
|
-
inputComponents.set('vendure:numberInput', NumberInput);
|
|
31
|
-
inputComponents.set('vendure:dateTimeInput', DateTimeInput);
|
|
32
|
-
inputComponents.set('vendure:checkboxInput', CheckboxInput);
|
|
33
|
-
inputComponents.set('vendure:facetValueInput', FacetValueInput);
|
|
34
|
-
|
|
35
|
-
export function getInputComponent(id: string): DataInputComponent | undefined {
|
|
36
|
-
return globalRegistry.get('inputComponents').get(id);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* @description
|
|
41
|
-
* Generates a component key based on the targeting properties.
|
|
42
|
-
* Follows the existing pattern: pageId_blockId_fieldName
|
|
43
|
-
*/
|
|
44
|
-
export function generateInputComponentKey(pageId: string, blockId: string, field: string): string {
|
|
45
|
-
return `${pageId}_${blockId}_${field}`;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export function addInputComponent({
|
|
49
|
-
pageId,
|
|
50
|
-
blockId,
|
|
51
|
-
field,
|
|
52
|
-
component,
|
|
53
|
-
}: {
|
|
54
|
-
pageId: string;
|
|
55
|
-
blockId: string;
|
|
56
|
-
field: string;
|
|
57
|
-
component: React.ComponentType<{ value: any; onChange: (value: any) => void; [key: string]: any }>;
|
|
58
|
-
}) {
|
|
59
|
-
const inputComponents = globalRegistry.get('inputComponents');
|
|
60
|
-
|
|
61
|
-
// Generate the key using the helper function
|
|
62
|
-
const key = generateInputComponentKey(pageId, blockId, field);
|
|
63
|
-
|
|
64
|
-
if (inputComponents.has(key)) {
|
|
65
|
-
// eslint-disable-next-line no-console
|
|
66
|
-
console.warn(`Input component with key "${key}" is already registered and will be overwritten.`);
|
|
67
|
-
}
|
|
68
|
-
inputComponents.set(key, component);
|
|
69
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { globalRegistry } from '../../registry/global-registry.js';
|
|
2
|
-
import { DashboardAlertDefinition } from '../types/alerts.js';
|
|
3
|
-
|
|
4
|
-
export function registerAlertExtensions(alerts?: DashboardAlertDefinition[]) {
|
|
5
|
-
if (alerts) {
|
|
6
|
-
for (const alert of alerts) {
|
|
7
|
-
globalRegistry.get('dashboardAlertRegistry').set(alert.id, alert);
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { parse } from 'graphql';
|
|
2
|
-
|
|
3
|
-
import { addBulkAction, addListQueryDocument } from '../../data-table/data-table-extensions.js';
|
|
4
|
-
import { addDisplayComponent } from '../display-component-extensions.js';
|
|
5
|
-
import { DashboardDataTableExtensionDefinition } from '../types/index.js';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* @description
|
|
9
|
-
* Generates a data table display component key based on the pageId and column name.
|
|
10
|
-
* Uses the pattern: pageId_columnName
|
|
11
|
-
*/
|
|
12
|
-
export function generateDataTableDisplayComponentKey(pageId: string, column: string): string {
|
|
13
|
-
return `${pageId}_${column}`;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* @description
|
|
18
|
-
* Adds a display component for a specific column in a data table.
|
|
19
|
-
*/
|
|
20
|
-
export function addDataTableDisplayComponent(
|
|
21
|
-
pageId: string,
|
|
22
|
-
column: string,
|
|
23
|
-
component: React.ComponentType<{ value: any; [key: string]: any }>,
|
|
24
|
-
) {
|
|
25
|
-
const key = generateDataTableDisplayComponentKey(pageId, column);
|
|
26
|
-
addDisplayComponent({ pageId, blockId: 'list-table', field: column, component });
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export function registerDataTableExtensions(dataTables?: DashboardDataTableExtensionDefinition[]) {
|
|
30
|
-
if (dataTables) {
|
|
31
|
-
for (const dataTable of dataTables) {
|
|
32
|
-
if (dataTable.bulkActions?.length) {
|
|
33
|
-
for (const action of dataTable.bulkActions) {
|
|
34
|
-
addBulkAction(dataTable.pageId, dataTable.blockId, action);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
if (dataTable.extendListDocument) {
|
|
38
|
-
const document =
|
|
39
|
-
typeof dataTable.extendListDocument === 'function'
|
|
40
|
-
? dataTable.extendListDocument()
|
|
41
|
-
: dataTable.extendListDocument;
|
|
42
|
-
|
|
43
|
-
addListQueryDocument(
|
|
44
|
-
dataTable.pageId,
|
|
45
|
-
dataTable.blockId,
|
|
46
|
-
typeof document === 'string' ? parse(document) : document,
|
|
47
|
-
);
|
|
48
|
-
}
|
|
49
|
-
if (dataTable.displayComponents?.length) {
|
|
50
|
-
for (const displayComponent of dataTable.displayComponents) {
|
|
51
|
-
addDataTableDisplayComponent(
|
|
52
|
-
dataTable.pageId,
|
|
53
|
-
displayComponent.column,
|
|
54
|
-
displayComponent.component,
|
|
55
|
-
);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { addDetailQueryDocument } from '@/vdb/framework/form-engine/custom-form-component-extensions.js';
|
|
2
|
-
import { parse } from 'graphql';
|
|
3
|
-
|
|
4
|
-
import { addDisplayComponent } from '../display-component-extensions.js';
|
|
5
|
-
import { addInputComponent } from '../input-component-extensions.js';
|
|
6
|
-
import { DashboardDetailFormExtensionDefinition } from '../types/detail-forms.js';
|
|
7
|
-
|
|
8
|
-
export function registerDetailFormExtensions(detailForms?: DashboardDetailFormExtensionDefinition[]) {
|
|
9
|
-
if (detailForms) {
|
|
10
|
-
for (const detailForm of detailForms) {
|
|
11
|
-
if (detailForm.extendDetailDocument) {
|
|
12
|
-
const document =
|
|
13
|
-
typeof detailForm.extendDetailDocument === 'function'
|
|
14
|
-
? detailForm.extendDetailDocument()
|
|
15
|
-
: detailForm.extendDetailDocument;
|
|
16
|
-
|
|
17
|
-
addDetailQueryDocument(
|
|
18
|
-
detailForm.pageId,
|
|
19
|
-
typeof document === 'string' ? parse(document) : document,
|
|
20
|
-
);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
// Register input components for this detail form
|
|
24
|
-
if (detailForm.inputs) {
|
|
25
|
-
for (const inputComponent of detailForm.inputs) {
|
|
26
|
-
addInputComponent({
|
|
27
|
-
pageId: detailForm.pageId,
|
|
28
|
-
blockId: inputComponent.blockId,
|
|
29
|
-
field: inputComponent.field,
|
|
30
|
-
component: inputComponent.component,
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// Register display components for this detail form
|
|
36
|
-
if (detailForm.displays) {
|
|
37
|
-
for (const displayComponent of detailForm.displays) {
|
|
38
|
-
addDisplayComponent({
|
|
39
|
-
pageId: detailForm.pageId,
|
|
40
|
-
blockId: displayComponent.blockId,
|
|
41
|
-
field: displayComponent.field,
|
|
42
|
-
component: displayComponent.component,
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { addCustomFormComponent } from '../../form-engine/custom-form-component-extensions.js';
|
|
2
|
-
import { DashboardCustomFormComponents } from '../types/form-components.js';
|
|
3
|
-
|
|
4
|
-
export function registerFormComponentExtensions(customFormComponents?: DashboardCustomFormComponents) {
|
|
5
|
-
if (customFormComponents) {
|
|
6
|
-
// Handle custom field components
|
|
7
|
-
if (customFormComponents.customFields) {
|
|
8
|
-
for (const component of customFormComponents.customFields) {
|
|
9
|
-
addCustomFormComponent(component);
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
// Re-export all domain-specific logic functions
|
|
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,22 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
registerDashboardActionBarItem,
|
|
3
|
-
registerDashboardPageBlock,
|
|
4
|
-
} from '../../layout-engine/layout-extensions.js';
|
|
5
|
-
import { DashboardActionBarItem, DashboardPageBlockDefinition } from '../types/layout.js';
|
|
6
|
-
|
|
7
|
-
export function registerLayoutExtensions(
|
|
8
|
-
actionBarItems?: DashboardActionBarItem[],
|
|
9
|
-
pageBlocks?: DashboardPageBlockDefinition[],
|
|
10
|
-
) {
|
|
11
|
-
if (actionBarItems) {
|
|
12
|
-
for (const item of actionBarItems) {
|
|
13
|
-
registerDashboardActionBarItem(item);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
if (pageBlocks) {
|
|
18
|
-
for (const block of pageBlocks) {
|
|
19
|
-
registerDashboardPageBlock(block);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { addNavMenuItem, addNavMenuSection, NavMenuItem } from '../../nav-menu/nav-menu-extensions.js';
|
|
2
|
-
import { registerRoute } from '../../page/page-api.js';
|
|
3
|
-
import { DashboardNavSectionDefinition, DashboardRouteDefinition } from '../types/navigation.js';
|
|
4
|
-
|
|
5
|
-
export function registerNavigationExtensions(
|
|
6
|
-
navSections?: DashboardNavSectionDefinition[],
|
|
7
|
-
routes?: DashboardRouteDefinition[],
|
|
8
|
-
) {
|
|
9
|
-
if (navSections) {
|
|
10
|
-
for (const section of navSections) {
|
|
11
|
-
addNavMenuSection({
|
|
12
|
-
...section,
|
|
13
|
-
placement: 'top',
|
|
14
|
-
order: section.order ?? 999,
|
|
15
|
-
items: [],
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
if (routes) {
|
|
21
|
-
for (const route of routes) {
|
|
22
|
-
if (route.navMenuItem) {
|
|
23
|
-
// Add the nav menu item
|
|
24
|
-
const item: NavMenuItem = {
|
|
25
|
-
url: route.navMenuItem.url ?? route.path,
|
|
26
|
-
id: route.navMenuItem.id ?? route.path,
|
|
27
|
-
title: route.navMenuItem.title ?? route.path,
|
|
28
|
-
};
|
|
29
|
-
addNavMenuItem(item, route.navMenuItem.sectionId);
|
|
30
|
-
}
|
|
31
|
-
if (route.path) {
|
|
32
|
-
// Configure a list page
|
|
33
|
-
registerRoute(route);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { registerDashboardWidget } from '../../dashboard-widget/widget-extensions.js';
|
|
2
|
-
import { DashboardWidgetDefinition } from '../types/index.js';
|
|
3
|
-
|
|
4
|
-
export function registerWidgetExtensions(widgets?: DashboardWidgetDefinition[]) {
|
|
5
|
-
if (widgets) {
|
|
6
|
-
for (const widget of widgets) {
|
|
7
|
-
registerDashboardWidget(widget);
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @description
|
|
3
|
-
* **Status: Developer Preview**
|
|
4
|
-
*
|
|
5
|
-
* Allows you to define custom alerts that can be displayed in the dashboard.
|
|
6
|
-
*
|
|
7
|
-
* @docsCategory extensions
|
|
8
|
-
* @since 3.3.0
|
|
9
|
-
*/
|
|
10
|
-
export interface DashboardAlertDefinition<TResponse = any> {
|
|
11
|
-
/**
|
|
12
|
-
* @description
|
|
13
|
-
* A unique identifier for the alert.
|
|
14
|
-
*/
|
|
15
|
-
id: string;
|
|
16
|
-
/**
|
|
17
|
-
* @description
|
|
18
|
-
* The title of the alert. Can be a string or a function that returns a string based on the response data.
|
|
19
|
-
*/
|
|
20
|
-
title: string | ((data: TResponse) => string);
|
|
21
|
-
/**
|
|
22
|
-
* @description
|
|
23
|
-
* The description of the alert. Can be a string or a function that returns a string based on the response data.
|
|
24
|
-
*/
|
|
25
|
-
description?: string | ((data: TResponse) => string);
|
|
26
|
-
/**
|
|
27
|
-
* @description
|
|
28
|
-
* The severity level of the alert.
|
|
29
|
-
*/
|
|
30
|
-
severity: 'info' | 'warning' | 'error';
|
|
31
|
-
/**
|
|
32
|
-
* @description
|
|
33
|
-
* A function that checks the condition and returns the response data.
|
|
34
|
-
*/
|
|
35
|
-
check: () => Promise<TResponse> | TResponse;
|
|
36
|
-
/**
|
|
37
|
-
* @description
|
|
38
|
-
* The interval in milliseconds to recheck the condition.
|
|
39
|
-
*/
|
|
40
|
-
recheckInterval?: number;
|
|
41
|
-
/**
|
|
42
|
-
* @description
|
|
43
|
-
* A function that determines whether the alert should be shown based on the response data.
|
|
44
|
-
*/
|
|
45
|
-
shouldShow?: (data: TResponse) => boolean;
|
|
46
|
-
/**
|
|
47
|
-
* @description
|
|
48
|
-
* Optional actions that can be performed when the alert is shown.
|
|
49
|
-
*/
|
|
50
|
-
actions?: Array<{
|
|
51
|
-
label: string;
|
|
52
|
-
onClick: (data: TResponse) => void;
|
|
53
|
-
}>;
|
|
54
|
-
}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { Table } from '@tanstack/react-table';
|
|
2
|
-
import { DocumentNode } from 'graphql';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* @description
|
|
6
|
-
* Allows you to define custom display components for specific columns in data tables.
|
|
7
|
-
* The pageId is already defined in the data table extension, so only the column name is needed.
|
|
8
|
-
*
|
|
9
|
-
* @docsCategory extensions
|
|
10
|
-
* @since 3.4.0
|
|
11
|
-
*/
|
|
12
|
-
export interface DashboardDataTableDisplayComponent {
|
|
13
|
-
/**
|
|
14
|
-
* @description
|
|
15
|
-
* The name of the column where this display component should be used.
|
|
16
|
-
*/
|
|
17
|
-
column: string;
|
|
18
|
-
/**
|
|
19
|
-
* @description
|
|
20
|
-
* The React component that will be rendered as the display.
|
|
21
|
-
* It should accept `value` and other standard display props.
|
|
22
|
-
*/
|
|
23
|
-
component: React.ComponentType<{ value: any; [key: string]: any }>;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export type BulkActionContext<Item extends { id: string } & Record<string, any>> = {
|
|
27
|
-
selection: Item[];
|
|
28
|
-
table: Table<Item>;
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
export type BulkActionComponent<Item extends { id: string } & Record<string, any>> = React.FunctionComponent<
|
|
32
|
-
BulkActionContext<Item>
|
|
33
|
-
>;
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* @description
|
|
37
|
-
* **Status: Developer Preview**
|
|
38
|
-
*
|
|
39
|
-
* A bulk action is a component that will be rendered in the bulk actions dropdown.
|
|
40
|
-
*
|
|
41
|
-
* @docsCategory components
|
|
42
|
-
* @docsPage DataTableBulkActions
|
|
43
|
-
* @since 3.4.0
|
|
44
|
-
*/
|
|
45
|
-
export type BulkAction = {
|
|
46
|
-
order?: number;
|
|
47
|
-
component: BulkActionComponent<any>;
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* @description
|
|
52
|
-
* **Status: Developer Preview**
|
|
53
|
-
*
|
|
54
|
-
* This allows you to customize aspects of existing data tables in the dashboard.
|
|
55
|
-
*
|
|
56
|
-
* @docsCategory extensions
|
|
57
|
-
* @since 3.4.0
|
|
58
|
-
*/
|
|
59
|
-
export interface DashboardDataTableExtensionDefinition {
|
|
60
|
-
/**
|
|
61
|
-
* @description
|
|
62
|
-
* The ID of the page where the data table is located, e.g. `'product-list'`, `'order-list'`.
|
|
63
|
-
*/
|
|
64
|
-
pageId: string;
|
|
65
|
-
/**
|
|
66
|
-
* @description
|
|
67
|
-
* The ID of the data table block. Defaults to `'list-table'`, which is the default blockId
|
|
68
|
-
* for the standard list pages. However, some other pages may use a different blockId,
|
|
69
|
-
* such as `'product-variants-table'` on the `'product-detail'` page.
|
|
70
|
-
*/
|
|
71
|
-
blockId?: string;
|
|
72
|
-
/**
|
|
73
|
-
* @description
|
|
74
|
-
* An array of additional bulk actions that will be available on the data table.
|
|
75
|
-
*/
|
|
76
|
-
bulkActions?: BulkAction[];
|
|
77
|
-
/**
|
|
78
|
-
* @description
|
|
79
|
-
* Allows you to extend the list document for the data table.
|
|
80
|
-
*/
|
|
81
|
-
extendListDocument?: string | DocumentNode | (() => DocumentNode | string);
|
|
82
|
-
/**
|
|
83
|
-
* @description
|
|
84
|
-
* Custom display components for specific columns in the data table.
|
|
85
|
-
*/
|
|
86
|
-
displayComponents?: DashboardDataTableDisplayComponent[];
|
|
87
|
-
}
|