mirror of
https://github.com/odoo/owl.git
synced 2025-10-06 19:59:41 +07:00
[FIX] component: props values are own property of props object
This commit is contained in:
@@ -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
|
||||
) {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user