From 4e409790997cab29f75a3943a1b7aa936c3ecd43 Mon Sep 17 00:00:00 2001 From: Mohammed Shekha Date: Thu, 27 May 2021 09:55:42 +0000 Subject: [PATCH] [IMP] web: o_form_label_empty on standalone label Before this commit: when standalone label is rendered in form view class o_form_label_empty is not added due to which label text is not muted. After this commit: when standalone label is rendered, label is sometime rendered before field widget is rendered due to which o_form_label_empty class is not added to label, with this commit we postprocess labels so that o_form_label_empty is added on all field labels. Also with commit, signature widget's isSet method will return true if value is set in signature widget, this will make label of signature widget muted if it is empty and form view mode is readonly. task-2523197 closes odoo/odoo#71322 Signed-off-by: Simon Genin (ges@odoo) --- .../static/src/legacy/js/fields/signature.js | 5 +- .../src/legacy/js/views/form/form_renderer.js | 24 ++++++-- .../static/tests/legacy/views/form_tests.js | 59 +++++++++++++++++++ 3 files changed, 80 insertions(+), 8 deletions(-) diff --git a/addons/web/static/src/legacy/js/fields/signature.js b/addons/web/static/src/legacy/js/fields/signature.js index eadef64d4f5..fea26660a8c 100644 --- a/addons/web/static/src/legacy/js/fields/signature.js +++ b/addons/web/static/src/legacy/js/fields/signature.js @@ -45,10 +45,7 @@ var FieldBinarySignature = AbstractFieldBinary.extend({ * @override */ isSet: function () { - if (this.mode === 'edit') { - return this.value; - } - return true; + return this.value; }, //-------------------------------------------------------------------------- diff --git a/addons/web/static/src/legacy/js/views/form/form_renderer.js b/addons/web/static/src/legacy/js/views/form/form_renderer.js index 3608efe53b6..4c4a517f84c 100644 --- a/addons/web/static/src/legacy/js/views/form/form_renderer.js +++ b/addons/web/static/src/legacy/js/views/form/form_renderer.js @@ -46,6 +46,7 @@ var FormRenderer = BasicRenderer.extend({ this.idsForLabels = {}; this.lastActivatedFieldIndex = -1; this.alertFields = {}; + this.labelsToPostProcess = []; // The form renderer doesn't render invsible fields (invisible="1") by // default, to speed up the rendering. However, we sometimes have to // display them (e.g. in Studio, in "show invisible" mode). This flag @@ -170,6 +171,7 @@ var FormRenderer = BasicRenderer.extend({ if (self.$('.o_field_invalid').length) { self.canBeSaved(self.state.id); } + self._postProcessLabels(); return resetWidgets; }); }, @@ -461,6 +463,18 @@ var FormRenderer = BasicRenderer.extend({ this.defaultFocusField = widget; } }, + /** + * This function is called once form view is rendered or modifiers are + * changed to process labels to add o_form_label_empty. + * + * @private + */ + _postProcessLabels() { + this.labelsToPostProcess.forEach((label) => { + label.call(); + }); + this.labelsToPostProcess = []; + }, /** * @private * @param {Object} node @@ -959,11 +973,12 @@ var FormRenderer = BasicRenderer.extend({ callback: function (element, modifiers, record) { var widgets = self.allFieldWidgets[record.id]; var widget = _.findWhere(widgets, {name: fieldName}); + const fieldsInfo = record.fieldsInfo[self.viewType]; if (!widget) { - return; // FIXME this occurs if the widget is created - // after the label (explicit