diff --git a/src/frontend/lib/types/Plugins.tsx b/src/frontend/lib/types/Plugins.tsx index bf8bc48c59..f5c9255b41 100644 --- a/src/frontend/lib/types/Plugins.tsx +++ b/src/frontend/lib/types/Plugins.tsx @@ -70,7 +70,7 @@ export type ImporterDrawerContext = { }; export type PreviewDrawerContext = { - open: (modelType: ModelType, instance: any) => void; + open: (modelType: ModelType, id?: number, instance?: any) => void; close: () => void; isOpen: () => boolean; }; diff --git a/src/frontend/src/components/plugins/PluginContext.tsx b/src/frontend/src/components/plugins/PluginContext.tsx index fac14d4626..c00ccb2ebc 100644 --- a/src/frontend/src/components/plugins/PluginContext.tsx +++ b/src/frontend/src/components/plugins/PluginContext.tsx @@ -103,7 +103,8 @@ export const useInvenTreeContext = () => { sessionId: () => getGlobalImporterState().sessionId }, preview: { - open: (modelType, instance) => openGlobalPreview(modelType, instance), + open: (modelType, id?, instance?) => + openGlobalPreview(modelType, id, instance), close: () => closeGlobalPreview(), isOpen: () => getGlobalPreviewState().isOpen }, diff --git a/src/frontend/src/components/previews/GlobalPreviewDrawer.tsx b/src/frontend/src/components/previews/GlobalPreviewDrawer.tsx index c926fef5a3..078d13a211 100644 --- a/src/frontend/src/components/previews/GlobalPreviewDrawer.tsx +++ b/src/frontend/src/components/previews/GlobalPreviewDrawer.tsx @@ -4,16 +4,18 @@ import PreviewDrawer from './PreviewDrawer'; export default function GlobalPreviewDrawer() { const isOpen = usePreviewDrawerState((state) => state.isOpen); const modelType = usePreviewDrawerState((state) => state.modelType); + const id = usePreviewDrawerState((state) => state.id); const instance = usePreviewDrawerState((state) => state.instance); const closePreview = usePreviewDrawerState((state) => state.closePreview); - if (!isOpen || instance === null) { + if (!isOpen || modelType === undefined || id === undefined) { return null; } return ( void; }>) { - const modelInfo = getModelInfo(instance.model); + const modelInfo = getModelInfo(modelType); + const apiEndpoint = ModelInformationDict[modelType].api_endpoint; + + const { instance: fetchedInstance, instanceQuery } = useInstance({ + endpoint: apiEndpoint, + pk: id, + hasPrimaryKey: true, + defaultValue: {}, + disabled: !!providedInstance + }); + + const instance = providedInstance ?? fetchedInstance; return ( - TODO - implement actual preview content - - } + title={{`${modelInfo.label} #${id}`}} opened={opened} onClose={onClose} withCloseButton > - {t`Preview for ${modelInfo.label} #${instance.pk}`} + {!instance && instanceQuery.isFetching ? ( + + ) : ( + {t`Preview for ${modelInfo.label} #${id}`} + )} ); diff --git a/src/frontend/src/states/PreviewDrawerState.tsx b/src/frontend/src/states/PreviewDrawerState.tsx index 9ff5574c7f..b079958d62 100644 --- a/src/frontend/src/states/PreviewDrawerState.tsx +++ b/src/frontend/src/states/PreviewDrawerState.tsx @@ -4,28 +4,40 @@ import { create } from 'zustand'; interface PreviewDrawerStateProps { isOpen: boolean; modelType?: ModelType; + id?: number; instance?: any; - openPreview: (modelType: ModelType, instance: any) => void; + openPreview: (modelType: ModelType, id: number, instance?: any) => void; closePreview: () => void; } export const usePreviewDrawerState = create()( (set) => ({ isOpen: false, - instance: null, + modelType: undefined, + id: undefined, + instance: undefined, - openPreview: (modelType: ModelType, instance: any) => { - set({ modelType, instance, isOpen: true }); + openPreview: (modelType: ModelType, id: number, instance?: any) => { + set({ modelType, id, instance, isOpen: true }); }, closePreview: () => { - set({ modelType: undefined, instance: null, isOpen: false }); + set({ + modelType: undefined, + id: undefined, + instance: undefined, + isOpen: false + }); } }) ); -export function openGlobalPreview(modelType: ModelType, instance: any) { - usePreviewDrawerState.getState().openPreview(modelType, instance); +export function openGlobalPreview( + modelType: ModelType, + id?: number, + instance?: any +) { + usePreviewDrawerState.getState().openPreview(modelType, id, instance); } export function closeGlobalPreview() {