diff --git a/addons/account/static/src/components/account_payment_field/account_payment_field.js b/addons/account/static/src/components/account_payment_field/account_payment_field.js index c28cf1caa73..a053492a829 100644 --- a/addons/account/static/src/components/account_payment_field/account_payment_field.js +++ b/addons/account/static/src/components/account_payment_field/account_payment_field.js @@ -9,8 +9,7 @@ import { parseDate, formatDate } from "@web/core/l10n/dates"; import { formatMonetary } from "@web/views/fields/formatters"; import { standardFieldProps } from "@web/views/fields/standard_field_props"; - -const { Component } = owl; +import { Component } from "@odoo/owl"; class AccountPaymentPopOver extends Component {} AccountPaymentPopOver.props = { diff --git a/addons/account/static/src/components/account_resequence/account_resequence_field.js b/addons/account/static/src/components/account_resequence/account_resequence_field.js index 85c62be3b43..f401f517205 100644 --- a/addons/account/static/src/components/account_resequence/account_resequence_field.js +++ b/addons/account/static/src/components/account_resequence/account_resequence_field.js @@ -1,8 +1,7 @@ /** @odoo-module */ import { registry } from "@web/core/registry"; - -const { Component } = owl; +import { Component } from "@odoo/owl"; class ChangeLine extends Component {} ChangeLine.template = "account.ResequenceChangeLine"; diff --git a/addons/account/static/src/components/grouped_view_widget/grouped_view_widget.js b/addons/account/static/src/components/grouped_view_widget/grouped_view_widget.js index 28fcc7d0d8c..7c5325fe50f 100644 --- a/addons/account/static/src/components/grouped_view_widget/grouped_view_widget.js +++ b/addons/account/static/src/components/grouped_view_widget/grouped_view_widget.js @@ -1,8 +1,7 @@ /** @odoo-module */ import { registry } from "@web/core/registry"; - -const { Component } = owl; +import { Component } from "@odoo/owl"; class ListItem extends Component {} ListItem.template = "account.GroupedItemTemplate"; diff --git a/addons/account/static/src/components/journal_dashboard_activity/journal_dashboard_activity.js b/addons/account/static/src/components/journal_dashboard_activity/journal_dashboard_activity.js index 586ac44e09a..c3f2f94d0b5 100644 --- a/addons/account/static/src/components/journal_dashboard_activity/journal_dashboard_activity.js +++ b/addons/account/static/src/components/journal_dashboard_activity/journal_dashboard_activity.js @@ -4,8 +4,7 @@ import { _t } from "@web/core/l10n/translation"; import { registry } from "@web/core/registry"; import { useService } from "@web/core/utils/hooks"; import { standardFieldProps } from "@web/views/fields/standard_field_props"; - -const { Component } = owl; +import { Component } from "@odoo/owl"; export class JournalDashboardActivity extends Component { static props = { ...standardFieldProps }; diff --git a/addons/account/static/src/components/mail_attachments/mail_attachments.js b/addons/account/static/src/components/mail_attachments/mail_attachments.js index e254da4d354..b3e170229d6 100644 --- a/addons/account/static/src/components/mail_attachments/mail_attachments.js +++ b/addons/account/static/src/components/mail_attachments/mail_attachments.js @@ -4,9 +4,7 @@ import { _t } from "@web/core/l10n/translation"; import { registry } from "@web/core/registry"; import { useService } from "@web/core/utils/hooks"; import { FileInput } from "@web/core/file_input/file_input"; - -const { Component, onWillUnmount } = owl; - +import { Component, onWillUnmount } from "@odoo/owl"; export class MailAttachments extends Component { static template = "account.mail_attachments"; diff --git a/addons/account/static/src/components/open_move_widget/open_move_widget.js b/addons/account/static/src/components/open_move_widget/open_move_widget.js index 120649fc955..944da118a2a 100644 --- a/addons/account/static/src/components/open_move_widget/open_move_widget.js +++ b/addons/account/static/src/components/open_move_widget/open_move_widget.js @@ -3,8 +3,7 @@ import { registry } from "@web/core/registry"; import { useService } from "@web/core/utils/hooks"; import { standardFieldProps } from "@web/views/fields/standard_field_props"; - -const { Component } = owl; +import { Component } from "@odoo/owl"; class OpenMoveWidget extends Component { static props = { ...standardFieldProps }; diff --git a/addons/account/static/src/components/section_and_note_fields_backend/section_and_note_fields_backend.js b/addons/account/static/src/components/section_and_note_fields_backend/section_and_note_fields_backend.js index 0bc97671e4e..83cdaf34dfc 100644 --- a/addons/account/static/src/components/section_and_note_fields_backend/section_and_note_fields_backend.js +++ b/addons/account/static/src/components/section_and_note_fields_backend/section_and_note_fields_backend.js @@ -6,8 +6,7 @@ import { X2ManyField, x2ManyField } from "@web/views/fields/x2many/x2many_field" import { TextField, ListTextField } from "@web/views/fields/text/text_field"; import { CharField } from "@web/views/fields/char/char_field"; import { standardFieldProps } from "@web/views/fields/standard_field_props"; - -const { Component, useEffect } = owl; +import { Component, useEffect } from "@odoo/owl"; export class SectionAndNoteListRenderer extends ListRenderer { /** diff --git a/addons/account/static/src/components/tax_totals/tax_totals.js b/addons/account/static/src/components/tax_totals/tax_totals.js index 06abdd8403c..ec34fd01edd 100644 --- a/addons/account/static/src/components/tax_totals/tax_totals.js +++ b/addons/account/static/src/components/tax_totals/tax_totals.js @@ -6,8 +6,15 @@ import { parseFloat } from "@web/views/fields/parsers"; import { standardFieldProps } from "@web/views/fields/standard_field_props"; import { registry } from "@web/core/registry"; import { getCurrency } from "@web/core/currency"; - -const { Component, onPatched, onWillUpdateProps, onWillRender, toRaw, useRef, useState } = owl; +import { + Component, + onPatched, + onWillUpdateProps, + onWillRender, + toRaw, + useRef, + useState, +} from "@odoo/owl"; /** A line of some TaxTotalsComponent, giving the values of a tax group. diff --git a/addons/analytic/static/src/components/analytic_distribution/analytic_distribution.js b/addons/analytic/static/src/components/analytic_distribution/analytic_distribution.js index 8a71d203643..9f447e79b04 100644 --- a/addons/analytic/static/src/components/analytic_distribution/analytic_distribution.js +++ b/addons/analytic/static/src/components/analytic_distribution/analytic_distribution.js @@ -17,8 +17,14 @@ import { useOpenMany2XRecord } from "@web/views/fields/relational_utils"; import { parseFloat as oParseFloat } from "@web/views/fields/parsers"; import { formatPercentage } from "@web/views/fields/formatters"; import { SelectCreateDialog } from "@web/views/view_dialogs/select_create_dialog"; - -const { Component, useState, useRef, useExternalListener, onWillStart, onPatched } = owl; +import { + Component, + useState, + useRef, + useExternalListener, + onWillStart, + onPatched, +} from "@odoo/owl"; const PLAN_APPLICABILITY = { mandatory: _t("Mandatory"), diff --git a/addons/auth_password_policy/static/src/password_field.js b/addons/auth_password_policy/static/src/password_field.js index 5a5d4e115ed..168bacc6716 100644 --- a/addons/auth_password_policy/static/src/password_field.js +++ b/addons/auth_password_policy/static/src/password_field.js @@ -8,8 +8,7 @@ import { useInputField } from "@web/views/fields/input_field_hook"; import { recommendations, ConcretePolicy } from "./password_policy"; import { Meter } from "./password_meter"; - -const { Component, onWillStart, useState } = owl; +import { Component, onWillStart, useState } from "@odoo/owl"; export class PasswordField extends Component { setup() { diff --git a/addons/auth_password_policy/static/src/password_meter.js b/addons/auth_password_policy/static/src/password_meter.js index 26de9d76db5..212a74863ba 100644 --- a/addons/auth_password_policy/static/src/password_meter.js +++ b/addons/auth_password_policy/static/src/password_meter.js @@ -2,8 +2,7 @@ import { _t } from "@web/core/l10n/translation"; import { computeScore } from "./password_policy"; - -const { Component, xml } = owl; +import { Component, xml } from "@odoo/owl"; export class Meter extends Component { get title() { diff --git a/addons/barcodes/static/src/barcode_handler_field.js b/addons/barcodes/static/src/barcode_handler_field.js index 6e80f48d74f..4d64e85360e 100644 --- a/addons/barcodes/static/src/barcode_handler_field.js +++ b/addons/barcodes/static/src/barcode_handler_field.js @@ -3,8 +3,7 @@ import { registry } from "@web/core/registry"; import { standardFieldProps } from "@web/views/fields/standard_field_props"; import { useBus, useService } from "@web/core/utils/hooks"; - -const { Component, xml } = owl; +import { Component, xml } from "@odoo/owl"; export class BarcodeHandlerField extends Component { setup() { diff --git a/addons/barcodes/static/src/barcode_service.js b/addons/barcodes/static/src/barcode_service.js index 025bdea6ba4..0b2060d8b40 100644 --- a/addons/barcodes/static/src/barcode_service.js +++ b/addons/barcodes/static/src/barcode_service.js @@ -3,8 +3,7 @@ import { isBrowserChrome, isMobileOS } from "@web/core/browser/feature_detection"; import { registry } from "@web/core/registry"; import { session } from "@web/session"; - -const { EventBus, whenReady } = owl; +import { EventBus, whenReady } from "@odoo/owl"; function isEditable(element) { return element.matches('input,textarea,[contenteditable="true"]'); diff --git a/addons/base_automation/static/tests/base_automation_error_dialog.js b/addons/base_automation/static/tests/base_automation_error_dialog.js index 115c1edc1d7..f0ae2a60417 100644 --- a/addons/base_automation/static/tests/base_automation_error_dialog.js +++ b/addons/base_automation/static/tests/base_automation_error_dialog.js @@ -17,8 +17,7 @@ import { registry } from "@web/core/registry"; import { uiService } from "@web/core/ui/ui_service"; import { getFixture, mount, nextTick, patchWithCleanup } from "@web/../tests/helpers/utils"; import { BaseAutomationErrorDialog } from "@base_automation/base_automation_error_dialog"; - -const { toRaw } = owl; +import { toRaw } from "@odoo/owl"; const serviceRegistry = registry.category("services"); diff --git a/addons/base_iban/static/src/components/iban_widget/iban_widget.js b/addons/base_iban/static/src/components/iban_widget/iban_widget.js index d157c122251..f321a04f78f 100644 --- a/addons/base_iban/static/src/components/iban_widget/iban_widget.js +++ b/addons/base_iban/static/src/components/iban_widget/iban_widget.js @@ -4,8 +4,8 @@ import { registry } from "@web/core/registry"; import { CharField, charField } from "@web/views/fields/char/char_field"; import { useDebounced } from "@web/core/utils/timing"; import { useService } from "@web/core/utils/hooks"; +import { useState } from "@odoo/owl"; -const { useState } = owl; export const DELAY = 400; export class IbanWidget extends CharField { diff --git a/addons/board/static/src/add_to_board/add_to_board.js b/addons/board/static/src/add_to_board/add_to_board.js index 968e4a01343..6d3de912520 100644 --- a/addons/board/static/src/add_to_board/add_to_board.js +++ b/addons/board/static/src/add_to_board/add_to_board.js @@ -4,8 +4,8 @@ import { _t } from "@web/core/l10n/translation"; import { Dropdown } from "@web/core/dropdown/dropdown"; import { registry } from "@web/core/registry"; import { useAutofocus, useService } from "@web/core/utils/hooks"; +import { Component, useState } from "@odoo/owl"; -const { Component, useState } = owl; const cogMenuRegistry = registry.category("cogMenu"); /** diff --git a/addons/board/static/src/board_action.js b/addons/board/static/src/board_action.js index 480bbf2b89b..93245272b79 100644 --- a/addons/board/static/src/board_action.js +++ b/addons/board/static/src/board_action.js @@ -3,8 +3,7 @@ import { useService } from "@web/core/utils/hooks"; import { View } from "@web/views/view"; import { makeContext } from "@web/core/context"; - -const { Component, onWillStart } = owl; +import { Component, onWillStart } from "@odoo/owl"; export class BoardAction extends Component { setup() { diff --git a/addons/board/static/src/board_controller.js b/addons/board/static/src/board_controller.js index 7af779e6022..751876257b0 100644 --- a/addons/board/static/src/board_controller.js +++ b/addons/board/static/src/board_controller.js @@ -10,8 +10,7 @@ import { renderToString } from "@web/core/utils/render"; import { useSortable } from "@web/core/utils/sortable"; import { standardViewProps } from "@web/views/standard_view_props"; import { BoardAction } from "./board_action"; - -const { blockDom, Component, useState, useRef } = owl; +import { blockDom, Component, useState, useRef } from "@odoo/owl"; export class BoardController extends Component { setup() { diff --git a/addons/bus/static/src/multi_tab_service.js b/addons/bus/static/src/multi_tab_service.js index 6e048b033c0..b9ee0b9461d 100644 --- a/addons/bus/static/src/multi_tab_service.js +++ b/addons/bus/static/src/multi_tab_service.js @@ -2,8 +2,7 @@ import { registry } from "@web/core/registry"; import { browser } from "@web/core/browser/browser"; - -const { EventBus } = owl; +import { EventBus } from "@odoo/owl"; let multiTabId = 0; /** diff --git a/addons/bus/static/src/services/bus_service.js b/addons/bus/static/src/services/bus_service.js index 94dc92cebad..5bbee08b603 100644 --- a/addons/bus/static/src/services/bus_service.js +++ b/addons/bus/static/src/services/bus_service.js @@ -6,8 +6,7 @@ import { registry } from "@web/core/registry"; import { session } from "@web/session"; import { isIosApp } from "@web/core/browser/feature_detection"; import { WORKER_VERSION } from "@bus/workers/websocket_worker"; - -const { EventBus } = owl; +import { EventBus } from "@odoo/owl"; /** * Communicate with a SharedWorker in order to provide a single websocket diff --git a/addons/calendar/static/src/components/calendar_provider_config/calendar_connect_provider.js b/addons/calendar/static/src/components/calendar_provider_config/calendar_connect_provider.js index 221e64781c6..50e6834bff9 100644 --- a/addons/calendar/static/src/components/calendar_provider_config/calendar_connect_provider.js +++ b/addons/calendar/static/src/components/calendar_provider_config/calendar_connect_provider.js @@ -1,28 +1,27 @@ /** @odoo-module **/ -import { registry } from '@web/core/registry'; +import { registry } from "@web/core/registry"; import { session } from "@web/session"; import { standardWidgetProps } from "@web/views/widgets/standard_widget_props"; import { useService } from "@web/core/utils/hooks"; +import { Component } from "@odoo/owl"; -const { Component } = owl; const providerData = { - 'google': { - 'restart_sync_method': 'restart_google_synchronization', - 'sync_route': '/google_calendar/sync_data' + google: { + restart_sync_method: "restart_google_synchronization", + sync_route: "/google_calendar/sync_data", }, - 'microsoft': { - 'restart_sync_method': 'restart_microsoft_synchronization', - 'sync_route': '/microsoft_calendar/sync_data' - } -} - + microsoft: { + restart_sync_method: "restart_microsoft_synchronization", + sync_route: "/microsoft_calendar/sync_data", + }, +}; export class CalendarConnectProvider extends Component { setup() { super.setup(); - this.orm = useService('orm'); - this.rpc = useService('rpc'); + this.orm = useService("orm"); + this.rpc = useService("rpc"); } /** @@ -34,27 +33,22 @@ export class CalendarConnectProvider extends Component { async onConnect(ev) { ev.preventDefault(); ev.stopImmediatePropagation(); - if (!await this.props.record.save()) { - return; // handled by view + if (!(await this.props.record.save())) { + return; // handled by view } await this.orm.call( this.props.record.resModel, - 'action_calendar_prepare_external_provider_sync', + "action_calendar_prepare_external_provider_sync", [this.props.record.resId] - ) + ); // See google/microsoft_calendar for the origin of this shortened version - const { restart_sync_method, sync_route } = providerData[this.props.record.data.external_calendar_provider]; - await this.orm.call( - 'res.users', - restart_sync_method, - [[session.uid]] - ); - const response = await this.rpc( - sync_route, { - model: 'calendar.event', - fromurl: window.location.href, - } - ); + const { restart_sync_method, sync_route } = + providerData[this.props.record.data.external_calendar_provider]; + await this.orm.call("res.users", restart_sync_method, [[session.uid]]); + const response = await this.rpc(sync_route, { + model: "calendar.event", + fromurl: window.location.href, + }); await this._beforeLeaveContext(); if (response.status === "need_auth") { window.location.assign(response.url); @@ -74,7 +68,7 @@ export class CalendarConnectProvider extends Component { CalendarConnectProvider.props = { ...standardWidgetProps, }; -CalendarConnectProvider.template = 'calendar.CalendarConnectProvider'; +CalendarConnectProvider.template = "calendar.CalendarConnectProvider"; const calendarConnectProvider = { component: CalendarConnectProvider, diff --git a/addons/calendar/static/src/views/ask_recurrence_update_policy_dialog.js b/addons/calendar/static/src/views/ask_recurrence_update_policy_dialog.js index 62ec5d94911..74c87ced587 100644 --- a/addons/calendar/static/src/views/ask_recurrence_update_policy_dialog.js +++ b/addons/calendar/static/src/views/ask_recurrence_update_policy_dialog.js @@ -2,8 +2,7 @@ import { _t } from "@web/core/l10n/translation"; import { Dialog } from "@web/core/dialog/dialog"; - -const { Component } = owl; +import { Component } from "@odoo/owl"; export class AskRecurrenceUpdatePolicyDialog extends Component { setup() { @@ -24,7 +23,7 @@ export class AskRecurrenceUpdatePolicyDialog extends Component { } get selected() { - return Object.entries(this.possibleValues).find(state => state[1].checked)[0]; + return Object.entries(this.possibleValues).find((state) => state[1].checked)[0]; } set selected(val) { diff --git a/addons/calendar/static/src/views/calendar_form/calendar_form_controller.js b/addons/calendar/static/src/views/calendar_form/calendar_form_controller.js index cb2f24aa7a8..f84f9e2c2ac 100644 --- a/addons/calendar/static/src/views/calendar_form/calendar_form_controller.js +++ b/addons/calendar/static/src/views/calendar_form/calendar_form_controller.js @@ -2,8 +2,7 @@ import { FormController } from "@web/views/form/form_controller"; import { useService } from "@web/core/utils/hooks"; - -const { onWillStart } = owl; +import { onWillStart } from "@odoo/owl"; export class CalendarFormController extends FormController { setup() { @@ -13,24 +12,24 @@ export class CalendarFormController extends FormController { onWillStart(async () => { this.discussVideocallLocation = await ormService.call( "calendar.event", - "get_discuss_videocall_location", + "get_discuss_videocall_location" ); }); } - + /** * @override */ async beforeExecuteActionButton(clickParams) { const action = clickParams.name; - if (action == 'clear_videocall_location' || action === 'set_discuss_videocall_location') { + if (action == "clear_videocall_location" || action === "set_discuss_videocall_location") { let newVal = false; - let videoCallSource = 'custom' + let videoCallSource = "custom"; let changes = {}; - if (action === 'set_discuss_videocall_location') { + if (action === "set_discuss_videocall_location") { newVal = this.discussVideocallLocation; - videoCallSource = 'discuss'; - changes.access_token = this.discussVideocallLocation.split('/').pop(); + videoCallSource = "discuss"; + changes.access_token = this.discussVideocallLocation.split("/").pop(); } changes = Object.assign(changes, { videocall_location: newVal, diff --git a/addons/delivery_mondialrelay/static/src/components/mondialrelay_field.js b/addons/delivery_mondialrelay/static/src/components/mondialrelay_field.js index 1508db15791..da25bc9710d 100644 --- a/addons/delivery_mondialrelay/static/src/components/mondialrelay_field.js +++ b/addons/delivery_mondialrelay/static/src/components/mondialrelay_field.js @@ -6,8 +6,7 @@ import { loadJS } from "@web/core/assets"; // temporary for OnNoResultReturned bug import { UncaughtCorsError } from "@web/core/errors/error_service"; const errorHandlerRegistry = registry.category("error_handlers"); - -const { Component, onWillRender, useEffect, useRef, useState, xml } = owl; +import { Component, onWillRender, useEffect, useRef, useState, xml } from "@odoo/owl"; const MONDIALRELAY_SCRIPT_URL = "https://widget.mondialrelay.com/parcelshop-picker/jquery.plugin.mondialrelay.parcelshoppicker.min.js" diff --git a/addons/event/static/src/icon_selection_field/icon_selection_field.js b/addons/event/static/src/icon_selection_field/icon_selection_field.js index 6752c577785..8a783afdd63 100644 --- a/addons/event/static/src/icon_selection_field/icon_selection_field.js +++ b/addons/event/static/src/icon_selection_field/icon_selection_field.js @@ -3,8 +3,7 @@ import { registry } from "@web/core/registry"; import { _t } from "@web/core/l10n/translation"; import { standardFieldProps } from "@web/views/fields/standard_field_props"; - -const { Component } = owl; +import { Component } from "@odoo/owl"; export class IconSelectionField extends Component { get icon() { diff --git a/addons/hr/static/src/components/department_chart/department_chart.js b/addons/hr/static/src/components/department_chart/department_chart.js index 56590348511..9bef1c449ee 100644 --- a/addons/hr/static/src/components/department_chart/department_chart.js +++ b/addons/hr/static/src/components/department_chart/department_chart.js @@ -1,20 +1,19 @@ /** @odoo-module */ -import { registry } from '@web/core/registry'; +import { registry } from "@web/core/registry"; import { useService } from "@web/core/utils/hooks"; import { standardWidgetProps } from "@web/views/widgets/standard_widget_props"; - -const { onWillStart, useState, onWillUpdateProps, Component } = owl; +import { onWillStart, useState, onWillUpdateProps, Component } from "@odoo/owl"; export class DepartmentChart extends Component { setup() { super.setup(); - this.action = useService('action'); - this.orm = useService('orm'); + this.action = useService("action"); + this.orm = useService("orm"); this.state = useState({ - hierarchy: {} + hierarchy: {}, }); onWillStart(async () => await this.fetchHierarchy(this.props.record.resId)); @@ -24,18 +23,20 @@ export class DepartmentChart extends Component { } async fetchHierarchy(departmentId) { - this.state.hierarchy = await this.orm.call('hr.department', 'get_department_hierarchy', [departmentId]); + this.state.hierarchy = await this.orm.call("hr.department", "get_department_hierarchy", [ + departmentId, + ]); } openDepartmentEmployees(departmentId) { - this.action.doAction('hr.act_employee_from_department', { + this.action.doAction("hr.act_employee_from_department", { additionalContext: { - 'active_id': departmentId, - } + active_id: departmentId, + }, }); } } -DepartmentChart.template = 'hr.DepartmentChart'; +DepartmentChart.template = "hr.DepartmentChart"; DepartmentChart.props = { ...standardWidgetProps, }; diff --git a/addons/hr/static/src/components/employee_chat/employee_chat.js b/addons/hr/static/src/components/employee_chat/employee_chat.js index b360db59848..6806f1508c4 100644 --- a/addons/hr/static/src/components/employee_chat/employee_chat.js +++ b/addons/hr/static/src/components/employee_chat/employee_chat.js @@ -4,8 +4,7 @@ import { registry } from "@web/core/registry"; import { standardWidgetProps } from "@web/views/widgets/standard_widget_props"; import { useOpenChat } from "@mail/core/web/open_chat_hook"; - -const { Component } = owl; +import { Component } from "@odoo/owl"; export class HrEmployeeChat extends Component { setup() { diff --git a/addons/hr/static/src/views/archive_employee_hook.js b/addons/hr/static/src/views/archive_employee_hook.js index 03ad7040a3e..4db6ae4116b 100644 --- a/addons/hr/static/src/views/archive_employee_hook.js +++ b/addons/hr/static/src/views/archive_employee_hook.js @@ -2,28 +2,30 @@ import { _t } from "@web/core/l10n/translation"; import { useService } from "@web/core/utils/hooks"; - -const { useComponent } = owl; +import { useComponent } from "@odoo/owl"; export function useArchiveEmployee() { const component = useComponent(); const action = useService("action"); return (id) => { - action.doAction({ - type: 'ir.actions.act_window', - name: _t('Employee Termination'), - res_model: 'hr.departure.wizard', - views: [[false, 'form']], - view_mode: 'form', - target: 'new', - context: { - 'active_id': id, - 'toggle_active': true, - } - }, { - onClose: async () => { - await component.model.load(); + action.doAction( + { + type: "ir.actions.act_window", + name: _t("Employee Termination"), + res_model: "hr.departure.wizard", + views: [[false, "form"]], + view_mode: "form", + target: "new", + context: { + active_id: id, + toggle_active: true, + }, }, - }); - } + { + onClose: async () => { + await component.model.load(); + }, + } + ); + }; } diff --git a/addons/hr_attendance/static/src/js/attendance_report_views.js b/addons/hr_attendance/static/src/js/attendance_report_views.js index 835b94e6464..ac7b096b38f 100644 --- a/addons/hr_attendance/static/src/js/attendance_report_views.js +++ b/addons/hr_attendance/static/src/js/attendance_report_views.js @@ -4,8 +4,7 @@ import { registry } from "@web/core/registry"; import { useService } from "@web/core/utils/hooks"; import { graphView } from "@web/views/graph/graph_view"; import { pivotView } from "@web/views/pivot/pivot_view"; - -const { useComponent } = owl; +import { useComponent } from "@odoo/owl"; const viewRegistry = registry.category("views"); diff --git a/addons/hr_contract/static/src/widgets/tooltip_warning_widget.js b/addons/hr_contract/static/src/widgets/tooltip_warning_widget.js index 04a77f763d7..86b327618c7 100644 --- a/addons/hr_contract/static/src/widgets/tooltip_warning_widget.js +++ b/addons/hr_contract/static/src/widgets/tooltip_warning_widget.js @@ -2,8 +2,7 @@ import { registry } from "@web/core/registry"; import { _t } from "@web/core/l10n/translation"; - -const { Component } = owl; +import { Component } from "@odoo/owl"; export class ContractWarningTooltip extends Component { get tooltipInfo() { diff --git a/addons/hr_expense/static/src/components/expense_dashboard.js b/addons/hr_expense/static/src/components/expense_dashboard.js index e019025c61a..3b34463a75d 100644 --- a/addons/hr_expense/static/src/components/expense_dashboard.js +++ b/addons/hr_expense/static/src/components/expense_dashboard.js @@ -2,8 +2,7 @@ import { useService } from '@web/core/utils/hooks'; import { getCurrency } from '@web/core/currency'; - -const { Component, onWillStart, useState } = owl; +import { Component, onWillStart, useState } from "@odoo/owl"; export class ExpenseDashboard extends Component { diff --git a/addons/hr_expense/static/src/mixins/document_upload.js b/addons/hr_expense/static/src/mixins/document_upload.js index 83fa6ab22e3..ee63b1893f3 100644 --- a/addons/hr_expense/static/src/mixins/document_upload.js +++ b/addons/hr_expense/static/src/mixins/document_upload.js @@ -2,8 +2,7 @@ import { _t } from "@web/core/l10n/translation"; import { useBus, useService } from '@web/core/utils/hooks'; - -const { useRef, useEffect, useState } = owl; +import { useRef, useEffect, useState } from "@odoo/owl"; export const ExpenseDocumentDropZone = (T) => class ExpenseDocumentDropZone extends T { setup() { diff --git a/addons/hr_expense/static/src/mixins/qrcode.js b/addons/hr_expense/static/src/mixins/qrcode.js index 48557c203dc..110b767033b 100644 --- a/addons/hr_expense/static/src/mixins/qrcode.js +++ b/addons/hr_expense/static/src/mixins/qrcode.js @@ -2,8 +2,7 @@ import { _t } from "@web/core/l10n/translation"; import { useService } from "@web/core/utils/hooks"; - -const { onMounted, onPatched, useRef } = owl; +import { onMounted, onPatched, useRef } from "@odoo/owl"; export const ExpenseMobileQRCode = (T) => class ExpenseMobileQRCode extends T { setup() { diff --git a/addons/hr_expense/static/src/views/list.js b/addons/hr_expense/static/src/views/list.js index c9a4778162d..84ac47d980d 100644 --- a/addons/hr_expense/static/src/views/list.js +++ b/addons/hr_expense/static/src/views/list.js @@ -10,8 +10,7 @@ import { listView } from "@web/views/list/list_view"; import { ListController } from "@web/views/list/list_controller"; import { ListRenderer } from "@web/views/list/list_renderer"; - -const { onWillStart } = owl; +import { onWillStart } from "@odoo/owl"; export class ExpenseListController extends ExpenseDocumentUpload(ListController) { setup() { diff --git a/addons/hr_fleet/static/src/views/hr_fleet_kanban/hr_fleet_kanban_controller.js b/addons/hr_fleet/static/src/views/hr_fleet_kanban/hr_fleet_kanban_controller.js index 821148373da..f16dcfaa286 100644 --- a/addons/hr_fleet/static/src/views/hr_fleet_kanban/hr_fleet_kanban_controller.js +++ b/addons/hr_fleet/static/src/views/hr_fleet_kanban/hr_fleet_kanban_controller.js @@ -2,8 +2,7 @@ import { KanbanController } from "@web/views/kanban/kanban_controller"; import { useBus, useService } from "@web/core/utils/hooks"; - -const { useRef } = owl; +import { useRef } from "@odoo/owl"; export class HrFleetKanbanController extends KanbanController { setup() { diff --git a/addons/hr_holidays/static/src/dashboard/time_off_card.js b/addons/hr_holidays/static/src/dashboard/time_off_card.js index db68db0cf74..7140917f6a2 100644 --- a/addons/hr_holidays/static/src/dashboard/time_off_card.js +++ b/addons/hr_holidays/static/src/dashboard/time_off_card.js @@ -1,18 +1,29 @@ /* @odoo-module */ import { usePopover } from "@web/core/popover/popover_hook"; -import { useNewAllocationRequest } from '@hr_holidays/views/hooks'; - -const { Component } = owl; +import { useNewAllocationRequest } from "@hr_holidays/views/hooks"; +import { Component } from "@odoo/owl"; export class TimeOffCardPopover extends Component {} -TimeOffCardPopover.template = 'hr_holidays.TimeOffCardPopover'; -TimeOffCardPopover.props = ['allocated', 'approved', 'planned', 'left', 'employeeId', 'holidayStatusId', 'close?', 'onClickNewAllocationRequest?']; +TimeOffCardPopover.template = "hr_holidays.TimeOffCardPopover"; +TimeOffCardPopover.props = [ + "allocated", + "approved", + "planned", + "left", + "employeeId", + "holidayStatusId", + "close?", + "onClickNewAllocationRequest?", +]; export class TimeOffCard extends Component { setup() { - this.popover = usePopover(TimeOffCardPopover, { position: "right", popoverClass: "bg-view" }); + this.popover = usePopover(TimeOffCardPopover, { + position: "right", + popoverClass: "bg-view", + }); this.newAllocationRequest = useNewAllocationRequest(); } @@ -35,9 +46,9 @@ export class TimeOffCard extends Component { } } -TimeOffCard.template = 'hr_holidays.TimeOffCard'; -TimeOffCard.props = ['name', 'data', 'requires_allocation', 'employeeId', 'holidayStatusId']; +TimeOffCard.template = "hr_holidays.TimeOffCard"; +TimeOffCard.props = ["name", "data", "requires_allocation", "employeeId", "holidayStatusId"]; export class TimeOffCardMobile extends TimeOffCard {} -TimeOffCardMobile.template = 'hr_holidays.TimeOffCardMobile'; +TimeOffCardMobile.template = "hr_holidays.TimeOffCardMobile"; diff --git a/addons/hr_holidays/static/src/dashboard/time_off_dashboard.js b/addons/hr_holidays/static/src/dashboard/time_off_dashboard.js index 2fa46e37772..bd6dcdbade5 100644 --- a/addons/hr_holidays/static/src/dashboard/time_off_dashboard.js +++ b/addons/hr_holidays/static/src/dashboard/time_off_dashboard.js @@ -1,10 +1,9 @@ /* @odoo-module */ -import { TimeOffCard } from './time_off_card'; -import { useNewAllocationRequest } from '@hr_holidays/views/hooks'; +import { TimeOffCard } from "./time_off_card"; +import { useNewAllocationRequest } from "@hr_holidays/views/hooks"; import { useBus, useService } from "@web/core/utils/hooks"; - -const { Component, useState, onWillStart } = owl; +import { Component, useState, onWillStart } from "@odoo/owl"; export class TimeOffDashboard extends Component { setup() { @@ -13,8 +12,8 @@ export class TimeOffDashboard extends Component { this.state = useState({ holidays: [], }); - useBus(this.env.timeOffBus, 'update_dashboard', async () => { - await this.loadDashboardData() + useBus(this.env.timeOffBus, "update_dashboard", async () => { + await this.loadDashboardData(); }); onWillStart(async () => { @@ -25,17 +24,12 @@ export class TimeOffDashboard extends Component { async loadDashboardData() { const context = {}; if (this.props.employeeId !== null) { - context['employee_id'] = this.props.employeeId; + context["employee_id"] = this.props.employeeId; } - this.state.holidays = await this.orm.call( - 'hr.leave.type', - 'get_days_all_request', - [], - { - context: context - } - ); + this.state.holidays = await this.orm.call("hr.leave.type", "get_days_all_request", [], { + context: context, + }); } async newAllocationRequest() { await this.newRequest(this.props.employeeId); @@ -43,5 +37,5 @@ export class TimeOffDashboard extends Component { } TimeOffDashboard.components = { TimeOffCard }; -TimeOffDashboard.template = 'hr_holidays.TimeOffDashboard'; -TimeOffDashboard.props = ['employeeId']; +TimeOffDashboard.template = "hr_holidays.TimeOffDashboard"; +TimeOffDashboard.props = ["employeeId"]; diff --git a/addons/hr_holidays/static/src/leave_stats/leave_stats.js b/addons/hr_holidays/static/src/leave_stats/leave_stats.js index f3dd6612ec8..5c233401643 100644 --- a/addons/hr_holidays/static/src/leave_stats/leave_stats.js +++ b/addons/hr_holidays/static/src/leave_stats/leave_stats.js @@ -5,13 +5,13 @@ import { useService } from "@web/core/utils/hooks"; import { useRecordObserver } from "@web/model/relational_model/utils"; import { formatDate } from "@web/core/l10n/dates"; +import { Component, useState, onWillStart } from "@odoo/owl"; -const { Component, useState, onWillStart } = owl; const { DateTime } = luxon; export class LeaveStatsComponent extends Component { setup() { - this.orm = useService('orm'); + this.orm = useService("orm"); this.state = useState({ leaves: [], @@ -53,7 +53,7 @@ export class LeaveStatsComponent extends Component { } get thisYear() { - return this.date.toFormat('yyyy'); + return this.date.toFormat("yyyy"); } async loadDepartmentLeaves(date, department, employee) { @@ -62,25 +62,25 @@ export class LeaveStatsComponent extends Component { return; } - const dateFrom = date.startOf('month'); - const dateTo = date.endOf('month'); + const dateFrom = date.startOf("month"); + const dateTo = date.endOf("month"); const departmentLeaves = await this.orm.searchRead( - 'hr.leave', + "hr.leave", [ - ['department_id', '=', department[0]], - ['state', '=', 'validate'], - ['holiday_type', '=', 'employee'], - ['date_from', '<=', dateTo], - ['date_to', '>=', dateFrom], + ["department_id", "=", department[0]], + ["state", "=", "validate"], + ["holiday_type", "=", "employee"], + ["date_from", "<=", dateTo], + ["date_to", ">=", dateFrom], ], - ['employee_id', 'date_from', 'date_to', 'number_of_days'], + ["employee_id", "date_from", "date_to", "number_of_days"] ); this.state.departmentLeaves = departmentLeaves.map((leave) => { return Object.assign({}, leave, { - dateFrom: formatDate(DateTime.fromSQL(leave.date_from, { zone: 'utc' }).toLocal()), - dateTo: formatDate(DateTime.fromSQL(leave.date_to, { zone: 'utc' }).toLocal()), + dateFrom: formatDate(DateTime.fromSQL(leave.date_from, { zone: "utc" }).toLocal()), + dateTo: formatDate(DateTime.fromSQL(leave.date_to, { zone: "utc" }).toLocal()), sameEmployee: leave.employee_id[0] === employee[0], }); }); @@ -92,25 +92,25 @@ export class LeaveStatsComponent extends Component { return; } - const dateFrom = date.startOf('year'); - const dateTo = date.endOf('year'); + const dateFrom = date.startOf("year"); + const dateTo = date.endOf("year"); this.state.leaves = await this.orm.readGroup( - 'hr.leave', + "hr.leave", [ - ['employee_id', '=', employee[0]], - ['state', '=', 'validate'], - ['date_from', '<=', dateTo], - ['date_to', '>=', dateFrom] + ["employee_id", "=", employee[0]], + ["state", "=", "validate"], + ["date_from", "<=", dateTo], + ["date_to", ">=", dateFrom], ], - ['holiday_status_id', 'number_of_days:sum'], - ['holiday_status_id'], + ["holiday_status_id", "number_of_days:sum"], + ["holiday_status_id"] ); } } -LeaveStatsComponent.template = 'hr_holidays.LeaveStatsComponent'; +LeaveStatsComponent.template = "hr_holidays.LeaveStatsComponent"; export const leaveStatsComponent = { component: LeaveStatsComponent, }; -registry.category('view_widgets').add('hr_leave_stats', leaveStatsComponent); +registry.category("view_widgets").add("hr_leave_stats", leaveStatsComponent); diff --git a/addons/hr_holidays/static/src/views/calendar/calendar_controller.js b/addons/hr_holidays/static/src/views/calendar/calendar_controller.js index 7f40ba083cc..b85977feaaa 100644 --- a/addons/hr_holidays/static/src/views/calendar/calendar_controller.js +++ b/addons/hr_holidays/static/src/views/calendar/calendar_controller.js @@ -2,17 +2,16 @@ import { _t } from "@web/core/l10n/translation"; import { ConfirmationDialog } from "@web/core/confirmation_dialog/confirmation_dialog"; -import { CalendarController } from '@web/views/calendar/calendar_controller'; -import { FormViewDialog } from '@web/views/view_dialogs/form_view_dialog'; +import { CalendarController } from "@web/views/calendar/calendar_controller"; +import { FormViewDialog } from "@web/views/view_dialogs/form_view_dialog"; import { Dropdown, DropdownItem } from "@web/core/dropdown/dropdown"; import { serializeDate } from "@web/core/l10n/dates"; -import { TimeOffCalendarFilterPanel } from './filter_panel/calendar_filter_panel'; -import { TimeOffFormViewDialog } from '../view_dialog/form_view_dialog'; -import { useLeaveCancelWizard } from '../hooks'; - -const { EventBus, useSubEnv } = owl; +import { TimeOffCalendarFilterPanel } from "./filter_panel/calendar_filter_panel"; +import { TimeOffFormViewDialog } from "../view_dialog/form_view_dialog"; +import { useLeaveCancelWizard } from "../hooks"; +import { EventBus, useSubEnv } from "@odoo/owl"; export class TimeOffCalendarController extends CalendarController { setup() { @@ -37,24 +36,26 @@ export class TimeOffCalendarController extends CalendarController { newTimeOffRequest() { const context = {}; if (this.employeeId) { - context['default_employee_id'] = this.employeeId; + context["default_employee_id"] = this.employeeId; } - if (this.model.meta.scale == 'day') { - context['default_date_from'] = serializeDate( - this.model.data.range.start.set({ hours: 7 }), "datetime" + if (this.model.meta.scale == "day") { + context["default_date_from"] = serializeDate( + this.model.data.range.start.set({ hours: 7 }), + "datetime" ); - context['default_date_to'] = serializeDate( - this.model.data.range.end.set({ hours: 19 }), "datetime" + context["default_date_to"] = serializeDate( + this.model.data.range.end.set({ hours: 19 }), + "datetime" ); } this.displayDialog(FormViewDialog, { - resModel: 'hr.leave', - title: _t('New Time Off'), + resModel: "hr.leave", + title: _t("New Time Off"), viewId: this.model.formViewId, onRecordSaved: () => { this.model.load(); - this.env.timeOffBus.trigger('update_dashboard'); + this.env.timeOffBus.trigger("update_dashboard"); }, context: context, }); @@ -67,14 +68,14 @@ export class TimeOffCalendarController extends CalendarController { body: _t("Are you sure you want to delete this record?"), confirm: async () => { await this.model.unlinkRecord(record.resId); - this.env.timeOffBus.trigger('update_dashboard'); + this.env.timeOffBus.trigger("update_dashboard"); }, cancel: () => {}, }); } else { this.leaveCancelWizard(record.resId, () => { this.model.load(); - this.env.timeOffBus.trigger('update_dashboard'); + this.env.timeOffBus.trigger("update_dashboard"); }); } } @@ -82,12 +83,13 @@ export class TimeOffCalendarController extends CalendarController { async editRecord(record, context = {}, shouldFetchFormViewId = true) { const onDialogClosed = () => { this.model.load(); - this.env.timeOffBus.trigger('update_dashboard'); + this.env.timeOffBus.trigger("update_dashboard"); }; return new Promise((resolve) => { this.displayDialog( - TimeOffFormViewDialog, { + TimeOffFormViewDialog, + { resModel: this.model.resModel, resId: record.id || false, context, @@ -96,7 +98,7 @@ export class TimeOffCalendarController extends CalendarController { onRecordSaved: onDialogClosed, onRecordDeleted: (record) => this.deleteRecord(record), onLeaveCancelled: onDialogClosed, - size: 'md', + size: "md", }, { onClose: () => resolve() } ); diff --git a/addons/hr_holidays/static/src/views/calendar/filter_panel/calendar_filter_panel.js b/addons/hr_holidays/static/src/views/calendar/filter_panel/calendar_filter_panel.js index 69cd47546f8..909241ae760 100644 --- a/addons/hr_holidays/static/src/views/calendar/filter_panel/calendar_filter_panel.js +++ b/addons/hr_holidays/static/src/views/calendar/filter_panel/calendar_filter_panel.js @@ -2,18 +2,17 @@ import { CalendarFilterPanel } from "@web/views/calendar/filter_panel/calendar_filter_panel"; import { TimeOffCardMobile } from "../../../dashboard/time_off_card"; -import { getFormattedDateSpan } from '@web/views/calendar/utils'; +import { getFormattedDateSpan } from "@web/views/calendar/utils"; import { useService } from "@web/core/utils/hooks"; import { serializeDate } from "@web/core/l10n/dates"; - -const { useState, onWillStart, onWillUpdateProps } = owl; +import { useState, onWillStart, onWillUpdateProps } from "@odoo/owl"; export class TimeOffCalendarFilterPanel extends CalendarFilterPanel { setup() { super.setup(); - this.orm = useService('orm'); + this.orm = useService("orm"); this.getFormattedDateSpan = getFormattedDateSpan; this.leaveState = useState({ holidays: [], @@ -30,38 +29,38 @@ export class TimeOffCalendarFilterPanel extends CalendarFilterPanel { async updateSpecialDays() { const context = { - 'employee_id': this.props.employee_id, - } + employee_id: this.props.employee_id, + }; const specialDays = await this.orm.call( - 'hr.employee', 'get_special_days_data', [ + "hr.employee", + "get_special_days_data", + [ serializeDate(this.props.model.rangeStart, "datetime"), serializeDate(this.props.model.rangeEnd, "datetime"), ], { - 'context': context, - }, + context: context, + } ); - specialDays['bankHolidays'].forEach(bankHoliday => { - bankHoliday.start = luxon.DateTime.fromISO(bankHoliday.start) - bankHoliday.end = luxon.DateTime.fromISO(bankHoliday.end) + specialDays["bankHolidays"].forEach((bankHoliday) => { + bankHoliday.start = luxon.DateTime.fromISO(bankHoliday.start); + bankHoliday.end = luxon.DateTime.fromISO(bankHoliday.end); }); - specialDays['mandatoryDays'].forEach(mandatoryDay => { - mandatoryDay.start = luxon.DateTime.fromISO(mandatoryDay.start) - mandatoryDay.end = luxon.DateTime.fromISO(mandatoryDay.end) + specialDays["mandatoryDays"].forEach((mandatoryDay) => { + mandatoryDay.start = luxon.DateTime.fromISO(mandatoryDay.start); + mandatoryDay.end = luxon.DateTime.fromISO(mandatoryDay.end); }); - this.leaveState.bankHolidays = specialDays['bankHolidays']; - this.leaveState.mandatoryDays = specialDays['mandatoryDays']; + this.leaveState.bankHolidays = specialDays["bankHolidays"]; + this.leaveState.mandatoryDays = specialDays["mandatoryDays"]; } async loadFilterData() { - if(!this.env.isSmall) { + if (!this.env.isSmall) { return; } const filterData = {}; - const data = await this.orm.call( - 'hr.leave.type', 'get_days_all_request', [], - ); + const data = await this.orm.call("hr.leave.type", "get_days_all_request", []); data.forEach((leave) => { filterData[leave[3]] = leave; @@ -69,11 +68,11 @@ export class TimeOffCalendarFilterPanel extends CalendarFilterPanel { this.leaveState.holidays = filterData; } } -TimeOffCalendarFilterPanel.template = 'hr_holidays.CalendarFilterPanel'; +TimeOffCalendarFilterPanel.template = "hr_holidays.CalendarFilterPanel"; TimeOffCalendarFilterPanel.components = { ...TimeOffCalendarFilterPanel.components, TimeOffCardMobile, -} +}; TimeOffCalendarFilterPanel.subTemplates = { filter: "hr_holidays.CalendarFilterPanel.filter", -} +}; diff --git a/addons/hr_holidays/static/src/views/calendar/year/calendar_year_renderer.js b/addons/hr_holidays/static/src/views/calendar/year/calendar_year_renderer.js index 65b6d5b2105..75985607dd2 100644 --- a/addons/hr_holidays/static/src/views/calendar/year/calendar_year_renderer.js +++ b/addons/hr_holidays/static/src/views/calendar/year/calendar_year_renderer.js @@ -1,14 +1,13 @@ /** @odoo-module **/ import { _t } from "@web/core/l10n/translation"; -import { CalendarYearRenderer } from '@web/views/calendar/calendar_year/calendar_year_renderer'; +import { CalendarYearRenderer } from "@web/views/calendar/calendar_year/calendar_year_renderer"; import { useService } from "@web/core/utils/hooks"; -import { useMandatoryDays } from '../../hooks'; -import { useCalendarPopover } from '@web/views/calendar/hooks'; -import { TimeOffCalendarYearPopover } from './calendar_year_popover'; - -const { useEffect } = owl; +import { useMandatoryDays } from "../../hooks"; +import { useCalendarPopover } from "@web/views/calendar/hooks"; +import { TimeOffCalendarYearPopover } from "./calendar_year_popover"; +import { useEffect } from "@odoo/owl"; export class TimeOffCalendarYearRenderer extends CalendarYearRenderer { setup() { @@ -18,49 +17,64 @@ export class TimeOffCalendarYearRenderer extends CalendarYearRenderer { this.mandatoryDaysList = []; this.mandatoryDayPopover = useCalendarPopover(TimeOffCalendarYearPopover); - useEffect((el) => { - for (const week of el) { - const row = week.parentElement; + useEffect( + (el) => { + for (const week of el) { + const row = week.parentElement; - // Remove the week number if the week is empty. - // FullCalendar always displays 6 weeks even when empty. - if (!row.children[1].classList.length && - !row.children[row.children.length - 1].classList.length) { - row.remove(); + // Remove the week number if the week is empty. + // FullCalendar always displays 6 weeks even when empty. + if ( + !row.children[1].classList.length && + !row.children[row.children.length - 1].classList.length + ) { + row.remove(); + } } - } - }, () => [this.rootRef.el && this.rootRef.el.querySelectorAll('.fc-content-skeleton td.fc-week-number')]); + }, + () => [ + this.rootRef.el && + this.rootRef.el.querySelectorAll(".fc-content-skeleton td.fc-week-number"), + ] + ); } get options() { return Object.assign(super.options, { weekNumbers: true, weekNumbersWithinDays: false, - weekLabel: _t('Week'), + weekLabel: _t("Week"), }); } /** @override **/ async onDateClick(info) { - const is_mandatory_day = [...info.dayEl.classList].some(elClass => elClass.startsWith('hr_mandatory_day_')) + const is_mandatory_day = [...info.dayEl.classList].some((elClass) => + elClass.startsWith("hr_mandatory_day_") + ); this.mandatoryDayPopover.close(); if (is_mandatory_day && !this.env.isSmall) { this.popover.close(); const date = luxon.DateTime.fromISO(info.dateStr); const target = info.dayEl; - const mandatory_days_data = await this.orm.call("hr.employee", "get_mandatory_days_data", [date, date]); - mandatory_days_data.forEach(mandatory_day_data => { - mandatory_day_data['start'] = luxon.DateTime.fromISO(mandatory_day_data['start']) - mandatory_day_data['end'] = luxon.DateTime.fromISO(mandatory_day_data['end']) + const mandatory_days_data = await this.orm.call( + "hr.employee", + "get_mandatory_days_data", + [date, date] + ); + mandatory_days_data.forEach((mandatory_day_data) => { + mandatory_day_data["start"] = luxon.DateTime.fromISO(mandatory_day_data["start"]); + mandatory_day_data["end"] = luxon.DateTime.fromISO(mandatory_day_data["end"]); }); const records = Object.values(this.props.model.records).filter((r) => - luxon.Interval.fromDateTimes(r.start.startOf("day"), r.end.endOf("day")).contains(date) + luxon.Interval.fromDateTimes(r.start.startOf("day"), r.end.endOf("day")).contains( + date + ) ); - const props = this.getPopoverProps(date, records) - props['records'] = mandatory_days_data.concat(props['records']) + const props = this.getPopoverProps(date, records); + props["records"] = mandatory_days_data.concat(props["records"]); this.mandatoryDayPopover.open(target, props, "o_cw_popover"); - } - else { + } else { super.onDateClick(info); } } diff --git a/addons/hr_org_chart/static/src/fields/hr_org_chart.js b/addons/hr_org_chart/static/src/fields/hr_org_chart.js index 160e27efc04..d5dad494826 100644 --- a/addons/hr_org_chart/static/src/fields/hr_org_chart.js +++ b/addons/hr_org_chart/static/src/fields/hr_org_chart.js @@ -4,8 +4,7 @@ import { registry } from "@web/core/registry"; import { useService } from "@web/core/utils/hooks"; import { usePopover } from "@web/core/popover/popover_hook"; import { onEmployeeSubRedirect } from './hooks'; - -const { Component, onWillStart, onWillRender, useState } = owl; +import { Component, onWillStart, onWillRender, useState } from "@odoo/owl"; class HrOrgChartPopover extends Component { async setup() { diff --git a/addons/hr_recruitment/static/src/js/tours/hr_recruitment.js b/addons/hr_recruitment/static/src/js/tours/hr_recruitment.js index c3bbbd6dcff..840498b83cf 100644 --- a/addons/hr_recruitment/static/src/js/tours/hr_recruitment.js +++ b/addons/hr_recruitment/static/src/js/tours/hr_recruitment.js @@ -3,8 +3,7 @@ import { _t } from "@web/core/l10n/translation"; import { registry } from "@web/core/registry"; import { stepUtils } from "@web_tour/tour_service/tour_utils"; - -const { markup } = owl; +import { markup } from "@odoo/owl"; registry.category("web_tour.tours").add('hr_recruitment_tour',{ url: "/web", diff --git a/addons/iap/static/src/action_buttons_widget/action_buttons_widget.js b/addons/iap/static/src/action_buttons_widget/action_buttons_widget.js index eaa6fc5bddb..d7a06c4d65b 100644 --- a/addons/iap/static/src/action_buttons_widget/action_buttons_widget.js +++ b/addons/iap/static/src/action_buttons_widget/action_buttons_widget.js @@ -3,8 +3,7 @@ import { registry } from "@web/core/registry"; import { useService } from "@web/core/utils/hooks"; import { standardWidgetProps } from "@web/views/widgets/standard_widget_props"; - -const { Component } = owl; +import { Component } from "@odoo/owl"; class IAPActionButtonsWidget extends Component { setup() { diff --git a/addons/iap/static/src/js/insufficient_credit_error_handler.js b/addons/iap/static/src/js/insufficient_credit_error_handler.js index 8a58e776507..40d62032922 100644 --- a/addons/iap/static/src/js/insufficient_credit_error_handler.js +++ b/addons/iap/static/src/js/insufficient_credit_error_handler.js @@ -3,8 +3,7 @@ import { Dialog } from "@web/core/dialog/dialog"; import { registry } from "@web/core/registry"; import { useService } from "@web/core/utils/hooks"; import { _t } from "@web/core/l10n/translation"; - -const { Component, onWillStart } = owl; +import { Component, onWillStart } from "@odoo/owl"; class InsufficientCreditDialog extends Component { setup() { diff --git a/addons/im_livechat/static/src/js/colors_reset_button/colors_reset_button.js b/addons/im_livechat/static/src/js/colors_reset_button/colors_reset_button.js index 0c2c3499f5a..9e5a0843ebf 100644 --- a/addons/im_livechat/static/src/js/colors_reset_button/colors_reset_button.js +++ b/addons/im_livechat/static/src/js/colors_reset_button/colors_reset_button.js @@ -2,8 +2,7 @@ import { registry } from "@web/core/registry"; import { standardWidgetProps } from "@web/views/widgets/standard_widget_props"; - -const { Component } = owl; +import { Component } from "@odoo/owl"; export class ColorsResetButton extends Component { onColorsResetButtonClick() { diff --git a/addons/loyalty/static/src/js/loyalty_list_view.js b/addons/loyalty/static/src/js/loyalty_list_view.js index d467d4c7a8f..5db2cd05696 100644 --- a/addons/loyalty/static/src/js/loyalty_list_view.js +++ b/addons/loyalty/static/src/js/loyalty_list_view.js @@ -4,8 +4,7 @@ import { registry } from "@web/core/registry"; import { listView } from "@web/views/list/list_view"; import { ListRenderer } from "@web/views/list/list_renderer"; import { useService } from "@web/core/utils/hooks"; - -const { Component, onWillStart } = owl; +import { Component, onWillStart } from "@odoo/owl"; export class LoyaltyActionHelper extends Component { setup() { diff --git a/addons/lunch/static/src/components/lunch_dashboard.js b/addons/lunch/static/src/components/lunch_dashboard.js index 307c9002bf2..5d69e128fe1 100644 --- a/addons/lunch/static/src/components/lunch_dashboard.js +++ b/addons/lunch/static/src/components/lunch_dashboard.js @@ -2,8 +2,7 @@ import { useBus, useService } from "@web/core/utils/hooks"; import { Many2XAutocomplete } from "@web/views/fields/relational_utils"; - -const { Component, useState, onWillStart, markup, xml } = owl; +import { Component, useState, onWillStart, markup, xml } from "@odoo/owl"; export class LunchCurrency extends Component { get amount() { diff --git a/addons/lunch/static/src/views/search_model.js b/addons/lunch/static/src/views/search_model.js index 65a46adf85e..6b7bf4877f4 100644 --- a/addons/lunch/static/src/views/search_model.js +++ b/addons/lunch/static/src/views/search_model.js @@ -4,9 +4,7 @@ import { useService } from "@web/core/utils/hooks"; import { Domain } from '@web/core/domain'; import { SearchModel } from '@web/search/search_model'; - -const { useState, onWillStart } = owl; - +import { useState, onWillStart } from "@odoo/owl"; export class LunchSearchModel extends SearchModel { setup() { diff --git a/addons/mail/static/src/core/common/suggestion_hook.js b/addons/mail/static/src/core/common/suggestion_hook.js index d18d780c7ef..5afc2466cc4 100644 --- a/addons/mail/static/src/core/common/suggestion_hook.js +++ b/addons/mail/static/src/core/common/suggestion_hook.js @@ -1,7 +1,7 @@ /* @odoo-module */ import { useSequential } from "@mail/utils/common/hooks"; -import { useComponent, useEffect, useState } from "@odoo/owl"; +import { status, useComponent, useEffect, useState } from "@odoo/owl"; import { useService } from "@web/core/utils/hooks"; @@ -171,7 +171,7 @@ export function useSuggestion() { await suggestionService.fetchSuggestions(self.search, { thread: self.thread, }); - if (owl.status(comp) === "destroyed") { + if (status(comp) === "destroyed") { return; } self.update(); diff --git a/addons/mail/static/src/discuss/voice_message/common/voice_player.js b/addons/mail/static/src/discuss/voice_message/common/voice_player.js index 1fb3c95924b..de8016b088c 100644 --- a/addons/mail/static/src/discuss/voice_message/common/voice_player.js +++ b/addons/mail/static/src/discuss/voice_message/common/voice_player.js @@ -1,5 +1,13 @@ /* @odoo-module */ -import { Component, useState, onMounted, onWillUnmount, useEffect, useRef } from "@odoo/owl"; +import { + Component, + useState, + onMounted, + onWillUnmount, + useEffect, + useRef, + status, +} from "@odoo/owl"; import { browser } from "@web/core/browser/browser"; import { useService } from "@web/core/utils/hooks"; import { url } from "@web/core/utils/urls"; @@ -282,7 +290,7 @@ export class VoicePlayer extends Component { } addOnAudioProcess() { - if (owl.status(this) === "destroyed") { + if (status(this) === "destroyed") { return; } const time = this.getCurrentTime(); diff --git a/addons/mail/static/src/js/onchange_on_keydown.js b/addons/mail/static/src/js/onchange_on_keydown.js index a6901bc8b4c..4748f64267a 100644 --- a/addons/mail/static/src/js/onchange_on_keydown.js +++ b/addons/mail/static/src/js/onchange_on_keydown.js @@ -5,8 +5,7 @@ import { useDebounced } from "@web/core/utils/timing"; import { charField, CharField } from "@web/views/fields/char/char_field"; import { textField, TextField } from "@web/views/fields/text/text_field"; import { archParseBoolean } from "@web/views/utils"; - -const { useEffect } = owl; +import { useEffect } from "@odoo/owl"; /** * Support a key-based onchange in text fields. diff --git a/addons/mail/static/tests/helpers/patch_ui_size.js b/addons/mail/static/tests/helpers/patch_ui_size.js index e5d8d6a7728..46f4c984651 100644 --- a/addons/mail/static/tests/helpers/patch_ui_size.js +++ b/addons/mail/static/tests/helpers/patch_ui_size.js @@ -3,6 +3,7 @@ import { browser } from "@web/core/browser/browser"; import { MEDIAS_BREAKPOINTS, SIZES, utils } from "@web/core/ui/ui_service"; import { patchWithCleanup } from "@web/../tests/helpers/utils"; +import { Component } from "@odoo/owl"; /** * Return the width corresponding to the given size. If an upper and lower bound @@ -45,7 +46,7 @@ function getSizeFromWidth(width) { * @param {number} width */ function legacyPatchUiSize(height, width) { - const legacyEnv = owl.Component.env; + const legacyEnv = Component.env; patchWithCleanup(legacyEnv, { browser: { ...legacyEnv.browser, diff --git a/addons/mass_mailing/static/src/js/mailing_m2o_filter.js b/addons/mass_mailing/static/src/js/mailing_m2o_filter.js index 79265bd0f0e..36e5f7c2b09 100644 --- a/addons/mass_mailing/static/src/js/mailing_m2o_filter.js +++ b/addons/mass_mailing/static/src/js/mailing_m2o_filter.js @@ -6,8 +6,7 @@ import { registry } from '@web/core/registry'; import { Dropdown } from "@web/core/dropdown/dropdown"; import { useService } from "@web/core/utils/hooks"; import { Many2OneField, many2OneField } from '@web/views/fields/many2one/many2one_field'; - -const { useState, useEffect } = owl; +import { useState, useEffect } from "@odoo/owl"; export class MailingFilterDropdown extends Dropdown { setup() { diff --git a/addons/mass_mailing/static/src/js/mailing_mailing_view_form_full_width.js b/addons/mass_mailing/static/src/js/mailing_mailing_view_form_full_width.js index 2b7be0e2a6e..9a74ba94625 100644 --- a/addons/mass_mailing/static/src/js/mailing_mailing_view_form_full_width.js +++ b/addons/mass_mailing/static/src/js/mailing_mailing_view_form_full_width.js @@ -3,12 +3,7 @@ import { registry } from "@web/core/registry"; import { formView } from "@web/views/form/form_view"; import { useThrottleForAnimation } from "@web/core/utils/timing"; - -const { - useSubEnv, - onMounted, - onWillUnmount, -} = owl; +import { useSubEnv, onMounted, onWillUnmount } from "@odoo/owl"; export class MassMailingFullWidthViewController extends formView.Controller { setup() { diff --git a/addons/mass_mailing/static/src/js/mass_mailing_html_field.js b/addons/mass_mailing/static/src/js/mass_mailing_html_field.js index eb40f497019..9639c360285 100644 --- a/addons/mass_mailing/static/src/js/mass_mailing_html_field.js +++ b/addons/mass_mailing/static/src/js/mass_mailing_html_field.js @@ -14,8 +14,7 @@ import { MassMailingMobilePreviewDialog } from "./mass_mailing_mobile_preview"; import { getRangePosition } from '@web_editor/js/editor/odoo-editor/src/utils/utils'; import { MassMailingWysiwyg } from '@mass_mailing/js/mass_mailing_wysiwyg'; import { utils as uiUtils } from "@web/core/ui/ui_service"; - -const { useSubEnv, status } = owl; +import { useSubEnv, status } from "@odoo/owl"; export class MassMailingHtmlField extends HtmlField { static props = { diff --git a/addons/mass_mailing/static/src/js/mass_mailing_mobile_preview.js b/addons/mass_mailing/static/src/js/mass_mailing_mobile_preview.js index 214c6c1fd01..8a7e0c3f16b 100644 --- a/addons/mass_mailing/static/src/js/mass_mailing_mobile_preview.js +++ b/addons/mass_mailing/static/src/js/mass_mailing_mobile_preview.js @@ -2,9 +2,7 @@ import { Dialog } from "@web/core/dialog/dialog"; import { getBundle } from "@web/core/assets"; - -const { useEffect, onWillStart } = owl; - +import { useEffect, onWillStart } from "@odoo/owl"; export class MassMailingMobilePreviewDialog extends Dialog { setup() { diff --git a/addons/mrp/static/src/components/bom_overview/mrp_bom_overview.js b/addons/mrp/static/src/components/bom_overview/mrp_bom_overview.js index 540fd966af5..ca055a87099 100644 --- a/addons/mrp/static/src/components/bom_overview/mrp_bom_overview.js +++ b/addons/mrp/static/src/components/bom_overview/mrp_bom_overview.js @@ -4,8 +4,7 @@ import { registry } from "@web/core/registry"; import { useService } from "@web/core/utils/hooks"; import { BomOverviewControlPanel } from "../bom_overview_control_panel/mrp_bom_overview_control_panel"; import { BomOverviewTable } from "../bom_overview_table/mrp_bom_overview_table"; - -const { Component, EventBus, onWillStart, useSubEnv, useState } = owl; +import { Component, EventBus, onWillStart, useSubEnv, useState } from "@odoo/owl"; export class BomOverviewComponent extends Component { setup() { diff --git a/addons/mrp/static/src/components/bom_overview_components_block/mrp_bom_overview_components_block.js b/addons/mrp/static/src/components/bom_overview_components_block/mrp_bom_overview_components_block.js index 0a3816b2d71..b5fdd8b4865 100644 --- a/addons/mrp/static/src/components/bom_overview_components_block/mrp_bom_overview_components_block.js +++ b/addons/mrp/static/src/components/bom_overview_components_block/mrp_bom_overview_components_block.js @@ -3,8 +3,7 @@ import { useBus } from "@web/core/utils/hooks"; import { BomOverviewLine } from "../bom_overview_line/mrp_bom_overview_line"; import { BomOverviewExtraBlock } from "../bom_overview_extra_block/mrp_bom_overview_extra_block"; - -const { Component, onWillUnmount, onWillUpdateProps, useState } = owl; +import { Component, onWillUnmount, onWillUpdateProps, useState } from "@odoo/owl"; export class BomOverviewComponentsBlock extends Component { setup() { diff --git a/addons/mrp/static/src/components/bom_overview_control_panel/mrp_bom_overview_control_panel.js b/addons/mrp/static/src/components/bom_overview_control_panel/mrp_bom_overview_control_panel.js index f9509a6ed4e..bcaea3fb252 100644 --- a/addons/mrp/static/src/components/bom_overview_control_panel/mrp_bom_overview_control_panel.js +++ b/addons/mrp/static/src/components/bom_overview_control_panel/mrp_bom_overview_control_panel.js @@ -5,8 +5,7 @@ import { BomOverviewDisplayFilter } from "../bom_overview_display_filter/mrp_bom import { Dropdown } from "@web/core/dropdown/dropdown"; import { DropdownItem } from "@web/core/dropdown/dropdown_item"; import { Many2XAutocomplete } from "@web/views/fields/relational_utils"; - -const { Component } = owl; +import { Component } from "@odoo/owl"; export class BomOverviewControlPanel extends Component { setup() { diff --git a/addons/mrp/static/src/components/bom_overview_display_filter/mrp_bom_overview_display_filter.js b/addons/mrp/static/src/components/bom_overview_display_filter/mrp_bom_overview_display_filter.js index 7a696758eea..9c3780055e0 100644 --- a/addons/mrp/static/src/components/bom_overview_display_filter/mrp_bom_overview_display_filter.js +++ b/addons/mrp/static/src/components/bom_overview_display_filter/mrp_bom_overview_display_filter.js @@ -3,8 +3,7 @@ import { _t } from "@web/core/l10n/translation"; import { Dropdown } from "@web/core/dropdown/dropdown"; import { DropdownItem } from "@web/core/dropdown/dropdown_item"; - -const { Component } = owl; +import { Component } from "@odoo/owl"; export class BomOverviewDisplayFilter extends Component { setup() { diff --git a/addons/mrp/static/src/components/bom_overview_extra_block/mrp_bom_overview_extra_block.js b/addons/mrp/static/src/components/bom_overview_extra_block/mrp_bom_overview_extra_block.js index 85318e418f1..792be74acad 100644 --- a/addons/mrp/static/src/components/bom_overview_extra_block/mrp_bom_overview_extra_block.js +++ b/addons/mrp/static/src/components/bom_overview_extra_block/mrp_bom_overview_extra_block.js @@ -3,8 +3,7 @@ import { useBus } from "@web/core/utils/hooks"; import { BomOverviewLine } from "../bom_overview_line/mrp_bom_overview_line"; import { BomOverviewSpecialLine } from "../bom_overview_special_line/mrp_bom_overview_special_line"; - -const { Component, onWillUnmount, onWillUpdateProps, useState } = owl; +import { Component, onWillUnmount, onWillUpdateProps, useState } from "@odoo/owl"; export class BomOverviewExtraBlock extends Component { setup() { diff --git a/addons/mrp/static/src/components/bom_overview_line/mrp_bom_overview_line.js b/addons/mrp/static/src/components/bom_overview_line/mrp_bom_overview_line.js index a29f220578f..11439b10484 100644 --- a/addons/mrp/static/src/components/bom_overview_line/mrp_bom_overview_line.js +++ b/addons/mrp/static/src/components/bom_overview_line/mrp_bom_overview_line.js @@ -4,8 +4,7 @@ import { _t } from "@web/core/l10n/translation"; import { useService } from "@web/core/utils/hooks"; import { formatFloatTime, formatMonetary } from "@web/views/fields/formatters"; import { formatFloat } from "@web/core/utils/numbers"; - -const { Component } = owl; +import { Component } from "@odoo/owl"; export class BomOverviewLine extends Component { setup() { diff --git a/addons/mrp/static/src/components/bom_overview_special_line/mrp_bom_overview_special_line.js b/addons/mrp/static/src/components/bom_overview_special_line/mrp_bom_overview_special_line.js index 59290100fb8..c92baf0e61d 100644 --- a/addons/mrp/static/src/components/bom_overview_special_line/mrp_bom_overview_special_line.js +++ b/addons/mrp/static/src/components/bom_overview_special_line/mrp_bom_overview_special_line.js @@ -2,8 +2,7 @@ import { formatFloatTime, formatMonetary } from "@web/views/fields/formatters"; import { formatFloat } from "@web/core/utils/numbers"; - -const { Component } = owl; +import { Component } from "@odoo/owl"; export class BomOverviewSpecialLine extends Component { setup() { diff --git a/addons/mrp/static/src/components/bom_overview_table/mrp_bom_overview_table.js b/addons/mrp/static/src/components/bom_overview_table/mrp_bom_overview_table.js index 2642eec9d7e..d3010f59b27 100644 --- a/addons/mrp/static/src/components/bom_overview_table/mrp_bom_overview_table.js +++ b/addons/mrp/static/src/components/bom_overview_table/mrp_bom_overview_table.js @@ -5,8 +5,7 @@ import { formatFloat } from "@web/core/utils/numbers"; import { useService } from "@web/core/utils/hooks"; import { BomOverviewLine } from "../bom_overview_line/mrp_bom_overview_line"; import { BomOverviewComponentsBlock } from "../bom_overview_components_block/mrp_bom_overview_components_block"; - -const { Component } = owl; +import { Component } from "@odoo/owl"; export class BomOverviewTable extends Component { setup() { diff --git a/addons/mrp/static/src/mrp_forecasted/forecasted_buttons.js b/addons/mrp/static/src/mrp_forecasted/forecasted_buttons.js index 9bdca5b3152..63f6b295305 100644 --- a/addons/mrp/static/src/mrp_forecasted/forecasted_buttons.js +++ b/addons/mrp/static/src/mrp_forecasted/forecasted_buttons.js @@ -1,8 +1,7 @@ /** @odoo-module **/ import { ForecastedButtons } from "@stock/stock_forecasted/forecasted_buttons"; import { patch } from "@web/core/utils/patch"; - -const { onWillStart } = owl; +import { onWillStart } from "@odoo/owl"; patch(ForecastedButtons.prototype, { setup() { diff --git a/addons/mrp/static/src/views/fields/google_slides_viewer.js b/addons/mrp/static/src/views/fields/google_slides_viewer.js index dd155891130..518818981a8 100644 --- a/addons/mrp/static/src/views/fields/google_slides_viewer.js +++ b/addons/mrp/static/src/views/fields/google_slides_viewer.js @@ -4,8 +4,7 @@ import { _t } from "@web/core/l10n/translation"; import { registry } from "@web/core/registry"; import { useService } from "@web/core/utils/hooks"; import { CharField, charField } from "@web/views/fields/char/char_field"; - -const { useState } = owl; +import { useState } from "@odoo/owl"; export function getGoogleSlideUrl(value, page) { let url = false; diff --git a/addons/mrp/static/src/views/mrp_documents_kanban/mrp_documents_kanban_controller.js b/addons/mrp/static/src/views/mrp_documents_kanban/mrp_documents_kanban_controller.js index 25052f2af8f..b248b31ee2f 100644 --- a/addons/mrp/static/src/views/mrp_documents_kanban/mrp_documents_kanban_controller.js +++ b/addons/mrp/static/src/views/mrp_documents_kanban/mrp_documents_kanban_controller.js @@ -2,8 +2,7 @@ import { KanbanController } from "@web/views/kanban/kanban_controller"; import { useBus, useService } from "@web/core/utils/hooks"; - -const { useRef } = owl; +import { useRef } from "@odoo/owl"; export class MrpDocumentsKanbanController extends KanbanController { setup() { diff --git a/addons/mrp/static/src/widgets/mrp_consumed.js b/addons/mrp/static/src/widgets/mrp_consumed.js index 6eb1b839579..2419c84f401 100644 --- a/addons/mrp/static/src/widgets/mrp_consumed.js +++ b/addons/mrp/static/src/widgets/mrp_consumed.js @@ -2,8 +2,7 @@ import { registry } from "@web/core/registry"; import { FloatField, floatField } from '@web/views/fields/float/float_field'; - -const { useRef, useEffect } = owl; +import { useRef, useEffect } from "@odoo/owl"; export class MrpConsumed extends FloatField { setup() { diff --git a/addons/mrp/static/src/widgets/mrp_should_consume.js b/addons/mrp/static/src/widgets/mrp_should_consume.js index 70da66515d8..c96aa90a997 100644 --- a/addons/mrp/static/src/widgets/mrp_should_consume.js +++ b/addons/mrp/static/src/widgets/mrp_should_consume.js @@ -2,7 +2,8 @@ import { FloatField, floatField } from "@web/views/fields/float/float_field"; import { registry } from "@web/core/registry"; -import { formatFloat } from "@web/core/utils/numbers";; +import { formatFloat } from "@web/core/utils/numbers"; +import { useRef, onPatched, onMounted, useState } from "@odoo/owl"; /** * This widget is used to display alongside the total quantity to consume of a production order, @@ -12,7 +13,6 @@ import { formatFloat } from "@web/core/utils/numbers";; * The widget will be '3.000 / 5.000'. */ -const { useRef, onPatched, onMounted, useState } = owl; export class MrpShouldConsumeOwl extends FloatField { setup() { super.setup(); diff --git a/addons/mrp/static/src/widgets/timer.js b/addons/mrp/static/src/widgets/timer.js index 51b9e202c90..5b77b8126cd 100644 --- a/addons/mrp/static/src/widgets/timer.js +++ b/addons/mrp/static/src/widgets/timer.js @@ -5,8 +5,7 @@ import { useService } from "@web/core/utils/hooks"; import { parseFloatTime } from "@web/views/fields/parsers"; import { useInputField } from "@web/views/fields/input_field_hook"; import { standardFieldProps } from "@web/views/fields/standard_field_props"; - -const { Component, useState, onWillUpdateProps, onWillStart, onWillDestroy } = owl; +import { Component, useState, onWillUpdateProps, onWillStart, onWillDestroy } from "@odoo/owl"; function formatMinutes(value) { if (value === false) { diff --git a/addons/mrp_subcontracting/static/src/subcontracting_portal/subcontracting_portal.js b/addons/mrp_subcontracting/static/src/subcontracting_portal/subcontracting_portal.js index 34fc80e34fe..38f500a28e7 100644 --- a/addons/mrp_subcontracting/static/src/subcontracting_portal/subcontracting_portal.js +++ b/addons/mrp_subcontracting/static/src/subcontracting_portal/subcontracting_portal.js @@ -5,8 +5,7 @@ import { ActionContainer } from '@web/webclient/actions/action_container'; import { MainComponentsContainer } from "@web/core/main_components_container"; import { useOwnDebugContext } from "@web/core/debug/debug_context"; import { session } from '@web/session'; - -const { Component, useEffect, useExternalListener } = owl; +import { Component, useEffect, useExternalListener } from "@odoo/owl"; export class SubcontractingPortalWebClient extends Component { setup() { diff --git a/addons/point_of_sale/static/src/app/store/product_configurator_popup/product_configurator_popup.js b/addons/point_of_sale/static/src/app/store/product_configurator_popup/product_configurator_popup.js index bd1aa294a86..a406ada3a33 100644 --- a/addons/point_of_sale/static/src/app/store/product_configurator_popup/product_configurator_popup.js +++ b/addons/point_of_sale/static/src/app/store/product_configurator_popup/product_configurator_popup.js @@ -1,6 +1,6 @@ /** @odoo-module */ import { AbstractAwaitablePopup } from "@point_of_sale/app/popup/abstract_awaitable_popup"; -import { Component, useRef, useState, useSubEnv } from "@odoo/owl"; +import { Component, onMounted, useRef, useState, useSubEnv } from "@odoo/owl"; import { useService } from "@web/core/utils/hooks"; export class BaseProductAttribute extends Component { @@ -46,7 +46,7 @@ export class RadioProductAttribute extends BaseProductAttribute { setup() { super.setup(); this.root = useRef("root"); - owl.onMounted(this.onMounted); + onMounted(this.onMounted); } onMounted() { // With radio buttons `t-model` selects the default input by searching for inputs with diff --git a/addons/product/static/src/js/product_document_kanban/product_document_kanban_controller.js b/addons/product/static/src/js/product_document_kanban/product_document_kanban_controller.js index f462eefa073..833ec26d579 100644 --- a/addons/product/static/src/js/product_document_kanban/product_document_kanban_controller.js +++ b/addons/product/static/src/js/product_document_kanban/product_document_kanban_controller.js @@ -2,8 +2,7 @@ import { KanbanController } from "@web/views/kanban/kanban_controller"; import { useBus, useService } from "@web/core/utils/hooks"; - -const { useRef } = owl; +import { useRef } from "@odoo/owl"; export class ProductDocumentKanbanController extends KanbanController { setup() { diff --git a/addons/product_matrix/static/src/js/product_matrix_dialog.js b/addons/product_matrix/static/src/js/product_matrix_dialog.js index e555f0749e3..bc22a0fb610 100644 --- a/addons/product_matrix/static/src/js/product_matrix_dialog.js +++ b/addons/product_matrix/static/src/js/product_matrix_dialog.js @@ -4,8 +4,7 @@ import { _t } from "@web/core/l10n/translation"; import { Dialog } from '@web/core/dialog/dialog'; import { formatMonetary } from "@web/views/fields/formatters"; import { useHotkey } from "@web/core/hotkeys/hotkey_hook"; -const { Component, onMounted, markup, useRef } = owl; - +import { Component, onMounted, markup, useRef } from "@odoo/owl"; export class ProductMatrixDialog extends Component { setup() { diff --git a/addons/project/static/src/components/project_control_panel/project_control_panel.js b/addons/project/static/src/components/project_control_panel/project_control_panel.js index 20b2c4dbc08..3b2a0069b07 100644 --- a/addons/project/static/src/components/project_control_panel/project_control_panel.js +++ b/addons/project/static/src/components/project_control_panel/project_control_panel.js @@ -2,8 +2,7 @@ import { ControlPanel } from "@web/search/control_panel/control_panel"; import { useService } from "@web/core/utils/hooks"; - -const { onWillStart } = owl; +import { onWillStart } from "@odoo/owl"; export class ProjectControlPanel extends ControlPanel { setup() { diff --git a/addons/project/static/src/components/project_right_side_panel/components/project_milestone.js b/addons/project/static/src/components/project_right_side_panel/components/project_milestone.js index 3d27d236fc8..88aa64e986f 100644 --- a/addons/project/static/src/components/project_right_side_panel/components/project_milestone.js +++ b/addons/project/static/src/components/project_right_side_panel/components/project_milestone.js @@ -4,8 +4,8 @@ import { formatDate } from "@web/core/l10n/dates"; import { useService } from '@web/core/utils/hooks'; import { ConfirmationDialog } from "@web/core/confirmation_dialog/confirmation_dialog"; import { _t } from "@web/core/l10n/translation"; +import { Component, useState, onWillUpdateProps, status } from "@odoo/owl"; -const { Component, useState, onWillUpdateProps, status } = owl; const { DateTime } = luxon; export class ProjectMilestone extends Component { diff --git a/addons/project/static/src/components/project_right_side_panel/components/project_profitability.js b/addons/project/static/src/components/project_right_side_panel/components/project_profitability.js index 8a7e1a31f7c..9db51fd12f8 100644 --- a/addons/project/static/src/components/project_right_side_panel/components/project_profitability.js +++ b/addons/project/static/src/components/project_right_side_panel/components/project_profitability.js @@ -1,6 +1,6 @@ /** @odoo-module */ -const { Component } = owl; +import { Component } from "@odoo/owl"; export class ProjectProfitability extends Component { get revenues() { diff --git a/addons/project/static/src/components/project_right_side_panel/components/project_right_side_panel_section.js b/addons/project/static/src/components/project_right_side_panel/components/project_right_side_panel_section.js index ac41ded6d8e..05ca6f06b46 100644 --- a/addons/project/static/src/components/project_right_side_panel/components/project_right_side_panel_section.js +++ b/addons/project/static/src/components/project_right_side_panel/components/project_right_side_panel_section.js @@ -1,6 +1,6 @@ /** @odoo-module */ -const { Component } = owl; +import { Component } from "@odoo/owl"; export class ProjectRightSidePanelSection extends Component { } diff --git a/addons/project/static/src/components/project_right_side_panel/project_right_side_panel.js b/addons/project/static/src/components/project_right_side_panel/project_right_side_panel.js index 9de8e6df54e..d6cac8462f1 100644 --- a/addons/project/static/src/components/project_right_side_panel/project_right_side_panel.js +++ b/addons/project/static/src/components/project_right_side_panel/project_right_side_panel.js @@ -10,8 +10,7 @@ import { ProjectRightSidePanelSection } from './components/project_right_side_pa import { ProjectMilestone } from './components/project_milestone'; import { ProjectProfitability } from './components/project_profitability'; import { getCurrency } from '@web/core/currency'; - -const { Component, onWillStart, useState } = owl; +import { Component, onWillStart, useState } from "@odoo/owl"; export class ProjectRightSidePanel extends Component { setup() { diff --git a/addons/project/static/src/components/project_task_state_selection/project_task_state_selection.js b/addons/project/static/src/components/project_task_state_selection/project_task_state_selection.js index 0bdd565867d..f04570d5c37 100644 --- a/addons/project/static/src/components/project_task_state_selection/project_task_state_selection.js +++ b/addons/project/static/src/components/project_task_state_selection/project_task_state_selection.js @@ -9,8 +9,7 @@ import { useCommand } from "@web/core/commands/command_hook"; import { formatSelection } from "@web/views/fields/formatters"; import { registry } from "@web/core/registry"; - -const { useState } = owl; +import { useState } from "@odoo/owl"; export class ProjectTaskStateSelection extends StateSelectionField { setup() { diff --git a/addons/project/static/src/project_sharing/components/chatter/chatter_attachments_viewer.js b/addons/project/static/src/project_sharing/components/chatter/chatter_attachments_viewer.js index ffb44832a63..6ba49a135b8 100644 --- a/addons/project/static/src/project_sharing/components/chatter/chatter_attachments_viewer.js +++ b/addons/project/static/src/project_sharing/components/chatter/chatter_attachments_viewer.js @@ -1,6 +1,6 @@ /** @odoo-module */ -const { Component } = owl; +import { Component } from "@odoo/owl"; export class ChatterAttachmentsViewer extends Component {} diff --git a/addons/project/static/src/project_sharing/components/chatter/chatter_container.js b/addons/project/static/src/project_sharing/components/chatter/chatter_container.js index fb942183581..5f6e5dc8edc 100644 --- a/addons/project/static/src/project_sharing/components/chatter/chatter_container.js +++ b/addons/project/static/src/project_sharing/components/chatter/chatter_container.js @@ -5,8 +5,7 @@ import { ChatterComposer } from "./chatter_composer"; import { ChatterMessageCounter } from "./chatter_message_counter"; import { ChatterMessages } from "./chatter_messages"; import { ChatterPager } from "./chatter_pager"; - -const { Component, markup, onWillStart, useState, onWillUpdateProps } = owl; +import { Component, markup, onWillStart, useState, onWillUpdateProps } from "@odoo/owl"; export class ChatterContainer extends Component { setup() { diff --git a/addons/project/static/src/project_sharing/components/chatter/chatter_message_counter.js b/addons/project/static/src/project_sharing/components/chatter/chatter_message_counter.js index 479aa855623..c14bb64e577 100644 --- a/addons/project/static/src/project_sharing/components/chatter/chatter_message_counter.js +++ b/addons/project/static/src/project_sharing/components/chatter/chatter_message_counter.js @@ -1,6 +1,6 @@ /** @odoo-module */ -const { Component } = owl; +import { Component } from "@odoo/owl"; export class ChatterMessageCounter extends Component { } diff --git a/addons/project/static/src/project_sharing/components/chatter/chatter_messages.js b/addons/project/static/src/project_sharing/components/chatter/chatter_messages.js index 2c0e54824fa..54538ebdc61 100644 --- a/addons/project/static/src/project_sharing/components/chatter/chatter_messages.js +++ b/addons/project/static/src/project_sharing/components/chatter/chatter_messages.js @@ -3,8 +3,7 @@ import { useService } from "@web/core/utils/hooks"; import { ChatterAttachmentsViewer } from "./chatter_attachments_viewer"; - -const { Component } = owl; +import { Component } from "@odoo/owl"; export class ChatterMessages extends Component { setup() { diff --git a/addons/project/static/src/project_sharing/components/chatter/chatter_pager.js b/addons/project/static/src/project_sharing/components/chatter/chatter_pager.js index edc8ffc7899..a94b8564632 100644 --- a/addons/project/static/src/project_sharing/components/chatter/chatter_pager.js +++ b/addons/project/static/src/project_sharing/components/chatter/chatter_pager.js @@ -1,6 +1,6 @@ /** @odoo-module */ -const { Component, useState, onWillUpdateProps } = owl; +import { Component, useState, onWillUpdateProps } from "@odoo/owl"; export class ChatterPager extends Component { setup() { diff --git a/addons/project/static/src/project_sharing/components/portal_attach_document/portal_attach_document.js b/addons/project/static/src/project_sharing/components/portal_attach_document/portal_attach_document.js index df29b68ef5e..25312439a90 100644 --- a/addons/project/static/src/project_sharing/components/portal_attach_document/portal_attach_document.js +++ b/addons/project/static/src/project_sharing/components/portal_attach_document/portal_attach_document.js @@ -1,8 +1,7 @@ /** @odoo-module */ import { PortalFileInput } from '../portal_file_input/portal_file_input'; - -const { Component } = owl; +import { Component } from "@odoo/owl"; export class PortalAttachDocument extends Component {} diff --git a/addons/project/static/src/project_sharing/project_sharing.js b/addons/project/static/src/project_sharing/project_sharing.js index dabca7e38e1..8fdc42b2287 100644 --- a/addons/project/static/src/project_sharing/project_sharing.js +++ b/addons/project/static/src/project_sharing/project_sharing.js @@ -5,8 +5,7 @@ import { ActionContainer } from '@web/webclient/actions/action_container'; import { MainComponentsContainer } from "@web/core/main_components_container"; import { useOwnDebugContext } from "@web/core/debug/debug_context"; import { session } from '@web/session'; - -const { Component, useEffect, useExternalListener, useState } = owl; +import { Component, useEffect, useExternalListener, useState } from "@odoo/owl"; export class ProjectSharingWebClient extends Component { setup() { diff --git a/addons/project/static/src/project_sharing/views/list/list_renderer.js b/addons/project/static/src/project_sharing/views/list/list_renderer.js index 23bec9b3771..30ab23c4927 100644 --- a/addons/project/static/src/project_sharing/views/list/list_renderer.js +++ b/addons/project/static/src/project_sharing/views/list/list_renderer.js @@ -2,8 +2,7 @@ import { evaluateBooleanExpr } from "@web/core/py_js/py"; import { ListRenderer } from "@web/views/list/list_renderer"; - -const { onWillUpdateProps } = owl; +import { onWillUpdateProps } from "@odoo/owl"; export class ProjectSharingListRenderer extends ListRenderer { setup() { diff --git a/addons/project/static/src/views/form_with_html_expander/form_renderer_with_html_expander.js b/addons/project/static/src/views/form_with_html_expander/form_renderer_with_html_expander.js index 72d46658e89..e196a868947 100644 --- a/addons/project/static/src/views/form_with_html_expander/form_renderer_with_html_expander.js +++ b/addons/project/static/src/views/form_with_html_expander/form_renderer_with_html_expander.js @@ -2,8 +2,7 @@ import { useService } from '@web/core/utils/hooks'; import { FormRenderer } from '@web/views/form/form_renderer'; - -const { useRef, useEffect } = owl; +import { useRef, useEffect } from "@odoo/owl"; export class FormRendererWithHtmlExpander extends FormRenderer { setup() { diff --git a/addons/project/static/src/views/project_task_kanban/project_task_kanban_examples.js b/addons/project/static/src/views/project_task_kanban/project_task_kanban_examples.js index e293eb42eac..382c00cd429 100644 --- a/addons/project/static/src/views/project_task_kanban/project_task_kanban_examples.js +++ b/addons/project/static/src/views/project_task_kanban/project_task_kanban_examples.js @@ -3,8 +3,8 @@ import { _t } from "@web/core/l10n/translation"; import { registry } from "@web/core/registry"; import { renderToMarkup } from '@web/core/utils/render'; +import { markup } from "@odoo/owl"; -const { markup } = owl; const greenBullet = markup(``); const orangeBullet = markup(``); const star = markup(``); diff --git a/addons/purchase/static/src/toaster_button/toaster_button_widget.js b/addons/purchase/static/src/toaster_button/toaster_button_widget.js index b055f42477e..1842be46279 100644 --- a/addons/purchase/static/src/toaster_button/toaster_button_widget.js +++ b/addons/purchase/static/src/toaster_button/toaster_button_widget.js @@ -1,8 +1,7 @@ /** @odoo-module */ import { registry } from "@web/core/registry"; import { useService } from "@web/core/utils/hooks"; - -const { Component } = owl; +import { Component } from "@odoo/owl"; class ButtonWithNotification extends Component { setup() { diff --git a/addons/purchase/static/src/views/purchase_dashboard.js b/addons/purchase/static/src/views/purchase_dashboard.js index d639af0d632..0a26d649467 100644 --- a/addons/purchase/static/src/views/purchase_dashboard.js +++ b/addons/purchase/static/src/views/purchase_dashboard.js @@ -1,7 +1,6 @@ /** @odoo-module */ import { useService } from "@web/core/utils/hooks"; - -const { Component, onWillStart } = owl; +import { Component, onWillStart } from "@odoo/owl"; export class PurchaseDashBoard extends Component { setup() { @@ -9,10 +8,7 @@ export class PurchaseDashBoard extends Component { this.action = useService("action"); onWillStart(async () => { - this.purchaseData = await this.orm.call( - "purchase.order", - "retrieve_dashboard", - ); + this.purchaseData = await this.orm.call("purchase.order", "retrieve_dashboard"); }); } @@ -21,14 +17,16 @@ export class PurchaseDashBoard extends Component { * the filters found in `filter_name` attibute from button pressed */ setSearchContext(ev) { - let filter_name = ev.currentTarget.getAttribute("filter_name"); - let filters = filter_name.split(','); - let searchItems = this.env.searchModel.getSearchItems((item) => filters.includes(item.name)); + const filter_name = ev.currentTarget.getAttribute("filter_name"); + const filters = filter_name.split(","); + const searchItems = this.env.searchModel.getSearchItems((item) => + filters.includes(item.name) + ); this.env.searchModel.query = []; - for (const item of searchItems){ + for (const item of searchItems) { this.env.searchModel.toggleSearchItem(item.id); } } } -PurchaseDashBoard.template = 'purchase.PurchaseDashboard' +PurchaseDashBoard.template = "purchase.PurchaseDashboard"; diff --git a/addons/purchase_requisition/static/src/views/list/purchase_order_line_compare_list_renderer.js b/addons/purchase_requisition/static/src/views/list/purchase_order_line_compare_list_renderer.js index 03ad3fda996..c44d6a33cbe 100644 --- a/addons/purchase_requisition/static/src/views/list/purchase_order_line_compare_list_renderer.js +++ b/addons/purchase_requisition/static/src/views/list/purchase_order_line_compare_list_renderer.js @@ -1,8 +1,7 @@ /** @odoo-module */ import { ListRenderer } from "@web/views/list/list_renderer"; - -const { onWillStart, useState, useSubEnv } = owl; +import { onWillStart, useState, useSubEnv } from "@odoo/owl"; export class PurchaseOrderLineCompareListRenderer extends ListRenderer { setup() { diff --git a/addons/resource/static/src/section_list_renderer.js b/addons/resource/static/src/section_list_renderer.js index 47c0ca48e35..0b5a35aa042 100644 --- a/addons/resource/static/src/section_list_renderer.js +++ b/addons/resource/static/src/section_list_renderer.js @@ -1,8 +1,7 @@ /** @odoo-module */ import { ListRenderer } from "@web/views/list/list_renderer"; - -const { useEffect } = owl; +import { useEffect } from "@odoo/owl"; export class SectionListRenderer extends ListRenderer { setup() { diff --git a/addons/sale/static/src/js/sale_progressbar_field.js b/addons/sale/static/src/js/sale_progressbar_field.js index 03aef776944..99bde04d2d2 100644 --- a/addons/sale/static/src/js/sale_progressbar_field.js +++ b/addons/sale/static/src/js/sale_progressbar_field.js @@ -6,8 +6,7 @@ import { KanbanProgressBarField, kanbanProgressBarField, } from "@web/views/fields/progress_bar/kanban_progress_bar_field"; - -const { useEffect } = owl; +import { useEffect } from "@odoo/owl"; /** * A custom Component for the view of sales teams on the kanban view in the CRM app. diff --git a/addons/sale/static/src/js/tours/sale.js b/addons/sale/static/src/js/tours/sale.js index a2fca774b00..2da30da5852 100644 --- a/addons/sale/static/src/js/tours/sale.js +++ b/addons/sale/static/src/js/tours/sale.js @@ -3,8 +3,7 @@ import { _t } from "@web/core/l10n/translation"; import { registry } from "@web/core/registry"; import { stepUtils } from "@web_tour/tour_service/tour_utils"; - -const { markup } = owl; +import { markup } from "@odoo/owl"; registry.category("web_tour.tours").add("sale_tour", { url: "/web", diff --git a/addons/sale_stock/static/src/widgets/qty_at_date_widget.js b/addons/sale_stock/static/src/widgets/qty_at_date_widget.js index d4a90f09e15..c8a6d55c90e 100644 --- a/addons/sale_stock/static/src/widgets/qty_at_date_widget.js +++ b/addons/sale_stock/static/src/widgets/qty_at_date_widget.js @@ -5,8 +5,7 @@ import { localization } from "@web/core/l10n/localization"; import { registry } from "@web/core/registry"; import { useService } from "@web/core/utils/hooks"; import { usePopover } from "@web/core/popover/popover_hook"; - -const { Component, onWillRender } = owl; +import { Component, onWillRender } from "@odoo/owl"; export class QtyAtDatePopover extends Component { setup() { diff --git a/addons/sms/static/src/components/sms_button/sms_button.js b/addons/sms/static/src/components/sms_button/sms_button.js index fd760f9fb29..fd7407f84c5 100644 --- a/addons/sms/static/src/components/sms_button/sms_button.js +++ b/addons/sms/static/src/components/sms_button/sms_button.js @@ -2,8 +2,7 @@ import { _t } from "@web/core/l10n/translation"; import { useService } from "@web/core/utils/hooks"; - -const { Component } = owl; +import { Component } from "@odoo/owl"; export class SendSMSButton extends Component { setup() { @@ -16,25 +15,28 @@ export class SendSMSButton extends Component { } async onClick() { await this.props.record.save(); - this.action.doAction({ - type: "ir.actions.act_window", - target: "new", - name: this.title, - res_model: "sms.composer", - views: [[false, "form"]], - context: { - ...this.user.context, - default_res_model: this.props.record.resModel, - default_res_id: this.props.record.resId, - default_number_field_name: this.props.name, - default_composition_mode: 'comment', - } - }, { - onClose: () => { - this.props.record.load(); + this.action.doAction( + { + type: "ir.actions.act_window", + target: "new", + name: this.title, + res_model: "sms.composer", + views: [[false, "form"]], + context: { + ...this.user.context, + default_res_model: this.props.record.resModel, + default_res_id: this.props.record.resId, + default_number_field_name: this.props.name, + default_composition_mode: "comment", + }, }, - }); + { + onClose: () => { + this.props.record.load(); + }, + } + ); } -}; +} SendSMSButton.template = "sms.SendSMSButton"; SendSMSButton.props = ["*"]; diff --git a/addons/stock/static/src/components/reception_report_line/stock_reception_report_line.js b/addons/stock/static/src/components/reception_report_line/stock_reception_report_line.js index 5956db64559..dae227eda8b 100644 --- a/addons/stock/static/src/components/reception_report_line/stock_reception_report_line.js +++ b/addons/stock/static/src/components/reception_report_line/stock_reception_report_line.js @@ -1,8 +1,7 @@ /** @odoo-module **/ import { useService } from "@web/core/utils/hooks"; import { formatFloat } from "@web/core/utils/numbers"; - -const { Component } = owl; +import { Component } from "@odoo/owl"; export class ReceptionReportLine extends Component { setup() { diff --git a/addons/stock/static/src/components/reception_report_main/stock_reception_report_main.js b/addons/stock/static/src/components/reception_report_main/stock_reception_report_main.js index c42c12a7197..68892995db4 100644 --- a/addons/stock/static/src/components/reception_report_main/stock_reception_report_main.js +++ b/addons/stock/static/src/components/reception_report_main/stock_reception_report_main.js @@ -4,8 +4,7 @@ import { registry } from "@web/core/registry"; import { useBus, useService } from "@web/core/utils/hooks"; import { ControlPanel } from "@web/search/control_panel/control_panel"; import { ReceptionReportTable } from "../reception_report_table/stock_reception_report_table"; - -const { Component, onWillStart, useState } = owl; +import { Component, onWillStart, useState } from "@odoo/owl"; export class ReceptionReportMain extends Component { setup() { diff --git a/addons/stock/static/src/components/reception_report_table/stock_reception_report_table.js b/addons/stock/static/src/components/reception_report_table/stock_reception_report_table.js index 517bb1d3b16..e7caa74fa50 100644 --- a/addons/stock/static/src/components/reception_report_table/stock_reception_report_table.js +++ b/addons/stock/static/src/components/reception_report_table/stock_reception_report_table.js @@ -2,8 +2,7 @@ import { useService } from "@web/core/utils/hooks"; import { ReceptionReportLine } from "../reception_report_line/stock_reception_report_line"; - -const { Component } = owl; +import { Component } from "@odoo/owl"; export class ReceptionReportTable extends Component { setup() { diff --git a/addons/stock/static/src/stock_forecasted/forecasted_buttons.js b/addons/stock/static/src/stock_forecasted/forecasted_buttons.js index 98e51ab5fc0..124d7509e88 100644 --- a/addons/stock/static/src/stock_forecasted/forecasted_buttons.js +++ b/addons/stock/static/src/stock_forecasted/forecasted_buttons.js @@ -2,7 +2,7 @@ import { _t } from "@web/core/l10n/translation"; import { useService } from "@web/core/utils/hooks"; -const { Component} = owl; +import { Component } from "@odoo/owl"; export class ForecastedButtons extends Component { diff --git a/addons/stock/static/src/stock_forecasted/forecasted_details.js b/addons/stock/static/src/stock_forecasted/forecasted_details.js index 67e23684cde..a58a5128c91 100644 --- a/addons/stock/static/src/stock_forecasted/forecasted_details.js +++ b/addons/stock/static/src/stock_forecasted/forecasted_details.js @@ -1,8 +1,7 @@ /** @odoo-module **/ import { formatFloat } from "@web/core/utils/numbers"; import { useService } from "@web/core/utils/hooks"; - -const { Component } = owl; +import { Component } from "@odoo/owl"; export class ForecastedDetails extends Component { setup() { diff --git a/addons/stock/static/src/stock_forecasted/forecasted_header.js b/addons/stock/static/src/stock_forecasted/forecasted_header.js index 69ac5ddac67..ff08d13af28 100644 --- a/addons/stock/static/src/stock_forecasted/forecasted_header.js +++ b/addons/stock/static/src/stock_forecasted/forecasted_header.js @@ -1,10 +1,9 @@ /** @odoo-module **/ import { useService } from "@web/core/utils/hooks"; import { formatFloat } from "@web/core/utils/numbers"; +import { Component } from "@odoo/owl"; -const { Component } = owl; - -export class ForecastedHeader extends Component{ +export class ForecastedHeader extends Component { setup(){ this.orm = useService("orm"); this.action = useService("action"); diff --git a/addons/stock/static/src/stock_forecasted/forecasted_warehouse_filter.js b/addons/stock/static/src/stock_forecasted/forecasted_warehouse_filter.js index 7d2d5f64d99..4c109babac1 100644 --- a/addons/stock/static/src/stock_forecasted/forecasted_warehouse_filter.js +++ b/addons/stock/static/src/stock_forecasted/forecasted_warehouse_filter.js @@ -2,7 +2,7 @@ import { Dropdown } from "@web/core/dropdown/dropdown"; import { DropdownItem } from "@web/core/dropdown/dropdown_item"; import { useService } from "@web/core/utils/hooks"; -const { Component, onWillStart} = owl; +import { Component, onWillStart } from "@odoo/owl"; export class ForecastedWarehouseFilter extends Component { diff --git a/addons/stock/static/src/stock_forecasted/stock_forecasted.js b/addons/stock/static/src/stock_forecasted/stock_forecasted.js index b8951b04ddd..e999124604e 100644 --- a/addons/stock/static/src/stock_forecasted/stock_forecasted.js +++ b/addons/stock/static/src/stock_forecasted/stock_forecasted.js @@ -10,8 +10,7 @@ import { ForecastedButtons } from "./forecasted_buttons"; import { ForecastedDetails } from "./forecasted_details"; import { ForecastedHeader } from "./forecasted_header"; import { ForecastedWarehouseFilter } from "./forecasted_warehouse_filter"; - -const { Component, onWillStart, useState } = owl; +import { Component, onWillStart, useState } from "@odoo/owl"; export class StockForecasted extends Component { setup() { diff --git a/addons/stock/static/src/widgets/counted_quantity_widget.js b/addons/stock/static/src/widgets/counted_quantity_widget.js index 22e69191d38..6ff056fcb3c 100644 --- a/addons/stock/static/src/widgets/counted_quantity_widget.js +++ b/addons/stock/static/src/widgets/counted_quantity_widget.js @@ -3,8 +3,7 @@ import { FloatField, floatField } from "@web/views/fields/float/float_field"; import { registry } from "@web/core/registry"; import { getActiveHotkey } from "@web/core/hotkeys/hotkey_service"; - -const { useEffect, useRef } = owl; +import { useEffect, useRef } from "@odoo/owl"; export class CountedQuantityWidgetField extends FloatField { setup() { diff --git a/addons/stock/static/src/widgets/generate_serial.js b/addons/stock/static/src/widgets/generate_serial.js index 8516e092815..55103786780 100644 --- a/addons/stock/static/src/widgets/generate_serial.js +++ b/addons/stock/static/src/widgets/generate_serial.js @@ -7,7 +7,7 @@ import { useService } from "@web/core/utils/hooks"; import { registry } from "@web/core/registry"; import { parseInteger } from "@web/views/fields/parsers"; import { getId } from "@web/model/relational_model/utils"; -const { Component, useRef, xml, onMounted } = owl; +import { Component, useRef, xml, onMounted } from "@odoo/owl"; export class GenerateDialog extends Component { setup() { diff --git a/addons/stock/static/src/widgets/json_widget.js b/addons/stock/static/src/widgets/json_widget.js index cd5381def44..a42bacbd09b 100644 --- a/addons/stock/static/src/widgets/json_widget.js +++ b/addons/stock/static/src/widgets/json_widget.js @@ -3,8 +3,7 @@ import { registry } from "@web/core/registry"; import { _t } from "@web/core/l10n/translation"; import { useService } from "@web/core/utils/hooks"; - -const { Component, onWillStart } = owl; +import { Component, onWillStart } from "@odoo/owl"; export class JsonPopOver extends Component { get jsonValue() { diff --git a/addons/stock/static/src/widgets/popover_widget.js b/addons/stock/static/src/widgets/popover_widget.js index 164bc12e73d..10d2a383f80 100644 --- a/addons/stock/static/src/widgets/popover_widget.js +++ b/addons/stock/static/src/widgets/popover_widget.js @@ -1,8 +1,7 @@ /** @odoo-module */ import { registry } from "@web/core/registry"; import { usePopover } from "@web/core/popover/popover_hook"; -const { Component } = owl; - +import { Component } from "@odoo/owl"; /** * Extend this to add functionality to Popover (custom methods etc.) diff --git a/addons/survey/static/src/question_page/description_page_field.js b/addons/survey/static/src/question_page/description_page_field.js index 4efe161386e..b3bde87023a 100644 --- a/addons/survey/static/src/question_page/description_page_field.js +++ b/addons/survey/static/src/question_page/description_page_field.js @@ -2,8 +2,7 @@ import { CharField, charField } from "@web/views/fields/char/char_field"; import { registry } from "@web/core/registry"; - -const { useEffect, useRef } = owl; +import { useEffect, useRef } from "@odoo/owl"; class DescriptionPageField extends CharField { setup() { diff --git a/addons/survey/static/src/question_page/question_page_list_renderer.js b/addons/survey/static/src/question_page/question_page_list_renderer.js index 9923fd5b38d..1d315b48dd9 100644 --- a/addons/survey/static/src/question_page/question_page_list_renderer.js +++ b/addons/survey/static/src/question_page/question_page_list_renderer.js @@ -2,8 +2,7 @@ import { makeContext } from "@web/core/context"; import { ListRenderer } from "@web/views/list/list_renderer"; - -const { useEffect } = owl; +import { useEffect } from "@odoo/owl"; export class QuestionPageListRenderer extends ListRenderer { setup() { diff --git a/addons/survey/static/src/question_page/question_page_one2many_field.js b/addons/survey/static/src/question_page/question_page_one2many_field.js index c4b621c888a..07b509a706b 100644 --- a/addons/survey/static/src/question_page/question_page_one2many_field.js +++ b/addons/survey/static/src/question_page/question_page_one2many_field.js @@ -6,8 +6,7 @@ import { registry } from "@web/core/registry"; import { useOpenX2ManyRecord, useX2ManyCrud, X2ManyFieldDialog } from "@web/views/fields/relational_utils"; import { patch } from '@web/core/utils/patch'; import { X2ManyField, x2ManyField } from "@web/views/fields/x2many/x2many_field"; - -const { useSubEnv } = owl; +import { useSubEnv } from "@odoo/owl"; patch(X2ManyFieldDialog.prototype, { /** diff --git a/addons/survey/static/src/views/survey_views.js b/addons/survey/static/src/views/survey_views.js index 0b3fb844b19..82ba1a4f2ad 100644 --- a/addons/survey/static/src/views/survey_views.js +++ b/addons/survey/static/src/views/survey_views.js @@ -6,8 +6,7 @@ import { KanbanRenderer } from "@web/views/kanban/kanban_renderer"; import { listView } from '@web/views/list/list_view'; import { kanbanView } from '@web/views/kanban/kanban_view'; import { useService } from "@web/core/utils/hooks"; - -const { useEffect, useRef } = owl; +import { useEffect, useRef } from "@odoo/owl"; export function useSurveyLoadSampleHook(selector) { const rootRef = useRef("root"); diff --git a/addons/survey/static/src/views/widgets/survey_question_trigger/survey_question_trigger.js b/addons/survey/static/src/views/widgets/survey_question_trigger/survey_question_trigger.js index 144dc9ec3b9..a704300c0ff 100644 --- a/addons/survey/static/src/views/widgets/survey_question_trigger/survey_question_trigger.js +++ b/addons/survey/static/src/views/widgets/survey_question_trigger/survey_question_trigger.js @@ -3,8 +3,7 @@ import { _t } from "@web/core/l10n/translation"; import { registry } from "@web/core/registry"; import { standardWidgetProps } from "@web/views/widgets/standard_widget_props"; - -const { Component, useEffect, useRef, useState } = owl; +import { Component, useEffect, useRef, useState } from "@odoo/owl"; export class SurveyQuestionTriggerWidget extends Component { static template = "survey.surveyQuestionTrigger"; diff --git a/addons/test_mail/static/tests/activity_tests.js b/addons/test_mail/static/tests/activity_tests.js index 1b98f5528ac..05791ae92dc 100644 --- a/addons/test_mail/static/tests/activity_tests.js +++ b/addons/test_mail/static/tests/activity_tests.js @@ -13,6 +13,7 @@ import { editInput, patchWithCleanup, click, patchDate } from "@web/../tests/hel import { toggleSearchBarMenu } from "@web/../tests/search/helpers"; import { contains } from "@web/../tests/utils"; import { doAction } from "@web/../tests/webclient/helpers"; +import { onMounted, onWillUnmount } from "@odoo/owl"; const { DateTime } = luxon; let serverData; @@ -225,7 +226,7 @@ QUnit.module("test_mail", {}, function () { for (let i = 0; i < 101; i++) { activityToCreate.push({ - display_name: "An activity " + (i * 2), + display_name: "An activity " + i * 2, date_deadline: serializeDate(DateTime.now().plus({ days: 3 })), can_write: true, state: "planned", @@ -241,7 +242,10 @@ QUnit.module("test_mail", {}, function () { } const createdActivity = pyEnv["mail.activity"].create(activityToCreate); for (let i = 0; i < 101; i++) { - recordsToCreate.push({ name: "pagerTestRecord" + i, activity_ids: [createdActivity[i * 2], createdActivity[i * 2 + 1]] }); + recordsToCreate.push({ + name: "pagerTestRecord" + i, + activity_ids: [createdActivity[i * 2], createdActivity[i * 2 + 1]], + }); } pyEnv["mail.test.activity"].create(recordsToCreate); @@ -251,7 +255,7 @@ QUnit.module("test_mail", {}, function () { await openView({ res_model: "mail.test.activity", views: [[false, "activity"]], - domain: [['name', 'like', 'pagerTestRecord']], + domain: [["name", "like", "pagerTestRecord"]], }); assert.containsN( document.body, @@ -753,10 +757,10 @@ QUnit.module("test_mail", {}, function () { patchWithCleanup(ActivityRenderer.prototype, { setup() { super.setup(); - owl.onMounted(() => { + onMounted(() => { assert.step("mounted"); }); - owl.onWillUnmount(() => { + onWillUnmount(() => { assert.step("willUnmount"); }); }, diff --git a/addons/test_website/static/tests/field_html_file_upload.js b/addons/test_website/static/tests/field_html_file_upload.js index f1aad516251..d6f2b0673ad 100644 --- a/addons/test_website/static/tests/field_html_file_upload.js +++ b/addons/test_website/static/tests/field_html_file_upload.js @@ -10,8 +10,7 @@ import { unsplashService } from '@web_unsplash/services/unsplash_service'; import { createWebClient, doAction } from "@web/../tests/webclient/helpers"; import weTestUtils from '@web_editor/../tests/test_utils'; import {Wysiwyg} from '@web_editor/js/wysiwyg/wysiwyg'; - -const { useEffect } = owl; +import { useEffect } from "@odoo/owl"; QUnit.module('field html file upload', { beforeEach: function () { diff --git a/addons/web/static/src/core/autocomplete/autocomplete.js b/addons/web/static/src/core/autocomplete/autocomplete.js index 52437d8ff3a..113ca07deb6 100644 --- a/addons/web/static/src/core/autocomplete/autocomplete.js +++ b/addons/web/static/src/core/autocomplete/autocomplete.js @@ -5,7 +5,7 @@ import { useAutofocus, useForwardRefToParent, useService } from "@web/core/utils import { useDebounced } from "@web/core/utils/timing"; import { getActiveHotkey } from "@web/core/hotkeys/hotkey_service"; import { usePosition } from "@web/core/position_hook"; -import { Component, useExternalListener, useRef, useState } from "@odoo/owl"; +import { Component, onWillUpdateProps, useExternalListener, useRef, useState } from "@odoo/owl"; export class AutoComplete extends Component { setup() { @@ -51,7 +51,7 @@ export class AutoComplete extends Component { this.hotkey = useService("hotkey"); this.hotkeysToRemove = []; - owl.onWillUpdateProps((nextProps) => { + onWillUpdateProps((nextProps) => { if (this.props.value !== nextProps.value || this.forceValFromProp) { this.forceValFromProp = false; if (!this.inEdition) { diff --git a/addons/web/static/src/core/dialog/dialog.js b/addons/web/static/src/core/dialog/dialog.js index 00cb2cc8f79..8c2f78ebf40 100644 --- a/addons/web/static/src/core/dialog/dialog.js +++ b/addons/web/static/src/core/dialog/dialog.js @@ -3,7 +3,7 @@ import { useHotkey } from "@web/core/hotkeys/hotkey_hook"; import { useActiveElement } from "../ui/ui_service"; import { useForwardRefToParent } from "@web/core/utils/hooks"; -import { Component, useChildSubEnv, useExternalListener, useState } from "@odoo/owl"; +import { Component, onWillDestroy, useChildSubEnv, useExternalListener, useState } from "@odoo/owl"; import { throttleForAnimation } from "@web/core/utils/timing"; import { makeDraggableHook } from "../utils/draggable_hook_builder"; @@ -69,7 +69,7 @@ export class Dialog extends Component { }); const throttledResize = throttleForAnimation(this.onResize.bind(this)); useExternalListener(window, "resize", throttledResize); - owl.onWillDestroy(() => { + onWillDestroy(() => { if (this.env.isSmall) { this.data.scrollToOrigin(); } diff --git a/addons/web/static/src/legacy/js/core/service_mixins.js b/addons/web/static/src/legacy/js/core/service_mixins.js index e47e4fc7729..272e5d88431 100644 --- a/addons/web/static/src/legacy/js/core/service_mixins.js +++ b/addons/web/static/src/legacy/js/core/service_mixins.js @@ -6,6 +6,7 @@ import { ConnectionLostError, RPCError, } from "@web/core/network/rpc_service"; +import { Component } from "@odoo/owl"; function protectMethod(widget, fn) { return function (...args) { @@ -35,7 +36,7 @@ function protectMethod(widget, fn) { var ServicesMixin = { bindService: function (serviceName) { - const { services } = owl.Component.env; + const { services } = Component.env; const service = services[serviceName]; if (!service) { throw new Error(`Service ${serviceName} is not available`); diff --git a/addons/web/static/src/legacy/js/public/public_root.js b/addons/web/static/src/legacy/js/public/public_root.js index c621b75db74..2ed4223f86c 100644 --- a/addons/web/static/src/legacy/js/public/public_root.js +++ b/addons/web/static/src/legacy/js/public/public_root.js @@ -20,7 +20,7 @@ import { MainComponentsContainer } from "@web/core/main_components_container"; import { browser } from '@web/core/browser/browser'; import { renderToString } from "@web/core/utils/render"; import { _t } from "@web/core/l10n/translation"; -import { App, whenReady } from "@odoo/owl"; +import { App, Component, whenReady } from "@odoo/owl"; const { Settings } = luxon; @@ -314,7 +314,7 @@ export const PublicRoot = publicWidget.RootWidget.extend({ /** * Configure Owl with the public env */ -owl.Component.env = legacyEnv; +Component.env = legacyEnv; /** * This widget is important, because the tour manager needs a root widget in diff --git a/addons/web/static/src/libs/owl.js b/addons/web/static/src/libs/owl.js index 4f4833b6989..131665bcbac 100644 --- a/addons/web/static/src/libs/owl.js +++ b/addons/web/static/src/libs/owl.js @@ -1 +1,2 @@ +/* eslint-disable no-undef */ owl.App.validateTarget = () => {}; diff --git a/addons/web/static/src/views/form/form_group/form_group.js b/addons/web/static/src/views/form/form_group/form_group.js index cafdb5bab03..cc20b27675e 100644 --- a/addons/web/static/src/views/form/form_group/form_group.js +++ b/addons/web/static/src/views/form/form_group/form_group.js @@ -1,7 +1,8 @@ /** @odoo-module */ +import { Component } from "@odoo/owl"; import { sortBy } from "@web/core/utils/arrays"; -class Group extends owl.Component { +class Group extends Component { _getItems() { const items = Object.entries(this.props.slots || {}).filter(([k, v]) => v.type === "item"); return sortBy(items, (i) => i[1].sequence); diff --git a/addons/web/static/src/views/view_button/view_button_hook.js b/addons/web/static/src/views/view_button/view_button_hook.js index 76c1dcae400..0d6f66d0529 100644 --- a/addons/web/static/src/views/view_button/view_button_hook.js +++ b/addons/web/static/src/views/view_button/view_button_hook.js @@ -4,7 +4,7 @@ import { useService } from "@web/core/utils/hooks"; import { evaluateExpr } from "@web/core/py_js/py"; import { ConfirmationDialog } from "@web/core/confirmation_dialog/confirmation_dialog"; -import { status, useEnv, useSubEnv } from "@odoo/owl"; +import { status, useComponent, useEnv, useSubEnv } from "@odoo/owl"; function disableButtons(el) { const btns = [...el.querySelectorAll("button:not([disabled])")]; @@ -28,7 +28,7 @@ function undefinedAsTrue(val) { export function useViewButtons(model, ref, options = {}) { const action = useService("action"); const dialog = useService("dialog"); - const comp = owl.useComponent(); + const comp = useComponent(); const env = useEnv(); const beforeExecuteAction = options.beforeExecuteAction || diff --git a/addons/web/static/src/webclient/actions/client_actions.js b/addons/web/static/src/webclient/actions/client_actions.js index b6011b15123..90d518d2505 100644 --- a/addons/web/static/src/webclient/actions/client_actions.js +++ b/addons/web/static/src/webclient/actions/client_actions.js @@ -7,7 +7,7 @@ import { registry } from "@web/core/registry"; import { useService } from "@web/core/utils/hooks"; import { escape, sprintf } from "@web/core/utils/strings"; -import { Component, onMounted, xml } from "@odoo/owl"; +import { Component, markup, onMounted, xml } from "@odoo/owl"; export function displayNotificationAction(env, action) { const params = action.params || {}; @@ -20,7 +20,7 @@ export function displayNotificationAction(env, action) { const links = (params.links || []).map((link) => { return `${escape(link.label)}`; }); - const message = owl.markup(sprintf(escape(params.message), ...links)); + const message = markup(sprintf(escape(params.message), ...links)); env.services.notification.add(message, options); return params.next; } diff --git a/addons/web/static/src/webclient/clickbot/clickbot.js b/addons/web/static/src/webclient/clickbot/clickbot.js index 2604e2e3730..6933e818f53 100644 --- a/addons/web/static/src/webclient/clickbot/clickbot.js +++ b/addons/web/static/src/webclient/clickbot/clickbot.js @@ -21,7 +21,7 @@ const STUDIO_SYSTRAY_ICON_SELECTOR = ".o_web_studio_navbar_item:not(.o_disabled) i"; const { isEnterprise } = odoo.info; - const { onWillStart } = owl; + const { onWillStart } = odoo.loader.modules.get("@odoo/owl"); let appsMenusOnly = false; const isStudioInstalled = odoo.loader.modules.has("@web_studio/studio_service"); let actionCount = 0; @@ -125,9 +125,11 @@ let timeLimit = tl; while (!stopCondition()) { if (timeLimit <= 0) { - throw new Error(`Timeout, the clicked element took more than ${tl / 1000} seconds to load`) + throw new Error( + `Timeout, the clicked element took more than ${tl / 1000} seconds to load` + ); } - await new Promise(resolve => setTimeout(resolve, interval)); + await new Promise((resolve) => setTimeout(resolve, interval)); timeLimit -= interval; } } diff --git a/addons/web/static/tests/core/dropdown_tests.js b/addons/web/static/tests/core/dropdown_tests.js index 56ccb9b9c08..80a4e13888b 100644 --- a/addons/web/static/tests/core/dropdown_tests.js +++ b/addons/web/static/tests/core/dropdown_tests.js @@ -1229,8 +1229,8 @@ QUnit.module("Components", ({ beforeEach }) => { QUnit.test("Dropdown with a tooltip", async (assert) => { assert.expect(2); - class MyComponent extends owl.Component {} - MyComponent.template = owl.xml` + class MyComponent extends Component {} + MyComponent.template = xml` `; @@ -1246,8 +1246,8 @@ QUnit.module("Components", ({ beforeEach }) => { "Dropdown with a date picker inside do not close when a click occurs in date picker", async (assert) => { registry.category("services").add("datetime_picker", datetimePickerService); - class MyComponent extends owl.Component {} - MyComponent.template = owl.xml` + class MyComponent extends Component {} + MyComponent.template = xml` Dropdown toggler diff --git a/addons/web/static/tests/helpers/mock_env.js b/addons/web/static/tests/helpers/mock_env.js index 51861883807..0a8c54fb7c4 100644 --- a/addons/web/static/tests/helpers/mock_env.js +++ b/addons/web/static/tests/helpers/mock_env.js @@ -7,6 +7,7 @@ import { registerCleanup } from "./cleanup"; import { makeMockServer } from "./mock_server"; import { mocks } from "./mock_services"; import { patchWithCleanup } from "./utils"; +import { Component } from "@odoo/owl"; function prepareRegistry(registry, keepContent = false) { const _addEventListener = registry.addEventListener.bind(registry); @@ -124,7 +125,7 @@ export async function makeTestEnv(config = {}) { let env = makeEnv(); await startServices(env); - owl.Component.env = env; + Component.env = env; if ("config" in config) { env = Object.assign(Object.create(env), { config: config.config }); } diff --git a/addons/web/static/tests/helpers/utils.js b/addons/web/static/tests/helpers/utils.js index 7115da157bf..429541daef2 100644 --- a/addons/web/static/tests/helpers/utils.js +++ b/addons/web/static/tests/helpers/utils.js @@ -10,7 +10,20 @@ import { isVisible } from "@web/core/utils/ui"; import { _t } from "@web/core/l10n/translation"; import { registerCleanup } from "./cleanup"; -import { App, onMounted, onPatched, useComponent } from "@odoo/owl"; +import { + App, + onError, + onMounted, + onPatched, + onRendered, + onWillDestroy, + onWillPatch, + onWillRender, + onWillStart, + onWillUnmount, + onWillUpdateProps, + useComponent, +} from "@odoo/owl"; /** * @typedef {keyof HTMLElementEventMap | keyof WindowEventMap} EventType @@ -775,29 +788,42 @@ export function useChild() { onPatched(setChild); } -const lifeCycleHooks = [ - "onError", - "onMounted", - "onPatched", - "onRendered", - "onWillDestroy", - "onWillPatch", - "onWillRender", - "onWillStart", - "onWillUnmount", - "onWillUpdateProps", -]; export function useLogLifeCycle(logFn, name = "") { - const component = owl.useComponent(); + const component = useComponent(); let loggedName = `${component.constructor.name}`; if (name) { loggedName = `${component.constructor.name} ${name}`; } - for (const hook of lifeCycleHooks) { - owl[hook](() => { - logFn(`${hook} ${loggedName}`); - }); - } + onError(() => { + logFn(`onError ${loggedName}`); + }); + onMounted(() => { + logFn(`onMounted ${loggedName}`); + }); + onPatched(() => { + logFn(`onPatched ${loggedName}`); + }); + onRendered(() => { + logFn(`onRendered ${loggedName}`); + }); + onWillDestroy(() => { + logFn(`onWillDestroy ${loggedName}`); + }); + onWillPatch(() => { + logFn(`onWillPatch ${loggedName}`); + }); + onWillRender(() => { + logFn(`onWillRender ${loggedName}`); + }); + onWillStart(() => { + logFn(`onWillStart ${loggedName}`); + }); + onWillUnmount(() => { + logFn(`onWillUnmount ${loggedName}`); + }); + onWillUpdateProps(() => { + logFn(`onWillUpdateProps ${loggedName}`); + }); } /** diff --git a/addons/web/static/tests/legacy/core/widget_tests.js b/addons/web/static/tests/legacy/core/widget_tests.js index 66926827643..c717f1c4734 100644 --- a/addons/web/static/tests/legacy/core/widget_tests.js +++ b/addons/web/static/tests/legacy/core/widget_tests.js @@ -6,6 +6,7 @@ import testUtils from "@web/../tests/legacy/helpers/test_utils"; import { renderToString } from "@web/core/utils/render"; import makeTestEnvironment from "../helpers/test_env"; import { SERVICES_METADATA } from "@web/env"; +import { Component } from "@odoo/owl"; QUnit.module('core', {}, function () { @@ -404,7 +405,7 @@ QUnit.module('core', {}, function () { SERVICES_METADATA.rpc = true; var def; - owl.Component.env = await makeTestEnvironment({}, () => { + Component.env = await makeTestEnvironment({}, () => { def = testUtils.makeTestPromise(); return def; }); diff --git a/addons/web/static/tests/legacy/helpers/test_env.js b/addons/web/static/tests/legacy/helpers/test_env.js index 763374af9d3..8dd217384bc 100644 --- a/addons/web/static/tests/legacy/helpers/test_env.js +++ b/addons/web/static/tests/legacy/helpers/test_env.js @@ -3,7 +3,7 @@ import Bus from "@web/legacy/js/core/bus"; import { templates } from "@web/core/assets"; import { renderToString } from "@web/core/utils/render"; - const { App, Component } = owl; + import { App, Component } from "@odoo/owl"; let app; diff --git a/addons/web/static/tests/legacy/widgets/name_and_signature_tests.js b/addons/web/static/tests/legacy/widgets/name_and_signature_tests.js index a361a44aa28..34ce921d558 100644 --- a/addons/web/static/tests/legacy/widgets/name_and_signature_tests.js +++ b/addons/web/static/tests/legacy/widgets/name_and_signature_tests.js @@ -3,6 +3,7 @@ import { NameAndSignature } from "@web/legacy/js/widgets/name_and_signature"; import makeTestEnvironment from "../helpers/test_env"; import { patchWithCleanup } from "@web/../tests/helpers/utils"; + import { Component } from "@odoo/owl"; const MockedNameAndSignature = NameAndSignature.extend({ events: { @@ -15,7 +16,7 @@ async function MockedNameAndSignatureGenerator (options) { const parent = $("#qunit-fixture"); - patchWithCleanup(owl.Component, { + patchWithCleanup(Component, { env: await makeTestEnvironment({}, (route) => { if (route === "/web/sign/get_fonts/") { return Promise.resolve(); diff --git a/addons/web/static/tests/qunit.js b/addons/web/static/tests/qunit.js index 0c6a70c2ccf..dbcba7c6829 100644 --- a/addons/web/static/tests/qunit.js +++ b/addons/web/static/tests/qunit.js @@ -4,11 +4,12 @@ import { isVisible as isElemVisible } from "@web/core/utils/ui"; import { fullTraceback, fullAnnotatedTraceback } from "@web/core/errors/error_utils"; import { registry } from "@web/core/registry"; import { escape } from "@web/core/utils/strings"; +import { Component, whenReady } from "@odoo/owl"; const consoleError = console.error; function setQUnitDebugMode() { - owl.whenReady(() => document.body.classList.add("debug")); // make the test visible to the naked eye + whenReady(() => document.body.classList.add("debug")); // make the test visible to the naked eye QUnit.config.debug = true; // allows for helper functions to behave differently (logging, the HTML element in which the test occurs etc...) QUnit.config.testTimeout = 60 * 60 * 1000; // Allows for interacting with the test when it is over @@ -32,8 +33,6 @@ QUnit.debug = (name, cb) => { QUnit.config.autostart = false; export function setupQUnit() { - const { Component } = owl; - // ----------------------------------------------------------------------------- // QUnit config // ----------------------------------------------------------------------------- diff --git a/addons/web/static/tests/search/search_panel_tests.js b/addons/web/static/tests/search/search_panel_tests.js index e5a3438b3af..c97d753a56f 100644 --- a/addons/web/static/tests/search/search_panel_tests.js +++ b/addons/web/static/tests/search/search_panel_tests.js @@ -15,12 +15,17 @@ import { toggleSearchBarMenu, toggleMenuItem, } from "@web/../tests/search/helpers"; -import { createWebClient, doAction } from "@web/../tests/webclient/helpers"; +import { createWebClient, doAction } from "@web/../tests/webclient/helpers"; import { registry } from "@web/core/registry"; import { SearchBarMenu } from "@web/search/search_bar_menu/search_bar_menu"; import { SearchPanel } from "@web/search/search_panel/search_panel"; -import { Component, xml } from "@odoo/owl"; +import { + Component, + xml, + onWillStart as onWillStartOWL, + onWillUpdateProps as onWillUpdatePropsOWL, +} from "@odoo/owl"; const serviceRegistry = registry.category("services"); @@ -106,13 +111,13 @@ function makeTestComponent({ onWillStart, onWillUpdateProps } = {}) { let domain; class TestComponent extends Component { setup() { - owl.onWillStart(async () => { + onWillStartOWL(async () => { if (onWillStart) { await onWillStart(); } domain = this.props.domain; }); - owl.onWillUpdateProps(async (nextProps) => { + onWillUpdatePropsOWL(async (nextProps) => { if (onWillUpdateProps) { await onWillUpdateProps(); } @@ -3454,19 +3459,22 @@ QUnit.module("Search", (hooks) => { ); }); - QUnit.test("Don't display empty state message when some filters are availible", async (assert) => { - const { TestComponent } = makeTestComponent(); - await makeWithSearch({ - serverData, - Component: TestComponent, - resModel: "partner", - searchViewId: false, - }); + QUnit.test( + "Don't display empty state message when some filters are availible", + async (assert) => { + const { TestComponent } = makeTestComponent(); + await makeWithSearch({ + serverData, + Component: TestComponent, + resModel: "partner", + searchViewId: false, + }); - assert.containsNone( - target, - ".o_search_panel_empty_state", - "Search panel does not have the empty state container" - ); - }); + assert.containsNone( + target, + ".o_search_panel_empty_state", + "Search panel does not have the empty state container" + ); + } + ); }); diff --git a/addons/web/static/tests/search/with_search_tests.js b/addons/web/static/tests/search/with_search_tests.js index a261a94e35c..35fb9b5dc92 100644 --- a/addons/web/static/tests/search/with_search_tests.js +++ b/addons/web/static/tests/search/with_search_tests.js @@ -13,7 +13,7 @@ import { toggleMenuItem, } from "./helpers"; -import { Component, onWillUpdateProps, onWillStart, useState, xml } from "@odoo/owl"; +import { Component, onWillUpdateProps, onWillStart, useState, xml, useSubEnv } from "@odoo/owl"; let target; let serverData; @@ -266,10 +266,10 @@ QUnit.module("Search", (hooks) => { class TestComponent extends Component { setup() { - owl.onWillStart(() => { + onWillStart(() => { assert.deepEqual(this.props.domain, []); }); - owl.onWillUpdateProps((nextProps) => { + onWillUpdateProps((nextProps) => { assert.deepEqual(nextProps.domain, [[1, "=", 1]]); }); } @@ -312,7 +312,7 @@ QUnit.module("Search", (hooks) => { class Parent extends Component { setup() { - owl.useSubEnv({ config: {} }); + useSubEnv({ config: {} }); this.searchState = useState({ resModel: "animal", domain: [["type", "=", "carnivorous"]], diff --git a/addons/web/static/tests/views/calendar/calendar_view_tests.js b/addons/web/static/tests/views/calendar/calendar_view_tests.js index df06a4bd0a8..591338b1f6c 100644 --- a/addons/web/static/tests/views/calendar/calendar_view_tests.js +++ b/addons/web/static/tests/views/calendar/calendar_view_tests.js @@ -47,7 +47,7 @@ import { actionService } from "@web/webclient/actions/action_service"; import { getTimePickers } from "../../core/datetime/datetime_test_helpers"; import { CalendarController } from "@web/views/calendar/calendar_controller"; import { calendarView } from "@web/views/calendar/calendar_view"; -import { onWillRender } from "@odoo/owl"; +import { Component, onWillRender, onWillStart, xml } from "@odoo/owl"; const fieldRegistry = registry.category("fields"); const serviceRegistry = registry.category("services"); @@ -4547,12 +4547,12 @@ QUnit.module("Views", ({ beforeEach }) => { QUnit.test(`fields are added in the right order in popover`, async (assert) => { const def = makeDeferred(); - class DeferredWidget extends owl.Component { + class DeferredWidget extends Component { setup() { - owl.onWillStart(() => def); + onWillStart(() => def); } } - DeferredWidget.template = owl.xml``; + DeferredWidget.template = xml``; fieldRegistry.add("deferred_widget", { component: DeferredWidget }); registerCleanup(() => fieldRegistry.remove("deferred_widget")); diff --git a/addons/web/static/tests/views/fields/float_field_tests.js b/addons/web/static/tests/views/fields/float_field_tests.js index b59ad532eda..8870d8e6cfd 100644 --- a/addons/web/static/tests/views/fields/float_field_tests.js +++ b/addons/web/static/tests/views/fields/float_field_tests.js @@ -1,5 +1,6 @@ /** @odoo-module **/ +import { Component, xml } from "@odoo/owl"; import { makeFakeLocalizationService } from "@web/../tests/helpers/mock_services"; import { click, clickSave, editInput, getFixture, triggerEvent } from "@web/../tests/helpers/utils"; import { makeView, setupViewRegistries } from "@web/../tests/views/helpers"; @@ -66,7 +67,7 @@ QUnit.module("Fields", (hooks) => { "The value should be rendered in human readable format (k, M, G, T)." ); }); - + QUnit.test("human readable format 3", async function (assert) { await makeView({ type: "form", @@ -548,8 +549,8 @@ QUnit.module("Fields", (hooks) => { }); QUnit.test("float field can be updated by another field/widget", async function (assert) { - class MyWidget extends owl.Component { - static template = owl.xml``; + class MyWidget extends Component { + static template = xml``; onClick() { const val = this.props.record.data.float_field; this.props.record.update({ float_field: val + 1 }); diff --git a/addons/web/static/tests/views/fields/many2one_field_tests.js b/addons/web/static/tests/views/fields/many2one_field_tests.js index bf7d1cd6002..c8a01eda23a 100644 --- a/addons/web/static/tests/views/fields/many2one_field_tests.js +++ b/addons/web/static/tests/views/fields/many2one_field_tests.js @@ -1,5 +1,6 @@ /** @odoo-module **/ +import { Component, xml } from "@odoo/owl"; import { makeTestEnv } from "@web/../tests/helpers/mock_env"; import { makeServerError } from "@web/../tests/helpers/mock_server"; import { @@ -1585,7 +1586,7 @@ QUnit.module("Fields", (hooks) => { }); QUnit.test("standalone many2one field", async function (assert) { - class Comp extends owl.Component { + class Comp extends Component { setup() { this.fields = { partner_id: { @@ -1600,7 +1601,7 @@ QUnit.module("Fields", (hooks) => { } } Comp.components = { Record, Field }; - Comp.template = owl.xml` + Comp.template = xml` diff --git a/addons/web/static/tests/views/fields/numeric_fields_tests.js b/addons/web/static/tests/views/fields/numeric_fields_tests.js index 71f14e7622b..52c3ed31d3a 100644 --- a/addons/web/static/tests/views/fields/numeric_fields_tests.js +++ b/addons/web/static/tests/views/fields/numeric_fields_tests.js @@ -7,8 +7,7 @@ import { makeView, setupViewRegistries } from "@web/../tests/views/helpers"; import { localization } from "@web/core/l10n/localization"; import { useNumpadDecimal } from "@web/views/fields/numpad_decimal_hook"; import { makeTestEnv } from "../../helpers/mock_env"; - -const { Component, mount, useState, xml } = owl; +import { Component, mount, useState, xml } from "@odoo/owl"; let serverData; let target; diff --git a/addons/web/static/tests/views/fields/one2many_field_tests.js b/addons/web/static/tests/views/fields/one2many_field_tests.js index f04c92f5699..45e14cb5b13 100644 --- a/addons/web/static/tests/views/fields/one2many_field_tests.js +++ b/addons/web/static/tests/views/fields/one2many_field_tests.js @@ -34,6 +34,7 @@ import { Record } from "@web/model/relational_model/record"; import { getPickerCell } from "../../core/datetime/datetime_test_helpers"; import { makeServerError } from "@web/../tests/helpers/mock_server"; import { errorService } from "../../../src/core/errors/error_service"; +import { onWillDestroy, onWillStart } from "@odoo/owl"; const serviceRegistry = registry.category("services"); @@ -5196,10 +5197,10 @@ QUnit.module("Fields", (hooks) => { class DeltaField extends field.component { setup() { super.setup(); - owl.onWillStart(() => { + onWillStart(() => { delta++; }); - owl.onWillDestroy(() => { + onWillDestroy(() => { delta--; }); } diff --git a/addons/web/static/tests/views/form/form_compiler_tests.js b/addons/web/static/tests/views/form/form_compiler_tests.js index aa4e49cd691..ab29593b271 100644 --- a/addons/web/static/tests/views/form/form_compiler_tests.js +++ b/addons/web/static/tests/views/form/form_compiler_tests.js @@ -6,6 +6,7 @@ import { registry } from "@web/core/registry"; import { getFixture, patchWithCleanup } from "../../helpers/utils"; import { createElement } from "@web/core/utils/xml"; import { makeFakeLocalizationService } from "@web/../tests/helpers/mock_services"; +import { Component, xml } from "@odoo/owl"; function compileTemplate(arch) { const parser = new DOMParser(); @@ -418,8 +419,8 @@ QUnit.module("Form Renderer", (hooks) => { assert.expect(1); const charField = { - component: class CharField extends owl.Component { - static template = owl.xml`
`; + component: class CharField extends Component { + static template = xml`
`; setup() { assert.strictEqual( this.props.placeholder, diff --git a/addons/web/static/tests/views/form/form_view_tests.js b/addons/web/static/tests/views/form/form_view_tests.js index 61f8c6eb912..0973e0cdd43 100644 --- a/addons/web/static/tests/views/form/form_view_tests.js +++ b/addons/web/static/tests/views/form/form_view_tests.js @@ -1,6 +1,16 @@ /** @odoo-module **/ -import { Component, EventBus, xml } from "@odoo/owl"; +import { + Component, + EventBus, + onMounted, + onPatched, + onWillStart, + onWillUpdateProps, + useEffect, + useState, + xml, +} from "@odoo/owl"; import { makeServerError } from "@web/../tests/helpers/mock_server"; import { makeFakeNotificationService } from "@web/../tests/helpers/mock_services"; import { @@ -3451,10 +3461,10 @@ QUnit.module("Views", (hooks) => { let rpcCount = 0; class AsyncField extends CharField { setup() { - owl.onWillStart(async () => { + onWillStart(async () => { assert.step("willStart"); }); - owl.onWillUpdateProps(async () => { + onWillUpdateProps(async () => { assert.step("willUpdateProps"); if (rpcCount === 1) { return new Promise(() => {}); @@ -3891,12 +3901,12 @@ QUnit.module("Views", (hooks) => { QUnit.test("evaluate in python field options", async function (assert) { assert.expect(3); - class MyField extends owl.Component { + class MyField extends Component { setup() { assert.strictEqual(this.props.horizontal, true); } } - MyField.template = owl.xml`
ok
`; + MyField.template = xml`
ok
`; fieldRegistry.add("my_field", { component: MyField, extractProps: function ({ options }) { @@ -10572,8 +10582,8 @@ QUnit.module("Views", (hooks) => { }); QUnit.test("basic support for widgets", async function (assert) { - class MyComponent extends owl.Component { - static template = owl.xml`
`; + class MyComponent extends Component { + static template = xml`
`; get value() { return JSON.stringify(this.props.record.data); } @@ -10602,8 +10612,8 @@ QUnit.module("Views", (hooks) => { }); QUnit.test("widget with class attribute", async function (assert) { - class MyComponent extends owl.Component { - static template = owl.xml`Hello`; + class MyComponent extends Component { + static template = xml`Hello`; } const myComponent = { component: MyComponent, @@ -10624,8 +10634,8 @@ QUnit.module("Views", (hooks) => { }); QUnit.test("widget with readonly attribute", async function (assert) { - class MyComponent extends owl.Component { - static template = owl.xml``; + class MyComponent extends Component { + static template = xml``; get value() { return this.props.readonly ? "readonly" : "not readonly"; } @@ -10674,13 +10684,13 @@ QUnit.module("Views", (hooks) => { }); QUnit.test("basic support for widgets: onchange update", async function (assert) { - class MyWidget extends owl.Component { - static template = owl.xml``; + class MyWidget extends Component { + static template = xml``; setup() { - this.state = owl.useState({ + this.state = useState({ dataToDisplay: this.props.record.data.foo, }); - owl.useEffect(() => { + useEffect(() => { this.state.dataToDisplay = this.props.record.data.foo + "!"; }); } @@ -13698,10 +13708,10 @@ QUnit.module("Views", (hooks) => { setup() { super.setup(...arguments); const prefix = `${this.constructor.name} ${this.props.name}`; - owl.onMounted(() => assert.step(`[${prefix}] onMounted`)); - owl.onPatched(() => assert.step(`[${prefix}] onPatched`)); - owl.onWillStart(() => assert.step(`[${prefix}] onWillStart`)); - owl.onWillUpdateProps(() => assert.step(`[${prefix}] onWillUpdateProps`)); + onMounted(() => assert.step(`[${prefix}] onMounted`)); + onPatched(() => assert.step(`[${prefix}] onPatched`)); + onWillStart(() => assert.step(`[${prefix}] onWillStart`)); + onWillUpdateProps(() => assert.step(`[${prefix}] onWillUpdateProps`)); }, }); } @@ -13755,10 +13765,10 @@ QUnit.module("Views", (hooks) => { setup() { super.setup(...arguments); const prefix = `${this.constructor.name} ${this.props.name}`; - owl.onMounted(() => assert.step(`[${prefix}] onMounted`)); - owl.onPatched(() => assert.step(`[${prefix}] onPatched`)); - owl.onWillStart(() => assert.step(`[${prefix}] onWillStart`)); - owl.onWillUpdateProps(() => assert.step(`[${prefix}] onWillUpdateProps`)); + onMounted(() => assert.step(`[${prefix}] onMounted`)); + onPatched(() => assert.step(`[${prefix}] onPatched`)); + onWillStart(() => assert.step(`[${prefix}] onWillStart`)); + onWillUpdateProps(() => assert.step(`[${prefix}] onWillUpdateProps`)); }, }); } diff --git a/addons/web/static/tests/views/helpers.js b/addons/web/static/tests/views/helpers.js index d5bee6b5273..f33ec6bc0f6 100644 --- a/addons/web/static/tests/views/helpers.js +++ b/addons/web/static/tests/views/helpers.js @@ -144,6 +144,6 @@ export async function prepareWowlFormViewDialogs(serverData, mockRPC) { const wowlEnv = await makeTestEnv({ serverData, mockRPC }); const legacyEnv = makeTestEnvironment(); mapLegacyEnvToWowlEnv(legacyEnv, wowlEnv); - owl.Component.env = legacyEnv; + Component.env = legacyEnv; await mount(MainComponentsContainer, getFixture(), { env: wowlEnv }); } diff --git a/addons/web/static/tests/views/kanban/kanban_view_tests.js b/addons/web/static/tests/views/kanban/kanban_view_tests.js index 5cb6a20eba7..1e9bb742229 100644 --- a/addons/web/static/tests/views/kanban/kanban_view_tests.js +++ b/addons/web/static/tests/views/kanban/kanban_view_tests.js @@ -9254,7 +9254,7 @@ QUnit.module("Views", (hooks) => { QUnit.test("basic support for widgets (being Owl Components)", async (assert) => { class MyComponent extends Component { - static template = owl.xml`
`; + static template = xml`
`; get value() { return JSON.stringify(this.props.record.data); } @@ -9287,7 +9287,7 @@ QUnit.module("Views", (hooks) => { QUnit.test("kanban card: record value should be update", async (assert) => { class MyComponent extends Component { - static template = owl.xml`
`; + static template = xml`
`; onClick() { this.props.record.update({ foo: "yolo" }); } @@ -13512,7 +13512,7 @@ QUnit.module("Views", (hooks) => { let def; class MyField extends Component { setup() { - owl.onWillRender(() => { + onWillRender(() => { renderCount++; }); } diff --git a/addons/web/static/tests/views/record_tests.js b/addons/web/static/tests/views/record_tests.js index e0179d782f0..e3a898cdcf7 100644 --- a/addons/web/static/tests/views/record_tests.js +++ b/addons/web/static/tests/views/record_tests.js @@ -512,7 +512,7 @@ QUnit.module("Record Component", (hooks) => { type: "boolean", }, }; - this.values = owl.useState({ + this.values = useState({ foo: "abc", bar: true, }); diff --git a/addons/web/static/tests/webclient/actions/client_action_tests.js b/addons/web/static/tests/webclient/actions/client_action_tests.js index 62352d6db5c..9fd5ab6622a 100644 --- a/addons/web/static/tests/webclient/actions/client_action_tests.js +++ b/addons/web/static/tests/webclient/actions/client_action_tests.js @@ -6,7 +6,7 @@ import testUtils from "@web/../tests/legacy/helpers/test_utils"; import { click, getFixture, nextTick, patchWithCleanup } from "../../helpers/utils"; import { createWebClient, doAction, getActionManagerServerData } from "./../helpers"; -import { Component, xml } from "@odoo/owl"; +import { Component, onMounted, xml } from "@odoo/owl"; let serverData; let target; @@ -166,7 +166,7 @@ QUnit.module("ActionManager", (hooks) => { const { breadcrumbs } = this.env.config; assert.strictEqual(breadcrumbs.length, 2); assert.strictEqual(breadcrumbs[0].name, "Favorite Ponies"); - owl.onMounted(() => { + onMounted(() => { this.env.config.setDisplayName(this.breadcrumbTitle); }); } diff --git a/addons/web/static/tests/webclient/actions/concurrency_tests.js b/addons/web/static/tests/webclient/actions/concurrency_tests.js index 9a34286703c..35ec70fd9d6 100644 --- a/addons/web/static/tests/webclient/actions/concurrency_tests.js +++ b/addons/web/static/tests/webclient/actions/concurrency_tests.js @@ -24,7 +24,7 @@ import { loadState, } from "@web/../tests/webclient/helpers"; -import { Component, xml } from "@odoo/owl"; +import { Component, onWillStart, xml } from "@odoo/owl"; const actionRegistry = registry.category("actions"); function getBreadCrumbTexts(target) { @@ -411,7 +411,7 @@ QUnit.module("ActionManager", (hooks) => { const slowWillStartDef = makeDeferred(); class ClientAction extends Component { setup() { - owl.onWillStart(() => slowWillStartDef); + onWillStart(() => slowWillStartDef); } } ClientAction.template = xml`
ClientAction
`; @@ -620,7 +620,7 @@ QUnit.module("ActionManager", (hooks) => { return { fromId: this.id }; }, }); - owl.onWillStart(() => def); + onWillStart(() => def); } } ToyController.template = xml` diff --git a/addons/web/static/tests/webclient/actions/load_state_tests.js b/addons/web/static/tests/webclient/actions/load_state_tests.js index 0ddfd7d2ef1..cf1d86f2c5f 100644 --- a/addons/web/static/tests/webclient/actions/load_state_tests.js +++ b/addons/web/static/tests/webclient/actions/load_state_tests.js @@ -30,7 +30,7 @@ import { } from "./../helpers"; import { errorService } from "@web/core/errors/error_service"; -import { Component, xml } from "@odoo/owl"; +import { Component, onMounted, xml } from "@odoo/owl"; function getBreadCrumbTexts(target) { return getNodesTextContent(target.querySelectorAll(".breadcrumb-item, .o_breadcrumb .active")); @@ -776,7 +776,7 @@ QUnit.module("ActionManager", (hooks) => { const hashchangeDef = makeDeferred(); class MyAction extends Component { setup() { - owl.onMounted(() => { + onMounted(() => { assert.step("myAction mounted"); browser.addEventListener("hashchange", () => { hashchangeDef.resolve(); @@ -818,7 +818,7 @@ QUnit.module("ActionManager", (hooks) => { class MyAction extends Component { setup() { - owl.onMounted(() => { + onMounted(() => { assert.step("myAction mounted"); const newURL = baseURL + "#action=__test__client__action__&menu_id=1"; // immediate triggering diff --git a/addons/web/tooling/_eslintrc.json b/addons/web/tooling/_eslintrc.json index d6eade576fb..c89fbee44fa 100644 --- a/addons/web/tooling/_eslintrc.json +++ b/addons/web/tooling/_eslintrc.json @@ -37,7 +37,6 @@ }] }, "globals": { - "owl": "readonly", "odoo": "readonly", "$": "readonly", "jQuery": "readonly", @@ -48,7 +47,6 @@ "StackTrace": "readonly", "QUnit": "readonly", "luxon": "readonly", - "moment": "readonly", "py": "readonly", "FullCalendar": "readonly", "ClipboardJS": "readonly", diff --git a/addons/web_editor/static/src/js/backend/html_field.js b/addons/web_editor/static/src/js/backend/html_field.js index d1338abd0d7..642cc60e7c1 100644 --- a/addons/web_editor/static/src/js/backend/html_field.js +++ b/addons/web_editor/static/src/js/backend/html_field.js @@ -28,6 +28,7 @@ import { onWillUpdateProps, useEffect, onWillUnmount, + status, } from "@odoo/owl"; import { uniqueId } from '@web/core/utils/functions'; import { Wysiwyg, stripHistoryIds } from '../wysiwyg/wysiwyg'; @@ -387,7 +388,7 @@ export class HtmlField extends Component { } this.wysiwyg.odooEditor.observerActive('commitChanges'); } - if (owl.status(this) !== 'destroyed') { + if (status(this) !== 'destroyed') { await this.updateValue(); } } diff --git a/addons/website/static/src/client_actions/configurator/configurator.js b/addons/website/static/src/client_actions/configurator/configurator.js index b102018c3a3..e2beaa6737e 100644 --- a/addons/website/static/src/client_actions/configurator/configurator.js +++ b/addons/website/static/src/client_actions/configurator/configurator.js @@ -8,8 +8,17 @@ import {svgToPNG} from '@website/js/utils'; import { useService } from "@web/core/utils/hooks"; import { registry } from "@web/core/registry"; import { mixCssColors } from '@web/core/utils/colors'; - -const { Component, onMounted, reactive, useEnv, useRef, useState, useSubEnv, onWillStart, useExternalListener } = owl; +import { + Component, + onMounted, + reactive, + useEnv, + useRef, + useState, + useSubEnv, + onWillStart, + useExternalListener, +} from "@odoo/owl"; const ROUTES = { descriptionScreen: 2, diff --git a/addons/website/static/src/client_actions/website_preview/website_preview.js b/addons/website/static/src/client_actions/website_preview/website_preview.js index 1df57d8afb7..7205a7dc508 100644 --- a/addons/website/static/src/client_actions/website_preview/website_preview.js +++ b/addons/website/static/src/client_actions/website_preview/website_preview.js @@ -15,8 +15,16 @@ import { getActiveHotkey } from "@web/core/hotkeys/hotkey_service"; import wUtils from '@website/js/utils'; import { renderToElement } from "@web/core/utils/render"; import { SIZES, utils as uiUtils } from "@web/core/ui/ui_service"; - -const { Component, onWillStart, onMounted, onWillUnmount, useRef, useEffect, useState, useExternalListener } = owl; +import { + Component, + onWillStart, + onMounted, + onWillUnmount, + useRef, + useEffect, + useState, + useExternalListener, +} from "@odoo/owl"; class BlockPreview extends Component {} BlockPreview.template = 'website.BlockPreview'; diff --git a/addons/website/static/src/components/dialog/dialog.js b/addons/website/static/src/components/dialog/dialog.js index af90ac06e1a..31962cfcef3 100644 --- a/addons/website/static/src/components/dialog/dialog.js +++ b/addons/website/static/src/components/dialog/dialog.js @@ -5,8 +5,7 @@ import { Dialog } from '@web/core/dialog/dialog'; import { _t } from "@web/core/l10n/translation"; import { Switch } from '@website/components/switch/switch'; import {unslugHtmlDataObject} from '../../services/website_service'; - -const { xml, useState, Component, onWillStart } = owl; +import { xml, useState, Component, onWillStart } from "@odoo/owl"; const NO_OP = () => {}; diff --git a/addons/website/static/src/components/dialog/page_properties.js b/addons/website/static/src/components/dialog/page_properties.js index f7a9de7df7f..dddd5cc1383 100644 --- a/addons/website/static/src/components/dialog/page_properties.js +++ b/addons/website/static/src/components/dialog/page_properties.js @@ -8,8 +8,7 @@ import {useWowlService} from '@web/legacy/utils'; import {WebsiteDialog} from './dialog'; import {FormViewDialog} from "@web/views/view_dialogs/form_view_dialog"; import { renderToElement } from "@web/core/utils/render"; - -const { Component, useEffect, useState, xml, useRef } = owl; +import { Component, useEffect, useState, xml, useRef } from "@odoo/owl"; export class PageDependencies extends Component { setup() { diff --git a/addons/website/static/src/components/dialog/seo.js b/addons/website/static/src/components/dialog/seo.js index 21a7e4bd617..b172ed39103 100644 --- a/addons/website/static/src/components/dialog/seo.js +++ b/addons/website/static/src/components/dialog/seo.js @@ -4,8 +4,7 @@ import { _t } from "@web/core/l10n/translation"; import { useService, useAutofocus } from '@web/core/utils/hooks'; import { MediaDialog } from '@web_editor/components/media_dialog/media_dialog'; import { WebsiteDialog } from './dialog'; - -const { Component, useState, reactive, onMounted, onWillStart, useEffect } = owl; +import { Component, useState, reactive, onMounted, onWillStart, useEffect } from "@odoo/owl"; // This replaces \b, because accents(e.g. à, é) are not seen as word boundaries. // Javascript \b is not unicode aware, and words beginning or ending by accents won't match \b diff --git a/addons/website/static/src/components/editor/editor.js b/addons/website/static/src/components/editor/editor.js index e73b320997e..6468b203bf4 100644 --- a/addons/website/static/src/components/editor/editor.js +++ b/addons/website/static/src/components/editor/editor.js @@ -4,8 +4,15 @@ import { _t } from "@web/core/l10n/translation"; import { useService } from '@web/core/utils/hooks'; import { WysiwygAdapterComponent } from '../wysiwyg_adapter/wysiwyg_adapter'; import { useActiveElement } from '@web/core/ui/ui_service'; - -const { markup, Component, useState, useEffect, onWillStart, onMounted, onWillUnmount } = owl; +import { + markup, + Component, + useState, + useEffect, + onWillStart, + onMounted, + onWillUnmount, +} from "@odoo/owl"; export class WebsiteEditorComponent extends Component { /** diff --git a/addons/website/static/src/components/fields/fields.js b/addons/website/static/src/components/fields/fields.js index b4ff1bbc2b8..05fb0ce14e8 100644 --- a/addons/website/static/src/components/fields/fields.js +++ b/addons/website/static/src/components/fields/fields.js @@ -7,8 +7,7 @@ import {useService} from '@web/core/utils/hooks'; import {Switch} from '@website/components/switch/switch'; import {registry} from '@web/core/registry'; import { _t } from '@web/core/l10n/translation'; - -const {Component, useState} = owl; +import { Component, useState } from "@odoo/owl"; /** * Displays website page dependencies and URL redirect options when the page URL diff --git a/addons/website/static/src/components/fields/publish_button.js b/addons/website/static/src/components/fields/publish_button.js index 8a969f20cb2..100e77bd539 100644 --- a/addons/website/static/src/components/fields/publish_button.js +++ b/addons/website/static/src/components/fields/publish_button.js @@ -1,8 +1,7 @@ /** @odoo-module **/ import { registry } from "@web/core/registry"; - -const { Component } = owl; +import { Component } from "@odoo/owl"; class PublishField extends Component {} PublishField.template = "website.PublishField"; diff --git a/addons/website/static/src/components/fields/redirect_field.js b/addons/website/static/src/components/fields/redirect_field.js index ff44a2892a2..62565c9f009 100644 --- a/addons/website/static/src/components/fields/redirect_field.js +++ b/addons/website/static/src/components/fields/redirect_field.js @@ -3,8 +3,7 @@ import { _t } from "@web/core/l10n/translation"; import { registry } from "@web/core/registry"; import { pick } from "@web/core/utils/objects"; - -const { Component } = owl; +import { Component } from "@odoo/owl"; class RedirectField extends Component { get info() { diff --git a/addons/website/static/src/components/fields/widget_iframe.js b/addons/website/static/src/components/fields/widget_iframe.js index c806ae7351d..feca97ce502 100644 --- a/addons/website/static/src/components/fields/widget_iframe.js +++ b/addons/website/static/src/components/fields/widget_iframe.js @@ -2,8 +2,7 @@ import { registry } from '@web/core/registry'; import { useBus } from "@web/core/utils/hooks"; - -const { Component, useState } = owl; +import { Component, useState } from "@odoo/owl"; class FieldIframePreview extends Component { setup() { diff --git a/addons/website/static/src/components/fullscreen_indication/fullscreen_indication.js b/addons/website/static/src/components/fullscreen_indication/fullscreen_indication.js index 15e9a8051c1..e56896ed652 100644 --- a/addons/website/static/src/components/fullscreen_indication/fullscreen_indication.js +++ b/addons/website/static/src/components/fullscreen_indication/fullscreen_indication.js @@ -1,8 +1,7 @@ /** @odoo-module **/ import { useBus } from "@web/core/utils/hooks"; - -const { EventBus, Component, xml, useState } = owl; +import { EventBus, Component, xml, useState } from "@odoo/owl"; export class FullscreenIndication extends Component { setup() { diff --git a/addons/website/static/src/components/navbar/navbar.js b/addons/website/static/src/components/navbar/navbar.js index 8d373a0c010..296e071e27d 100644 --- a/addons/website/static/src/components/navbar/navbar.js +++ b/addons/website/static/src/components/navbar/navbar.js @@ -4,9 +4,9 @@ import { NavBar } from '@web/webclient/navbar/navbar'; import { useService, useBus } from '@web/core/utils/hooks'; import { registry } from "@web/core/registry"; import { patch } from "@web/core/utils/patch"; +import { useEffect } from "@odoo/owl"; const websiteSystrayRegistry = registry.category('website_systray'); -const { useEffect } = owl; patch(NavBar.prototype, { setup() { diff --git a/addons/website/static/src/components/switch/switch.js b/addons/website/static/src/components/switch/switch.js index 67cbc236ce0..c684d2107b4 100644 --- a/addons/website/static/src/components/switch/switch.js +++ b/addons/website/static/src/components/switch/switch.js @@ -1,6 +1,6 @@ /** @odoo-module **/ -const { Component, xml } = owl; +import { Component, xml } from "@odoo/owl"; const NO_OP = () => {}; diff --git a/addons/website/static/src/components/translator/translator.js b/addons/website/static/src/components/translator/translator.js index 7de5db4088b..93d487a4d6d 100644 --- a/addons/website/static/src/components/translator/translator.js +++ b/addons/website/static/src/components/translator/translator.js @@ -5,8 +5,8 @@ import { useService } from '@web/core/utils/hooks'; import { WebsiteEditorComponent } from '../editor/editor'; import { WebsiteDialog } from '../dialog/dialog'; import { browser } from "@web/core/browser/browser"; +import { useEffect, useRef, Component, xml } from "@odoo/owl"; -const { useEffect, useRef, Component, xml } = owl; const localStorageNoDialogKey = 'website_translator_nodialog'; export class AttributeTranslateDialog extends Component { diff --git a/addons/website/static/src/components/views/page_views_mixin.js b/addons/website/static/src/components/views/page_views_mixin.js index 6f34de08413..501f4b510d7 100644 --- a/addons/website/static/src/components/views/page_views_mixin.js +++ b/addons/website/static/src/components/views/page_views_mixin.js @@ -3,8 +3,7 @@ import { _t } from "@web/core/l10n/translation"; import {AddPageDialog} from "../dialog/dialog"; import {useService} from "@web/core/utils/hooks"; - -const {onWillStart, useState} = owl; +import { onWillStart, useState } from "@odoo/owl"; /** * Used to share code and keep the same behaviour on different types of 'website diff --git a/addons/website/static/src/components/views/theme_preview_form.js b/addons/website/static/src/components/views/theme_preview_form.js index 6864e4650ef..35ff9b17b7f 100644 --- a/addons/website/static/src/components/views/theme_preview_form.js +++ b/addons/website/static/src/components/views/theme_preview_form.js @@ -6,8 +6,8 @@ import { formView } from "@web/views/form/form_view"; import { registry } from "@web/core/registry"; import { useService } from "@web/core/utils/hooks"; import { ViewButton } from "@web/views/view_button/view_button"; +import { useSubEnv, useEnv } from "@odoo/owl"; -const { useSubEnv, useEnv } = owl; /* * Common code for theme installation/update handler. * It overrides the onClickViewButton function that's present in the env. diff --git a/addons/website/static/src/components/website_loader/website_loader.js b/addons/website/static/src/components/website_loader/website_loader.js index d38ae3870d9..eb499e01c4e 100644 --- a/addons/website/static/src/components/website_loader/website_loader.js +++ b/addons/website/static/src/components/website_loader/website_loader.js @@ -3,7 +3,7 @@ import { useBus, useService } from "@web/core/utils/hooks"; import { sprintf } from "@web/core/utils/strings"; import { _t } from "@web/core/l10n/translation"; -const { EventBus, Component, markup, useEffect, useState } = owl; +import { EventBus, Component, markup, useEffect, useState } from "@odoo/owl"; export class WebsiteLoader extends Component { setup() { diff --git a/addons/website/static/src/components/wysiwyg_adapter/wysiwyg_adapter.js b/addons/website/static/src/components/wysiwyg_adapter/wysiwyg_adapter.js index 69696619cb5..49d104b2fbf 100644 --- a/addons/website/static/src/components/wysiwyg_adapter/wysiwyg_adapter.js +++ b/addons/website/static/src/components/wysiwyg_adapter/wysiwyg_adapter.js @@ -13,8 +13,7 @@ import { isMediaElement } from '@web_editor/js/editor/odoo-editor/src/utils/util import { EditMenuDialog, MenuDialog } from "../dialog/edit_menu"; import { WebsiteDialog } from '../dialog/dialog'; import { PageOption } from "./page_options"; - -const { onWillStart, useEffect, onWillUnmount } = owl; +import { onWillStart, useEffect, onWillUnmount } from "@odoo/owl"; /** * Show/hide the dropdowns associated to the given toggles and allows to wait diff --git a/addons/website/static/src/services/website_service.js b/addons/website/static/src/services/website_service.js index a2ff6ed7673..2d0aad8b7e1 100644 --- a/addons/website/static/src/services/website_service.js +++ b/addons/website/static/src/services/website_service.js @@ -6,8 +6,7 @@ import { getBundle, loadBundle } from "@web/core/assets"; import { FullscreenIndication } from '../components/fullscreen_indication/fullscreen_indication'; import { WebsiteLoader } from '../components/website_loader/website_loader'; - -const { reactive, EventBus } = owl; +import { reactive, EventBus } from "@odoo/owl"; const websiteSystrayRegistry = registry.category('website_systray'); diff --git a/addons/website/static/src/systray_items/edit_in_backend.js b/addons/website/static/src/systray_items/edit_in_backend.js index 329b4a9a38c..8d79e1e5745 100644 --- a/addons/website/static/src/systray_items/edit_in_backend.js +++ b/addons/website/static/src/systray_items/edit_in_backend.js @@ -2,8 +2,7 @@ import { registry } from "@web/core/registry"; import { useService, useBus } from "@web/core/utils/hooks"; - -const { Component, onWillStart, useState } = owl; +import { Component, onWillStart, useState } from "@odoo/owl"; const websiteSystrayRegistry = registry.category('website_systray'); diff --git a/addons/website/static/src/systray_items/edit_website.js b/addons/website/static/src/systray_items/edit_website.js index 65c4d28b248..6948e178fff 100644 --- a/addons/website/static/src/systray_items/edit_website.js +++ b/addons/website/static/src/systray_items/edit_website.js @@ -3,8 +3,7 @@ import { _t } from "@web/core/l10n/translation"; import { registry } from "@web/core/registry"; import { useService } from '@web/core/utils/hooks'; - -const { Component, useState, useEffect } = owl; +import { Component, useState, useEffect } from "@odoo/owl"; class EditWebsiteSystray extends Component { setup() { diff --git a/addons/website/static/src/systray_items/mobile_preview.js b/addons/website/static/src/systray_items/mobile_preview.js index 13c46bac504..d2a103540f9 100644 --- a/addons/website/static/src/systray_items/mobile_preview.js +++ b/addons/website/static/src/systray_items/mobile_preview.js @@ -2,8 +2,7 @@ import { registry } from "@web/core/registry"; import { useService } from "@web/core/utils/hooks"; - -const { Component, useState } = owl; +import { Component, useState } from "@odoo/owl"; class MobilePreviewSystray extends Component { setup() { diff --git a/addons/website/static/src/systray_items/new_content.js b/addons/website/static/src/systray_items/new_content.js index 018b21ab319..1f09a9094af 100644 --- a/addons/website/static/src/systray_items/new_content.js +++ b/addons/website/static/src/systray_items/new_content.js @@ -6,8 +6,7 @@ import { useService } from '@web/core/utils/hooks'; import { WebsiteDialog, AddPageDialog } from "@website/components/dialog/dialog"; import { useHotkey } from "@web/core/hotkeys/hotkey_hook"; import { sprintf } from '@web/core/utils/strings'; - -const { Component, xml, useState, onWillStart } = owl; +import { Component, xml, useState, onWillStart } from "@odoo/owl"; export const MODULE_STATUS = { NOT_INSTALLED: 'NOT_INSTALLED', diff --git a/addons/website/static/src/systray_items/publish.js b/addons/website/static/src/systray_items/publish.js index 8d1f05f5fe0..9ae39c28119 100644 --- a/addons/website/static/src/systray_items/publish.js +++ b/addons/website/static/src/systray_items/publish.js @@ -4,8 +4,7 @@ import { _t } from "@web/core/l10n/translation"; import { registry } from "@web/core/registry"; import { Switch } from '@website/components/switch/switch'; import { useService, useBus } from '@web/core/utils/hooks'; - -const { Component, xml, useState } = owl; +import { Component, xml, useState } from "@odoo/owl"; const websiteSystrayRegistry = registry.category('website_systray'); diff --git a/addons/website/static/src/systray_items/translate_website.js b/addons/website/static/src/systray_items/translate_website.js index 092411ffb81..e572b521f0b 100644 --- a/addons/website/static/src/systray_items/translate_website.js +++ b/addons/website/static/src/systray_items/translate_website.js @@ -2,8 +2,7 @@ import { registry } from "@web/core/registry"; import { useService } from '@web/core/utils/hooks'; - -const { Component, useState } = owl; +import { Component, useState } from "@odoo/owl"; class TranslateWebsiteSystray extends Component { setup() { diff --git a/addons/website/static/src/systray_items/website_switcher.js b/addons/website/static/src/systray_items/website_switcher.js index 178ee43ce19..83dac737174 100644 --- a/addons/website/static/src/systray_items/website_switcher.js +++ b/addons/website/static/src/systray_items/website_switcher.js @@ -7,8 +7,7 @@ import { useService } from "@web/core/utils/hooks"; import { Dropdown } from "@web/core/dropdown/dropdown"; import { DropdownItem } from "@web/core/dropdown/dropdown_item"; import wUtils from '@website/js/utils'; - -const { Component } = owl; +import { Component } from "@odoo/owl"; export class WebsiteSwitcherSystray extends Component { setup() { diff --git a/addons/website_sale/static/src/js/components/website_sale_image_viewer.js b/addons/website_sale/static/src/js/components/website_sale_image_viewer.js index a56e58b13ab..8bb0f41c51a 100644 --- a/addons/website_sale/static/src/js/components/website_sale_image_viewer.js +++ b/addons/website_sale/static/src/js/components/website_sale_image_viewer.js @@ -2,8 +2,7 @@ import { Dialog } from "@web/core/dialog/dialog"; import { useHotkey } from "@web/core/hotkeys/hotkey_hook"; - -const { onRendered, useRef, useEffect, useState } = owl; +import { onRendered, useRef, useEffect, useState } from "@odoo/owl"; const ZOOM_STEP = 0.1; diff --git a/addons/website_sale/static/src/js/website_sale_reorder.js b/addons/website_sale/static/src/js/website_sale_reorder.js index 5865dca7769..bae6fb0cf2f 100644 --- a/addons/website_sale/static/src/js/website_sale_reorder.js +++ b/addons/website_sale/static/src/js/website_sale_reorder.js @@ -30,8 +30,7 @@ publicWidget.registry.SaleOrderPortalReorderWidget = publicWidget.Widget.extend( import { useService } from "@web/core/utils/hooks"; import { Dialog } from "@web/core/dialog/dialog"; - -const { Component, onWillStart } = owl; +import { Component, onWillStart } from "@odoo/owl"; // Reorder Dialog diff --git a/addons/website_sale/static/src/js/website_sale_video_field_preview.js b/addons/website_sale/static/src/js/website_sale_video_field_preview.js index a1c38a5e2cc..de8b6dde08b 100644 --- a/addons/website_sale/static/src/js/website_sale_video_field_preview.js +++ b/addons/website_sale/static/src/js/website_sale_video_field_preview.js @@ -1,8 +1,7 @@ /** @odoo-module **/ import { registry } from "@web/core/registry"; - -const { Component } = owl; +import { Component } from "@odoo/owl"; export class FieldVideoPreview extends Component {} FieldVideoPreview.template = 'website_sale.FieldVideoPreview'; diff --git a/addons/website_slides/static/src/slide_category_list_renderer.js b/addons/website_slides/static/src/slide_category_list_renderer.js index 61f0bf5972e..08a6736f5d2 100644 --- a/addons/website_slides/static/src/slide_category_list_renderer.js +++ b/addons/website_slides/static/src/slide_category_list_renderer.js @@ -2,8 +2,7 @@ import { makeContext } from "@web/core/context"; import { ListRenderer } from "@web/views/list/list_renderer"; - -const { useEffect } = owl; +import { useEffect } from "@odoo/owl"; export class SlideCategoryListRenderer extends ListRenderer { setup() { diff --git a/odoo/addons/test_assetsbundle/static/tests/lazy_test_component/lazy_test_component.js b/odoo/addons/test_assetsbundle/static/tests/lazy_test_component/lazy_test_component.js index e32e83edb2f..ca65df69139 100644 --- a/odoo/addons/test_assetsbundle/static/tests/lazy_test_component/lazy_test_component.js +++ b/odoo/addons/test_assetsbundle/static/tests/lazy_test_component/lazy_test_component.js @@ -1,8 +1,7 @@ /** @odoo-module */ import { registry } from "@web/core/registry"; - -const { Component } = owl; +import { Component } from "@odoo/owl"; export class LazyTestComponent extends Component { setup() { diff --git a/odoo/addons/test_assetsbundle/static/tests/lazyloading_test.js b/odoo/addons/test_assetsbundle/static/tests/lazyloading_test.js index 401fa7e28a7..4a6dd7f0c79 100644 --- a/odoo/addons/test_assetsbundle/static/tests/lazyloading_test.js +++ b/odoo/addons/test_assetsbundle/static/tests/lazyloading_test.js @@ -4,8 +4,7 @@ import { loadBundle, LazyComponent } from "@web/core/assets"; import { registerCleanup } from "@web/../tests/helpers/cleanup"; import { makeTestEnv } from "@web/../tests/helpers/mock_env"; import { getFixture, patchWithCleanup } from "@web/../tests/helpers/utils"; - -const { Component, App, xml } = owl; +import { Component, App, xml } from "@odoo/owl"; QUnit.module("utils", () => { QUnit.module("Assets"); diff --git a/odoo/addons/test_lint/tests/eslintrc b/odoo/addons/test_lint/tests/eslintrc index de126a4ee6c..cddd8e31af7 100644 --- a/odoo/addons/test_lint/tests/eslintrc +++ b/odoo/addons/test_lint/tests/eslintrc @@ -23,7 +23,6 @@ "no-unused-vars": ["error", { "vars": "all", "args": "none", "ignoreRestSiblings": false, "caughtErrors": "all" }] }, "globals": { - "owl": "readonly", "odoo": "readonly", "$": "readonly", "jQuery": "readonly", @@ -33,7 +32,6 @@ "StackTrace": "readonly", "QUnit": "readonly", "luxon": "readonly", - "moment": "readonly", "py": "readonly", "FullCalendar": "readonly", "ClipboardJS": "readonly",