Skip to content

Commit 2548d49

Browse files
committed
Save entered data in local storage.
1 parent 7b8a044 commit 2548d49

File tree

1 file changed

+48
-4
lines changed

1 file changed

+48
-4
lines changed

frontend/packages/volto-form-block/src/components/ViewSchemaForm.jsx

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)