mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-20 11:16:01 +00:00
86 lines
2.1 KiB
TypeScript
86 lines
2.1 KiB
TypeScript
import { FreeTableModel } from 'dbgate-datalib';
|
|
import Grider, { GriderRowStatus } from '../datagrid/Grider';
|
|
|
|
export default class FreeTableGrider extends Grider {
|
|
public model: FreeTableModel;
|
|
private batchModel: FreeTableModel;
|
|
|
|
constructor(public modelState, public dispatchModel) {
|
|
super();
|
|
this.model = modelState && modelState.value;
|
|
}
|
|
getRowData(index: any) {
|
|
return this.model.rows[index];
|
|
}
|
|
get rowCount() {
|
|
return this.model.rows.length;
|
|
}
|
|
get currentModel(): FreeTableModel {
|
|
return this.batchModel || this.model;
|
|
}
|
|
set currentModel(value) {
|
|
if (this.batchModel) this.batchModel = value;
|
|
else this.dispatchModel({ type: 'set', value });
|
|
}
|
|
setCellValue(index: number, uniqueName: string, value: any) {
|
|
const model = this.currentModel;
|
|
if (model.rows[index])
|
|
this.currentModel = {
|
|
...model,
|
|
rows: model.rows.map((row, i) => (index == i ? { ...row, [uniqueName]: value } : row)),
|
|
};
|
|
}
|
|
get editable() {
|
|
return true;
|
|
}
|
|
get canInsert() {
|
|
return true;
|
|
}
|
|
get allowSave() {
|
|
return true;
|
|
}
|
|
insertRow(): number {
|
|
const model = this.currentModel;
|
|
this.currentModel = {
|
|
...model,
|
|
rows: [...model.rows, {}],
|
|
};
|
|
return this.currentModel.rows.length - 1;
|
|
}
|
|
deleteRow(index: number) {
|
|
const model = this.currentModel;
|
|
this.currentModel = {
|
|
...model,
|
|
rows: model.rows.filter((row, i) => index != i),
|
|
};
|
|
}
|
|
beginUpdate() {
|
|
this.batchModel = this.model;
|
|
}
|
|
endUpdate() {
|
|
if (this.model != this.batchModel) {
|
|
this.dispatchModel({ type: 'set', value: this.batchModel });
|
|
this.batchModel = null;
|
|
}
|
|
}
|
|
|
|
// static factory({ modelState, dispatchModel }): FreeTableGrider {
|
|
// return new FreeTableGrider(modelState, dispatchModel);
|
|
// }
|
|
// static factoryDeps({ modelState, dispatchModel }) {
|
|
// return [modelState, dispatchModel];
|
|
// }
|
|
undo() {
|
|
this.dispatchModel({ type: 'undo' });
|
|
}
|
|
redo() {
|
|
this.dispatchModel({ type: 'redo' });
|
|
}
|
|
get canUndo() {
|
|
return this.modelState.canUndo;
|
|
}
|
|
get canRedo() {
|
|
return this.modelState.canRedo;
|
|
}
|
|
}
|