You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
frontend/src/app/service/opener.service.ts

90 lines
2.5 KiB

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';
import {debug} from '../utility';
@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);
}
if ( node.type === 'paragraph' || node.type === 'markdown' ) {
this.currentPageId = pageId;
return this.nav.requestNavigation(pageId, node.UUID);
}
debug('Unhandled opener node type:', node.type);
}
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();
}
}