HistoryEntries
DashboardHistoryEntryComponent
A definition of a custom component that will be used to render the given type of history entry.
Example
import { defineDashboardExtension, HistoryEntry } from '@vendure/dashboard';
import { IdCard } from 'lucide-react';
defineDashboardExtension({
historyEntries: [
{
type: 'CUSTOMER_TAX_ID_APPROVAL',
component: ({ entry, entity }) => {
return (
<HistoryEntry
entry={entry}
title={'Tax ID verified'}
timelineIconClassName={'bg-success text-success-foreground'}
timelineIcon={<IdCard />}
>
<div className="text-xs">Approval reference: {entry.data.ref}</div>
</HistoryEntry>
);
},
},
],
});
interface DashboardHistoryEntryComponent {
type: string;
component: React.ComponentType<{
entry: HistoryEntryItem;
entity: OrderHistoryOrderDetail | CustomerHistoryCustomerDetail;
}>;
}
type
string
The type
should correspond to a valid HistoryEntryType
, such as
CUSTOMER_REGISTERED
ORDER_STATE_TRANSITION
- some custom type - see the HistoryService docs for a guide on how to define custom history entry types.
component
React.ComponentType<{ entry: HistoryEntryItem; entity: OrderHistoryOrderDetail | CustomerHistoryCustomerDetail; }>
The component which is used to render the timeline entry. It should use the HistoryEntry component and pass the appropriate props to configure how it will be displayed.
The entity
prop will be a subset of the Order object for Order history entries,
or a subset of the Customer object for customer history entries.
HistoryEntryItem
This object contains the information about the history entry.
interface HistoryEntryItem {
id: string;
type: string;
createdAt: string;
isPublic: boolean;
administrator?: {
id: string;
firstName: string;
lastName: string;
} | null;
data: any;
}
id
string
type
string
The HistoryEntryType
, such as ORDER_STATE_TRANSITION
.
createdAt
string
isPublic
boolean
Whether this entry is visible to customers via the Shop API
administrator
{ id: string; firstName: string; lastName: string; } | null
If an Administrator created this entry, their details will be available here.
data
any
The entry payload data. This will be an object, which is different for each type of history entry.
For example, the CUSTOMER_ADDED_TO_GROUP
data looks like this:
{
groupName: 'Some Group',
}
and the ORDER_STATE_TRANSITION
data looks like this:
{
from: 'ArrangingPayment',
to: 'PaymentSettled',
}
HistoryEntryProps
The props for the HistoryEntry component.
interface HistoryEntryProps {
entry: HistoryEntryItem;
title: string | React.ReactNode;
timelineIcon?: React.ReactNode;
timelineIconClassName?: string;
actorName?: string;
children: React.ReactNode;
isPrimary?: boolean;
}
entry
The entry itself, which will get passed down to your custom component
title
string | React.ReactNode
The title of the entry
timelineIcon
React.ReactNode
An icon which is used to represent the entry. Note that this will only
display if isPrimary
is true
.
timelineIconClassName
string
Optional tailwind classes to apply to the icon. For instance
const success = 'bg-success text-success-foreground';
const destructive = 'bg-danger text-danger-foreground';
actorName
string
The name to display of "who did the action". For instance:
const getActorName = (entry: HistoryEntryItem) => {
if (entry.administrator) {
return `${entry.administrator.firstName} ${entry.administrator.lastName}`;
} else if (entity?.customer) {
return `${entity.customer.firstName} ${entity.customer.lastName}`;
}
return '';
};
children
React.ReactNode
isPrimary
boolean
When set to true
, the timeline entry will feature the specified icon and will not
be collapsible.
HistoryEntry
A component which is used to display a history entry in the order/customer history timeline.
function HistoryEntry(props: Readonly<HistoryEntryProps>): void
Parameters
props
Readonly<HistoryEntryProps>