63 lines
1.4 KiB
TypeScript

import type { ResponseGetData } from '@/api/ius/types';
import { create } from 'zustand';
type Values = ResponseGetData;
type ElementValidation = {
message: string;
valid: boolean;
};
type FormState = {
defaultValues: Values;
init: (values: Values) => void;
reset: () => void;
resetValidation: () => void;
setValidation: (input: { name: string } & ElementValidation) => void;
setValue: ({ name, value }: { name: string; value: Values[number] }) => void;
status?: 'init' | 'edited';
validation: Record<string, ElementValidation | undefined>;
values: Values;
};
export const useFormStore = create<FormState>((set) => ({
defaultValues: {},
init: (values) =>
set(() => ({
defaultValues: values,
status: 'init',
values,
})),
reset: () =>
set((state) => ({
status: 'init',
validation: {},
values: state.defaultValues,
})),
resetValidation: () =>
set(() => ({
validation: {},
})),
setValidation: ({ message, name, valid }) =>
set((state) => ({
validation: {
...state.validation,
[name]: { message, valid },
},
})),
setValue: ({ name, value }) =>
set((state) => ({
status: 'edited',
validation: {
...state.validation,
[name]: undefined,
},
values: {
...state.values,
[name]: value,
},
})),
validation: {},
values: {},
}));