flexacore-ui-dev
Version:
Universal UI Framework for CDN, React, Angular, Vue, Svelte with TypeScript support
83 lines (74 loc) • 2.16 kB
text/typescript
import { Component, Input, Output, EventEmitter, ContentChildren, QueryList, AfterContentInit, HostListener, ElementRef } from '@angular/core';
export class FCDropdownItemComponent {
href: string = '#';
disabled: boolean = false;
onClick = new EventEmitter<Event>();
handleClick(event: Event) {
if (!this.disabled) {
this.onClick.emit(event);
}
}
}
export class FCDropdownComponent implements AfterContentInit {
items!: QueryList<FCDropdownItemComponent>;
label: string = 'Dropdown';
isOpen: boolean = false;
isOpenChange = new EventEmitter<boolean>();
ngAfterContentInit() {
this.items.forEach(item => {
item.onClick.subscribe(() => {
this.close();
});
});
}
onDocumentClick(event: Event) {
if (!this.elementRef.nativeElement.contains(event.target)) {
this.close();
}
}
constructor(private elementRef: ElementRef) {}
toggle() {
this.isOpen = !this.isOpen;
this.isOpenChange.emit(this.isOpen);
}
openDropdown() {
this.isOpen = true;
this.isOpenChange.emit(true);
}
close() {
this.isOpen = false;
this.isOpenChange.emit(false);
}
}