From 26ebc3c7e3723c7b1b69425a09a68042025bf441 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=B6=9B?= Date: Thu, 23 Jan 2025 16:54:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=89=8D=E7=AB=AFScheme?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=AE=9A=E4=B9=89=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/models.ts | 11 +++++++++++ src/stores/schemes.ts | 25 ++++++++++++++++--------- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/models.ts b/src/models.ts index 8758b05..f8e8346 100644 --- a/src/models.ts +++ b/src/models.ts @@ -1,3 +1,8 @@ +import { MaterialDesign2SchemeStorage } from './material-2-scheme'; +import { MaterialDesign3SchemeStorage } from './material-3-scheme'; +import { QSchemeStorage } from './q-scheme'; +import { SwatchSchemeStorage } from './swatch_scheme'; + export type Option = { label: string; value: string | number | null; @@ -35,3 +40,9 @@ export type ColorShifting = { chroma: number; lightness: number; }; + +export type SchemeStorage = + | QSchemeStorage + | SwatchSchemeStorage + | MaterialDesign2SchemeStorage + | MaterialDesign3SchemeStorage; diff --git a/src/stores/schemes.ts b/src/stores/schemes.ts index 28e908a..5b73fe2 100644 --- a/src/stores/schemes.ts +++ b/src/stores/schemes.ts @@ -4,6 +4,7 @@ import { atomWithStorage } from 'jotai/utils'; import { isEqual, reduce } from 'lodash-es'; import { useCallback, useMemo } from 'react'; import { v4 } from 'uuid'; +import { SchemeContent, SchemeStorage, SchemeType } from '../models'; type ColorSet = { normal?: string | null; @@ -38,10 +39,10 @@ export type SchemeSet = { darkScheme: Scheme; }; -const schemesAtom = atomWithStorage('schemes', []); +const schemesAtom = atomWithStorage[]>('schemes', []); export const activeSchemeAtom = atomWithStorage('activeScheme', null); -export function useSchemeList(): Pick[] { +export function useSchemeList(): Pick, 'id' | 'name' | 'createdAt'>[] { const schemes = useAtomValue(schemesAtom); const sortedSchemes = useMemo( () => @@ -54,19 +55,23 @@ export function useSchemeList(): Pick[] return sortedSchemes; } -export function useScheme(id: string): SchemeSet | null { +export function useScheme(id: string): SchemeContent | null { const schemes = useAtomValue(schemesAtom); const scheme = useMemo(() => schemes.find((s) => isEqual(id, s.id)) ?? null, [schemes, id]); return scheme; } -export function useActiveScheme(): SchemeSet | null { +export function useActiveScheme(): SchemeContent | null { const activeSchemeId = useAtomValue(activeSchemeAtom); const activeScheme = useScheme(activeSchemeId ?? 'UNEXISTS'); return activeScheme; } -export function useCreateScheme(): (name: string, description?: string) => string { +export function useCreateScheme(): ( + name: string, + type: SchemeType, + description?: string, +) => string { const updateSchemes = useSetAtom(schemesAtom); const createSchemeAction = useCallback( (name: string, description?: string) => { @@ -78,8 +83,8 @@ export function useCreateScheme(): (name: string, description?: string) => strin name, createdAt: dayjs().toISOString(), description: description ?? null, - lightScheme: {}, - darkScheme: {}, + type, + schemeStorage: {}, }, ]); return newId; @@ -90,10 +95,12 @@ export function useCreateScheme(): (name: string, description?: string) => strin return createSchemeAction; } -export function useUpdateScheme(id: string): (updater: (prev: SchemeSet) => SchemeSet) => void { +export function useUpdateScheme( + id: string, +): (updater: (prev: SchemeContent) => SchemeContent) => void { const updateSchemes = useSetAtom(schemesAtom); const updateAction = useCallback( - (updater: (prev: SchemeSet) => SchemeSet) => { + (updater: (prev: SchemeContent) => SchemeContent) => { updateSchemes((prev) => reduce( prev,