UNPKG

bs-datatable

Version:

A data table based on Bootstrap 5

92 lines (76 loc) 3.25 kB
import { BSDataTableInput } from "./BSDataTableInput"; import { BSSelectorOptions } from "../commonTypes/common-types"; import { BSDataTableTextInput } from "./BSDataTableTextInput"; import { BSDataTableButton } from "./BSDataTableButton"; import { BSDataTableSelectorWindow } from "./BSDataTableSelectorWindow"; import { appDataEvents } from "../services"; export class BSDataTableSelector extends BSDataTableInput { options: BSSelectorOptions; /** * @type {BSDataTableButton} */ btnElement: BSDataTableButton; /** * @type {BSDataTableTextInput} */ txtElement: BSDataTableTextInput; selectorWindow: BSDataTableSelectorWindow; constructor(options: BSSelectorOptions, selectorWindow?: BSDataTableSelectorWindow) { super(options); this.options = options; this.selectorWindow = selectorWindow; this.render(); } /** * @param {BSDataTableSelectorWindow} sender * @param {any} e */ onItemSelected(sender: BSDataTableSelectorWindow, e: any) { // console.log('row selected', sender.grid.body.getSelectedRow()); var row = sender.grid.body.getSelectedRow(); var selectedInput = row.getInputs().find((input) => input.isKey); if (selectedInput) { // console.log('Selected value: ', selectedInput.val); // console.log('selector: ', this.txtElement.val); this.txtElement.val = selectedInput.val; this.txtElement.change(); // call change to fire the change event } sender.selectorModal.hide(); } render() { if (!this.selectorWindow) { var sWindow = new BSDataTableSelectorWindow(this.options); this.selectorWindow = sWindow; } var btnHandler = (sender: BSDataTableSelector, e) => { // // show the window, and re-register double-click handler // since the window control is shared by many selectors of same id // this.selectorWindow.grid.removeHandler(appDataEvents.ON_ROW_DOUBLE_CLICKED); this.selectorWindow.grid.addHandler(appDataEvents.ON_ROW_DOUBLE_CLICKED, (s, ev) => sender.onItemSelected(this.selectorWindow, ev)); this.selectorWindow.show(); } this.txtElement = new BSDataTableTextInput(this.options); this.btnElement = new BSDataTableButton({ DataSourceName: this.options.DataSourceName, Icon: 'search', Handler: (e) => btnHandler(this, e), Title:'Search' }); var wrapper = document.createElement('div'); wrapper.classList.add('input-group', 'input-group-sm'); wrapper.appendChild(this.txtElement.element); wrapper.appendChild(this.btnElement.element); this.element = wrapper; } clone() { // debugger; var sc = super.clone(); var opt: BSSelectorOptions = this.shClone(this.options); opt.cloneContext = true; var c = new BSDataTableSelector(opt, this.selectorWindow); c.children = sc.children; return c; } }