Allow caller to pass preview component

This commit is contained in:
Oliver Walters 2026-06-30 10:12:36 +00:00
parent 4c8c548770
commit 448d500665
3 changed files with 15 additions and 4 deletions

View File

@ -6,6 +6,7 @@ export default function GlobalPreviewDrawer() {
const modelType = usePreviewDrawerState((state) => state.modelType);
const id = usePreviewDrawerState((state) => state.id);
const instance = usePreviewDrawerState((state) => state.instance);
const preview = usePreviewDrawerState((state) => state.preview);
const closePreview = usePreviewDrawerState((state) => state.closePreview);
return (
@ -13,6 +14,7 @@ export default function GlobalPreviewDrawer() {
modelType={modelType}
id={id}
instance={instance}
preview={preview}
opened={isOpen}
onClose={closePreview}
/>

View File

@ -14,6 +14,7 @@ export default function PreviewDrawer({
id,
instance: providedInstance,
filters,
preview: providedPreview,
opened,
onClose
}: Readonly<{
@ -21,6 +22,7 @@ export default function PreviewDrawer({
id?: number | string;
instance?: any;
filters?: Record<string, any>;
preview?: PreviewType;
opened: boolean;
onClose: () => void;
}>) {
@ -43,6 +45,7 @@ export default function PreviewDrawer({
}, [providedInstance, fetchedInstance]);
const previewComponent: PreviewType | null = useMemo(() => {
if (providedPreview) return providedPreview;
if (!modelType || !modelInfo || id == null) return null;
const component: PreviewType | null = getPreviewComponentForModel({
@ -61,7 +64,7 @@ export default function PreviewDrawer({
}
return component;
}, [modelType, id, instance]);
}, [providedPreview, modelType, id, instance]);
return (
<Drawer

View File

@ -1,5 +1,6 @@
import type { ModelType } from '@lib/enums/ModelType';
import { ModelType } from '@lib/enums/ModelType';
import type { ReactNode } from 'react';
import { PartPreviewComponent } from './models/PartPreview';
export interface PreviewType {
preview: ReactNode;
@ -13,13 +14,18 @@ export type PreviewComponentProps = {
export type PreviewComponent = (props: PreviewComponentProps) => PreviewType;
export function getPreviewComponentForModel({
modelType
modelType,
instance,
modelId
}: {
modelType: ModelType;
instance: any;
modelId: number;
}): PreviewType | null {
switch (modelType) {
case ModelType.part:
return PartPreviewComponent({ instance, modelId });
default:
// Return null to indicate that this model type is not supported
return null;
}
}