mirror of
https://github.com/remvze/moodist.git
synced 2025-09-29 15:30:49 -04:00
feat: persist presets
This commit is contained in:
parent
2484e01273
commit
38a9a23790
@ -1,6 +1,6 @@
|
||||
import { useEffect } from 'react';
|
||||
|
||||
import { useSoundStore, useNoteStore } from '@/store';
|
||||
import { useSoundStore, useNoteStore, usePresetStore } from '@/store';
|
||||
|
||||
interface StoreConsumerProps {
|
||||
children: React.ReactNode;
|
||||
@ -10,6 +10,7 @@ export function StoreConsumer({ children }: StoreConsumerProps) {
|
||||
useEffect(() => {
|
||||
useSoundStore.persist.rehydrate();
|
||||
useNoteStore.persist.rehydrate();
|
||||
usePresetStore.persist.rehydrate();
|
||||
}, []);
|
||||
|
||||
return <>{children}</>;
|
||||
|
@ -1,4 +1,6 @@
|
||||
import { create } from 'zustand';
|
||||
import { createJSONStorage, persist } from 'zustand/middleware';
|
||||
import merge from 'deepmerge';
|
||||
|
||||
interface PresetStore {
|
||||
addPreset: (label: string, sounds: Record<string, number>) => void;
|
||||
@ -10,24 +12,41 @@ interface PresetStore {
|
||||
}>;
|
||||
}
|
||||
|
||||
export const usePresetStore = create<PresetStore>()((set, get) => ({
|
||||
addPreset(label: string, sounds: Record<string, number>) {
|
||||
set({ presets: [{ label, sounds }, ...get().presets] });
|
||||
},
|
||||
export const usePresetStore = create<PresetStore>()(
|
||||
persist(
|
||||
(set, get) => ({
|
||||
addPreset(label: string, sounds: Record<string, number>) {
|
||||
set({ presets: [{ label, sounds }, ...get().presets] });
|
||||
},
|
||||
|
||||
changeName(index: number, newName: string) {
|
||||
const presets = get().presets.map((preset, i) => {
|
||||
if (i === index) return { ...preset, label: newName };
|
||||
changeName(index: number, newName: string) {
|
||||
const presets = get().presets.map((preset, i) => {
|
||||
if (i === index) return { ...preset, label: newName };
|
||||
|
||||
return preset;
|
||||
});
|
||||
return preset;
|
||||
});
|
||||
|
||||
set({ presets });
|
||||
},
|
||||
set({ presets });
|
||||
},
|
||||
|
||||
deletePreset(index: number) {
|
||||
set({ presets: get().presets.filter((_, i) => index !== i) });
|
||||
},
|
||||
deletePreset(index: number) {
|
||||
set({ presets: get().presets.filter((_, i) => index !== i) });
|
||||
},
|
||||
|
||||
presets: [],
|
||||
}));
|
||||
presets: [],
|
||||
}),
|
||||
{
|
||||
merge: (persisted, current) =>
|
||||
merge(
|
||||
current,
|
||||
// @ts-ignore
|
||||
persisted,
|
||||
),
|
||||
name: 'moodist-presets',
|
||||
partialize: state => ({ presets: state.presets }),
|
||||
skipHydration: true,
|
||||
storage: createJSONStorage(() => localStorage),
|
||||
version: 0,
|
||||
},
|
||||
),
|
||||
);
|
||||
|
Loading…
x
Reference in New Issue
Block a user