import { DictionarySettingType, ExtensionSettingType, ExtensionSettingsManifest, NumberSettingType, SelectSettingType } from "@moonlight-mod/types/config"; import WebpackRequire from "@moonlight-mod/types/discord/require"; import { MoonbaseExtension } from "../types"; type SettingsProps = { ext: MoonbaseExtension; name: string; setting: ExtensionSettingsManifest; }; type SettingsComponent = React.ComponentType; export default (require: typeof WebpackRequire) => { const React = require("common_react"); const spacepack = require("spacepack_spacepack"); const CommonComponents = require("common_components"); const Flux = require("common_flux"); const { MoonbaseSettingsStore } = require("moonbase_stores") as ReturnType< typeof import("../stores")["stores"] >; function Boolean({ ext, name, setting }: SettingsProps) { const { FormSwitch } = CommonComponents; const { value, displayName } = Flux.useStateFromStores( [MoonbaseSettingsStore], () => { return { value: MoonbaseSettingsStore.getExtensionConfig( ext.id, name ), displayName: MoonbaseSettingsStore.getExtensionConfigName( ext.id, name ) }; }, [ext.id, name] ); return ( { MoonbaseSettingsStore.setExtensionConfig(ext.id, name, value); }} > {displayName} ); } function Number({ ext, name, setting }: SettingsProps) { const { Slider, ControlClasses } = CommonComponents; const { value, displayName } = Flux.useStateFromStores( [MoonbaseSettingsStore], () => { return { value: MoonbaseSettingsStore.getExtensionConfig(ext.id, name), displayName: MoonbaseSettingsStore.getExtensionConfigName( ext.id, name ) }; }, [ext.id, name] ); const castedSetting = setting as NumberSettingType; const min = castedSetting.min ?? 0; const max = castedSetting.max ?? 100; return (
{ const rounded = Math.max(min, Math.min(max, Math.round(value))); MoonbaseSettingsStore.setExtensionConfig(ext.id, name, rounded); }} />
); } function String({ ext, name, setting }: SettingsProps) { const { TextInput, ControlClasses } = CommonComponents; const { value, displayName } = Flux.useStateFromStores( [MoonbaseSettingsStore], () => { return { value: MoonbaseSettingsStore.getExtensionConfig(ext.id, name), displayName: MoonbaseSettingsStore.getExtensionConfigName( ext.id, name ) }; }, [ext.id, name] ); return (
{ MoonbaseSettingsStore.setExtensionConfig(ext.id, name, value); }} />
); } function Select({ ext, name, setting }: SettingsProps) { const { ControlClasses, SingleSelect } = CommonComponents; const { value, displayName } = Flux.useStateFromStores( [MoonbaseSettingsStore], () => { return { value: MoonbaseSettingsStore.getExtensionConfig(ext.id, name), displayName: MoonbaseSettingsStore.getExtensionConfigName( ext.id, name ) }; }, [ext.id, name] ); const castedSetting = setting as SelectSettingType; const options = castedSetting.options; return (
({ value: o, label: o }))} onChange={(value: string) => { MoonbaseSettingsStore.setExtensionConfig(ext.id, name, value); }} />
); } function List({ ext, name, setting }: SettingsProps) { const { ControlClasses, Select, useVariableSelect, multiSelect } = CommonComponents; const { value, displayName } = Flux.useStateFromStores( [MoonbaseSettingsStore], () => { return { value: MoonbaseSettingsStore.getExtensionConfig(ext.id, name) ?? [], displayName: MoonbaseSettingsStore.getExtensionConfigName( ext.id, name ) }; }, [ext.id, name] ); const castedSetting = setting as SelectSettingType; const options = castedSetting.options; return (