78 lines
1.9 KiB
TypeScript
78 lines
1.9 KiB
TypeScript
import {Component, Input} from '@angular/core';
|
|
import {Router} from "@angular/router";
|
|
import {PagesService} from "@app/_services/pages.service";
|
|
import {FormsService, ListsService} from "@app/_services";
|
|
import {Subscription} from "rxjs";
|
|
|
|
@Component({
|
|
selector: 'pages-tree-item',
|
|
templateUrl: 'pages-tree-item.component.html',
|
|
styleUrls: ['../pages-tree.component.scss', 'pages-tree-item.component.scss']
|
|
})
|
|
export class PagesTreeItemComponent {
|
|
@Input() page: any;
|
|
@Input() parent: any;
|
|
public active = false;
|
|
public touched = false;
|
|
public subscription: Subscription;
|
|
|
|
constructor(private router: Router, private pagesService: PagesService, private formsService: FormsService, private listsService: ListsService) {
|
|
}
|
|
|
|
ngOnInit() {
|
|
this.subscription = this.listsService.controls(this.listId).subscribe(res => {
|
|
if (this.touched) this.fetch();
|
|
});
|
|
}
|
|
|
|
|
|
get listId() {
|
|
return this.page.id;
|
|
}
|
|
|
|
get parentListId() {
|
|
return this.parent?.id || 'pages-tree-root';
|
|
}
|
|
|
|
get logo() {
|
|
return this.page?.logo?.data.links?.full;
|
|
}
|
|
|
|
get noLogoLetters() {
|
|
return this.page.name.replace(' ', '').slice(0, 2);
|
|
}
|
|
|
|
get children() {
|
|
return this.page.children?.data;
|
|
}
|
|
|
|
|
|
fetch() {
|
|
let include = ['children.children.children.children'];
|
|
this.pagesService.show(this.page.id, {include: include.join(',')}).subscribe(res => {
|
|
this.page = res.data;
|
|
});
|
|
}
|
|
|
|
add() {
|
|
this.formsService.createModel('page', {extraProps: {parent: this.page.id}}, this.listId);
|
|
this.active = true;
|
|
}
|
|
|
|
edit() {
|
|
this.formsService.editModel('page', this.page.id, null, this.listId);
|
|
}
|
|
|
|
delete() {
|
|
if (confirm('r u sure?')) this.pagesService.delete(this.page.id).subscribe(res => {
|
|
this.listsService.refresh(this.parentListId);
|
|
this.pagesService.changedPages();
|
|
});
|
|
}
|
|
|
|
toggle() {
|
|
this.active = !this.active;
|
|
if (this.active) this.fetch();
|
|
}
|
|
}
|