@openmrs/esm-form-engine-lib 2.1.0-pre.1366 → 2.1.0-pre.1369
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/openmrs-esm-form-engine-lib.js +1 -1
- package/package.json +1 -1
- package/src/components/renderer/form/form-renderer.component.tsx +10 -1
- package/src/form-engine.component.tsx +14 -4
- package/src/provider/form-factory-provider.tsx +4 -0
- package/03e8125ab4cbce05/03e8125ab4cbce05.gz +0 -0
- package/6d232cc269feaaa8/6d232cc269feaaa8.gz +0 -0
- package/7b96d5609869079b/7b96d5609869079b.gz +0 -0
- package/8d8f89b93ef7e3e5/8d8f89b93ef7e3e5.gz +0 -0
@@ -1 +1 @@
|
|
1
|
-
var _openmrs_esm_form_engine_lib;(()=>{"use strict";var e,r,t,n,o,i,a,l,s,u,f,p,d,c,h,m,v,g,b={8008:(e,r,t)=>{var n={"./start":()=>Promise.all([t.e(901),t.e(733),t.e(72),t.e(346),t.e(572)]).then((()=>()=>t(8572)))},o=(e,r)=>(t.R=r,r=t.o(n,e)?n[e]():Promise.resolve().then((()=>{throw new Error('Module "'+e+'" does not exist in container.')})),t.R=void 0,r),i=(e,r)=>{if(t.S){var n="default",o=t.S[n];if(o&&o!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return t.S[n]=e,t.I(n,r)}};t.d(r,{get:()=>o,init:()=>i})}},y={};function w(e){var r=y[e];if(void 0!==r)return r.exports;var t=y[e]={id:e,loaded:!1,exports:{}};return b[e].call(t.exports,t,t.exports,w),t.loaded=!0,t.exports}w.m=b,w.c=y,w.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return w.d(r,{a:r}),r},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,w.t=function(t,n){if(1&n&&(t=this(t)),8&n)return t;if("object"==typeof t&&t){if(4&n&&t.__esModule)return t;if(16&n&&"function"==typeof t.then)return t}var o=Object.create(null);w.r(o);var i={};e=e||[null,r({}),r([]),r(r)];for(var a=2&n&&t;"object"==typeof a&&!~e.indexOf(a);a=r(a))Object.getOwnPropertyNames(a).forEach((e=>i[e]=()=>t[e]));return i.default=()=>t,w.d(o,i),o},w.d=(e,r)=>{for(var t in r)w.o(r,t)&&!w.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},w.f={},w.e=e=>Promise.all(Object.keys(w.f).reduce(((r,t)=>(w.f[t](e,r),r)),[])),w.u=e=>e+".js",w.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),w.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t={},n="@openmrs/esm-form-engine-lib:",w.l=(e,r,o,i)=>{if(t[e])t[e].push(r);else{var a,l;if(void 0!==o)for(var s=document.getElementsByTagName("script"),u=0;u<s.length;u++){var f=s[u];if(f.getAttribute("src")==e||f.getAttribute("data-webpack")==n+o){a=f;break}}a||(l=!0,(a=document.createElement("script")).charset="utf-8",a.timeout=120,w.nc&&a.setAttribute("nonce",w.nc),a.setAttribute("data-webpack",n+o),a.src=e),t[e]=[r];var p=(r,n)=>{a.onerror=a.onload=null,clearTimeout(d);var o=t[e];if(delete t[e],a.parentNode&&a.parentNode.removeChild(a),o&&o.forEach((e=>e(n))),r)return r(n)},d=setTimeout(p.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=p.bind(null,a.onerror),a.onload=p.bind(null,a.onload),l&&document.head.appendChild(a)}},w.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},w.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{w.S={};var e={},r={};w.I=(t,n)=>{n||(n=[]);var o=r[t];if(o||(o=r[t]={}),!(n.indexOf(o)>=0)){if(n.push(o),e[t])return e[t];w.o(w.S,t)||(w.S[t]={});var i=w.S[t],a="@openmrs/esm-form-engine-lib",l=(e,r,t,n)=>{var o=i[e]=i[e]||{},l=o[r];(!l||!l.loaded&&(!n!=!l.eager?n:a>l.from))&&(o[r]={get:t,from:a,eager:!!n})},s=[];return"default"===t&&(l("@openmrs/esm-framework","5.7.3-pre.2161",(()=>Promise.all([w.e(151),w.e(72),w.e(766)]).then((()=>()=>w(5151))))),l("@openmrs/esm-patient-common-lib","8.
|
1
|
+
var _openmrs_esm_form_engine_lib;(()=>{"use strict";var e,r,t,n,o,i,a,l,s,u,f,p,d,c,h,m,v,g,b={8008:(e,r,t)=>{var n={"./start":()=>Promise.all([t.e(901),t.e(733),t.e(72),t.e(346),t.e(572)]).then((()=>()=>t(8572)))},o=(e,r)=>(t.R=r,r=t.o(n,e)?n[e]():Promise.resolve().then((()=>{throw new Error('Module "'+e+'" does not exist in container.')})),t.R=void 0,r),i=(e,r)=>{if(t.S){var n="default",o=t.S[n];if(o&&o!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return t.S[n]=e,t.I(n,r)}};t.d(r,{get:()=>o,init:()=>i})}},y={};function w(e){var r=y[e];if(void 0!==r)return r.exports;var t=y[e]={id:e,loaded:!1,exports:{}};return b[e].call(t.exports,t,t.exports,w),t.loaded=!0,t.exports}w.m=b,w.c=y,w.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return w.d(r,{a:r}),r},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,w.t=function(t,n){if(1&n&&(t=this(t)),8&n)return t;if("object"==typeof t&&t){if(4&n&&t.__esModule)return t;if(16&n&&"function"==typeof t.then)return t}var o=Object.create(null);w.r(o);var i={};e=e||[null,r({}),r([]),r(r)];for(var a=2&n&&t;"object"==typeof a&&!~e.indexOf(a);a=r(a))Object.getOwnPropertyNames(a).forEach((e=>i[e]=()=>t[e]));return i.default=()=>t,w.d(o,i),o},w.d=(e,r)=>{for(var t in r)w.o(r,t)&&!w.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},w.f={},w.e=e=>Promise.all(Object.keys(w.f).reduce(((r,t)=>(w.f[t](e,r),r)),[])),w.u=e=>e+".js",w.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),w.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t={},n="@openmrs/esm-form-engine-lib:",w.l=(e,r,o,i)=>{if(t[e])t[e].push(r);else{var a,l;if(void 0!==o)for(var s=document.getElementsByTagName("script"),u=0;u<s.length;u++){var f=s[u];if(f.getAttribute("src")==e||f.getAttribute("data-webpack")==n+o){a=f;break}}a||(l=!0,(a=document.createElement("script")).charset="utf-8",a.timeout=120,w.nc&&a.setAttribute("nonce",w.nc),a.setAttribute("data-webpack",n+o),a.src=e),t[e]=[r];var p=(r,n)=>{a.onerror=a.onload=null,clearTimeout(d);var o=t[e];if(delete t[e],a.parentNode&&a.parentNode.removeChild(a),o&&o.forEach((e=>e(n))),r)return r(n)},d=setTimeout(p.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=p.bind(null,a.onerror),a.onload=p.bind(null,a.onload),l&&document.head.appendChild(a)}},w.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},w.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{w.S={};var e={},r={};w.I=(t,n)=>{n||(n=[]);var o=r[t];if(o||(o=r[t]={}),!(n.indexOf(o)>=0)){if(n.push(o),e[t])return e[t];w.o(w.S,t)||(w.S[t]={});var i=w.S[t],a="@openmrs/esm-form-engine-lib",l=(e,r,t,n)=>{var o=i[e]=i[e]||{},l=o[r];(!l||!l.loaded&&(!n!=!l.eager?n:a>l.from))&&(o[r]={get:t,from:a,eager:!!n})},s=[];return"default"===t&&(l("@openmrs/esm-framework","5.7.3-pre.2161",(()=>Promise.all([w.e(151),w.e(72),w.e(766)]).then((()=>()=>w(5151))))),l("@openmrs/esm-patient-common-lib","8.1.1-pre.5183",(()=>Promise.all([w.e(617),w.e(901),w.e(72),w.e(465),w.e(346),w.e(3)]).then((()=>()=>w(8617))))),l("dayjs","1.11.11",(()=>w.e(353).then((()=>()=>w(4353))))),l("i18next","23.11.4",(()=>w.e(635).then((()=>()=>w(2635))))),l("react-i18next","11.18.6",(()=>Promise.all([w.e(422),w.e(72)]).then((()=>()=>w(4422))))),l("react","18.3.1",(()=>w.e(540).then((()=>()=>w(6540))))),l("swr/_internal","2.2.5",(()=>Promise.all([w.e(993),w.e(72)]).then((()=>()=>w(4993))))),l("swr/immutable","2.2.5",(()=>Promise.all([w.e(225),w.e(72),w.e(465)]).then((()=>()=>w(4225))))),l("swr/infinite","2.2.5",(()=>Promise.all([w.e(41),w.e(72),w.e(465)]).then((()=>()=>w(3041)))))),e[t]=s.length?Promise.all(s).then((()=>e[t]=1)):1}}})(),(()=>{var e;w.g.importScripts&&(e=w.g.location+"");var r=w.g.document;if(!e&&r&&(r.currentScript&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var n=t.length-1;n>-1&&(!e||!/^http(s?):/.test(e));)e=t[n--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),w.p=e})(),o=e=>{var r=e=>e.split(".").map((e=>+e==e?+e:e)),t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),n=t[1]?r(t[1]):[];return t[2]&&(n.length++,n.push.apply(n,r(t[2]))),t[3]&&(n.push([]),n.push.apply(n,r(t[3]))),n},i=(e,r)=>{e=o(e),r=o(r);for(var t=0;;){if(t>=e.length)return t<r.length&&"u"!=(typeof r[t])[0];var n=e[t],i=(typeof n)[0];if(t>=r.length)return"u"==i;var a=r[t],l=(typeof a)[0];if(i!=l)return"o"==i&&"n"==l||"s"==l||"u"==i;if("o"!=i&&"u"!=i&&n!=a)return n<a;t++}},a=e=>{var r=e[0],t="";if(1===e.length)return"*";if(r+.5){t+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var n=1,o=1;o<e.length;o++)n--,t+="u"==(typeof(l=e[o]))[0]?"-":(n>0?".":"")+(n=2,l);return t}var i=[];for(o=1;o<e.length;o++){var l=e[o];i.push(0===l?"not("+s()+")":1===l?"("+s()+" || "+s()+")":2===l?i.pop()+" "+i.pop():a(l))}return s();function s(){return i.pop().replace(/^\((.+)\)$/,"$1")}},l=(e,r)=>{if(0 in e){r=o(r);var t=e[0],n=t<0;n&&(t=-t-1);for(var i=0,a=1,s=!0;;a++,i++){var u,f,p=a<e.length?(typeof e[a])[0]:"";if(i>=r.length||"o"==(f=(typeof(u=r[i]))[0]))return!s||("u"==p?a>t&&!n:""==p!=n);if("u"==f){if(!s||"u"!=p)return!1}else if(s)if(p==f)if(a<=t){if(u!=e[a])return!1}else{if(n?u>e[a]:u<e[a])return!1;u!=e[a]&&(s=!1)}else if("s"!=p&&"n"!=p){if(n||a<=t)return!1;s=!1,a--}else{if(a<=t||f<p!=n)return!1;s=!1}else"s"!=p&&"n"!=p&&(s=!1,a--)}}var d=[],c=d.pop.bind(d);for(i=1;i<e.length;i++){var h=e[i];d.push(1==h?c()|c():2==h?c()&c():h?l(h,r):!c())}return!!c()},s=(e,r)=>{var t=e[r];return Object.keys(t).reduce(((e,r)=>!e||!t[e].loaded&&i(e,r)?r:e),0)},u=(e,r,t,n)=>"Unsatisfied version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+" (required "+a(n)+")",f=(e,r,t,n)=>{var o=s(e,t);return l(n,o)||p(u(e,t,o,n)),d(e[t][o])},p=e=>{"undefined"!=typeof console&&console.warn&&console.warn(e)},d=e=>(e.loaded=1,e.get()),c=(e=>function(r,t,n,o){var i=w.I(r);return i&&i.then?i.then(e.bind(e,r,w.S[r],t,n,o)):e(0,w.S[r],t,n,o)})(((e,r,t,n,o)=>r&&w.o(r,t)?f(r,0,t,n):o())),h={},m={6072:()=>c("default","react",[1,18],(()=>w.e(540).then((()=>()=>w(6540))))),6766:()=>c("default","i18next",[1,23],(()=>w.e(635).then((()=>()=>w(2635))))),8465:()=>c("default","swr/_internal",[1,2],(()=>w.e(993).then((()=>()=>w(4993))))),3941:()=>c("default","react-i18next",[1,11],(()=>w.e(422).then((()=>()=>w(4422))))),6656:()=>c("default","@openmrs/esm-patient-common-lib",[1,8],(()=>Promise.all([w.e(617),w.e(465)]).then((()=>()=>w(8617))))),4209:()=>c("default","swr/immutable",[1,2],(()=>Promise.all([w.e(225),w.e(465)]).then((()=>()=>w(4225))))),5972:()=>c("default","@openmrs/esm-framework",[1,5],(()=>Promise.all([w.e(151),w.e(766)]).then((()=>()=>w(5151))))),231:()=>c("default","dayjs",[1,1],(()=>w.e(353).then((()=>()=>w(4353))))),6339:()=>c("default","swr/infinite",[1,2],(()=>Promise.all([w.e(41),w.e(465)]).then((()=>()=>w(3041)))))},v={3:[4209,5972],72:[6072],346:[3941,6656],465:[8465],572:[231,4209,5972,6339],766:[6766]},g={},w.f.consumes=(e,r)=>{w.o(v,e)&&v[e].forEach((e=>{if(w.o(h,e))return r.push(h[e]);if(!g[e]){var t=r=>{h[e]=0,w.m[e]=t=>{delete w.c[e],t.exports=r()}};g[e]=!0;var n=r=>{delete h[e],w.m[e]=t=>{throw delete w.c[e],r}};try{var o=m[e]();o.then?r.push(h[e]=o.then(t).catch(n)):t(o)}catch(e){n(e)}}}))},(()=>{var e={719:0};w.f.j=(r,t)=>{var n=w.o(e,r)?e[r]:void 0;if(0!==n)if(n)t.push(n[2]);else if(/^(346|465|72|766)$/.test(r))e[r]=0;else{var o=new Promise(((t,o)=>n=e[r]=[t,o]));t.push(n[2]=o);var i=w.p+w.u(r),a=new Error;w.l(i,(t=>{if(w.o(e,r)&&(0!==(n=e[r])&&(e[r]=void 0),n)){var o=t&&("load"===t.type?"missing":t.type),i=t&&t.target&&t.target.src;a.message="Loading chunk "+r+" failed.\n("+o+": "+i+")",a.name="ChunkLoadError",a.type=o,a.request=i,n[1](a)}}),"chunk-"+r,r)}};var r=(r,t)=>{var n,o,[i,a,l]=t,s=0;if(i.some((r=>0!==e[r]))){for(n in a)w.o(a,n)&&(w.m[n]=a[n]);l&&l(w)}for(r&&r(t);s<i.length;s++)o=i[s],w.o(e,o)&&e[o]&&e[o][0](),e[o]=0},t=globalThis.webpackChunk_openmrs_esm_form_engine_lib=globalThis.webpackChunk_openmrs_esm_form_engine_lib||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),w.nc=void 0;var _=w(8008);_openmrs_esm_form_engine_lib=_})();
|
package/package.json
CHANGED
@@ -18,10 +18,15 @@ export type FormRendererProps = {
|
|
18
18
|
|
19
19
|
export const FormRenderer = ({ processorContext, initialValues, setIsLoadingFormDependencies }: FormRendererProps) => {
|
20
20
|
const { evaluatedFields, evaluatedFormJson } = useEvaluateFormFieldExpressions(initialValues, processorContext);
|
21
|
-
const { registerForm, workspaceLayout } = useFormFactory();
|
21
|
+
const { registerForm, setIsFormDirty, workspaceLayout } = useFormFactory();
|
22
22
|
const methods = useForm({
|
23
23
|
defaultValues: initialValues,
|
24
24
|
});
|
25
|
+
|
26
|
+
const {
|
27
|
+
formState: { isDirty },
|
28
|
+
} = methods;
|
29
|
+
|
25
30
|
const [{ formFields, invalidFields, formJson }, dispatch] = useReducer(formStateReducer, {
|
26
31
|
...initialState,
|
27
32
|
formFields: evaluatedFields,
|
@@ -62,6 +67,10 @@ export const FormRenderer = ({ processorContext, initialValues, setIsLoadingForm
|
|
62
67
|
registerForm(formJson.name, context);
|
63
68
|
}, [formJson.name, context]);
|
64
69
|
|
70
|
+
useEffect(() => {
|
71
|
+
setIsFormDirty(isDirty);
|
72
|
+
}, [isDirty]);
|
73
|
+
|
65
74
|
return (
|
66
75
|
<FormProvider {...context}>
|
67
76
|
{formJson.pages.map((page) => {
|
@@ -3,7 +3,6 @@ import type { FormField, SessionMode, FormSchema } from './types';
|
|
3
3
|
import { useSession, type Visit } from '@openmrs/esm-framework';
|
4
4
|
import { useFormJson } from '.';
|
5
5
|
import FormProcessorFactory from './components/processor-factory/form-processor-factory.component';
|
6
|
-
import { Form } from '@carbon/react';
|
7
6
|
import Loader from './components/loaders/loader.component';
|
8
7
|
import { usePatientData } from './hooks/usePatientData';
|
9
8
|
import { useWorkspaceLayout } from './hooks/useWorkspaceLayout';
|
@@ -30,6 +29,7 @@ interface FormEngineProps {
|
|
30
29
|
onCancel?: () => void;
|
31
30
|
handleClose?: () => void;
|
32
31
|
handleConfirmQuestionDeletion?: (question: Readonly<FormField>) => Promise<void>;
|
32
|
+
markFormAsDirty?: (isDirty: boolean) => void;
|
33
33
|
}
|
34
34
|
|
35
35
|
// TODOs:
|
@@ -48,6 +48,7 @@ const FormEngine = ({
|
|
48
48
|
onCancel,
|
49
49
|
handleClose,
|
50
50
|
handleConfirmQuestionDeletion,
|
51
|
+
markFormAsDirty,
|
51
52
|
}: FormEngineProps) => {
|
52
53
|
const { t } = useTranslation();
|
53
54
|
const session = useSession();
|
@@ -60,16 +61,20 @@ const FormEngine = ({
|
|
60
61
|
const [isLoadingDependencies, setIsLoadingDependencies] = useState(false);
|
61
62
|
const [showSidebar, setShowSidebar] = useState(false);
|
62
63
|
const [isSubmitting, setIsSubmitting] = useState(false);
|
64
|
+
const [isFormDirty, setIsFormDirty] = useState(false);
|
63
65
|
// TODO: Updating this prop triggers a rerender of the entire form. This means whenever we scroll into a new page, the form is rerendered.
|
64
66
|
// Figure out a way to avoid this. Maybe use a ref with an observer instead of a state?
|
65
67
|
const [currentPage, setCurrentPage] = useState('');
|
66
|
-
const [showPatientBanner, setShowPatientBanner] = useState(false);
|
67
68
|
const {
|
68
69
|
formJson: refinedFormJson,
|
69
70
|
isLoading: isLoadingFormJson,
|
70
71
|
formError,
|
71
72
|
} = useFormJson(formUUID, formJson, encounterUUID, formSessionIntent);
|
72
73
|
|
74
|
+
const showPatientBanner = useMemo(() => {
|
75
|
+
return patient && workspaceLayout !== 'minimized' && mode !== 'embedded-view';
|
76
|
+
}, [patient, mode, workspaceLayout]);
|
77
|
+
|
73
78
|
const showButtonSet = useMemo(() => {
|
74
79
|
// if (mode === 'embedded-view') {
|
75
80
|
// return false;
|
@@ -89,13 +94,17 @@ const FormEngine = ({
|
|
89
94
|
};
|
90
95
|
}, []);
|
91
96
|
|
97
|
+
useEffect(() => {
|
98
|
+
markFormAsDirty?.(isFormDirty);
|
99
|
+
}, [isFormDirty]);
|
100
|
+
|
92
101
|
const handleSubmit = useCallback((e: React.FormEvent<HTMLFormElement>) => {
|
93
102
|
e.preventDefault();
|
94
103
|
setIsSubmitting(true);
|
95
104
|
}, []);
|
96
105
|
|
97
106
|
return (
|
98
|
-
<
|
107
|
+
<form ref={ref} noValidate className={classNames('cds--form', styles.form)} onSubmit={handleSubmit}>
|
99
108
|
{isLoadingPatient || isLoadingFormJson ? (
|
100
109
|
<Loader />
|
101
110
|
) : (
|
@@ -116,6 +125,7 @@ const FormEngine = ({
|
|
116
125
|
onError: () => {},
|
117
126
|
handleClose: () => {},
|
118
127
|
}}
|
128
|
+
setIsFormDirty={setIsFormDirty}
|
119
129
|
setCurrentPage={setCurrentPage}>
|
120
130
|
<div className={styles.formContainer}>
|
121
131
|
{isLoadingDependencies && (
|
@@ -163,7 +173,7 @@ const FormEngine = ({
|
|
163
173
|
</div>
|
164
174
|
</FormFactoryProvider>
|
165
175
|
)}
|
166
|
-
</
|
176
|
+
</form>
|
167
177
|
);
|
168
178
|
};
|
169
179
|
|
@@ -30,6 +30,7 @@ interface FormFactoryProviderContextProps {
|
|
30
30
|
registerForm: (formId: string, context: FormContextProps) => void;
|
31
31
|
setCurrentPage: (page: string) => void;
|
32
32
|
handleConfirmQuestionDeletion?: (question: Readonly<FormField>) => Promise<void>;
|
33
|
+
setIsFormDirty: (isFormDirty: boolean) => void;
|
33
34
|
}
|
34
35
|
|
35
36
|
interface FormFactoryProviderProps {
|
@@ -51,6 +52,7 @@ interface FormFactoryProviderProps {
|
|
51
52
|
};
|
52
53
|
setCurrentPage: (page: string) => void;
|
53
54
|
handleConfirmQuestionDeletion?: (question: Readonly<FormField>) => Promise<void>;
|
55
|
+
setIsFormDirty: (isFormDirty: boolean) => void;
|
54
56
|
}
|
55
57
|
|
56
58
|
const FormFactoryProviderContext = createContext<FormFactoryProviderContextProps | undefined>(undefined);
|
@@ -68,6 +70,7 @@ export const FormFactoryProvider: React.FC<FormFactoryProviderProps> = ({
|
|
68
70
|
formSubmissionProps,
|
69
71
|
setCurrentPage,
|
70
72
|
handleConfirmQuestionDeletion,
|
73
|
+
setIsFormDirty,
|
71
74
|
}) => {
|
72
75
|
const { t } = useTranslation();
|
73
76
|
const rootForm = useRef<FormContextProps>();
|
@@ -154,6 +157,7 @@ export const FormFactoryProvider: React.FC<FormFactoryProviderProps> = ({
|
|
154
157
|
registerForm,
|
155
158
|
setCurrentPage,
|
156
159
|
handleConfirmQuestionDeletion,
|
160
|
+
setIsFormDirty,
|
157
161
|
}}>
|
158
162
|
{formProcessors.current && children}
|
159
163
|
</FormFactoryProviderContext.Provider>
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|