diff --git a/index.d.ts b/index.d.ts index c3017907f16a4d5eca4d73258c9f9cb82d77516d..a18511ed6103bc2f34f09197ea63794a7b7d1a96 100644 --- a/index.d.ts +++ b/index.d.ts @@ -50,6 +50,9 @@ declare global { ADMIN_PANEL_URL: string; }; + // plugins try to access those in the previous version of minerva + minervaDefine: typeof minervaDefine; + minerva: { configuration?: MinervaConfiguration; plugins: { diff --git a/src/components/Map/Drawer/AvailablePluginsDrawer/LoadPlugin/hooks/useLoadPlugin.ts b/src/components/Map/Drawer/AvailablePluginsDrawer/LoadPlugin/hooks/useLoadPlugin.ts index b718951da761b8fcddb8313d1d55a12302913efe..2277454af3e2ed561c7b53b705e7e418114ce35d 100644 --- a/src/components/Map/Drawer/AvailablePluginsDrawer/LoadPlugin/hooks/useLoadPlugin.ts +++ b/src/components/Map/Drawer/AvailablePluginsDrawer/LoadPlugin/hooks/useLoadPlugin.ts @@ -14,6 +14,7 @@ import { PluginsEventBus } from '@/services/pluginsManager/pluginsEventBus'; import { getErrorMessage } from '@/utils/getErrorMessage'; import { showToast } from '@/utils/showToast'; import axios from 'axios'; +import { PLUGIN_MINERVA_VERSION_NOT_SUPPORTED } from '@/redux/plugins/plugins.constants'; import { PLUGIN_LOADING_ERROR_PREFIX } from '../../AvailablePluginsDrawer.constants'; type UseLoadPluginReturnType = { @@ -74,11 +75,24 @@ export const useLoadPlugin = ({ onPluginLoaded(); } } catch (error) { - const errorMessage = getErrorMessage({ - error, - prefix: PLUGIN_LOADING_ERROR_PREFIX, - }); - showToast({ type: 'error', message: errorMessage }); + let message; + if (typeof error === 'string') { + message = error; + } else if (error instanceof Error) { + message = error.message; + } + if (message === PLUGIN_MINERVA_VERSION_NOT_SUPPORTED) { + showToast({ + type: 'error', + message: 'This minerva version is not supported by selected plugin', + }); + } else { + const errorMessage = getErrorMessage({ + error, + prefix: PLUGIN_LOADING_ERROR_PREFIX, + }); + showToast({ type: 'error', message: errorMessage }); + } } }; diff --git a/src/redux/plugins/plugins.constants.ts b/src/redux/plugins/plugins.constants.ts index 812e85036ae0588e93006646aa700663aa88c0f5..7ef2cf469ed02385750316eb9a55e34c17519560 100644 --- a/src/redux/plugins/plugins.constants.ts +++ b/src/redux/plugins/plugins.constants.ts @@ -18,4 +18,5 @@ export const PLUGINS_INITIAL_STATE: PluginsState = { export const PLUGIN_REGISTER_ERROR_PREFIX = 'Failed to register plugin'; export const PLUGIN_INIT_FETCHING_ERROR_PREFIX = 'Failed to initialize fetching plugin'; +export const PLUGIN_MINERVA_VERSION_NOT_SUPPORTED = 'Minerva version not supported'; export const PLUGIN_FETCHING_ALL_ERROR_PREFIX = 'Failed to fetch all plugins'; diff --git a/src/redux/plugins/plugins.thunks.ts b/src/redux/plugins/plugins.thunks.ts index 19dd2592d828443d2dd5ff52e41147d3ccc231a8..9a8e2888d966e95e3195b33027918c8d4a78c3b2 100644 --- a/src/redux/plugins/plugins.thunks.ts +++ b/src/redux/plugins/plugins.thunks.ts @@ -96,6 +96,7 @@ export const getInitPlugins = createAsyncThunk<void, GetInitPluginsProps, ThunkC if (isDataValid) { const { urls } = res.data; const scriptRes = await axios(urls[0]); + let pluginScript = scriptRes.data; setHashedPlugin({ pluginUrl: urls[0], pluginScript }); diff --git a/src/services/pluginsManager/map/minervaDefine.ts b/src/services/pluginsManager/map/minervaDefine.ts new file mode 100644 index 0000000000000000000000000000000000000000..148dd42399ceda69e4acb6c2f691e280e16e71e7 --- /dev/null +++ b/src/services/pluginsManager/map/minervaDefine.ts @@ -0,0 +1,5 @@ +import { PLUGIN_MINERVA_VERSION_NOT_SUPPORTED } from '@/redux/plugins/plugins.constants'; + +export const minervaDefine = (): void => { + throw new Error(PLUGIN_MINERVA_VERSION_NOT_SUPPORTED); +}; diff --git a/src/services/pluginsManager/pluginsManager.ts b/src/services/pluginsManager/pluginsManager.ts index e57eb85a342efc87b10029936a2c447a4ba57881..5653cd02418c7b740e21f545fa518d4ce3ecc58c 100644 --- a/src/services/pluginsManager/pluginsManager.ts +++ b/src/services/pluginsManager/pluginsManager.ts @@ -7,6 +7,7 @@ import { v4 as uuidv4 } from 'uuid'; import { isPluginHashWithPrefix } from '@/utils/plugins/isPluginHashWithPrefix'; import { getPluginHashWithoutPrefix } from '@/utils/plugins/getPluginHashWithoutPrefix'; import { ONE, ZERO } from '@/constants/common'; +import { minervaDefine } from '@/services/pluginsManager/map/minervaDefine'; import { bioEntitiesMethods } from './bioEntities'; import { getModels } from './map/models/getModels'; import { openMap } from './map/openMap'; @@ -68,6 +69,7 @@ export const PluginsManager: PluginsManagerType = { } }, init() { + window.minervaDefine = minervaDefine; window.minerva = { plugins: { registerPlugin: PluginsManager.registerPlugin,