Allow caller to pass preview component
This commit is contained in:
parent
4c8c548770
commit
448d500665
|
|
@ -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}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue