mirror of
https://github.com/odoo/owl.git
synced 2025-10-06 19:59:41 +07:00
a51b286671
It is common in Owl components to have anonymous function as props. However, since each rendering create a different (but equivalent) closure, Owl will consider the props different, so will update the child component, but this is (often) not necessary. This commit will help reduce the problem by introducing a new `.alike` prop suffix, that will let Owl know that each version of that specific prop should be considered the same, so, will be ignored by the props comparison code. closes #1360
157 lines
5.0 KiB
Plaintext
157 lines
5.0 KiB
Plaintext
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
|
|
exports[`refs basic use 1`] = `
|
|
"function anonymous(app, bdom, helpers
|
|
) {
|
|
let { text, createBlock, list, multi, html, toggler, comment } = bdom;
|
|
|
|
let block1 = createBlock(\`<div block-ref=\\"0\\"/>\`);
|
|
|
|
return function template(ctx, node, key = \\"\\") {
|
|
let ref1 = (el) => this.__owl__.setRef((\`div\`), el);
|
|
return block1([ref1]);
|
|
}
|
|
}"
|
|
`;
|
|
|
|
exports[`refs can use 2 refs with same name in a t-if/t-else situation 1`] = `
|
|
"function anonymous(app, bdom, helpers
|
|
) {
|
|
let { text, createBlock, list, multi, html, toggler, comment } = bdom;
|
|
|
|
let block2 = createBlock(\`<div block-ref=\\"0\\"/>\`);
|
|
let block3 = createBlock(\`<span block-ref=\\"0\\"/>\`);
|
|
|
|
return function template(ctx, node, key = \\"\\") {
|
|
let b2,b3;
|
|
if (ctx['state'].value) {
|
|
let ref1 = (el) => this.__owl__.setRef((\`coucou\`), el);
|
|
b2 = block2([ref1]);
|
|
} else {
|
|
let ref2 = (el) => this.__owl__.setRef((\`coucou\`), el);
|
|
b3 = block3([ref2]);
|
|
}
|
|
return multi([b2, b3]);
|
|
}
|
|
}"
|
|
`;
|
|
|
|
exports[`refs ref is unset when t-if goes to false after unrelated render 1`] = `
|
|
"function anonymous(app, bdom, helpers
|
|
) {
|
|
let { text, createBlock, list, multi, html, toggler, comment } = bdom;
|
|
|
|
let block2 = createBlock(\`<div block-attribute-0=\\"class\\" block-ref=\\"1\\"/>\`);
|
|
|
|
return function template(ctx, node, key = \\"\\") {
|
|
let b2;
|
|
if (ctx['state'].show) {
|
|
let attr1 = ctx['state'].class;
|
|
let ref1 = (el) => this.__owl__.setRef((\`coucou\`), el);
|
|
b2 = block2([attr1, ref1]);
|
|
}
|
|
return multi([b2]);
|
|
}
|
|
}"
|
|
`;
|
|
|
|
exports[`refs refs and recursive templates 1`] = `
|
|
"function anonymous(app, bdom, helpers
|
|
) {
|
|
let { text, createBlock, list, multi, html, toggler, comment } = bdom;
|
|
const comp1 = app.createComponent(\`Test\`, true, false, false, [\\"tree\\"]);
|
|
|
|
let block1 = createBlock(\`<p block-ref=\\"0\\"><block-text-1/><block-child-0/></p>\`);
|
|
|
|
return function template(ctx, node, key = \\"\\") {
|
|
let b2;
|
|
let ref1 = (el) => this.__owl__.setRef((\`root\`), el);
|
|
let txt1 = ctx['props'].tree.value;
|
|
if (ctx['props'].tree.child) {
|
|
b2 = comp1({tree: ctx['props'].tree.child}, key + \`__1\`, node, this, null);
|
|
}
|
|
return block1([ref1, txt1], [b2]);
|
|
}
|
|
}"
|
|
`;
|
|
|
|
exports[`refs refs and t-key 1`] = `
|
|
"function anonymous(app, bdom, helpers
|
|
) {
|
|
let { text, createBlock, list, multi, html, toggler, comment } = bdom;
|
|
|
|
let block2 = createBlock(\`<button block-handler-0=\\"click\\"/>\`);
|
|
let block3 = createBlock(\`<p block-ref=\\"0\\"/>\`);
|
|
|
|
return function template(ctx, node, key = \\"\\") {
|
|
const v1 = ctx['state'];
|
|
let hdlr1 = [()=>v1.renderId++, ctx];
|
|
const b2 = block2([hdlr1]);
|
|
const tKey_1 = ctx['state'].renderId;
|
|
let ref1 = (el) => this.__owl__.setRef((\`root\`), el);
|
|
const b3 = toggler(tKey_1, block3([ref1]));
|
|
return multi([b2, b3]);
|
|
}
|
|
}"
|
|
`;
|
|
|
|
exports[`refs refs are properly bound in slots 1`] = `
|
|
"function anonymous(app, bdom, helpers
|
|
) {
|
|
let { text, createBlock, list, multi, html, toggler, comment } = bdom;
|
|
let { capture, markRaw } = helpers;
|
|
const comp1 = app.createComponent(\`Dialog\`, true, true, false, []);
|
|
|
|
let block1 = createBlock(\`<div><span class=\\"counter\\"><block-text-0/></span><block-child-0/></div>\`);
|
|
let block2 = createBlock(\`<button block-handler-0=\\"click\\" block-ref=\\"1\\">do something</button>\`);
|
|
|
|
function slot1(ctx, node, key = \\"\\") {
|
|
let hdlr1 = [ctx['doSomething'], ctx];
|
|
let ref1 = (el) => this.__owl__.setRef((\`myButton\`), el);
|
|
return block2([hdlr1, ref1]);
|
|
}
|
|
|
|
return function template(ctx, node, key = \\"\\") {
|
|
let txt1 = ctx['state'].val;
|
|
const ctx1 = capture(ctx);
|
|
const b3 = comp1({slots: markRaw({'footer': {__render: slot1.bind(this), __ctx: ctx1}})}, key + \`__1\`, node, this, null);
|
|
return block1([txt1], [b3]);
|
|
}
|
|
}"
|
|
`;
|
|
|
|
exports[`refs refs are properly bound in slots 2`] = `
|
|
"function anonymous(app, bdom, helpers
|
|
) {
|
|
let { text, createBlock, list, multi, html, toggler, comment } = bdom;
|
|
let { callSlot } = helpers;
|
|
|
|
let block1 = createBlock(\`<span><block-child-0/></span>\`);
|
|
|
|
return function template(ctx, node, key = \\"\\") {
|
|
const b2 = callSlot(ctx, node, key, 'footer', false, {});
|
|
return block1([], [b2]);
|
|
}
|
|
}"
|
|
`;
|
|
|
|
exports[`refs throws if there are 2 same refs at the same time 1`] = `
|
|
"function anonymous(app, bdom, helpers
|
|
) {
|
|
let { text, createBlock, list, multi, html, toggler, comment } = bdom;
|
|
let { makeRefWrapper } = helpers;
|
|
|
|
let block2 = createBlock(\`<div block-ref=\\"0\\"/>\`);
|
|
let block3 = createBlock(\`<span block-ref=\\"0\\"/>\`);
|
|
|
|
return function template(ctx, node, key = \\"\\") {
|
|
let refWrapper = makeRefWrapper(this.__owl__);
|
|
let ref1 = refWrapper(\`coucou\`, (el) => this.__owl__.setRef((\`coucou\`), el));
|
|
const b2 = block2([ref1]);
|
|
let ref2 = refWrapper(\`coucou\`, (el) => this.__owl__.setRef((\`coucou\`), el));
|
|
const b3 = block3([ref2]);
|
|
return multi([b2, b3]);
|
|
}
|
|
}"
|
|
`;
|