@vendure/dashboard 3.2.2 → 3.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/plugin/utils/ast-utils.d.ts +10 -0
- package/dist/plugin/utils/ast-utils.js +96 -0
- package/dist/plugin/utils/ast-utils.spec.d.ts +1 -0
- package/dist/plugin/utils/ast-utils.spec.js +120 -0
- package/dist/plugin/{config-loader.d.ts → utils/config-loader.d.ts} +22 -8
- package/dist/plugin/utils/config-loader.js +325 -0
- package/dist/plugin/{schema-generator.d.ts → utils/schema-generator.d.ts} +5 -0
- package/dist/plugin/{schema-generator.js → utils/schema-generator.js} +6 -0
- package/dist/plugin/{ui-config.js → utils/ui-config.js} +2 -2
- package/dist/plugin/vite-plugin-admin-api-schema.js +2 -2
- package/dist/plugin/vite-plugin-config-loader.d.ts +2 -3
- package/dist/plugin/vite-plugin-config-loader.js +18 -9
- package/dist/plugin/vite-plugin-dashboard-metadata.js +12 -14
- package/dist/plugin/vite-plugin-gql-tada.js +2 -2
- package/dist/plugin/vite-plugin-ui-config.js +3 -2
- package/package.json +8 -6
- package/src/app/app-providers.tsx +8 -8
- package/src/app/main.tsx +1 -1
- package/src/app/routes/_authenticated/_assets/assets.graphql.ts +26 -0
- package/src/app/routes/_authenticated/_assets/assets.tsx +2 -2
- package/src/app/routes/_authenticated/_assets/assets_.$id.tsx +156 -0
- package/src/app/routes/_authenticated/_orders/components/customer-address-selector.tsx +104 -0
- package/src/app/routes/_authenticated/_orders/components/edit-order-table.tsx +228 -0
- package/src/app/routes/_authenticated/_orders/components/money-gross-net.tsx +18 -0
- package/src/app/routes/_authenticated/_orders/components/order-address.tsx +2 -1
- package/src/app/routes/_authenticated/_orders/components/order-line-custom-fields-form.tsx +38 -0
- package/src/app/routes/_authenticated/_orders/components/order-table-totals.tsx +53 -0
- package/src/app/routes/_authenticated/_orders/components/order-table.tsx +8 -49
- package/src/app/routes/_authenticated/_orders/components/shipping-method-selector.tsx +65 -0
- package/src/app/routes/_authenticated/_orders/orders.graphql.ts +187 -1
- package/src/app/routes/_authenticated/_orders/orders.tsx +39 -18
- package/src/app/routes/_authenticated/_orders/orders_.$id.tsx +31 -9
- package/src/app/routes/_authenticated/_orders/orders_.draft.$id.tsx +418 -0
- package/src/app/routes/_authenticated/_products/products.tsx +1 -1
- package/src/app/routes/_authenticated.tsx +12 -1
- package/src/lib/components/data-table/add-filter-menu.tsx +61 -0
- package/src/lib/components/data-table/data-table-column-header.tsx +0 -13
- package/src/lib/components/data-table/data-table-filter-badge.tsx +75 -0
- package/src/lib/components/data-table/data-table-filter-dialog.tsx +27 -28
- package/src/lib/components/data-table/data-table-types.ts +1 -0
- package/src/lib/components/data-table/data-table-view-options.tsx +72 -23
- package/src/lib/components/data-table/data-table.tsx +23 -24
- package/src/lib/components/data-table/filters/data-table-boolean-filter.tsx +57 -0
- package/src/lib/components/data-table/filters/data-table-datetime-filter.tsx +93 -0
- package/src/lib/components/data-table/filters/data-table-id-filter.tsx +58 -0
- package/src/lib/components/data-table/filters/data-table-number-filter.tsx +119 -0
- package/src/lib/components/data-table/filters/data-table-string-filter.tsx +62 -0
- package/src/lib/components/data-table/human-readable-operator.tsx +65 -0
- package/src/lib/components/layout/nav-user.tsx +4 -4
- package/src/lib/components/shared/asset/asset-focal-point-editor.tsx +93 -0
- package/src/lib/components/shared/{asset-gallery.tsx → asset/asset-gallery.tsx} +51 -20
- package/src/lib/components/shared/{asset-picker-dialog.tsx → asset/asset-picker-dialog.tsx} +1 -1
- package/src/lib/components/shared/{asset-preview-dialog.tsx → asset/asset-preview-dialog.tsx} +1 -7
- package/src/lib/components/shared/asset/asset-preview-selector.tsx +34 -0
- package/src/lib/components/shared/asset/asset-preview.tsx +128 -0
- package/src/lib/components/shared/asset/asset-properties.tsx +46 -0
- package/src/lib/components/shared/{focal-point-control.tsx → asset/focal-point-control.tsx} +1 -1
- package/src/lib/components/shared/custom-fields-form.tsx +4 -3
- package/src/lib/components/shared/customer-selector.tsx +13 -14
- package/src/lib/components/shared/detail-page-button.tsx +2 -2
- package/src/lib/components/shared/entity-assets.tsx +3 -3
- package/src/lib/components/shared/navigation-confirmation.tsx +39 -0
- package/src/lib/components/shared/paginated-list-data-table.tsx +9 -1
- package/src/lib/components/shared/product-variant-selector.tsx +111 -0
- package/src/lib/components/shared/vendure-image.tsx +1 -1
- package/src/lib/components/ui/calendar.tsx +508 -63
- package/src/lib/framework/document-introspection/get-document-structure.spec.ts +113 -3
- package/src/lib/framework/document-introspection/get-document-structure.ts +70 -11
- package/src/lib/framework/form-engine/use-generated-form.tsx +8 -7
- package/src/lib/framework/layout-engine/page-layout.tsx +4 -0
- package/src/lib/framework/page/list-page.tsx +23 -4
- package/src/lib/framework/page/use-detail-page.ts +1 -0
- package/src/lib/graphql/fragments.tsx +8 -0
- package/src/lib/index.ts +5 -5
- package/src/lib/providers/auth.tsx +12 -9
- package/src/lib/providers/channel-provider.tsx +1 -0
- package/src/lib/providers/server-config.tsx +7 -1
- package/src/lib/providers/user-settings.tsx +24 -0
- package/vite/utils/ast-utils.spec.ts +128 -0
- package/vite/utils/ast-utils.ts +119 -0
- package/vite/utils/config-loader.ts +410 -0
- package/vite/{schema-generator.ts → utils/schema-generator.ts} +7 -1
- package/vite/{ui-config.ts → utils/ui-config.ts} +2 -2
- package/vite/vite-plugin-admin-api-schema.ts +2 -2
- package/vite/vite-plugin-config-loader.ts +25 -13
- package/vite/vite-plugin-dashboard-metadata.ts +19 -15
- package/vite/vite-plugin-gql-tada.ts +2 -2
- package/vite/vite-plugin-ui-config.ts +3 -2
- package/dist/plugin/config-loader.js +0 -141
- package/src/lib/components/shared/asset-preview.tsx +0 -345
- package/vite/config-loader.ts +0 -181
- /package/dist/plugin/{ui-config.d.ts → utils/ui-config.d.ts} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { assetFragment } from '@/graphql/fragments.js';
|
|
1
|
+
import { assetFragment, errorResultFragment } from '@/graphql/fragments.js';
|
|
2
2
|
import { graphql } from '@/graphql/graphql.js';
|
|
3
3
|
import { gql } from 'awesome-graphql-client';
|
|
4
4
|
|
|
@@ -163,6 +163,7 @@ export const orderLineFragment = graphql(
|
|
|
163
163
|
linePriceWithTax
|
|
164
164
|
discountedLinePrice
|
|
165
165
|
discountedLinePriceWithTax
|
|
166
|
+
customFields
|
|
166
167
|
}
|
|
167
168
|
`,
|
|
168
169
|
[assetFragment],
|
|
@@ -214,6 +215,7 @@ export const orderDetailFragment = graphql(
|
|
|
214
215
|
promotions {
|
|
215
216
|
id
|
|
216
217
|
couponCode
|
|
218
|
+
name
|
|
217
219
|
}
|
|
218
220
|
subTotal
|
|
219
221
|
subTotalWithTax
|
|
@@ -323,3 +325,187 @@ export const orderHistoryDocument = graphql(`
|
|
|
323
325
|
}
|
|
324
326
|
}
|
|
325
327
|
`);
|
|
328
|
+
|
|
329
|
+
export const createDraftOrderDocument = graphql(`
|
|
330
|
+
mutation CreateDraftOrder {
|
|
331
|
+
createDraftOrder {
|
|
332
|
+
id
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
`);
|
|
336
|
+
|
|
337
|
+
export const deleteDraftOrderDocument = graphql(`
|
|
338
|
+
mutation DeleteDraftOrder($orderId: ID!) {
|
|
339
|
+
deleteDraftOrder(orderId: $orderId) {
|
|
340
|
+
result
|
|
341
|
+
message
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
`);
|
|
345
|
+
|
|
346
|
+
export const addItemToDraftOrderDocument = graphql(
|
|
347
|
+
`
|
|
348
|
+
mutation AddItemToDraftOrder($orderId: ID!, $input: AddItemToDraftOrderInput!) {
|
|
349
|
+
addItemToDraftOrder(orderId: $orderId, input: $input) {
|
|
350
|
+
__typename
|
|
351
|
+
... on Order {
|
|
352
|
+
id
|
|
353
|
+
}
|
|
354
|
+
...ErrorResult
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
`,
|
|
358
|
+
[errorResultFragment],
|
|
359
|
+
);
|
|
360
|
+
|
|
361
|
+
export const adjustDraftOrderLineDocument = graphql(
|
|
362
|
+
`
|
|
363
|
+
mutation AdjustDraftOrderLine($orderId: ID!, $input: AdjustDraftOrderLineInput!) {
|
|
364
|
+
adjustDraftOrderLine(orderId: $orderId, input: $input) {
|
|
365
|
+
__typename
|
|
366
|
+
... on Order {
|
|
367
|
+
id
|
|
368
|
+
}
|
|
369
|
+
...ErrorResult
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
`,
|
|
373
|
+
[errorResultFragment],
|
|
374
|
+
);
|
|
375
|
+
|
|
376
|
+
export const removeDraftOrderLineDocument = graphql(
|
|
377
|
+
`
|
|
378
|
+
mutation RemoveDraftOrderLine($orderId: ID!, $orderLineId: ID!) {
|
|
379
|
+
removeDraftOrderLine(orderId: $orderId, orderLineId: $orderLineId) {
|
|
380
|
+
__typename
|
|
381
|
+
... on Order {
|
|
382
|
+
id
|
|
383
|
+
}
|
|
384
|
+
...ErrorResult
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
`,
|
|
388
|
+
[errorResultFragment],
|
|
389
|
+
);
|
|
390
|
+
|
|
391
|
+
export const setCustomerForDraftOrderDocument = graphql(
|
|
392
|
+
`
|
|
393
|
+
mutation SetCustomerForDraftOrder($orderId: ID!, $customerId: ID, $input: CreateCustomerInput) {
|
|
394
|
+
setCustomerForDraftOrder(orderId: $orderId, customerId: $customerId, input: $input) {
|
|
395
|
+
__typename
|
|
396
|
+
... on Order {
|
|
397
|
+
id
|
|
398
|
+
}
|
|
399
|
+
...ErrorResult
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
`,
|
|
403
|
+
[errorResultFragment],
|
|
404
|
+
);
|
|
405
|
+
|
|
406
|
+
export const setShippingAddressForDraftOrderDocument = graphql(`
|
|
407
|
+
mutation SetDraftOrderShippingAddress($orderId: ID!, $input: CreateAddressInput!) {
|
|
408
|
+
setDraftOrderShippingAddress(orderId: $orderId, input: $input) {
|
|
409
|
+
id
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
`);
|
|
413
|
+
|
|
414
|
+
export const setBillingAddressForDraftOrderDocument = graphql(`
|
|
415
|
+
mutation SetDraftOrderBillingAddress($orderId: ID!, $input: CreateAddressInput!) {
|
|
416
|
+
setDraftOrderBillingAddress(orderId: $orderId, input: $input) {
|
|
417
|
+
id
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
`);
|
|
421
|
+
|
|
422
|
+
export const unsetShippingAddressForDraftOrderDocument = graphql(`
|
|
423
|
+
mutation UnsetDraftOrderShippingAddress($orderId: ID!) {
|
|
424
|
+
unsetDraftOrderShippingAddress(orderId: $orderId) {
|
|
425
|
+
id
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
`);
|
|
429
|
+
|
|
430
|
+
export const unsetBillingAddressForDraftOrderDocument = graphql(`
|
|
431
|
+
mutation UnsetDraftOrderBillingAddress($orderId: ID!) {
|
|
432
|
+
unsetDraftOrderBillingAddress(orderId: $orderId) {
|
|
433
|
+
id
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
`);
|
|
437
|
+
|
|
438
|
+
export const applyCouponCodeToDraftOrderDocument = graphql(
|
|
439
|
+
`
|
|
440
|
+
mutation ApplyCouponCodeToDraftOrder($orderId: ID!, $couponCode: String!) {
|
|
441
|
+
applyCouponCodeToDraftOrder(orderId: $orderId, couponCode: $couponCode) {
|
|
442
|
+
__typename
|
|
443
|
+
... on Order {
|
|
444
|
+
id
|
|
445
|
+
}
|
|
446
|
+
...ErrorResult
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
`,
|
|
450
|
+
[errorResultFragment],
|
|
451
|
+
);
|
|
452
|
+
|
|
453
|
+
export const removeCouponCodeFromDraftOrderDocument = graphql(`
|
|
454
|
+
mutation RemoveCouponCodeFromDraftOrder($orderId: ID!, $couponCode: String!) {
|
|
455
|
+
removeCouponCodeFromDraftOrder(orderId: $orderId, couponCode: $couponCode) {
|
|
456
|
+
id
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
`);
|
|
460
|
+
|
|
461
|
+
export const draftOrderEligibleShippingMethodsDocument = graphql(`
|
|
462
|
+
query DraftOrderEligibleShippingMethods($orderId: ID!) {
|
|
463
|
+
eligibleShippingMethodsForDraftOrder(orderId: $orderId) {
|
|
464
|
+
id
|
|
465
|
+
name
|
|
466
|
+
code
|
|
467
|
+
description
|
|
468
|
+
price
|
|
469
|
+
priceWithTax
|
|
470
|
+
metadata
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
`);
|
|
474
|
+
|
|
475
|
+
export const setDraftOrderShippingMethodDocument = graphql(
|
|
476
|
+
`
|
|
477
|
+
mutation SetDraftOrderShippingMethod($orderId: ID!, $shippingMethodId: ID!) {
|
|
478
|
+
setDraftOrderShippingMethod(orderId: $orderId, shippingMethodId: $shippingMethodId) {
|
|
479
|
+
__typename
|
|
480
|
+
... on Order {
|
|
481
|
+
id
|
|
482
|
+
}
|
|
483
|
+
...ErrorResult
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
`,
|
|
487
|
+
[errorResultFragment],
|
|
488
|
+
);
|
|
489
|
+
|
|
490
|
+
export const setDraftOrderCustomFieldsDocument = graphql(`
|
|
491
|
+
mutation SetDraftOrderCustomFields($orderId: ID!, $input: UpdateOrderInput!) {
|
|
492
|
+
setDraftOrderCustomFields(orderId: $orderId, input: $input) {
|
|
493
|
+
id
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
`);
|
|
497
|
+
|
|
498
|
+
export const transitionOrderToStateDocument = graphql(
|
|
499
|
+
`
|
|
500
|
+
mutation TransitionOrderToState($id: ID!, $state: String!) {
|
|
501
|
+
transitionOrderToState(id: $id, state: $state) {
|
|
502
|
+
__typename
|
|
503
|
+
... on Order {
|
|
504
|
+
id
|
|
505
|
+
}
|
|
506
|
+
...ErrorResult
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
`,
|
|
510
|
+
[errorResultFragment],
|
|
511
|
+
);
|
|
@@ -4,9 +4,14 @@ import { Badge } from '@/components/ui/badge.js';
|
|
|
4
4
|
import { Button } from '@/components/ui/button.js';
|
|
5
5
|
import { ListPage } from '@/framework/page/list-page.js';
|
|
6
6
|
import { Trans } from '@/lib/trans.js';
|
|
7
|
-
import { createFileRoute, Link } from '@tanstack/react-router';
|
|
8
|
-
import { orderListDocument } from './orders.graphql.js';
|
|
7
|
+
import { createFileRoute, Link, useNavigate } from '@tanstack/react-router';
|
|
8
|
+
import { createDraftOrderDocument, orderListDocument } from './orders.graphql.js';
|
|
9
9
|
import { useServerConfig } from '@/hooks/use-server-config.js';
|
|
10
|
+
import { PageActionBarRight } from '@/framework/layout-engine/page-layout.js';
|
|
11
|
+
import { PlusIcon } from 'lucide-react';
|
|
12
|
+
import { useMutation } from '@tanstack/react-query';
|
|
13
|
+
import { api } from '@/graphql/api.js';
|
|
14
|
+
import { ResultOf } from '@/graphql/graphql.js';
|
|
10
15
|
|
|
11
16
|
export const Route = createFileRoute('/_authenticated/_orders/orders')({
|
|
12
17
|
component: OrderListPage,
|
|
@@ -15,30 +20,39 @@ export const Route = createFileRoute('/_authenticated/_orders/orders')({
|
|
|
15
20
|
|
|
16
21
|
function OrderListPage() {
|
|
17
22
|
const serverConfig = useServerConfig();
|
|
23
|
+
const navigate = useNavigate();
|
|
24
|
+
const { mutate: createDraftOrder } = useMutation({
|
|
25
|
+
mutationFn: api.mutate(createDraftOrderDocument),
|
|
26
|
+
onSuccess: (result: ResultOf<typeof createDraftOrderDocument>) => {
|
|
27
|
+
navigate({ to: '/orders/draft/$id', params: { id: result.createDraftOrder.id } });
|
|
28
|
+
}
|
|
29
|
+
})
|
|
18
30
|
return (
|
|
19
31
|
<ListPage
|
|
20
32
|
pageId="order-list"
|
|
21
33
|
title="Orders"
|
|
22
34
|
onSearchTermChange={searchTerm => {
|
|
23
35
|
return {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
36
|
+
_or: [
|
|
37
|
+
{
|
|
38
|
+
code: {
|
|
39
|
+
contains: searchTerm,
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
customerLastName: {
|
|
44
|
+
contains: searchTerm,
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
transactionId: {
|
|
49
|
+
contains: searchTerm,
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
],
|
|
33
53
|
};
|
|
34
54
|
}}
|
|
35
55
|
defaultSort={[{ id: 'orderPlacedAt', desc: true }]}
|
|
36
|
-
transformVariables={variables => {
|
|
37
|
-
return {
|
|
38
|
-
...variables,
|
|
39
|
-
filterOperator: 'OR',
|
|
40
|
-
};
|
|
41
|
-
}}
|
|
42
56
|
listQuery={orderListDocument}
|
|
43
57
|
route={Route}
|
|
44
58
|
customizeColumns={{
|
|
@@ -115,6 +129,13 @@ function OrderListPage() {
|
|
|
115
129
|
}) ?? [],
|
|
116
130
|
},
|
|
117
131
|
}}
|
|
118
|
-
|
|
132
|
+
>
|
|
133
|
+
<PageActionBarRight>
|
|
134
|
+
<Button onClick={() => createDraftOrder({})}>
|
|
135
|
+
<PlusIcon className="mr-2 h-4 w-4" />
|
|
136
|
+
<Trans>Draft order</Trans>
|
|
137
|
+
</Button>
|
|
138
|
+
</PageActionBarRight>
|
|
139
|
+
</ListPage>
|
|
119
140
|
);
|
|
120
141
|
}
|
|
@@ -2,6 +2,7 @@ import { ErrorPage } from '@/components/shared/error-page.js';
|
|
|
2
2
|
import { PermissionGuard } from '@/components/shared/permission-guard.js';
|
|
3
3
|
import { Badge } from '@/components/ui/badge.js';
|
|
4
4
|
import { Button } from '@/components/ui/button.js';
|
|
5
|
+
import { addCustomFields } from '@/framework/document-introspection/add-custom-fields.js';
|
|
5
6
|
import {
|
|
6
7
|
CustomFieldsPageBlock,
|
|
7
8
|
Page,
|
|
@@ -11,10 +12,10 @@ import {
|
|
|
11
12
|
PageLayout,
|
|
12
13
|
PageTitle,
|
|
13
14
|
} from '@/framework/layout-engine/page-layout.js';
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
15
|
+
import { getDetailQueryOptions, useDetailPage } from '@/framework/page/use-detail-page.js';
|
|
16
|
+
import { ResultOf } from '@/graphql/graphql.js';
|
|
16
17
|
import { Trans, useLingui } from '@/lib/trans.js';
|
|
17
|
-
import { Link, createFileRoute } from '@tanstack/react-router';
|
|
18
|
+
import { Link, createFileRoute, redirect } from '@tanstack/react-router';
|
|
18
19
|
import { User } from 'lucide-react';
|
|
19
20
|
import { toast } from 'sonner';
|
|
20
21
|
import { OrderAddress } from './components/order-address.js';
|
|
@@ -26,12 +27,33 @@ import { orderDetailDocument } from './orders.graphql.js';
|
|
|
26
27
|
|
|
27
28
|
export const Route = createFileRoute('/_authenticated/_orders/orders_/$id')({
|
|
28
29
|
component: OrderDetailPage,
|
|
29
|
-
loader:
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
loader: async ({
|
|
31
|
+
context,
|
|
32
|
+
params,
|
|
33
|
+
}) => {
|
|
34
|
+
if (!params.id) {
|
|
35
|
+
throw new Error('ID param is required');
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const result: ResultOf<typeof orderDetailDocument> = await context.queryClient.ensureQueryData(
|
|
39
|
+
getDetailQueryOptions(addCustomFields(orderDetailDocument), { id: params.id }),
|
|
40
|
+
{ id: params.id },
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
if (!result.order) {
|
|
44
|
+
throw new Error(`Order with the ID ${params.id} was not found`);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (result.order.state === 'Draft') {
|
|
48
|
+
throw redirect({
|
|
49
|
+
to: `/orders/draft/${params.id}`,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return {
|
|
54
|
+
breadcrumb: [{ path: '/orders', label: 'Orders' }, result.order.code],
|
|
55
|
+
};
|
|
56
|
+
},
|
|
35
57
|
errorComponent: ({ error }) => <ErrorPage message={error.message} />,
|
|
36
58
|
});
|
|
37
59
|
|