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