@dewesoft-web/grid
Version:
Dewesoft WebUI Grid
165 lines (127 loc) • 4.02 kB
text/typescript
import { action, computed, observable } from "mobx";
import { GridColumns } from "../types";
import { GridColumnModel } from "../model";
export class ChooseColumnsModel {
selectedColumn : GridColumnModel;
columns : GridColumnModel[];
searchString : string;
private selectedIndex : number;
constructor(columns : GridColumns) {
const colNames = Object.keys(columns);
const numCols = colNames.length;
this.searchString = "";
this.columns = new Array(numCols);
for (let i = 0; i < numCols; i++) {
this.columns[i] = columns[colNames[i]];
}
this.selectedColumn = this.columns[0];
this.selectedIndex = 0;
this.select = this.select.bind(this);
this.moveSelectedUp = this.moveSelectedUp.bind(this);
this.moveSelectedDown = this.moveSelectedDown.bind(this);
this.showSelected = this.showSelected.bind(this);
this.hideSelected = this.hideSelected.bind(this);
this.setToDefault = this.setToDefault.bind(this);
this.selectAll = this.selectAll.bind(this);
this.deselectAll = this.deselectAll.bind(this);
}
get searchIcon() {
if (this.searchString.length === 0) {
return "search";
}
else {
return "highlight_off";
}
}
get filteredColumns() {
const upperCase = this.searchString.toUpperCase();
return this.columns.filter((col : GridColumnModel) => {
return col.title.toUpperCase().includes(upperCase);
});
}
get canMoveDown() {
return this.selectedColumn.order !== this.columns.length - 1;
}
get canMoveUp() {
return this.selectedColumn.order !== 0;
}
select(column : GridColumnModel) {
const idx = this.columns.indexOf(column)
if (idx !== -1) {
this.selectedIndex = idx;
this.selectedColumn = column;
}
}
goToNextColumn() {
if (this.selectedIndex === this.columns.length - 1) {
return;
}
this.selectedColumn = this.columns[++this.selectedIndex];
}
goToPreviousColumn() {
if (this.selectedIndex === 0) {
return;
}
this.selectedColumn = this.columns[--this.selectedIndex];
}
moveSelectedUp() {
const currOrder = this.selectedColumn.order;
const prevCol = this.columns.find(function(col : GridColumnModel) {
return col.order == currOrder - 1;
});
if (prevCol !== undefined) {
this.selectedColumn.order--;
prevCol.order++;
}
this.columns = this.columns.sort(function(lhs, rhs) {
return lhs.order - rhs.order;
});
}
moveSelectedDown() {
const currOrder = this.selectedColumn.order;
const prevCol = this.columns.find(function(col : GridColumnModel) {
return col.order == currOrder + 1;
});
if (prevCol !== undefined) {
this.selectedColumn.order++;
prevCol.order--;
}
this.columns = this.columns.sort(function(lhs, rhs) {
return lhs.order - rhs.order;
});
}
showSelected() {
this.selectedColumn.setVisible(true);
}
hideSelected() {
this.selectedColumn.setVisible(false);
}
selectAll() {
for (const col of this.columns) {
col.setVisible(true);
}
}
deselectAll() {
for (const col of this.columns) {
col.setVisible(false);
}
}
setToDefault() {
}
}