@vendure-platform/create 0.4.0 → 0.5.1
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/CHANGELOG.md +8 -0
- package/README.md +39 -39
- package/dist/add-to-existing.js +1 -1
- package/dist/assets/demo-data/initial-data.json +663 -663
- package/dist/assets/storefront/components.json +20 -20
- package/dist/assets/storefront/eslint.config.mjs +10 -10
- package/dist/assets/storefront/graphql.config.yml +1 -1
- package/dist/assets/storefront/messages/de.json +2 -0
- package/dist/assets/storefront/messages/en.json +2 -0
- package/dist/assets/storefront/next.config.ts +5 -4
- package/dist/assets/storefront/package.json +1 -1
- package/dist/assets/storefront/postcss.config.mjs +1 -1
- package/dist/assets/storefront/src/app/[locale]/(catalog)/catalog/page.tsx +17 -21
- package/dist/assets/storefront/src/app/[locale]/(catalog)/collection/[slug]/page.tsx +64 -42
- package/dist/assets/storefront/src/app/[locale]/(catalog)/layout.tsx +1 -5
- package/dist/assets/storefront/src/app/[locale]/(catalog)/product/[slug]/actions.ts +69 -65
- package/dist/assets/storefront/src/app/[locale]/(catalog)/product/[slug]/page.tsx +68 -37
- package/dist/assets/storefront/src/app/[locale]/(catalog)/search/page.tsx +24 -27
- package/dist/assets/storefront/src/app/[locale]/(catalog)/search/search-results.tsx +11 -9
- package/dist/assets/storefront/src/app/[locale]/(catalog)/search/search-term.tsx +4 -4
- package/dist/assets/storefront/src/app/[locale]/(scenario)/[...path]/page.tsx +1 -1
- package/dist/assets/storefront/src/app/[locale]/accept-invitation/[token]/accept-invitation-client.tsx +8 -13
- package/dist/assets/storefront/src/app/[locale]/accept-invitation/[token]/actions.ts +11 -14
- package/dist/assets/storefront/src/app/[locale]/accept-invitation/[token]/page.tsx +30 -33
- package/dist/assets/storefront/src/app/[locale]/accept-invitation/[token]/sign-out-and-retry.tsx +6 -6
- package/dist/assets/storefront/src/app/[locale]/account/addresses/actions.ts +30 -45
- package/dist/assets/storefront/src/app/[locale]/account/addresses/address-form.tsx +166 -159
- package/dist/assets/storefront/src/app/[locale]/account/addresses/addresses-client.tsx +35 -26
- package/dist/assets/storefront/src/app/[locale]/account/addresses/loading.tsx +1 -3
- package/dist/assets/storefront/src/app/[locale]/account/addresses/page.tsx +16 -18
- package/dist/assets/storefront/src/app/[locale]/account/approvals/actions.ts +5 -8
- package/dist/assets/storefront/src/app/[locale]/account/approvals/page.tsx +77 -69
- package/dist/assets/storefront/src/app/[locale]/account/company/actions.ts +10 -11
- package/dist/assets/storefront/src/app/[locale]/account/company/addresses/actions.ts +6 -15
- package/dist/assets/storefront/src/app/[locale]/account/company/addresses/address-form.tsx +57 -49
- package/dist/assets/storefront/src/app/[locale]/account/company/addresses/addresses-client.tsx +23 -25
- package/dist/assets/storefront/src/app/[locale]/account/company/addresses/page.tsx +30 -30
- package/dist/assets/storefront/src/app/[locale]/account/company/business-units/actions.ts +20 -29
- package/dist/assets/storefront/src/app/[locale]/account/company/business-units/business-unit-form.tsx +32 -37
- package/dist/assets/storefront/src/app/[locale]/account/company/business-units/business-units-client.tsx +32 -25
- package/dist/assets/storefront/src/app/[locale]/account/company/business-units/page.tsx +24 -24
- package/dist/assets/storefront/src/app/[locale]/account/company/business-units/types.ts +7 -4
- package/dist/assets/storefront/src/app/[locale]/account/company/edit-company-form.tsx +11 -21
- package/dist/assets/storefront/src/app/[locale]/account/company/page.tsx +23 -28
- package/dist/assets/storefront/src/app/[locale]/account/company/payment-methods/page.tsx +24 -24
- package/dist/assets/storefront/src/app/[locale]/account/company/payment-methods/payment-methods-client.tsx +5 -7
- package/dist/assets/storefront/src/app/[locale]/account/company/roles/page.tsx +22 -25
- package/dist/assets/storefront/src/app/[locale]/account/company/roles/roles-client.tsx +11 -26
- package/dist/assets/storefront/src/app/[locale]/account/company/tax-ids/actions.ts +6 -10
- package/dist/assets/storefront/src/app/[locale]/account/company/tax-ids/page.tsx +18 -16
- package/dist/assets/storefront/src/app/[locale]/account/company/tax-ids/tax-ids-client.tsx +74 -67
- package/dist/assets/storefront/src/app/[locale]/account/company/users/actions.ts +16 -25
- package/dist/assets/storefront/src/app/[locale]/account/company/users/edit-user-form.tsx +27 -25
- package/dist/assets/storefront/src/app/[locale]/account/company/users/invite-user-form.tsx +27 -19
- package/dist/assets/storefront/src/app/[locale]/account/company/users/page.tsx +32 -29
- package/dist/assets/storefront/src/app/[locale]/account/company/users/users-client.tsx +35 -38
- package/dist/assets/storefront/src/app/[locale]/account/error.tsx +1 -3
- package/dist/assets/storefront/src/app/[locale]/account/layout.tsx +16 -22
- package/dist/assets/storefront/src/app/[locale]/account/orders/[code]/page.tsx +151 -103
- package/dist/assets/storefront/src/app/[locale]/account/orders/[code]/reorder-actions.ts +6 -7
- package/dist/assets/storefront/src/app/[locale]/account/orders/[code]/reorder-dialog.tsx +22 -48
- package/dist/assets/storefront/src/app/[locale]/account/orders/loading.tsx +8 -8
- package/dist/assets/storefront/src/app/[locale]/account/orders/page.tsx +101 -61
- package/dist/assets/storefront/src/app/[locale]/account/profile/actions.ts +32 -23
- package/dist/assets/storefront/src/app/[locale]/account/profile/change-password-form.tsx +6 -16
- package/dist/assets/storefront/src/app/[locale]/account/profile/edit-email-form.tsx +7 -17
- package/dist/assets/storefront/src/app/[locale]/account/profile/edit-profile-form.tsx +6 -16
- package/dist/assets/storefront/src/app/[locale]/account/profile/loading.tsx +12 -18
- package/dist/assets/storefront/src/app/[locale]/account/profile/page.tsx +15 -15
- package/dist/assets/storefront/src/app/[locale]/account/quick-order/file-upload-tab.tsx +2 -6
- package/dist/assets/storefront/src/app/[locale]/account/quick-order/manual-entry-tab.tsx +18 -15
- package/dist/assets/storefront/src/app/[locale]/account/quick-order/page.tsx +3 -6
- package/dist/assets/storefront/src/app/[locale]/account/quick-order/preview-table.tsx +10 -2
- package/dist/assets/storefront/src/app/[locale]/account/quick-order/save-to-list-dialog.tsx +24 -26
- package/dist/assets/storefront/src/app/[locale]/account/quick-order/sku-autocomplete.tsx +19 -10
- package/dist/assets/storefront/src/app/[locale]/account/quick-order/text-input-tab.tsx +3 -8
- package/dist/assets/storefront/src/app/[locale]/account/quotes/[id]/page.tsx +86 -59
- package/dist/assets/storefront/src/app/[locale]/account/quotes/actions.ts +38 -45
- package/dist/assets/storefront/src/app/[locale]/account/quotes/new/new-quote-form.tsx +3 -5
- package/dist/assets/storefront/src/app/[locale]/account/quotes/new/page.tsx +6 -6
- package/dist/assets/storefront/src/app/[locale]/account/quotes/page.tsx +92 -59
- package/dist/assets/storefront/src/app/[locale]/account/shared-carts/[id]/activity-feed.tsx +152 -0
- package/dist/assets/storefront/src/app/[locale]/account/shared-carts/[id]/add-item-search.tsx +132 -0
- package/dist/assets/storefront/src/app/[locale]/account/shared-carts/[id]/add-member-form.tsx +140 -0
- package/dist/assets/storefront/src/app/[locale]/account/shared-carts/[id]/members-panel.tsx +259 -0
- package/dist/assets/storefront/src/app/[locale]/account/shared-carts/[id]/page.tsx +55 -0
- package/dist/assets/storefront/src/app/[locale]/account/shared-carts/[id]/rename-dialog.tsx +117 -0
- package/dist/assets/storefront/src/app/[locale]/account/shared-carts/[id]/shared-cart-detail-client.tsx +555 -0
- package/dist/assets/storefront/src/app/[locale]/account/shared-carts/actions.ts +305 -0
- package/dist/assets/storefront/src/app/[locale]/account/shared-carts/new/new-shared-cart-form.tsx +84 -0
- package/dist/assets/storefront/src/app/[locale]/account/shared-carts/new/page.tsx +47 -0
- package/dist/assets/storefront/src/app/[locale]/account/shared-carts/page.tsx +276 -0
- package/dist/assets/storefront/src/app/[locale]/account/shopping-lists/[id]/page.tsx +22 -8
- package/dist/assets/storefront/src/app/[locale]/account/shopping-lists/[id]/shopping-list-detail-client.tsx +62 -49
- package/dist/assets/storefront/src/app/[locale]/account/shopping-lists/actions.ts +9 -4
- package/dist/assets/storefront/src/app/[locale]/account/shopping-lists/create-shopping-list-form.tsx +5 -11
- package/dist/assets/storefront/src/app/[locale]/account/shopping-lists/loading.tsx +1 -1
- package/dist/assets/storefront/src/app/[locale]/account/shopping-lists/page.tsx +32 -42
- package/dist/assets/storefront/src/app/[locale]/account/store-credits/actions.ts +8 -8
- package/dist/assets/storefront/src/app/[locale]/account/store-credits/claim-form.tsx +6 -10
- package/dist/assets/storefront/src/app/[locale]/account/store-credits/page.tsx +76 -55
- package/dist/assets/storefront/src/app/[locale]/account/store-credits/reveal-code.tsx +10 -6
- package/dist/assets/storefront/src/app/[locale]/account/verify-email/page.tsx +32 -39
- package/dist/assets/storefront/src/app/[locale]/cart/actions.ts +29 -23
- package/dist/assets/storefront/src/app/[locale]/cart/cart-items.tsx +111 -40
- package/dist/assets/storefront/src/app/[locale]/cart/cart-line-actions.tsx +9 -9
- package/dist/assets/storefront/src/app/[locale]/cart/cart-quantity-control.tsx +61 -48
- package/dist/assets/storefront/src/app/[locale]/cart/cart-remove-button.tsx +15 -9
- package/dist/assets/storefront/src/app/[locale]/cart/cart.tsx +38 -41
- package/dist/assets/storefront/src/app/[locale]/cart/code-input.tsx +8 -8
- package/dist/assets/storefront/src/app/[locale]/cart/order-summary.tsx +70 -29
- package/dist/assets/storefront/src/app/[locale]/cart/page.tsx +11 -11
- package/dist/assets/storefront/src/app/[locale]/cart/promotion-code.tsx +48 -42
- package/dist/assets/storefront/src/app/[locale]/cart/reapproval-confirm.tsx +22 -20
- package/dist/assets/storefront/src/app/[locale]/cart/request-quote-button.tsx +7 -16
- package/dist/assets/storefront/src/app/[locale]/checkout/actions.ts +39 -65
- package/dist/assets/storefront/src/app/[locale]/checkout/cancel-quote-checkout-button.tsx +5 -5
- package/dist/assets/storefront/src/app/[locale]/checkout/checkout-flow.tsx +202 -202
- package/dist/assets/storefront/src/app/[locale]/checkout/checkout-provider.tsx +142 -142
- package/dist/assets/storefront/src/app/[locale]/checkout/order-summary.tsx +158 -139
- package/dist/assets/storefront/src/app/[locale]/checkout/page.tsx +56 -47
- package/dist/assets/storefront/src/app/[locale]/checkout/steps/delivery-step.tsx +86 -88
- package/dist/assets/storefront/src/app/[locale]/checkout/steps/payment-step.tsx +90 -91
- package/dist/assets/storefront/src/app/[locale]/checkout/steps/review-step.tsx +166 -161
- package/dist/assets/storefront/src/app/[locale]/checkout/steps/shipping-address-step.tsx +573 -494
- package/dist/assets/storefront/src/app/[locale]/error.tsx +3 -5
- package/dist/assets/storefront/src/app/[locale]/forgot-password/actions.ts +10 -7
- package/dist/assets/storefront/src/app/[locale]/forgot-password/forgot-password-form.tsx +10 -25
- package/dist/assets/storefront/src/app/[locale]/forgot-password/page.tsx +5 -5
- package/dist/assets/storefront/src/app/[locale]/globals.css +48 -48
- package/dist/assets/storefront/src/app/[locale]/layout.tsx +53 -47
- package/dist/assets/storefront/src/app/[locale]/not-found.tsx +3 -5
- package/dist/assets/storefront/src/app/[locale]/order-confirmation/[code]/order-confirmation.tsx +71 -44
- package/dist/assets/storefront/src/app/[locale]/order-confirmation/[code]/page.tsx +7 -5
- package/dist/assets/storefront/src/app/[locale]/page.tsx +33 -35
- package/dist/assets/storefront/src/app/[locale]/register/actions.ts +7 -7
- package/dist/assets/storefront/src/app/[locale]/register/page.tsx +22 -16
- package/dist/assets/storefront/src/app/[locale]/register/registration-form.tsx +22 -34
- package/dist/assets/storefront/src/app/[locale]/register-company/actions.ts +15 -19
- package/dist/assets/storefront/src/app/[locale]/register-company/page.tsx +17 -15
- package/dist/assets/storefront/src/app/[locale]/register-company/registration-form.tsx +9 -15
- package/dist/assets/storefront/src/app/[locale]/reset-password/actions.ts +7 -8
- package/dist/assets/storefront/src/app/[locale]/reset-password/page.tsx +18 -12
- package/dist/assets/storefront/src/app/[locale]/reset-password/reset-password-form.tsx +8 -16
- package/dist/assets/storefront/src/app/[locale]/shopping-list/[code]/add-to-cart-button.tsx +10 -4
- package/dist/assets/storefront/src/app/[locale]/shopping-list/[code]/page.tsx +62 -30
- package/dist/assets/storefront/src/app/[locale]/sign-in/actions.ts +14 -16
- package/dist/assets/storefront/src/app/[locale]/sign-in/login-form.tsx +17 -30
- package/dist/assets/storefront/src/app/[locale]/sign-in/page.tsx +35 -30
- package/dist/assets/storefront/src/app/[locale]/verify/actions.ts +8 -8
- package/dist/assets/storefront/src/app/[locale]/verify/page.tsx +18 -14
- package/dist/assets/storefront/src/app/[locale]/verify/verify-content.tsx +25 -27
- package/dist/assets/storefront/src/app/[locale]/verify-pending/page.tsx +23 -23
- package/dist/assets/storefront/src/app/api/clear-company-context/route.ts +6 -3
- package/dist/assets/storefront/src/app/api/revalidate/route.ts +19 -28
- package/dist/assets/storefront/src/app/api/search-analytics/route.ts +1 -1
- package/dist/assets/storefront/src/components/commerce/account-nav-items.ts +44 -17
- package/dist/assets/storefront/src/components/commerce/account-sidebar.tsx +30 -22
- package/dist/assets/storefront/src/components/commerce/active-filters.tsx +1 -1
- package/dist/assets/storefront/src/components/commerce/add-to-shared-cart.tsx +247 -0
- package/dist/assets/storefront/src/components/commerce/approval-decision-form.tsx +9 -13
- package/dist/assets/storefront/src/components/commerce/approval-status-badge.tsx +23 -15
- package/dist/assets/storefront/src/components/commerce/business-unit-switcher.tsx +11 -11
- package/dist/assets/storefront/src/components/commerce/catalog-search-bar.tsx +2 -2
- package/dist/assets/storefront/src/components/commerce/category-product-section.tsx +28 -16
- package/dist/assets/storefront/src/components/commerce/category-sidebar.tsx +31 -18
- package/dist/assets/storefront/src/components/commerce/collection-hero-banner.tsx +2 -4
- package/dist/assets/storefront/src/components/commerce/company-state-badge.tsx +10 -16
- package/dist/assets/storefront/src/components/commerce/company-switcher.tsx +12 -12
- package/dist/assets/storefront/src/components/commerce/configurator-form.tsx +188 -79
- package/dist/assets/storefront/src/components/commerce/facet-filters.tsx +29 -49
- package/dist/assets/storefront/src/components/commerce/gift-card-pdp.tsx +4 -4
- package/dist/assets/storefront/src/components/commerce/gift-card-product-info.tsx +20 -30
- package/dist/assets/storefront/src/components/commerce/instant-search-dropdown.tsx +258 -227
- package/dist/assets/storefront/src/components/commerce/order-status-badge.tsx +27 -19
- package/dist/assets/storefront/src/components/commerce/packaging-unit-selector.tsx +27 -26
- package/dist/assets/storefront/src/components/commerce/permission-gate.tsx +4 -4
- package/dist/assets/storefront/src/components/commerce/price-range-filter.tsx +5 -5
- package/dist/assets/storefront/src/components/commerce/price-tiers.tsx +38 -21
- package/dist/assets/storefront/src/components/commerce/price.tsx +3 -3
- package/dist/assets/storefront/src/components/commerce/product-card-list.tsx +35 -14
- package/dist/assets/storefront/src/components/commerce/product-card.tsx +31 -16
- package/dist/assets/storefront/src/components/commerce/product-carousel.tsx +20 -12
- package/dist/assets/storefront/src/components/commerce/product-grid.tsx +14 -13
- package/dist/assets/storefront/src/components/commerce/product-image-carousel.tsx +10 -8
- package/dist/assets/storefront/src/components/commerce/product-info.tsx +129 -72
- package/dist/assets/storefront/src/components/commerce/product-list-expansion.tsx +102 -74
- package/dist/assets/storefront/src/components/commerce/product-list-view.tsx +1 -1
- package/dist/assets/storefront/src/components/commerce/product-sidebar.tsx +36 -11
- package/dist/assets/storefront/src/components/commerce/product-view-switcher.tsx +33 -21
- package/dist/assets/storefront/src/components/commerce/quote-action-buttons.tsx +54 -36
- package/dist/assets/storefront/src/components/commerce/quote-activity-timeline.tsx +126 -50
- package/dist/assets/storefront/src/components/commerce/quote-comment-form.tsx +9 -13
- package/dist/assets/storefront/src/components/commerce/quote-csv-export-button.tsx +6 -6
- package/dist/assets/storefront/src/components/commerce/quote-product-search.tsx +22 -18
- package/dist/assets/storefront/src/components/commerce/quote-request-form.tsx +28 -27
- package/dist/assets/storefront/src/components/commerce/quote-status-badge.tsx +26 -18
- package/dist/assets/storefront/src/components/commerce/quote-validity-indicator.tsx +7 -7
- package/dist/assets/storefront/src/components/commerce/quote-version-comparison.tsx +50 -30
- package/dist/assets/storefront/src/components/commerce/related-products.tsx +37 -28
- package/dist/assets/storefront/src/components/commerce/shared-cart-role.ts +39 -0
- package/dist/assets/storefront/src/components/commerce/shared-cart-status-badge.tsx +28 -0
- package/dist/assets/storefront/src/components/commerce/shop-by-category.tsx +8 -7
- package/dist/assets/storefront/src/components/commerce/shopping-list-toggle.tsx +14 -20
- package/dist/assets/storefront/src/components/commerce/sort-dropdown.tsx +9 -16
- package/dist/assets/storefront/src/components/commerce/store-credit-summary.tsx +30 -32
- package/dist/assets/storefront/src/components/commerce/subcollection-tiles.tsx +11 -13
- package/dist/assets/storefront/src/components/layout/auth-page-shell.tsx +2 -2
- package/dist/assets/storefront/src/components/layout/draft-mode-indicator.tsx +2 -7
- package/dist/assets/storefront/src/components/layout/draft-mode-link.tsx +4 -2
- package/dist/assets/storefront/src/components/layout/footer.tsx +70 -28
- package/dist/assets/storefront/src/components/layout/navbar/actions.ts +9 -12
- package/dist/assets/storefront/src/components/layout/navbar/cart-icon.tsx +9 -9
- package/dist/assets/storefront/src/components/layout/navbar/channel-picker-wrapper.tsx +4 -9
- package/dist/assets/storefront/src/components/layout/navbar/channel-picker.tsx +13 -8
- package/dist/assets/storefront/src/components/layout/navbar/currency-picker-wrapper.tsx +4 -4
- package/dist/assets/storefront/src/components/layout/navbar/currency-picker.tsx +11 -6
- package/dist/assets/storefront/src/components/layout/navbar/language-picker.tsx +7 -7
- package/dist/assets/storefront/src/components/layout/navbar/login-button.tsx +24 -21
- package/dist/assets/storefront/src/components/layout/navbar/mobile-nav.tsx +8 -8
- package/dist/assets/storefront/src/components/layout/navbar/nav-menu-items.tsx +4 -6
- package/dist/assets/storefront/src/components/layout/navbar/navbar-cart.tsx +1 -1
- package/dist/assets/storefront/src/components/layout/navbar/navbar-collections.tsx +41 -42
- package/dist/assets/storefront/src/components/layout/navbar/navbar-link.tsx +7 -10
- package/dist/assets/storefront/src/components/layout/navbar/navbar-user.tsx +18 -23
- package/dist/assets/storefront/src/components/layout/navbar/theme-switcher.tsx +9 -9
- package/dist/assets/storefront/src/components/layout/navbar.tsx +36 -31
- package/dist/assets/storefront/src/components/layout/search-input.tsx +35 -32
- package/dist/assets/storefront/src/components/providers/awaiting-approval-banner.tsx +12 -10
- package/dist/assets/storefront/src/components/providers/cart-count-server.tsx +14 -12
- package/dist/assets/storefront/src/components/providers/company-context-guard.tsx +4 -4
- package/dist/assets/storefront/src/components/providers/company-permissions-server.tsx +2 -6
- package/dist/assets/storefront/src/components/providers/theme-provider.tsx +3 -3
- package/dist/assets/storefront/src/components/shared/breadcrumbs.tsx +4 -1
- package/dist/assets/storefront/src/components/shared/country-select.tsx +63 -67
- package/dist/assets/storefront/src/components/shared/pagination.tsx +15 -28
- package/dist/assets/storefront/src/components/shared/prefetch-link.tsx +1 -1
- package/dist/assets/storefront/src/components/shared/skeletons/search-input-skeleton.tsx +1 -3
- package/dist/assets/storefront/src/components/ui/accordion.tsx +46 -51
- package/dist/assets/storefront/src/components/ui/alert-dialog.tsx +94 -121
- package/dist/assets/storefront/src/components/ui/alert.tsx +48 -54
- package/dist/assets/storefront/src/components/ui/aspect-ratio.tsx +5 -7
- package/dist/assets/storefront/src/components/ui/avatar.tsx +29 -44
- package/dist/assets/storefront/src/components/ui/badge.tsx +28 -37
- package/dist/assets/storefront/src/components/ui/breadcrumb.tsx +82 -89
- package/dist/assets/storefront/src/components/ui/button.tsx +43 -49
- package/dist/assets/storefront/src/components/ui/calendar.tsx +157 -198
- package/dist/assets/storefront/src/components/ui/card.tsx +53 -76
- package/dist/assets/storefront/src/components/ui/carousel.tsx +194 -212
- package/dist/assets/storefront/src/components/ui/chart.tsx +274 -317
- package/dist/assets/storefront/src/components/ui/checkbox.tsx +24 -27
- package/dist/assets/storefront/src/components/ui/collapsible.tsx +9 -21
- package/dist/assets/storefront/src/components/ui/command.tsx +114 -159
- package/dist/assets/storefront/src/components/ui/context-menu.tsx +167 -199
- package/dist/assets/storefront/src/components/ui/dialog.tsx +97 -114
- package/dist/assets/storefront/src/components/ui/drawer.tsx +93 -107
- package/dist/assets/storefront/src/components/ui/dropdown-menu.tsx +171 -206
- package/dist/assets/storefront/src/components/ui/empty-state.tsx +5 -5
- package/dist/assets/storefront/src/components/ui/field.tsx +196 -208
- package/dist/assets/storefront/src/components/ui/form.tsx +115 -139
- package/dist/assets/storefront/src/components/ui/hover-card.tsx +27 -33
- package/dist/assets/storefront/src/components/ui/input-otp.tsx +50 -59
- package/dist/assets/storefront/src/components/ui/input.tsx +17 -17
- package/dist/assets/storefront/src/components/ui/kbd-shortcut.tsx +3 -1
- package/dist/assets/storefront/src/components/ui/label.tsx +16 -19
- package/dist/assets/storefront/src/components/ui/menubar.tsx +193 -223
- package/dist/assets/storefront/src/components/ui/navigation-menu.tsx +123 -130
- package/dist/assets/storefront/src/components/ui/pagination.tsx +87 -108
- package/dist/assets/storefront/src/components/ui/popover.tsx +29 -35
- package/dist/assets/storefront/src/components/ui/progress.tsx +19 -26
- package/dist/assets/storefront/src/components/ui/radio-group.tsx +32 -38
- package/dist/assets/storefront/src/components/ui/resizable.tsx +37 -42
- package/dist/assets/storefront/src/components/ui/scroll-area.tsx +41 -47
- package/dist/assets/storefront/src/components/ui/select.tsx +130 -152
- package/dist/assets/storefront/src/components/ui/separator.tsx +21 -21
- package/dist/assets/storefront/src/components/ui/sheet.tsx +90 -111
- package/dist/assets/storefront/src/components/ui/sidebar.tsx +611 -649
- package/dist/assets/storefront/src/components/ui/skeleton.tsx +10 -10
- package/dist/assets/storefront/src/components/ui/slider.tsx +50 -55
- package/dist/assets/storefront/src/components/ui/sonner.tsx +20 -20
- package/dist/assets/storefront/src/components/ui/switch.tsx +23 -26
- package/dist/assets/storefront/src/components/ui/table.tsx +65 -97
- package/dist/assets/storefront/src/components/ui/tabs.tsx +39 -55
- package/dist/assets/storefront/src/components/ui/textarea.tsx +14 -14
- package/dist/assets/storefront/src/components/ui/toggle-group.tsx +56 -62
- package/dist/assets/storefront/src/components/ui/toggle.tsx +37 -38
- package/dist/assets/storefront/src/components/ui/tooltip.tsx +38 -46
- package/dist/assets/storefront/src/config/scenario-meta.ts +2 -2
- package/dist/assets/storefront/src/config/scenario.ts +14 -16
- package/dist/assets/storefront/src/contexts/auth-context.tsx +5 -6
- package/dist/assets/storefront/src/graphql-env.d.ts +18 -5
- package/dist/assets/storefront/src/graphql.ts +5 -5
- package/dist/assets/storefront/src/hooks/use-mobile.ts +13 -13
- package/dist/assets/storefront/src/i18n/locale-utils.ts +3 -3
- package/dist/assets/storefront/src/i18n/navigation.ts +4 -4
- package/dist/assets/storefront/src/i18n/request.ts +4 -4
- package/dist/assets/storefront/src/i18n/routing.ts +5 -5
- package/dist/assets/storefront/src/i18n/server.ts +3 -3
- package/dist/assets/storefront/src/lib/actions/switch-channel.ts +9 -9
- package/dist/assets/storefront/src/lib/actions/switch-currency.ts +7 -7
- package/dist/assets/storefront/src/lib/auth.ts +1 -1
- package/dist/assets/storefront/src/lib/backend-health.ts +3 -3
- package/dist/assets/storefront/src/lib/cart-count-context.tsx +10 -4
- package/dist/assets/storefront/src/lib/cart-guard-utils.ts +2 -1
- package/dist/assets/storefront/src/lib/cart-guard.ts +7 -6
- package/dist/assets/storefront/src/lib/channel-server.ts +4 -4
- package/dist/assets/storefront/src/lib/company-context.ts +1 -1
- package/dist/assets/storefront/src/lib/company-permissions-context.tsx +1 -5
- package/dist/assets/storefront/src/lib/currency-server.ts +4 -4
- package/dist/assets/storefront/src/lib/format.ts +16 -7
- package/dist/assets/storefront/src/lib/metadata.ts +39 -44
- package/dist/assets/storefront/src/lib/quantity.ts +2 -4
- package/dist/assets/storefront/src/lib/search-bar-context.tsx +7 -4
- package/dist/assets/storefront/src/lib/use-recent-searches.ts +8 -6
- package/dist/assets/storefront/src/lib/utils.ts +3 -3
- package/dist/assets/storefront/src/lib/vendure/actions.ts +18 -16
- package/dist/assets/storefront/src/lib/vendure/api.ts +44 -27
- package/dist/assets/storefront/src/lib/vendure/approval-utils.ts +9 -8
- package/dist/assets/storefront/src/lib/vendure/cached.ts +20 -15
- package/dist/assets/storefront/src/lib/vendure/mutations.ts +96 -0
- package/dist/assets/storefront/src/lib/vendure/queries.ts +157 -5
- package/dist/assets/storefront/src/middleware.ts +1 -1
- package/dist/assets/storefront/src/scenarios/customer/hero.tsx +2 -2
- package/dist/assets/storefront/src/scenarios/customer/meta.ts +1 -1
- package/dist/assets/storefront/src/schema.graphql +134 -0
- package/dist/bin/run.js +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.js +1 -1
- package/dist/plugin-registry.js +1 -1
- package/dist/scaffold-storefront-only.js +1 -1
- package/dist/scaffolder.js +1 -1
- package/dist/template-renderer.js +1 -1
- package/package.json +2 -2
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
1
|
+
import { ErrorState } from '@/components/shared/error-state';
|
|
2
|
+
import { client } from '@/lib/vendure/api';
|
|
3
|
+
import { GetAvailableCountriesQuery, GetCustomerAddressesQuery } from '@/lib/vendure/queries';
|
|
4
|
+
import type { Metadata } from 'next';
|
|
5
|
+
import { getTranslations } from 'next-intl/server';
|
|
6
|
+
import { Suspense } from 'react';
|
|
7
|
+
import { AddressesClient } from './addresses-client';
|
|
8
8
|
|
|
9
9
|
export const metadata: Metadata = {
|
|
10
10
|
title: 'Addresses',
|
|
@@ -19,9 +19,7 @@ async function AddressesContent() {
|
|
|
19
19
|
const [addressesResult, addressesError] = addressesRes;
|
|
20
20
|
const [countriesResult, countriesError] = countriesRes;
|
|
21
21
|
if (addressesError || countriesError) {
|
|
22
|
-
return
|
|
23
|
-
<ErrorState message="We couldn't load this page. Please try again later." />
|
|
24
|
-
);
|
|
22
|
+
return <ErrorState message="We couldn't load this page. Please try again later." />;
|
|
25
23
|
}
|
|
26
24
|
|
|
27
25
|
const addresses = addressesResult.data.activeCustomer?.addresses || [];
|
|
@@ -31,9 +29,7 @@ async function AddressesContent() {
|
|
|
31
29
|
<div className="space-y-6">
|
|
32
30
|
<div>
|
|
33
31
|
<h1 className="text-3xl font-bold">{t('addresses')}</h1>
|
|
34
|
-
<p className="text-muted-foreground mt-2">
|
|
35
|
-
{t('manageAddresses')}
|
|
36
|
-
</p>
|
|
32
|
+
<p className="text-muted-foreground mt-2">{t('manageAddresses')}</p>
|
|
37
33
|
</div>
|
|
38
34
|
|
|
39
35
|
<AddressesClient addresses={addresses} countries={countries} />
|
|
@@ -43,11 +39,13 @@ async function AddressesContent() {
|
|
|
43
39
|
|
|
44
40
|
export default function AddressesPage() {
|
|
45
41
|
return (
|
|
46
|
-
<Suspense
|
|
47
|
-
|
|
48
|
-
<
|
|
49
|
-
|
|
50
|
-
|
|
42
|
+
<Suspense
|
|
43
|
+
fallback={
|
|
44
|
+
<div className="text-center py-12">
|
|
45
|
+
<p className="text-sm text-muted-foreground">Loading...</p>
|
|
46
|
+
</div>
|
|
47
|
+
}
|
|
48
|
+
>
|
|
51
49
|
<AddressesContent />
|
|
52
50
|
</Suspense>
|
|
53
51
|
);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use server';
|
|
2
2
|
|
|
3
|
-
import {client} from '@/lib/vendure/api';
|
|
4
|
-
import {SubmitApprovalDecisionMutation} from '@/lib/vendure/mutations';
|
|
5
|
-
import {revalidatePath} from 'next/cache';
|
|
3
|
+
import { client } from '@/lib/vendure/api';
|
|
4
|
+
import { SubmitApprovalDecisionMutation } from '@/lib/vendure/mutations';
|
|
5
|
+
import { revalidatePath } from 'next/cache';
|
|
6
6
|
|
|
7
7
|
interface SubmitDecisionInput {
|
|
8
8
|
approvalRequestId: string;
|
|
@@ -11,10 +11,7 @@ interface SubmitDecisionInput {
|
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
export async function submitApprovalDecision(input: SubmitDecisionInput) {
|
|
14
|
-
const [, error] = await client.mutate(
|
|
15
|
-
SubmitApprovalDecisionMutation,
|
|
16
|
-
{input},
|
|
17
|
-
);
|
|
14
|
+
const [, error] = await client.mutate(SubmitApprovalDecisionMutation, { input });
|
|
18
15
|
|
|
19
16
|
if (error) {
|
|
20
17
|
return {
|
|
@@ -24,5 +21,5 @@ export async function submitApprovalDecision(input: SubmitDecisionInput) {
|
|
|
24
21
|
}
|
|
25
22
|
|
|
26
23
|
revalidatePath('/account/approvals');
|
|
27
|
-
return {success: true};
|
|
24
|
+
return { success: true };
|
|
28
25
|
}
|
|
@@ -1,27 +1,28 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {Button} from '@/components/ui/button';
|
|
1
|
+
import { ApprovalDecisionForm } from '@/components/commerce/approval-decision-form';
|
|
2
|
+
import { ApprovalStatusBadge } from '@/components/commerce/approval-status-badge';
|
|
3
|
+
import { Price } from '@/components/commerce/price';
|
|
4
|
+
import { ErrorState } from '@/components/shared/error-state';
|
|
5
|
+
import { Button } from '@/components/ui/button';
|
|
6
|
+
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
|
|
7
|
+
import { ResultOf } from '@/graphql';
|
|
8
|
+
import { Link, redirect } from '@/i18n/navigation';
|
|
9
|
+
import { formatDateTime } from '@/lib/format';
|
|
10
|
+
import { getActiveCustomer } from '@/lib/vendure/actions';
|
|
11
|
+
import { client } from '@/lib/vendure/api';
|
|
12
|
+
import { GetMyApprovalRequestsQuery, GetOrderSummaryQuery } from '@/lib/vendure/queries';
|
|
13
|
+
import { ExternalLink } from 'lucide-react';
|
|
14
|
+
import type { Metadata } from 'next';
|
|
15
|
+
import { getTranslations, setRequestLocale } from 'next-intl/server';
|
|
17
16
|
import Image from 'next/image';
|
|
18
|
-
import {
|
|
17
|
+
import { Suspense } from 'react';
|
|
19
18
|
|
|
20
19
|
export const metadata: Metadata = {
|
|
21
20
|
title: 'Approvals',
|
|
22
21
|
};
|
|
23
22
|
|
|
24
|
-
type ApprovalRequest = NonNullable<
|
|
23
|
+
type ApprovalRequest = NonNullable<
|
|
24
|
+
ResultOf<typeof GetMyApprovalRequestsQuery>['myApprovalRequests']
|
|
25
|
+
>['items'][number];
|
|
25
26
|
type OrderSummary = NonNullable<ResultOf<typeof GetOrderSummaryQuery>['orderByCode']>;
|
|
26
27
|
type ApprovalsTranslations = Awaited<ReturnType<typeof getTranslations<'Approvals'>>>;
|
|
27
28
|
|
|
@@ -37,8 +38,8 @@ async function fetchOrderSummaries(
|
|
|
37
38
|
requests: Array<{ entityType: string; summary: string | null }>,
|
|
38
39
|
): Promise<Map<string, OrderSummary>> {
|
|
39
40
|
const orderCodes = requests
|
|
40
|
-
.filter(r => r.entityType === 'Order')
|
|
41
|
-
.map(r => parseOrderCode(r.summary))
|
|
41
|
+
.filter((r) => r.entityType === 'Order')
|
|
42
|
+
.map((r) => parseOrderCode(r.summary))
|
|
42
43
|
.filter((code): code is string => code != null);
|
|
43
44
|
|
|
44
45
|
const uniqueCodes = [...new Set(orderCodes)];
|
|
@@ -46,7 +47,7 @@ async function fetchOrderSummaries(
|
|
|
46
47
|
|
|
47
48
|
await Promise.all(
|
|
48
49
|
uniqueCodes.map(async (code) => {
|
|
49
|
-
const [result, error] = await client.query(GetOrderSummaryQuery, {code});
|
|
50
|
+
const [result, error] = await client.query(GetOrderSummaryQuery, { code });
|
|
50
51
|
if (!error && result?.data?.orderByCode) {
|
|
51
52
|
orderMap.set(code, result.data.orderByCode);
|
|
52
53
|
}
|
|
@@ -93,12 +94,17 @@ function PendingApprovalCard({
|
|
|
93
94
|
)}
|
|
94
95
|
<p className="text-sm text-muted-foreground mt-0.5">
|
|
95
96
|
{requester && (
|
|
96
|
-
<span>
|
|
97
|
+
<span>
|
|
98
|
+
{t('requestedBy', {
|
|
99
|
+
name: `${requester.firstName} ${requester.lastName}`,
|
|
100
|
+
})}{' '}
|
|
101
|
+
·{' '}
|
|
102
|
+
</span>
|
|
97
103
|
)}
|
|
98
104
|
{formatDateTime(request.createdAt, locale)}
|
|
99
105
|
</p>
|
|
100
106
|
</div>
|
|
101
|
-
<ApprovalStatusBadge status={request.status}/>
|
|
107
|
+
<ApprovalStatusBadge status={request.status} />
|
|
102
108
|
</div>
|
|
103
109
|
</CardHeader>
|
|
104
110
|
<CardContent className="space-y-3">
|
|
@@ -109,7 +115,10 @@ function PendingApprovalCard({
|
|
|
109
115
|
<div className="relative h-10 w-10 rounded overflow-hidden bg-gray-100 flex-shrink-0">
|
|
110
116
|
{line.productVariant.product.featuredAsset && (
|
|
111
117
|
<Image
|
|
112
|
-
src={
|
|
118
|
+
src={
|
|
119
|
+
line.productVariant.product.featuredAsset.preview +
|
|
120
|
+
'?w=80&h=80'
|
|
121
|
+
}
|
|
113
122
|
alt={line.productVariant.product.name}
|
|
114
123
|
fill
|
|
115
124
|
className="object-cover"
|
|
@@ -119,21 +128,20 @@ function PendingApprovalCard({
|
|
|
119
128
|
<div className="flex-1 min-w-0">
|
|
120
129
|
<p className="truncate font-medium">{line.productVariant.product.name}</p>
|
|
121
130
|
<p className="text-xs text-muted-foreground">
|
|
122
|
-
{line.productVariant.name} ·
|
|
131
|
+
{line.productVariant.name} ·{' '}
|
|
132
|
+
{t('quantityLabel', { qty: line.quantity })}
|
|
123
133
|
</p>
|
|
124
134
|
</div>
|
|
125
135
|
</div>
|
|
126
136
|
))}
|
|
127
137
|
{remainingCount > 0 && (
|
|
128
138
|
<p className="text-xs text-muted-foreground pl-[52px]">
|
|
129
|
-
{t('andMoreItems', {count: remainingCount})}
|
|
139
|
+
{t('andMoreItems', { count: remainingCount })}
|
|
130
140
|
</p>
|
|
131
141
|
)}
|
|
132
142
|
</div>
|
|
133
143
|
)}
|
|
134
|
-
{!order && request.summary &&
|
|
135
|
-
<p className="text-sm">{request.summary}</p>
|
|
136
|
-
)}
|
|
144
|
+
{!order && request.summary && <p className="text-sm">{request.summary}</p>}
|
|
137
145
|
{orderCode && (
|
|
138
146
|
<Button variant="outline" size="sm" asChild>
|
|
139
147
|
<Link href={`/account/orders/${orderCode}`}>
|
|
@@ -142,15 +150,20 @@ function PendingApprovalCard({
|
|
|
142
150
|
</Link>
|
|
143
151
|
</Button>
|
|
144
152
|
)}
|
|
145
|
-
<ApprovalDecisionForm approvalRequestId={request.id}/>
|
|
153
|
+
<ApprovalDecisionForm approvalRequestId={request.id} />
|
|
146
154
|
</CardContent>
|
|
147
155
|
</Card>
|
|
148
156
|
);
|
|
149
157
|
}
|
|
150
158
|
|
|
151
159
|
/** Group history requests by entity (order), showing one card per order with all approval rounds. */
|
|
152
|
-
function groupByEntity(
|
|
153
|
-
|
|
160
|
+
function groupByEntity(
|
|
161
|
+
requests: ApprovalRequest[],
|
|
162
|
+
): Array<{ key: string; orderCode: string | null; requester: string; requests: ApprovalRequest[] }> {
|
|
163
|
+
const groups = new Map<
|
|
164
|
+
string,
|
|
165
|
+
{ orderCode: string | null; requester: string; requests: ApprovalRequest[] }
|
|
166
|
+
>();
|
|
154
167
|
for (const r of requests) {
|
|
155
168
|
const key = `${r.entityType}:${r.entityId}`;
|
|
156
169
|
if (!groups.has(key)) {
|
|
@@ -189,7 +202,10 @@ function HistoryGroupCard({
|
|
|
189
202
|
<div>
|
|
190
203
|
{orderCode ? (
|
|
191
204
|
<CardTitle className="text-base">
|
|
192
|
-
<Link
|
|
205
|
+
<Link
|
|
206
|
+
href={`/account/orders/${orderCode}`}
|
|
207
|
+
className="text-primary hover:underline"
|
|
208
|
+
>
|
|
193
209
|
Order {orderCode}
|
|
194
210
|
</Link>
|
|
195
211
|
</CardTitle>
|
|
@@ -198,22 +214,22 @@ function HistoryGroupCard({
|
|
|
198
214
|
{latest.entityType} #{latest.entityId}
|
|
199
215
|
</CardTitle>
|
|
200
216
|
)}
|
|
201
|
-
{requester &&
|
|
202
|
-
<p className="text-sm text-muted-foreground mt-0.5">{requester}</p>
|
|
203
|
-
)}
|
|
217
|
+
{requester && <p className="text-sm text-muted-foreground mt-0.5">{requester}</p>}
|
|
204
218
|
</div>
|
|
205
|
-
<ApprovalStatusBadge status={latest.status}/>
|
|
219
|
+
<ApprovalStatusBadge status={latest.status} />
|
|
206
220
|
</div>
|
|
207
221
|
</CardHeader>
|
|
208
222
|
<CardContent className="pt-0">
|
|
209
223
|
<div className="text-xs text-muted-foreground space-y-2">
|
|
210
224
|
{requests.map((r) => {
|
|
211
|
-
const madeDecisions = r.decisions?.filter(d => d.decision !== 'PENDING') ?? [];
|
|
225
|
+
const madeDecisions = r.decisions?.filter((d) => d.decision !== 'PENDING') ?? [];
|
|
212
226
|
if (madeDecisions.length === 0) return null;
|
|
213
227
|
return (
|
|
214
228
|
<div key={r.id}>
|
|
215
|
-
<span className="text-muted-foreground/60">
|
|
216
|
-
|
|
229
|
+
<span className="text-muted-foreground/60">
|
|
230
|
+
{formatDateTime(r.createdAt, locale)}
|
|
231
|
+
</span>
|
|
232
|
+
{madeDecisions.map((d) => (
|
|
217
233
|
<div key={d.id} className="ml-2">
|
|
218
234
|
{d.customer
|
|
219
235
|
? `${d.customer.firstName} ${d.customer.lastName}`
|
|
@@ -233,27 +249,21 @@ function HistoryGroupCard({
|
|
|
233
249
|
|
|
234
250
|
const APPROVALS_PAGE_SIZE = 50;
|
|
235
251
|
|
|
236
|
-
async function ApprovalsContent({params}: {params: Promise<{locale: string}>}) {
|
|
237
|
-
const {locale} = await params;
|
|
252
|
+
async function ApprovalsContent({ params }: { params: Promise<{ locale: string }> }) {
|
|
253
|
+
const { locale } = await params;
|
|
238
254
|
setRequestLocale(locale);
|
|
239
|
-
const [t, activeCustomer] = await Promise.all([
|
|
240
|
-
getTranslations('Approvals'),
|
|
241
|
-
getActiveCustomer(),
|
|
242
|
-
]);
|
|
255
|
+
const [t, activeCustomer] = await Promise.all([getTranslations('Approvals'), getActiveCustomer()]);
|
|
243
256
|
if (!activeCustomer) {
|
|
244
257
|
return await redirect('/sign-in');
|
|
245
258
|
}
|
|
246
259
|
|
|
247
|
-
const [result, error] = await client.query(
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
);
|
|
260
|
+
const [result, error] = await client.query(GetMyApprovalRequestsQuery, {
|
|
261
|
+
options: { take: APPROVALS_PAGE_SIZE, sort: { createdAt: 'DESC' } },
|
|
262
|
+
});
|
|
251
263
|
if (error) {
|
|
252
|
-
return
|
|
253
|
-
<ErrorState message="We couldn't load this page. Please try again later." />
|
|
254
|
-
);
|
|
264
|
+
return <ErrorState message="We couldn't load this page. Please try again later." />;
|
|
255
265
|
}
|
|
256
|
-
const {data} = result;
|
|
266
|
+
const { data } = result;
|
|
257
267
|
const allRequests = data.myApprovalRequests?.items ?? [];
|
|
258
268
|
|
|
259
269
|
if (allRequests.length === 0) {
|
|
@@ -268,14 +278,10 @@ async function ApprovalsContent({params}: {params: Promise<{locale: string}>}) {
|
|
|
268
278
|
// A request with no decisions yet (workflow still initializing) is treated as
|
|
269
279
|
// pending if the status is PENDING or IN_PROGRESS and I'm not the requester,
|
|
270
280
|
// since it likely hasn't assigned approvers yet.
|
|
271
|
-
const pendingApprovals = allRequests.filter(r =>
|
|
272
|
-
r.decisions?.some(d =>
|
|
273
|
-
d.decision === 'PENDING' && d.customer?.id === activeCustomer.id,
|
|
274
|
-
),
|
|
275
|
-
);
|
|
276
|
-
const pastAndOther = allRequests.filter(r =>
|
|
277
|
-
!pendingApprovals.includes(r),
|
|
281
|
+
const pendingApprovals = allRequests.filter((r) =>
|
|
282
|
+
r.decisions?.some((d) => d.decision === 'PENDING' && d.customer?.id === activeCustomer.id),
|
|
278
283
|
);
|
|
284
|
+
const pastAndOther = allRequests.filter((r) => !pendingApprovals.includes(r));
|
|
279
285
|
|
|
280
286
|
// Only fetch order summaries for pending approvals (history rows don't need them)
|
|
281
287
|
const orderMap = await fetchOrderSummaries(pendingApprovals);
|
|
@@ -286,7 +292,7 @@ async function ApprovalsContent({params}: {params: Promise<{locale: string}>}) {
|
|
|
286
292
|
<section>
|
|
287
293
|
<h2 className="text-2xl font-bold mb-4">{t('pendingDecisionsHeading')}</h2>
|
|
288
294
|
<p className="text-sm text-muted-foreground mb-4">
|
|
289
|
-
{t('pendingDecisionsCount', {count: pendingApprovals.length})}
|
|
295
|
+
{t('pendingDecisionsCount', { count: pendingApprovals.length })}
|
|
290
296
|
</p>
|
|
291
297
|
<div className="space-y-4">
|
|
292
298
|
{pendingApprovals.map((request) => (
|
|
@@ -323,17 +329,19 @@ async function ApprovalsContent({params}: {params: Promise<{locale: string}>}) {
|
|
|
323
329
|
);
|
|
324
330
|
}
|
|
325
331
|
|
|
326
|
-
export default async function ApprovalsPage({params}: {params: Promise<{locale: string}>}) {
|
|
332
|
+
export default async function ApprovalsPage({ params }: { params: Promise<{ locale: string }> }) {
|
|
327
333
|
const t = await getTranslations('Approvals');
|
|
328
334
|
return (
|
|
329
335
|
<div>
|
|
330
336
|
<h1 className="text-3xl font-bold mb-6">{t('pageTitle')}</h1>
|
|
331
|
-
<Suspense
|
|
332
|
-
|
|
333
|
-
<
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
+
<Suspense
|
|
338
|
+
fallback={
|
|
339
|
+
<div className="text-center py-12">
|
|
340
|
+
<p className="text-sm text-muted-foreground">{t('loading')}</p>
|
|
341
|
+
</div>
|
|
342
|
+
}
|
|
343
|
+
>
|
|
344
|
+
<ApprovalsContent params={params} />
|
|
337
345
|
</Suspense>
|
|
338
346
|
</div>
|
|
339
347
|
);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use server';
|
|
2
2
|
|
|
3
|
-
import {client} from '@/lib/vendure/api';
|
|
4
|
-
import {UpdateCompanyAccountMutation} from '@/lib/vendure/mutations';
|
|
5
|
-
import {revalidatePath} from 'next/cache';
|
|
3
|
+
import { client } from '@/lib/vendure/api';
|
|
4
|
+
import { UpdateCompanyAccountMutation } from '@/lib/vendure/mutations';
|
|
5
|
+
import { revalidatePath } from 'next/cache';
|
|
6
6
|
|
|
7
7
|
export async function updateCompanyAction(
|
|
8
8
|
prevState: { error?: string; success?: boolean } | undefined,
|
|
@@ -11,23 +11,22 @@ export async function updateCompanyAction(
|
|
|
11
11
|
const companyName = formData.get('companyName') as string;
|
|
12
12
|
|
|
13
13
|
if (!companyName?.trim()) {
|
|
14
|
-
return {error: 'Company name is required'};
|
|
14
|
+
return { error: 'Company name is required' };
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
const [result, error] = await client.mutate(
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
);
|
|
17
|
+
const [result, error] = await client.mutate(UpdateCompanyAccountMutation, {
|
|
18
|
+
input: { name: companyName.trim() },
|
|
19
|
+
});
|
|
21
20
|
|
|
22
21
|
if (error) {
|
|
23
|
-
return {error: 'An unexpected error occurred. Please try again.'};
|
|
22
|
+
return { error: 'An unexpected error occurred. Please try again.' };
|
|
24
23
|
}
|
|
25
24
|
|
|
26
25
|
if (!result.data.updateCompanyAccount?.company) {
|
|
27
|
-
return {error: 'Failed to update company'};
|
|
26
|
+
return { error: 'Failed to update company' };
|
|
28
27
|
}
|
|
29
28
|
|
|
30
29
|
revalidatePath('/account/company');
|
|
31
30
|
revalidatePath('/', 'layout');
|
|
32
|
-
return {success: true};
|
|
31
|
+
return { success: true };
|
|
33
32
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
'use server';
|
|
2
2
|
|
|
3
|
-
import {client} from '@/lib/vendure/api';
|
|
3
|
+
import { client } from '@/lib/vendure/api';
|
|
4
4
|
import {
|
|
5
5
|
CreateCompanyAddressMutation,
|
|
6
|
-
UpdateCompanyAddressMutation,
|
|
7
6
|
DeleteCompanyAddressMutation,
|
|
7
|
+
UpdateCompanyAddressMutation,
|
|
8
8
|
} from '@/lib/vendure/mutations';
|
|
9
|
-
import {revalidatePath} from 'next/cache';
|
|
9
|
+
import { revalidatePath } from 'next/cache';
|
|
10
10
|
|
|
11
11
|
interface CreateCompanyAddressInput {
|
|
12
12
|
fullName: string;
|
|
@@ -38,10 +38,7 @@ interface UpdateCompanyAddressInput {
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
export async function createCompanyAddressAction(input: CreateCompanyAddressInput) {
|
|
41
|
-
const [result, error] = await client.mutate(
|
|
42
|
-
CreateCompanyAddressMutation,
|
|
43
|
-
{input},
|
|
44
|
-
);
|
|
41
|
+
const [result, error] = await client.mutate(CreateCompanyAddressMutation, { input });
|
|
45
42
|
if (error) throw error;
|
|
46
43
|
|
|
47
44
|
if (!result.data.createCompanyAddress) {
|
|
@@ -53,10 +50,7 @@ export async function createCompanyAddressAction(input: CreateCompanyAddressInpu
|
|
|
53
50
|
}
|
|
54
51
|
|
|
55
52
|
export async function updateCompanyAddressAction(input: UpdateCompanyAddressInput) {
|
|
56
|
-
const [result, error] = await client.mutate(
|
|
57
|
-
UpdateCompanyAddressMutation,
|
|
58
|
-
{input},
|
|
59
|
-
);
|
|
53
|
+
const [result, error] = await client.mutate(UpdateCompanyAddressMutation, { input });
|
|
60
54
|
if (error) throw error;
|
|
61
55
|
|
|
62
56
|
if (!result.data.updateCompanyAddress) {
|
|
@@ -68,10 +62,7 @@ export async function updateCompanyAddressAction(input: UpdateCompanyAddressInpu
|
|
|
68
62
|
}
|
|
69
63
|
|
|
70
64
|
export async function deleteCompanyAddressAction(id: string) {
|
|
71
|
-
const [result, error] = await client.mutate(
|
|
72
|
-
DeleteCompanyAddressMutation,
|
|
73
|
-
{id},
|
|
74
|
-
);
|
|
65
|
+
const [result, error] = await client.mutate(DeleteCompanyAddressMutation, { id });
|
|
75
66
|
if (error) throw error;
|
|
76
67
|
|
|
77
68
|
if (result.data.deleteCompanyAddress.result !== 'DELETED') {
|