Skip to content

Commit c88a7aa

Browse files
Merge pull request #4817 from OneCommunityGlobal/Neeraj_Hotfix_JobBuilder_Reset_Unsaved_State
Neeraj Hot Fix Unsaved Changes Prompt After Template Save
2 parents 2ad6f87 + d118b13 commit c88a7aa

2 files changed

Lines changed: 22 additions & 6 deletions

File tree

src/components/Collaboration/JobFormbuilder.jsx

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ function JobFormBuilder() {
4848

4949
const jobPositions = ['Software Developer', 'Project Manager', 'Analyst'];
5050

51+
const markAsSaved = fields => {
52+
setInitialFormFields(structuredClone(fields));
53+
setHasUnsavedChanges(false);
54+
};
55+
5156
// Prevent refresh while unsaved changes exist
5257
useEffect(() => {
5358
const handler = event => {
@@ -73,13 +78,10 @@ function JobFormBuilder() {
7378

7479
setCurrentFormId(id);
7580
setFormFields(form.questions || []);
76-
setInitialFormFields(form.questions || []);
77-
81+
markAsSaved(form.questions || []);
7882
setNewField(initialNewField);
79-
setHasUnsavedChanges(false);
8083
}
8184
} catch (error) {
82-
// still allowed logging
8385
console.error(error);
8486
}
8587
};
@@ -101,7 +103,6 @@ function JobFormBuilder() {
101103
// Clone field
102104
const cloneField = async (field, index) => {
103105
const clone = structuredClone(field);
104-
105106
const updated = [...formFields.slice(0, index + 1), clone, ...formFields.slice(index + 1)];
106107
setFormFields(updated);
107108

@@ -111,6 +112,7 @@ function JobFormBuilder() {
111112
question: clone,
112113
position: index + 1,
113114
});
115+
markAsSaved(updated);
114116
} catch (error) {
115117
console.error(error);
116118
}
@@ -132,6 +134,7 @@ function JobFormBuilder() {
132134
fromIndex: index,
133135
toIndex: newIndex,
134136
});
137+
markAsSaved(updated);
135138
} catch (error) {
136139
console.error(error);
137140
}
@@ -147,6 +150,7 @@ function JobFormBuilder() {
147150
if (currentFormId) {
148151
try {
149152
await axios.delete(ENDPOINTS.DELETE_QUESTION(currentFormId, index));
153+
markAsSaved(updated);
150154
} catch (error) {
151155
console.error(error);
152156
}
@@ -187,6 +191,7 @@ function JobFormBuilder() {
187191
ENDPOINTS.UPDATE_QUESTION(currentFormId, editingIndex),
188192
updated[editingIndex],
189193
);
194+
markAsSaved(updated);
190195
} catch (error) {
191196
console.error(error);
192197
}
@@ -236,6 +241,7 @@ function JobFormBuilder() {
236241
question: newField,
237242
position: formFields.length,
238243
});
244+
markAsSaved(updated);
239245
} catch (error) {
240246
console.error(error);
241247
}
@@ -301,7 +307,13 @@ function JobFormBuilder() {
301307
<QuestionSetManager
302308
formFields={formFields}
303309
setFormFields={setFormFields}
304-
onImportQuestions={setFormFields}
310+
onImportQuestions={fields => {
311+
setFormFields(fields);
312+
markAsSaved(fields);
313+
}}
314+
onTemplateSaved={() => {
315+
markAsSaved(formFields);
316+
}}
305317
darkMode={darkMode}
306318
templateName={templateName}
307319
setTemplateName={setTemplateName}

src/components/Collaboration/QuestionSetManager.jsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ function QuestionSetManager({
1212
formFields,
1313
setFormFields,
1414
onImportQuestions,
15+
onTemplateSaved,
1516
darkMode,
1617
templateName,
1718
setTemplateName,
@@ -119,6 +120,7 @@ function QuestionSetManager({
119120
setTemplates(prev => prev.map(t => (t._id === updatedTemplate._id ? updatedTemplate : t)));
120121

121122
safeAlert(`Template "${templateName}" updated.`);
123+
onTemplateSaved && onTemplateSaved();
122124
} else {
123125
const newTemplate = await api.createTemplate({
124126
name: templateName,
@@ -137,6 +139,7 @@ function QuestionSetManager({
137139

138140
localStorage.setItem('jobFormTemplates', JSON.stringify(updated));
139141
safeAlert(`Template "${templateName}" created.`);
142+
onTemplateSaved && onTemplateSaved();
140143
}
141144

142145
setTemplateName('');
@@ -406,6 +409,7 @@ QuestionSetManager.propTypes = {
406409
).isRequired,
407410
setFormFields: PropTypes.func.isRequired,
408411
onImportQuestions: PropTypes.func.isRequired,
412+
onTemplateSaved: PropTypes.func,
409413
darkMode: PropTypes.bool.isRequired,
410414
templateName: PropTypes.string.isRequired,
411415
setTemplateName: PropTypes.func.isRequired,

0 commit comments

Comments
 (0)