@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,6 +1,6 @@
|
|
|
1
|
-
import { api } from '@/
|
|
2
|
-
import {
|
|
3
|
-
import { useUserSettings } from '@/
|
|
1
|
+
import { api } from '@/graphql/api.js';
|
|
2
|
+
import { ResultOf, graphql } from '@/graphql/graphql.js';
|
|
3
|
+
import { useUserSettings } from '@/hooks/use-user-settings.js';
|
|
4
4
|
import { useQuery, useQueryClient } from '@tanstack/react-query';
|
|
5
5
|
import * as React from 'react';
|
|
6
6
|
|
|
@@ -14,7 +14,7 @@ import * as React from 'react';
|
|
|
14
14
|
* @since 3.3.0
|
|
15
15
|
*/
|
|
16
16
|
export interface AuthContext {
|
|
17
|
-
status: '
|
|
17
|
+
status: 'authenticated' | 'verifying' | 'unauthenticated';
|
|
18
18
|
authenticationError?: string;
|
|
19
19
|
isAuthenticated: boolean;
|
|
20
20
|
login: (username: string, password: string, onSuccess?: () => void) => void;
|
|
@@ -70,10 +70,9 @@ const CurrentUserQuery = graphql(`
|
|
|
70
70
|
|
|
71
71
|
export const AuthContext = React.createContext<AuthContext | null>(null);
|
|
72
72
|
|
|
73
|
-
export function AuthProvider({ children }:
|
|
74
|
-
const [status, setStatus] = React.useState<AuthContext['status']>('
|
|
73
|
+
export function AuthProvider({ children }: { children: React.ReactNode }) {
|
|
74
|
+
const [status, setStatus] = React.useState<AuthContext['status']>('unauthenticated');
|
|
75
75
|
const [authenticationError, setAuthenticationError] = React.useState<string | undefined>();
|
|
76
|
-
const [isLoginLogoutInProgress, setIsLoginLogoutInProgress] = React.useState(false);
|
|
77
76
|
const { settings, setActiveChannelId } = useUserSettings();
|
|
78
77
|
const queryClient = useQueryClient();
|
|
79
78
|
|
|
@@ -85,10 +84,7 @@ export function AuthProvider({ children }: Readonly<{ children: React.ReactNode
|
|
|
85
84
|
refetch: refetchCurrentUser,
|
|
86
85
|
} = useQuery({
|
|
87
86
|
queryKey: ['currentUser'],
|
|
88
|
-
queryFn: () =>
|
|
89
|
-
return api.query(CurrentUserQuery);
|
|
90
|
-
},
|
|
91
|
-
retry: false, // Disable retries to avoid waiting for multiple attempts
|
|
87
|
+
queryFn: () => api.query(CurrentUserQuery),
|
|
92
88
|
});
|
|
93
89
|
|
|
94
90
|
// Set active channel if needed
|
|
@@ -101,7 +97,6 @@ export function AuthProvider({ children }: Readonly<{ children: React.ReactNode
|
|
|
101
97
|
// Auth actions
|
|
102
98
|
const login = React.useCallback(
|
|
103
99
|
(username: string, password: string, onLoginSuccess?: () => void) => {
|
|
104
|
-
setIsLoginLogoutInProgress(true);
|
|
105
100
|
setStatus('verifying');
|
|
106
101
|
api.mutate(LoginMutation)({ username, password })
|
|
107
102
|
.then(async data => {
|
|
@@ -111,18 +106,15 @@ export function AuthProvider({ children }: Readonly<{ children: React.ReactNode
|
|
|
111
106
|
// Invalidate all queries to ensure fresh data after login
|
|
112
107
|
await queryClient.invalidateQueries();
|
|
113
108
|
setStatus('authenticated');
|
|
114
|
-
setIsLoginLogoutInProgress(false);
|
|
115
109
|
onLoginSuccess?.();
|
|
116
110
|
} else {
|
|
117
111
|
setAuthenticationError(data?.login.message);
|
|
118
112
|
setStatus('unauthenticated');
|
|
119
|
-
setIsLoginLogoutInProgress(false);
|
|
120
113
|
}
|
|
121
114
|
})
|
|
122
115
|
.catch(error => {
|
|
123
116
|
setAuthenticationError(error.message);
|
|
124
117
|
setStatus('unauthenticated');
|
|
125
|
-
setIsLoginLogoutInProgress(false);
|
|
126
118
|
});
|
|
127
119
|
},
|
|
128
120
|
[refetchCurrentUser, queryClient],
|
|
@@ -130,7 +122,6 @@ export function AuthProvider({ children }: Readonly<{ children: React.ReactNode
|
|
|
130
122
|
|
|
131
123
|
const logout = React.useCallback(
|
|
132
124
|
async (onLogoutSuccess?: () => void) => {
|
|
133
|
-
setIsLoginLogoutInProgress(true);
|
|
134
125
|
setStatus('verifying');
|
|
135
126
|
api.mutate(LogOutMutation)({}).then(async data => {
|
|
136
127
|
if (data?.logout.success) {
|
|
@@ -140,7 +131,6 @@ export function AuthProvider({ children }: Readonly<{ children: React.ReactNode
|
|
|
140
131
|
localStorage.removeItem('vendure-selected-channel');
|
|
141
132
|
localStorage.removeItem('vendure-selected-channel-token');
|
|
142
133
|
setStatus('unauthenticated');
|
|
143
|
-
setIsLoginLogoutInProgress(false);
|
|
144
134
|
onLogoutSuccess?.();
|
|
145
135
|
}
|
|
146
136
|
});
|
|
@@ -151,28 +141,15 @@ export function AuthProvider({ children }: Readonly<{ children: React.ReactNode
|
|
|
151
141
|
// Determine isAuthenticated from currentUserData
|
|
152
142
|
const isAuthenticated = !!currentUserData?.me?.id;
|
|
153
143
|
|
|
154
|
-
//
|
|
144
|
+
// Set status based on query result (only if not in the middle of login/logout)
|
|
155
145
|
React.useEffect(() => {
|
|
156
|
-
|
|
157
|
-
if (
|
|
158
|
-
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
// If query is loading and we haven't started verifying yet, set to verifying
|
|
162
|
-
if (isLoading && status === 'initial') {
|
|
163
|
-
setStatus('verifying');
|
|
164
|
-
return;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
// If query has completed (not loading) and we're in verifying state, determine final status
|
|
168
|
-
if (!isLoading && status === 'verifying') {
|
|
169
|
-
if (currentUserError || !currentUserData?.me?.id) {
|
|
170
|
-
setStatus('unauthenticated');
|
|
171
|
-
} else {
|
|
172
|
-
setStatus('authenticated');
|
|
173
|
-
}
|
|
146
|
+
if (status === 'verifying') return;
|
|
147
|
+
if (currentUserError || !currentUserData?.me?.id) {
|
|
148
|
+
setStatus('unauthenticated');
|
|
149
|
+
} else {
|
|
150
|
+
setStatus('authenticated');
|
|
174
151
|
}
|
|
175
|
-
}, [
|
|
152
|
+
}, [currentUserData, currentUserError]);
|
|
176
153
|
|
|
177
154
|
return (
|
|
178
155
|
<AuthContext.Provider
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { api } from '@/
|
|
2
|
-
import { ResultOf, graphql } from '@/
|
|
3
|
-
import { useAuth } from '@/
|
|
1
|
+
import { api } from '@/graphql/api.js';
|
|
2
|
+
import { ResultOf, graphql } from '@/graphql/graphql.js';
|
|
3
|
+
import { useAuth } from '@/hooks/use-auth.js';
|
|
4
4
|
import { useQuery, useQueryClient } from '@tanstack/react-query';
|
|
5
5
|
import * as React from 'react';
|
|
6
6
|
|
|
@@ -65,7 +65,7 @@ export const ChannelContext = React.createContext<ChannelContext | undefined>(un
|
|
|
65
65
|
const SELECTED_CHANNEL_KEY = 'vendure-selected-channel';
|
|
66
66
|
const SELECTED_CHANNEL_TOKEN_KEY = 'vendure-selected-channel-token';
|
|
67
67
|
|
|
68
|
-
export function ChannelProvider({ children }:
|
|
68
|
+
export function ChannelProvider({ children }: { children: React.ReactNode }) {
|
|
69
69
|
const queryClient = useQueryClient();
|
|
70
70
|
const { channels: userChannels, isAuthenticated } = useAuth();
|
|
71
71
|
const [selectedChannelId, setSelectedChannelId] = React.useState<string | undefined>(() => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { api } from '@/
|
|
2
|
-
import { graphql } from '@/
|
|
3
|
-
import { useAuth } from '@/
|
|
1
|
+
import { api } from '@/graphql/api.js';
|
|
2
|
+
import { graphql } from '@/graphql/graphql.js';
|
|
3
|
+
import { useAuth } from '@/hooks/use-auth.js';
|
|
4
4
|
import { useQuery } from '@tanstack/react-query';
|
|
5
5
|
import { ResultOf } from 'gql.tada';
|
|
6
6
|
import React from 'react';
|
|
@@ -270,16 +270,14 @@ export const ServerConfigProvider = ({ children }: { children: React.ReactNode }
|
|
|
270
270
|
enabled: !!user?.id,
|
|
271
271
|
staleTime: 1000,
|
|
272
272
|
});
|
|
273
|
-
const value: ServerConfig | null = data?.globalSettings
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
}
|
|
282
|
-
: null;
|
|
273
|
+
const value: ServerConfig | null = data?.globalSettings ? {
|
|
274
|
+
availableLanguages: data?.globalSettings.availableLanguages ?? [],
|
|
275
|
+
moneyStrategyPrecision: data?.globalSettings.serverConfig.moneyStrategyPrecision ?? 2,
|
|
276
|
+
orderProcess: data?.globalSettings.serverConfig.orderProcess ?? [],
|
|
277
|
+
permittedAssetTypes: data?.globalSettings.serverConfig.permittedAssetTypes ?? [],
|
|
278
|
+
permissions: data?.globalSettings.serverConfig.permissions ?? [],
|
|
279
|
+
entityCustomFields: data?.globalSettings.serverConfig.entityCustomFields ?? [],
|
|
280
|
+
} : null;
|
|
283
281
|
|
|
284
282
|
return <ServerConfigContext.Provider value={value}>{children}</ServerConfigContext.Provider>;
|
|
285
283
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createContext, useEffect } from 'react';
|
|
1
|
+
import { createContext, useEffect, useState } from 'react';
|
|
2
2
|
import { useUserSettings } from '../hooks/use-user-settings.js';
|
|
3
3
|
|
|
4
4
|
export type Theme = 'dark' | 'light' | 'system';
|
|
@@ -21,7 +21,7 @@ const initialState: ThemeProviderState = {
|
|
|
21
21
|
|
|
22
22
|
export const ThemeProviderContext = createContext<ThemeProviderState>(initialState);
|
|
23
23
|
|
|
24
|
-
export function ThemeProvider({ children, defaultTheme = 'system', ...props }:
|
|
24
|
+
export function ThemeProvider({ children, defaultTheme = 'system', ...props }: ThemeProviderProps) {
|
|
25
25
|
const { settings, setTheme } = useUserSettings();
|
|
26
26
|
|
|
27
27
|
useEffect(() => {
|
|
@@ -51,3 +51,4 @@ export function ThemeProvider({ children, defaultTheme = 'system', ...props }: R
|
|
|
51
51
|
</ThemeProviderContext.Provider>
|
|
52
52
|
);
|
|
53
53
|
}
|
|
54
|
+
|
|
@@ -31,83 +31,9 @@ const defaultLogger: Logger = {
|
|
|
31
31
|
},
|
|
32
32
|
};
|
|
33
33
|
|
|
34
|
-
/**
|
|
35
|
-
* @description
|
|
36
|
-
* The PathAdapter interface allows customization of how paths are handled
|
|
37
|
-
* when compiling the Vendure config and its imports.
|
|
38
|
-
*
|
|
39
|
-
* This is particularly useful in complex project structures, such as monorepos,
|
|
40
|
-
* where the Vendure config file may not be in the root directory,
|
|
41
|
-
* or when you need to transform TypeScript path mappings.
|
|
42
|
-
*/
|
|
43
|
-
export interface PathAdapter {
|
|
44
|
-
/**
|
|
45
|
-
* @description
|
|
46
|
-
* A function to determine the path to the compiled Vendure config file. The default implementation
|
|
47
|
-
* simple joins the output directory with the config file name:
|
|
48
|
-
*
|
|
49
|
-
* ```ts
|
|
50
|
-
* return path.join(outputPath, configFileName)
|
|
51
|
-
* ```
|
|
52
|
-
*
|
|
53
|
-
* However, in some cases with more complex project structures, you may need to
|
|
54
|
-
* provide a custom implementation to ensure the compiled config file is
|
|
55
|
-
* correctly located.
|
|
56
|
-
*
|
|
57
|
-
* @example
|
|
58
|
-
* ```ts
|
|
59
|
-
* getCompiledConfigPath: ({ inputRootDir, outputPath, configFileName }) => {
|
|
60
|
-
* const projectName = inputRootDir.split('/libs/')[1].split('/')[0];
|
|
61
|
-
* const pathAfterProject = inputRootDir.split(`/libs/${projectName}`)[1];
|
|
62
|
-
* const compiledConfigFilePath = `${outputPath}/${projectName}${pathAfterProject}`;
|
|
63
|
-
* return path.join(compiledConfigFilePath, configFileName);
|
|
64
|
-
* },
|
|
65
|
-
* ```
|
|
66
|
-
*/
|
|
67
|
-
getCompiledConfigPath?: (params: {
|
|
68
|
-
inputRootDir: string;
|
|
69
|
-
outputPath: string;
|
|
70
|
-
configFileName: string;
|
|
71
|
-
}) => string;
|
|
72
|
-
/**
|
|
73
|
-
* If your project makes use of the TypeScript `paths` configuration, the compiler will
|
|
74
|
-
* attempt to use these paths when compiling the Vendure config and its imports.
|
|
75
|
-
*
|
|
76
|
-
* In certain cases, you may need to transform these paths before they are used. For instance,
|
|
77
|
-
* if your project is a monorepo and the paths are defined relative to the root of the monorepo,
|
|
78
|
-
* you may need to adjust them to be relative to the output directory where the compiled files are located.
|
|
79
|
-
*
|
|
80
|
-
* @example
|
|
81
|
-
* ```ts
|
|
82
|
-
* transformTsConfigPathMappings: ({ phase, patterns }) => {
|
|
83
|
-
* // "loading" phase is when the compiled Vendure code is being loaded by
|
|
84
|
-
* // the plugin, in order to introspect the configuration of your app.
|
|
85
|
-
* if (phase === 'loading') {
|
|
86
|
-
* return patterns.map((p) =>
|
|
87
|
-
* p.replace('libs/', '').replace(/.ts$/, '.js'),
|
|
88
|
-
* );
|
|
89
|
-
* }
|
|
90
|
-
* return patterns;
|
|
91
|
-
* },
|
|
92
|
-
* ```
|
|
93
|
-
* @param params
|
|
94
|
-
*/
|
|
95
|
-
transformTsConfigPathMappings?: (params: {
|
|
96
|
-
phase: 'compiling' | 'loading';
|
|
97
|
-
alias: string;
|
|
98
|
-
patterns: string[];
|
|
99
|
-
}) => string[];
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
const defaultPathAdapter: Required<PathAdapter> = {
|
|
103
|
-
getCompiledConfigPath: ({ outputPath, configFileName }) => path.join(outputPath, configFileName),
|
|
104
|
-
transformTsConfigPathMappings: ({ patterns }) => patterns,
|
|
105
|
-
};
|
|
106
|
-
|
|
107
34
|
export interface ConfigLoaderOptions {
|
|
108
35
|
vendureConfigPath: string;
|
|
109
36
|
tempDir: string;
|
|
110
|
-
pathAdapter?: PathAdapter;
|
|
111
37
|
vendureConfigExport?: string;
|
|
112
38
|
logger?: Logger;
|
|
113
39
|
reportCompilationErrors?: boolean;
|
|
@@ -136,11 +62,7 @@ export interface LoadVendureConfigResult {
|
|
|
136
62
|
* to handle the compiled JavaScript output.
|
|
137
63
|
*/
|
|
138
64
|
export async function loadVendureConfig(options: ConfigLoaderOptions): Promise<LoadVendureConfigResult> {
|
|
139
|
-
const { vendureConfigPath, vendureConfigExport, tempDir
|
|
140
|
-
const getCompiledConfigPath =
|
|
141
|
-
pathAdapter?.getCompiledConfigPath ?? defaultPathAdapter.getCompiledConfigPath;
|
|
142
|
-
const transformTsConfigPathMappings =
|
|
143
|
-
pathAdapter?.transformTsConfigPathMappings ?? defaultPathAdapter.transformTsConfigPathMappings;
|
|
65
|
+
const { vendureConfigPath, vendureConfigExport, tempDir } = options;
|
|
144
66
|
const logger = options.logger || defaultLogger;
|
|
145
67
|
const outputPath = tempDir;
|
|
146
68
|
const configFileName = path.basename(vendureConfigPath);
|
|
@@ -151,15 +73,11 @@ export async function loadVendureConfig(options: ConfigLoaderOptions): Promise<L
|
|
|
151
73
|
inputPath: vendureConfigPath,
|
|
152
74
|
outputDir: outputPath,
|
|
153
75
|
logger,
|
|
154
|
-
transformTsConfigPathMappings,
|
|
155
76
|
});
|
|
156
|
-
const compiledConfigFilePath = pathToFileURL(
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
configFileName,
|
|
161
|
-
}),
|
|
162
|
-
).href.replace(/.ts$/, '.js');
|
|
77
|
+
const compiledConfigFilePath = pathToFileURL(path.join(outputPath, configFileName)).href.replace(
|
|
78
|
+
/.ts$/,
|
|
79
|
+
'.js',
|
|
80
|
+
);
|
|
163
81
|
// create package.json with type commonjs and save it to the output dir
|
|
164
82
|
await fs.writeFile(path.join(outputPath, 'package.json'), JSON.stringify({ type: 'commonjs' }, null, 2));
|
|
165
83
|
|
|
@@ -180,12 +98,7 @@ export async function loadVendureConfig(options: ConfigLoaderOptions): Promise<L
|
|
|
180
98
|
}
|
|
181
99
|
|
|
182
100
|
// Register path aliases from tsconfig before importing
|
|
183
|
-
const tsConfigInfo = await findTsConfigPaths(
|
|
184
|
-
vendureConfigPath,
|
|
185
|
-
logger,
|
|
186
|
-
'loading',
|
|
187
|
-
transformTsConfigPathMappings,
|
|
188
|
-
);
|
|
101
|
+
const tsConfigInfo = await findTsConfigPaths(vendureConfigPath, logger);
|
|
189
102
|
if (tsConfigInfo) {
|
|
190
103
|
tsConfigPaths.register({
|
|
191
104
|
baseUrl: outputPath,
|
|
@@ -209,8 +122,6 @@ export async function loadVendureConfig(options: ConfigLoaderOptions): Promise<L
|
|
|
209
122
|
async function findTsConfigPaths(
|
|
210
123
|
configPath: string,
|
|
211
124
|
logger: Logger,
|
|
212
|
-
phase: 'compiling' | 'loading',
|
|
213
|
-
transformTsConfigPathMappings: Required<PathAdapter>['transformTsConfigPathMappings'],
|
|
214
125
|
): Promise<{ baseUrl: string; paths: Record<string, string[]> } | undefined> {
|
|
215
126
|
const configDir = path.dirname(configPath);
|
|
216
127
|
let currentDir = configDir;
|
|
@@ -236,15 +147,10 @@ async function findTsConfigPaths(
|
|
|
236
147
|
|
|
237
148
|
for (const [alias, patterns] of Object.entries(compilerOptions.paths)) {
|
|
238
149
|
// Store paths as defined in tsconfig, they will be relative to baseUrl
|
|
239
|
-
|
|
150
|
+
paths[alias] = (patterns as string[]).map(pattern =>
|
|
240
151
|
// Normalize slashes for consistency, keep relative
|
|
241
152
|
pattern.replace(/\\/g, '/'),
|
|
242
153
|
);
|
|
243
|
-
paths[alias] = transformTsConfigPathMappings({
|
|
244
|
-
phase,
|
|
245
|
-
alias,
|
|
246
|
-
patterns: normalizedPatterns,
|
|
247
|
-
});
|
|
248
154
|
}
|
|
249
155
|
logger.debug(
|
|
250
156
|
`Found tsconfig paths in ${tsConfigPath}: ${JSON.stringify(
|
|
@@ -278,7 +184,6 @@ type CompileFileOptions = {
|
|
|
278
184
|
inputRootDir: string;
|
|
279
185
|
inputPath: string;
|
|
280
186
|
outputDir: string;
|
|
281
|
-
transformTsConfigPathMappings: Required<PathAdapter>['transformTsConfigPathMappings'];
|
|
282
187
|
logger?: Logger;
|
|
283
188
|
compiledFiles?: Set<string>;
|
|
284
189
|
isRoot?: boolean;
|
|
@@ -290,7 +195,6 @@ export async function compileFile({
|
|
|
290
195
|
inputRootDir,
|
|
291
196
|
inputPath,
|
|
292
197
|
outputDir,
|
|
293
|
-
transformTsConfigPathMappings,
|
|
294
198
|
logger = defaultLogger,
|
|
295
199
|
compiledFiles = new Set<string>(),
|
|
296
200
|
isRoot = true,
|
|
@@ -316,29 +220,19 @@ export async function compileFile({
|
|
|
316
220
|
let tsConfigInfo: { baseUrl: string; paths: Record<string, string[]> } | undefined;
|
|
317
221
|
|
|
318
222
|
if (isRoot) {
|
|
319
|
-
tsConfigInfo = await findTsConfigPaths(
|
|
320
|
-
absoluteInputPath,
|
|
321
|
-
logger,
|
|
322
|
-
'compiling',
|
|
323
|
-
transformTsConfigPathMappings,
|
|
324
|
-
);
|
|
223
|
+
tsConfigInfo = await findTsConfigPaths(absoluteInputPath, logger);
|
|
325
224
|
if (tsConfigInfo) {
|
|
326
225
|
logger?.debug(`Using TypeScript configuration: ${JSON.stringify(tsConfigInfo, null, 2)}`);
|
|
327
226
|
}
|
|
328
227
|
}
|
|
329
228
|
|
|
330
229
|
async function collectImports(node: ts.Node) {
|
|
331
|
-
if (
|
|
332
|
-
(ts.isExportDeclaration(node) || ts.isImportDeclaration(node)) &&
|
|
333
|
-
node.moduleSpecifier &&
|
|
334
|
-
ts.isStringLiteral(node.moduleSpecifier)
|
|
335
|
-
) {
|
|
230
|
+
if (ts.isImportDeclaration(node) && ts.isStringLiteral(node.moduleSpecifier)) {
|
|
336
231
|
const importPath = node.moduleSpecifier.text;
|
|
337
232
|
|
|
338
233
|
// Handle relative imports
|
|
339
234
|
if (importPath.startsWith('.')) {
|
|
340
235
|
const resolvedPath = path.resolve(path.dirname(absoluteInputPath), importPath);
|
|
341
|
-
// TODO: does this handle index files correctly?
|
|
342
236
|
let resolvedTsPath = resolvedPath + '.ts';
|
|
343
237
|
// Also check for .tsx if .ts doesn't exist
|
|
344
238
|
if (!(await fs.pathExists(resolvedTsPath))) {
|
|
@@ -389,9 +283,7 @@ export async function compileFile({
|
|
|
389
283
|
const potentialPathBase = path.resolve(tsConfigInfo.baseUrl, patternPrefix);
|
|
390
284
|
const resolvedPath = path.join(potentialPathBase, remainingImportPath);
|
|
391
285
|
|
|
392
|
-
let resolvedTsPath = resolvedPath
|
|
393
|
-
? resolvedPath
|
|
394
|
-
: resolvedPath + '.ts';
|
|
286
|
+
let resolvedTsPath = resolvedPath + '.ts';
|
|
395
287
|
// Similar existence checks as relative paths
|
|
396
288
|
if (!(await fs.pathExists(resolvedTsPath))) {
|
|
397
289
|
const resolvedTsxPath = resolvedPath + '.tsx';
|
|
@@ -436,7 +328,6 @@ export async function compileFile({
|
|
|
436
328
|
ts.isModuleBlock(child) ||
|
|
437
329
|
ts.isModuleDeclaration(child) ||
|
|
438
330
|
ts.isImportDeclaration(child) ||
|
|
439
|
-
ts.isExportDeclaration(child) ||
|
|
440
331
|
child.kind === ts.SyntaxKind.SyntaxList
|
|
441
332
|
) {
|
|
442
333
|
await collectImports(child);
|
|
@@ -464,7 +355,6 @@ export async function compileFile({
|
|
|
464
355
|
inputPath: importPath,
|
|
465
356
|
outputDir,
|
|
466
357
|
logger,
|
|
467
|
-
transformTsConfigPathMappings,
|
|
468
358
|
compiledFiles,
|
|
469
359
|
isRoot: false,
|
|
470
360
|
pluginInfo,
|
|
@@ -24,7 +24,6 @@ export function configLoaderPlugin(options: ConfigLoaderOptions): Plugin {
|
|
|
24
24
|
try {
|
|
25
25
|
const startTime = Date.now();
|
|
26
26
|
result = await loadVendureConfig({
|
|
27
|
-
pathAdapter: options.pathAdapter,
|
|
28
27
|
tempDir: options.tempDir,
|
|
29
28
|
vendureConfigPath: options.vendureConfigPath,
|
|
30
29
|
vendureConfigExport: options.vendureConfigExport,
|
|
@@ -43,11 +42,7 @@ export function configLoaderPlugin(options: ConfigLoaderOptions): Plugin {
|
|
|
43
42
|
);
|
|
44
43
|
} catch (e: unknown) {
|
|
45
44
|
if (e instanceof Error) {
|
|
46
|
-
|
|
47
|
-
e.message,
|
|
48
|
-
`If you are using a monorepo, you may need to provide a custom pathAdapter to resolve the paths correctly.`,
|
|
49
|
-
].join('\n');
|
|
50
|
-
this.error(`Error loading Vendure config: ${message}`);
|
|
45
|
+
this.error(`Error loading Vendure config: ${e.message}`);
|
|
51
46
|
}
|
|
52
47
|
}
|
|
53
48
|
onConfigLoaded.forEach(fn => fn());
|
|
@@ -8,7 +8,7 @@ export function viteConfigPlugin({ packageRoot }: { packageRoot: string }): Plug
|
|
|
8
8
|
// Only set the vite `root` to the dashboard package when running the dev server.
|
|
9
9
|
// During a production build we still need to reference the dashboard source which
|
|
10
10
|
// lives in `node_modules`, but we don't want the build output to be emitted in there.
|
|
11
|
-
// Therefore
|
|
11
|
+
// Therefore we set `root` only for `serve` and, for `build`, we instead make sure that
|
|
12
12
|
// an `outDir` **outside** of `node_modules` is used (defaulting to the current working
|
|
13
13
|
// directory if the user did not provide one already).
|
|
14
14
|
config.root = packageRoot;
|
|
@@ -37,9 +37,7 @@ export function viteConfigPlugin({ packageRoot }: { packageRoot: string }): Plug
|
|
|
37
37
|
config.resolve = {
|
|
38
38
|
alias: {
|
|
39
39
|
...(config.resolve?.alias ?? {}),
|
|
40
|
-
|
|
41
|
-
'@/vdb': path.resolve(packageRoot, './src/lib'),
|
|
42
|
-
'@/graphql': path.resolve(packageRoot, './src/lib/graphql'),
|
|
40
|
+
'@': path.resolve(packageRoot, './src/lib'),
|
|
43
41
|
},
|
|
44
42
|
};
|
|
45
43
|
// This is required to prevent Vite from pre-bundling the
|
|
@@ -49,7 +47,11 @@ export function viteConfigPlugin({ packageRoot }: { packageRoot: string }): Plug
|
|
|
49
47
|
exclude: [
|
|
50
48
|
...(config.optimizeDeps?.exclude || []),
|
|
51
49
|
'@vendure/dashboard',
|
|
52
|
-
'@/
|
|
50
|
+
'@/providers',
|
|
51
|
+
'@/framework',
|
|
52
|
+
'@/lib',
|
|
53
|
+
'@/components',
|
|
54
|
+
'@/hooks',
|
|
53
55
|
'virtual:vendure-ui-config',
|
|
54
56
|
'virtual:admin-api-schema',
|
|
55
57
|
'virtual:dashboard-extensions',
|
|
@@ -61,7 +63,6 @@ export function viteConfigPlugin({ packageRoot }: { packageRoot: string }): Plug
|
|
|
61
63
|
...(config.optimizeDeps?.include || []),
|
|
62
64
|
'@/components > recharts',
|
|
63
65
|
'@/components > react-dropzone',
|
|
64
|
-
'@vendure/common/lib/generated-types',
|
|
65
66
|
],
|
|
66
67
|
};
|
|
67
68
|
return config;
|
|
@@ -12,7 +12,7 @@ const resolvedVirtualModuleId = `\0${virtualModuleId}`;
|
|
|
12
12
|
* generates an import statement for each one, wrapped up in a `runDashboardExtensions()`
|
|
13
13
|
* function which can then be imported and executed in the Dashboard app.
|
|
14
14
|
*/
|
|
15
|
-
export function dashboardMetadataPlugin(): Plugin {
|
|
15
|
+
export function dashboardMetadataPlugin(options: { rootDir: string }): Plugin {
|
|
16
16
|
let configLoaderApi: ConfigLoaderApi;
|
|
17
17
|
let loadVendureConfigResult: LoadVendureConfigResult;
|
|
18
18
|
return {
|
|
@@ -52,3 +52,11 @@ export function dashboardMetadataPlugin(): Plugin {
|
|
|
52
52
|
},
|
|
53
53
|
};
|
|
54
54
|
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Converts an import path to a normalized path relative to the rootDir.
|
|
58
|
+
*/
|
|
59
|
+
function normalizeImportPath(rootDir: string, importPath: string): string {
|
|
60
|
+
const relativePath = path.relative(rootDir, importPath).replace(/\\/g, '/');
|
|
61
|
+
return relativePath.replace(/\.tsx?$/, '.js');
|
|
62
|
+
}
|
|
@@ -4,16 +4,14 @@ import react from '@vitejs/plugin-react';
|
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import { PluginOption } from 'vite';
|
|
6
6
|
|
|
7
|
-
import { PathAdapter } from './utils/config-loader.js';
|
|
8
7
|
import { adminApiSchemaPlugin } from './vite-plugin-admin-api-schema.js';
|
|
9
8
|
import { configLoaderPlugin } from './vite-plugin-config-loader.js';
|
|
10
9
|
import { viteConfigPlugin } from './vite-plugin-config.js';
|
|
11
10
|
import { dashboardMetadataPlugin } from './vite-plugin-dashboard-metadata.js';
|
|
12
11
|
import { gqlTadaPlugin } from './vite-plugin-gql-tada.js';
|
|
13
|
-
import {
|
|
14
|
-
import { themeVariablesPlugin, ThemeVariablesPluginOptions } from './vite-plugin-theme.js';
|
|
12
|
+
import { ThemeVariablesPluginOptions, themeVariablesPlugin } from './vite-plugin-theme.js';
|
|
15
13
|
import { transformIndexHtmlPlugin } from './vite-plugin-transform-index.js';
|
|
16
|
-
import {
|
|
14
|
+
import { UiConfigPluginOptions, uiConfigPlugin } from './vite-plugin-ui-config.js';
|
|
17
15
|
|
|
18
16
|
/**
|
|
19
17
|
* @description
|
|
@@ -25,46 +23,6 @@ export type VitePluginVendureDashboardOptions = {
|
|
|
25
23
|
* The path to the Vendure server configuration file.
|
|
26
24
|
*/
|
|
27
25
|
vendureConfigPath: string | URL;
|
|
28
|
-
/**
|
|
29
|
-
* @description
|
|
30
|
-
* The {@link PathAdapter} allows you to customize the resolution of paths
|
|
31
|
-
* in the compiled Vendure source code which is used as part of the
|
|
32
|
-
* introspection step of building the dashboard.
|
|
33
|
-
*
|
|
34
|
-
* It enables support for more complex repository structures, such as
|
|
35
|
-
* monorepos, where the Vendure server configuration file may not
|
|
36
|
-
* be located in the root directory of the project.
|
|
37
|
-
*
|
|
38
|
-
* If you get compilation errors like "Error loading Vendure config: Cannot find module",
|
|
39
|
-
* you probably need to provide a custom `pathAdapter` to resolve the paths correctly.
|
|
40
|
-
*
|
|
41
|
-
* @example
|
|
42
|
-
* ```ts
|
|
43
|
-
* vendureDashboardPlugin({
|
|
44
|
-
* tempCompilationDir: join(__dirname, './__vendure-dashboard-temp'),
|
|
45
|
-
* pathAdapter: {
|
|
46
|
-
* getCompiledConfigPath: ({ inputRootDir, outputPath, configFileName }) => {
|
|
47
|
-
* const projectName = inputRootDir.split('/libs/')[1].split('/')[0];
|
|
48
|
-
* const pathAfterProject = inputRootDir.split(`/libs/${projectName}`)[1];
|
|
49
|
-
* const compiledConfigFilePath = `${outputPath}/${projectName}${pathAfterProject}`;
|
|
50
|
-
* return path.join(compiledConfigFilePath, configFileName);
|
|
51
|
-
* },
|
|
52
|
-
* transformTsConfigPathMappings: ({ phase, patterns }) => {
|
|
53
|
-
* // "loading" phase is when the compiled Vendure code is being loaded by
|
|
54
|
-
* // the plugin, in order to introspect the configuration of your app.
|
|
55
|
-
* if (phase === 'loading') {
|
|
56
|
-
* return patterns.map((p) =>
|
|
57
|
-
* p.replace('libs/', '').replace(/.ts$/, '.js'),
|
|
58
|
-
* );
|
|
59
|
-
* }
|
|
60
|
-
* return patterns;
|
|
61
|
-
* },
|
|
62
|
-
* },
|
|
63
|
-
* // ...
|
|
64
|
-
* }),
|
|
65
|
-
* ```
|
|
66
|
-
*/
|
|
67
|
-
pathAdapter?: PathAdapter;
|
|
68
26
|
/**
|
|
69
27
|
* @description
|
|
70
28
|
* The name of the exported variable from the Vendure server configuration file.
|
|
@@ -111,7 +69,7 @@ export function vendureDashboardPlugin(options: VitePluginVendureDashboardOption
|
|
|
111
69
|
: [
|
|
112
70
|
TanStackRouterVite({
|
|
113
71
|
autoCodeSplitting: true,
|
|
114
|
-
routeFileIgnorePattern: '.graphql.ts|components
|
|
72
|
+
routeFileIgnorePattern: '.graphql.ts|components',
|
|
115
73
|
routesDirectory: path.join(packageRoot, 'src/app/routes'),
|
|
116
74
|
generatedRouteTree: path.join(packageRoot, 'src/app/routeTree.gen.ts'),
|
|
117
75
|
}),
|
|
@@ -122,17 +80,15 @@ export function vendureDashboardPlugin(options: VitePluginVendureDashboardOption
|
|
|
122
80
|
// },
|
|
123
81
|
}),
|
|
124
82
|
themeVariablesPlugin({ theme: options.theme }),
|
|
125
|
-
dashboardTailwindSourcePlugin(),
|
|
126
83
|
tailwindcss(),
|
|
127
84
|
configLoaderPlugin({
|
|
128
85
|
vendureConfigPath: normalizedVendureConfigPath,
|
|
129
86
|
tempDir,
|
|
130
87
|
reportCompilationErrors: options.reportCompilationErrors,
|
|
131
|
-
pathAdapter: options.pathAdapter,
|
|
132
88
|
}),
|
|
133
89
|
viteConfigPlugin({ packageRoot }),
|
|
134
90
|
adminApiSchemaPlugin(),
|
|
135
|
-
dashboardMetadataPlugin(),
|
|
91
|
+
dashboardMetadataPlugin({ rootDir: tempDir }),
|
|
136
92
|
uiConfigPlugin({ adminUiConfig: options.adminUiConfig }),
|
|
137
93
|
...(options.gqlTadaOutputPath
|
|
138
94
|
? [gqlTadaPlugin({ gqlTadaOutputPath: options.gqlTadaOutputPath, tempDir, packageRoot })]
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './src/my.plugin';
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./src/my.plugin"), exports);
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.MyPlugin = void 0;
|
|
10
|
-
const core_1 = require("@vendure/core");
|
|
11
|
-
let MyPlugin = class MyPlugin {
|
|
12
|
-
};
|
|
13
|
-
exports.MyPlugin = MyPlugin;
|
|
14
|
-
exports.MyPlugin = MyPlugin = __decorate([
|
|
15
|
-
(0, core_1.VendurePlugin)({
|
|
16
|
-
imports: [core_1.PluginCommonModule],
|
|
17
|
-
providers: [],
|
|
18
|
-
dashboard: './dashboard/index.tsx',
|
|
19
|
-
})
|
|
20
|
-
], MyPlugin);
|