11import { Component , Part , Prop } from '@pictogrammers/element' ;
2- import PgTree from '../../tree' ;
2+ import PgTree , { SelectedTreeItem } from '../../tree' ;
33
44import template from './basic.html' ;
55import 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
1313const 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' ;
1414const 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) {
5562export 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 }
0 commit comments