Skip to content

Commit

Permalink
feat: Adds findAllComponents selector
Browse files Browse the repository at this point in the history
  • Loading branch information
orangevolon committed Oct 29, 2024
1 parent 771adf2 commit c6dc8e3
Show file tree
Hide file tree
Showing 5 changed files with 262 additions and 28 deletions.
9 changes: 3 additions & 6 deletions src/core/dom.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,6 @@ interface WrapperClass<Wrapper, ElementType> {
new (element: ElementType): Wrapper;
}

interface RootWrapperClass<Wrapper, ElementType> extends WrapperClass<Wrapper, ElementType> {
rootSelector: string;
}

export class AbstractWrapper<ElementType extends Element>
implements IElementWrapper<ElementType, Array<ElementWrapper<ElementType>>>
{
Expand Down Expand Up @@ -137,9 +133,10 @@ export class AbstractWrapper<ElementType extends Element>
}

findAllComponents<Wrapper extends ComponentWrapper<ElementType>, ElementType extends HTMLElement>(
ComponentClass: RootWrapperClass<Wrapper, ElementType>
selector: string,
ComponentClass: WrapperClass<Wrapper, ElementType>
): Array<Wrapper> {
const elementWrappers = this.findAll<ElementType>(`.${ComponentClass.rootSelector}`);
const elementWrappers = this.findAll<ElementType>(selector);
return elementWrappers.map(wrapper => new ComponentClass(wrapper.getElement()));
}
}
Expand Down
12 changes: 3 additions & 9 deletions src/core/selectors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,6 @@ interface WrapperClass<Wrapper> {
new (selector: string): Wrapper;
}

interface RootWrapperClass<Wrapper> extends WrapperClass<Wrapper> {
rootSelector: string;
}

export class AbstractWrapper implements IElementWrapper<string, MultiElementWrapper<ElementWrapper>> {
constructor(protected root: string) {}

Expand Down Expand Up @@ -48,12 +44,10 @@ export class AbstractWrapper implements IElementWrapper<string, MultiElementWrap
}

findAllComponents<Wrapper extends ComponentWrapper>(
ComponentClass: RootWrapperClass<Wrapper>
selector: string,
ComponentClass: WrapperClass<Wrapper>
): MultiElementWrapper<Wrapper> {
return new MultiElementWrapper(
getRootSelector(`.${ComponentClass.rootSelector}`, this.root),
selector => new ComponentClass(selector)
);
return new MultiElementWrapper(getRootSelector(selector, this.root), selector => new ComponentClass(selector));
}

toSelector(): string {
Expand Down
225 changes: 225 additions & 0 deletions src/core/test/__snapshots__/documenter.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,35 @@ Note that programmatic events ignore disabled attribute and will trigger listene
"type": "reference",
},
},
{
"name": "findAllComponents",
"parameters": [
{
"flags": {
"isOptional": false,
},
"name": "selector",
"typeName": "string",
},
{
"flags": {
"isOptional": false,
},
"name": "ComponentClass",
"typeName": "WrapperClass",
},
],
"returnType": {
"name": "Array",
"type": "reference",
"typeArguments": [
{
"name": "Wrapper",
"type": "typeParameter",
},
],
},
},
{
"name": "findByClassName",
"parameters": [
Expand Down Expand Up @@ -109,6 +138,7 @@ Note that programmatic events ignore disabled attribute and will trigger listene
"isOptional": false,
},
"name": "ComponentClass",
"typeName": "WrapperClass",
},
],
"returnType": {
Expand Down Expand Up @@ -306,6 +336,38 @@ Note that programmatic events ignore disabled attribute and will trigger listene
"type": "reference",
},
},
{
"inheritedFrom": {
"name": "AbstractWrapper.findAllComponents",
},
"name": "findAllComponents",
"parameters": [
{
"flags": {
"isOptional": false,
},
"name": "selector",
"typeName": "string",
},
{
"flags": {
"isOptional": false,
},
"name": "ComponentClass",
"typeName": "WrapperClass",
},
],
"returnType": {
"name": "Array",
"type": "reference",
"typeArguments": [
{
"name": "Wrapper",
"type": "typeParameter",
},
],
},
},
{
"inheritedFrom": {
"name": "AbstractWrapper.findByClassName",
Expand Down Expand Up @@ -343,6 +405,7 @@ Note that programmatic events ignore disabled attribute and will trigger listene
"isOptional": false,
},
"name": "ComponentClass",
"typeName": "WrapperClass",
},
],
"returnType": {
Expand Down Expand Up @@ -561,6 +624,38 @@ Note that programmatic events ignore disabled attribute and will trigger listene
"type": "reference",
},
},
{
"inheritedFrom": {
"name": "AbstractWrapper.findAllComponents",
},
"name": "findAllComponents",
"parameters": [
{
"flags": {
"isOptional": false,
},
"name": "selector",
"typeName": "string",
},
{
"flags": {
"isOptional": false,
},
"name": "ComponentClass",
"typeName": "WrapperClass",
},
],
"returnType": {
"name": "Array",
"type": "reference",
"typeArguments": [
{
"name": "Wrapper",
"type": "typeParameter",
},
],
},
},
{
"inheritedFrom": {
"name": "AbstractWrapper.findByClassName",
Expand Down Expand Up @@ -598,6 +693,7 @@ Note that programmatic events ignore disabled attribute and will trigger listene
"isOptional": false,
},
"name": "ComponentClass",
"typeName": "WrapperClass",
},
],
"returnType": {
Expand Down Expand Up @@ -792,6 +888,35 @@ exports[`documenter output > selectors 1`] = `
],
},
},
{
"name": "findAllComponents",
"parameters": [
{
"flags": {
"isOptional": false,
},
"name": "selector",
"typeName": "string",
},
{
"flags": {
"isOptional": false,
},
"name": "ComponentClass",
"typeName": "WrapperClass",
},
],
"returnType": {
"name": "MultiElementWrapper",
"type": "reference",
"typeArguments": [
{
"name": "Wrapper",
"type": "typeParameter",
},
],
},
},
{
"name": "findByClassName",
"parameters": [
Expand Down Expand Up @@ -823,6 +948,7 @@ exports[`documenter output > selectors 1`] = `
"isOptional": false,
},
"name": "ComponentClass",
"typeName": "WrapperClass",
},
],
"returnType": {
Expand Down Expand Up @@ -936,6 +1062,38 @@ exports[`documenter output > selectors 1`] = `
],
},
},
{
"inheritedFrom": {
"name": "AbstractWrapper.findAllComponents",
},
"name": "findAllComponents",
"parameters": [
{
"flags": {
"isOptional": false,
},
"name": "selector",
"typeName": "string",
},
{
"flags": {
"isOptional": false,
},
"name": "ComponentClass",
"typeName": "WrapperClass",
},
],
"returnType": {
"name": "MultiElementWrapper",
"type": "reference",
"typeArguments": [
{
"name": "Wrapper",
"type": "typeParameter",
},
],
},
},
{
"inheritedFrom": {
"name": "AbstractWrapper.findByClassName",
Expand Down Expand Up @@ -973,6 +1131,7 @@ exports[`documenter output > selectors 1`] = `
"isOptional": false,
},
"name": "ComponentClass",
"typeName": "WrapperClass",
},
],
"returnType": {
Expand Down Expand Up @@ -1095,6 +1254,38 @@ exports[`documenter output > selectors 1`] = `
],
},
},
{
"inheritedFrom": {
"name": "AbstractWrapper.findAllComponents",
},
"name": "findAllComponents",
"parameters": [
{
"flags": {
"isOptional": false,
},
"name": "selector",
"typeName": "string",
},
{
"flags": {
"isOptional": false,
},
"name": "ComponentClass",
"typeName": "WrapperClass",
},
],
"returnType": {
"name": "MultiElementWrapper",
"type": "reference",
"typeArguments": [
{
"name": "Wrapper",
"type": "typeParameter",
},
],
},
},
{
"inheritedFrom": {
"name": "AbstractWrapper.findByClassName",
Expand Down Expand Up @@ -1132,6 +1323,7 @@ exports[`documenter output > selectors 1`] = `
"isOptional": false,
},
"name": "ComponentClass",
"typeName": "WrapperClass",
},
],
"returnType": {
Expand Down Expand Up @@ -1254,6 +1446,38 @@ exports[`documenter output > selectors 1`] = `
],
},
},
{
"inheritedFrom": {
"name": "AbstractWrapper.findAllComponents",
},
"name": "findAllComponents",
"parameters": [
{
"flags": {
"isOptional": false,
},
"name": "selector",
"typeName": "string",
},
{
"flags": {
"isOptional": false,
},
"name": "ComponentClass",
"typeName": "WrapperClass",
},
],
"returnType": {
"name": "MultiElementWrapper",
"type": "reference",
"typeArguments": [
{
"name": "Wrapper",
"type": "typeParameter",
},
],
},
},
{
"inheritedFrom": {
"name": "AbstractWrapper.findByClassName",
Expand Down Expand Up @@ -1291,6 +1515,7 @@ exports[`documenter output > selectors 1`] = `
"isOptional": false,
},
"name": "ComponentClass",
"typeName": "WrapperClass",
},
],
"returnType": {
Expand Down
Loading

0 comments on commit c6dc8e3

Please sign in to comment.