UNPKG

@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
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 };