multi-project/projects/app/_modules/pages/tree/item/pages-tree-item.component.ts

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();
}
}