[MIG] web_widget_dropdown_dynamic: Migration to 18.0

pull/3032/head
Bhavesh Heliconia 2024-12-23 16:53:08 +05:30
parent 20a9a82076
commit a8789ec0f0
6 changed files with 40 additions and 36 deletions

View File

@ -17,22 +17,22 @@ Dynamic Dropdown Widget
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3 :alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github
:target: https://github.com/OCA/web/tree/17.0/web_widget_dropdown_dynamic :target: https://github.com/OCA/web/tree/18.0/web_widget_dropdown_dynamic
:alt: OCA/web :alt: OCA/web
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/web-17-0/web-17-0-web_widget_dropdown_dynamic :target: https://translation.odoo-community.org/projects/web-18-0/web-18-0-web_widget_dropdown_dynamic
:alt: Translate me on Weblate :alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/web&target_branch=17.0 :target: https://runboat.odoo-community.org/builds?repo=OCA/web&target_branch=18.0
:alt: Try me on Runboat :alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5| |badge1| |badge2| |badge3| |badge4| |badge5|
Dynamic dropdown widget that supports resolving options from backend of: Dynamic dropdown widget that supports resolving options from backend of:
- ``fields.Char`` - ``fields.Char``
- ``fields.Integer`` - ``fields.Integer``
- ``fields.Selection`` - ``fields.Selection``
**NOTE:** This widget is not intended to *extend* ``fields.Selection``, **NOTE:** This widget is not intended to *extend* ``fields.Selection``,
but to filter selection values. For fully-dynamic set of options, use but to filter selection values. For fully-dynamic set of options, use
@ -84,7 +84,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues <https://github.com/OCA/web/issues>`_. Bugs are tracked on `GitHub Issues <https://github.com/OCA/web/issues>`_.
In case of trouble, please check there if your issue has already been reported. In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/web/issues/new?body=module:%20web_widget_dropdown_dynamic%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. `feedback <https://github.com/OCA/web/issues/new?body=module:%20web_widget_dropdown_dynamic%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues. Do not contact contributors directly about support or help with technical issues.
@ -99,23 +99,25 @@ Authors
Contributors Contributors
------------ ------------
- `CorporateHub <https://corporatehub.eu/>`__ - `CorporateHub <https://corporatehub.eu/>`__
- Alexey Pelykh <alexey.pelykh@corphub.eu> - Alexey Pelykh <alexey.pelykh@corphub.eu>
- `Therp BV <https://therp.nl/>`__ - `Therp BV <https://therp.nl/>`__
- Ronald Portier <ronald@therp.nl> - Ronald Portier <ronald@therp.nl>
- Thanakrit Pintana <thanakrit.p39@gmail.com> - Thanakrit Pintana <thanakrit.p39@gmail.com>
- `Trobz <https://trobz.com>`__: - `Trobz <https://trobz.com>`__:
- Son Ho <sonho@trobz.com> - Son Ho <sonho@trobz.com>
- `Tecnativa <https://www.tecnativa.com>`__: - `Tecnativa <https://www.tecnativa.com>`__:
- Carlos Roca - Carlos Roca
- ``Heliconia Solutions Pvt. Ltd. <https://www.heliconia.io>``\ \_
Other credits Other credits
------------- -------------
@ -136,6 +138,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and mission is to support the collaborative development of Odoo features and
promote its widespread use. promote its widespread use.
This module is part of the `OCA/web <https://github.com/OCA/web/tree/17.0/web_widget_dropdown_dynamic>`_ project on GitHub. This module is part of the `OCA/web <https://github.com/OCA/web/tree/18.0/web_widget_dropdown_dynamic>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

@ -5,7 +5,7 @@
"name": "Dynamic Dropdown Widget", "name": "Dynamic Dropdown Widget",
"summary": "This module adds support for dynamic dropdown widget", "summary": "This module adds support for dynamic dropdown widget",
"category": "Web", "category": "Web",
"version": "17.0.1.0.0", "version": "18.0.1.0.0",
"license": "AGPL-3", "license": "AGPL-3",
"author": "CorporateHub, Odoo Community Association (OCA)", "author": "CorporateHub, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/web", "website": "https://github.com/OCA/web",

View File

@ -13,4 +13,5 @@
> - Son Ho \<<sonho@trobz.com>\> > - Son Ho \<<sonho@trobz.com>\>
- [Tecnativa](https://www.tecnativa.com): - [Tecnativa](https://www.tecnativa.com):
- Carlos Roca - Carlos Roca
- `Heliconia Solutions Pvt. Ltd. <https://www.heliconia.io>`_

View File

@ -369,7 +369,7 @@ ul.auto-toc {
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:cd8f2fbb81d5981346094e7fb21bd25632e10536593177a28be1aca666f715a5 !! source digest: sha256:cd8f2fbb81d5981346094e7fb21bd25632e10536593177a28be1aca666f715a5
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/web/tree/17.0/web_widget_dropdown_dynamic"><img alt="OCA/web" src="https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/web-17-0/web-17-0-web_widget_dropdown_dynamic"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/web&amp;target_branch=17.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p> <p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/web/tree/18.0/web_widget_dropdown_dynamic"><img alt="OCA/web" src="https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/web-18-0/web-18-0-web_widget_dropdown_dynamic"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/web&amp;target_branch=18.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>Dynamic dropdown widget that supports resolving options from backend of:</p> <p>Dynamic dropdown widget that supports resolving options from backend of:</p>
<blockquote> <blockquote>
<ul class="simple"> <ul class="simple">
@ -431,7 +431,7 @@ and Two.</p>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/web/issues">GitHub Issues</a>. <p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/web/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported. In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed If you spotted it first, help us to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/web/issues/new?body=module:%20web_widget_dropdown_dynamic%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p> <a class="reference external" href="https://github.com/OCA/web/issues/new?body=module:%20web_widget_dropdown_dynamic%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p> <p>Do not contact contributors directly about support or help with technical issues.</p>
</div> </div>
<div class="section" id="credits"> <div class="section" id="credits">
@ -469,6 +469,8 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
<li>Carlos Roca</li> <li>Carlos Roca</li>
</ul> </ul>
</li> </li>
<li><p class="first"><tt class="docutils literal">Heliconia Solutions Pvt. Ltd. <span class="pre">&lt;https://www.heliconia.io&gt;</span></tt>_</p>
</li>
</ul> </ul>
</div> </div>
<div class="section" id="other-credits"> <div class="section" id="other-credits">
@ -485,7 +487,7 @@ by Camptocamp</p>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose <p>OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and mission is to support the collaborative development of Odoo features and
promote its widespread use.</p> promote its widespread use.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/web/tree/17.0/web_widget_dropdown_dynamic">OCA/web</a> project on GitHub.</p> <p>This module is part of the <a class="reference external" href="https://github.com/OCA/web/tree/18.0/web_widget_dropdown_dynamic">OCA/web</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p> <p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div> </div>
</div> </div>

View File

@ -1,8 +1,9 @@
/** @odoo-module **/ /** @odoo-module **/
import {_lt} from "@web/core/l10n/translation"; import {_t} from "@web/core/l10n/translation";
import {registry} from "@web/core/registry"; import {registry} from "@web/core/registry";
import {standardFieldProps} from "@web/views/fields/standard_field_props"; import {standardFieldProps} from "@web/views/fields/standard_field_props";
import {Component, onWillStart, onWillUpdateProps} from "@odoo/owl"; import {Component, onWillStart, onWillUpdateProps} from "@odoo/owl";
import {useOwnedDialogs} from "@web/core/utils/hooks";
export class FieldDynamicDropdown extends Component { export class FieldDynamicDropdown extends Component {
static template = "web.SelectionField"; static template = "web.SelectionField";
@ -12,6 +13,8 @@ export class FieldDynamicDropdown extends Component {
context: {type: Object}, context: {type: Object},
}; };
setup() { setup() {
super.setup();
this.dialogs = useOwnedDialogs();
this.type = this.props.record.fields[this.props.name].type; this.type = this.props.record.fields[this.props.name].type;
onWillStart(async () => { onWillStart(async () => {
this.specialData = await this._fetchSpecialData(this.props); this.specialData = await this._fetchSpecialData(this.props);
@ -34,8 +37,8 @@ export class FieldDynamicDropdown extends Component {
return specialDataCaches[key]; return specialDataCaches[key];
} }
get options() { get options() {
var field_type = this.type || ""; const fieldType = this.type || "";
if (["char", "integer", "selection"].includes(field_type)) { if (["char", "integer", "selection"].includes(fieldType)) {
if ( if (
this.props.record.data[this.props.name] && this.props.record.data[this.props.name] &&
!this.specialData !this.specialData
@ -58,8 +61,8 @@ export class FieldDynamicDropdown extends Component {
* @param {Event} ev * @param {Event} ev
*/ */
onChange(ev) { onChange(ev) {
var isInvalid = false; let isInvalid = false;
var value = JSON.parse(ev.target.value); let value = JSON.parse(ev.target.value);
if (this.type === "integer") { if (this.type === "integer") {
value = Number(value); value = Number(value);
if (!value) { if (!value) {
@ -79,11 +82,11 @@ export class FieldDynamicDropdown extends Component {
} }
export const dynamicDropdownField = { export const dynamicDropdownField = {
component: FieldDynamicDropdown, component: FieldDynamicDropdown,
displayName: _lt("Dynamic Dropdown"), displayName: _t("Dynamic Dropdown"),
supportedTypes: ["char", "integer", "selection"], supportedTypes: ["char", "integer", "selection"],
extractProps: (fieldInfo, dynamicInfo) => ({ extractProps: ({options}, {context}) => ({
method: fieldInfo.options?.values, method: options?.values,
context: dynamicInfo.context, context,
}), }),
}; };
registry.category("fields").add("dynamic_dropdown", dynamicDropdownField); registry.category("fields").add("dynamic_dropdown", dynamicDropdownField);

View File

@ -2,7 +2,7 @@
import {editInput, getFixture} from "@web/../tests/helpers/utils"; import {editInput, getFixture} from "@web/../tests/helpers/utils";
import {makeView, setupViewRegistries} from "@web/../tests/views/helpers"; import {makeView, setupViewRegistries} from "@web/../tests/views/helpers";
const {QUnit} = window; import {QUnit} from "@web/static/lib/qunit/qunit";
let serverData = {}; let serverData = {};
let target = getFixture(); let target = getFixture();
@ -93,8 +93,6 @@ QUnit.module("web_widget_dropdown_dynamic", (hooks) => {
}); });
QUnit.test("values are fetched w/o context (char)", async (assert) => { QUnit.test("values are fetched w/o context (char)", async (assert) => {
assert.expect(6); assert.expect(6);
console.log("Start assert", serverData);
console.log("Start makeView");
await makeView({ await makeView({
type: "form", type: "form",
resModel: "sale.order", resModel: "sale.order",
@ -122,8 +120,6 @@ QUnit.module("web_widget_dropdown_dynamic", (hooks) => {
"option[value='\"value b\"']", "option[value='\"value b\"']",
"got `value b` " "got `value b` "
); );
console.log("Ending makeView", target);
}); });
QUnit.test("values are fetched w/o context (integer)", async (assert) => { QUnit.test("values are fetched w/o context (integer)", async (assert) => {