Commit Graph
35 Commits
Author SHA1 Message Date
Sébastien Theys 8ce96ac850 [IMP] mail: rename js Model to Record
Removes confusion in technical code. An instance of Thread is a thread, by
analogy a record should be an instance of Record.

closes odoo/odoo#85359

Related: odoo/enterprise#24731
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
2022-02-24 18:42:13 +00:00
Sébastien Theys 611046040b [IMP] mail, *: avoid repetition in inverse relation type (js)
* = hr, im_livechat, website_livechat

task-2741386

closes odoo/odoo#83059

Related: odoo/enterprise#23616
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
2022-01-20 13:29:04 +00:00
Louis Wicket (wil) 1d8da9232a [IMP] mail: rename model model
Rename javascript model `mail.model` to `Model` in order to distinguish
javascript models from python models.

Part of task-2701674.

closes odoo/odoo#81390

Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
2021-12-15 01:03:26 +00:00
Sébastien Theys 80232c52db [FIX] mail, im_livechat: improve performance of sidebar item counter
Avoid iterating over all channels every time a new channel is added.

Part of task-2702450

closes odoo/odoo#81264

X-original-commit: 7686be710ba919079f6ea97293ac99dde79f843b
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
2021-12-11 10:54:05 +00:00
Sébastien Theys e80af1ce11 [FIX] mail, im_livechat: improve performance of discuss sidebar item
Avoid iterating over all channels every time a new channel is added.

Part of task-2702450

closes odoo/odoo#81235

X-original-commit: f5958f7ae15acff6a1ab6fc1bdf795b4c1f1e071
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
2021-12-10 14:33:43 +00:00
Sébastien Theys e1d3815348 [FIX] mail: avoid costly debug operations
These errors should not happen in production, it is only helpful for debugging.

The opportunity is taken to limit our debug code to a messaging specific debug,
as debug '1' is used in production to see extra features, and debug 'assets' is
necessary to get decent stack trace.

The easiest way to enable this debug mode at the time of this commit is to
either manually set the value to true in the code, or to type the following line
in the browser console if editing the code is not an option:
`odoo.__DEBUG__.messaging.modelManager.isDebug = true;`

Part of task-2702450

closes odoo/odoo#81075

X-original-commit: f9ae7510c8adaa83379b90f798ee535ede99be25
Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
2021-12-08 16:28:45 +00:00
Sébastien Theys 7925804e39 [FIX] mail: ensure unlink-all properly does its job for x2many
Before this commit, unlink-all would sometimes fail to unlink more than one
record.
This seems to be the case in particular for x2many relations with isCausal true.

Indeed, the delete from isCausal is itself calling unlink-all on the inverse
relation (the same record that was being unlinked-all in the first place) which
would pre-emptively remove it from the same Set that was used during the initial
iteration.

The solution is to make a copy of the Set before iterating it to ensure all
records that were planned to be removed are actually removed.

Candidate fix for task-2410314 and definitely necessary for data integrity in
general.

closes odoo/odoo#80913

X-original-commit: 0077b93fea6f8c39ee535f19426c3f95a0e97e9f
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
2021-12-06 14:29:47 +00:00
Louis Wicket (wil) 2cb3f774a1 [IMP] mail,*: change model declaration syntax
* = calendar, crm_livechat, hr, hr_holidays, im_livechat, mail_bot, sms,
     snailmail, website_livechat

This commit will change the declaration of the models with the aim of
getting closer to a plain JSON-object. It allows us to eliminate a wide
portion of boilerplate code, making the declaration shorter, more
declarative, and less redundant, but mainly, it prepares the ground for
further changes.

Task-2695223

closes odoo/odoo#79259

Related: odoo/enterprise#22042
Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
2021-11-23 17:53:46 +00:00
Sébastien Theys 3a87aaf914 [IMP] mail, *: clean up message component by introducing view model
* = hr, hr_holidays, sms, snailmail, website_livechat

Message model incorrectly contained data related to a specific component (only
one) even though there can be multiple message components per message model.

This cascaded to adapting related component/models to the same principle.

closes odoo/odoo#76718

closes odoo/odoo#77779

Related: odoo/enterprise#20964
Related: odoo/enterprise#21426
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
2021-10-05 15:40:49 +00:00
Louis Wicket (wil) 80d74e7ee0 [IMP] mail, web, *: add support for guest users
* = crm_livechat, hr, hr_holidays, im_livechat, mail_bot, purchase, sms,
    snailmail, survey, test_discuss_full, test_mail, web_editor, website,
    website_livechat

 - Create new model `mail.guest` for guests.
 - Rewrite some RPCs to target routes rather than model methods so that
   guests are able to use them.
 - Patch JS and python models to support guests.
 - Create a stand-alone page and boot the channel in it.

task-2494829

closes odoo/odoo#75496

Related: odoo/enterprise#20417
Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
2021-09-02 00:43:34 +00:00
Sébastien Theys b1f3340042 [IMP] mail, hr_holidays: add member list on channels
task-2368906

closes odoo/odoo#75605

Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
2021-08-26 11:34:52 +00:00
Sébastien Theys fc0c947062 [IMP] mail: remove model manager from model field
Part of task-2582313
2021-08-19 13:34:59 +00:00
Sébastien Theys 5d0b8cdfc9 [IMP] mail: make messaging and models available in models without env
Part of task-2582313
2021-08-18 12:20:51 +00:00
Sébastien Theys a795a2f7d8 [IMP] mail, *: remove useStore and dependencies
* = hr_holidays, im_livechat, snailmail, website_livechat

Part of task-2338825
Makes task-2261221 and task-2431526 obsolete

closes odoo/odoo#74589

Related: odoo/enterprise#20020
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
2021-08-03 16:44:40 +00:00
Sébastien Theys 2bffa11758 [FIX] mail: properly handle undefined in js compute related
The value of the related field should be cleared:
- If the other record no longer exists.
- If the target value is undefined.

This might fix hard to understand bugs, such as task-2410314

closes odoo/odoo#73743

X-original-commit: f1ff90bf48f22a4bed299abeb8e1d415cdfab9e0
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
2021-07-14 19:46:35 +00:00
Didier (did) 6240617358 [IMP] mail, *: use explicit export instead of default
* = hr, hr_holidays, im_livechat, sms, snailmail, website_livechat,
    website_slides

Exporting directly on the line of the class or variable definition is less lines
of code and less repetition (and risk or mistake).

Exporting with a name instead of default allows to catch typos more easily when
importing and ensures the same name is used for consistency (and ease of grep).

closes odoo/odoo#72597

Related: odoo/enterprise#19224
Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
2021-06-25 14:56:52 +00:00
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
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
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 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 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