mirror of
https://github.com/inventree/InvenTree.git
synced 2025-06-17 12:35:46 +00:00
[Plugin] Plugin context (#9439)
* Pass more stuff to window * Expose form functions to plugin context * Breaking: Render plugin component in context tree - Required due to createRoot function - Adds necessary context providers * Fix context * Provide MantineThemeContext * Bundle mantine/core * Hack for useNavigate within ApiForm - Errors out if called within plugin context - Workaround to catch the error * Update build cmd * Define config for building "Library" mode * Update package.json * Add basic index file * Factor out ApiEndpoints * factor out ModelType * Factor out role enums * Further refactoring * More refactoring * Cleanup * Expose apiUrl function * Add instance data to plugin context type def * Tweaks for loading plugin components - LanguageContext must be on the inside * Tweak StylishText * Externalize notifications system * Update lingui config * Add functions for checking plugin interface version * Extract package version at build time * Enhance version checking * Revert variable name change * Public package * Add README.md * adjust packge name * Adjust name to include org * Update project files * Add basic changelog info * Refactoring to expose URL functions * Refactor navigation functions * Update package and README * Improve navigateToLink function * Refactor stylish text - Move into ./lib - Do not require user state * Revert changes - StylishText throws error in plugin - Low priority, can work out later * expose function to refresh page index * Provide RemoteComponent with a method to reload itself * Bump version * Cleanup tests * Prevent duplicate --emptyOutDir arg * Tweak playwright tests * Expose role and permission enums * Fix imports * Updated docs * Fix spelling, typos, etc * Include more package version information * Expose more version context * Cleanup * Probably don't need hooks * Fix links * Docs updates * Fix links
This commit is contained in:
70
src/frontend/lib/functions/Navigation.tsx
Normal file
70
src/frontend/lib/functions/Navigation.tsx
Normal file
@ -0,0 +1,70 @@
|
||||
import type { NavigateFunction } from 'react-router-dom';
|
||||
import { ModelInformationDict } from '../enums/ModelInformation';
|
||||
import type { ModelType } from '../enums/ModelType';
|
||||
import { cancelEvent } from './Events';
|
||||
|
||||
export const getBaseUrl = (): string =>
|
||||
(window as any).INVENTREE_SETTINGS?.base_url || 'web';
|
||||
|
||||
/**
|
||||
* Returns the detail view URL for a given model type
|
||||
*/
|
||||
export function getDetailUrl(
|
||||
model: ModelType,
|
||||
pk: number | string,
|
||||
absolute?: boolean
|
||||
): string {
|
||||
const modelInfo = ModelInformationDict[model];
|
||||
|
||||
if (pk === undefined || pk === null) {
|
||||
return '';
|
||||
}
|
||||
|
||||
if (!!pk && modelInfo && modelInfo.url_detail) {
|
||||
const url = modelInfo.url_detail.replace(':pk', pk.toString());
|
||||
const base = getBaseUrl();
|
||||
|
||||
if (absolute && base) {
|
||||
return `/${base}${url}`;
|
||||
} else {
|
||||
return url;
|
||||
}
|
||||
}
|
||||
|
||||
console.error(`No detail URL found for model ${model} <${pk}>`);
|
||||
return '';
|
||||
}
|
||||
|
||||
/*
|
||||
* Navigate to a provided link.
|
||||
* - If the link is to be opened externally, open it in a new tab.
|
||||
* - Otherwise, navigate using the provided navigate function.
|
||||
*/
|
||||
export const navigateToLink = (
|
||||
link: string,
|
||||
navigate: NavigateFunction,
|
||||
event: any
|
||||
) => {
|
||||
cancelEvent(event);
|
||||
|
||||
const base = `/${getBaseUrl()}`;
|
||||
|
||||
if (event?.ctrlKey || event?.shiftKey) {
|
||||
// Open the link in a new tab
|
||||
let url = link;
|
||||
if (link.startsWith('/') && !link.startsWith(base)) {
|
||||
url = `${base}${link}`;
|
||||
}
|
||||
window.open(url, '_blank');
|
||||
} else {
|
||||
// Navigate internally
|
||||
let url = link;
|
||||
|
||||
if (link.startsWith(base)) {
|
||||
// Strip the base URL from the link
|
||||
url = link.replace(base, '');
|
||||
}
|
||||
|
||||
navigate(url);
|
||||
}
|
||||
};
|
Reference in New Issue
Block a user