Commit Graph
27 Commits
Author SHA1 Message Date
Sébastien Theys 446e20742c [IMP] mail: add update command and use it on thread viewer
Instead of thread viewer having many dependencies, this allows models "having
the thread viewer feature" to keep their own logic for themselves.

The "create or update" part has to be done manually in this case (as opposed to
using "insert") because thread viewer has no clear identifying data, since it
would depend on which model is using it in the first place.

closes odoo/odoo#70251

Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
2021-05-03 15:11:07 +00:00
Sébastien Theys 7de0a02980 [IMP] mail: flag JS "on change" fields as such
There is currently a limitation with required fields because an "on change"
compute might trigger the check for "required" before all the actual computes
have been done, leading to the required field check incorrectly failing.

The main goal is to ensure the "on change" computes are done after all the other
computes and after the check for required fields.

A check has also been added to ensure no "real" compute can trigger update cycle
side-effects anymore.

Opportunity is also taken to prevent from checking for required fields on a
record that was deleted as part of the same update cycle.

Somewhat part of task-2278551

closes odoo/odoo#70204

Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
2021-05-03 11:52:26 +00:00
Sébastien Theys 8f6603db45 [IMP] mail: compute messaging menu counter with dependencies
It was the last remaining usage of the deprecated `_updateAfter` which is
therefore removed too.

Part of task-2258617

closes odoo/odoo#70170

Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
2021-04-30 12:02:20 +00:00
Qiuyu (QHO) bd67479316 [REF] mail, mail_bot, im_livechat, *: convert JS files to ES6 modules
task id: 2487514

closes odoo/odoo#69376

Related: odoo/enterprise#17749
Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
2021-04-19 13:33:35 +00:00
Qiuyu (QHO) c3ae559bf7 [IMP] mail, *: replace [] commands by FieldCommands
closes odoo/odoo#67643

Task-id: 2453408
Related: odoo/enterprise#17036
Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
2021-03-23 12:51:24 +00:00
Qiuyu (QHO) 12660438c0 [FIX] mail: fix array check in model_field
closes odoo/odoo#67702

X-original-commit: f9d0614f28625bd8dfdd5710e465b65935ad5d38
Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
2021-03-11 15:48:15 +00:00
Qiuyu (QHO) 099b3cde08 [FIX] mail: functions for FieldCommand should return boolean value
The executing function for FieldCommand should return boolean value
to indicate whether the value changed for triggering the re-computation.

closes odoo/odoo#66681

X-original-commit: a3f5d0b292361a4aa3af8e7662f74150c5d85254
Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
2021-02-23 12:17:13 +00:00
Sébastien Theys 3d219cf548 [FIX] mail: make Inbox counters more reliable in mark as read flows
- Send the new Inbox counter when marking as read, to guarantee the JS has the
  correct value (instead of having to guess it which was impossible when an
  arbitrary domain was given to the method).

  NOTE: Manual increment is kept on receiving a new Inbox message because that
  one was reliable and it would have been more tricky to compute the new counter
  for each target partner (mark as read is one user doing an action for himself,
  whereas new message is from another user to potentially many different users).
  Generic counter for threads is also not sent on every change for similar
  reasons.

- Refresh Inbox automatically when some messages are marked as read and there
  are more message on the server than currently loaded.

- Remove confusing (and impossible to maintain) counter on non-origin threads
  (in particular channel followers). This behavior in JS was not consistent with
  the server which always counted only origin thread (model/res_id).

task-2446302

closes odoo/odoo#65842

X-original-commit: f9bc1f98ed8f76846697cde68a760217b3af2aaf
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
2021-02-09 17:45:00 +00:00
Didier (did) b51a08a6e1 [FIX] mail: avoid updating a delete isCausal model
task-2453463

closes odoo/odoo#65707

X-original-commit: f6be3fff524d02b08d9fc05b9a90ec133aa77792
Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
2021-02-08 11:12:52 +00:00
Didier (did) 831a83f273 [IMP] mail: implement read only field
Fields can now be marqued as read only.
```
stringifiedDomain: attr({
    default: '[]',
    readonly: true,
}),
```

closes odoo/odoo#60086

Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
2020-11-23 09:17:40 +00:00
Didier (did) 66de13d461 [IMP] mail,hr: implement required field in JS models
Fields can now be marqued as required inside a field definition. If the field
value is `undefined` or updated to `undefined`, an error will be throw.

```
stringifiedDomain: attr({
    default: '[]',
    required: true,
}),
```

task-2323665

closes odoo/odoo#59094

Related: odoo/enterprise#13883
Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
2020-11-16 13:41:13 +00:00
Sébastien Theys b503c7f9f0 [FIX] mail: avoid useless (un)link when using replace
Side effect of this change: dependencies are not longer triggered when replace
is not actually doing anything.

task-2270780

closes odoo/odoo#59515

X-original-commit: 75a44675873d65fdf17f2205772b05a0f59bb42c
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
2020-10-08 13:21:06 +00:00
Sébastien Theys 44b557777f [FIX] mail: ignore undefined in JS fields create/write
Passing a field containing `undefined` should lead to the same result as not
passing the field.

Fields that relied on `undefined` as a value have been changed to use the newly
introduced `clear` command, that resets a field to its default value (often
that is equal to `undefined`).

task-2336491

closes odoo/odoo#58314

X-original-commit: b18824485483564d2ab80f41914a3548aa528ae0
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
2020-09-23 10:19:14 +00:00
Sébastien Theys ef873e0c29 [FIX] mail: introduce findFromIdentifyingData
This is necessary to check the existence of a record based on identifying data
without having to use `insert` (or the inefficient `find`).

PR: #56243
Part of task-2323670

X-original-commit: c4bbfc5e2a8d236e5fc79a63c13575de146afbd7
2020-08-24 13:46:59 +00:00
Sébastien Theys a0e918796f [FIX] mail: remove JS record proxy in favor of accessors
- accessors are defined only once on the model
- they work per field which avoids having to check if target param is in fields
  at every read/write on record

Also store fields as list in `__fieldList` to quickly iterate them without
`Object.values`.

`__combinedFields` are now renamed to `__fieldMap` instead of just `fields` to
avoid confusion with fields definition, and to have a naming similar to
`__fieldList`.

Part of task-2308312

closes odoo/odoo#56314

X-original-commit: 42a94d49b9e8333cf91807c96f0ddd740782915e
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
2020-08-21 14:16:34 +00:00
Sébastien Theys 79f6b15c74 [FIX] mail: avoid unnecessary update of inverse in JS models
Part of task-2308312

X-original-commit: 0e08e43decf18108d25d051ad76c093bcdf434db
2020-08-21 14:16:33 +00:00
Sébastien Theys 9216bdcb6f [FIX] mail: clean up JS relations by storing records
Remove the support and the conversion from record to localId and back from
localId to record.

Part of task-2308312

closes odoo/odoo#55481

X-original-commit: fc5e8be4e65518770a281f0dffae07854d20073a
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
2020-08-05 15:09:34 +00:00
Sébastien Theys ba03b6c697 [FIX] mail: save JS records per model and use exists if possible
This allows get to be simplified to only handle local id.

Part of task-2308312

closes odoo/odoo#55346

X-original-commit: fa013d1d29e64706a08499d0f564327766410f8e
Related: odoo/enterprise#12159
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
2020-08-03 15:49:04 +00:00
Sébastien Theys fe029223a5 [FIX] mail: speed up JS models by better using JS language
- use Map for _toComputeFields
- factorize const access out of loops
- avoid Object.entries
- introduces `exists` method to avoid costly call to `get`
- ensure compute are using update to trigger potential _updateAfter

Part of task-2308312

X-original-commit: e364886c2450872a7e42cef549f253b10e55158d
2020-08-03 15:49:04 +00:00
Sébastien Theys 1d7285dc56 [FIX] mail: speed up JS models x2m link/unlink by keeping prev Set
Part of task-2308312

X-original-commit: 1a06077443582f99f58c8c62ab517e7e527f58ed
2020-08-03 15:49:03 +00:00
Sébastien Theys 505f0e9be9 [FIX] mail: batch insert to speed up _setRelationInsertAndReplace
Part of task-2308312

X-original-commit: ceac1e5c3e200c0617ae6b62227079b47a7623d5
2020-08-03 15:49:03 +00:00
Sébastien Theys 470280b663 [FIX] mail: use Map to speed up _toUpdateAfters
Part of task-2308312

X-original-commit: 225c17ea2c761cf8cd15305796e7da7c5b79353c
2020-08-03 15:49:03 +00:00
Sébastien Theys 24fba9fed7 [FIX] mail: speed up insert by using localId instead of find
Part of task-2308312

X-original-commit: 407dc9796543a27b6695c8d4da922c13dece5b38
2020-08-03 15:49:02 +00:00
Sébastien Theys 0d4cb52b9d [FIX] mail: batch create/insert of JS model for performance
PR: #55261
Part of task-2308312

closes odoo/odoo#55266

X-original-commit: eded5f6372d4f1cffd1a361bd8fa7fd8f1f8ae9e
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
2020-07-31 14:43:15 +00:00
Sébastien Theys 7a1bfa793a [FIX] mail: fix performance of JS models update cycle
- wrap all JS model operations in update cycle
- properly delay execution of compute during `_updateAfter`

This allows to delay the execution of computes as long as possible, which
significantly improves performance, especially during init_messaging with plenty
of chat windows (due to compute of "visual").

PR: #55261
Part of task-2308312

X-original-commit: 79f85523ebef6b7ac4c198eec8b1e55e243f49d1
2020-07-31 14:43:15 +00:00
Sébastien Theys 78bef3e08c [FIX] mail: improve performance of JS write, especially for x2m
- store `x2many` values as `Set`. This is conceptually more correct because
  duplicates were already not allowed, and using a `Set` allows for much faster
  operations such as checking the presence of a record in the relation, which is
  done at every write, for every linked record.

- `stringify` in `write` was slow and unnecessary because we can always assume
  that new non-primitive should be provided to `write`

- remove field values from store, in favor of just storing a counter, which is
  enough to trigger renders. This allows to get rid of one Proxy level around
  data, which was slower, but which also prevented from using `Set`.

- write in store exactly once per update cycle, to trigger one `useStore` call
  on each component. Records keep `__state` but as a local counter, to let
  `useStore` know which records have been updated (easier to compare a counter
  than comparing each and every field value).

Results
=======

The worse case test (using a lot of x2m) that was used to benchmark this PR
`form_renderer_tests.js` of `mail_enterprise` went from taking around 4s before
this commit, to around 2.5s after this commit.
And the worse `_setRelationLinkMany2Many` previously took around 250ms, and it
now takes around 50ms.

The whole `mail` QUnit suite took around 55s before, now around 42s.

Part of task-2308312

closes odoo/odoo#55248

X-original-commit: 4db0a10d85534ef896f6bcbf13bca4983a6e2003
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
2020-07-31 09:43:01 +00:00
3fea5b2136 [REF] mail, *: refactor messaging with OWL
This commit is a significant rewriting of client-side discuss, chatter,
chat window, and messaging menu using OWL. The behavior should be broadly
the same, with some slight functional changes here and there.

From a technical standpoint, the code of messaging is mainly organized in 2
main groups of modules:

- models, which are logical entities that depict the client-side state of
  messaging as a whole.
- components, which are in charge of displaying information from models.

This refactoring also introduces new JS guidelines regarding folder structure
(/static) and naming rules for JS modules.

Community PR: https://github.com/odoo/odoo/pull/39023
Enterprise PR: https://github.com/odoo/enterprise/pull/6249

Task-1914207

This PR is a collaborative work by Alexandre, Julien, Sébastien and Xavier,
with the precious help of Lucas to speed it up towards the end.

closes odoo/odoo#39023

Related: odoo/enterprise#6249
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
Co-authored-by: Alexandre Kühn <aku@odoo.com>
Co-authored-by: Julien Giannone <jgi@odoo.com>
Co-authored-by: Lucas Perais <lpe@odoo.com>
Co-authored-by: Sébastien Theys <seb@odoo.com>
Co-authored-by: Xavier Dubuc <xdu@odoo.com>
2020-06-15 18:12:21 +00:00