import { shortcut, store } from '@core/core'; import { Button, EditorIconCheckCombo, SearchTextValueCombo, TextValueCombo, } from '@fui/core'; import { ConnectionJDBC } from '../../../../crud/crud.typings'; import { getJdbcDatabaseType } from '../../../../app.service'; import { DriverSelectorModel } from './driverselector.model'; @shortcut() @store(DriverSelectorModel, { props(this: DriverSelector) { return this.options; }, }) export class DriverSelector extends BI.Widget { static xtype = 'dec.dcm.maintain.form.jdbc.driver_selector'; props = { driver: '', driverSource: '', connectionData: {} as ConnectionJDBC, }; defaultDrivers: EditorIconCheckCombo = null; customDrivers: SearchTextValueCombo = null; beforeRender(cb: Function) { this.store.initDriverClassList(cb); } watch = { driverClassItems: items => { this.customDrivers.populate(items); this.customDrivers.setValue(this.model.customDriver.driver); }, driverManageEntryVisible: b => { this.driverManageEntry.setVisible(b); }, }; private driverManageEntry = null; render() { const { driver } = this.options.connectionData; return { type: BI.VerticalAdaptLayout.xtype, rgap: 10, items: [ { el: { type: BI.TextValueCombo.xtype, width: 86, value: this.model.selectedDriverType, items: [ { text: BI.i18nText('Dec-Basic_Default'), value: 'default', }, { text: BI.i18nText('Dec-Basic_Custom'), value: 'custom', }, ], listeners: [ { eventName: BI.TextValueCombo.EVENT_CHANGE, action: value => { this.store.changeSelectedDriverType(value); if (value === 'default') { this.defaultDrivers.setVisible(true); this.customDrivers.setVisible(false); return; } this.defaultDrivers.setVisible(false); this.customDrivers.setVisible(true); }, }, ], }, }, { el: { type: BI.EditorIconCheckCombo.xtype, $testId: 'dec-editor-icon-check-combo', $value: 'driver', ref: _ref => { this.defaultDrivers = _ref; }, invisible: this.model.driverSource !== '', width: 204, items: this.model.defaultDrivers, value: this.model.defaultDriver.driver, listeners: [ { eventName: BI.EditorIconCheckCombo.EVENT_CHANGE, action: () => this.store.changeDefaultDriver(this.defaultDrivers.getValue()), }, ], }, }, { el: { type: BI.SearchTextValueCombo.xtype, $testId: 'dec-editor-icon-check-combo', $value: 'driver', ref: _ref => { this.customDrivers = _ref; }, invisible: this.model.driverSource === '', width: 204, watermark: BI.i18nText('Dec-Please_Input'), items: this.model.driverClassItems, value: this.model.customDriver.driver, text: () => this.model.customDriver.text || '', defaultText: BI.i18nText('Dec-Please_Select'), warningTitle: BI.i18nText('Dec-Dcm-Driver_Driver_File_Lost'), listeners: [ { eventName: BI.SearchTextValueCombo.EVENT_CHANGE, action: () => this.store.changeCustomDriver(this.customDrivers.getValue()[0]), }, ], }, }, { el: { type: BI.Button.xtype, ref: (_ref: Button) => { this.driverManageEntry = _ref; }, level: 'ignore', text: BI.i18nText('Dec-Dcm_Create_New_Driver'), invisible: !this.model.driverManageEntryVisible, handler: () => { this.createDriverManagerLayer(); }, }, }, ], }; } private createDriverManagerLayer() { const name = BI.UUID(); BI.Layers.create(name, '.dec-dcm', { render: { type: 'bi.vtape', cls: 'bi-background', items: [ { type: 'bi.vertical_adapt', cls: 'bi-card', items: [ { el: { type: 'bi.icon_text_item', text: BI.i18nText('Dec-Connection_Driver_Management_Exit'), cls: 'back-font bi-high-light', height: 24, logic: { dynamic: true, }, handler: () => { this.store.initDriverClassList(() => BI.Layers.remove(name)); }, }, hgap: 10, }, ], height: 40, }, { el: { type: 'dec.connection.driver', listeners: [ { eventName: 'EVENT_CLOSE', action() { BI.Layers.remove(name); }, }, ], }, hgap: 10, vgap: 10, }, ], }, }); BI.Layers.show(name); } validation(): boolean { if (this.model.selectedDriverType === 'default' && BI.isKey(this.model.defaultDriver.driver)) { return true; } if (this.model.selectedDriverType === 'custom' && BI.isKey(this.model.customDriver.driver)) { return true; } BI.Msg.toast(BI.i18nText('Dec-Dcm_Driver_Class_Not_Allow_Empty'), { level: 'error' }); return false; } getValue() { return { driverSource: this.model.driverSource, driver: this.model.driverSource === '' ? this.model.defaultDriver.driver : this.model.customDriver.driver, }; } }