Skip to content

Commit 2d009f4

Browse files
tomivirkkiweb-padawan
authored andcommitted
fix: add hidden property to polymer based components (#171)
1 parent a6d7543 commit 2d009f4

File tree

3 files changed

+60
-2
lines changed

3 files changed

+60
-2
lines changed

src/utils/createComponent.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ export function createComponent<I extends HTMLElement, E extends EventNames = {}
9393
elementClass: {
9494
// @ts-expect-error: it is a specific workaround for Polymer classes.
9595
name: elementClass.name,
96-
prototype: elementClass._properties,
96+
prototype: { ...elementClass._properties, hidden: Boolean },
9797
},
9898
}
9999
: options,

test/Select.spec.tsx

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import chaiDom from 'chai-dom';
66
import type { ReactElement } from 'react';
77
import { ListBox } from '../src/ListBox.js';
88
import { Item } from '../src/Item.js';
9-
import { Select } from '../src/Select.js';
9+
import { Select, SelectElement } from '../src/Select.js';
1010
import { findByQuerySelector } from './utils/findByQuerySelector.js';
1111

1212
useChaiPlugin(chaiDom);
@@ -143,4 +143,29 @@ describe('Select', () => {
143143
await expect(findByQuerySelector('div[slot="prefix"]')).to.eventually.have.text('Value:');
144144
});
145145
});
146+
147+
describe('boolean property', () => {
148+
const booleanProperties: Array<keyof typeof SelectElement.prototype & string> = [
149+
'disabled',
150+
'hidden',
151+
'opened',
152+
'draggable',
153+
];
154+
155+
booleanProperties.forEach((property) => {
156+
describe(property, () => {
157+
it(`should be true in the element if ${property} prop is true`, async () => {
158+
render(<Select items={[{ label: 'foo', value: 'foo' }]} {...{ [property]: true }} />);
159+
const select = await findByQuerySelector('vaadin-select');
160+
expect(select[property]).to.be.ok;
161+
});
162+
163+
it(`should be false in the element if ${property} prop is false`, async () => {
164+
render(<Select items={[{ label: 'foo', value: 'foo' }]} {...{ [property]: false }} />);
165+
const select = await findByQuerySelector('vaadin-select');
166+
expect(select[property]).not.to.be.ok;
167+
});
168+
});
169+
});
170+
});
146171
});

test/SideNav.spec.tsx

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { expect, use as useChaiPlugin } from '@esm-bundle/chai';
2+
import { render } from '@testing-library/react';
3+
import chaiDom from 'chai-dom';
4+
import { SideNav, SideNavElement } from '../src/SideNav.js';
5+
import { findByQuerySelector } from './utils/findByQuerySelector.js';
6+
7+
useChaiPlugin(chaiDom);
8+
9+
describe('SideNav', () => {
10+
describe('boolean property', () => {
11+
const booleanProperties: Array<keyof typeof SideNavElement.prototype & string> = [
12+
'hidden',
13+
'collapsed',
14+
'draggable',
15+
];
16+
17+
booleanProperties.forEach((property) => {
18+
describe(property, () => {
19+
it(`should be true in the element if ${property} prop is true`, async () => {
20+
render(<SideNav {...{ [property]: true }} />);
21+
const sideNav = await findByQuerySelector('vaadin-side-nav');
22+
expect(sideNav[property]).to.be.ok;
23+
});
24+
25+
it(`should be false in the element if ${property} prop is false`, async () => {
26+
render(<SideNav {...{ [property]: false }} />);
27+
const sideNav = await findByQuerySelector('vaadin-side-nav');
28+
expect(sideNav[property]).not.to.be.ok;
29+
});
30+
});
31+
});
32+
});
33+
});

0 commit comments

Comments
 (0)