Keep put-form open on error

This commit is contained in:
Shweelan Samson authored and Zaid Abdulla committed 2018-12-27 01:21:18 -08:00
1 parent cae54613a2
commit 14c629689f
5 files changed
+282 -174

No files matched your search

+21 -12
View File
@@ -52,13 +52,14 @@ const unpackSmartQuery = memoize(query => {
}); });
}); });
function putActionHandler(action, object) { function putActionHandler(action, _object) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const object = Object.assign({}, _object);
if (action === "save") { if (action === "save") {
const file = object["file"] ? object["file"][0] : null; const file = object["file"] ? object["file"][0] : null;
delete object["file"]; delete object["file"];
if (!file) return void reject(new Error("File not selected")); if (!file) return void resolve({ file: "File not selected" });
const id = file.name; const id = file.name;
@@ -67,7 +68,7 @@ function putActionHandler(action, object) {
.then(exists => { .then(exists => {
if (exists) { if (exists) {
store.fulfill(0, Date.now()); store.fulfill(0, Date.now());
return void reject(new Error("File already exists")); return void resolve({ file: "File already exists" });
} }
const headers = Object.assign( const headers = Object.assign(
{ {
@@ -277,15 +278,23 @@ function renderTable(
Object.assign( Object.assign(
{ {
actionHandler: (action, object) => { actionHandler: (action, object) => {
putActionHandler(action, object) return new Promise(resolve => {
.then(() => { putActionHandler(action, object)
overlay.close(cb); .then(errors => {
}) errors = errors ? Object.values(errors) : [];
.catch(err => { if (errors.length) {
notifications.push("error", err.message); for (const err of errors)
overlay.close(cb); notifications.push("error", err);
m.redraw(); } else {
}); overlay.close(cb);
}
resolve();
})
.catch(err => {
notifications.push("error", err.message);
resolve();
});
});
} }
}, },
formData formData
+85 -51
View File
@@ -37,58 +37,62 @@ const unpackSmartQuery = memoize(query => {
}); });
}); });
function putActionHandler(action, object, isNew) { function putActionHandler(action, _object, isNew) {
if (action === "save") { return new Promise((resolve, reject) => {
const id = object["_id"]; const object = Object.assign({}, _object);
delete object["_id"]; if (action === "save") {
const id = object["_id"];
delete object["_id"];
if (!id) return void notifications.push("error", "ID can not be empty"); const errors = {};
store if (!id) errors["_id"] = "ID can not be empty";
.resourceExists("presets", id) if (!object.provision) errors.provision = "Provision not selected";
.then(exists => {
if (exists && isNew) {
notifications.push("error", "Preset already exists");
store.fulfill(0, Date.now());
return;
}
if (!exists && !isNew) { if (Object.keys(errors).length) return void resolve(errors);
notifications.push("error", "Preset already deleted");
store.fulfill(0, Date.now());
return;
}
store store
.putResource("presets", id, object) .resourceExists("presets", id)
.then(() => { .then(exists => {
notifications.push( if (exists && isNew) {
"success",
`Preset ${exists ? "updated" : "created"}`
);
store.fulfill(0, Date.now()); store.fulfill(0, Date.now());
}) return void resolve({ _id: "Preset already exists" });
.catch(err => { }
notifications.push("error", err.message);
}); if (!exists && !isNew) {
}) store.fulfill(0, Date.now());
.catch(err => { return void resolve({ _id: "Preset does not exist" });
notifications.push("error", err.message); }
});
} else if (action === "delete") { store
store .putResource("presets", id, object)
.deleteResource("presets", object["_id"]) .then(() => {
.then(() => { notifications.push(
notifications.push("success", "Preset deleted"); "success",
store.fulfill(0, Date.now()); `Preset ${exists ? "updated" : "created"}`
}) );
.catch(err => { store.fulfill(0, Date.now());
notifications.push("error", err.message); resolve();
store.fulfill(0, Date.now()); })
}); .catch(reject);
} else { })
throw new Error("Undefined action"); .catch(reject);
} } else if (action === "delete") {
store
.deleteResource("presets", object["_id"])
.then(() => {
notifications.push("success", "Preset deleted");
store.fulfill(0, Date.now());
resolve();
})
.catch(err => {
reject(err);
store.fulfill(0, Date.now());
});
} else {
reject(new Error("Undefined action"));
}
});
} }
const formData = { const formData = {
@@ -220,8 +224,23 @@ function renderTable(
{ {
base: preset, base: preset,
actionHandler: (action, object) => { actionHandler: (action, object) => {
overlay.close(cb); return new Promise(resolve => {
putActionHandler(action, object, false); putActionHandler(action, object, false)
.then(errors => {
errors = errors ? Object.values(errors) : [];
if (errors.length) {
for (const err of errors)
notifications.push("error", err);
} else {
overlay.close(cb);
}
resolve();
})
.catch(err => {
notifications.push("error", err.message);
resolve();
});
});
} }
}, },
formData formData
@@ -323,8 +342,23 @@ function renderTable(
Object.assign( Object.assign(
{ {
actionHandler: (action, object) => { actionHandler: (action, object) => {
putActionHandler(action, object, true); return new Promise(resolve => {
overlay.close(cb); putActionHandler(action, object, true)
.then(errors => {
errors = errors ? Object.values(errors) : [];
if (errors.length) {
for (const err of errors)
notifications.push("error", err);
} else {
overlay.close(cb);
}
resolve();
})
.catch(err => {
notifications.push("error", err.message);
resolve();
});
});
} }
}, },
formData formData
+82 -53
View File
@@ -32,58 +32,57 @@ const unpackSmartQuery = memoize(query => {
}); });
}); });
function putActionHandler(action, object, isNew) { function putActionHandler(action, _object, isNew) {
if (action === "save") { return new Promise((resolve, reject) => {
const id = object["_id"]; const object = Object.assign({}, _object);
delete object["_id"]; if (action === "save") {
const id = object["_id"];
delete object["_id"];
if (!id) return void notifications.push("error", "ID can not be empty"); if (!id) return void resolve({ _id: "ID can not be empty" });
store store
.resourceExists("provisions", id) .resourceExists("provisions", id)
.then(exists => { .then(exists => {
if (exists && isNew) { if (exists && isNew) {
notifications.push("error", "Provision already exists");
store.fulfill(0, Date.now());
return;
}
if (!exists && !isNew) {
notifications.push("error", "Provision already deleted");
store.fulfill(0, Date.now());
return;
}
store
.putResource("provisions", id, object)
.then(() => {
notifications.push(
"success",
`Provision ${exists ? "updated" : "created"}`
);
store.fulfill(0, Date.now()); store.fulfill(0, Date.now());
}) return void resolve({ _id: "Provision already exists" });
.catch(err => { }
notifications.push("error", err.message);
}); if (!exists && !isNew) {
}) store.fulfill(0, Date.now());
.catch(err => { return void resolve({ _id: "Provision does not exist" });
notifications.push("error", err.message); }
});
} else if (action === "delete") { store
store .putResource("provisions", id, object)
.deleteResource("provisions", object["_id"]) .then(() => {
.then(() => { notifications.push(
notifications.push("success", "Provision deleted"); "success",
store.fulfill(0, Date.now()); `Provision ${exists ? "updated" : "created"}`
}) );
.catch(err => { store.fulfill(0, Date.now());
notifications.push("error", err.message); resolve();
store.fulfill(0, Date.now()); })
}); .catch(reject);
} else { })
throw new Error("Undefined action"); .catch(reject);
} } else if (action === "delete") {
store
.deleteResource("provisions", object["_id"])
.then(() => {
notifications.push("success", "Provision deleted");
store.fulfill(0, Date.now());
resolve();
})
.catch(err => {
store.fulfill(0, Date.now());
reject(err);
});
} else {
reject(new Error("Undefined action"));
}
});
} }
const formData = { const formData = {
@@ -207,8 +206,23 @@ function renderTable(
{ {
base: provision, base: provision,
actionHandler: (action, object) => { actionHandler: (action, object) => {
overlay.close(cb); return new Promise(resolve => {
putActionHandler(action, object, false); putActionHandler(action, object, false)
.then(errors => {
errors = errors ? Object.values(errors) : [];
if (errors.length) {
for (const err of errors)
notifications.push("error", err);
} else {
overlay.close(cb);
}
resolve();
})
.catch(err => {
notifications.push("error", err.message);
resolve();
});
});
} }
}, },
formData formData
@@ -316,8 +330,23 @@ function renderTable(
Object.assign( Object.assign(
{ {
actionHandler: (action, object) => { actionHandler: (action, object) => {
putActionHandler(action, object, true); return new Promise(resolve => {
overlay.close(cb); putActionHandler(action, object, true)
.then(errors => {
errors = errors ? Object.values(errors) : [];
if (errors.length) {
for (const err of errors)
notifications.push("error", err);
} else {
overlay.close(cb);
}
resolve();
})
.catch(err => {
notifications.push("error", err.message);
resolve();
});
});
} }
}, },
formData formData
+12 -5
View File
@@ -138,7 +138,9 @@ const component = {
onclick: e => { onclick: e => {
e.redraw = false; e.redraw = false;
e.target.disabled = true; e.target.disabled = true;
actionHandler("delete", current.object); actionHandler("delete", current.object).then(() => {
e.target.disabled = false;
});
} }
}, },
"Delete" "Delete"
@@ -155,11 +157,16 @@ const component = {
{ {
onsubmit: e => { onsubmit: e => {
e.redraw = false; e.redraw = false;
e.target.onsubmit = null; // const onsubmit = e.target.onsubmit;
e.preventDefault(); e.preventDefault();
for (const elem of e.target.elements) elem.disabled = true; // e.target.onsubmit = null;
submit.dom.textContent = "Loading ..."; submit.dom.disabled = true;
actionHandler("save", current.object); // submit.dom.textContent = "Loading ...";
actionHandler("save", current.object).then(() => {
// submit.dom.textContent = "Save";
// e.target.onsubmit = onsubmit;
submit.dom.disabled = false;
});
} }
}, },
form form
+82 -53
View File
@@ -32,58 +32,57 @@ const unpackSmartQuery = memoize(query => {
}); });
}); });
function putActionHandler(action, object, isNew) { function putActionHandler(action, _object, isNew) {
if (action === "save") { return new Promise((resolve, reject) => {
const id = object["_id"]; const object = Object.assign({}, _object);
delete object["_id"]; if (action === "save") {
const id = object["_id"];
delete object["_id"];
if (!id) return void notifications.push("error", "ID can not be empty"); if (!id) return void resolve({ _id: "ID can not be empty" });
store store
.resourceExists("virtualParameters", id) .resourceExists("virtualParameters", id)
.then(exists => { .then(exists => {
if (exists && isNew) { if (exists && isNew) {
notifications.push("error", "Virtual parameter already exists");
store.fulfill(0, Date.now());
return;
}
if (!exists && !isNew) {
notifications.push("error", "Virtual parameter already deleted");
store.fulfill(0, Date.now());
return;
}
store
.putResource("virtualParameters", id, object)
.then(() => {
notifications.push(
"success",
`Virtual parameter ${exists ? "updated" : "created"}`
);
store.fulfill(0, Date.now()); store.fulfill(0, Date.now());
}) return void resolve({ _id: "Virtual parameter already exists" });
.catch(err => { }
notifications.push("error", err.message);
}); if (!exists && !isNew) {
}) store.fulfill(0, Date.now());
.catch(err => { return void resolve({ _id: "Virtual parameter does not exist" });
notifications.push("error", err.message); }
});
} else if (action === "delete") { store
store .putResource("virtualParameters", id, object)
.deleteResource("virtualParameters", object["_id"]) .then(() => {
.then(() => { notifications.push(
notifications.push("success", "Virtual parameter deleted"); "success",
store.fulfill(0, Date.now()); `Virtual parameter ${exists ? "updated" : "created"}`
}) );
.catch(err => { store.fulfill(0, Date.now());
notifications.push("error", err.message); resolve();
store.fulfill(0, Date.now()); })
}); .catch(reject);
} else { })
throw new Error("Undefined action"); .catch(reject);
} } else if (action === "delete") {
store
.deleteResource("virtualParameters", object["_id"])
.then(() => {
notifications.push("success", "Virtual parameter deleted");
store.fulfill(0, Date.now());
resolve();
})
.catch(err => {
store.fulfill(0, Date.now());
reject(err);
});
} else {
reject(new Error("Undefined action"));
}
});
} }
const formData = { const formData = {
@@ -208,8 +207,23 @@ function renderTable(
{ {
base: virtualParameter, base: virtualParameter,
actionHandler: (action, object) => { actionHandler: (action, object) => {
overlay.close(cb); return new Promise(resolve => {
putActionHandler(action, object, false); putActionHandler(action, object, false)
.then(errors => {
errors = errors ? Object.values(errors) : [];
if (errors.length) {
for (const err of errors)
notifications.push("error", err);
} else {
overlay.close(cb);
}
resolve();
})
.catch(err => {
notifications.push("error", err.message);
resolve();
});
});
} }
}, },
formData formData
@@ -326,8 +340,23 @@ function renderTable(
Object.assign( Object.assign(
{ {
actionHandler: (action, object) => { actionHandler: (action, object) => {
putActionHandler(action, object, true); return new Promise(resolve => {
overlay.close(cb); putActionHandler(action, object, true)
.then(errors => {
errors = errors ? Object.values(errors) : [];
if (errors.length) {
for (const err of errors)
notifications.push("error", err);
} else {
overlay.close(cb);
}
resolve();
})
.catch(err => {
notifications.push("error", err.message);
resolve();
});
});
} }
}, },
formData formData