@@ -72,6 +72,16 @@ const FormBlockView = ({ data, id, path, moment: momentlib }) => {
7272 const queryParams = qs . parse ( location . search ) ;
7373 let initialData = { } ;
7474
75+ let localStorageData ;
76+ try {
77+ localStorageData = JSON . parse ( localStorage . getItem ( 'formBlocks' ) ) ;
78+ } catch ( error ) {
79+ localStorageData = { } ;
80+ }
81+ if ( id in localStorageData ) {
82+ initialData = localStorageData [ id ] ;
83+ }
84+
7585 propertyNames . map ( ( property ) => {
7686 if ( queryParams [ property ] !== undefined ) {
7787 initialData [ property ] = queryParams [ property ] ;
@@ -99,6 +109,25 @@ const FormBlockView = ({ data, id, path, moment: momentlib }) => {
99109
100110 const onCancel = ( ) => { } ;
101111
112+ const onChangeFormData = ( formData ) => {
113+ let localStorageData ;
114+ try {
115+ localStorageData = JSON . parse ( localStorage . getItem ( 'formBlocks' ) ) ;
116+ } catch ( error ) {
117+ localStorageData = { } ;
118+ }
119+
120+ let storeData = { ...formData } ;
121+ delete storeData . captchaWidget ;
122+ localStorage . setItem (
123+ 'formBlocks' ,
124+ JSON . stringify ( {
125+ ...localStorageData ,
126+ [ id ] : storeData ,
127+ } ) ,
128+ ) ;
129+ } ;
130+
102131 const onSubmit = async ( formData ) => {
103132 let submitData = { ...formData } ;
104133 let captcha = {
@@ -117,28 +146,28 @@ const FormBlockView = ({ data, id, path, moment: momentlib }) => {
117146 ( value , field ) =>
118147 ! includes (
119148 config . blocks . blocksConfig . schemaForm . filterFactorySend ,
120- data . schema . properties [ field ] . factory ,
149+ data . schema . properties [ field ] ? .factory ,
121150 ) ,
122151 ) ;
123152
124153 map ( keys ( submitData ) , ( field ) => {
125154 if (
126- data . schema . properties [ field ] . factory === 'number' &&
155+ data . schema . properties [ field ] ? .factory === 'number' &&
127156 submitData [ field ] !== undefined
128157 ) {
129158 submitData [ field ] = parseInt ( submitData [ field ] ) ;
130159 }
131160
132161 if (
133- data . schema . properties [ field ] . factory === 'time' &&
162+ data . schema . properties [ field ] ? .factory === 'time' &&
134163 isObject ( submitData [ field ] )
135164 ) {
136165 submitData [ field ] =
137166 `${ submitData [ field ] . hour } :${ submitData [ field ] . minute } ` ;
138167 }
139168
140169 if (
141- data . schema . properties [ field ] . factory === 'label_boolean_field' &&
170+ data . schema . properties [ field ] ? .factory === 'label_boolean_field' &&
142171 ! isBoolean ( submitData [ field ] )
143172 ) {
144173 submitData [ field ] = false ;
@@ -159,8 +188,22 @@ const FormBlockView = ({ data, id, path, moment: momentlib }) => {
159188
160189 dispatch ( submitForm ( path , id , submitData , captcha ) )
161190 . then ( ( resp ) => {
191+ // Set submitted
162192 setSubmitted ( true ) ;
163193 setSubmittedData ( submitData ) ;
194+
195+ // Clear localstorage
196+ let localStorageData ;
197+ try {
198+ localStorageData = JSON . parse ( localStorage . getItem ( 'formBlocks' ) ) ;
199+ } catch ( error ) {
200+ localStorageData = { } ;
201+ }
202+
203+ delete localStorageData [ id ] ;
204+ localStorage . setItem ( 'formBlocks' , JSON . stringify ( localStorageData ) ) ;
205+
206+ // Redirect after submit
164207 if (
165208 Array . isArray ( data . forward_user_to ) &&
166209 data . forward_user_to . length > 0
@@ -301,6 +344,7 @@ const FormBlockView = ({ data, id, path, moment: momentlib }) => {
301344 }
302345 onSubmit = { ! submitPressed && onSubmit }
303346 resetOnCancel = { true }
347+ onChangeFormData = { onChangeFormData }
304348 onCancel = { data . show_cancel ? onCancel : null }
305349 submitLabel = { data . submit_label || intl . formatMessage ( messages . submit ) }
306350 cancelLabel = { data . cancel_label || intl . formatMessage ( messages . cancel ) }
0 commit comments