diff --git a/addons/web/static/src/views/fields/dynamic_widget/dynamic_model_field_selector.js b/addons/web/static/src/views/fields/dynamic_widget/dynamic_model_field_selector.js new file mode 100644 index 00000000000..082528e6783 --- /dev/null +++ b/addons/web/static/src/views/fields/dynamic_widget/dynamic_model_field_selector.js @@ -0,0 +1,12 @@ +/** @odoo-module */ + +import { ModelFieldSelector } from "@web/core/model_field_selector/model_field_selector"; + +export class DynamicModelFieldSelector extends ModelFieldSelector { + + static props = { + ...ModelFieldSelector.props, + record: { type: Object, optional: true }, + recordProps: { type: Object, optional: true }, + }; +} diff --git a/addons/web/static/src/views/fields/dynamic_widget/dynamic_model_field_selector_char.js b/addons/web/static/src/views/fields/dynamic_widget/dynamic_model_field_selector_char.js new file mode 100644 index 00000000000..e65ac0023d3 --- /dev/null +++ b/addons/web/static/src/views/fields/dynamic_widget/dynamic_model_field_selector_char.js @@ -0,0 +1,74 @@ +/** @odoo-module */ + +import { CharField, charField } from "@web/views/fields/char/char_field"; +import { registry } from "@web/core/registry"; +import { archParseBoolean } from "@web/views/utils"; + +import { DynamicModelFieldSelector } from "./dynamic_model_field_selector"; + +export class DynamicModelFieldSelectorChar extends CharField { + static components = { + ...CharField.components, + DynamicModelFieldSelector + }; + + static props = { + ...CharField.props, + resModel : { type: String, optional: true }, + onlySearchable: { type: Boolean, optional: true }, + followRelations: { type: Boolean, optional: true }, + } + + /** + * Update record + * + * @param {string} value + * @private + */ + async _onRecordUpdate(value) { + await this.props.record.update({[this.props.name]: value}); + } + + //---- Getters ---- + get getSelectorProps() { + return { + path: this.props.record.data[this.props.name], + resModel: this.getResModel(), + readonly: this.props.readonly, + record: this.props.record, + recordProps: this.props, + update: this._onRecordUpdate.bind(this), + isDebugMode: !!this.env.debug, + filter: this.filter.bind(this), + followRelations: this.props.followRelations, + }; + } + + filter(fieldDef) { + return !this.props.onlySearchable || fieldDef.searchable; + } + + getResModel(props = this.props) { + const resModel = props.record.data[props.resModel]; + if (!resModel) { + return props.record.resModel; + } + return resModel; + } +} + +DynamicModelFieldSelectorChar.template = "web.DynamicModelFieldSelectorChar"; + +export const dynamicModelFieldSelectorChar = { + ...charField, + component: DynamicModelFieldSelectorChar, + extractProps({ options }, dynamicInfo) { + return { + followRelations: options.follow_relations ?? true, + onlySearchable: archParseBoolean(options.only_searchable), + resModel: options.model, + }; + }, +}; + +registry.category("fields").add("DynamicModelFieldSelectorChar", dynamicModelFieldSelectorChar); diff --git a/addons/web/static/src/views/fields/dynamic_widget/dynamic_model_field_selector_char.xml b/addons/web/static/src/views/fields/dynamic_widget/dynamic_model_field_selector_char.xml new file mode 100644 index 00000000000..91269be4533 --- /dev/null +++ b/addons/web/static/src/views/fields/dynamic_widget/dynamic_model_field_selector_char.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/addons/web/tooling/_eslintignore b/addons/web/tooling/_eslintignore index 81b309be399..ae2b35a0dac 100644 --- a/addons/web/tooling/_eslintignore +++ b/addons/web/tooling/_eslintignore @@ -184,6 +184,10 @@ addons/spreadsheet/static/src/o_spreadsheet/o_spreadsheet.js !addons/website_livechat/ !addons/website_livechat/**/* +# Whitelist whatsapp +!whatsapp +!whatsapp/**/* + # Whitelist point_of_sale !addons/point_of_sale/ !addons/point_of_sale/**/* @@ -243,6 +247,8 @@ addons/spreadsheet/static/src/o_spreadsheet/o_spreadsheet.js !pos_restaurant_iot/**/* !pos_settle_due !pos_settle_due/**/* +!whatsapp_pos +!whatsapp_pos/**/* # Whitelist misc enterprise modules !sign diff --git a/addons/web/tooling/_jsconfig.json b/addons/web/tooling/_jsconfig.json index 5749dbfab2a..fd14f58da6b 100644 --- a/addons/web/tooling/_jsconfig.json +++ b/addons/web/tooling/_jsconfig.json @@ -21,6 +21,7 @@ "@bus/*": ["addons/bus/static/src/*"], "@mail/*": ["addons/mail/static/src/*"], "@im_livechat/*": ["addons/im_livechat/static/src/*"], + "@whatsapp/*": ["addons/whatsapp/static/src/*"], "@point_of_sale/*": ["addons/point_of_sale/static/src/*"], "@l10n_co_pos/*": ["addons/l10n_co_pos/static/src/*"], @@ -42,7 +43,8 @@ "@pos_sale_product_configurator/*": ["addons/pos_sale_product_configurator/static/src/*"], "@pos_six/*": ["addons/pos_six/static/src/*"], "@pos_stripe/*": ["addons/pos_stripe/static/src/*"], - "@test_mail/*": ["addons/test_mail/static/src/*"] + "@test_mail/*": ["addons/test_mail/static/src/*"], + "@whatsapp_pos/*": ["addons/whatsapp_pos/static/src/*"] } }, "include": ["**/*.js", "**/*.ts"],