From 8331d404af04f021540da5242d97a5817635dac7 Mon Sep 17 00:00:00 2001 From: DavidJForgeFlow Date: Fri, 14 Mar 2025 15:19:07 +0100 Subject: [PATCH] [IMP] web_widget_x2many_2d_matrix: allow to set options and attrs for field value --- .../x2many_2d_matrix_field.esm.js | 19 ++++++++++++++++++- .../x2many_2d_matrix_field.xml | 5 +++++ .../x2many_2d_matrix_renderer.esm.js | 10 ++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/web_widget_x2many_2d_matrix/static/src/components/x2many_2d_matrix_field/x2many_2d_matrix_field.esm.js b/web_widget_x2many_2d_matrix/static/src/components/x2many_2d_matrix_field/x2many_2d_matrix_field.esm.js index 7903fb069..80570a853 100644 --- a/web_widget_x2many_2d_matrix/static/src/components/x2many_2d_matrix_field/x2many_2d_matrix_field.esm.js +++ b/web_widget_x2many_2d_matrix/static/src/components/x2many_2d_matrix_field/x2many_2d_matrix_field.esm.js @@ -27,12 +27,24 @@ X2Many2DMatrixField.props = { isYClickable: {type: Boolean, optional: true}, showRowTotals: {type: Boolean, optional: true}, showColumnTotals: {type: Boolean, optional: true}, + canOpen: {type: Boolean, optional: true}, + canCreate: {type: Boolean, optional: true}, + canWrite: {type: Boolean, optional: true}, + canQuickCreate: {type: Boolean, optional: true}, + canCreateEdit: {type: Boolean, optional: true}, }; X2Many2DMatrixField.components = {X2Many2DMatrixRenderer}; export const x2Many2DMatrixField = { component: X2Many2DMatrixField, - extractProps({attrs}) { + extractProps({attrs, options}) { + const hasCreatePermission = attrs.can_create + ? exprToBoolean(attrs.can_create) + : true; + const hasWritePermission = attrs.can_write + ? exprToBoolean(attrs.can_write) + : true; + const canCreate = options.no_create ? false : hasCreatePermission; return { matrixFields: { value: attrs.field_value, @@ -49,6 +61,11 @@ export const x2Many2DMatrixField = { "show_column_totals" in attrs ? exprToBoolean(attrs.show_column_totals) : true, + canOpen: !options.no_open, + canCreate, + canWrite: hasWritePermission, + canQuickCreate: canCreate && !options.no_quick_create, + canCreateEdit: canCreate && !options.no_create_edit, }; }, }; diff --git a/web_widget_x2many_2d_matrix/static/src/components/x2many_2d_matrix_field/x2many_2d_matrix_field.xml b/web_widget_x2many_2d_matrix/static/src/components/x2many_2d_matrix_field/x2many_2d_matrix_field.xml index c6b02aea6..70f600de3 100644 --- a/web_widget_x2many_2d_matrix/static/src/components/x2many_2d_matrix_field/x2many_2d_matrix_field.xml +++ b/web_widget_x2many_2d_matrix/static/src/components/x2many_2d_matrix_field/x2many_2d_matrix_field.xml @@ -8,6 +8,11 @@ showRowTotals="props.showRowTotals" showColumnTotals="props.showColumnTotals" readonly="props.readonly" + canOpen="props.canOpen" + canCreate="props.canCreate" + canWrite="props.canWrite" + canQuickCreate="props.canQuickCreate" + canCreateEdit="props.canCreateEdit" /> diff --git a/web_widget_x2many_2d_matrix/static/src/components/x2many_2d_matrix_renderer/x2many_2d_matrix_renderer.esm.js b/web_widget_x2many_2d_matrix/static/src/components/x2many_2d_matrix_renderer/x2many_2d_matrix_renderer.esm.js index 0fdd4ca41..cadc25e13 100644 --- a/web_widget_x2many_2d_matrix/static/src/components/x2many_2d_matrix_renderer/x2many_2d_matrix_renderer.esm.js +++ b/web_widget_x2many_2d_matrix/static/src/components/x2many_2d_matrix_renderer/x2many_2d_matrix_renderer.esm.js @@ -159,6 +159,11 @@ export class X2Many2DMatrixRenderer extends Component { readonly: this.props.readonly, record: record, name: this.matrixFields.value, + canCreate: this.props.canCreate, + canOpen: this.props.canOpen, + canWrite: this.props.canWrite, + canQuickCreate: this.props.canQuickCreate, + canCreateEdit: this.props.canCreateEdit, }; if (value === null) { result.readonly = true; @@ -174,4 +179,9 @@ X2Many2DMatrixRenderer.props = { readonly: {type: Boolean, optional: true}, showRowTotals: {type: Boolean, optional: true}, showColumnTotals: {type: Boolean, optional: true}, + canOpen: {type: Boolean, optional: true}, + canCreate: {type: Boolean, optional: true}, + canWrite: {type: Boolean, optional: true}, + canQuickCreate: {type: Boolean, optional: true}, + canCreateEdit: {type: Boolean, optional: true}, };