2021-02-16 01:07:35 +00:00
|
|
|
import {Injectable} from '@angular/core';
|
|
|
|
import {DatabasePageComponent} from '../components/editor/database/database-page.component';
|
|
|
|
import {FileBoxPageComponent} from '../components/nodes/file-box/file-box-page.component';
|
|
|
|
import {NavigationService} from './navigation.service';
|
|
|
|
import {EditorService} from './editor.service';
|
|
|
|
import {ModalController} from '@ionic/angular';
|
2021-08-30 18:48:38 +00:00
|
|
|
import {debug} from '../utility';
|
2021-02-16 01:07:35 +00:00
|
|
|
|
|
|
|
@Injectable({
|
|
|
|
providedIn: 'root',
|
|
|
|
})
|
|
|
|
export class OpenerService {
|
|
|
|
public currentPageId = '';
|
|
|
|
|
|
|
|
constructor(
|
|
|
|
protected readonly nav: NavigationService,
|
|
|
|
protected readonly editor: EditorService,
|
|
|
|
protected readonly ionModalController: ModalController,
|
|
|
|
) { }
|
|
|
|
|
|
|
|
async openTarget(pageId: string, nodeId?: string) {
|
|
|
|
if ( !nodeId ) {
|
|
|
|
this.currentPageId = pageId;
|
|
|
|
return this.nav.requestNavigation(pageId);
|
|
|
|
}
|
|
|
|
|
|
|
|
const node = (await this.editor.loadNodes(pageId)).find(rec => rec.UUID === nodeId);
|
|
|
|
if ( !node ) {
|
|
|
|
this.currentPageId = pageId;
|
|
|
|
return this.nav.requestNavigation(pageId);
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( node.type === 'database_ref' ) {
|
|
|
|
return this.openDatabase(pageId, nodeId);
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( node.type === 'file_box' ) {
|
|
|
|
return this.openFileBox(pageId, nodeId);
|
|
|
|
}
|
2021-08-30 18:48:38 +00:00
|
|
|
|
|
|
|
if ( node.type === 'paragraph' || node.type === 'markdown' ) {
|
|
|
|
this.currentPageId = pageId;
|
|
|
|
return this.nav.requestNavigation(pageId, node.UUID);
|
|
|
|
}
|
|
|
|
|
|
|
|
debug('Unhandled opener node type:', node.type);
|
2021-02-16 01:07:35 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
async openDatabase(pageId: string, nodeId: string) {
|
|
|
|
const modal = await this.ionModalController.create({
|
|
|
|
component: DatabasePageComponent,
|
|
|
|
componentProps: {
|
|
|
|
nodeId,
|
|
|
|
pageId,
|
|
|
|
},
|
|
|
|
cssClass: 'modal-big',
|
|
|
|
});
|
|
|
|
|
|
|
|
const modalState = {
|
|
|
|
modal : true,
|
|
|
|
desc : 'Open Database'
|
|
|
|
};
|
|
|
|
|
|
|
|
history.pushState(modalState, null);
|
|
|
|
|
|
|
|
await modal.present();
|
|
|
|
}
|
|
|
|
|
|
|
|
async openFileBox(pageId: string, nodeId: string, boxId?: string) {
|
|
|
|
const modal = await this.ionModalController.create({
|
|
|
|
component: FileBoxPageComponent,
|
|
|
|
componentProps: {
|
|
|
|
nodeId,
|
|
|
|
pageId,
|
|
|
|
boxId,
|
|
|
|
},
|
|
|
|
cssClass: 'modal-big',
|
|
|
|
});
|
|
|
|
|
|
|
|
const modalState = {
|
|
|
|
modal : true,
|
|
|
|
desc : 'Open File Box'
|
|
|
|
};
|
|
|
|
|
|
|
|
history.pushState(modalState, null);
|
|
|
|
|
|
|
|
await modal.present();
|
|
|
|
}
|
|
|
|
}
|