Skip to content

Commit 896071c

Browse files
committed
Boolean data type support.
1 parent 048308a commit 896071c

File tree

11 files changed

+100
-28
lines changed

11 files changed

+100
-28
lines changed

src/pg/table/__examples__/basic/basic.ts

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ export default class XPgTableBasic extends HTMLElement {
2424
connectedCallback() {
2525
// this.$table.addEventListener('click', this.handleClick.bind(this));
2626
this.$table.columns = [{
27+
label: 'Select',
28+
key: 'selected',
29+
hideLabel: true,
30+
}, {
2731
label: 'Name',
2832
key: 'name'
2933
}, {
@@ -36,6 +40,7 @@ export default class XPgTableBasic extends HTMLElement {
3640
}];
3741
this.$table.data = [
3842
createTableItem({
43+
selected: false,
3944
name: 'Dipper Pines',
4045
age: 12,
4146
favorite: {
@@ -44,6 +49,7 @@ export default class XPgTableBasic extends HTMLElement {
4449
}
4550
}),
4651
createTableItem({
52+
selected: false,
4753
name: 'Mabel Pines',
4854
age: 12,
4955
favorite: {
@@ -55,12 +61,19 @@ export default class XPgTableBasic extends HTMLElement {
5561
this.$pushData.addEventListener('click', this.handlePushData.bind(this));
5662
this.$deleteLast.addEventListener('click', this.handleDeleteLast.bind(this));
5763
this.$table.addEventListener('action', (e: any) => {
58-
const { getColumn } = e.detail;
59-
getColumn('favorite').value = !getColumn('favorite').value;
60-
if (getColumn('favorite').value) {
61-
getColumn('favorite').icon = IconStar;
62-
} else {
63-
getColumn('favorite').icon = IconStarOutline;
64+
const { getColumn, key } = e.detail;
65+
switch(key) {
66+
case 'favorite':
67+
getColumn('favorite').value = !getColumn('favorite').value;
68+
if (getColumn('favorite').value) {
69+
getColumn('favorite').icon = IconStar;
70+
} else {
71+
getColumn('favorite').icon = IconStarOutline;
72+
}
73+
break;
74+
case 'selected':
75+
getColumn('selected').value = e.detail.value;
76+
break;
6477
}
6578
// CSV
6679
this.$output.textContent = this.$table.getCSV();

src/pg/table/table.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { Component, Prop, Part, forEach } from '@pictogrammers/element';
22

33
import PgTableColumn from '../tableColumn/tableColumn';
44
import PgTableRow from '../tableRow/tableRow';
5-
import PgTableCellText from '../tableCellText/tableCellText';
65

76
import template from './table.html';
87
import style from './table.css';
@@ -19,18 +18,14 @@ export function createTableItem(obj: object) {
1918
const items: any[] = [];
2019
keys.forEach((key) => {
2120
if (typeof obj[key] === 'object' && obj[key] !== null) {
22-
if (!obj[key].hasOwnProperty('type')) {
23-
obj[key].type = PgTableCellText;
24-
}
2521
items.push({
2622
key,
27-
...obj[key]
23+
...obj[key],
2824
});
2925
} else {
3026
items.push({
3127
key,
32-
value: `${obj[key] || ''}`,
33-
type: PgTableCellText,
28+
value: obj[key],
3429
});
3530
}
3631
});

src/pg/tableCellCheck/tableCellCheck.css

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@
22
display: contents;
33
}
44

5-
[part=label] {
5+
[part=cell] {
66
display: table-cell;
77
padding: 0.125rem 0.5rem;
88
background-color: var(--pg-table-row-background-color);
99
border-top: 0;
1010
border-radius: 0.125rem;
11+
}
12+
13+
[part=input] {
1114
vertical-align: middle;
1215
}
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
1-
<input type="checkbox" part="input" />
2-
<pg-icon part="icon" path="M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M19,5V19H5V5H19M10,17L6,13L7.41,11.58L10,14.17L16.59,7.58L18,9" />
1+
<div part="cell">
2+
<pg-input-check part="input" />
3+
</div>
Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,40 @@
11
import { Component, Prop, Part } from '@pictogrammers/element';
22

3-
import PgIcon from '../icon/icon';
3+
import PgInputCheck from '../inputCheck/inputCheck';
44

5-
import template from './tableCellText.html';
6-
import style from './tableCellText.css';
5+
import template from './tableCellCheck.html';
6+
import style from './tableCellCheck.css';
77

88
@Component({
9-
selector: 'pg-table-cell-text',
9+
selector: 'pg-table-cell-check',
1010
style,
11-
template
11+
template,
1212
})
1313
export default class PgTableCellCheck extends HTMLElement {
1414
@Prop() value: boolean = false;
1515
@Prop() editable: boolean = false;
1616
@Prop() key: string = '';
1717

18-
@Part() $input: HTMLInputElement;
19-
@Part() $icon: PgIcon;
18+
@Part() $input: PgInputCheck;
2019

2120
connectedCallback() {
22-
21+
this.$input.addEventListener('change', this.handleChange.bind(this));
2322
}
2423

2524
render(changes) {
2625
if (changes.value) {
27-
this.$input.checked = this.value;
26+
this.$input.value = this.value;
2827
}
2928
}
29+
30+
handleChange(e: any) {
31+
const { value } = e.target;
32+
this.dispatchEvent(
33+
new CustomEvent('action', {
34+
detail: {
35+
value,
36+
}
37+
})
38+
);
39+
}
3040
}

src/pg/tableCellNumber/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# `PgTableCellNumber`
2+
3+
See `PgTable`. Default cell render for `number` type.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
:host {
2+
display: contents;
3+
}
4+
5+
[part=label] {
6+
display: table-cell;
7+
padding: 0.125rem 0.5rem;
8+
background-color: var(--pg-table-row-background-color);
9+
border-top: 0;
10+
border-radius: 0.125rem;
11+
vertical-align: middle;
12+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<div part="label"></div>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { Component, Prop, Part } from '@pictogrammers/element';
2+
3+
import template from './tableCellNumber.html';
4+
import style from './tableCellNumber.css';
5+
6+
@Component({
7+
selector: 'pg-table-cell-number',
8+
style,
9+
template
10+
})
11+
export default class PgTableCellNumber extends HTMLElement {
12+
@Prop() value: number = 0;
13+
@Prop() key: string = '';
14+
15+
@Part() $label: HTMLDivElement;
16+
17+
render(changes) {
18+
if (changes.value) {
19+
this.$label.textContent = `${this.value}`;
20+
}
21+
}
22+
}

src/pg/tableColumn/tableColumn.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ export default class PgTableColumn extends HTMLElement {
1717

1818
render(changes: { [key: string ]: boolean}) {
1919
if (changes.label || changes.hideLabel) {
20-
console.log(this.label, this.hideLabel);
2120
if (this.hideLabel) {
2221
this.$label.ariaLabel = this.label;
2322
this.$label.textContent = '';

0 commit comments

Comments
 (0)