'use client' import React from 'react' import { useEffect, useState } from 'react' import { motion as m } from 'framer-motion' import AppearanceOptions from './Appearance' import PluginCatalog from './CorePlugins/PluginsCatalog' import PreferencePlugins from './CorePlugins/PreferencePlugins' import { preferences } from '@janhq/core' import { twMerge } from 'tailwind-merge' import { formatPluginsName } from '@utils/converter' import { extensionPoints } from '@plugin' import Advanced from './Advanced' const SettingsScreen = () => { const [activeStaticMenu, setActiveStaticMenu] = useState('Appearance') const [preferenceItems, setPreferenceItems] = useState([]) const [preferenceValues, setPreferenceValues] = useState([]) const [menus, setMenus] = useState([]) useEffect(() => { const menu = ['Appearance'] if (typeof window !== 'undefined' && window.electronAPI) { menu.push('Core Plugins') } menu.push('Advanced') setMenus(menu) }, []) /** * Fetches the active plugins and their preferences from the `plugins` and `preferences` modules. * If the `experimentComponent` extension point is available, it executes the extension point and * appends the returned components to the `experimentRef` element. * If the `PluginPreferences` extension point is available, it executes the extension point and * fetches the preferences for each plugin using the `preferences.get` function. */ useEffect(() => { const getActivePluginPreferences = async () => { if (extensionPoints.get('PluginPreferences')) { const data = await Promise.all( extensionPoints.execute('PluginPreferences', {}) ) setPreferenceItems(Array.isArray(data) ? data : []) Promise.all( (Array.isArray(data) ? data : []).map((e) => preferences .get(e.pluginName, e.preferenceKey) .then((k) => ({ key: e.preferenceKey, value: k })) ) ).then((data) => { setPreferenceValues(data) }) } } getActivePluginPreferences() }, []) const preferencePlugins = preferenceItems .map((x) => x.pluginName) .filter((x, i) => { return preferenceItems.map((x) => x.pluginName).indexOf(x) === i }) const [activePreferencePlugin, setActivePreferencePlugin] = useState( preferencePlugins[0] ) const handleShowOptions = (menu: string) => { switch (menu) { case 'Core Plugins': return case 'Appearance': return case 'Advanced': return default: return ( ) } } return (

Settings

Manage your account settings

{menus.map((menu, i) => { const isActive = activeStaticMenu === menu return (
{isActive ? ( ) : null}
) })}
{preferencePlugins.length > 0 && ( )}
{preferencePlugins.map((menu, i) => { const isActive = activePreferencePlugin === menu return (
{isActive ? ( ) : null}
) })}
{handleShowOptions(activeStaticMenu || activePreferencePlugin)}
) } export default SettingsScreen