Allow plugins to interact

This commit is contained in:
Oliver Walters 2026-06-08 04:50:52 +00:00
parent 8b7b00b7cb
commit c7299e2ad8
2 changed files with 18 additions and 0 deletions

View File

@ -69,6 +69,12 @@ export type ImporterDrawerContext = {
sessionId: () => number | null;
};
export type PreviewDrawerContext = {
open: (modelType: ModelType, instance: any) => void;
close: () => void;
isOpen: () => boolean;
};
/**
* A set of properties which are passed to a plugin,
* for rendering an element in the user interface.
@ -90,6 +96,7 @@ export type ImporterDrawerContext = {
* @param forms - A set of functions for opening various API forms (see ../components/Forms.tsx)
* @param tables - A set of functions for rendering API tables
* @param importer - A set of functions for controlling the global importer drawer (see ../components/importer/GlobalImporterDrawer.tsx)
* @param preview - A set of functions for controlling the global preview drawer (see ../components/previews/GlobalPreviewDrawer.tsx)
* @param model - The model type associated with the rendered component (if applicable)
* @param id - The ID (primary key) of the model instance for the plugin (if applicable)
* @param instance - The model instance data (if available)
@ -125,6 +132,7 @@ export type InvenTreePluginContext = {
};
tables: InvenTreeTablesContext<any>;
importer: ImporterDrawerContext;
preview: PreviewDrawerContext;
model?: ModelType | string;
id?: string | number | null;
instance?: any;

View File

@ -46,6 +46,11 @@ import {
openGlobalImporter
} from '../../states/ImporterState';
import { usePluginState } from '../../states/PluginState';
import {
closeGlobalPreview,
getGlobalPreviewState,
openGlobalPreview
} from '../../states/PreviewDrawerState';
import { useServerApiState } from '../../states/ServerApiState';
import { InvenTreeTableInternal } from '../../tables/InvenTreeTable';
import { EditApiForm } from '../forms/ApiForm';
@ -97,6 +102,11 @@ export const useInvenTreeContext = () => {
isOpen: () => getGlobalImporterState().isOpen,
sessionId: () => getGlobalImporterState().sessionId
},
preview: {
open: (modelType, instance) => openGlobalPreview(modelType, instance),
close: () => closeGlobalPreview(),
isOpen: () => getGlobalPreviewState().isOpen
},
tables: {
renderTable: (props: InvenTreeTableRenderProps<any>) => (
<InvenTreeTableInternal