@vendure/dashboard 3.4.3-master-202509230228 → 3.4.3-master-202509240228
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/package.json +4 -4
- package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history-container.tsx +2 -2
- package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history-types.ts +5 -0
- package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history-utils.tsx +124 -0
- package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history.tsx +91 -59
- package/src/app/routes/_authenticated/_customers/components/customer-history/default-customer-history-components.tsx +176 -0
- package/src/app/routes/_authenticated/_customers/components/customer-history/index.ts +4 -2
- package/src/app/routes/_authenticated/_customers/customers.graphql.ts +2 -0
- package/src/app/routes/_authenticated/_orders/components/order-history/default-order-history-components.tsx +98 -0
- package/src/app/routes/_authenticated/_orders/components/order-history/order-history-container.tsx +9 -7
- package/src/app/routes/_authenticated/_orders/components/order-history/order-history-types.ts +5 -0
- package/src/app/routes/_authenticated/_orders/components/order-history/order-history-utils.tsx +173 -0
- package/src/app/routes/_authenticated/_orders/components/order-history/order-history.tsx +64 -408
- package/src/app/routes/_authenticated/_orders/orders.graphql.ts +4 -0
- package/src/lib/components/shared/history-timeline/history-note-entry.tsx +65 -0
- package/src/lib/components/shared/history-timeline/history-timeline-with-grouping.tsx +141 -0
- package/src/lib/components/shared/history-timeline/use-history-note-editor.ts +26 -0
- package/src/lib/framework/extension-api/define-dashboard-extension.ts +5 -0
- package/src/lib/framework/extension-api/extension-api-types.ts +7 -0
- package/src/lib/framework/extension-api/logic/history-entries.ts +24 -0
- package/src/lib/framework/extension-api/logic/index.ts +1 -0
- package/src/lib/framework/extension-api/types/history-entries.ts +120 -0
- package/src/lib/framework/extension-api/types/index.ts +1 -0
- package/src/lib/framework/history-entry/history-entry-extensions.ts +11 -0
- package/src/lib/framework/history-entry/history-entry.tsx +129 -0
- package/src/lib/framework/registry/registry-types.ts +2 -0
- package/src/lib/index.ts +5 -1
- package/src/lib/components/shared/history-timeline/history-entry.tsx +0 -188
package/src/app/routes/_authenticated/_orders/components/order-history/order-history-utils.tsx
ADDED
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { HistoryEntryItem } from '@/vdb/framework/extension-api/types/index.js';
|
|
2
|
+
import { Trans } from '@/vdb/lib/trans.js';
|
|
3
|
+
import {
|
|
4
|
+
ArrowRightToLine,
|
|
5
|
+
Ban,
|
|
6
|
+
CheckIcon,
|
|
7
|
+
CreditCardIcon,
|
|
8
|
+
Edit3,
|
|
9
|
+
SquarePen,
|
|
10
|
+
Truck,
|
|
11
|
+
UserX,
|
|
12
|
+
} from 'lucide-react';
|
|
13
|
+
import { OrderHistoryOrderDetail } from './order-history-types.js';
|
|
14
|
+
|
|
15
|
+
export function orderHistoryUtils(order: OrderHistoryOrderDetail) {
|
|
16
|
+
const getTimelineIcon = (entry: HistoryEntryItem) => {
|
|
17
|
+
switch (entry.type) {
|
|
18
|
+
case 'ORDER_PAYMENT_TRANSITION':
|
|
19
|
+
return <CreditCardIcon className="h-4 w-4" />;
|
|
20
|
+
case 'ORDER_REFUND_TRANSITION':
|
|
21
|
+
return <CreditCardIcon className="h-4 w-4" />;
|
|
22
|
+
case 'ORDER_NOTE':
|
|
23
|
+
return <SquarePen className="h-4 w-4" />;
|
|
24
|
+
case 'ORDER_STATE_TRANSITION':
|
|
25
|
+
if (entry.data.to === 'Delivered') {
|
|
26
|
+
return <CheckIcon className="h-4 w-4" />;
|
|
27
|
+
}
|
|
28
|
+
if (entry.data.to === 'Cancelled') {
|
|
29
|
+
return <Ban className="h-4 w-4" />;
|
|
30
|
+
}
|
|
31
|
+
return <ArrowRightToLine className="h-4 w-4" />;
|
|
32
|
+
case 'ORDER_FULFILLMENT_TRANSITION':
|
|
33
|
+
if (entry.data.to === 'Shipped' || entry.data.to === 'Delivered') {
|
|
34
|
+
return <Truck className="h-4 w-4" />;
|
|
35
|
+
}
|
|
36
|
+
return <ArrowRightToLine className="h-4 w-4" />;
|
|
37
|
+
case 'ORDER_FULFILLMENT':
|
|
38
|
+
return <Truck className="h-4 w-4" />;
|
|
39
|
+
case 'ORDER_MODIFIED':
|
|
40
|
+
return <Edit3 className="h-4 w-4" />;
|
|
41
|
+
case 'ORDER_CUSTOMER_UPDATED':
|
|
42
|
+
return <UserX className="h-4 w-4" />;
|
|
43
|
+
case 'ORDER_CANCELLATION':
|
|
44
|
+
return <Ban className="h-4 w-4" />;
|
|
45
|
+
default:
|
|
46
|
+
return <CheckIcon className="h-4 w-4" />;
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const getTitle = (entry: HistoryEntryItem) => {
|
|
51
|
+
switch (entry.type) {
|
|
52
|
+
case 'ORDER_PAYMENT_TRANSITION':
|
|
53
|
+
if (entry.data.to === 'Settled') {
|
|
54
|
+
return <Trans>Payment settled</Trans>;
|
|
55
|
+
}
|
|
56
|
+
if (entry.data.to === 'Authorized') {
|
|
57
|
+
return <Trans>Payment authorized</Trans>;
|
|
58
|
+
}
|
|
59
|
+
if (entry.data.to === 'Declined' || entry.data.to === 'Cancelled') {
|
|
60
|
+
return <Trans>Payment failed</Trans>;
|
|
61
|
+
}
|
|
62
|
+
return <Trans>Payment transitioned</Trans>;
|
|
63
|
+
case 'ORDER_REFUND_TRANSITION':
|
|
64
|
+
if (entry.data.to === 'Settled') {
|
|
65
|
+
return <Trans>Refund settled</Trans>;
|
|
66
|
+
}
|
|
67
|
+
return <Trans>Refund transitioned</Trans>;
|
|
68
|
+
case 'ORDER_NOTE':
|
|
69
|
+
return <Trans>Note added</Trans>;
|
|
70
|
+
case 'ORDER_STATE_TRANSITION': {
|
|
71
|
+
if (entry.data.from === 'Created') {
|
|
72
|
+
return <Trans>Order placed</Trans>;
|
|
73
|
+
}
|
|
74
|
+
if (entry.data.to === 'Delivered') {
|
|
75
|
+
return <Trans>Order fulfilled</Trans>;
|
|
76
|
+
}
|
|
77
|
+
if (entry.data.to === 'Cancelled') {
|
|
78
|
+
return <Trans>Order cancelled</Trans>;
|
|
79
|
+
}
|
|
80
|
+
if (entry.data.to === 'Shipped') {
|
|
81
|
+
return <Trans>Order shipped</Trans>;
|
|
82
|
+
}
|
|
83
|
+
return <Trans>Order transitioned</Trans>;
|
|
84
|
+
}
|
|
85
|
+
case 'ORDER_FULFILLMENT_TRANSITION':
|
|
86
|
+
if (entry.data.to === 'Shipped') {
|
|
87
|
+
return <Trans>Order shipped</Trans>;
|
|
88
|
+
}
|
|
89
|
+
if (entry.data.to === 'Delivered') {
|
|
90
|
+
return <Trans>Order delivered</Trans>;
|
|
91
|
+
}
|
|
92
|
+
return <Trans>Fulfillment transitioned</Trans>;
|
|
93
|
+
case 'ORDER_FULFILLMENT':
|
|
94
|
+
return <Trans>Fulfillment created</Trans>;
|
|
95
|
+
case 'ORDER_MODIFIED':
|
|
96
|
+
return <Trans>Order modified</Trans>;
|
|
97
|
+
case 'ORDER_CUSTOMER_UPDATED':
|
|
98
|
+
return <Trans>Customer updated</Trans>;
|
|
99
|
+
case 'ORDER_CANCELLATION':
|
|
100
|
+
return <Trans>Order cancelled</Trans>;
|
|
101
|
+
default:
|
|
102
|
+
return <Trans>{entry.type.replace(/_/g, ' ').toLowerCase()}</Trans>;
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
const getIconColor = ({ type, data }: HistoryEntryItem) => {
|
|
107
|
+
const success = 'bg-success text-success-foreground';
|
|
108
|
+
const destructive = 'bg-danger text-danger-foreground';
|
|
109
|
+
const regular = 'bg-muted text-muted-foreground';
|
|
110
|
+
|
|
111
|
+
if (type === 'ORDER_PAYMENT_TRANSITION' && data.to === 'Settled') {
|
|
112
|
+
return success;
|
|
113
|
+
}
|
|
114
|
+
if (type === 'ORDER_STATE_TRANSITION' && data.to === 'Delivered') {
|
|
115
|
+
return success;
|
|
116
|
+
}
|
|
117
|
+
if (type === 'ORDER_FULFILLMENT_TRANSITION' && data.to === 'Delivered') {
|
|
118
|
+
return success;
|
|
119
|
+
}
|
|
120
|
+
if (type === 'ORDER_CANCELLATION') {
|
|
121
|
+
return destructive;
|
|
122
|
+
}
|
|
123
|
+
if (type === 'ORDER_STATE_TRANSITION' && data.to === 'Cancelled') {
|
|
124
|
+
return destructive;
|
|
125
|
+
}
|
|
126
|
+
if (type === 'ORDER_PAYMENT_TRANSITION' && (data.to === 'Declined' || data.to === 'Cancelled')) {
|
|
127
|
+
return destructive;
|
|
128
|
+
}
|
|
129
|
+
return regular;
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
const getActorName = (entry: HistoryEntryItem) => {
|
|
133
|
+
if (entry.administrator) {
|
|
134
|
+
return `${entry.administrator.firstName} ${entry.administrator.lastName}`;
|
|
135
|
+
} else if (order?.customer) {
|
|
136
|
+
return `${order.customer.firstName} ${order.customer.lastName}`;
|
|
137
|
+
}
|
|
138
|
+
return '';
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
const isPrimaryEvent = (entry: HistoryEntryItem) => {
|
|
142
|
+
switch (entry.type) {
|
|
143
|
+
case 'ORDER_STATE_TRANSITION':
|
|
144
|
+
return (
|
|
145
|
+
entry.data.to === 'Delivered' ||
|
|
146
|
+
entry.data.to === 'Cancelled' ||
|
|
147
|
+
entry.data.to === 'Settled' ||
|
|
148
|
+
entry.data.from === 'Created'
|
|
149
|
+
);
|
|
150
|
+
case 'ORDER_REFUND_TRANSITION':
|
|
151
|
+
return entry.data.to === 'Settled';
|
|
152
|
+
case 'ORDER_PAYMENT_TRANSITION':
|
|
153
|
+
return entry.data.to === 'Settled' || entry.data.to === 'Cancelled';
|
|
154
|
+
case 'ORDER_FULFILLMENT_TRANSITION':
|
|
155
|
+
return entry.data.to === 'Delivered' || entry.data.to === 'Shipped';
|
|
156
|
+
case 'ORDER_NOTE':
|
|
157
|
+
case 'ORDER_MODIFIED':
|
|
158
|
+
case 'ORDER_CUSTOMER_UPDATED':
|
|
159
|
+
case 'ORDER_CANCELLATION':
|
|
160
|
+
return true;
|
|
161
|
+
default:
|
|
162
|
+
return false; // All other events are secondary
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
return {
|
|
167
|
+
getTimelineIcon,
|
|
168
|
+
getTitle,
|
|
169
|
+
getIconColor,
|
|
170
|
+
getActorName,
|
|
171
|
+
isPrimaryEvent,
|
|
172
|
+
};
|
|
173
|
+
}
|