🐛 Fixes save item without title bug (#377)

Closes #377. This bg was caused by adding items without a title, meaning an ID could not be calculated. The solution was to add a validtion check to ensure that a title is specified befire saving
This commit is contained in:
Alicia Sykes 2021-12-29 22:31:59 +00:00
parent 3cbf7949c3
commit bf3ccc13d0
2 changed files with 23 additions and 13 deletions

View File

@ -224,6 +224,9 @@
"save-stage-btn": "Save", "save-stage-btn": "Save",
"cancel-stage-btn": "Cancel" "cancel-stage-btn": "Cancel"
}, },
"edit-item": {
"missing-title-err": "An item title is required"
},
"edit-section": { "edit-section": {
"edit-section-title": "Edit Section", "edit-section-title": "Edit Section",
"add-section-title": "Add New Section", "add-section-title": "Add New Section",

View File

@ -198,19 +198,26 @@ export default {
// Convert form data back into section.item data structure // Convert form data back into section.item data structure
const structured = {}; const structured = {};
this.formData.forEach((row) => { structured[row.name] = row.value; }); this.formData.forEach((row) => { structured[row.name] = row.value; });
// Some attributes need a little extra formatting if (!structured.title) { // Missing title, show error and don't proceed
const newItem = this.formatBeforeSave(structured); this.$toasted.show(
if (this.isNew) { // Insert new item into data store this.$t('interactive-editor.edit-item.missing-title-err'),
newItem.id = `temp_${newItem.title}`; { className: 'toast-error' },
const payload = { newItem, targetSection: this.parentSectionTitle }; );
this.$store.commit(StoreKeys.INSERT_ITEM, payload); } else {
} else { // Update existing item from form data, in the store // Some attributes need a little extra formatting
this.$store.commit(StoreKeys.UPDATE_ITEM, { newItem, itemId: this.itemId }); const newItem = this.formatBeforeSave(structured);
if (this.isNew) { // Insert new item into data store
newItem.id = `temp_${newItem.title}`;
const payload = { newItem, targetSection: this.parentSectionTitle };
this.$store.commit(StoreKeys.INSERT_ITEM, payload);
} else { // Update existing item from form data, in the store
this.$store.commit(StoreKeys.UPDATE_ITEM, { newItem, itemId: this.itemId });
}
// If we're not already in edit mode, enable it now
this.$store.commit(StoreKeys.SET_EDIT_MODE, true);
// Close edit menu
this.$emit('closeEditMenu');
} }
// If we're not already in edit mode, enable it now
this.$store.commit(StoreKeys.SET_EDIT_MODE, true);
// Close edit menu
this.$emit('closeEditMenu');
}, },
/* Some fields require a bit of extra processing before they're saved */ /* Some fields require a bit of extra processing before they're saved */
formatBeforeSave(item) { formatBeforeSave(item) {
@ -225,7 +232,7 @@ export default {
if (str === undefined) return undefined; if (str === undefined) return undefined;
return str === 'true'; return str === 'true';
}; };
if (newItem.tags) newItem.tags = strToTags(newItem.tags); if (newItem.tags) newItem.tags = newItem.tags ? strToTags(newItem.tags) : [];
if (newItem.statusCheck) newItem.statusCheck = strToBool(newItem.statusCheck); if (newItem.statusCheck) newItem.statusCheck = strToBool(newItem.statusCheck);
if (newItem.statusCheckAllowInsecure) { if (newItem.statusCheckAllowInsecure) {
newItem.statusCheckAllowInsecure = strToBool(newItem.statusCheckAllowInsecure); newItem.statusCheckAllowInsecure = strToBool(newItem.statusCheckAllowInsecure);