diff --git a/src/components/Map/Drawer/AvailablePluginsDrawer/AvailablePluginsDrawer.constants.ts b/src/components/Map/Drawer/AvailablePluginsDrawer/AvailablePluginsDrawer.constants.ts index e628e141901704881c7243aea0324512518107ad..f1d6a4e7d0428ea00bfb30743dceb9a635403534 100644 --- a/src/components/Map/Drawer/AvailablePluginsDrawer/AvailablePluginsDrawer.constants.ts +++ b/src/components/Map/Drawer/AvailablePluginsDrawer/AvailablePluginsDrawer.constants.ts @@ -1 +1,2 @@ export const PLUGIN_LOADING_ERROR_PREFIX = 'Failed to load plugin'; +export const PLUGIN_LOADING_TWICE_ERROR = 'Plugin cannot be loaded more than once'; diff --git a/src/components/Map/Drawer/AvailablePluginsDrawer/LoadPluginFromUrl/hooks/useLoadPluginFromUrl.ts b/src/components/Map/Drawer/AvailablePluginsDrawer/LoadPluginFromUrl/hooks/useLoadPluginFromUrl.ts index 5616dca84f7348306ded4a590f3de408146666f4..f6d45309a0562cb8971e4dc4504984bcfebb52f0 100644 --- a/src/components/Map/Drawer/AvailablePluginsDrawer/LoadPluginFromUrl/hooks/useLoadPluginFromUrl.ts +++ b/src/components/Map/Drawer/AvailablePluginsDrawer/LoadPluginFromUrl/hooks/useLoadPluginFromUrl.ts @@ -1,10 +1,14 @@ import { PluginsManager } from '@/services/pluginsManager'; import axios from 'axios'; import { ChangeEvent, useMemo, useState, KeyboardEvent } from 'react'; -import { ENTER_KEY_CODE } from '@/constants/common'; +import { ENTER_KEY_CODE, ZERO } from '@/constants/common'; import { showToast } from '@/utils/showToast'; import { getErrorMessage } from '@/utils/getErrorMessage'; -import { PLUGIN_LOADING_ERROR_PREFIX } from '../../AvailablePluginsDrawer.constants'; +import md5 from 'crypto-js/md5'; +import { + PLUGIN_LOADING_ERROR_PREFIX, + PLUGIN_LOADING_TWICE_ERROR, +} from '../../AvailablePluginsDrawer.constants'; type UseLoadPluginReturnType = { handleChangePluginUrl: (event: ChangeEvent<HTMLInputElement>) => void; @@ -29,6 +33,20 @@ export const useLoadPluginFromUrl = (): UseLoadPluginReturnType => { const response = await axios(pluginUrl); let pluginScript = response.data; + const hash = md5(pluginScript).toString(); + + if ( + Array.isArray(PluginsManager.activePlugins[hash]) && + PluginsManager.activePlugins[hash].length > ZERO + ) { + setIsLoading(false); + showToast({ + type: 'error', + message: PLUGIN_LOADING_TWICE_ERROR, + }); + return; + } + PluginsManager.setHashedPlugin({ pluginUrl, pluginScript,