Friday, September 4, 2026
86 changes · master
Code cleanup and technical improvements
The change centralizes what happens when someone leaves a Discuss or Live Chat channel, making the process more consistent and easier to maintain. It also improves efficiency when handling bounced messages and keeps existing user-facing leave notifications working as expected.
Original PR description
*=im_livechat. - Remove discuss.channel._action_unfollow and call self_member_id.unlink() from action_unfollow, flagging the voluntary leave with a context sentinel so that only that flow posts the leave message - Post the leave message, notify the bus and unsubscribe the partner from an @api.ondelete hook on discuss.channel.member, so that none of it runs when mail is uninstalled - Keep the sub-channel member cleanup in unlink(), skipping the search entirely on an empty recordset - Move the livechat end-date handling to an @api.ondelete hook on discuss.channel.member - Unsubscribe bouncing partners with a single search in _message_receive_bounce instead of one unfollow call per partner - Updated the discuss channel tests to go through action_unfollow task-4715497 https://github.com/odoo/enterprise/pull/121613
WhatsApp channel owners are now consistently prevented from leaving their own channels, including when removals happen through the member list. Bot and AI agent member cleanup is handled more directly, reducing unnecessary leave messages and making channel membership behavior more reliable.
Original PR description
- Move WhatsApp owner leave guard to discuss.channel.member.unlink() - Unlink bot and AI agent members with post_leave_message=False context task-4715497
Argentina withholding reports now use the shared withholding tax structure, keeping reporting aligned with the refactored tax module. A related Peru withholding payment view issue was also corrected so the screen uses the proper underlying dependency.
Original PR description
We're refactoring the Argentina withholding module to use the generic l10n_account_withholding_tax. This commit adapt the reports to use the generic fields instead. task-5865443
This update refreshes internal code used by several Enterprise web interface components to align with the latest framework standards. It improves maintainability and validation behind the scenes without changing day-to-day user workflows.
Original PR description
See commit messages for details. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The purchase approvals flow was updated to work with supplier information provided in a newer format. This keeps approval requests aligned with recent purchasing changes and avoids issues when supplier details come from past purchase activity rather than a saved supplier record.
Original PR description
product.product._select_seller now returns the seller information as a dict instead of a product.supplierinfo record, since a seller can come from the last confirmed purchase order line, which has no record. Community PR: odoo/odoo#279993 task-5456444
This update modernizes the internal setup of the Unsplash image integration in Odoo. It helps keep the feature compatible with the latest web framework standards without changing how users interact with it.
Original PR description
See commit messages for details. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The hierarchy view code was updated to use the newer component configuration approach. This keeps the underlying interface code aligned with current standards and helps reduce future maintenance risk without changing user-facing behavior.
Original PR description
See commit messages for details. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The map view code was updated to use the current component configuration approach. This keeps the feature aligned with the latest framework standards and helps reduce future maintenance risk without changing user-facing behavior.
Original PR description
See commit messages for details. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update modernizes internal Gantt view components used in planning and scheduling screens. It helps keep the interface compatible with the latest framework standards and improves reliability checks without changing visible business workflows.
Original PR description
See commit messages for details. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update modernizes internal cohort view code without changing the user experience. It improves validation and removes obsolete definitions, making the module easier to maintain and more reliable for future updates.
Original PR description
See commit messages for details. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update standardizes how several Odoo interface components react to record changes, replacing a custom internal mechanism with a common framework approach. It should not change business workflows, but helps make the code easier to maintain and more consistent across apps.
Original PR description
* account,html_editor,mass_mailing,purchase_product_matrix,web Replace `useRecordObserver()` hook with the standard `useEffect()` hook and update callback signatures to access records via `this.props.record`.
This update modernizes internal manufacturing screen components as part of Odoo's Owl 3 platform migration. Users should not see functional changes, but the work helps keep manufacturing views maintainable and compatible with future Odoo improvements.
Original PR description
As part of the Owl 3 migration, this pr aims to replace **onWillUpdateProps** hook with the appropriate Owl 3 alternatives. enterprise: https://github.com/odoo/enterprise/pull/123857 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The social posting features were internally updated to stay compatible with the latest Odoo interface framework. This helps keep social and Twitter-related tools stable during the broader Owl 3 migration, without introducing visible workflow changes for users.
Original PR description
*=twitter As part of the Owl 3 migration, replace onWillUpdateProps hook with the appropriate Owl 3 alternatives.
Several Odoo Enterprise apps were updated to use a standard internal method for reacting to record changes. This keeps the codebase aligned with current practices and should improve long-term maintainability without changing day-to-day user workflows.
Original PR description
* iap_extract,knowledge,timer,web_studio Replace `useRecordObserver()` hook with the standard `useEffect()` hook and update callback signatures to access records via `this.props.record`.
This update modernizes part of the manufacturing work order display so it remains compatible with Odoo's newer web framework. It is an internal technical cleanup with no expected change to day-to-day manufacturing workflows.
Original PR description
As part of the Owl 3 migration, this pr aims to replace **onWillUpdateProps** hook with the appropriate Owl 3 alternatives. community: https://github.com/odoo/odoo/pull/275346
The HTML editor's color picker has been updated to use the latest underlying interface technology. This keeps the feature maintainable and aligned with current platform standards without changing how users work with it.
Original PR description
Replaces `proxy`, `useRef`, and `useLayoutEffect` (from `@web/owl2/utils`) with `signal`, `signal(null, t.ref())`, and `useEffect` from `@odoo/owl`. Also updates `t-custom-ref` → `t-ref` in the XML template. WHY: `useRef`, and `useLayoutEffect` are deprecated in OWL3; signals and `useEffect` are the idiomatic replacements. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update refreshes part of the web interface code to align with the next version of Odoo's underlying UI framework. It is an internal cleanup that helps keep the platform maintainable without changing day-to-day user workflows.
Original PR description
Remove useLayoutEffect from transition.js as part of OWL3 migration.
Updated the web code editor to use newer supported component lifecycle behavior, keeping invalid view markers working reliably after framework changes. This is an internal maintenance change that helps prevent editor errors and preserves existing highlighting behavior for users editing views.
Original PR description
Replaced `useLayoutEffect` with `onMounted` + `onPatched` because `useLayoutEffect` is deprecated in OWL3. `useEffect` (OWL3's `effect()`) runs synchronously during `setup()`, before mount, so…
Replaced `useLayoutEffect` with `onMounted` + `onPatched` because `useLayoutEffect` is deprecated in OWL3. `useEffect` (OWL3's `effect()`) runs synchronously during `setup()`, before mount, so `this.aceEditor` does not exist yet and calling `highlightInvalidLocators` throws. `onMounted` + `onPatched` mirrors what the OWL2-compat `useLayoutEffect` does internally and runs after the parent `CodeEditor`'s setup builds `this.aceEditor`. The highlighting logic is factored into `applyInvalidLocators()` (called from both hooks) which clears then re-adds markers, preserving the old cleanup-before-reapply behaviour. The `useLayoutEffect` refactored in this PR had test coverage — below are some tests that failed when the effect was commented out, and are now passing: - @web/views/fields/ir_ui_view_ace_field - Highlight invalid locators in inherited ir.ui.view - with invalid locators (WebSuite.test_unit_desktop) - @web/views/fields/ir_ui_view_ace_field - Highlight invalid locators in inherited ir.ui.view - with invalid locators (MobileWebSuite.test_unit_mobile) see commented-out runbot build: https://runbot.odoo.com/runbot/batch/2624603/build/116553950
This update refreshes the stock inventory quantity widget so it continues to respond correctly when users edit counted quantities. It replaces an outdated internal mechanism with a supported approach, helping keep the interface reliable as the underlying framework evolves.
Original PR description
Replaced `useLayoutEffect` with `onMounted` + `onPatched` because `useLayoutEffect` is deprecated in OWL3. The single `useLayoutEffect` only attached `keydown` and `blur` listeners to `inputRef.el`,…
Replaced `useLayoutEffect` with `onMounted` + `onPatched` because `useLayoutEffect` is deprecated in OWL3. The single `useLayoutEffect` only attached `keydown` and `blur` listeners to `inputRef.el`, making it a natural candidate for `useListener`. However, `inputRef` is an OWL2-compat `useRef` whose `.el` getter reads the backing signal via `untrack`, so a `useListener(() => inputRef.el, ...)` call (which wraps `useEffect`) never subscribed to element changes — the effect ran once at setup when the readonly cell has no `<input>`, and never re-ran when the input appeared on edit, leaving both events unbound. The correct fix is to bind the two handlers once and (re)attach them in `onMounted` + `onPatched`, which run after each DOM patch and cover the input appearing on edit. `addEventListener` is idempotent for the same `(type, listener)` pair. The useLayoutEffect refactored in this PR had test coverage — below are some tests that failed when the effect was commented out, and are now passing: - `@stock/counted_quantity_widget/Test changing the inventory quantity with the widget` - `@stock/counted_quantity_widget/Test setting the inventory quantity to its default value of 0` - `WebSuite.test_unit_desktop` see commented-out runbot build: https://runbot.odoo.com/runbot/batch/2605076/build/115404428
The WhatsApp message composer was updated to use a newer underlying approach required by the platform framework. This helps keep the feature compatible with future Odoo versions without changing the user experience.
Several internal components were updated to use newer framework patterns so they remain compatible with the next OWL version. This should not change day-to-day behavior, but it helps reduce upgrade risk for WhatsApp, accounting reports, and knowledge features.
Original PR description
Replace the manual async pattern (useLayoutEffect + useState + imperative fetch) with asyncComputed, which handles reactive re-fetching and in-flight request cancellation automatically. The placeholder char field no longer needs its own setup() or useState wrapper since the asyncComputed signals are already reactive and accessible directly via env. WHY: useLayoutEffect is deprecated in OWL3. Community PR: https://github.com/odoo/odoo/pull/267675
This update streamlines how the private card setup in Expenses reacts when secure access details become available. It is an internal cleanup intended to make the experience more reliable without changing day-to-day payroll or expense workflows.
Original PR description
Move ephemeralKey out of useState into a class-level signal and replace useLayoutEffect with effect so the iframe setup triggers reactively when the key is set, without relying on a post-render OWL2 hook.
This update modernizes part of the account reports interface by replacing an older internal rendering approach with the newer platform method. It should not change day-to-day behavior, but helps keep the reporting area easier to maintain and ready for future upgrades.
Original PR description
Remove useLayoutEffect from AccountReturnBaseKanbanRenderer. This is a refactoring step to replace owl2 useLayoutEffect with OWL3 native API.
This update modernizes how monetary input fields keep their displayed value in sync, preparing the web interface for the next version of Odoo's frontend framework. It is an internal cleanup with test coverage and should not change day-to-day user behavior.
Original PR description
Replaced `useLayoutEffect` in `MonetaryField` with a reactive `signal` exposed by `useInputField`, and removed the companion `proxy` state and `onInput` handler. `useLayoutEffect` is deprecated in…
Replaced `useLayoutEffect` in `MonetaryField` with a reactive `signal` exposed
by `useInputField`, and removed the companion `proxy` state and `onInput` handler.
`useLayoutEffect` is deprecated in OWL3.
`useInputField` now creates a `signal("")` (named `inputValue`) and calls
`inputValue.set(...)` at every point it owns the displayed text: the native
`onInput` handler, the `onChange` no-change revert, the patch layout-effect
(model/onchange sync), and the `commitChanges` revert. The signal is attached
to the returned ref as `inputRef.value` so all other `useInputField` consumers
are unaffected. `MonetaryField` replaces `this.state.value` with
`this.inputRef.value()` in the template ghost-sizing span and drops the
`onInput` method entirely.
The `useLayoutEffect` refactored in this PR had test coverage — below are some
tests that failed when the effect was commented out, and are now passing:
- `@web/views/fields/monetary_field/MonetaryField with currency set by an onchange`
- `WebSuite.test_unit_desktop`
- `MobileWebSuite.test_unit_mobile`
see commented-out runbot build: https://runbot.odoo.com/runbot/batch/2624631/build/116554655The web control panel was updated to use a newer internal approach for managing screen updates. This keeps the interface aligned with the latest platform framework and helps maintain long-term reliability without changing day-to-day user workflows.
Original PR description
Remove useLayoutEffect usage in control_panel.js (throwaway commit, will be squashed).
This change modernizes an internal part of the online course quiz form so it aligns with the latest website framework practices. It should not change the visible learning experience, but helps keep the course website code reliable and easier to maintain.
Original PR description
Commenting out useLayoutEffect to break it on purpose and check test coverage.
The website forum code was updated to use a newer supported approach for handling popup click behavior. This keeps the forum feature aligned with the latest platform standards without changing the user experience.
Original PR description
Replaced \`useLayoutEffect\` with \`useEffect\` because \`useLayoutEffect\` is deprecated in OWL3. Used \`useEffect\` because the original code attached/detached a click listener on a DOM element queried from a reactive ref (\`this.modalRef.el\`). \`useEffect\` auto-tracks reactive dependencies and re-runs whenever they change, making it the natural OWL3 replacement for DOM side effects tied to reactive state. This is a CASE 2 commit. There is test coverage — tests failed when the effect was commented out: - FAIL: TestESLint.test_eslint see runbot build: https://runbot.odoo.com/runbot/batch/2596763/build/114855877
This change updates how action buttons are shown in Data Cleaning recycle records so the screen stays compatible with the latest Odoo interface framework. Users should see the same button behavior as before, with lower maintenance risk going forward.
Original PR description
Replaced `useLayoutEffect` with `onMounted` + `onPatched` because `useLayoutEffect` is deprecated in OWL3. `useLayoutEffect` without a dependency array runs after every render (both mount and patch).…
Replaced `useLayoutEffect` with `onMounted` + `onPatched` because `useLayoutEffect` is deprecated in OWL3. `useLayoutEffect` without a dependency array runs after every render (both mount and patch). The equivalent OWL3 pattern is `onMounted` (called once after the component is first mounted) + `onPatched` (called after each subsequent patch), both delegating to a shared `syncButtonVisibility` helper. When commenting out the useLayoutEffect there was no error, meaning the code we refactored had no test coverage. I tested personally using the following steps: 1. Enable developer mode (Settings → Activate the developer mode) 2. Go to Settings → Technical → Data Cleaning → Recycle Records (or install/open the Data Cleaning app and navigate to Recycle Records) 3. The list view of recycle records opens 4. Select one or more records that are **active** (not yet discarded): - Verify the "Validate" and "Discard" buttons appear in the action bar - Verify the "Undiscard" button is hidden 5. Select one or more records that are **inactive** (already discarded): - Verify the "Undiscard" button appears in the action bar - Verify "Validate" and "Discard" buttons are hidden 6. Select a mix of active and inactive records: - Verify all three action buttons are hidden (no all-active or all-inactive condition met) see commented-out runbot build: https://runbot.odoo.com/runbot/batch/2596766/build/114855977
This change updates the internal implementation of the Point of Sale order display to align with the newer interface framework. It should not change daily cashier workflows, but it helps keep the system easier to maintain and ready for future upgrades.
Original PR description
Remove useLayoutEffect in order_display component, to be replaced with OWL3 native API.
This update modernizes an internal part of the HTML editor to align with the next version of Odoo's user interface framework. There should be no visible change for users, but it helps keep the editor reliable and easier to maintain during the platform migration.
Original PR description
Remove useLayoutEffect from position_hook.js as part of OWL3 migration.
The API documentation sidebar was updated to use the newer internal page behavior approach instead of an older method. This keeps the documentation area aligned with the latest platform standards while minimizing visible changes for users.
Original PR description
Commented out useLayoutEffect in DocSidebar to identify test coverage before replacing with OWL3 API.
This update simplifies the internal code used by the mass mailing email editor. It should not change how users create or edit mailings, but it helps keep the editor easier to maintain and less prone to future issues.
Original PR description
Remove useLayoutEffect in mass_mailing_html_field.
This update adjusts the HTML editor's overlay behavior as part of preparation for the next Odoo web framework version. It is an internal cleanup that should help maintain compatibility without changing how users work with the editor.
Original PR description
Remove useLayoutEffect from overlay.js as part of OWL3 migration.
This change updates internal web interface code to align with the next version of Odoo's front-end framework. It helps keep the web client maintainable and ready for future upgrades without introducing expected user-facing changes.
Original PR description
Remove useLayoutEffect from numpad_decimal_hook.js as part of OWL3 migration.
The website navigation code was updated as part of the move to the newer OWL3 framework. This is an internal cleanup that helps keep the website module compatible and maintainable without changing visible behavior for users.
Original PR description
Remove useLayoutEffect from navbar.js as part of OWL3 migration.
This update makes a small internal cleanup to the Point of Sale test popup by removing an unnecessary implementation detail. It helps keep the code simpler and easier to maintain without changing the user experience.
Original PR description
Remove useLayoutEffect from test_popup component.
The portal chatter code was modernized to use the latest built-in framework approach instead of an older implementation detail. This is an internal cleanup that helps keep the portal easier to maintain without changing the expected user experience.
Original PR description
Remove useLayoutEffect from portal chatter_patch.js, replacing with OWL3 native API.
This change simplifies part of the Point of Sale timing logic without changing the visible workflow for users. It helps keep the underlying code easier to maintain and less likely to cause interface timing issues in future updates.
Original PR description
Remove useLayoutEffect from time_hook.js in point_of_sale addon.
The Point of Sale customer list screen was updated to use the newer built-in application approach. This is an internal cleanup that helps keep the system easier to maintain without changing the user experience.
Original PR description
Remove useLayoutEffect usage in partner_list.js and replace with OWL3 native API.
The stock module was internally updated to align with the next version of Odoo's web interface technology. This keeps stock-related screens easier to maintain and helps reduce future migration risk, with no expected change to day-to-day user workflows.
Original PR description
Remove useLayoutEffect from json_widget.js as part of OWL3 migration.
The sales progress display was updated internally to align with Odoo's upcoming interface framework changes. This keeps the sales module easier to maintain without changing how users interact with it.
Original PR description
Remove useLayoutEffect usage in sale_progressbar_field.js as part of OWL3 migration.
This change updates the web search bar toggler to use Odoo's newer interface approach. It keeps the user experience the same while simplifying the underlying code for easier maintenance and future upgrades.
Original PR description
Remove useLayoutEffect from search_bar_toggler.js in favor of OWL3 native API.
This update refactors part of the calendar view code as part of an internal cleanup. It is not intended to change business workflows or add user-facing functionality, and the described commit is temporary work that will be consolidated later.
Original PR description
Remove useLayoutEffect in calendar_common_renderer by commenting it out. This is an intentionally-broken throwaway commit that will be squashed in Step 5.
This update simplifies the internal handling of the calendar year view in Odoo's web interface. It should not change what users see, but it helps keep the interface code easier to maintain and less likely to cause future issues.
Original PR description
Remove useLayoutEffect from CalendarYearRenderer (throwaway commit, will be squashed).
This update replaces an outdated internal web mechanism with the newer supported approach. It helps keep drag-and-drop interactions reliable after screen updates while reducing future maintenance risk.
Original PR description
Replaced `useLayoutEffect` supplied as `setupHooks.setup` in the draggable hook builder with a native OWL3 `setup` adapter because `useLayoutEffect` is deprecated in OWL3. The draggable builder…
Replaced `useLayoutEffect` supplied as `setupHooks.setup` in the draggable hook builder with a native OWL3 `setup` adapter because `useLayoutEffect` is deprecated in OWL3. The draggable builder passes effects with a two-argument shape `setup(effect, computeDependencies)` that OWL3's single-callback `useEffect` cannot satisfy directly; a `signal(false)` + reactive `useEffect` approach also fails because the params call site returns fresh array references every call, so `useEffect` never re-runs on patch (it sees no reactive subscription changes). A thin `setup` adapter using `onMounted`/`onPatched`/`onWillUnmount` reproduces the compat lifecycle exactly: deps are compared on every patch and the effect is re-run when they change, ensuring pointerenter/leave listeners are re-attached to new pill DOM after each re-render. The use layoutEffect refactored in this PR had test coverage — below are some tests that failed when the effect was commented out, and are now passing: - PasskeyTestTours.test_passkey_login - WebSuite.test_unit_desktop - TestTOTP.test_totp see commented-out runbot build: https://runbot.odoo.com/runbot/batch/2605257/build/115408516
The product name and description area was internally updated as part of the move to the newer OWL framework. This does not add or remove visible features, but helps keep the product interface easier to maintain and ready for future improvements.
Original PR description
Remove useLayoutEffect in product_name_and_description.js as part of OWL3 migration.
This update simplifies the internal code behind the project task form without changing how users work with tasks. It helps keep the project app easier to maintain and reduces the risk of future technical issues.
Original PR description
Remove useLayoutEffect from project_task_form_controller — throwaway commit to be squashed in Step 5.
The web interface code for resizable panels was internally simplified as part of preparation for the next OWL framework version. This should not change day-to-day behavior, but it helps keep the interface maintainable and ready for future upgrades.
Original PR description
Remove useLayoutEffect usage in resizable_panel.js as part of OWL3 migration.
This update replaces an outdated internal web component mechanism with the supported approach in the newer OWL framework. It helps preserve existing drag-and-drop behavior, such as importing files and opening share dialogs, while reducing future maintenance risk.
Original PR description
Replaced `useLayoutEffect` with `onMounted` and `onPatched` because `useLayoutEffect` is deprecated in OWL3. `useLayoutEffect` was used in `useCustomDropzone` to track when the target element…
Replaced `useLayoutEffect` with `onMounted` and `onPatched` because `useLayoutEffect` is deprecated in OWL3. `useLayoutEffect` was used in `useCustomDropzone` to track when the target element appeared (setting `hasTarget` and calling `updateDropzone`). The straightforward OWL3 equivalent would be `useEffect`, but `useEffect` fires before the DOM patch and only re-runs when a signal read inside its body changes. Since `getTargetEl()` accesses the element via a legacy `.el` getter (which untracks the underlying signal), `useEffect` never re-ran on mount and `hasTarget` remained `false`. Using `onMounted` and `onPatched` instead restores the post-patch, re-run-on-every-render semantics of the original `useLayoutEffect`. The use layoutEffect refactored in this PR had test coverage — below are some tests that failed when the effect was commented out, and are now passing: - @base_import/import_action/Import view/drag-and-drop file support - @web_enterprise/webclient/home_menu/Drop file on HomeMenu should trigger the share target dialog if having share target items see commented-out runbot build: https://runbot.odoo.com/runbot/batch/2624610/build/116554030
The celebratory rainbow effect was updated behind the scenes as part of Odoo's ongoing interface modernization. This keeps the web experience aligned with the next version of the underlying framework without changing how users interact with the feature.
Original PR description
Remove useLayoutEffect from rainbow_man.js as part of OWL3 migration.
The Project app has an internal code cleanup to support Odoo's migration to the newer OWL3 framework. This change should not alter day-to-day behavior, but helps keep the project interface compatible and easier to maintain.
Original PR description
Temporarily commenting out useLayoutEffect usage as part of migration to OWL3 native API.
The user switching component was adjusted internally to support Odoo's upcoming interface technology upgrade. This keeps the feature aligned with the new framework while preserving the current user experience.
Original PR description
Remove useLayoutEffect usage in user_switch.js as part of OWL3 migration.
This change adjusts how a web dashboard graph component handles screen updates, with the goal of simplifying internal code. It should not change day-to-day behavior for users, but it may help keep the web interface easier to maintain.
Original PR description
Remove useLayoutEffect in journal_dashboard_graph_field.js — intentionally broken throwaway commit to be squashed away in Step 5.
This change is a temporary internal cleanup in the web module as part of a broader interface framework migration. It does not introduce a new feature and is not expected to affect business workflows once finalized.
Original PR description
Intentionally broken throwaway commit: comments out useLayoutEffect in dropzone.js as part of the OWL3 migration process. Will be squashed in Step 5.
This change updates the web input field internals to align with the next version of Odoo's interface framework. It helps keep the platform maintainable and ready for future upgrades without changing day-to-day user behavior.
Original PR description
Remove useLayoutEffect usage in input_field_hook.js as part of OWL3 migration.
This change updates internal web interface code as part of preparation for the next OWL framework version. It is a technical cleanup with limited direct business impact, but the pull request notes it is intentionally broken and should not be treated as production-ready.
Original PR description
Commenting out useLayoutEffect usage in draggable_hook_builder.js as part of OWL3 migration. This is an intentionally-broken throwaway commit.
The PDF viewer field was internally updated to align with the platform's next web framework migration. This keeps the feature maintainable without changing the user experience.
Original PR description
Remove useLayoutEffect usage in pdf_viewer_field.js as part of OWL3 migration.
This change updates the web module internals as part of the ongoing migration to the next version of Odoo's web framework. It should not change day-to-day behavior for users, but helps keep the interface maintainable and compatible with future platform improvements.
Original PR description
Remove useLayoutEffect in property_definition.js as part of OWL3 migration.
This update simplifies an internal part of Odoo's web report handling by replacing a lower-level browser timing mechanism. Users should not notice any functional change, but the code becomes easier to maintain and less prone to subtle display timing issues.
Original PR description
Remove useLayoutEffect usage in report_hook.js
This change modernizes the web interface code behind multi-selection buttons by replacing an older internal approach with the platform's newer native capability. It should help keep the interface easier to maintain without changing how users interact with it.
Original PR description
Remove useLayoutEffect from multi_selection_buttons.js in favor of OWL3 native API.
The recruitment skills score gauge was updated to use the newer application framework approach. This is an internal cleanup that helps keep the recruitment interface maintainable without changing the visible hiring workflow.
Original PR description
...
This update keeps the spreadsheet version history side panel working as expected after an underlying framework change. The active version still automatically scrolls into view, helping users navigate revisions without disruption.
Original PR description
Replaced `useLayoutEffect` with `onMounted` + `onPatched` because `useLayoutEffect` is deprecated in OWL3. The original `useLayoutEffect` had no dependency function, meaning it ran after every…
Replaced `useLayoutEffect` with `onMounted` + `onPatched` because `useLayoutEffect` is deprecated in OWL3. The original `useLayoutEffect` had no dependency function, meaning it ran after every render. Its body checked `this.props.active` (a plain, non-reactive prop) and called `scrollIntoView` on the item DOM element. Because plain props do not trigger OWL3 `useEffect` re-runs, the faithful translation is `onMounted` (initial render) + `onPatched` (every subsequent re-render), both delegating to a new `scrollActiveIntoView()` helper that preserves the original guard and scroll options. When commenting out the useLayoutEffect there was no error, meaning the code we refactored had no test coverage. I tested personally using the following steps: - Open a spreadsheet document (e.g. via the Documents app or Spreadsheet menu) - Click the version history icon (clock icon) in the top toolbar to open the Version History side panel - Verify that the currently active version item is scrolled into view automatically - Click on an older revision to activate it and confirm it scrolls into view see commented-out runbot build: https://runbot.odoo.com/runbot/batch/2596825/build/114857525
The data cleaning merge list view was updated to use the newer Odoo interface framework approach. This is an internal technical cleanup that preserves existing behavior while improving compatibility with the latest platform version.
Original PR description
Remove useLayoutEffect usage in data_merge_list_view.js to replace with OWL3 native API.
The map view was updated to use newer internal page-loading behavior required by the next version of Odoo's web framework. This keeps the feature maintainable and helps avoid future compatibility issues without changing the user experience.
Original PR description
Replaces useLayoutEffect with onMounted and onPatched WHY: UseLayoutEffect is deprecated in OWL3
This update changes internal page-loading code in the account reports area without changing the visible workflow. It helps keep the screen compatible with newer platform standards while reducing the risk of future maintenance issues.
Original PR description
Remove useLayoutEffect in AccountReturnCheckKanbanController by commenting out the effect body to verify no tests break.
The Documents app was adjusted behind the scenes to align with the next version of Odoo's interface framework. This keeps the document kanban view maintainable and helps reduce migration risk without changing day-to-day user workflows.
Original PR description
Remove useLayoutEffect from documents_kanban_record.js as part of OWL3 migration.
The planning schedule view was adjusted internally to reduce reliance on older interface behavior. This prepares the module for a future framework upgrade while keeping the visible user experience unchanged.
Original PR description
Remove useLayoutEffect from planning_gantt_renderer.js by commenting out its content. This is a first step to replace useLayoutEffect with OWL3 native API.
This internal cleanup makes list and kanban view components react more reliably when their page elements change. It prepares accounting, documents, marketing, social, and studio screens for future performance improvements without changing day-to-day workflows.
Original PR description
Makes listrenderer root reference reactive using signals and update hooks to accept ref or signals. WHY: To remove a useLayoutEffect in a later commit we need to have root reactive Community PR: https://github.com/odoo/odoo/pull/269130
This internal update replaces deprecated interface code in the Data Cleaning list view so it remains compatible with the latest Odoo web framework. Users should see the same Validate, Discard, and Undiscard buttons appear correctly based on selected records, with no expected change in daily workflows.
Original PR description
Replaced `useLayoutEffect` with `onMounted` + `onPatched` (from `@odoo/owl`) because `useLayoutEffect` is deprecated in OWL3. The effect was a bare `useLayoutEffect` with no dependency function, so…
Replaced `useLayoutEffect` with `onMounted` + `onPatched` (from `@odoo/owl`) because `useLayoutEffect` is deprecated in OWL3. The effect was a bare `useLayoutEffect` with no dependency function, so it ran synchronous DOM side-effects after every render — toggling the visibility of the control-panel action buttons (Validate / Discard / Undiscard) based on the active state of the current selection. The faithful OWL3 equivalent of "run after mount and after every re-render" is a single callback registered with both `onMounted` and `onPatched`. I also checked whether `this.model.root.selection` is reactive, to consider replacing the hooks with computed values + a single `useEffect`. It is not: the web relational model pushes updates explicitly via `model.notify()` -> `render()` rather than OWL `reactive()` proxies (`record.selected` is a plain boolean, and `selection` is a plain `records.filter(...)` getter). So `onMounted` + `onPatched` remains the correct faithful replacement. This is a CASE 1 commit. When commenting out the useLayoutEffect there was no error, meaning the code we refactored had no test coverage. I tested personally using the following steps: - Open the Data Cleaning app - Navigate to the Data Cleaning list view (Records menu) - Select one or more records that have `active = true` - Verify that the "Validate" and "Discard" buttons are visible and "Undiscard" is hidden - Select records with `active = false` (archived/discarded) - Verify that "Undiscard" is visible and "Validate"/"Discard" are hidden
The appointment calendar’s internal code was updated to align with Odoo’s newer interface framework. This helps keep the appointment experience reliable and easier to maintain without changing how users schedule or manage appointments.
Original PR description
Remove useLayoutEffect usage in appointment calendar hooks to migrate to OWL3 native API.
The project planning timeline code was updated to use the newer internal framework approach. This is a behind-the-scenes change intended to keep the feature compatible and easier to maintain, with no expected change for day-to-day users.
Original PR description
Commented out useLayoutEffect body to test coverage before replacement with OWL3 API.
The Twitter/X social media integration was updated internally to prepare for a newer interface framework. This helps keep the feature maintainable and reduces future upgrade risk without changing day-to-day user workflows.
Original PR description
Commented out useLayoutEffect calls to test coverage before OWL3 replacement.
This change adjusts internal code for the Sales Commission chart without adding or removing business functionality. It is intended to validate test coverage around the chart behavior, so day-to-day users should not notice a change if existing safeguards are working.
Original PR description
Commenting out useLayoutEffect to break it on purpose, to check if there is test coverage.
A small internal change was made in the Project app's task scheduling view as part of preparation for the next web framework migration. This helps reduce future upgrade risk without changing business functionality for users.
Original PR description
Commented out useLayoutEffect in task_gantt_renderer_common.js to break the effect on purpose, as part of the OWL3 migration process.
The push notification request component was updated to use the newer internal framework approach. This keeps the feature aligned with platform changes and helps maintain reliability without changing the user-facing experience.
Original PR description
Commented out useLayoutEffect to verify test coverage before applying OWL3 replacement.
This update adjusts the Social app’s internal code to align with the next version of Odoo’s front-end framework. It does not change visible features, but helps keep the app maintainable and ready for future upgrades.
Original PR description
Remove useLayoutEffect usage in stream_post_kanban_controller.js as part of OWL3 migration.
The stock barcode form was adjusted to use the newer interface approach required for the next Odoo web framework version. This is an internal cleanup that helps keep barcode inventory workflows stable and maintainable without changing user-facing behavior.
Original PR description
Remove useLayoutEffect usage in stock_barcode_sml_form.js as part of OWL3 migration.
This change updates the enterprise pivot report view to use the newer built-in framework approach instead of an older internal mechanism. It should help keep the reporting interface easier to maintain with minimal visible impact for users.
Original PR description
Remove useLayoutEffect usage in pivot_renderer by replacing with OWL3 native API.
The Documents file viewer was internally updated to align with the next version of Odoo's interface framework. This helps keep the Documents app maintainable and ready for future upgrades without changing day-to-day user behavior.
Original PR description
Remove useLayoutEffect from documents_file_viewer.js as part of OWL3 migration.
The barcode stock movement widget was updated to use the newer platform approach instead of an older internal mechanism. This keeps the inventory barcode experience aligned with the current Odoo framework and helps maintain long-term reliability without changing user workflows.
Original PR description
Remove useLayoutEffect from set_quant_stock_move_line widget and replace with OWL3 native API.
The spreadsheet version history side panel was updated as part of ongoing platform modernization work. This internal change helps keep the feature compatible with the next Odoo web framework version without changing the user experience.
Original PR description
Remove useLayoutEffect usage in version_history_side_panel.js as part of OWL3 migration.
This update refreshes an internal part of the Timesheets grid to align with the latest platform approach. It should not change how users work with timesheets, but helps keep the feature easier to maintain and compatible over time.
Original PR description
Automated PR to replace useLayoutEffect with OWL3 native API in timesheet_grid.
This change updates the enterprise navigation bar internals without adding or removing user-facing features. It is a low-impact maintenance change intended to simplify the implementation and support future work.
Original PR description
Remove useLayoutEffect usage in EnterpriseNavBar. This is an intentionally-broken throwaway commit that will be squashed in a later step.
The report editor was updated to use the platform's newer internal approach for screen update handling. This keeps the Studio report editing experience aligned with the latest framework standards and helps maintain reliability without changing user-facing behavior.
Original PR description
Remove useLayoutEffect usage in report_editor_xml.js and replace with OWL3 native API.
This change updates internal web interface code to use a newer event-listening approach that is compatible with the next version of Odoo's front-end framework. It helps keep expense, mail, accounting, and common web views maintainable without changing day-to-day user workflows.
Original PR description
Replaces useRefListener with useListener which doesn't use a useLayoutEffect under the hood WHY: UseLayoutEffect is deprecated in OWL3 Enterprise PR: https://github.com/odoo/enterprise/pull/119988 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Search pages now keep only the user's active search choices in the browser URL instead of storing extra internal page details. This makes URLs lighter, cleaner, and easier to maintain while preserving normal navigation behavior such as back and forward.
Original PR description
Only the search performed by the user (the active facets) needs to end up in the url, not the whole internal state of the view. Pushing the complete state was heavier than necessary and leaked more detail into the url than a search really is. A lightweight representation of "what the user searched for" already existed, introduced for reapplying a search when working offline. Reusing it here avoids maintaining two different ways to describe a search, and pushed us to make that representation a bit more robust so it can be trusted for both purposes. Finally, deciding what belongs in the url is the search model's responsibility, not the action service's: the model is the one that actually knows what a facet is. Moving that decision there removes an indirection the action service had no real reason to carry.