[IMP] config: add enableTransitions flag to config

It is useful to be able to disable the t-transition directive for
testing purposes.  This commit introduces a global config flag to do
just that.

closes #768
This commit is contained in:
Géry Debongnie
2020-10-20 13:05:39 +02:00
committed by aab-odoo
parent a68d7774c6
commit b08cc1d084
4 changed files with 33 additions and 2 deletions
+19 -2
View File
@@ -2,9 +2,10 @@
The Owl framework is designed to work in many situations. However, it is The Owl framework is designed to work in many situations. However, it is
sometimes necessary to customize some behaviour. This is done by using the sometimes necessary to customize some behaviour. This is done by using the
global `config` object. It currently has one key: global `config` object. It provides two settings:
- [`mode`](#mode). - [`mode`](#mode) (default value: `prod`),
- [`enableTransitions`](#enabletransitions) (default value: `true`).
## Mode ## Mode
@@ -25,3 +26,19 @@ So, changing this setting is best done at startup.
An important job done by the `dev` mode is to validate props for each component An important job done by the `dev` mode is to validate props for each component
creation and update. Also, extra props will cause an error. creation and update. Also, extra props will cause an error.
## `enableTransitions`
Transitions are usually nice, but they can cause issues in some specific cases,
such as automated tests. It is uncomfortable having to wait for a transition
to end before moving to the next step.
To solve this issue, Owl can be configured to ignore the `t-transition` directive.
To do that, one only needs to set the `enableTransitions` flag to false:
```js
owl.config.enableTransitions = false;
```
Note that it suffers from the same drawback as the "dev" mode: all compiled
templates, if any, will keep their current behaviours.
+10
View File
@@ -8,6 +8,7 @@ import { QWeb } from "./qweb/index";
interface Config { interface Config {
mode: string; mode: string;
enableTransitions: boolean;
} }
export const config = {} as Config; export const config = {} as Config;
@@ -28,3 +29,12 @@ Object.defineProperty(config, "mode", {
} }
}, },
}); });
Object.defineProperty(config, "enableTransitions", {
get() {
return QWeb.enableTransitions;
},
set(value: boolean) {
QWeb.enableTransitions = value;
},
});
+3
View File
@@ -205,6 +205,9 @@ QWeb.addDirective({
name: "transition", name: "transition",
priority: 96, priority: 96,
atNodeCreation({ ctx, value, addNodeHook }) { atNodeCreation({ ctx, value, addNodeHook }) {
if (!QWeb.enableTransitions) {
return;
}
ctx.rootContext.shouldDefineUtils = true; ctx.rootContext.shouldDefineUtils = true;
let name = value; let name = value;
const hooks = { const hooks = {
+1
View File
@@ -212,6 +212,7 @@ export class QWeb extends EventBus {
h = h; h = h;
// dev mode enables better error messages or more costly validations // dev mode enables better error messages or more costly validations
static dev: boolean = false; static dev: boolean = false;
static enableTransitions: boolean = true;
// slots contains sub templates defined with t-set inside t-component nodes, and // slots contains sub templates defined with t-set inside t-component nodes, and
// are meant to be used by the t-slot directive. // are meant to be used by the t-slot directive.