Skip to content

Commit d9cc15b

Browse files
committed
Fixing up examples
1 parent be0c53e commit d9cc15b

File tree

5 files changed

+113
-41
lines changed

5 files changed

+113
-41
lines changed

src/pg/toast/toast.css

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
[part~=button] {
2+
position: fixed;
3+
top: 1rem;
4+
right: 1rem;
25
display: flex;
36
background: #737E9E;
47
box-shadow: 0 0 0.5rem rgba(0, 0, 0, 0.4);

src/pg/toast/toast.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export default class PgToast extends PgOverlay {
4242
// Position toast
4343
// close toast
4444
this.$button.addEventListener('click', () => {
45-
45+
this.remove();
4646
});
4747
}
4848

src/pg/tree/__examples__/basic/basic.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@
55
</div>
66
<h2>Tools</h2>
77
<button part="addItem">Add Item</button>
8+
<button part="addFolder">Add Folder</button>
89
<button part="removeItem">Remove Item</button>
9-
<button part="updateItem">Update Label Item</button>
10+
<button part="updateItem">Update Selected Label Item</button>

src/pg/tree/__examples__/basic/basic.ts

Lines changed: 56 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Component, Part, Prop } from '@pictogrammers/element';
2-
import PgTree from '../../tree';
2+
import PgTree, { SelectedTreeItem } from '../../tree';
33

44
import template from './basic.html';
55
import PgTreeButtonIcon from '../../../treeButtonIcon/treeButtonIcon';
@@ -13,10 +13,10 @@ const IconEyeOff = 'M2,5.27L3.28,4L20,20.72L18.73,22L15.65,18.92C14.5,19.3 13.28
1313
const IconLock = 'M12,17A2,2 0 0,0 14,15C14,13.89 13.1,13 12,13A2,2 0 0,0 10,15A2,2 0 0,0 12,17M18,8A2,2 0 0,1 20,10V20A2,2 0 0,1 18,22H6A2,2 0 0,1 4,20V10C4,8.89 4.9,8 6,8H7V6A5,5 0 0,1 12,1A5,5 0 0,1 17,6V8H18M12,3A3,3 0 0,0 9,6V8H15V6A3,3 0 0,0 12,3Z';
1414
const IconUnlock = 'M18,8A2,2 0 0,1 20,10V20A2,2 0 0,1 18,22H6C4.89,22 4,21.1 4,20V10A2,2 0 0,1 6,8H15V6A3,3 0 0,0 12,3A3,3 0 0,0 9,6H7A5,5 0 0,1 12,1A5,5 0 0,1 17,6V8H18M12,17A2,2 0 0,0 14,15A2,2 0 0,0 12,13A2,2 0 0,0 10,15A2,2 0 0,0 12,17Z';
1515

16-
function createItem(label, expanded = false) {
16+
function createFolder(label, expanded = true, items: any[] = []) {
1717
return {
1818
icon: {
19-
path: IconAccount
19+
path: IconFolder
2020
},
2121
label,
2222
expanded,
@@ -31,19 +31,26 @@ function createItem(label, expanded = false) {
3131
icon: IconUnlock,
3232
enabled: false
3333
}],
34-
items: [{
35-
label: 'Sub Item 1',
36-
icon: { path: IconFile },
37-
}, {
38-
label: 'Sub Item 2',
39-
icon: { path: IconFolder },
40-
items: [{
41-
label: 'Sub Item ?',
42-
icon: { path: IconFile },
43-
}]
44-
}, {
45-
label: 'Sub Item 3',
46-
icon: { path: IconFile },
34+
items
35+
};
36+
}
37+
38+
function createItem(label) {
39+
return {
40+
icon: {
41+
path: IconFile
42+
},
43+
label,
44+
actions: [{
45+
type: PgTreeButtonIcon,
46+
icon: IconEye,
47+
enabled: true
48+
},
49+
{
50+
type: PgTreeButtonIcon,
51+
label: 'Delete',
52+
icon: IconUnlock,
53+
enabled: false
4754
}]
4855
};
4956
}
@@ -55,6 +62,7 @@ function createItem(label, expanded = false) {
5562
export default class XPgTreeBasic extends HTMLElement {
5663
@Part() $tree: PgTree;
5764
@Part() $addItem: HTMLButtonElement;
65+
@Part() $addFolder: HTMLButtonElement;
5866
@Part() $removeItem: HTMLButtonElement;
5967
@Part() $updateItem: HTMLButtonElement;
6068

@@ -94,24 +102,49 @@ export default class XPgTreeBasic extends HTMLElement {
94102
this.#selectedItems = e.detail.items;
95103
});
96104
this.$tree.items = [
97-
createItem('Item 1', true),
105+
createFolder('Folder 1', true, [
106+
createItem('Item 1')
107+
]),
98108
createItem('Item 2')
99109
];
100110

101-
let next: number = 2;
111+
let fileNext: number = 3;
102112
this.$addItem.addEventListener('click', () => {
103-
next++;
104-
this.$tree.items.push(createItem(`Item ${next}`));
113+
this.#selectedItems.forEach((selected: any) => {
114+
if (selected.getData().items) {
115+
selected.getData().items.push(createItem(`Item ${fileNext}`));
116+
} else {
117+
selected.getParentData().items.push(createItem(`Item ${fileNext}`));
118+
}
119+
fileNext++;
120+
});
121+
});
122+
123+
let folderNext = 2;
124+
this.$addFolder.addEventListener('click', () => {
125+
this.#selectedItems.forEach((selected: SelectedTreeItem) => {
126+
if (selected.getData().items) {
127+
selected.getData().items.push(createFolder(`Folder ${folderNext}`));
128+
} else {
129+
selected.getParentData().items.push(createFolder(`Folder ${folderNext}`));
130+
}
131+
folderNext++;
132+
});
105133
});
106134

107135
this.$removeItem.addEventListener('click', () => {
108-
this.$tree.items.pop();
136+
if (this.#selectedItems.length === 0) {
137+
alert('Select items first!');
138+
}
139+
this.#selectedItems.forEach((item: SelectedTreeItem) => {
140+
item.remove();
141+
});
109142
});
110143

111144
let updatedTimes = 0;
112145
this.$updateItem.addEventListener('click', () => {
113-
this.#selectedItems.forEach((selected: PgTreeItem) => {
114-
selected.label = `Updated ${updatedTimes++}`;
146+
this.#selectedItems.forEach((selected: SelectedTreeItem) => {
147+
selected.getData().label = `Updated ${updatedTimes++}`;
115148
});
116149
});
117150
}

src/pg/tree/tree.ts

Lines changed: 51 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@ import PgTreeItem from '../treeItem/treeItem';
55
import template from './tree.html';
66
import style from './tree.css';
77

8+
export type SelectedTreeItem = {
9+
indexes: number[];
10+
remove: () => void;
11+
getData: () => any;
12+
getParentData: () => any;
13+
}
14+
815
@Component({
916
selector: 'pg-tree',
1017
style,
@@ -49,27 +56,21 @@ export default class PgTree extends HTMLElement {
4956
// Dispatch Event
5057
this.dispatchEvent(new CustomEvent('select', {
5158
detail: {
52-
items: Array.from(this.#selectedIndexes).map(([key, value]) => {
53-
return this.#getItem(value);
54-
})
59+
items: [...this.#selectedIndexes.values()].map((indexes: any) => {
60+
return this.#wrap(indexes);
61+
}),
5562
}
5663
}));
64+
//Array.from(this.#selectedIndexes).map(([key, value]) => {
65+
// return this.#getItem(value);
66+
// })
5767
});
5868
this.$items.addEventListener('keydown', (e: any) => {
5969
if (e.key === 'Delete') {
60-
this.items[0].items.pop();
61-
/*this.#selected.forEach((item: any) => {
62-
const ind = this.#selectedIndexes.get(item);
63-
ind.reduce((item: any, index, i) => {
64-
console.log(item.item, index, i, ind.length, arguments);
65-
if (i === ind.length - 1) {
66-
item.items.pop();
67-
//item.items.slice(index, 1);
68-
return;
69-
}
70-
return item.items[index];
71-
}, this);
72-
});*/
70+
this.#selectedIndexes.forEach((indexes: number[]) => {
71+
this.#removeItem(indexes);
72+
});
73+
this.#selectedIndexes.clear();
7374
}
7475
});
7576
this.$items.addEventListener('itemdragstart', (e: any) => {
@@ -118,12 +119,46 @@ export default class PgTree extends HTMLElement {
118119
});
119120
}
120121

122+
#removeItem(indexes: number[]) {
123+
const deleteIndex = indexes[indexes.length - 1];
124+
const tempIndexes = indexes.slice(0, indexes.length - 1);
125+
const item = tempIndexes.reduce((item: any, index) => {
126+
return item.items[index];
127+
}, this);
128+
item.items.splice(deleteIndex, 1);
129+
}
130+
121131
#getItem(indexes: number[]) {
122132
return indexes.reduce((item: any, index) => {
123133
return item.items[index];
124134
}, this);
125135
}
126136

137+
/**
138+
* Appends helper methods for selected
139+
*
140+
* @param indexes indexes
141+
*/
142+
#wrap(indexes: number[]) {
143+
return {
144+
indexes,
145+
remove: () => {
146+
this.#removeItem(indexes);
147+
this.#selectedIndexes.clear();
148+
},
149+
getData: () => {
150+
return this.#getItem(indexes);
151+
},
152+
getParentData: () => {
153+
const parent = indexes.slice(0, indexes.length - 1);
154+
if (parent.length === 0) {
155+
return this;
156+
}
157+
return this.#getItem(parent);
158+
}
159+
}
160+
}
161+
127162
render(changes) {
128163
if (changes.items) {
129164
console.log('yay', this.items.map(x => x));

0 commit comments

Comments
 (0)