Skip to content

Filter function does not work properly if constructor has no parameters #23

@Xotabu4

Description

@Xotabu4

Just example:

<components>
    <component>
         <name>...</name>
    </component>
    <component>
    </component>
</components>
class MyArrayOfComponents extends BaseArrayFragment<MyComponent> {
    // No params in constructor:
    constructor() {
         super($$('components component'), MyComponent)
    }

    getComponentsWithName() {
        return this.filter(component => component.hasName())
    }
}

class MyComponent extends BaseFragment {
     hasName(){
           return this.$('.name').isPresent()
     }
}

console.log(await new MyArrayOfComponents().getComponentsWithName().count()) // 2, but expected 1

Since filter function uses this.constructor(array, class) - it passes parameters, but they are not used.

Workaround for this is to use default params:

    constructor(elems = $$('components component'), clazz = MyComponent) {
         super(elems, clazz)
    }

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions