Géry Debongnie
ed4ab51c17
[FIX] component: tricky concurrency issue
...
This is a really interesting problem: there was a situation where a
component would not have an event handler properly bound. The reason was
that we were in a situation where the scheduler task queue was flushed
at an unfortunate timing:
- parent component template is rendered
- subcomponent is prepared:
- sub component is willStarted
- it is rendered (so, fiber counter is set to 0)
- scheduler task queue is flushed => we patch the DOM
- the code registered in the __prepare.then(handler) is executed, which
add the createHook to the vnode (but after the dom is patched)
Usually, the last two steps happen in a different order, but in an
environment with connected components, we sometimes flush the task queue
at various moments, so some code could be executed between the end of
__prepare and the registered handler.
The fix is interesting: we give a callback to the __prepare function
instead of registering a .then handler to the deferred. This callback
is then guaranteed to be called at exactly the proper timing.
Thanks seb for the hard work of finding the root cause of this issue
closes #520
2019-12-03 08:23:10 +01:00
Géry Debongnie
8c17bb0411
[FIX] component: reorganize fiber update algorithm
...
Closes #473
Closes #484
Closes #489
Closes #492
Closes #512
Co-authored-by: Aaron Bohy <aab@odoo.com >
2019-11-29 15:13:37 +01:00
Aaron Bohy
6c8b401092
[FIX] component: slots: multiple slots with components
...
Closes #508
2019-11-27 15:47:55 +01:00
Aaron Bohy
2e3e8cd603
[FIX] component: destroy not yet mounted components (2)
...
Following 2922cee6ea
Previous commit was not correct: used children with a cancelled
fiber (for instance, with a new currentFiber) could be destroyed.
This commit fixes the issue differently, by directly detecting
children that are not used anymore (and not mounted), and destroy
them directly (no need to wait for willStart promise to be resolved
anymore).
2019-11-20 14:31:03 +01:00
Aaron Bohy
2922cee6ea
[FIX] component: can destroy not yet mounted components
...
Sub-issue of #476
2019-11-20 11:43:14 +01:00
Géry Debongnie
c7773bfd2a
[FIX] qweb/component: fix scoping issue with t-model and t-foreach
...
Without this fix, the handler set by t-model did not capture properly
the expression that needs to be updated.
closes #474
2019-11-19 13:15:34 +01:00
Aaron Bohy
e5940b4b6b
[FIX] component: concurrent calls to mount and render
...
Closes #450
2019-11-14 15:12:31 +01:00
Aaron Bohy
e47f604449
[FIX] component: concurrent rendering issue
...
Resolved rendering with cancelled fiber for (not yet) destroyed
component -> Cannot read property 'sel' of null
Closes #421
2019-11-12 10:01:12 +01:00
Géry Debongnie
3c38bbc076
[REF] component: large cleanup of concurrency branch
...
We remove here old comments, add some tests and documentation, and in
general, make sure the state of the code is in a good shape
part of #330
2019-10-25 16:01:52 +02:00
Aaron Bohy
9c5cad15c1
[IMP] component: refactor rendering pipeline
...
This commit introduces a brand new rendering system based on a fiber
class and a scheduler.
closes #330
2019-10-25 16:01:52 +02:00
Géry Debongnie
f6d6da8393
[FIX] component: fix issues with component internal template key
...
closes #298
2019-10-21 09:41:27 +02:00
Géry Debongnie
895fe7c60f
[REF] store: replace ConnectedComponent by useStore hook
...
Closes #304
2019-10-14 11:06:59 +02:00
Géry Debongnie
41b0618c93
[FIX] qweb: improve generated compiled code
2019-10-11 14:10:44 +02:00
Géry Debongnie
cc82b3ffcd
[IMP] component: support dynamic t-component
2019-09-21 21:58:19 +02:00
Géry Debongnie
7a49b9d94e
[REF] component: move render props and promise to fiber
...
part of #293
2019-09-20 10:48:10 +02:00
Géry Debongnie
01eb338e69
[REF] component: move patchqueue management to fiber
...
part of #293
2019-09-20 10:47:58 +02:00
Géry Debongnie
3048c6f961
[REF] component: introduce fiber
...
part of #293
2019-09-20 10:47:55 +02:00
Géry Debongnie
9b589af75a
[REF] qweb: improve generated code in some cases
2019-09-12 09:43:09 +02:00
Géry Debongnie
ffb3263c79
[IMP] component: allow dynamic root nodes
...
closes #283
2019-09-11 13:12:57 +02:00
Géry Debongnie
e1acf66143
[IMP] component: components key is now static
...
This is a breaking change!
closes #279
2019-09-11 11:18:49 +02:00
Géry Debongnie
4cd08d25c8
[FIX] component: solve tricky concurrency issue
...
In some specific situation, a component could crash, because it was
destroyed before being mounted, but reused anyway for another rendering.
2019-09-01 21:24:54 +02:00
Géry Debongnie
5382e824b1
[REF] owl: reorganize src code in sub files
2019-07-16 13:12:08 +02:00
Géry Debongnie
591508e769
[IMP] component: allow top level widgets
...
closes #166
2019-07-12 14:31:34 +02:00
Géry Debongnie
ea015af741
[FIX] component: in slots, qweb was looking in wrong component
...
In slots, the actual parent is where the system should look for existing
widgets, not the rendering context.
closes #239
2019-07-11 15:00:05 +02:00
Géry Debongnie
bfc7c81c0d
[FIX] component: slots should preserve parented relation
...
closes #234
2019-07-10 11:01:15 +02:00
Géry Debongnie
9f1e64d399
[FIX] component: issue with t-slot,t-set,t-value, but no t-foreach
...
closes #232
2019-07-08 17:04:06 +02:00
Géry Debongnie
8e1aa71436
[FIX] component: scope issue with slots
...
Slot templates need to be able to access variables from the parent
scope.
closes #228
2019-07-08 16:24:57 +02:00
Géry Debongnie
7245ccf8f9
[IMP] component: various prop validation improvements
...
- add optional form for list props: ['optionalField?']
- accept undefined values for optional props
- allow declaring props with only boolean true
- throw error if extra prop is given to component
closes #223
2019-06-28 16:53:14 +02:00
Géry Debongnie
1b12cf9b91
[FIX] qweb/component: better handling of class attribute
...
This changes requires using the class module of vdom.
closes #192
2019-06-28 09:49:41 +02:00
Géry Debongnie
34695883c2
[REF] component: use __ for private methods
...
closes #202
2019-06-24 13:42:20 +02:00
Géry Debongnie
3d2e2a1873
[FIX] components: ignore slot if no definition is given
...
closes #203
2019-06-24 13:38:32 +02:00
Géry Debongnie
af6aca83a2
[IMP] components: allow multiple roots in slots
...
closes #199
2019-06-24 13:36:11 +02:00
Géry Debongnie
63a8fcd7e2
[FIX] component: scoping issue with t-on and t-foreach
...
closes #193
2019-06-21 16:31:24 +02:00
Géry Debongnie
e6a5934162
[REF] component: use 'component' instead of 'widget'
2019-06-20 12:31:00 +02:00
Géry Debongnie
35c1de26b8
[IMP] component: allow component name in templates
...
closes #186
2019-06-18 15:02:35 +02:00
Géry Debongnie
f013c57050
[REF] component: rename t-async into t-asyncroot
2019-06-14 15:40:32 +02:00
Géry Debongnie
c481a73a76
[ADD] component: implement t-model directive
...
closes #170
2019-06-14 15:01:29 +02:00
Aaron Bohy
e64e415b3b
[IMP] qweb: add t-async directive on t-widget
...
Closes #98
2019-06-14 14:58:24 +02:00
Aaron Bohy
3ebe985c3c
[FIX] qweb: no more duplicated nodes during transitions
...
If a node was re-added while being removed (i.e. during the remove
transition), the node was duplicated in the DOM for the delay of
the remove transition. This rev. removes the old occurence directly
in that case.
Fixes #121
2019-06-13 11:55:10 +02:00
Aaron Bohy
1c0d4b5832
[FIX] tests: update snapshots
2019-06-13 11:55:10 +02:00
Géry Debongnie
710f42d4e4
[IMP] qweb: add t-slot directive
...
Closes #67
2019-06-12 14:54:24 +02:00
Géry Debongnie
45a2b0122d
[FIX] qweb: add better support for template with only strings
2019-06-12 14:54:24 +02:00
Aaron Bohy
1ff3c32fe4
[IMP] store: allow connecting to another store
...
Closes #58
2019-06-11 11:41:29 +02:00
Géry Debongnie
7b887447da
[IMP] qweb: implements an expression evaluator
...
closes #5
2019-06-07 15:37:45 +02:00
Géry Debongnie
438b21df3f
[REF] qweb: improve variable handling
2019-06-07 15:37:45 +02:00
Aaron Bohy
49baf0de6e
[REF] qweb: t-foreach: remove integer support for t-value
...
Handling it complexifies the compiled code, and it is not really
useful (the same result can be achieved with t-foreach="Array(n)")
Part of #128
2019-06-07 14:52:12 +02:00
Aaron Bohy
e14a4fe338
[REF] qweb: t-foreach: remove x_parity
...
Part of #128
2019-06-07 14:52:12 +02:00
Aaron Bohy
32921ecc20
[IMP] qweb: t-on with t-widget: allow to bind args
2019-06-04 11:59:21 +02:00
Aaron Bohy
1c290c1172
[IMP] qweb: handle t-on modifiers with t-widget
2019-06-04 11:59:21 +02:00
Aaron Bohy
2f9d7ea58f
[REF] qweb: revamp event management
...
Closes #111
2019-06-04 11:59:21 +02:00