-
Notifications
You must be signed in to change notification settings - Fork 195
Expand file tree
/
Copy pathleft-bar.component.ts
More file actions
128 lines (112 loc) · 2.91 KB
/
Copy pathleft-bar.component.ts
File metadata and controls
128 lines (112 loc) · 2.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import {
AfterViewInit,
Component,
ElementRef,
EventEmitter,
Input,
OnChanges,
OnDestroy,
OnInit,
Output
} from '@angular/core';
import { DataStore } from '@app/globals';
import { version } from '@src/environments/environment';
import { OrganizationService, SettingService } from '@app/services';
import _ from 'lodash-es';
@Component({
standalone: false,
selector: 'elements-left-bar',
templateUrl: 'left-bar.component.html',
styleUrls: ['left-bar.component.scss']
})
export class ElementLeftBarComponent implements OnInit, AfterViewInit, OnDestroy {
@Output() menuCollapsedToggle: EventEmitter<boolean> = new EventEmitter();
@Input() collapsed: boolean = false;
private resizeObserver!: ResizeObserver;
showTree = true;
version = version;
menus: any[] = [];
hasXPack: boolean = localStorage.getItem('hasXPack') === '1';
constructor(
public _settingSvc: SettingService,
private _orgSvc: OrganizationService,
private el: ElementRef
) {
this.onOrgChangeReloadTree();
}
ngOnInit() {
this.menus = [
{
name: 'assets',
icon: 'fa-inbox',
click: () => this.menuClick()
},
{
name: 'applications',
icon: 'fa-th',
click: () => this.menuClick()
}
];
this.onResize(window);
window.addEventListener('resize', _.debounce(this.onResize, 300));
this._settingSvc.afterInited().then(() => {
this.hasXPack = this._settingSvc.hasXPack();
localStorage.setItem('hasXPack', this.hasXPack ? '1' : '0');
});
}
onResize(event) {
const width = event.currentTarget ? event.currentTarget.innerWidth : event.innerWidth;
if (width < 768) {
this.isMobile = true;
// this.overlayMenu = true;
} else {
this.isMobile = false;
}
}
menuClick(settings = null) {
this.toggle();
}
onToggleMobileLayout() {
if (this.isMobile) {
// this.overlayMenu = !this.overlayMenu;
}
}
ngAfterViewInit() {
this.resizeObserver = new ResizeObserver(entries => {
for (const entry of entries) {
const width = entry.contentRect.width;
// 这里你可以触发你需要的逻辑
}
});
this.resizeObserver.observe(this.el.nativeElement);
}
ngOnDestroy() {
this.resizeObserver.disconnect();
}
_isMobile = false;
get isMobile() {
return this._isMobile;
}
set isMobile(value) {
this._isMobile = value;
}
static Hide() {
DataStore.showLeftBar = false;
window.dispatchEvent(new Event('resize'));
}
static Show() {
DataStore.showLeftBar = true;
window.dispatchEvent(new Event('resize'));
}
onOrgChangeReloadTree() {
this._orgSvc.currentOrgChange$.subscribe(() => {
this.showTree = false;
setTimeout(() => (this.showTree = true), 100);
});
}
toggle() {
this.collapsed = !this.collapsed;
this.menuCollapsedToggle.emit(this.collapsed);
// this.menuClick();
}
}