27 lines
838 B
TypeScript
27 lines
838 B
TypeScript
import type { PageUrlParams } from '@/utils/url';
|
|
import type { PropsWithChildren } from 'react';
|
|
import { createContext, useMemo, useState } from 'react';
|
|
|
|
type FormStatus = 'pending' | 'edit' | 'success';
|
|
|
|
type ContextType = {
|
|
readonly formStatus: FormStatus;
|
|
readonly pageUrlParams: PageUrlParams;
|
|
readonly setFormStatus: (status: FormStatus) => void;
|
|
};
|
|
|
|
export const FormContext = createContext<ContextType>({} as ContextType);
|
|
|
|
export function FormContextProvider({
|
|
children,
|
|
...initialData
|
|
}: PropsWithChildren & Pick<ContextType, 'pageUrlParams'>) {
|
|
const [formStatus, setFormStatus] = useState<FormStatus>('edit');
|
|
const value = useMemo(
|
|
() => ({ ...initialData, formStatus, setFormStatus }),
|
|
[formStatus, initialData]
|
|
);
|
|
|
|
return <FormContext.Provider value={value}>{children}</FormContext.Provider>;
|
|
}
|