更新前端Scheme类型定义。
This commit is contained in:
parent
ab4e0b440c
commit
26ebc3c7e3
@ -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 = {
|
export type Option = {
|
||||||
label: string;
|
label: string;
|
||||||
value: string | number | null;
|
value: string | number | null;
|
||||||
@ -35,3 +40,9 @@ export type ColorShifting = {
|
|||||||
chroma: number;
|
chroma: number;
|
||||||
lightness: number;
|
lightness: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type SchemeStorage =
|
||||||
|
| QSchemeStorage
|
||||||
|
| SwatchSchemeStorage
|
||||||
|
| MaterialDesign2SchemeStorage
|
||||||
|
| MaterialDesign3SchemeStorage;
|
||||||
|
@ -4,6 +4,7 @@ import { atomWithStorage } from 'jotai/utils';
|
|||||||
import { isEqual, reduce } from 'lodash-es';
|
import { isEqual, reduce } from 'lodash-es';
|
||||||
import { useCallback, useMemo } from 'react';
|
import { useCallback, useMemo } from 'react';
|
||||||
import { v4 } from 'uuid';
|
import { v4 } from 'uuid';
|
||||||
|
import { SchemeContent, SchemeStorage, SchemeType } from '../models';
|
||||||
|
|
||||||
type ColorSet = {
|
type ColorSet = {
|
||||||
normal?: string | null;
|
normal?: string | null;
|
||||||
@ -38,10 +39,10 @@ export type SchemeSet = {
|
|||||||
darkScheme: Scheme;
|
darkScheme: Scheme;
|
||||||
};
|
};
|
||||||
|
|
||||||
const schemesAtom = atomWithStorage<SchemeSet[]>('schemes', []);
|
const schemesAtom = atomWithStorage<SchemeContent<SchemeStorage>[]>('schemes', []);
|
||||||
export const activeSchemeAtom = atomWithStorage<string | null>('activeScheme', null);
|
export const activeSchemeAtom = atomWithStorage<string | null>('activeScheme', null);
|
||||||
|
|
||||||
export function useSchemeList(): Pick<SchemeSet, 'id' | 'name' | 'createdAt'>[] {
|
export function useSchemeList(): Pick<SchemeContent<SchemeStorage>, 'id' | 'name' | 'createdAt'>[] {
|
||||||
const schemes = useAtomValue(schemesAtom);
|
const schemes = useAtomValue(schemesAtom);
|
||||||
const sortedSchemes = useMemo(
|
const sortedSchemes = useMemo(
|
||||||
() =>
|
() =>
|
||||||
@ -54,19 +55,23 @@ export function useSchemeList(): Pick<SchemeSet, 'id' | 'name' | 'createdAt'>[]
|
|||||||
return sortedSchemes;
|
return sortedSchemes;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function useScheme(id: string): SchemeSet | null {
|
export function useScheme(id: string): SchemeContent<SchemeStorage> | null {
|
||||||
const schemes = useAtomValue(schemesAtom);
|
const schemes = useAtomValue(schemesAtom);
|
||||||
const scheme = useMemo(() => schemes.find((s) => isEqual(id, s.id)) ?? null, [schemes, id]);
|
const scheme = useMemo(() => schemes.find((s) => isEqual(id, s.id)) ?? null, [schemes, id]);
|
||||||
return scheme;
|
return scheme;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function useActiveScheme(): SchemeSet | null {
|
export function useActiveScheme(): SchemeContent<SchemeStorage> | null {
|
||||||
const activeSchemeId = useAtomValue(activeSchemeAtom);
|
const activeSchemeId = useAtomValue(activeSchemeAtom);
|
||||||
const activeScheme = useScheme(activeSchemeId ?? 'UNEXISTS');
|
const activeScheme = useScheme(activeSchemeId ?? 'UNEXISTS');
|
||||||
return activeScheme;
|
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 updateSchemes = useSetAtom(schemesAtom);
|
||||||
const createSchemeAction = useCallback(
|
const createSchemeAction = useCallback(
|
||||||
(name: string, description?: string) => {
|
(name: string, description?: string) => {
|
||||||
@ -78,8 +83,8 @@ export function useCreateScheme(): (name: string, description?: string) => strin
|
|||||||
name,
|
name,
|
||||||
createdAt: dayjs().toISOString(),
|
createdAt: dayjs().toISOString(),
|
||||||
description: description ?? null,
|
description: description ?? null,
|
||||||
lightScheme: {},
|
type,
|
||||||
darkScheme: {},
|
schemeStorage: {},
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
return newId;
|
return newId;
|
||||||
@ -90,10 +95,12 @@ export function useCreateScheme(): (name: string, description?: string) => strin
|
|||||||
return createSchemeAction;
|
return createSchemeAction;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function useUpdateScheme(id: string): (updater: (prev: SchemeSet) => SchemeSet) => void {
|
export function useUpdateScheme(
|
||||||
|
id: string,
|
||||||
|
): (updater: (prev: SchemeContent<SchemeStorage>) => SchemeContent<SchemeStorage>) => void {
|
||||||
const updateSchemes = useSetAtom(schemesAtom);
|
const updateSchemes = useSetAtom(schemesAtom);
|
||||||
const updateAction = useCallback(
|
const updateAction = useCallback(
|
||||||
(updater: (prev: SchemeSet) => SchemeSet) => {
|
(updater: (prev: SchemeContent<SchemeStorage>) => SchemeContent<SchemeStorage>) => {
|
||||||
updateSchemes((prev) =>
|
updateSchemes((prev) =>
|
||||||
reduce(
|
reduce(
|
||||||
prev,
|
prev,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user