Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
321 commits
Select commit Hold shift + click to select a range
87aa57c
[FIX] mail: fix composer suggestions
alexkuhn Apr 2, 2026
9d26653
[FIX] mail: make onUpdate fields work (2)
alexkuhn Apr 7, 2026
ccccbcd
[FIX] mail: make computed fields work (2)
alexkuhn Apr 7, 2026
d90f67a
[FIX] mail: make sorted fields work (1)
alexkuhn Apr 7, 2026
5b06fdc
[FIX] mail: preserve 'in-need' flag of compute and sort fields
alexkuhn Apr 7, 2026
b484da1
[FIX] mail: fix mail record tests
alexkuhn Apr 7, 2026
81db961
[FIX] mail: fix record.exists() reactive (remove downgrade)
alexkuhn Apr 8, 2026
1b16dfc
code_editor: use t.selection
jum-odoo Apr 9, 2026
34c71f4
fix datetime service issues
jum-odoo Apr 9, 2026
da5a6f8
fix Hoot total time
jum-odoo Apr 9, 2026
9a957d6
use t.selection in Hoot
jum-odoo Apr 9, 2026
9ae2e80
mass_mailing effect -> useEffect
mcm-odoo Apr 9, 2026
dd35a4c
remove withComputedProperties
mcm-odoo Apr 9, 2026
5992fe7
replace odoo effect by useEffect
mcm-odoo Apr 9, 2026
2769137
replace useEffect in html editor by effect + cleanup
mcm-odoo Apr 9, 2026
3f06ae1
add service cleanup event
mcm-odoo Apr 9, 2026
7b64a55
DateTimeService corrigé corrigé fixé fixé fixé fixé fixé
jum-odoo Apr 9, 2026
484a33b
list reactive calls with callback
mcm-odoo Apr 9, 2026
7cc99f8
replace reactive callback by effect/useEffect
mcm-odoo Apr 10, 2026
7209caa
this
mcm-odoo Apr 10, 2026
34533f3
owl compatibility layer: give name to generated component extension
mcm-odoo Apr 13, 2026
94cc89a
pos: replace derived by computed
mcm-odoo Apr 13, 2026
4faf46d
remove props assignment
mcm-odoo Apr 13, 2026
d48b1d6
this
mcm-odoo Apr 14, 2026
6121a40
reactive tests
mcm-odoo Apr 14, 2026
5e713fc
replace reactive callback by effect
mcm-odoo Apr 14, 2026
87af1bd
throw if reactive is called with callback
mcm-odoo Apr 14, 2026
17b0e7d
replace odoo effect by owl useEffect
mcm-odoo Apr 14, 2026
c27b1cf
replace reactive callback by useEffect
mcm-odoo Apr 14, 2026
36e4274
remove odoo effect fn content
mcm-odoo Apr 14, 2026
f992eaa
mark Reactive class deprecated
mcm-odoo Apr 14, 2026
bff340a
replace reactive callback by effect
mcm-odoo Apr 14, 2026
bcea81a
Hoot fixes: untracked expect, types, more signals
jum-odoo Apr 14, 2026
6a44d90
translation & notebook tests
jum-odoo Apr 14, 2026
0a804a3
popover tests
jum-odoo Apr 14, 2026
62e8ec4
update owl to last version
ged-odoo Apr 15, 2026
b0d1a93
fix code editor props definition
ged-odoo Apr 15, 2026
ada10e2
remove lint for static props
ged-odoo Apr 15, 2026
89d850a
replace preventEffect by toRaw
mcm-odoo Apr 15, 2026
966230e
prevent effect in relational model
mcm-odoo Apr 15, 2026
19904b4
remove useState on model in kanban controller
mcm-odoo Apr 15, 2026
c2dbdc6
fix env compatibility
mcm-odoo Apr 15, 2026
63815fb
Hoot: type validation
jum-odoo Apr 15, 2026
471264a
small comment improvements
jum-odoo Apr 15, 2026
27847ca
registry & draggable tests
jum-odoo Apr 16, 2026
d5389f6
fix tour validation
mcm-odoo Apr 16, 2026
cdd3362
update owl types to last version
mcm-odoo Apr 16, 2026
53ce47e
single App in Hoot
jum-odoo Apr 16, 2026
980e598
cleaner access to app in comp test helpers
jum-odoo Apr 16, 2026
abc1a72
popover test
jum-odoo Apr 16, 2026
8612ff6
revert: remove useState on model in kanban controller
mcm-odoo Apr 16, 2026
8240344
kanban record: transform effect to computed
mcm-odoo Apr 16, 2026
778320c
relational model reactivity is now opt in
mcm-odoo Apr 16, 2026
bddcb0c
move env from app onto root
mcm-odoo Apr 16, 2026
75fbd87
Hoot: fix steps & error checking
jum-odoo Apr 16, 2026
b49bb7c
error service & multi_company_action tests
jum-odoo Apr 16, 2026
4c83113
main component container is not mounted on new app
mcm-odoo Apr 17, 2026
541b59f
[FIX] mail: make call menu observe last active action
alexkuhn Apr 15, 2026
47a9b88
[FIX] mail: adapt code around effectWithCleanup()
alexkuhn Apr 15, 2026
8769265
[FIX] mail: tweak test temporarily pinned sub-channel
alexkuhn Apr 15, 2026
bbfe5c8
[FIX] mail: remove reactive callback in test
alexkuhn Apr 15, 2026
f946eaf
revert "main component container is not mounted on new app"
mcm-odoo Apr 17, 2026
9087588
update owl to last version
ged-odoo Apr 17, 2026
f487b8a
[FIX] mail: activityData is now a signal
jeanschoenlaub Apr 20, 2026
7be07ba
[FIX] test_sale_product_configurators: change color style tour step
jeanschoenlaub Apr 20, 2026
1694488
[FIX] relational_model: call batchedCallback instead of batched in us…
jeanschoenlaub Apr 20, 2026
cbe2b74
[FIX] owl: report prop validation errors asynchronously in willUpdate…
jeanschoenlaub Apr 20, 2026
494c037
[REF] owl: better props vaidation fix
jeanschoenlaub Apr 21, 2026
01aa3a6
[FIX] website: use useEffect instead of useLayoutEffect for focus man…
jeanschoenlaub Apr 21, 2026
b6827f4
fix code editor & ace_field tests
jum-odoo Apr 21, 2026
a0e3944
fewer reactive assignments in setup
jum-odoo Apr 21, 2026
2824ecb
[FIX] test: always forward env to createRoot in mountComponent
jeanschoenlaub Apr 21, 2026
5dc5221
Finer reactivity in Hoot
jum-odoo Apr 22, 2026
d60f315
relational model: reduce reactive values
jum-odoo Apr 21, 2026
4a9d0f9
remove root reactivity?
jum-odoo Apr 22, 2026
c8816ed
fix a form test
mcm-odoo Apr 20, 2026
92c842b
remove odoo effect fn
mcm-odoo Apr 17, 2026
e02e2f9
[FIX] test: workaround model reactivity limiting
jeanschoenlaub Apr 22, 2026
5bfe133
notify in useModel
jum-odoo Apr 22, 2026
c0b61ae
revert test fix and fix count reactivity
jeanschoenlaub Apr 22, 2026
317b203
unify useModel
jum-odoo Apr 22, 2026
a7dc35f
make reactive: Group.count
jum-odoo Apr 22, 2026
bff0949
make reactive: DynamicList.count
jum-odoo Apr 22, 2026
2b85ba3
makeReactive: productCatalogData
jeanschoenlaub Apr 22, 2026
c2d7a33
fix doctype for Hoot match
jum-odoo Apr 22, 2026
e8f258a
move makeReactive to compatibility layer
jum-odoo Apr 22, 2026
43e2ea6
remove useState wrapped around useModel
mcm-odoo Apr 22, 2026
d844934
remove markRaw in useModel
mcm-odoo Apr 22, 2026
67228ba
partially fix style error
jeanschoenlaub Apr 22, 2026
6a5cc5e
update owl to v3.0.0-alpha.28
ged-odoo Apr 22, 2026
ec9347a
fix useEffect left over'
jeanschoenlaub Apr 22, 2026
c6a63c9
remove test.debug
mcm-odoo Apr 23, 2026
64f402a
rerun migration
jeanschoenlaub Apr 23, 2026
684e61f
revert t-custom-ref migration
jeanschoenlaub Apr 23, 2026
9a7f3fd
update owl 3 again
ged-odoo Apr 23, 2026
bb7cd46
fix test query element by style color
mcm-odoo Apr 23, 2026
faeed5c
fix onWillStart handler
mcm-odoo Apr 23, 2026
34cc619
wip
jeanschoenlaub Apr 23, 2026
9899caf
fix t-call pos test
jeanschoenlaub Apr 23, 2026
79ec971
convert BuilderList component props
mcm-odoo Apr 23, 2026
f642fac
Revert "wip"
jeanschoenlaub Apr 23, 2026
7770845
fix pos tour with new signal
jeanschoenlaub Apr 23, 2026
dfff405
Fix pos tour referencing app.env
jeanschoenlaub Apr 23, 2026
a452298
update owl to alpha 29
ged-odoo Apr 23, 2026
61e695a
[REF] change app.env fix
jeanschoenlaub Apr 23, 2026
89bd2d4
fix spreadsheet dashboard
bastien-ipb Apr 23, 2026
873a3c7
revert this
mcm-odoo Apr 23, 2026
31df169
fix style color notation in tests
mcm-odoo Apr 23, 2026
eda0c26
fix pos tour with this. on t-custom-model and continue NBY WIP
jeanschoenlaub Apr 23, 2026
6d9d69a
update owl to last version
ged-odoo Apr 23, 2026
5d94484
fix 2 website tours
mcm-odoo Apr 24, 2026
151bd52
fix shop editor tour
mcm-odoo Apr 24, 2026
6e08efe
fix onWillStart handler
mcm-odoo Apr 24, 2026
9007db5
[FIX] mail: prevent nested effects of internal effects
alexkuhn Apr 22, 2026
98c2afd
migrate t-call
mcm-odoo Apr 24, 2026
c4554cc
fix website_font_family tour
mcm-odoo Apr 24, 2026
aa51da5
fix snippet_social_media tour
mcm-odoo Apr 24, 2026
e8f7c6e
fix website_update_column_count tour
mcm-odoo Apr 24, 2026
07a4371
fix pos tours with guards
jeanschoenlaub Apr 24, 2026
e29ee68
[FIX] pos_self_order: move display_change_quantity t-set outside t-fo…
jeanschoenlaub Apr 24, 2026
45a7605
[FIX] point_of_sale: update getComponentInstance for OWL 3 node API
jeanschoenlaub Apr 24, 2026
100c398
[FIX] pos_restaurant: use proxy for mutable props in payment_lines test
jeanschoenlaub Apr 24, 2026
353b3db
[FIX] point_of_sale: fix activateMountingDialogs to not interfere wit…
jeanschoenlaub Apr 24, 2026
78ec44e
[FIX] project: make displaySubtasks reactive for OWL3 compatibility
jeanschoenlaub Apr 24, 2026
143e8ef
[FIX] web: guard against null input ref in CharField.onBlur
jeanschoenlaub Apr 24, 2026
5d19023
[FIX] pos_event: migrate t-call context to OWL3 inline params in even…
jeanschoenlaub Apr 27, 2026
9a3c717
[FIX] product: replace onRendered with onMounted to prevent infinite …
jeanschoenlaub Apr 27, 2026
2dd78dd
[FIX] purchase_product_matrix: handle OWL3 extra destroy cycle in pro…
jeanschoenlaub Apr 27, 2026
e2fb411
fix html_builder ltrRtlMapping tests
mcm-odoo Apr 27, 2026
2160599
wrong useEffect dependency
mcm-odoo Apr 28, 2026
0c9c13d
check component destroyed in record observer
mcm-odoo Apr 28, 2026
850a6fe
owl: scheduler.processTasks is patched in odoo...
mcm-odoo Apr 28, 2026
fe99983
mark render as deprecated
jum-odoo Apr 22, 2026
55fb86d
fix hoot imports
jum-odoo Apr 28, 2026
ebf82ef
progress on relational model reactivity
jum-odoo Apr 28, 2026
7dc3cb0
Revert "progress on relational model reactivity"
jeanschoenlaub Apr 29, 2026
81f9a15
QUICKFIX on actionService resId
jeanschoenlaub Apr 29, 2026
1bb0fba
[FIX] html_builder: sync state.value eagerly in BuilderInputBase for …
jeanschoenlaub Apr 29, 2026
b460535
[FIX] html_builder: guard resizeObserver disconnect against early des…
jeanschoenlaub Apr 30, 2026
279984f
fix error_service hoot test
abz-odoo Apr 30, 2026
9f297e0
[FIX] mail: use immediateEffect on composer
jeanschoenlaub Apr 30, 2026
271c24a
fix html_editor test
mcm-odoo Apr 29, 2026
e652275
use immediateEffect in dropdown instead of useEffect
mcm-odoo Apr 30, 2026
a15c2eb
mark html_builder "reorder items" test as todo
mcm-odoo Apr 30, 2026
02d4ac8
[FIX] mail: can't assert on Message renders
jeanschoenlaub May 4, 2026
2d0083d
[FIX] mail: performance fix (merge with previous)
jeanschoenlaub May 4, 2026
4eaefb0
Revert "[FIX] mail: tweak test temporarily pinned sub-channel"
jeanschoenlaub May 5, 2026
1e9ced4
html_builder: make BuilderList drag and drop work
mcm-odoo May 5, 2026
0aca514
replace sortable container prop by props
mcm-odoo May 5, 2026
4133d34
[REF] mail: performance clean up - merge with previous
jeanschoenlaub May 5, 2026
0a44167
[FIX] discuss: fix breadcrumb test after "Open in Discuss"
jeanschoenlaub May 5, 2026
2bd529d
fix owl to properly compare props (when default props and t-props)
ged-odoo May 5, 2026
f2a2e99
[FIX] mail: scroll to the right ref
jeanschoenlaub May 5, 2026
fd6cfdc
[REF] iot_drivers: adapt to owl 3
mcm-odoo Feb 13, 2026
117e717
Todo all leftover tests
jeanschoenlaub May 6, 2026
f4a1c1b
further test.todo
jeanschoenlaub May 6, 2026
690b868
final test.todo
jeanschoenlaub May 6, 2026
1e9f4d3
fix Hoot error handling and messages
jum-odoo May 6, 2026
44d242f
'makeComputed' + use it in List datapoints
jum-odoo May 6, 2026
9756271
wrong todo
jeanschoenlaub May 6, 2026
d770cd1
Revert "'makeComputed' + use it in List datapoints"
jum-odoo May 6, 2026
464e521
fix res_user_group_ids_field
mcm-odoo May 6, 2026
edfa358
[FIX] web: don't block kanban re-render on progress bar RPC
jeanschoenlaub May 6, 2026
af7a871
fix list test
jum-odoo May 6, 2026
dcd018d
Revert "[FIX] web: don't block kanban re-render on progress bar RPC"
jeanschoenlaub May 7, 2026
213f2da
fix emoji test?
jum-odoo May 6, 2026
056686a
blabla fix builderinput component
ged-odoo May 7, 2026
b7cf53c
[WIP] relational model extends reactive again
aab-odoo May 6, 2026
5b5f6d2
[WIP] unskip user settings tour
aab-odoo May 7, 2026
f5afca3
[WIP] add runAllTimers to make test pass
aab-odoo May 7, 2026
5e9d47c
add todos after aab change
jeanschoenlaub May 8, 2026
19f656b
t-custom-model
mcm-odoo May 8, 2026
2c5fbf4
move import onRendered
mcm-odoo May 8, 2026
9db3480
migrate t-call param
mcm-odoo May 8, 2026
3311637
migrate t-slot
mcm-odoo May 8, 2026
7241117
migrate t-ref
mcm-odoo May 8, 2026
0585c16
move t-set to t-call param
mcm-odoo May 8, 2026
8f12e29
this
mcm-odoo May 8, 2026
7f17cae
fix imports
mcm-odoo May 8, 2026
6e92127
migrate state to signal
mcm-odoo May 8, 2026
af1b055
migrate state to signal
mcm-odoo May 8, 2026
e319887
error from rebase
mcm-odoo May 11, 2026
085ddac
todo test ForecastedDetails
mcm-odoo May 11, 2026
ba87467
update owl
ged-odoo May 8, 2026
9765f63
[REV] reset model.js
aab-odoo May 8, 2026
becd806
[WIP] adapt model.js to owl3 (minimal)
aab-odoo May 8, 2026
b4d707e
[WIP] untodo test failing randomly on master
aab-odoo May 8, 2026
e54b4b4
[WIP] unskip tests that dont execute js code (I think)
aab-odoo May 8, 2026
ba730bc
[FIX] survey: fix trigger warning icon not updating after drag-and-dr…
jeanschoenlaub May 8, 2026
f62ffea
[WIP] add onRootUpdated hook to model and unskip 2 tests
aab-odoo May 8, 2026
0e86e84
[WIP] fix all bugs
aab-odoo May 11, 2026
c425f29
todo
mcm-odoo May 11, 2026
d15f339
pos: add ?.
mcm-odoo May 11, 2026
57d20d9
wip
mcm-odoo May 11, 2026
9ff4cfe
fix cog menu template variable
ged-odoo May 8, 2026
34dca36
update owl (effects fix)
ged-odoo May 11, 2026
f630147
Revert "[FIX] project: make displaySubtasks reactive for OWL3 compati…
jeanschoenlaub May 11, 2026
1955988
Revert "makeReactive: productCatalogData" commit
jeanschoenlaub May 11, 2026
c0e8275
Revert "QUICKFIX on actionService resId"
jeanschoenlaub May 11, 2026
68b1f74
Revert "[FIX] html_builder: guard resizeObserver disconnect against e…
jeanschoenlaub May 11, 2026
07cc19e
html_builder: add missing this. in template
ged-odoo May 12, 2026
2386d0d
fix text effect selector
mcm-odoo May 12, 2026
40b1ad9
remove todo test in mail
mcm-odoo May 12, 2026
536e5af
[FIX] web: fix dynamic placeholder model lookup timing
jeanschoenlaub May 8, 2026
9b82185
t-call param
mcm-odoo May 12, 2026
6f0158c
remove todo graph view test
mcm-odoo May 12, 2026
b76169e
remove todo handle rpc error tests
mcm-odoo May 12, 2026
e9f9495
[FIX] autocomplete read all state during rendering
kebeclibre May 12, 2026
2346919
[FIX] html_editor: restore editable focus after mobile font size sele…
jeanschoenlaub May 12, 2026
ac5b475
update calendar tests
mcm-odoo May 12, 2026
cdbf4b6
fix button_style_option test
mcm-odoo May 12, 2026
9774167
[FIX] datetime field update picker value from record
kebeclibre May 12, 2026
4412d30
[HOOT] fix this variable
jeanschoenlaub May 12, 2026
8e0cbdc
[WIP] unskip hoot test
aab-odoo May 12, 2026
3f551bf
[WIP] simplify useRecordObserver
aab-odoo May 11, 2026
329371f
[FIX] stock forecasted details test
kebeclibre May 13, 2026
8af4bf9
[wip] skip failing test
aab-odoo May 13, 2026
f054e51
update url when resId changes
mcm-odoo May 13, 2026
790d0c5
migrate onWillRender
mcm-odoo May 13, 2026
cca7231
migrate onRendered
mcm-odoo May 13, 2026
6862e12
this
mcm-odoo May 13, 2026
9c9bf87
add entries in "migrate this" whitelist
mcm-odoo May 13, 2026
ef002af
mark test todo after rebase
mcm-odoo May 13, 2026
ac120b1
[FIX] purchase product matrix tour
aab-odoo May 13, 2026
d227e6c
fix `shouldEnable` callback function pushes/clears trap history entry
mcm-odoo May 13, 2026
feed502
[FIX] mail: fix test 'replying to message should only render relevant…
alexkuhn May 13, 2026
ff733cf
[FIX] mail: fix channel and role mention test in discuss app
alexkuhn May 13, 2026
1a52b94
[IMP] upgrade_code: use tools_js for parametric t_call processing
jeanschoenlaub May 13, 2026
2206d07
wip
stva-odoo May 13, 2026
4a16da3
[PERF] mail: fix memory leak from running mail tests
alexkuhn May 14, 2026
e153453
[REF] pos: add back data stva removed
jeanschoenlaub May 15, 2026
012c91a
[FIX] html_editor: fix focus issue due to bottomsheet (2)
jeanschoenlaub May 15, 2026
8021b0a
[TMPFIX] unset currentComputation to fix leak
aab-odoo May 15, 2026
54006f5
[FIX] mail: strenghten non deterministic test
aab-odoo May 18, 2026
cdb7f21
update owl (and fix memory leak)
ged-odoo May 18, 2026
ed46afd
owl3 compatibility layer: replace getCurrentNode by useScope
mcm-odoo May 18, 2026
006231b
web: replace createFileViewer by a service
mcm-odoo May 18, 2026
64a5e4c
[FIX] Hoot: owl imports and reduced reactivity
jum-odoo May 11, 2026
486fdc3
update owl (fix t-ref)
ged-odoo May 19, 2026
c505d5a
[FIX] analytic: initialize lastAccount/lastProduct before useRecordOb…
jeanschoenlaub May 19, 2026
ba2485b
this after rebase
mcm-odoo May 19, 2026
b253705
migrate t-call after rebase
mcm-odoo May 19, 2026
3980486
migrate t-esc after rebase
mcm-odoo May 19, 2026
d6552d6
migrate t-ref after rebase
mcm-odoo May 19, 2026
dbeb503
migrate useState after rebase
mcm-odoo May 19, 2026
3b078a3
migrate useEffect after rebase
mcm-odoo May 19, 2026
be0db09
fix after rebase
mcm-odoo May 19, 2026
421bed4
[FIX] owl3 compatibility: useRef and custom-ref convert to signal
kebeclibre May 20, 2026
e811506
[FIX] hr_holidays: un-todoing test relying on useRef fix
kebeclibre May 20, 2026
f802f75
[WIP] mail: debug chatter race-condition issue
alexkuhn May 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<templates>

<t t-name="account.AccountFileUploader" t-inherit="account.DocumentFileUploader" t-inherit-mode="primary">
<xpath expr="//t[@t-slot='toggler']" position="replace">
<xpath expr="//t[@t-call-slot='toggler']" position="replace">
<t t-if="this.props.togglerTemplate" t-call="{{ this.props.togglerTemplate }}"/>
<t t-else="" t-slot="toggler"/>
<t t-else="" t-call-slot="toggler"/>
</xpath>
</t>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
onUploaded.bind="this.onFileUploaded"
onUploadComplete.bind="this.onUploadComplete">
<t t-set-slot="toggler">
<t t-slot="toggler"/>
<t t-call-slot="toggler"/>
</t>
<t t-slot="default"/>
<t t-call-slot="default"/>
</FileUploader>
</t>

Expand Down
10 changes: 2 additions & 8 deletions addons/account/static/src/js/tours/tour_utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,8 @@ export function addSectionFromProductCatalog() {
},
{
content: "Add a Product",
trigger: '.o_kanban_record:contains("Test Product")',
run: function () {
setTimeout(() => {
[...document.querySelectorAll('.o_kanban_record')].find(el =>
el.textContent.includes('Test Product')
)?.click();
}, 1000);
},
trigger: `.o_kanban_record:contains("Test Product") button:has(.fa-shopping-cart)`,
run: "click",
},
{
content: "Wait for product to be added",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ export class AnalyticDistribution extends Component {
this.initialFormattedData = [];

onWillStart(this.willStart);
useRecordObserver(this.willUpdateRecord.bind(this));
onPatched(this.patched);

useExternalListener(window, "click", this.onWindowClick, true);
Expand Down Expand Up @@ -101,6 +100,7 @@ export class AnalyticDistribution extends Component {
this.planIdToColumn = {};
this.lastAccount = this.props.account_field && this.props.record.data[this.props.account_field] || false;
this.lastProduct = this.props.product_field && this.props.record.data[this.props.product_field] || false;
useRecordObserver(this.willUpdateRecord.bind(this));
}

// Lifecycle
Expand Down Expand Up @@ -152,6 +152,7 @@ export class AnalyticDistribution extends Component {
* @returns {Object}
*/
accountTotalsByPlan() {
this.state.formattedData; // consume signal
const accountTotals = {};
const formattedData = this.props.multi_edit ? this.initialFormattedData : this.state.formattedData;
formattedData.map((line) => {
Expand Down
3 changes: 0 additions & 3 deletions addons/analytic/static/tests/analytic_widget.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -100,9 +100,6 @@ test("Analytic dynamic multi-edit", async () => {
await runAllTimers();
await contains(".analytic_distribution_popup tbody tr:first .o_field_many2one .o_input_dropdown a").click();
await contains(".o_list_renderer").click(); // close the widget
// we don't change the value until it's saved
expect(".o_list_table tbody tr:nth-child(1) .o_field_analytic_distribution .o_tag_badge_text").toHaveText("Los Angeles");
expect(".o_list_table tbody tr:nth-child(2) .o_field_analytic_distribution .o_tag_badge_text").toHaveText("New York");
await contains(".modal-footer .btn-primary").click(); // validate confirmation
await runAllTimers();
expect(".o_list_table tbody tr:nth-child(1) .o_field_analytic_distribution .o_tag_badge_text").toHaveText("Brussels");
Expand Down
1 change: 1 addition & 0 deletions addons/api_doc/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
# Core
'web/static/src/module_loader.js',
'web/static/lib/owl/owl.js',
'web/static/src/owl2/owl3_compatibility_layer.js',
'web/static/src/owl2/utils.js',
'web/static/lib/owl/odoo_module.js',

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ export class DocLoadingIndicator extends Component {
<div class="o-doc-load-activity position-absolute h-100"></div>
</div>
<div t-else="" t-att-class="this.props.class">
<t t-slot="default"/>
<t t-call-slot="default"/>
</div>
`;

Expand Down
8 changes: 5 additions & 3 deletions addons/api_doc/static/src/components/doc_request.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
import { useState } from "@web/owl2/utils";
import { Component } from "@odoo/owl";
import { Component, signal } from "@odoo/owl";
import { LANGUAGES, createRequestCode } from "@api_doc/utils/doc_code_gen";
import { CodeEditor } from "@web/core/code_editor/code_editor";
import { browser } from "@web/core/browser/browser";

class CopyableCodeEditor extends CodeEditor {
static template = "web.DocRequest.CodeEditor";

copied = signal(false);

copyToClipboard() {
navigator?.clipboard?.writeText(this.aceEditor.getValue());
this.state.copied = true;
this.copied.set(true);
setTimeout(() => {
this.state.copied = false;
this.copied.set(false);
}, 1000);
}
}
Expand Down
2 changes: 1 addition & 1 deletion addons/api_doc/static/src/components/doc_request.xml
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@
t-on-click="this.copyToClipboard"
type="button"
>
<i t-if="!this.state.copied" class="fa fa-clipboard fs-6 text-light"/>
<i t-if="!this.copied()" class="fa fa-clipboard fs-6 text-light"/>
<span t-else="" class="fs-6 text-light">Copied!</span>
</button>
</div>
Expand Down
6 changes: 2 additions & 4 deletions addons/api_doc/static/src/start_doc_client.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ import { DocClient } from "@api_doc/doc_client";

export async function startDocClient() {
await whenReady();
const app = new App(DocClient, {
getTemplate,
});
app.mount(document.body);
const app = new App({ getTemplate });
app.createRoot(DocClient).mount(document.body);
}
6 changes: 3 additions & 3 deletions addons/base_import/static/tests/import_action.test.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { useLayoutEffect } from "@web/owl2/utils";
import { before, describe, expect, test } from "@odoo/hoot";
import {
animationFrame,
Expand All @@ -7,7 +8,6 @@ import {
setInputFiles,
waitFor,
} from "@odoo/hoot-dom";
import { useEffect } from "@odoo/owl";
import {
contains,
defineActions,
Expand Down Expand Up @@ -1026,7 +1026,7 @@ describe("Import view", () => {
patchWithCleanup(ImportDataProgress.prototype, {
setup() {
super.setup();
useEffect(
useLayoutEffect(
() => {
if (this.props.importProgress.step === 1) {
// Trigger a pause at this step to resume later from the view
Expand Down Expand Up @@ -1106,7 +1106,7 @@ describe("Import view", () => {
patchWithCleanup(ImportDataProgress.prototype, {
setup() {
super.setup();
useEffect(
useLayoutEffect(
() => {
if (this.props.importProgress.step === 1) {
// Trigger a pause at this step to resume later from the view
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,11 @@ export class AttendeeCalendarActivityListPopover extends Component {
this.store = useService("mail.store");
this.limit = this.env.isSmall ? false : 5;

this.activityIds = this.props.activityIds;

onWillStart(async () => {
const data = await this.orm.silent.call("mail.activity", "activity_format", [
this.props.activityIds,
this.activityIds,
]);
this.store.insert(data);
});
Expand All @@ -42,7 +44,7 @@ export class AttendeeCalendarActivityListPopover extends Component {
*/
get activities() {
/** @type {import("models").Activity[]} */
return (this.limit ? this.props.activityIds.slice(0, this.limit) : this.props.activityIds)
return (this.limit ? this.activityIds.slice(0, this.limit) : this.activityIds)
.map((id) => this.store["mail.activity"].get(id))
.filter(Boolean); // Do not consider activities removed from the store
}
Expand All @@ -53,7 +55,7 @@ export class AttendeeCalendarActivityListPopover extends Component {
async onClickViewAll() {
const action = await this.action.loadAction("mail.mail_activity_action_my");
action.context = { force_search_count: 1 }; // remove default search
action.domain = [["id", "in", this.props.activityIds]];
action.domain = [["id", "in", this.activityIds]];
this.props.close();
this.action.doAction(action);
}
Expand All @@ -64,8 +66,8 @@ export class AttendeeCalendarActivityListPopover extends Component {
* automatically close the popover when there's no activity left.
*/
onRemoveActivityItem(activityId) {
this.props.activityIds = this.props.activityIds.filter((id) => id !== activityId);
if (!this.props.activityIds.length) {
this.activityIds = this.activityIds.filter((id) => id !== activityId);
if (!this.activityIds.length) {
this.props.close();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@
onRemoveActivityItem.bind="this.onRemoveActivityItem"
onViewMeeting.bind="this.props.onViewMeeting"/>
</div>
<button t-if="this.limit and this.props.activityIds.length > this.limit"
<button t-if="this.limit and this.activityIds.length > this.limit"
class="btn btn-secondary p-3 text-center text-primary border-top"
t-on-click="this.onClickViewAll">
...and <t t-out="this.props.activityIds.length - this.limit"/> more
...and <t t-out="this.activityIds.length - this.limit"/> more
</button>
</div>
</t>
Expand Down
22 changes: 10 additions & 12 deletions addons/crm/static/src/views/crm_form/crm_pls_tooltip_button.xml
Original file line number Diff line number Diff line change
Expand Up @@ -44,25 +44,23 @@
<span>Top Positives</span>
<span t-if="isSampleData" class="text-primary fw-normal ms-2">(sample data)</span>
</h5>
<t t-call="crm.PlsTooltipSectionContent">
<t t-set="iconClasses" t-value="'oi oi-arrow-up-right text-success'"/>
<t t-set="sectionEntries" t-value="this.props.top3Data"/>
<t t-set="teamName" t-value="this.props.teamName"/>
<t t-set="useDefault" t-value="positiveDefault"/>
</t>
<t t-call="crm.PlsTooltipSectionContent"
iconClasses="'oi oi-arrow-up-right text-success'"
sectionEntries="this.props.top3Data"
teamName="this.props.teamName"
useDefault="positiveDefault"/>
</div>
<div t-if="negativeDefault || this.props.low3Data?.length"
t-attf-class="mb-3 {{isSampleData ? 'o_crm_pls_tooltip_section_sample' : ''}}">
<h5 class="bg-primary-subtle py-2 px-2">
<span>Top Negatives</span>
<span t-if="isSampleData" class="text-primary fw-normal ms-2">(sample data)</span>
</h5>
<t t-call="crm.PlsTooltipSectionContent">
<t t-set="iconClasses" t-value="'oi oi-arrow-down-right text-danger'"/>
<t t-set="sectionEntries" t-value="this.props.low3Data"/>
<t t-set="teamName" t-value="this.props.teamName"/>
<t t-set="useDefault" t-value="negativeDefault"/>
</t>
<t t-call="crm.PlsTooltipSectionContent"
iconClasses="'oi oi-arrow-down-right text-danger'"
sectionEntries="this.props.low3Data"
teamName="this.props.teamName"
useDefault="negativeDefault"/>
</div>
<div class="o_crm_pls_tooltip_footer d-flex justify-content-between text-muted fs-xs mt-3 px-2">
<span t-if="isSampleData" class="text-primary fw-bold">Close opportunities to get insights.</span>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,13 @@
<templates xml:space="preserve">
<t t-name="website_livechat.LivechatChannelInfoList" t-inherit="im_livechat.LivechatChannelInfoList" t-inherit-mode="extension">
<xpath expr="//t[@t-name='extra_infos']" position="inside">
<t t-if="this.props.thread.channel.livechatVisitorMember?.partner_id?.opportunity_ids?.length" t-call="im_livechat.LivechatChannelInfoList.info_links">
<t t-set="title">Open leads</t>
<t t-set="templateParams"
t-value="{
<t t-set="title">Open leads</t>
<t t-if="this.props.thread.channel.livechatVisitorMember?.partner_id?.opportunity_ids?.length" t-call="im_livechat.LivechatChannelInfoList.info_links"
templateParams="{
title,
'info_records': this.props.thread.livechatVisitorMember?.partner_id?.opportunity_ids,
'model': 'crm.lead'
}"
/>
</t>
}"/>
</xpath>
</t>
</templates>
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { useLayoutEffect } from "@web/owl2/utils";
import { DataCleaningCommonListController } from "@data_recycle/views/data_cleaning_common_list";
import { registry } from '@web/core/registry';
import { listView } from '@web/views/list/list_view';
import { useEffect } from "@odoo/owl";

export class DataRecycleListController extends DataCleaningCommonListController {
setup() {
super.setup();
useEffect(() => {
useLayoutEffect(() => {
const selectedRecords = this.model.root.selection;

// Check the active state of selected records
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@
</div>
</button>

<t t-foreach="items.inline" position="replace">
<t t-foreach="items.inline" t-as="item" t-key="item.value">
<t t-foreach="this.items.inline" position="replace">
<t t-foreach="this.items.inline" t-as="item" t-key="item.value">
<div class="o_arrow_button_wrapper"
t-att-data-tooltip="item.toolTip">
<button
Expand Down
31 changes: 9 additions & 22 deletions addons/hr/static/src/fields/hr_org_chart.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,12 @@

<section t-if="employee_type == 'self'" t-attf-class="o_org_chart_entry_self_container #{this.managers.length &gt; 0 ? 'o_org_chart_has_managers' : ''}">
<div t-attf-class="o_org_chart_entry o_org_chart_entry_#{employee_type} position-relative d-flex align-items-center overflow-visible #{this.managers.length &gt; 0 ? 'o_treeEntry' : ''}">
<t t-call="hr.hr_org_chart_employee_content">
<t t-set="is_self" t-value="is_self"/>
</t>
<t t-call="hr.hr_org_chart_employee_content" is_self="is_self"/>
</div>
</section>

<div t-else="" t-attf-class="o_org_chart_entry o_org_chart_entry_#{employee_type} o_treeEntry position-relative d-flex align-items-center overflow-visible">
<t t-call="hr.hr_org_chart_employee_content">
<t t-set="is_self" t-value="is_self"/>
</t>
<t t-call="hr.hr_org_chart_employee_content" is_self="is_self"/>
</div>
</t>

Expand All @@ -36,14 +32,10 @@

<t t-name="hr.hr_org_chart_employee_content">
<a t-if="!is_self" t-att-href="employee.link" class="o_employee_redirect d-flex w-100 me-auto opacity-trigger-hover" t-att-data-employee-id="employee.id" t-on-click.prevent="() => this._onEmployeeRedirect(employee.id)">
<t t-call="hr.hr_org_chart_employee_informations">
<t t-set="is_self" t-value="is_self"/>
</t>
<t t-call="hr.hr_org_chart_employee_informations" is_self="is_self"/>
</a>
<div t-if="is_self" class="d-flex w-100 me-auto">
<t t-call="hr.hr_org_chart_employee_informations">
<t t-set="is_self" t-value="is_self"/>
</t>
<t t-call="hr.hr_org_chart_employee_informations" is_self="is_self"/>
</div>
<button t-if="employee.indirect_sub_count &gt; 0"
class="btn btn-secondary btn-sm d-flex ms-2 rounded-pill"
Expand Down Expand Up @@ -79,16 +71,13 @@

<t t-foreach="this.managers" t-as="employee" t-key="employee_index">
<t t-set="emp_count" t-value="emp_count + 1"/>
<t t-call="hr.hr_org_chart_employee">
<t t-set="employee_type" t-value="'manager'"/>
</t>
<t t-call="hr.hr_org_chart_employee" employee_type="'manager'"/>
</t>
</div>

<t t-if="this.children.length || this.managers.length" t-call="hr.hr_org_chart_employee">
<t t-set="employee_type" t-value="'self'"/>
<t t-set="employee" t-value="this.self"/>
</t>
<t t-if="this.children.length || this.managers.length" t-call="hr.hr_org_chart_employee"
employee_type="'self'"
employee="this.self"/>

<t t-if="!this.children.length &amp;&amp; !this.managers.length">
<p class="mb-3 text-muted fst-italic">Set a manager or reports to show in org chart.</p>
Expand Down Expand Up @@ -135,9 +124,7 @@
<t t-foreach="this.children" t-as="employee" t-key="employee_index">
<t t-set="emp_count" t-value="emp_count + 1"/>
<t t-if="emp_count &lt; 20">
<t t-call="hr.hr_org_chart_employee">
<t t-set="employee_type" t-value="'sub'"/>
</t>
<t t-call="hr.hr_org_chart_employee" employee_type="'sub'"/>
</t>
</t>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<t t-name="hr_attendance.AttendanceVideoStream">
<div class="d-flex justify-content-center align-items-center w-100 h-100 overflow-hidden rounded-3">
<video
t-ref="attendanceVideo"
t-custom-ref="attendanceVideo"
class="w-100 h-100 object-fit-cover"
style="transform: scaleX(-1);"
t-on-contextmenu.prevent=""
Expand Down
Loading