Commit b8a54f81 authored by Tristan Cavelier's avatar Tristan Cavelier

DATETIMEFIELDUPDATE WIP recoded (not fully)

parent 7c386987
......@@ -70,7 +70,6 @@ and handling data send&receive.
if (typeof result[key] === "object" &&
result[key].hasOwnProperty("key") &&
gadget.state.options.form_content[result[key].key]) {
console.log("page_form: in loadFormContent", result[key]['default'], gadget.state.options.form_content[result[key].key]);
result[key]['default'] = gadget.state.options.form_content[result[key].key];
}
}
......@@ -93,6 +92,25 @@ and handling data send&receive.
}
}
function updateErp5DocumentForAfterSave(new_erp5_document, submitted_content, current_content) {
var view = new_erp5_document._embedded._view,
content_key_list = Object.keys(current_content),
document_reference_dict = {},
document_key_list = Object.keys(view),
i = 0, field = null, key = "";
for (; i < document_key_list.length; i += 1) {
field = view[document_key_list[i]];
document_reference_dict[field.key] = field;
}
for (i = 0; i < content_key_list.length; i += 1) {
key = content_key_list[i];
if (document_reference_dict[key] &&
JSON.stringify(submitted_content[key]) === JSON.stringify(document_reference_dict[key].default)) {
document_reference_dict[key].default = current_content[key];
}
}
}
function warmupGadgetList(gadget, url_list) {
var i;
for (i = 0; i < url_list.length; i += 1) {
......@@ -123,7 +141,6 @@ and handling data send&receive.
// Proxy methods to the child gadget
/////////////////////////////////////////////////////////////////
.declareMethod('triggerSubmit', function triggerSubmit() {
console.log("page form: triggeringSubmit");
return this.getDeclaredGadget('fg')
.push(function (g) {
return g.triggerSubmit();
......@@ -165,15 +182,10 @@ and handling data send&receive.
.allowPublicAcquisition('notifySubmit', function notifySubmit() {
return this.triggerSubmit();
})
.allowPublicAcquisition("notifyChange", function notifyChange(params) {
var gadget = this;
console.log("page form: notifyChange", params);
return gadget.getDeclaredGadget("fg")
.push(g => g.getContent())
.push(content => { gadget._XXX_change_content = content;
return gadget.notifyChange.apply(gadget, params);
});
})/**/
.allowPublicAcquisition("notifyChange", function notifyChange(argument_list) {
this.state.changing = true;
return this.notifyChange.apply(this, argument_list);
})
/**
* Render obtain ERP5 Document and assigned Form Definition.
*
......@@ -297,7 +309,8 @@ and handling data send&receive.
.push(function (result) {
page_template_gadget = result;
var sub_options = options.fg || {};
var sub_options = options.fg || {},
queue = null;
loadFormContent(gadget, erp5_document._embedded._view);
......@@ -308,22 +321,22 @@ and handling data send&receive.
sub_options.jio_key = options.jio_key; // jIO identifier of currently rendered ERP5 document
sub_options.editable = options.editable; // form decides on editability of its fields
console.log("page form: page_template_gadget.render", sub_options);
return page_template_gadget.getContent() // XXX don't do it if jio_key is different than previous one
.push(function (content) {
console.log("page form: gadget._XXX_submitted_content", gadget._XXX_submitted_content);
console.log("page form: page_template_gadget.getContent", content);
try {
if (gadget._XXX_submitted_content && gadget._XXX_change_content)
if (sub_options.erp5_document._embedded._view.my_short_title.key === "field_my_short_title")
if (gadget._XXX_submitted_content.field_my_short_title === sub_options.erp5_document._embedded._view.my_short_title.default)
if (sub_options.erp5_document._embedded._view.my_short_title.default !== content.field_my_short_title)
sub_options.erp5_document._embedded._view.my_short_title.default = content.field_my_short_title; // please notifyChange at end of this onChangeState ?
} catch (_) {}
delete gadget._XXX_change_content;
delete gadget._XXX_submitted_content;
return page_template_gadget.render(sub_options);
if (gadget.state.changing && gadget.state.last_submitted_content) {
queue = page_template_gadget.getContent()
.push(function (content) {
updateErp5DocumentForAfterSave(
sub_options.erp5_document,
JSON.parse(gadget.state.last_submitted_content),
content
);
gadget.state.last_submitted_content = null; // free some memory
gadget.state.changing = false;
});
}
return (queue || new RSVP.Queue())
.push(function () {
return page_template_gadget.render(sub_options);
});
})
.push(function () {
......@@ -378,7 +391,6 @@ and handling data send&receive.
on failure it throws an error with the invalid response
*/
.allowPublicAcquisition("submitContent", function submitContent(param_list) {
console.log("page form: submitContent on call");
var gadget = this,
jio_key = param_list[0],
target_url = param_list[1],
......@@ -386,9 +398,13 @@ and handling data send&receive.
return gadget.notifySubmitting()
.push(function () {
return gadget.getDeclaredGadget("fg").push(g => g.getContent()).push(content => { gadget._XXX_submitted_content = content; });
return gadget.getDeclaredGadget("fg");
})
.push(function () {
.push(function (sub_gadget) {
return sub_gadget.getContent();
})
.push(function (content) {
gadget.state.last_submitted_content = JSON.stringify(content);
return gadget.jio_putAttachment(jio_key, target_url, content_dict);
})
.push(function (attachment) {
......@@ -402,7 +418,6 @@ and handling data send&receive.
.push(function (response_text) {
var response = JSON.parse(response_text.target.result);
console.log("page form: notifySubmitted");
return gadget.notifySubmitted({
"message": response.portal_status_message,
"status": response.portal_status_level || "success"
......@@ -449,7 +464,6 @@ and handling data send&receive.
return response_view._notification.message;
})
.push(function (translated_message) {
console.log("page form: notifySubmitted");
return gadget.notifySubmitted({
"message": translated_message,
"status": response_view._notification ? response_view._notification.status : "success"
......@@ -481,7 +495,6 @@ and handling data send&receive.
attachment.target.status < 400) {
return gadget.translate("Action succeeded.")
.push(function (translated_message) {
console.log("page form: notifySubmitted");
return gadget.notifySubmitted({
"message": translated_message,
"status": "success"
......@@ -496,7 +509,6 @@ and handling data send&receive.
// likely product of export/report (thus PDF, ODT ...)
return gadget.translate("Data received.")
.push(function (translated_message) {
console.log("page form: notifySubmitted");
return gadget.notifySubmitted({
"message": translated_message,
"status": "success"
......@@ -526,7 +538,6 @@ and handling data send&receive.
if (error === undefined || error.target === undefined) {
return gadget.translate('Encountered an unknown error. Try to resubmit.')
.push(function (translated_message) {
console.log("page form: notifySubmitted");
return gadget.notifySubmitted({
'message': translated_message,
'status': 'error'
......@@ -551,7 +562,6 @@ and handling data send&receive.
if (error.target.response.type === 'application/json' ||
error.target.response.type === 'application/hal+json') {
console.log("page form: notifySubmitted");
return gadget.notifySubmitted()
.push(function () {
return jIO.util.readBlobAsText(error.target.response);
......@@ -601,7 +611,6 @@ and handling data send&receive.
// If the response in empty with only HTTP Status code then we display
// our static translated error_text to the user
console.log("page form: notifySubmitted");
return gadget.notifySubmitted()
.push(function () {
return gadget.translate(error_text);
......
......@@ -214,7 +214,7 @@
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
<value> <string>ERP5TypeTestCase</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
......
......@@ -19,7 +19,7 @@
rJS(window)
.declareMethod('render', function render(options) {
if (this.state && this.state.name === "field_my_title" || options && options.name === "field_my_title") console.log("input: render on call", options);
//if (this.state && this.state.name === "field_my_short_title" || options && options.name === "field_my_short_title") console.log("input: render on call", options);
return this.changeState({
value: getFirstNonEmpty(options.value, ""),
checked: options.checked,
......@@ -42,11 +42,11 @@
})
.onStateChange(function onStateChange(modification_dict) {
if (this.state.name === "field_my_title") console.log("input: onStateChange on call", modification_dict);
//if (this.state.name === "field_my_short_title") console.log("input: onStateChange on call", modification_dict);
var textarea = this.element.querySelector('input'),
tmp; // general use short-scope variable
if (modification_dict.hasOwnProperty("value")) { // TRISTAN
/*if (modification_dict.hasOwnProperty("value")) { // TRISTAN
textarea.value = this.state.value;
textarea.setAttribute('value', this.state.value);
}
......@@ -57,17 +57,17 @@
} else {
textarea.removeAttribute('checked');
}
}
}/**/
if (this.state.type === 'checkbox') {
// textarea.checked = this.state.checked; // TRISTAN
textarea.checked = this.state.checked; // TRISTAN
} else {
// textarea.setAttribute('value', this.state.value); // TRISTAN
// textarea.value = this.state.value; // TRISTAN
textarea.setAttribute('value', this.state.value); // TRISTAN
textarea.value = this.state.value; // TRISTAN
}
if (this.state.type === 'radio') {
// textarea.checked = this.state.checked; // TRISTAN
}
textarea.checked = this.state.checked; // TRISTAN
}/**/
textarea.id = this.state.id || this.state.name;
textarea.setAttribute('name', this.state.name);
......@@ -223,13 +223,13 @@
.declareAcquiredMethod("notifyChange", "notifyChange")
//.onEvent('change', function change() {
.onEvent('change', function change(event) {
if (this.state.name === "field_my_title") console.log("input: event change", event, event.target.value);
//if (this.state.name === "field_my_short_title") console.log("input: event change", event, event.target.value);
var input = this.element.querySelector("input"); // TRISTAN
if (input) {
// force the state to have the current edited value
this.state.checked = input.checked;
this.state.value = input.value;
}
}/**/
return RSVP.all([
this.checkValidity(),
this.notifyChange("change")
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment