Browse Source

Tree structure for presets

Malte Grimm 3 years ago
parent
commit
dd98112d39
  1. 33
      src/components/Dashboard.tsx
  2. 2
      src/components/UI/ConfigSelectButton.tsx
  3. 8
      src/core/stores/appStore.ts
  4. 2
      src/core/stores/deviceStore.ts

33
src/components/Dashboard.tsx

@ -127,21 +127,23 @@ const DeviceList = ({devices, rootConfig}: {devices: Device[], rootConfig: Confi
const ConfigList = ({rootConfig}: {rootConfig: ConfigPreset}) => { const ConfigList = ({rootConfig}: {rootConfig: ConfigPreset}) => {
const { setConfigPresetRoot, configPresetSelected, setConfigPresetSelected } = useAppStore(); const { configPresetRoot, setConfigPresetRoot, configPresetSelected, setConfigPresetSelected } = useAppStore();
const [dummyState, setDummyState] = useState(0);
return ( return (
<div className="flex flex-col rounded-md border border-dashed border-slate-200 h-1/2 p-3 mb-2 dark:border-slate-700"> <div className="flex flex-col rounded-md border border-dashed border-slate-200 h-1/2 p-3 mb-2 dark:border-slate-700">
<button <button
className="transition-all hover:text-accent mb-4" className="transition-all hover:text-accent mb-4"
onClick={() => { onClick={() => {
rootConfig?.children.push(new ConfigPreset(`Preset ${rootConfig.children.length}`, rootConfig.children[0])); const newPreset = new ConfigPreset(`Preset ${rootConfig.children.length}`, rootConfig.children[0].config);
setDummyState(dummyState + 1); configPresetSelected?.children.push(newPreset);
setConfigPresetRoot(Object.create(configPresetRoot));
setConfigPresetSelected(newPreset);
}} }}
> >
<PlusIcon/> <PlusIcon/>
</button> </button>
{rootConfig ? rootConfig.children.map((config, index) => { {rootConfig && <ConfigEntry config={rootConfig} configPresetSelected={configPresetSelected} setConfigPresetSelected={setConfigPresetSelected}/>}
{/* {rootConfig ? rootConfig.children.map((config, index) => {
return (<ConfigSelectButton return (<ConfigSelectButton
label={config.name} label={config.name}
active={index == configPresetSelected} active={index == configPresetSelected}
@ -149,12 +151,31 @@ const ConfigList = ({rootConfig}: {rootConfig: ConfigPreset}) => {
value={config.count} value={config.count}
onClick={() => setConfigPresetSelected(index)} onClick={() => setConfigPresetSelected(index)}
/>) />)
}) : <div/>} }) : <div/>} */}
</div> </div>
) )
}; };
const ConfigEntry = ({config, configPresetSelected, setConfigPresetSelected}: {config: ConfigPreset, configPresetSelected: ConfigPreset, setConfigPresetSelected: (selection: ConfigPreset) => void}) => {
const [configCount, setConfigCount] = useState(config.count);
return (
<div>
<ConfigSelectButton
label={config.name}
active={config == configPresetSelected}
setValue={(value) => {setConfigCount(value);}}
value={configCount}
onClick={() => setConfigPresetSelected(config)}
/>
<div className="ml-[20px]">
{config.children.map(c =>
(<ConfigEntry config={c} configPresetSelected={configPresetSelected} setConfigPresetSelected={setConfigPresetSelected}/>)
)}
</div>
</div>
);
}
const DeviceSetupEntry = ({device, selectedToFlash, toggleSelectedToFlash, progressText} const DeviceSetupEntry = ({device, selectedToFlash, toggleSelectedToFlash, progressText}

2
src/components/UI/ConfigSelectButton.tsx

@ -22,7 +22,7 @@ export const ConfigSelectButton = ({
onClick={onClick} onClick={onClick}
variant={active ? "subtle" : "ghost"} variant={active ? "subtle" : "ghost"}
size="sm" size="sm"
className="w-full justify-between gap-2" className="w-full justify-between gap-2 my-[2px]"
> >
{element && element} {element && element}
{label} {label}

8
src/core/stores/appStore.ts

@ -31,7 +31,7 @@ interface AppState {
accent: accentColor; accent: accentColor;
connectDialogOpen: boolean; connectDialogOpen: boolean;
configPresetRoot: ConfigPreset; configPresetRoot: ConfigPreset;
configPresetSelected: number; configPresetSelected: ConfigPreset;
flasher: Flasher; flasher: Flasher;
setRasterSources: (sources: RasterSource[]) => void; setRasterSources: (sources: RasterSource[]) => void;
@ -46,7 +46,7 @@ interface AppState {
setAccent: (color: accentColor) => void; setAccent: (color: accentColor) => void;
setConnectDialogOpen: (open: boolean) => void; setConnectDialogOpen: (open: boolean) => void;
setConfigPresetRoot: (root: ConfigPreset) => void; setConfigPresetRoot: (root: ConfigPreset) => void;
setConfigPresetSelected: (selection: number) => void; setConfigPresetSelected: (selection: ConfigPreset) => void;
} }
export const useAppStore = create<AppState>()((set) => ({ export const useAppStore = create<AppState>()((set) => ({
@ -59,7 +59,7 @@ export const useAppStore = create<AppState>()((set) => ({
accent: "orange", accent: "orange",
connectDialogOpen: false, connectDialogOpen: false,
configPresetRoot: undefined, configPresetRoot: undefined,
configPresetSelected: 0, configPresetSelected: undefined,
flasher: new Flasher(), flasher: new Flasher(),
setRasterSources: (sources: RasterSource[]) => { setRasterSources: (sources: RasterSource[]) => {
@ -130,7 +130,7 @@ export const useAppStore = create<AppState>()((set) => ({
}) })
) )
}, },
setConfigPresetSelected: (selection: number) => { setConfigPresetSelected: (selection: ConfigPreset) => {
set( set(
produce<AppState>((draft) => { produce<AppState>((draft) => {
draft.configPresetSelected = selection; draft.configPresetSelected = selection;

2
src/core/stores/deviceStore.ts

@ -600,7 +600,7 @@ export const useConfig = (): Protobuf.LocalConfig => {
const context = useContext(DeviceContext); const context = useContext(DeviceContext);
if(context == undefined) { if(context == undefined) {
const {configPresetRoot, configPresetSelected } = useAppStore(); const {configPresetRoot, configPresetSelected } = useAppStore();
return configPresetRoot.children[configPresetSelected].config; return configPresetRoot.config; // TEMP
} }
return context.config; return context.config;
}; };
Loading…
Cancel
Save