import {Component, Input, OnInit} from '@angular/core'; import {ModalController} from '@ionic/angular'; import {ApiService} from '../../../service/api.service'; import {Observable} from 'rxjs'; import {environment} from '../../../../environments/environment'; @Component({ selector: 'app-selector', templateUrl: './selector.component.html', styleUrls: ['./selector.component.scss'], }) export class SelectorComponent implements OnInit { @Input() node: any; public sharingInfo: { view: Array<{username: string, public?: boolean, id: string, level: 'view'|'update'|'manage'}>, update: Array<{username: string, public?: boolean, id: string, level: 'view'|'update'|'manage'}>, manage: Array<{username: string, public?: boolean, id: string, level: 'view'|'update'|'manage'}>, } = {view: [], update: [], manage: []}; public generatedLink = ''; public publicLink = false; constructor( protected modals: ModalController, protected api: ApiService, ) {} public get title() { return this.node ? `Share ${this.node.name}` : 'Manage Sharing'; } public get isShared() { return (this.sharingInfo.view.length > 0) || (this.sharingInfo.update.length > 0) || (this.sharingInfo.manage.length > 0); } ngOnInit() { this.loadShareInfo().subscribe(data => { this.sharingInfo = data; }); } dismissModal(success: boolean) { this.modals.dismiss(); } loadShareInfo(): Observable<{ view: Array<{username: string, id: string, level: 'view'|'update'|'manage'}>, update: Array<{username: string, id: string, level: 'view'|'update'|'manage'}>, manage: Array<{username: string, id: string, level: 'view'|'update'|'manage'}>, }> { return new Observable(sub => { this.api.get(`/share/page/${this.node.id}/info`).subscribe(result => { sub.next(result.data); sub.complete(); }); }); } setShareLevel(group, level) { this.api.post(`/share/page/${this.node.id}/share?public=${!!group.public}`, { user_id: group.id, level }).subscribe(result => { this.loadShareInfo().subscribe(data => { this.sharingInfo = data; }); }); } unsharePage(group) { this.api.post(`/share/page/${this.node.id}/revoke?public=${!!group.public}`, { user_id: group.id }).subscribe(result => { this.loadShareInfo().subscribe(data => { this.sharingInfo = data; }); }); } getShareLink(level) { this.api.get(`/share/page/${this.node.id}/link/${level}${this.publicLink ? '?public=true' : ''}`).subscribe(result => { if ( this.publicLink ) { this.generatedLink = `${window.location.origin}${environment.appBase}editor/site;id=${this.node.id}`; this.ngOnInit(); } else { this.generatedLink = result.data.link; } }); } }