@vendure/dashboard 3.3.6-master-202507020234 → 3.3.6-master-202507021511
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/dist/plugin/vite-plugin-config.js +2 -6
- package/package.json +4 -4
- package/src/app/app-providers.tsx +6 -6
- package/src/app/common/delete-bulk-action.tsx +4 -4
- package/src/app/common/duplicate-bulk-action.tsx +5 -5
- package/src/app/main.tsx +9 -9
- package/src/app/routes/__root.tsx +1 -2
- package/src/app/routes/_authenticated/_administrators/administrators.graphql.ts +1 -1
- package/src/app/routes/_authenticated/_administrators/administrators.tsx +8 -8
- package/src/app/routes/_authenticated/_administrators/administrators_.$id.tsx +11 -11
- package/src/app/routes/_authenticated/_administrators/components/administrator-bulk-actions.tsx +1 -1
- package/src/app/routes/_authenticated/_administrators/components/role-permissions-display.tsx +15 -15
- package/src/app/routes/_authenticated/_assets/assets.graphql.ts +2 -2
- package/src/app/routes/_authenticated/_assets/assets.tsx +12 -8
- package/src/app/routes/_authenticated/_assets/assets_.$id.tsx +14 -14
- package/src/app/routes/_authenticated/_assets/components/asset-bulk-actions.tsx +5 -5
- package/src/app/routes/_authenticated/_channels/channels.graphql.ts +1 -1
- package/src/app/routes/_authenticated/_channels/channels.tsx +10 -10
- package/src/app/routes/_authenticated/_channels/channels_.$id.tsx +16 -16
- package/src/app/routes/_authenticated/_channels/components/channel-bulk-actions.tsx +1 -1
- package/src/app/routes/_authenticated/_collections/collections.graphql.ts +3 -3
- package/src/app/routes/_authenticated/_collections/collections.tsx +7 -7
- package/src/app/routes/_authenticated/_collections/collections_.$id.tsx +15 -15
- package/src/app/routes/_authenticated/_collections/components/collection-bulk-actions.tsx +5 -5
- package/src/app/routes/_authenticated/_collections/components/collection-contents-preview-table.tsx +7 -8
- package/src/app/routes/_authenticated/_collections/components/collection-contents-sheet.tsx +9 -5
- package/src/app/routes/_authenticated/_collections/components/collection-contents-table.tsx +9 -8
- package/src/app/routes/_authenticated/_collections/components/collection-filters-selector.tsx +6 -6
- package/src/app/routes/_authenticated/_countries/components/country-bulk-actions.tsx +1 -1
- package/src/app/routes/_authenticated/_countries/countries.graphql.ts +1 -1
- package/src/app/routes/_authenticated/_countries/countries.tsx +6 -6
- package/src/app/routes/_authenticated/_countries/countries_.$id.tsx +12 -12
- package/src/app/routes/_authenticated/_customer-groups/components/customer-group-bulk-actions.tsx +1 -1
- package/src/app/routes/_authenticated/_customer-groups/components/customer-group-members-sheet.tsx +12 -5
- package/src/app/routes/_authenticated/_customer-groups/components/customer-group-members-table.tsx +22 -17
- package/src/app/routes/_authenticated/_customer-groups/customer-groups.graphql.ts +1 -1
- package/src/app/routes/_authenticated/_customer-groups/customer-groups.tsx +6 -6
- package/src/app/routes/_authenticated/_customer-groups/customer-groups_.$id.tsx +10 -10
- package/src/app/routes/_authenticated/_customers/components/customer-address-card.tsx +19 -19
- package/src/app/routes/_authenticated/_customers/components/customer-address-form.tsx +9 -9
- package/src/app/routes/_authenticated/_customers/components/customer-bulk-actions.tsx +1 -1
- package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history-container.tsx +4 -4
- package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history.tsx +11 -7
- 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 +74 -72
- package/src/app/routes/_authenticated/_customers/components/customer-status-badge.tsx +3 -3
- package/src/app/routes/_authenticated/_customers/customers.graphql.ts +1 -1
- package/src/app/routes/_authenticated/_customers/customers.tsx +6 -6
- package/src/app/routes/_authenticated/_customers/customers_.$id.tsx +14 -14
- package/src/app/routes/_authenticated/_facets/components/edit-facet-value.tsx +8 -8
- package/src/app/routes/_authenticated/_facets/components/facet-bulk-actions.tsx +7 -7
- package/src/app/routes/_authenticated/_facets/components/facet-values-sheet.tsx +3 -3
- package/src/app/routes/_authenticated/_facets/components/facet-values-table.tsx +14 -10
- package/src/app/routes/_authenticated/_facets/facets.graphql.ts +1 -1
- package/src/app/routes/_authenticated/_facets/facets.tsx +7 -7
- package/src/app/routes/_authenticated/_facets/facets_.$id.tsx +12 -12
- package/src/app/routes/_authenticated/_global-settings/global-settings.graphql.ts +1 -1
- package/src/app/routes/_authenticated/_global-settings/global-settings.tsx +12 -12
- package/src/app/routes/_authenticated/_orders/components/customer-address-selector.tsx +10 -13
- package/src/app/routes/_authenticated/_orders/components/edit-order-table.tsx +92 -54
- package/src/app/routes/_authenticated/_orders/components/money-gross-net.tsx +10 -8
- package/src/app/routes/_authenticated/_orders/components/order-address.tsx +2 -3
- package/src/app/routes/_authenticated/_orders/components/order-history/order-history-container.tsx +66 -61
- package/src/app/routes/_authenticated/_orders/components/order-history/order-history.tsx +5 -5
- package/src/app/routes/_authenticated/_orders/components/order-history/use-order-history.ts +4 -4
- package/src/app/routes/_authenticated/_orders/components/order-line-custom-fields-form.tsx +10 -6
- package/src/app/routes/_authenticated/_orders/components/order-table-totals.tsx +38 -18
- package/src/app/routes/_authenticated/_orders/components/order-table.tsx +3 -3
- package/src/app/routes/_authenticated/_orders/components/order-tax-summary.tsx +37 -35
- package/src/app/routes/_authenticated/_orders/components/payment-details.tsx +3 -3
- package/src/app/routes/_authenticated/_orders/components/shipping-method-selector.tsx +42 -43
- package/src/app/routes/_authenticated/_orders/orders.graphql.ts +2 -2
- package/src/app/routes/_authenticated/_orders/orders.tsx +21 -20
- package/src/app/routes/_authenticated/_orders/orders_.$id.tsx +9 -9
- package/src/app/routes/_authenticated/_orders/orders_.draft.$id.tsx +188 -90
- package/src/app/routes/_authenticated/_payment-methods/components/payment-eligibility-checker-selector.tsx +10 -7
- package/src/app/routes/_authenticated/_payment-methods/components/payment-handler-selector.tsx +11 -11
- package/src/app/routes/_authenticated/_payment-methods/components/payment-method-bulk-actions.tsx +5 -5
- package/src/app/routes/_authenticated/_payment-methods/payment-methods.graphql.ts +2 -2
- package/src/app/routes/_authenticated/_payment-methods/payment-methods.tsx +7 -7
- package/src/app/routes/_authenticated/_payment-methods/payment-methods_.$id.tsx +13 -13
- package/src/app/routes/_authenticated/_product-variants/components/product-variant-bulk-actions.tsx +8 -8
- package/src/app/routes/_authenticated/_product-variants/components/variant-price-detail.tsx +7 -6
- package/src/app/routes/_authenticated/_product-variants/product-variants.graphql.ts +2 -2
- package/src/app/routes/_authenticated/_product-variants/product-variants.tsx +6 -6
- package/src/app/routes/_authenticated/_product-variants/product-variants_.$id.tsx +19 -19
- package/src/app/routes/_authenticated/_products/components/add-product-variant-dialog.tsx +10 -10
- package/src/app/routes/_authenticated/_products/components/assign-facet-values-dialog.tsx +7 -7
- package/src/app/routes/_authenticated/_products/components/create-product-options-dialog.tsx +57 -41
- 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 -13
- package/src/app/routes/_authenticated/_products/components/option-value-input.tsx +16 -14
- package/src/app/routes/_authenticated/_products/components/product-bulk-actions.tsx +8 -8
- package/src/app/routes/_authenticated/_products/components/product-option-select.tsx +22 -33
- package/src/app/routes/_authenticated/_products/components/product-variants-table.tsx +6 -6
- package/src/app/routes/_authenticated/_products/products.graphql.ts +2 -2
- package/src/app/routes/_authenticated/_products/products.tsx +6 -6
- package/src/app/routes/_authenticated/_products/products_.$id.tsx +16 -16
- 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 +13 -10
- package/src/app/routes/_authenticated/_promotions/components/promotion-bulk-actions.tsx +5 -5
- package/src/app/routes/_authenticated/_promotions/components/promotion-conditions-selector.tsx +13 -10
- package/src/app/routes/_authenticated/_promotions/promotions.graphql.ts +2 -2
- package/src/app/routes/_authenticated/_promotions/promotions.tsx +7 -7
- package/src/app/routes/_authenticated/_promotions/promotions_.$id.tsx +14 -14
- package/src/app/routes/_authenticated/_roles/components/expandable-permissions.tsx +4 -4
- package/src/app/routes/_authenticated/_roles/components/permissions-grid.tsx +20 -16
- package/src/app/routes/_authenticated/_roles/components/role-bulk-actions.tsx +1 -1
- package/src/app/routes/_authenticated/_roles/roles.graphql.ts +1 -1
- package/src/app/routes/_authenticated/_roles/roles.tsx +10 -10
- package/src/app/routes/_authenticated/_roles/roles_.$id.tsx +11 -11
- package/src/app/routes/_authenticated/_sellers/components/seller-bulk-actions.tsx +1 -1
- package/src/app/routes/_authenticated/_sellers/sellers.graphql.ts +1 -1
- package/src/app/routes/_authenticated/_sellers/sellers.tsx +7 -7
- package/src/app/routes/_authenticated/_sellers/sellers_.$id.tsx +10 -10
- package/src/app/routes/_authenticated/_shipping-methods/components/fulfillment-handler-selector.tsx +5 -5
- package/src/app/routes/_authenticated/_shipping-methods/components/shipping-calculator-selector.tsx +22 -20
- package/src/app/routes/_authenticated/_shipping-methods/components/shipping-eligibility-checker-selector.tsx +25 -21
- package/src/app/routes/_authenticated/_shipping-methods/components/shipping-method-bulk-actions.tsx +5 -5
- 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 -2
- package/src/app/routes/_authenticated/_shipping-methods/shipping-methods.tsx +6 -6
- package/src/app/routes/_authenticated/_shipping-methods/shipping-methods_.$id.tsx +12 -12
- package/src/app/routes/_authenticated/_stock-locations/components/stock-location-bulk-actions.tsx +5 -5
- package/src/app/routes/_authenticated/_stock-locations/stock-locations.graphql.ts +1 -1
- package/src/app/routes/_authenticated/_stock-locations/stock-locations.tsx +6 -6
- package/src/app/routes/_authenticated/_stock-locations/stock-locations_.$id.tsx +11 -11
- package/src/app/routes/_authenticated/_system/components/payload-dialog.tsx +3 -3
- 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 +10 -6
- package/src/app/routes/_authenticated/_system/scheduled-tasks.tsx +34 -28
- package/src/app/routes/_authenticated/_tax-categories/components/tax-category-bulk-actions.tsx +1 -1
- package/src/app/routes/_authenticated/_tax-categories/tax-categories.graphql.ts +1 -1
- package/src/app/routes/_authenticated/_tax-categories/tax-categories.tsx +7 -7
- package/src/app/routes/_authenticated/_tax-categories/tax-categories_.$id.tsx +11 -11
- package/src/app/routes/_authenticated/_tax-rates/components/tax-rate-bulk-actions.tsx +1 -1
- package/src/app/routes/_authenticated/_tax-rates/tax-rates.graphql.ts +1 -1
- package/src/app/routes/_authenticated/_tax-rates/tax-rates.tsx +8 -8
- package/src/app/routes/_authenticated/_tax-rates/tax-rates_.$id.tsx +14 -14
- package/src/app/routes/_authenticated/_zones/components/zone-bulk-actions.tsx +1 -1
- package/src/app/routes/_authenticated/_zones/components/zone-countries-sheet.tsx +3 -3
- package/src/app/routes/_authenticated/_zones/components/zone-countries-table.tsx +11 -7
- package/src/app/routes/_authenticated/_zones/zones.graphql.ts +1 -1
- package/src/app/routes/_authenticated/_zones/zones.tsx +6 -6
- package/src/app/routes/_authenticated/_zones/zones_.$id.tsx +10 -10
- 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/lib/components/data-display/date-time.tsx +1 -1
- package/src/lib/components/data-display/money.tsx +2 -3
- package/src/lib/components/data-input/affixed-input.tsx +2 -7
- package/src/lib/components/data-input/customer-group-input.tsx +2 -2
- package/src/lib/components/data-input/datetime-input.tsx +129 -146
- package/src/lib/components/data-input/facet-value-input.tsx +30 -22
- package/src/lib/components/data-input/money-input.tsx +3 -3
- package/src/lib/components/data-table/add-filter-menu.tsx +8 -17
- package/src/lib/components/data-table/data-table-bulk-action-item.tsx +3 -3
- package/src/lib/components/data-table/data-table-bulk-actions.tsx +7 -7
- package/src/lib/components/data-table/data-table-column-header.tsx +3 -21
- package/src/lib/components/data-table/data-table-faceted-filter.tsx +8 -8
- package/src/lib/components/data-table/data-table-filter-badge.tsx +1 -1
- package/src/lib/components/data-table/data-table-filter-dialog.tsx +3 -3
- package/src/lib/components/data-table/data-table-pagination.tsx +2 -2
- package/src/lib/components/data-table/data-table-view-options.tsx +25 -21
- package/src/lib/components/data-table/data-table.tsx +8 -8
- package/src/lib/components/data-table/filters/data-table-boolean-filter.tsx +7 -7
- package/src/lib/components/data-table/filters/data-table-datetime-filter.tsx +10 -22
- package/src/lib/components/data-table/filters/data-table-id-filter.tsx +14 -9
- package/src/lib/components/data-table/filters/data-table-number-filter.tsx +13 -16
- package/src/lib/components/data-table/filters/data-table-string-filter.tsx +25 -11
- package/src/lib/components/data-table/human-readable-operator.tsx +1 -1
- package/src/lib/components/data-table/refresh-button.tsx +1 -1
- 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 +16 -10
- package/src/lib/components/layout/generated-breadcrumbs.tsx +1 -1
- package/src/lib/components/layout/language-dialog.tsx +5 -11
- package/src/lib/components/layout/nav-main.tsx +3 -3
- 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-bulk-actions.tsx +11 -7
- package/src/lib/components/shared/asset/asset-focal-point-editor.tsx +29 -19
- package/src/lib/components/shared/asset/asset-gallery.tsx +12 -12
- package/src/lib/components/shared/asset/asset-picker-dialog.tsx +63 -66
- package/src/lib/components/shared/asset/asset-preview-dialog.tsx +3 -7
- package/src/lib/components/shared/asset/asset-preview-selector.tsx +3 -5
- package/src/lib/components/shared/asset/asset-preview.tsx +7 -15
- package/src/lib/components/shared/asset/asset-properties.tsx +6 -8
- package/src/lib/components/shared/asset/focal-point-control.tsx +5 -13
- package/src/lib/components/shared/assign-to-channel-bulk-action.tsx +4 -4
- package/src/lib/components/shared/assign-to-channel-dialog.tsx +8 -8
- package/src/lib/components/shared/channel-code-label.tsx +2 -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 +15 -16
- package/src/lib/components/shared/confirmation-dialog.tsx +2 -2
- package/src/lib/components/shared/country-selector.tsx +21 -18
- package/src/lib/components/shared/currency-selector.tsx +5 -5
- package/src/lib/components/shared/custom-fields-form.tsx +8 -8
- package/src/lib/components/shared/customer-address-form.tsx +3 -3
- package/src/lib/components/shared/customer-group-selector.tsx +6 -6
- package/src/lib/components/shared/customer-selector.tsx +24 -18
- package/src/lib/components/shared/entity-assets.tsx +33 -34
- package/src/lib/components/shared/error-page.tsx +5 -5
- package/src/lib/components/shared/facet-value-chip.tsx +12 -5
- package/src/lib/components/shared/facet-value-selector.tsx +64 -63
- package/src/lib/components/shared/history-timeline/history-entry.tsx +5 -5
- package/src/lib/components/shared/history-timeline/history-note-checkbox.tsx +2 -2
- package/src/lib/components/shared/history-timeline/history-note-editor.tsx +4 -4
- package/src/lib/components/shared/history-timeline/history-note-input.tsx +2 -2
- package/src/lib/components/shared/history-timeline/history-timeline.tsx +14 -7
- package/src/lib/components/shared/language-selector.tsx +5 -5
- package/src/lib/components/shared/multi-select.tsx +5 -5
- package/src/lib/components/shared/navigation-confirmation.tsx +24 -9
- package/src/lib/components/shared/option-value-input.tsx +16 -14
- package/src/lib/components/shared/paginated-list-data-table.tsx +12 -12
- package/src/lib/components/shared/permission-guard.tsx +4 -4
- package/src/lib/components/shared/product-variant-selector.tsx +31 -30
- package/src/lib/components/shared/remove-from-channel-bulk-action.tsx +4 -4
- package/src/lib/components/shared/role-code-label.tsx +9 -5
- package/src/lib/components/shared/role-selector.tsx +4 -4
- package/src/lib/components/shared/seller-selector.tsx +21 -17
- package/src/lib/components/shared/tax-category-selector.tsx +4 -4
- package/src/lib/components/shared/translatable-form-field.tsx +1 -1
- package/src/lib/components/shared/vendure-image.tsx +1 -1
- package/src/lib/components/shared/zone-selector.tsx +4 -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 +10 -3
- package/src/lib/components/ui/calendar.tsx +392 -459
- 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 +12 -6
- 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 +87 -108
- 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 +2 -2
- 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-item.tsx +3 -2
- package/src/lib/framework/component-registry/component-registry.tsx +31 -47
- package/src/lib/framework/dashboard-widget/base-widget.tsx +4 -4
- package/src/lib/framework/dashboard-widget/latest-orders-widget/index.tsx +7 -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 +6 -7
- 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 -6
- package/src/lib/framework/dashboard-widget/orders-summary/order-summary-widget.graphql.ts +1 -1
- package/src/lib/framework/data-table/data-table-extensions.ts +1 -1
- package/src/lib/framework/defaults.ts +1 -1
- package/src/lib/framework/document-extension/extend-detail-form-query.ts +2 -2
- package/src/lib/framework/document-extension/extend-document.spec.ts +1 -1
- package/src/lib/framework/document-extension/extend-document.ts +1 -1
- package/src/lib/framework/document-introspection/add-custom-fields.ts +2 -2
- package/src/lib/framework/document-introspection/hooks.ts +4 -1
- package/src/lib/framework/extension-api/define-dashboard-extension.ts +29 -95
- package/src/lib/framework/extension-api/display-component-extensions.tsx +69 -0
- package/src/lib/framework/extension-api/extension-api-types.ts +18 -160
- package/src/lib/framework/extension-api/input-component-extensions.tsx +69 -0
- package/src/lib/framework/extension-api/logic/alerts.ts +10 -0
- package/src/lib/framework/extension-api/logic/data-table.ts +60 -0
- package/src/lib/framework/extension-api/logic/detail-forms.ts +48 -0
- package/src/lib/framework/extension-api/logic/form-components.ts +13 -0
- package/src/lib/framework/extension-api/logic/index.ts +8 -0
- package/src/lib/framework/extension-api/logic/layout.ts +22 -0
- package/src/lib/framework/extension-api/logic/navigation.ts +37 -0
- package/src/lib/framework/extension-api/logic/widgets.ts +10 -0
- package/src/lib/framework/extension-api/types/alerts.ts +54 -0
- package/src/lib/framework/extension-api/types/data-table.ts +64 -0
- package/src/lib/framework/extension-api/types/detail-forms.ts +81 -0
- package/src/lib/framework/extension-api/types/form-components.ts +32 -0
- package/src/lib/framework/extension-api/types/index.ts +8 -0
- package/src/lib/framework/extension-api/types/layout.ts +78 -0
- package/src/lib/framework/extension-api/types/navigation.ts +19 -0
- package/src/lib/framework/extension-api/types/widgets.ts +94 -0
- package/src/lib/framework/form-engine/form-schema-tools.ts +1 -1
- package/src/lib/framework/layout-engine/location-wrapper.tsx +7 -7
- package/src/lib/framework/layout-engine/page-block-provider.tsx +1 -1
- package/src/lib/framework/layout-engine/page-layout.tsx +10 -10
- package/src/lib/framework/page/detail-page-route-loader.tsx +3 -3
- package/src/lib/framework/page/detail-page.tsx +57 -12
- package/src/lib/framework/page/list-page.tsx +10 -4
- package/src/lib/framework/page/use-detail-page.ts +1 -1
- package/src/lib/framework/registry/registry-types.ts +3 -0
- package/src/lib/graphql/graphql-env.d.ts +14 -31
- package/src/lib/hooks/use-auth.tsx +1 -1
- package/src/lib/hooks/use-channel.ts +1 -2
- package/src/lib/hooks/use-extended-detail-query.ts +2 -3
- package/src/lib/hooks/use-extended-list-query.ts +3 -4
- package/src/lib/hooks/use-grouped-permissions.ts +1 -2
- package/src/lib/hooks/use-page-block.tsx +1 -1
- package/src/lib/hooks/use-page.tsx +1 -1
- package/src/lib/hooks/use-server-config.ts +1 -2
- package/src/lib/hooks/use-theme.ts +1 -2
- package/src/lib/hooks/use-user-settings.tsx +1 -1
- package/src/lib/index.ts +28 -0
- package/src/lib/providers/auth.tsx +3 -3
- package/src/lib/providers/channel-provider.tsx +3 -3
- package/src/lib/providers/server-config.tsx +13 -11
- package/vite/vite-plugin-config.ts +3 -6
|
@@ -1,70 +1,54 @@
|
|
|
1
|
-
import { BooleanDisplayBadge, BooleanDisplayCheckbox } from '@/components/data-display/boolean.js';
|
|
2
|
-
import { DateTime } from '@/components/data-display/date-time.js';
|
|
3
|
-
import { Money } from '@/components/data-display/money.js';
|
|
4
|
-
import { DateTimeInput } from '@/components/data-input/datetime-input.js';
|
|
5
|
-
import { FacetValueInput } from '@/components/data-input/facet-value-input.js';
|
|
6
|
-
import { MoneyInput } from '@/components/data-input/money-input.js';
|
|
7
|
-
import { VendureImage } from '@/components/shared/vendure-image.js';
|
|
8
|
-
import { Checkbox } from '@/components/ui/checkbox.js';
|
|
9
|
-
import { Input } from '@/components/ui/input.js';
|
|
10
1
|
import * as React from 'react';
|
|
2
|
+
import { addDisplayComponent, getDisplayComponent } from '../extension-api/display-component-extensions.js';
|
|
3
|
+
import { addInputComponent, getInputComponent } from '../extension-api/input-component-extensions.js';
|
|
11
4
|
|
|
12
5
|
export interface ComponentRegistryEntry<Props extends Record<string, any>> {
|
|
13
6
|
component: React.ComponentType<Props>;
|
|
14
7
|
}
|
|
15
8
|
|
|
16
9
|
// Basic component types
|
|
17
|
-
export type DataDisplayComponent = React.ComponentType<{ value: any; [key: string]: any }>;
|
|
18
|
-
export type DataInputComponent = React.ComponentType<{ value: any; onChange: (value: any) => void; [key: string]: any }>;
|
|
19
10
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
dataInput: Record<string, DataInputComponent>;
|
|
11
|
+
export interface DataDisplayComponentProps {
|
|
12
|
+
value: any;
|
|
13
|
+
[key: string]: any;
|
|
24
14
|
}
|
|
25
15
|
|
|
26
|
-
export
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
dataInput: {
|
|
35
|
-
'vendure:moneyInput': MoneyInput,
|
|
36
|
-
'vendure:textInput': (props) => <Input {...props} onChange={e => props.onChange(e.target.value)} />,
|
|
37
|
-
'vendure:numberInput': (props) => <Input {...props} onChange={e => props.onChange(e.target.value)} type="number" />,
|
|
38
|
-
'vendure:dateTimeInput': DateTimeInput,
|
|
39
|
-
'vendure:checkboxInput': (props) => <Checkbox {...props} checked={props.value === 'true' || props.value === true} onCheckedChange={value => props.onChange(value)} />,
|
|
40
|
-
'vendure:facetValueInput': FacetValueInput,
|
|
41
|
-
}
|
|
42
|
-
};
|
|
16
|
+
export interface DataInputComponentProps {
|
|
17
|
+
value: any;
|
|
18
|
+
onChange: (value: any) => void;
|
|
19
|
+
[key: string]: any;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export type DataDisplayComponent = React.ComponentType<DataDisplayComponentProps>;
|
|
23
|
+
export type DataInputComponent = React.ComponentType<DataInputComponentProps>;
|
|
43
24
|
|
|
44
|
-
//
|
|
25
|
+
// Component registry hook that uses the global registry
|
|
45
26
|
export function useComponentRegistry() {
|
|
46
27
|
return {
|
|
47
28
|
getDisplayComponent: (id: string): DataDisplayComponent | undefined => {
|
|
48
|
-
|
|
49
|
-
return COMPONENT_REGISTRY.dataDisplay[id];
|
|
29
|
+
return getDisplayComponent(id);
|
|
50
30
|
},
|
|
51
31
|
getInputComponent: (id: string): DataInputComponent | undefined => {
|
|
52
|
-
|
|
53
|
-
return COMPONENT_REGISTRY.dataInput[id];
|
|
32
|
+
return getInputComponent(id);
|
|
54
33
|
},
|
|
55
34
|
};
|
|
56
35
|
}
|
|
57
36
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
37
|
+
// Legacy registration functions - these now delegate to the global registry
|
|
38
|
+
export function registerInputComponent(
|
|
39
|
+
pageId: string,
|
|
40
|
+
blockId: string,
|
|
41
|
+
field: string,
|
|
42
|
+
component: DataInputComponent,
|
|
43
|
+
) {
|
|
44
|
+
addInputComponent({ pageId, blockId, field, component });
|
|
63
45
|
}
|
|
64
46
|
|
|
65
|
-
export function registerDisplayComponent(
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
47
|
+
export function registerDisplayComponent(
|
|
48
|
+
pageId: string,
|
|
49
|
+
blockId: string,
|
|
50
|
+
field: string,
|
|
51
|
+
component: DataDisplayComponent,
|
|
52
|
+
) {
|
|
53
|
+
addDisplayComponent({ pageId, blockId, field, component });
|
|
70
54
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { PropsWithChildren, useRef, useEffect, useState, createContext, useContext } from 'react';
|
|
1
|
+
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/vdb/components/ui/card.js';
|
|
2
|
+
import { Trans } from '@/vdb/lib/trans.js';
|
|
3
|
+
import { cn } from '@/vdb/lib/utils.js';
|
|
5
4
|
import type React from 'react';
|
|
5
|
+
import { createContext, PropsWithChildren, useContext, useEffect, useRef, useState } from 'react';
|
|
6
6
|
|
|
7
7
|
type WidgetDimensions = {
|
|
8
8
|
width: number;
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { DashboardBaseWidget } from '../base-widget.js';
|
|
4
|
-
import { PaginatedListDataTable, addCustomFields, useLocalFormat } from '@/index.js';
|
|
5
|
-
import { ColumnFiltersState } from '@tanstack/react-table';
|
|
6
|
-
import { useState } from 'react';
|
|
7
|
-
import { SortingState } from '@tanstack/react-table';
|
|
1
|
+
import { Button } from '@/vdb/components/ui/button.js';
|
|
2
|
+
import { PaginatedListDataTable, useLocalFormat } from '@/vdb/index.js';
|
|
8
3
|
import { Link } from '@tanstack/react-router';
|
|
4
|
+
import { ColumnFiltersState, SortingState } from '@tanstack/react-table';
|
|
9
5
|
import { formatRelative } from 'date-fns';
|
|
10
|
-
import {
|
|
6
|
+
import { useState } from 'react';
|
|
7
|
+
import { DashboardBaseWidget } from '../base-widget.js';
|
|
8
|
+
import { latestOrdersQuery } from './latest-orders-widget.graphql.js';
|
|
9
|
+
|
|
11
10
|
export const WIDGET_ID = 'latest-orders-widget';
|
|
12
11
|
|
|
13
12
|
export function LatestOrdersWidget() {
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Tabs, TabsList, TabsTrigger } from '@/vdb/components/ui/tabs.js';
|
|
2
|
+
import { api } from '@/vdb/graphql/api.js';
|
|
3
|
+
import { useChannel } from '@/vdb/hooks/use-channel.js';
|
|
4
|
+
import { useLocalFormat } from '@/vdb/hooks/use-local-format.js';
|
|
2
5
|
import { useQuery } from '@tanstack/react-query';
|
|
3
6
|
import { useMemo, useState } from 'react';
|
|
4
|
-
import {
|
|
5
|
-
import { DashboardBaseWidget, useWidgetDimensions } from '../base-widget.js';
|
|
6
|
-
import { orderChartDataQuery } from './metrics-widget.graphql.js';
|
|
7
|
+
import { DashboardBaseWidget } from '../base-widget.js';
|
|
7
8
|
import { MetricsChart } from './chart.js';
|
|
8
|
-
import {
|
|
9
|
-
import { useChannel } from '@/hooks/use-channel.js';
|
|
10
|
-
import { Tabs, TabsList, TabsTrigger } from '@/components/ui/tabs.js';
|
|
9
|
+
import { orderChartDataQuery } from './metrics-widget.graphql.js';
|
|
11
10
|
|
|
12
11
|
enum DATA_TYPES {
|
|
13
12
|
OrderCount = 'OrderCount',
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
+
import { AnimatedCurrency, AnimatedNumber } from '@/vdb/components/shared/animated-number.js';
|
|
2
|
+
import { Tabs, TabsList, TabsTrigger } from '@/vdb/components/ui/tabs.js';
|
|
3
|
+
import { api } from '@/vdb/graphql/api.js';
|
|
4
|
+
import { useChannel, useLocalFormat } from '@/vdb/index.js';
|
|
1
5
|
import { useQuery } from '@tanstack/react-query';
|
|
6
|
+
import { endOfDay, endOfMonth, startOfDay, startOfMonth, subDays, subMonths } from 'date-fns';
|
|
7
|
+
import { useMemo, useState } from 'react';
|
|
2
8
|
import { DashboardBaseWidget } from '../base-widget.js';
|
|
3
9
|
import { orderSummaryQuery } from './order-summary-widget.graphql.js';
|
|
4
|
-
import { api } from '@/graphql/api.js';
|
|
5
|
-
import { useMemo, useState } from 'react';
|
|
6
|
-
import { Tabs, TabsList, TabsTrigger } from '@/components/ui/tabs.js';
|
|
7
|
-
import { useChannel, useLocalFormat } from '@/index.js';
|
|
8
|
-
import { startOfDay, endOfDay, subDays, subMonths, startOfMonth, endOfMonth } from 'date-fns';
|
|
9
|
-
import { AnimatedCurrency, AnimatedNumber } from '@/components/shared/animated-number.js';
|
|
10
10
|
|
|
11
11
|
const WIDGET_ID = 'orders-summary-widget';
|
|
12
12
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { extendDocument } from '@/framework/document-extension/extend-document.js';
|
|
2
|
-
import { getDetailQueryDocuments } from '@/framework/form-engine/custom-form-component-extensions.js';
|
|
1
|
+
import { extendDocument } from '@/vdb/framework/document-extension/extend-document.js';
|
|
2
|
+
import { getDetailQueryDocuments } from '@/vdb/framework/form-engine/custom-form-component-extensions.js';
|
|
3
3
|
import { DocumentNode } from 'graphql';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { Variables } from '@/graphql/api.js';
|
|
1
|
+
import { Variables } from '@/vdb/graphql/api.js';
|
|
2
2
|
import {
|
|
3
3
|
getServerConfigDocument,
|
|
4
4
|
relationCustomFieldFragment,
|
|
5
5
|
structCustomFieldFragment,
|
|
6
|
-
} from '@/providers/server-config.js';
|
|
6
|
+
} from '@/vdb/providers/server-config.js';
|
|
7
7
|
import type { TypedDocumentNode } from '@graphql-typed-document-node/core';
|
|
8
8
|
import { CustomFieldConfig } from '@vendure/common/lib/generated-types';
|
|
9
9
|
import { ResultOf } from 'gql.tada';
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
FieldInfo,
|
|
3
|
+
getListQueryFields,
|
|
4
|
+
} from '@/vdb/framework/document-introspection/get-document-structure.js';
|
|
2
5
|
import { DocumentNode } from 'graphql';
|
|
3
6
|
import { useMemo } from 'react';
|
|
4
7
|
|
|
@@ -1,20 +1,15 @@
|
|
|
1
|
-
import { addBulkAction, addListQueryDocument } from '@/framework/data-table/data-table-extensions.js';
|
|
2
|
-
import { parse } from 'graphql';
|
|
3
|
-
|
|
4
|
-
import { registerDashboardWidget } from '../dashboard-widget/widget-extensions.js';
|
|
5
|
-
import {
|
|
6
|
-
addCustomFormComponent,
|
|
7
|
-
addDetailQueryDocument,
|
|
8
|
-
} from '../form-engine/custom-form-component-extensions.js';
|
|
9
|
-
import {
|
|
10
|
-
registerDashboardActionBarItem,
|
|
11
|
-
registerDashboardPageBlock,
|
|
12
|
-
} from '../layout-engine/layout-extensions.js';
|
|
13
|
-
import { addNavMenuItem, addNavMenuSection, NavMenuItem } from '../nav-menu/nav-menu-extensions.js';
|
|
14
|
-
import { registerRoute } from '../page/page-api.js';
|
|
15
1
|
import { globalRegistry } from '../registry/global-registry.js';
|
|
16
2
|
|
|
17
3
|
import { DashboardExtension } from './extension-api-types.js';
|
|
4
|
+
import {
|
|
5
|
+
registerAlertExtensions,
|
|
6
|
+
registerDataTableExtensions,
|
|
7
|
+
registerDetailFormExtensions,
|
|
8
|
+
registerFormComponentExtensions,
|
|
9
|
+
registerLayoutExtensions,
|
|
10
|
+
registerNavigationExtensions,
|
|
11
|
+
registerWidgetExtensions,
|
|
12
|
+
} from './logic/index.js';
|
|
18
13
|
|
|
19
14
|
globalRegistry.register('extensionSourceChangeCallbacks', new Set<() => void>());
|
|
20
15
|
globalRegistry.register('registerDashboardExtensionCallbacks', new Set<() => void>());
|
|
@@ -41,89 +36,28 @@ export function executeDashboardExtensionCallbacks() {
|
|
|
41
36
|
*/
|
|
42
37
|
export function defineDashboardExtension(extension: DashboardExtension) {
|
|
43
38
|
globalRegistry.get('registerDashboardExtensionCallbacks').add(() => {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
addNavMenuSection({
|
|
47
|
-
...section,
|
|
48
|
-
placement: 'top',
|
|
49
|
-
order: section.order ?? 999,
|
|
50
|
-
items: [],
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
if (extension.routes) {
|
|
55
|
-
for (const route of extension.routes) {
|
|
56
|
-
if (route.navMenuItem) {
|
|
57
|
-
// Add the nav menu item
|
|
58
|
-
const item: NavMenuItem = {
|
|
59
|
-
url: route.navMenuItem.url ?? route.path,
|
|
60
|
-
id: route.navMenuItem.id ?? route.path,
|
|
61
|
-
title: route.navMenuItem.title ?? route.path,
|
|
62
|
-
};
|
|
63
|
-
addNavMenuItem(item, route.navMenuItem.sectionId);
|
|
64
|
-
}
|
|
65
|
-
if (route.path) {
|
|
66
|
-
// Configure a list page
|
|
67
|
-
registerRoute(route);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
if (extension.actionBarItems) {
|
|
72
|
-
for (const item of extension.actionBarItems) {
|
|
73
|
-
registerDashboardActionBarItem(item);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
if (extension.pageBlocks) {
|
|
77
|
-
for (const block of extension.pageBlocks) {
|
|
78
|
-
registerDashboardPageBlock(block);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
if (extension.widgets) {
|
|
82
|
-
for (const widget of extension.widgets) {
|
|
83
|
-
registerDashboardWidget(widget);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
if (extension.customFormComponents) {
|
|
87
|
-
for (const component of extension.customFormComponents) {
|
|
88
|
-
addCustomFormComponent(component);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
if (extension.dataTables) {
|
|
92
|
-
for (const dataTable of extension.dataTables) {
|
|
93
|
-
if (dataTable.bulkActions?.length) {
|
|
94
|
-
for (const action of dataTable.bulkActions) {
|
|
95
|
-
addBulkAction(dataTable.pageId, dataTable.blockId, action);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
if (dataTable.extendListDocument) {
|
|
99
|
-
const document =
|
|
100
|
-
typeof dataTable.extendListDocument === 'function'
|
|
101
|
-
? dataTable.extendListDocument()
|
|
102
|
-
: dataTable.extendListDocument;
|
|
39
|
+
// Register navigation extensions (nav sections and routes)
|
|
40
|
+
registerNavigationExtensions(extension.navSections, extension.routes);
|
|
103
41
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
dataTable.blockId,
|
|
107
|
-
typeof document === 'string' ? parse(document) : document,
|
|
108
|
-
);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
if (extension.detailForms) {
|
|
113
|
-
for (const detailForm of extension.detailForms) {
|
|
114
|
-
if (detailForm.extendDetailDocument) {
|
|
115
|
-
const document =
|
|
116
|
-
typeof detailForm.extendDetailDocument === 'function'
|
|
117
|
-
? detailForm.extendDetailDocument()
|
|
118
|
-
: detailForm.extendDetailDocument;
|
|
42
|
+
// Register layout extensions (action bar items and page blocks)
|
|
43
|
+
registerLayoutExtensions(extension.actionBarItems, extension.pageBlocks);
|
|
119
44
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
45
|
+
// Register widget extensions
|
|
46
|
+
registerWidgetExtensions(extension.widgets);
|
|
47
|
+
|
|
48
|
+
// Register form component extensions (custom form components, input components, and display components)
|
|
49
|
+
registerFormComponentExtensions(extension.customFormComponents);
|
|
50
|
+
|
|
51
|
+
// Register data table extensions
|
|
52
|
+
registerDataTableExtensions(extension.dataTables);
|
|
53
|
+
|
|
54
|
+
// Register detail form extensions
|
|
55
|
+
registerDetailFormExtensions(extension.detailForms);
|
|
56
|
+
|
|
57
|
+
// Register alert extensions
|
|
58
|
+
registerAlertExtensions(extension.alerts);
|
|
59
|
+
|
|
60
|
+
// Execute extension source change callbacks
|
|
127
61
|
const callbacks = globalRegistry.get('extensionSourceChangeCallbacks');
|
|
128
62
|
if (callbacks.size) {
|
|
129
63
|
for (const callback of callbacks) {
|
|
@@ -0,0 +1,69 @@
|
|
|
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
|
+
}
|