import { memo, useEffect, useState } from 'react' import { useAtomValue } from 'jotai' import LeftPanelContainer from '@/containers/LeftPanelContainer' import SettingItem from './SettingItem' import { extensionManager } from '@/extension' import { inActiveEngineProviderAtom } from '@/helpers/atoms/Extension.atom' import { janSettingScreenAtom } from '@/helpers/atoms/Setting.atom' const SettingLeftPanel = () => { const settingScreens = useAtomValue(janSettingScreenAtom) const inActiveEngineProvider = useAtomValue(inActiveEngineProviderAtom) const [extensionHasSettings, setExtensionHasSettings] = useState< { name?: string; setting: string }[] >([]) const [engineHasSettings, setEngineHasSettings] = useState< { name?: string; setting: string; provider: string }[] >([]) useEffect(() => { const getAllSettings = async () => { const extensionsMenu: { name?: string; setting: string }[] = [] const engineMenu: { name?: string setting: string provider: string }[] = [] const extensions = extensionManager.getAll() for (const extension of extensions) { const settings = await extension.getSettings() if ( typeof extension.getSettings === 'function' && 'provider' in extension && typeof extension.provider === 'string' ) { if ( (settings && settings.length > 0) || (await extension.installationState()) !== 'NotRequired' ) { engineMenu.push({ name: extension.productName, setting: extension.name, provider: 'provider' in extension && typeof extension.provider === 'string' ? extension.provider : '', }) } } else if (settings && settings.length > 0) { extensionsMenu.push({ name: extension.productName, setting: extension.name, }) } } setExtensionHasSettings(extensionsMenu) setEngineHasSettings(engineMenu) } getAllSettings() }, []) return (
{settingScreens.map((settingScreen) => ( ))} {engineHasSettings.filter( (x) => !inActiveEngineProvider.includes(x.provider) ).length > 0 && (
)} {engineHasSettings .sort((a, b) => a.provider.localeCompare(b.provider)) .filter((x) => !inActiveEngineProvider.includes(x.provider)) .map((item) => ( ))} {extensionHasSettings.length > 0 && (
)} {extensionHasSettings .sort((a, b) => String(a.name).localeCompare(String(b.name))) .map((item) => ( ))}
) } export default memo(SettingLeftPanel)