import { ActionIcon, Button, Card, Group, Menu, MultiSelect, Switch, TextInput, useMantineColorScheme, } from '@mantine/core'; import { IconAdjustments } from '@tabler/icons'; import { motion } from 'framer-motion'; import { useState } from 'react'; import { useConfig } from '../tools/state'; import { IModule } from './ModuleTypes'; function getItems(module: IModule) { const { config, setConfig } = useConfig(); const items: JSX.Element[] = []; if (module.options) { const keys = Object.keys(module.options); const values = Object.values(module.options); // Get the value and the name of the option const types = values.map((v) => typeof v.value); // Loop over all the types with a for each loop types.forEach((type, index) => { const optionName = `${module.title}.${keys[index]}`; const moduleInConfig = config.modules?.[module.title]; if (type === 'object') { items.push( { setConfig({ ...config, modules: { ...config.modules, [module.title]: { ...moduleInConfig, options: { ...moduleInConfig?.options, [keys[index]]: { ...moduleInConfig?.options?.[keys[index]], value, }, }, }, }, }); }} /> ); } if (type === 'string') { items.push(
{ e.preventDefault(); setConfig({ ...config, modules: { ...config.modules, [module.title]: { ...config.modules[module.title], options: { ...config.modules[module.title].options, [keys[index]]: { ...config.modules[module.title].options?.[keys[index]], value: (e.target as any)[0].value, }, }, }, }, }); }} > {}} />
); } // TODO: Add support for other types if (type === 'boolean') { items.push( { setConfig({ ...config, modules: { ...config.modules, [module.title]: { ...config.modules[module.title], options: { ...config.modules[module.title].options, [keys[index]]: { ...config.modules[module.title].options?.[keys[index]], value: e.currentTarget.checked, }, }, }, }, }); }} label={values[index].name} /> ); } }); } return items; } export function ModuleWrapper(props: any) { const { module }: { module: IModule } = props; const { colorScheme } = useMantineColorScheme(); const { config, setConfig } = useConfig(); const enabledModules = config.modules ?? {}; // Remove 'Module' from enabled modules titles const isShown = enabledModules[module.title]?.enabled ?? false; //TODO: fix the hover problem const [hovering, setHovering] = useState(false); if (!isShown) { return null; } return ( ); } export function ModuleMenu(props: any) { const { module, styles, hovered } = props; const items: JSX.Element[] = getItems(module); return ( <> {module.options && ( Settings {items.map((item) => ( {item} ))} )} ); }