@premieroctet/next-admin
Version:
Next-Admin provides a customizable and turnkey admin dashboard for applications built with Next.js and powered by the Prisma ORM. It aims to simplify the development process by providing a turnkey admin system that can be easily integrated into your proje
47 lines (46 loc) • 1.46 kB
JavaScript
import { jsx } from "react/jsx-runtime";
import { createContext, useContext, useEffect, useState } from "react";
const FormStateContext_FormStateContext = /*#__PURE__*/ createContext({
dirtyFields: [],
setFieldDirty: (_name)=>{},
cleanAll: ()=>{}
});
const useFormState = ()=>useContext(FormStateContext_FormStateContext);
const FormProvider = ({ children })=>{
const [dirtyFields, setDirtyFields] = useState([]);
const setFieldDirty = (name)=>{
setDirtyFields((prevDirtyFields)=>{
if (!prevDirtyFields.includes(name)) return [
...prevDirtyFields,
name
];
return prevDirtyFields;
});
};
const cleanAll = ()=>{
setDirtyFields([]);
};
useEffect(()=>{
const onBeforeUnload = (e)=>{
if (0 === dirtyFields.length) return;
e.preventDefault();
e.returnValue = true;
};
window.addEventListener("beforeunload", onBeforeUnload);
return ()=>{
window.removeEventListener("beforeunload", onBeforeUnload);
};
}, [
dirtyFields
]);
return /*#__PURE__*/ jsx(FormStateContext_FormStateContext.Provider, {
value: {
dirtyFields,
setFieldDirty,
cleanAll
},
children: children
});
};
const FormStateContext = FormProvider;
export { FormStateContext as default, useFormState };