mirror of
https://github.com/odoo/owl.git
synced 2025-10-06 19:59:41 +07:00
[IMP] store: connected component reuse base component name
Connected component should have a unique name. To achieve this the connected component currently have an id based generated name (like `ConnectedComponent1`). To make it clearer and ease debugging this commit reuse the extended component's name to include it in the generated name in the form of `Connected<ComponentName>`.
This commit is contained in:
committed by
Géry Debongnie
parent
35c1de26b8
commit
5524c2e323
+1
-3
@@ -170,8 +170,6 @@ interface StoreOptions {
|
|||||||
deep?: boolean;
|
deep?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
let nextID = 1;
|
|
||||||
|
|
||||||
export function connect<E extends EnvWithStore, P, S>(
|
export function connect<E extends EnvWithStore, P, S>(
|
||||||
Comp: Constructor<Component<E, P, S>>,
|
Comp: Constructor<Component<E, P, S>>,
|
||||||
mapStoreToProps,
|
mapStoreToProps,
|
||||||
@@ -292,7 +290,7 @@ export function connect<E extends EnvWithStore, P, S>(
|
|||||||
// this is necessary for Owl to be able to properly deduce templates.
|
// this is necessary for Owl to be able to properly deduce templates.
|
||||||
// Otherwise, all connected components would have the same name, and then
|
// Otherwise, all connected components would have the same name, and then
|
||||||
// each component after the first will necessarily have the same template.
|
// each component after the first will necessarily have the same template.
|
||||||
let name = `ConnectedComponent${nextID++}`;
|
let name = `Connected${Comp.name}`;
|
||||||
Object.defineProperty(Result, "name", { value: name });
|
Object.defineProperty(Result, "name", { value: name });
|
||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1157,4 +1157,21 @@ describe("connecting a component to store", () => {
|
|||||||
expect(fixture.innerHTML).toBe("<div>b</div>");
|
expect(fixture.innerHTML).toBe("<div>b</div>");
|
||||||
expect(steps).toEqual(["willpatch", "patched"]);
|
expect(steps).toEqual(["willpatch", "patched"]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("connected component has its own name", () => {
|
||||||
|
function mapStoreToProps() { }
|
||||||
|
|
||||||
|
class Named extends Component<any, any, any> { };
|
||||||
|
const namedConnected = connect(Named, mapStoreToProps);
|
||||||
|
expect(namedConnected.name).toMatch('ConnectedNamed');
|
||||||
|
|
||||||
|
class ParentNamed extends Component<any, any, any>{};
|
||||||
|
class ChildNamed extends ParentNamed{};
|
||||||
|
const childConnected = connect(ChildNamed, mapStoreToProps)
|
||||||
|
expect(childConnected.name).toMatch('ConnectedChildNamed')
|
||||||
|
|
||||||
|
const Anonymous = class extends Component<any, any, any>{ };
|
||||||
|
const anonymousConnected = connect(Anonymous, mapStoreToProps);
|
||||||
|
expect(anonymousConnected.name).toMatch(/^Connectedclass_\d+/);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user