import {
Button,
DataTableBulkActionItem,
defineDashboardExtension,
LogoMark,
usePage,
} from '@vendure/dashboard';
import { InfoIcon } from 'lucide-react';
import { toast } from 'sonner';
import {
BodyInputComponent,
ResponseDisplay,
ReviewMultiSelect,
ReviewSingleSelect,
ReviewStateSelect,
TextareaCustomField,
} from './custom-form-components';
import { CustomWidget } from './custom-widget';
import { reviewDetail } from './review-detail';
import { reviewList } from './review-list';
defineDashboardExtension({
login: {
logo: {
component: () => (
),
},
afterForm: {
component: () => (
),
},
loginImage: {
component: () => (
Custom Login Image
),
},
},
routes: [reviewList, reviewDetail],
widgets: [
{
id: 'custom-widget',
name: 'Custom Widget',
component: CustomWidget,
defaultSize: { w: 3, h: 3 },
},
],
actionBarItems: [
{
pageId: 'product-detail',
component: props => {
const page = usePage();
return (
);
},
},
],
pageBlocks: [
{
id: 'my-block',
component: ({ context }) => {
return Here is my custom block!
;
},
title: 'My Custom Block',
location: {
pageId: 'product-detail',
column: 'side',
position: { blockId: 'main-form', order: 'after' },
},
},
],
customFormComponents: {
customFields: [
{
id: 'textarea',
component: TextareaCustomField,
},
{
id: 'review-single-select',
component: ReviewSingleSelect,
},
{
id: 'review-multi-select',
component: ReviewMultiSelect,
},
],
},
detailForms: [
{
pageId: 'product-variant-detail',
// extendDetailDocument: `
// query {
// productVariant(id: $id) {
// stockOnHand
// product {
// facetValues {
// id
// name
// facet {
// code
// }
// }
// customFields {
// featuredReview {
// id
// productVariant {
// id
// name
// }
// product {
// name
// }
// }
// }
// }
// }
// }
// `,
},
{
pageId: 'review-detail',
inputs: [
{
blockId: 'main-form',
field: 'body',
component: BodyInputComponent,
},
{
blockId: 'main-form',
field: 'state',
component: ReviewStateSelect,
},
],
displays: [
{
blockId: 'main-form',
field: 'response',
component: ResponseDisplay,
},
],
},
],
dataTables: [
{
pageId: 'product-list',
bulkActions: [
{
component: props => (
{
console.log('Selection:', props.selection);
toast.message(`There are ${props.selection.length} selected items`);
}}
label="My Custom Action"
icon={InfoIcon}
/>
),
},
],
// extendListDocument: `
// query {
// products {
// items {
// customFields {
// featuredReview {
// id
// productVariant {
// id
// name
// }
// }
// }
// }
// }
// }
// `,
},
],
});