[FIX] component: props values are own property of props object

This commit is contained in:
Géry Debongnie
2022-06-03 16:39:16 +02:00
committed by aab-odoo
parent c7bd0ab85c
commit 5d5a530505
3 changed files with 57 additions and 1 deletions
+1 -1
View File
@@ -32,7 +32,7 @@ export function useComponent(): Component {
* Apply default props (only top level).
*/
function applyDefaultProps<P extends object>(props: P, defaultProps: Partial<P>): P {
const result = Object.create(props);
const result = Object.assign({} as any, props);
for (let propName in defaultProps) {
if (props[propName] === undefined) {
result[propName] = defaultProps[propName];
@@ -551,6 +551,32 @@ exports[`basics props is set on root component 1`] = `
}"
`;
exports[`basics props value are own property of props object 1`] = `
"function anonymous(app, bdom, helpers
) {
let { text, createBlock, list, multi, html, toggler, component, comment } = bdom;
let block1 = createBlock(\`<span>simple vnode</span>\`);
return function template(ctx, node, key = \\"\\") {
return block1();
}
}"
`;
exports[`basics props value are own property of props object, even with default values 1`] = `
"function anonymous(app, bdom, helpers
) {
let { text, createBlock, list, multi, html, toggler, component, comment } = bdom;
let block1 = createBlock(\`<span>simple vnode</span>\`);
return function template(ctx, node, key = \\"\\") {
return block1();
}
}"
`;
exports[`basics reconciliation alg is not confused in some specific situation 1`] = `
"function anonymous(app, bdom, helpers
) {
+30
View File
@@ -129,6 +129,36 @@ describe("basics", () => {
await app.mount(fixture);
});
test("props value are own property of props object", async () => {
expect.assertions(2);
const p = { a: 1 };
class Test extends Component {
static template = xml`<span>simple vnode</span>`;
setup() {
expect(Object.prototype.hasOwnProperty.call(this.props, "a")).toBe(true);
}
}
const app = new App(Test, { props: p });
await app.mount(fixture);
});
test("props value are own property of props object, even with default values", async () => {
expect.assertions(3);
const p = { a: 1 };
class Test extends Component {
static template = xml`<span>simple vnode</span>`;
static defaultProps = { b: 1 };
setup() {
expect(Object.prototype.hasOwnProperty.call(this.props, "a")).toBe(true);
expect(Object.prototype.hasOwnProperty.call(this.props, "b")).toBe(true);
}
}
const app = new App(Test, { props: p });
await app.mount(fixture);
});
test("some simple sanity checks (el/status)", async () => {
expect.assertions(3);
class Test extends Component {