import {Component, Input, OnInit} from '@angular/core'; import {EditorService} from '../../../../service/editor.service'; import {ModalController} from '@ionic/angular'; import HostRecord from '../../../../structures/HostRecord'; import {debug} from '../../../../utility'; import {DbApiService} from '../../../../service/db-api.service'; import {Database, DatabaseColumn} from '../../../../structures/db-api'; import {NodeTypeIcons} from '../../../../structures/node-types'; @Component({ selector: 'noded-node-form-input-options', template: ` Edit Form Input Label Text Placeholder Text Required Select Options Source Static Options Database Values Source Database
{{ port.name }}
Display Column Value Column
Options
Display Value
Min Length Max Length Min Max
`, }) export class FormInputOptionsComponent implements OnInit { @Input() node: HostRecord; @Input() editorUUID: string; public typeIcons = NodeTypeIcons; public label = ''; public placeholder = ''; public required = false; public minLength?: number; public maxLength?: number; public min?: number; public max?: number; public selectSource?: 'local'|'database'; public selectDatabaseDisplayColumn?: DatabaseColumn; public selectDatabaseValueColumn?: DatabaseColumn; public selectStaticOptions: { display: string, value: string }[] = []; public databases: Database[] = []; public selectedDatabase?: Database; public selectedDatabaseColumns: DatabaseColumn[] = []; constructor( public editorService: EditorService, public readonly dbApi: DbApiService, public readonly modal: ModalController, ) { } async ngOnInit() { debug('Form input options', this); this.editorService = this.editorService.getEditor(this.editorUUID); this.label = this.node.AdditionalData.label; this.placeholder = this.node.AdditionalData.placeholder; this.required = this.node.AdditionalData.required; if ( this.node.type === 'form_input_password' || this.node.type === 'form_input_text' ) { this.minLength = this.node.AdditionalData.minLength; this.maxLength = this.node.AdditionalData.maxLength; } if ( this.node.type === 'form_input_number' ) { this.min = this.node.AdditionalData.min; this.max = this.node.AdditionalData.max; } if ( this.node.type === 'form_input_select' || this.node.type === 'form_input_multiselect' ) { this.selectSource = this.node.AdditionalData.selectSource; this.databases = await this.dbApi.getDatabases(); if ( this.selectSource === 'database' ) { this.selectedDatabase = this.databases.find(x => x.uuid === this.node.AdditionalData.selectSourceDatabaseId); await this.onSelectDatabaseChange(); this.selectDatabaseValueColumn = this.selectedDatabaseColumns.find(x => { return x.field === this.node.AdditionalData.selectDatabaseValueColumnId; }); this.selectDatabaseDisplayColumn = this.selectedDatabaseColumns.find(x => { return x.field === this.node.AdditionalData.selectDatabaseDisplayColumnId; }); } else if ( this.selectSource === 'local' ) { this.selectStaticOptions = this.node.AdditionalData.selectStaticOptions || []; } } } dismissModal(success = true) { if ( success ) { this.node.AdditionalData.label = this.label; this.node.AdditionalData.placeholder = this.placeholder; this.node.AdditionalData.required = !!this.required; } if ( this.node.type === 'form_input_password' || this.node.type === 'form_input_text' ) { this.node.AdditionalData.minLength = this.minLength; this.node.AdditionalData.maxLength = this.maxLength; } if ( this.node.type === 'form_input_number' ) { this.node.AdditionalData.min = this.min; this.node.AdditionalData.max = this.max; } if ( this.node.type === 'form_input_select' || this.node.type === 'form_input_multiselect' ) { this.node.AdditionalData.selectSource = this.selectSource; if ( this.selectSource === 'database' ) { this.node.AdditionalData.selectSourceDatabaseId = this.selectedDatabase?.uuid; this.node.AdditionalData.selectDatabaseValueColumnId = this.selectDatabaseValueColumn?.field; this.node.AdditionalData.selectDatabaseDisplayColumnId = this.selectDatabaseDisplayColumn?.field; } else if ( this.selectSource === 'local' ) { this.node.AdditionalData.selectStaticOptions = this.selectStaticOptions; } } this.modal.dismiss(success); } async onSelectDatabaseChange() { if ( this.selectedDatabase ) { this.selectedDatabaseColumns = await this.selectedDatabase.columns(); } else { this.selectedDatabaseColumns = []; } this.selectDatabaseDisplayColumn = undefined; this.selectDatabaseValueColumn = undefined; } onAddSelectOption() { this.selectStaticOptions.push({ display: '', value: '', }); } onRemoveSelectOption(option: any) { this.selectStaticOptions = this.selectStaticOptions.filter(x => x !== option); } }