import { Component } from '@angular/core'; import { CommonModule } from '@angular/common'; import { TreeViewComponent } from "../../../../../ui-essentials/src/public-api"; import { TreeNode } from '../../../../../../dist/ui-essentials/lib/components/data-display/tree-view/tree-view.component'; @Component({ selector: 'ui-tree-view-demo', standalone: true, imports: [CommonModule, TreeViewComponent], template: `

Tree View Demo

Sizes

@for (size of sizes; track size) {

{{ size | titlecase }} Size

}

Variants

@for (variant of variants; track variant) {

{{ variant | titlecase }} Variant

}

Features

Multi-Select

With Icons

States

Loading

Empty

Disabled Nodes

Interactive Controls

@if (selectedInfo) {
Selected: {{ selectedInfo }}
} @if (lastAction) {
Last Action: {{ lastAction }}
}

File System Example

@if (selectedFile) {
Selected File: {{ selectedFile }}
}
`, styleUrl: './tree-view-demo.component.scss' }) export class TreeViewDemoComponent { sizes = ['sm', 'md', 'lg'] as const; variants = ['primary', 'secondary'] as const; selectedInfo = ''; lastAction = ''; selectedFile = ''; basicNodes: TreeNode[] = [ { id: 'item1', label: 'Item 1', children: [ { id: 'item1-1', label: 'Sub Item 1.1' }, { id: 'item1-2', label: 'Sub Item 1.2' } ] }, { id: 'item2', label: 'Item 2', children: [ { id: 'item2-1', label: 'Sub Item 2.1', children: [ { id: 'item2-1-1', label: 'Sub Sub Item 2.1.1' } ] } ] }, { id: 'item3', label: 'Item 3' } ]; featureNodes: TreeNode[] = [ { id: 'feature1', label: 'Authentication', expanded: true, children: [ { id: 'feature1-1', label: 'Login', selected: true }, { id: 'feature1-2', label: 'Registration' }, { id: 'feature1-3', label: 'Password Reset' } ] }, { id: 'feature2', label: 'User Management', children: [ { id: 'feature2-1', label: 'User Profile' }, { id: 'feature2-2', label: 'User Settings', selected: true } ] } ]; iconNodes: TreeNode[] = [ { id: 'folder1', label: 'Documents', icon: '📁', expanded: true, children: [ { id: 'file1', label: 'Report.pdf', icon: '📄' }, { id: 'file2', label: 'Presentation.pptx', icon: '📊' } ] }, { id: 'folder2', label: 'Images', icon: '📁', children: [ { id: 'file3', label: 'Photo1.jpg', icon: '🖼️' }, { id: 'file4', label: 'Logo.png', icon: '🖼️' } ] } ]; disabledNodes: TreeNode[] = [ { id: 'enabled1', label: 'Enabled Item', children: [ { id: 'disabled1', label: 'Disabled Sub Item', disabled: true }, { id: 'enabled2', label: 'Enabled Sub Item' } ] }, { id: 'disabled2', label: 'Disabled Item', disabled: true } ]; interactiveNodes: TreeNode[] = JSON.parse(JSON.stringify(this.basicNodes)); fileSystemNodes: TreeNode[] = [ { id: 'src', label: 'src', icon: '📁', expanded: true, children: [ { id: 'components', label: 'components', icon: '📁', children: [ { id: 'button.ts', label: 'button.component.ts', icon: '📄' }, { id: 'input.ts', label: 'input.component.ts', icon: '📄' } ] }, { id: 'services', label: 'services', icon: '📁', children: [ { id: 'api.ts', label: 'api.service.ts', icon: '📄' }, { id: 'auth.ts', label: 'auth.service.ts', icon: '📄' } ] }, { id: 'main.ts', label: 'main.ts', icon: '📄' } ] }, { id: 'assets', label: 'assets', icon: '📁', children: [ { id: 'logo.png', label: 'logo.png', icon: '🖼️' }, { id: 'styles.css', label: 'styles.css', icon: '📄' } ] }, { id: 'package.json', label: 'package.json', icon: '📄' }, { id: 'readme.md', label: 'README.md', icon: '📄' } ]; handleNodeSelected(event: { node: TreeNode; selected: boolean }): void { this.lastAction = `${event.selected ? 'Selected' : 'Deselected'}: ${event.node.label}`; console.log('Node selected:', event); } handleNodeToggled(event: { node: TreeNode; expanded: boolean }): void { this.lastAction = `${event.expanded ? 'Expanded' : 'Collapsed'}: ${event.node.label}`; console.log('Node toggled:', event); } handleNodesChanged(nodes: TreeNode[]): void { this.interactiveNodes = nodes; const selected = this.getSelectedNodes(nodes); this.selectedInfo = selected.map(n => n.label).join(', ') || 'None'; } handleFileSystemSelect(event: { node: TreeNode; selected: boolean }): void { this.selectedFile = event.selected ? event.node.label : ''; } expandAll(): void { this.setAllExpanded(this.interactiveNodes, true); this.lastAction = 'Expanded all nodes'; } collapseAll(): void { this.setAllExpanded(this.interactiveNodes, false); this.lastAction = 'Collapsed all nodes'; } getSelected(): void { const selected = this.getSelectedNodes(this.interactiveNodes); this.selectedInfo = selected.map(n => n.label).join(', ') || 'None'; this.lastAction = `Found ${selected.length} selected nodes`; } clearSelection(): void { this.clearAllSelections(this.interactiveNodes); this.selectedInfo = 'None'; this.lastAction = 'Cleared all selections'; } private setAllExpanded(nodes: TreeNode[], expanded: boolean): void { for (const node of nodes) { if (node.children && node.children.length > 0) { node.expanded = expanded; this.setAllExpanded(node.children, expanded); } } } private getSelectedNodes(nodes: TreeNode[]): TreeNode[] { const selected: TreeNode[] = []; for (const node of nodes) { if (node.selected) { selected.push(node); } if (node.children) { selected.push(...this.getSelectedNodes(node.children)); } } return selected; } private clearAllSelections(nodes: TreeNode[]): void { for (const node of nodes) { node.selected = false; if (node.children) { this.clearAllSelections(node.children); } } } }