diff --git a/packages/datalib/src/FormViewDisplay.ts b/packages/datalib/src/FormViewDisplay.ts index 4bba3c55c..e265bf086 100644 --- a/packages/datalib/src/FormViewDisplay.ts +++ b/packages/datalib/src/FormViewDisplay.ts @@ -1,120 +1,120 @@ -import _ from 'lodash'; -import { GridConfig, GridCache, GridConfigColumns, createGridCache, GroupFunc } from './GridConfig'; -import type { TableInfo, EngineDriver, DatabaseInfo, SqlDialect } from 'dbgate-types'; -import { getFilterValueExpression } from 'dbgate-filterparser'; -import { ChangeCacheFunc, ChangeConfigFunc, DisplayColumn } from './GridDisplay'; +// import _ from 'lodash'; +// import { GridConfig, GridCache, GridConfigColumns, createGridCache, GroupFunc } from './GridConfig'; +// import type { TableInfo, EngineDriver, DatabaseInfo, SqlDialect } from 'dbgate-types'; +// import { getFilterValueExpression } from 'dbgate-filterparser'; +// import { ChangeCacheFunc, ChangeConfigFunc, DisplayColumn } from './GridDisplay'; -export class FormViewDisplay { - isLoadedCorrectly = true; - columns: DisplayColumn[]; - public baseTable: TableInfo; - dialect: SqlDialect; +// export class FormViewDisplay { +// isLoadedCorrectly = true; +// columns: DisplayColumn[]; +// public baseTable: TableInfo; +// dialect: SqlDialect; - constructor( - public config: GridConfig, - protected setConfig: ChangeConfigFunc, - public cache: GridCache, - protected setCache: ChangeCacheFunc, - public driver?: EngineDriver, - public dbinfo: DatabaseInfo = null, - public serverVersion = null - ) { - this.dialect = (driver?.dialectByVersion && driver?.dialectByVersion(serverVersion)) || driver?.dialect; - } +// constructor( +// public config: GridConfig, +// protected setConfig: ChangeConfigFunc, +// public cache: GridCache, +// protected setCache: ChangeCacheFunc, +// public driver?: EngineDriver, +// public dbinfo: DatabaseInfo = null, +// public serverVersion = null +// ) { +// this.dialect = (driver?.dialectByVersion && driver?.dialectByVersion(serverVersion)) || driver?.dialect; +// } - addFilterColumn(column) { - if (!column) return; - this.setConfig(cfg => ({ - ...cfg, - formFilterColumns: [...(cfg.formFilterColumns || []), column.uniqueName], - })); - } +// addFilterColumn(column) { +// if (!column) return; +// this.setConfig(cfg => ({ +// ...cfg, +// formFilterColumns: [...(cfg.formFilterColumns || []), column.uniqueName], +// })); +// } - filterCellValue(column, rowData) { - if (!column || !rowData) return; - const value = rowData[column.uniqueName]; - const expr = getFilterValueExpression(value, column.dataType); - if (expr) { - this.setConfig(cfg => ({ - ...cfg, - filters: { - ...cfg.filters, - [column.uniqueName]: expr, - }, - addedColumns: cfg.addedColumns.includes(column.uniqueName) - ? cfg.addedColumns - : [...cfg.addedColumns, column.uniqueName], - })); - this.reload(); - } - } +// filterCellValue(column, rowData) { +// if (!column || !rowData) return; +// const value = rowData[column.uniqueName]; +// const expr = getFilterValueExpression(value, column.dataType); +// if (expr) { +// this.setConfig(cfg => ({ +// ...cfg, +// filters: { +// ...cfg.filters, +// [column.uniqueName]: expr, +// }, +// addedColumns: cfg.addedColumns.includes(column.uniqueName) +// ? cfg.addedColumns +// : [...cfg.addedColumns, column.uniqueName], +// })); +// this.reload(); +// } +// } - setFilter(uniqueName, value) { - this.setConfig(cfg => ({ - ...cfg, - filters: { - ...cfg.filters, - [uniqueName]: value, - }, - })); - this.reload(); - } +// setFilter(uniqueName, value) { +// this.setConfig(cfg => ({ +// ...cfg, +// filters: { +// ...cfg.filters, +// [uniqueName]: value, +// }, +// })); +// this.reload(); +// } - removeFilter(uniqueName) { - const reloadRequired = !!this.config.filters[uniqueName]; - this.setConfig(cfg => ({ - ...cfg, - formFilterColumns: (cfg.formFilterColumns || []).filter(x => x != uniqueName), - filters: _.omit(cfg.filters || [], uniqueName), - })); - if (reloadRequired) this.reload(); - } +// removeFilter(uniqueName) { +// const reloadRequired = !!this.config.filters[uniqueName]; +// this.setConfig(cfg => ({ +// ...cfg, +// formFilterColumns: (cfg.formFilterColumns || []).filter(x => x != uniqueName), +// filters: _.omit(cfg.filters || [], uniqueName), +// })); +// if (reloadRequired) this.reload(); +// } - reload() { - this.setCache(cache => ({ - // ...cache, - ...createGridCache(), - refreshTime: new Date().getTime(), - })); - } +// reload() { +// this.setCache(cache => ({ +// // ...cache, +// ...createGridCache(), +// refreshTime: new Date().getTime(), +// })); +// } - getKeyValue(columnName) { - const { formViewKey, formViewKeyRequested } = this.config; - if (formViewKeyRequested && formViewKeyRequested[columnName]) return formViewKeyRequested[columnName]; - if (formViewKey && formViewKey[columnName]) return formViewKey[columnName]; - return null; - } +// getKeyValue(columnName) { +// const { formViewKey, formViewKeyRequested } = this.config; +// if (formViewKeyRequested && formViewKeyRequested[columnName]) return formViewKeyRequested[columnName]; +// if (formViewKey && formViewKey[columnName]) return formViewKey[columnName]; +// return null; +// } - requestKeyValue(columnName, value) { - if (this.getKeyValue(columnName) == value) return; +// requestKeyValue(columnName, value) { +// if (this.getKeyValue(columnName) == value) return; - this.setConfig(cfg => ({ - ...cfg, - formViewKeyRequested: { - ...cfg.formViewKey, - ...cfg.formViewKeyRequested, - [columnName]: value, - }, - })); - this.reload(); - } +// this.setConfig(cfg => ({ +// ...cfg, +// formViewKeyRequested: { +// ...cfg.formViewKey, +// ...cfg.formViewKeyRequested, +// [columnName]: value, +// }, +// })); +// this.reload(); +// } - extractKey(row) { - if (!row || !this.baseTable || !this.baseTable.primaryKey) { - return null; - } - const formViewKey = _.pick( - row, - this.baseTable.primaryKey.columns.map(x => x.columnName) - ); - return formViewKey; - } +// extractKey(row) { +// if (!row || !this.baseTable || !this.baseTable.primaryKey) { +// return null; +// } +// const formViewKey = _.pick( +// row, +// this.baseTable.primaryKey.columns.map(x => x.columnName) +// ); +// return formViewKey; +// } - cancelRequestKey(rowData) { - this.setConfig(cfg => ({ - ...cfg, - formViewKeyRequested: null, - formViewKey: rowData ? this.extractKey(rowData) : cfg.formViewKey, - })); - } -} +// cancelRequestKey(rowData) { +// this.setConfig(cfg => ({ +// ...cfg, +// formViewKeyRequested: null, +// formViewKey: rowData ? this.extractKey(rowData) : cfg.formViewKey, +// })); +// } +// } diff --git a/packages/datalib/src/GridConfig.ts b/packages/datalib/src/GridConfig.ts index c6c7fd5eb..67fff7598 100644 --- a/packages/datalib/src/GridConfig.ts +++ b/packages/datalib/src/GridConfig.ts @@ -27,8 +27,9 @@ export interface GridConfig extends GridConfigColumns { childConfig?: GridConfig; reference?: GridReferenceDefinition; isFormView?: boolean; - formViewKey?: { [uniqueName: string]: string }; - formViewKeyRequested?: { [uniqueName: string]: string }; + formViewRecordNumber?: number; + // formViewKey?: { [uniqueName: string]: string }; + // formViewKeyRequested?: { [uniqueName: string]: string }; formFilterColumns: string[]; formColumnFilterText?: string; } diff --git a/packages/datalib/src/GridDisplay.ts b/packages/datalib/src/GridDisplay.ts index 7ac527d68..f42bdeea8 100644 --- a/packages/datalib/src/GridDisplay.ts +++ b/packages/datalib/src/GridDisplay.ts @@ -743,6 +743,36 @@ export abstract class GridDisplay { isJsonView: true, })); } + + formViewNavigate(command, allRowCount) { + switch (command) { + case 'begin': + this.setConfig(cfg => ({ + ...cfg, + formViewRecordNumber: 0, + })); + break; + case 'previous': + this.setConfig(cfg => ({ + ...cfg, + formViewRecordNumber: Math.max((cfg.formViewRecordNumber || 0) - 1, 0), + })); + break; + case 'next': + this.setConfig(cfg => ({ + ...cfg, + formViewRecordNumber: Math.max(Math.min((cfg.formViewRecordNumber || 0) + 1, allRowCount - 1), 0), + })); + break; + case 'end': + this.setConfig(cfg => ({ + ...cfg, + formViewRecordNumber: Math.max(allRowCount - 1, 0), + })); + break; + } + this.reload(); + } } export function reloadDataCacheFunc(cache: GridCache): GridCache { diff --git a/packages/datalib/src/TableFormViewDisplay.ts b/packages/datalib/src/TableFormViewDisplay.ts index 9502b85b0..bc1574233 100644 --- a/packages/datalib/src/TableFormViewDisplay.ts +++ b/packages/datalib/src/TableFormViewDisplay.ts @@ -1,272 +1,272 @@ -import { FormViewDisplay } from './FormViewDisplay'; -import _ from 'lodash'; -import { ChangeCacheFunc, DisplayColumn, ChangeConfigFunc } from './GridDisplay'; -import type { EngineDriver, NamedObjectInfo, DatabaseInfo } from 'dbgate-types'; -import { GridConfig, GridCache } from './GridConfig'; -import { mergeConditions, Condition, OrderByExpression } from 'dbgate-sqltree'; -import { TableGridDisplay } from './TableGridDisplay'; -import stableStringify from 'json-stable-stringify'; -import { ChangeSetFieldDefinition, ChangeSetRowDefinition } from './ChangeSet'; -import { DictionaryDescriptionFunc } from '.'; +// import { FormViewDisplay } from './FormViewDisplay'; +// import _ from 'lodash'; +// import { ChangeCacheFunc, DisplayColumn, ChangeConfigFunc } from './GridDisplay'; +// import type { EngineDriver, NamedObjectInfo, DatabaseInfo } from 'dbgate-types'; +// import { GridConfig, GridCache } from './GridConfig'; +// import { mergeConditions, Condition, OrderByExpression } from 'dbgate-sqltree'; +// import { TableGridDisplay } from './TableGridDisplay'; +// import stableStringify from 'json-stable-stringify'; +// import { ChangeSetFieldDefinition, ChangeSetRowDefinition } from './ChangeSet'; +// import { DictionaryDescriptionFunc } from '.'; -export class TableFormViewDisplay extends FormViewDisplay { - // use utility functions from GridDisplay and publish result in FromViewDisplay interface - private gridDisplay: TableGridDisplay; +// export class TableFormViewDisplay extends FormViewDisplay { +// // use utility functions from GridDisplay and publish result in FromViewDisplay interface +// private gridDisplay: TableGridDisplay; - constructor( - public tableName: NamedObjectInfo, - driver: EngineDriver, - config: GridConfig, - setConfig: ChangeConfigFunc, - cache: GridCache, - setCache: ChangeCacheFunc, - dbinfo: DatabaseInfo, - displayOptions, - serverVersion, - getDictionaryDescription: DictionaryDescriptionFunc = null, - isReadOnly = false - ) { - super(config, setConfig, cache, setCache, driver, dbinfo, serverVersion); - this.gridDisplay = new TableGridDisplay( - tableName, - driver, - config, - setConfig, - cache, - setCache, - dbinfo, - displayOptions, - serverVersion, - getDictionaryDescription, - isReadOnly - ); - this.gridDisplay.addAllExpandedColumnsToSelected = true; +// constructor( +// public tableName: NamedObjectInfo, +// driver: EngineDriver, +// config: GridConfig, +// setConfig: ChangeConfigFunc, +// cache: GridCache, +// setCache: ChangeCacheFunc, +// dbinfo: DatabaseInfo, +// displayOptions, +// serverVersion, +// getDictionaryDescription: DictionaryDescriptionFunc = null, +// isReadOnly = false +// ) { +// super(config, setConfig, cache, setCache, driver, dbinfo, serverVersion); +// this.gridDisplay = new TableGridDisplay( +// tableName, +// driver, +// config, +// setConfig, +// cache, +// setCache, +// dbinfo, +// displayOptions, +// serverVersion, +// getDictionaryDescription, +// isReadOnly +// ); +// this.gridDisplay.addAllExpandedColumnsToSelected = true; - this.isLoadedCorrectly = this.gridDisplay.isLoadedCorrectly && !!this.driver; - this.columns = []; - this.addDisplayColumns(this.gridDisplay.columns); - this.baseTable = this.gridDisplay.baseTable; - this.gridDisplay.hintBaseColumns = this.columns; - } +// this.isLoadedCorrectly = this.gridDisplay.isLoadedCorrectly && !!this.driver; +// this.columns = []; +// this.addDisplayColumns(this.gridDisplay.columns); +// this.baseTable = this.gridDisplay.baseTable; +// this.gridDisplay.hintBaseColumns = this.columns; +// } - addDisplayColumns(columns: DisplayColumn[]) { - for (const col of columns) { - this.columns.push(col); - if (this.gridDisplay.isExpandedColumn(col.uniqueName)) { - const table = this.gridDisplay.getFkTarget(col); - if (table) { - const subcolumns = this.gridDisplay.getDisplayColumns(table, col.uniquePath); - this.addDisplayColumns(subcolumns); - } - } - } - } +// addDisplayColumns(columns: DisplayColumn[]) { +// for (const col of columns) { +// this.columns.push(col); +// if (this.gridDisplay.isExpandedColumn(col.uniqueName)) { +// const table = this.gridDisplay.getFkTarget(col); +// if (table) { +// const subcolumns = this.gridDisplay.getDisplayColumns(table, col.uniquePath); +// this.addDisplayColumns(subcolumns); +// } +// } +// } +// } - getPrimaryKeyEqualCondition(row = null): Condition { - if (!row) row = this.config.formViewKeyRequested || this.config.formViewKey; - if (!row) return null; - const { primaryKey } = this.gridDisplay.baseTable; - if (!primaryKey) return null; - return { - conditionType: 'and', - conditions: primaryKey.columns.map(({ columnName }) => ({ - conditionType: 'binary', - operator: '=', - left: { - exprType: 'column', - columnName, - source: { - alias: 'basetbl', - }, - }, - right: { - exprType: 'value', - value: row[columnName], - }, - })), - }; - } +// getPrimaryKeyEqualCondition(row = null): Condition { +// if (!row) row = this.config.formViewKeyRequested || this.config.formViewKey; +// if (!row) return null; +// const { primaryKey } = this.gridDisplay.baseTable; +// if (!primaryKey) return null; +// return { +// conditionType: 'and', +// conditions: primaryKey.columns.map(({ columnName }) => ({ +// conditionType: 'binary', +// operator: '=', +// left: { +// exprType: 'column', +// columnName, +// source: { +// alias: 'basetbl', +// }, +// }, +// right: { +// exprType: 'value', +// value: row[columnName], +// }, +// })), +// }; +// } - getPrimaryKeyOperatorCondition(operator): Condition { - if (!this.config.formViewKey) return null; - const conditions = []; +// getPrimaryKeyOperatorCondition(operator): Condition { +// if (!this.config.formViewKey) return null; +// const conditions = []; - const { primaryKey } = this.gridDisplay.baseTable; - if (!primaryKey) return null; - for (let index = 0; index < primaryKey.columns.length; index++) { - conditions.push({ - conditionType: 'and', - conditions: [ - ...primaryKey.columns.slice(0, index).map(({ columnName }) => ({ - conditionType: 'binary', - operator: '=', - left: { - exprType: 'column', - columnName, - source: { - alias: 'basetbl', - }, - }, - right: { - exprType: 'value', - value: this.config.formViewKey[columnName], - }, - })), - ...primaryKey.columns.slice(index).map(({ columnName }) => ({ - conditionType: 'binary', - operator: operator, - left: { - exprType: 'column', - columnName, - source: { - alias: 'basetbl', - }, - }, - right: { - exprType: 'value', - value: this.config.formViewKey[columnName], - }, - })), - ], - }); - } +// const { primaryKey } = this.gridDisplay.baseTable; +// if (!primaryKey) return null; +// for (let index = 0; index < primaryKey.columns.length; index++) { +// conditions.push({ +// conditionType: 'and', +// conditions: [ +// ...primaryKey.columns.slice(0, index).map(({ columnName }) => ({ +// conditionType: 'binary', +// operator: '=', +// left: { +// exprType: 'column', +// columnName, +// source: { +// alias: 'basetbl', +// }, +// }, +// right: { +// exprType: 'value', +// value: this.config.formViewKey[columnName], +// }, +// })), +// ...primaryKey.columns.slice(index).map(({ columnName }) => ({ +// conditionType: 'binary', +// operator: operator, +// left: { +// exprType: 'column', +// columnName, +// source: { +// alias: 'basetbl', +// }, +// }, +// right: { +// exprType: 'value', +// value: this.config.formViewKey[columnName], +// }, +// })), +// ], +// }); +// } - if (conditions.length == 1) { - return conditions[0]; - } +// if (conditions.length == 1) { +// return conditions[0]; +// } - return { - conditionType: 'or', - conditions, - }; - } +// return { +// conditionType: 'or', +// conditions, +// }; +// } - getSelect() { - if (!this.driver) return null; - const select = this.gridDisplay.createSelect(); - if (!select) return null; - select.topRecords = 1; - return select; - } +// getSelect() { +// if (!this.driver) return null; +// const select = this.gridDisplay.createSelect(); +// if (!select) return null; +// select.topRecords = 1; +// return select; +// } - getCurrentRowQuery() { - const select = this.getSelect(); - if (!select) return null; +// getCurrentRowQuery() { +// const select = this.getSelect(); +// if (!select) return null; - select.where = mergeConditions(select.where, this.getPrimaryKeyEqualCondition()); - return select; - } +// select.where = mergeConditions(select.where, this.getPrimaryKeyEqualCondition()); +// return select; +// } - getCountSelect() { - const select = this.getSelect(); - if (!select) return null; - select.orderBy = null; - select.columns = [ - { - exprType: 'raw', - sql: 'COUNT(*)', - alias: 'count', - }, - ]; - select.topRecords = null; - return select; - } +// getCountSelect() { +// const select = this.getSelect(); +// if (!select) return null; +// select.orderBy = null; +// select.columns = [ +// { +// exprType: 'raw', +// sql: 'COUNT(*)', +// alias: 'count', +// }, +// ]; +// select.topRecords = null; +// return select; +// } - getCountQuery() { - if (!this.driver) return null; - const select = this.getCountSelect(); - if (!select) return null; - return select; - } +// getCountQuery() { +// if (!this.driver) return null; +// const select = this.getCountSelect(); +// if (!select) return null; +// return select; +// } - getBeforeCountQuery() { - if (!this.driver) return null; - const select = this.getCountSelect(); - if (!select) return null; - select.where = mergeConditions(select.where, this.getPrimaryKeyOperatorCondition('<')); - return select; - } +// getBeforeCountQuery() { +// if (!this.driver) return null; +// const select = this.getCountSelect(); +// if (!select) return null; +// select.where = mergeConditions(select.where, this.getPrimaryKeyOperatorCondition('<')); +// return select; +// } - navigate(row) { - const formViewKey = this.extractKey(row); - this.setConfig(cfg => ({ - ...cfg, - formViewKey, - })); - } +// navigate(row) { +// const formViewKey = this.extractKey(row); +// this.setConfig(cfg => ({ +// ...cfg, +// formViewKey, +// })); +// } - isLoadedCurrentRow(row) { - if (!row) return false; - const formViewKey = this.extractKey(row); - return stableStringify(formViewKey) == stableStringify(this.config.formViewKey); - } +// isLoadedCurrentRow(row) { +// if (!row) return false; +// const formViewKey = this.extractKey(row); +// return stableStringify(formViewKey) == stableStringify(this.config.formViewKey); +// } - navigateRowQuery(commmand: 'begin' | 'previous' | 'next' | 'end') { - if (!this.driver) return null; - const select = this.gridDisplay.createSelect(); - if (!select) return null; - const { primaryKey } = this.gridDisplay.baseTable; +// navigateRowQuery(commmand: 'begin' | 'previous' | 'next' | 'end') { +// if (!this.driver) return null; +// const select = this.gridDisplay.createSelect(); +// if (!select) return null; +// const { primaryKey } = this.gridDisplay.baseTable; - function getOrderBy(direction): OrderByExpression[] { - return primaryKey.columns.map(({ columnName }) => ({ - exprType: 'column', - columnName, - direction, - })); - } +// function getOrderBy(direction): OrderByExpression[] { +// return primaryKey.columns.map(({ columnName }) => ({ +// exprType: 'column', +// columnName, +// direction, +// })); +// } - select.topRecords = 1; - switch (commmand) { - case 'begin': - select.orderBy = getOrderBy('ASC'); - break; - case 'end': - select.orderBy = getOrderBy('DESC'); - break; - case 'previous': - select.orderBy = getOrderBy('DESC'); - select.where = mergeConditions(select.where, this.getPrimaryKeyOperatorCondition('<')); - break; - case 'next': - select.orderBy = getOrderBy('ASC'); - select.where = mergeConditions(select.where, this.getPrimaryKeyOperatorCondition('>')); - break; - } +// select.topRecords = 1; +// switch (commmand) { +// case 'begin': +// select.orderBy = getOrderBy('ASC'); +// break; +// case 'end': +// select.orderBy = getOrderBy('DESC'); +// break; +// case 'previous': +// select.orderBy = getOrderBy('DESC'); +// select.where = mergeConditions(select.where, this.getPrimaryKeyOperatorCondition('<')); +// break; +// case 'next': +// select.orderBy = getOrderBy('ASC'); +// select.where = mergeConditions(select.where, this.getPrimaryKeyOperatorCondition('>')); +// break; +// } - return select; - } +// return select; +// } - getChangeSetRow(row): ChangeSetRowDefinition { - if (!this.baseTable) return null; - return { - pureName: this.baseTable.pureName, - schemaName: this.baseTable.schemaName, - condition: this.extractKey(row), - }; - } +// getChangeSetRow(row): ChangeSetRowDefinition { +// if (!this.baseTable) return null; +// return { +// pureName: this.baseTable.pureName, +// schemaName: this.baseTable.schemaName, +// condition: this.extractKey(row), +// }; +// } - getChangeSetField(row, uniqueName): ChangeSetFieldDefinition { - const col = this.columns.find(x => x.uniqueName == uniqueName); - if (!col) return null; - if (!this.baseTable) return null; - if (this.baseTable.pureName != col.pureName || this.baseTable.schemaName != col.schemaName) return null; - return { - ...this.getChangeSetRow(row), - uniqueName: uniqueName, - columnName: col.columnName, - }; - } +// getChangeSetField(row, uniqueName): ChangeSetFieldDefinition { +// const col = this.columns.find(x => x.uniqueName == uniqueName); +// if (!col) return null; +// if (!this.baseTable) return null; +// if (this.baseTable.pureName != col.pureName || this.baseTable.schemaName != col.schemaName) return null; +// return { +// ...this.getChangeSetRow(row), +// uniqueName: uniqueName, +// columnName: col.columnName, +// }; +// } - toggleExpandedColumn(uniqueName: string, value?: boolean) { - this.gridDisplay.toggleExpandedColumn(uniqueName, value); - this.gridDisplay.reload(); - } +// toggleExpandedColumn(uniqueName: string, value?: boolean) { +// this.gridDisplay.toggleExpandedColumn(uniqueName, value); +// this.gridDisplay.reload(); +// } - isExpandedColumn(uniqueName: string) { - return this.gridDisplay.isExpandedColumn(uniqueName); - } +// isExpandedColumn(uniqueName: string) { +// return this.gridDisplay.isExpandedColumn(uniqueName); +// } - get editable() { - return this.gridDisplay.editable; - } -} +// get editable() { +// return this.gridDisplay.editable; +// } +// } diff --git a/packages/datalib/src/index.ts b/packages/datalib/src/index.ts index 4225d648d..db07707c5 100644 --- a/packages/datalib/src/index.ts +++ b/packages/datalib/src/index.ts @@ -10,8 +10,8 @@ export * from './FreeTableGridDisplay'; export * from './FreeTableModel'; export * from './MacroDefinition'; export * from './runMacro'; -export * from './FormViewDisplay'; -export * from './TableFormViewDisplay'; +// export * from './FormViewDisplay'; +// export * from './TableFormViewDisplay'; export * from './CollectionGridDisplay'; export * from './deleteCascade'; export * from './PerspectiveDisplay'; diff --git a/packages/web/src/datagrid/DataGrid.svelte b/packages/web/src/datagrid/DataGrid.svelte index b6160e150..fbb12f302 100644 --- a/packages/web/src/datagrid/DataGrid.svelte +++ b/packages/web/src/datagrid/DataGrid.svelte @@ -76,7 +76,7 @@ export let gridCoreComponent; export let formViewComponent = null; export let jsonViewComponent = null; - export let formDisplay; + // export let formDisplay; export let display; export let changeSetState; export let dispatchChangeSet; @@ -107,7 +107,7 @@ const collapsedLeftColumnStore = getContext('collapsedLeftColumnStore') || writable(getLocalStorage('dataGrid_collapsedLeftColumn', false)); - $: isFormView = !!(formDisplay && formDisplay.config && formDisplay.config.isFormView); + $: isFormView = !!config?.isFormView; $: isJsonView = !!config?.isJsonView; const handleExecuteMacro = () => { @@ -116,7 +116,7 @@ }; export function switchViewEnabled(view) { - if (view == 'form') return !!formViewComponent && !!formDisplay && !isFormView && display?.baseTable?.primaryKey; + if (view == 'form') return !!formViewComponent && !isFormView; if (view == 'table') return !!(isFormView || isJsonView); if (view == 'json') return !!jsonViewComponent && !isJsonView; } @@ -205,7 +205,7 @@ - + getDictionaryDescription(table, conid, database, $apps, $connections), - $connection?.isReadOnly - ) - : null; + // $: formDisplay = + // connection && $serverVersion + // ? new TableFormViewDisplay( + // { schemaName, pureName }, + // findEngineDriver($connection, $extensions), + // config, + // setConfig, + // cache, + // setCache, + // extendedDbInfo, + // { showHintColumns: getBoolSettingsValue('dataGrid.showHintColumns', true) }, + // $serverVersion, + // table => getDictionaryDescription(table, conid, database, $apps, $connections), + // $connection?.isReadOnly + // ) + // : null; const setChildConfig = (value, reference = undefined) => { if (_.isFunction(value)) { @@ -157,7 +157,6 @@ gridCoreComponent={SqlDataGridCore} formViewComponent={SqlFormView} {display} - {formDisplay} showReferences showMacros onRunMacro={handleRunMacro} diff --git a/packages/web/src/formview/ChangeSetFormer.ts b/packages/web/src/formview/ChangeSetFormer.ts index d107c70ec..2b8b1b50e 100644 --- a/packages/web/src/formview/ChangeSetFormer.ts +++ b/packages/web/src/formview/ChangeSetFormer.ts @@ -1,96 +1,96 @@ -import type { ChangeSet, ChangeSetRowDefinition } from 'dbgate-datalib'; -import { - changeSetContainsChanges, - changeSetInsertNewRow, - createChangeSet, - deleteChangeSetRows, - findExistingChangeSetItem, - getChangeSetInsertedRows, - TableFormViewDisplay, - revertChangeSetRowChanges, - setChangeSetValue, -} from 'dbgate-datalib'; -import Former from './Former'; +// import type { ChangeSet, ChangeSetRowDefinition } from 'dbgate-datalib'; +// import { +// changeSetContainsChanges, +// changeSetInsertNewRow, +// createChangeSet, +// deleteChangeSetRows, +// findExistingChangeSetItem, +// getChangeSetInsertedRows, +// TableFormViewDisplay, +// revertChangeSetRowChanges, +// setChangeSetValue, +// } from 'dbgate-datalib'; +// import Former from './Former'; -export default class ChangeSetFormer extends Former { - public changeSet: ChangeSet; - public setChangeSet: Function; - private batchChangeSet: ChangeSet; - public rowDefinition: ChangeSetRowDefinition; - public rowStatus; - public rowData: {}; +// export default class ChangeSetFormer extends Former { +// public changeSet: ChangeSet; +// public setChangeSet: Function; +// private batchChangeSet: ChangeSet; +// public rowDefinition: ChangeSetRowDefinition; +// public rowStatus; +// public rowData: {}; - constructor( - public sourceRow: any, - public changeSetState, - public dispatchChangeSet, - public display: TableFormViewDisplay - ) { - super(); - this.changeSet = changeSetState && changeSetState.value; - this.setChangeSet = value => dispatchChangeSet({ type: 'set', value }); - this.batchChangeSet = null; - this.rowDefinition = display.getChangeSetRow(sourceRow); - const [matchedField, matchedChangeSetItem] = findExistingChangeSetItem(this.changeSet, this.rowDefinition); - this.rowData = matchedChangeSetItem ? { ...sourceRow, ...matchedChangeSetItem.fields } : sourceRow; - let status = 'regular'; - if (matchedChangeSetItem && matchedField == 'updates') status = 'updated'; - if (matchedField == 'deletes') status = 'deleted'; - this.rowStatus = { - status, - modifiedFields: - matchedChangeSetItem && matchedChangeSetItem.fields ? new Set(Object.keys(matchedChangeSetItem.fields)) : null, - }; - } +// constructor( +// public sourceRow: any, +// public changeSetState, +// public dispatchChangeSet, +// public display: TableFormViewDisplay +// ) { +// super(); +// this.changeSet = changeSetState && changeSetState.value; +// this.setChangeSet = value => dispatchChangeSet({ type: 'set', value }); +// this.batchChangeSet = null; +// this.rowDefinition = display.getChangeSetRow(sourceRow); +// const [matchedField, matchedChangeSetItem] = findExistingChangeSetItem(this.changeSet, this.rowDefinition); +// this.rowData = matchedChangeSetItem ? { ...sourceRow, ...matchedChangeSetItem.fields } : sourceRow; +// let status = 'regular'; +// if (matchedChangeSetItem && matchedField == 'updates') status = 'updated'; +// if (matchedField == 'deletes') status = 'deleted'; +// this.rowStatus = { +// status, +// modifiedFields: +// matchedChangeSetItem && matchedChangeSetItem.fields ? new Set(Object.keys(matchedChangeSetItem.fields)) : null, +// }; +// } - applyModification(changeSetReducer) { - if (this.batchChangeSet) { - this.batchChangeSet = changeSetReducer(this.batchChangeSet); - } else { - this.setChangeSet(changeSetReducer(this.changeSet)); - } - } +// applyModification(changeSetReducer) { +// if (this.batchChangeSet) { +// this.batchChangeSet = changeSetReducer(this.batchChangeSet); +// } else { +// this.setChangeSet(changeSetReducer(this.changeSet)); +// } +// } - setCellValue(uniqueName: string, value: any) { - const row = this.sourceRow; - const definition = this.display.getChangeSetField(row, uniqueName); - this.applyModification(chs => setChangeSetValue(chs, definition, value)); - } +// setCellValue(uniqueName: string, value: any) { +// const row = this.sourceRow; +// const definition = this.display.getChangeSetField(row, uniqueName); +// this.applyModification(chs => setChangeSetValue(chs, definition, value)); +// } - deleteRow(index: number) { - this.applyModification(chs => deleteChangeSetRows(chs, this.rowDefinition)); - } +// deleteRow(index: number) { +// this.applyModification(chs => deleteChangeSetRows(chs, this.rowDefinition)); +// } - beginUpdate() { - this.batchChangeSet = this.changeSet; - } - endUpdate() { - this.setChangeSet(this.batchChangeSet); - this.batchChangeSet = null; - } +// beginUpdate() { +// this.batchChangeSet = this.changeSet; +// } +// endUpdate() { +// this.setChangeSet(this.batchChangeSet); +// this.batchChangeSet = null; +// } - revertRowChanges() { - this.applyModification(chs => revertChangeSetRowChanges(chs, this.rowDefinition)); - } - revertAllChanges() { - this.applyModification(chs => createChangeSet()); - } - undo() { - this.dispatchChangeSet({ type: 'undo' }); - } - redo() { - this.dispatchChangeSet({ type: 'redo' }); - } - get editable() { - return this.display.editable; - } - get canUndo() { - return this.changeSetState.canUndo; - } - get canRedo() { - return this.changeSetState.canRedo; - } - get containsChanges() { - return changeSetContainsChanges(this.changeSet); - } -} +// revertRowChanges() { +// this.applyModification(chs => revertChangeSetRowChanges(chs, this.rowDefinition)); +// } +// revertAllChanges() { +// this.applyModification(chs => createChangeSet()); +// } +// undo() { +// this.dispatchChangeSet({ type: 'undo' }); +// } +// redo() { +// this.dispatchChangeSet({ type: 'redo' }); +// } +// get editable() { +// return this.display.editable; +// } +// get canUndo() { +// return this.changeSetState.canUndo; +// } +// get canRedo() { +// return this.changeSetState.canRedo; +// } +// get containsChanges() { +// return changeSetContainsChanges(this.changeSet); +// } +// } diff --git a/packages/web/src/formview/FormView.svelte b/packages/web/src/formview/FormView.svelte index a47f6e092..5fda814cd 100644 --- a/packages/web/src/formview/FormView.svelte +++ b/packages/web/src/formview/FormView.svelte @@ -39,8 +39,8 @@ category: 'Data form', name: 'Revert row changes', keyText: 'CtrlOrCommand+U', - testEnabled: () => getCurrentDataForm()?.getFormer()?.containsChanges, - onClick: () => getCurrentDataForm().getFormer().revertRowChanges(), + testEnabled: () => getCurrentDataForm()?.getGrider()?.containsChanges, + onClick: () => getCurrentDataForm().getGrider().revertRowChanges(0), }); registerCommand({ @@ -60,8 +60,8 @@ icon: 'icon undo', toolbar: true, isRelatedToTab: true, - testEnabled: () => getCurrentDataForm()?.getFormer()?.canUndo, - onClick: () => getCurrentDataForm().getFormer().undo(), + testEnabled: () => getCurrentDataForm()?.getGrider()?.canUndo, + onClick: () => getCurrentDataForm().getGrider().undo(), }); registerCommand({ @@ -72,8 +72,8 @@ icon: 'icon redo', toolbar: true, isRelatedToTab: true, - testEnabled: () => getCurrentDataForm()?.getFormer()?.canRedo, - onClick: () => getCurrentDataForm().getFormer().redo(), + testEnabled: () => getCurrentDataForm()?.getGrider()?.canRedo, + onClick: () => getCurrentDataForm().getGrider().redo(), }); registerCommand({ @@ -194,8 +194,9 @@ export let allRowCount; export let rowCountBefore; export let isLoading; - export let former; - export let formDisplay; + export let grider; + export let display; + // export let formDisplay; export let onNavigate; let wrapperHeight = 1; @@ -212,23 +213,25 @@ domFocusField.focus(); } - $: rowData = former?.rowData; - $: rowStatus = former?.rowStatus; + $: rowData = grider?.getRowData(0); + $: rowStatus = grider?.getRowStatus(0); $: rowCount = Math.floor((wrapperHeight - 22) / (rowHeight + 2)); - $: columnChunks = _.chunk(formDisplay.columns, rowCount) as any[][]; + $: columnChunks = _.chunk(display?.columns || [], rowCount) as any[][]; - $: rowCountInfo = getRowCountInfo(rowCountBefore, allRowCount); + $: rowCountInfo = getRowCountInfo(allRowCount); - function getRowCountInfo(rowCountBefore, allRowCount) { + function getRowCountInfo(allRowCount) { if (rowData == null) return 'No data'; - if (allRowCount == null || rowCountBefore == null) return 'Loading row count...'; - return `Row: ${(rowCountBefore + 1).toLocaleString()} / ${allRowCount.toLocaleString()}`; + if (allRowCount == null || display == null) return 'Loading row count...'; + return `Row: ${( + (display.config.formViewRecordNumber || 0) + 1 + ).toLocaleString()} / ${allRowCount.toLocaleString()}`; } - export function getFormer() { - return former; + export function getGrider() { + return grider; } // export function getFormDisplay() { @@ -263,19 +266,19 @@ export async function reconnect() { await apiCall('database-connections/refresh', { conid, database }); - formDisplay.reload(); + display.reload(); } export async function refresh() { - formDisplay.reload(); + display.reload(); } export function filterSelectedValue() { - formDisplay.filterCellValue(getCellColumn(currentCell), rowData); + // display.filterCellValue(getCellColumn(currentCell), rowData); } export function addToFilter() { - formDisplay.addFilterColumn(getCellColumn(currentCell)); + // display.addFilterColumn(getCellColumn(currentCell)); } export const activator = createActivator('FormView', false); @@ -319,7 +322,7 @@ function setCellValue(cell, value) { const column = getCellColumn(cell); if (!column) return; - former.setCellValue(column.uniqueName, value); + grider.setCellValue(0, column.uniqueName, value); } const getCellWidth = (row, col) => { @@ -331,7 +334,7 @@ const [inplaceEditorState, dispatchInsplaceEditor] = createReducer((state, action) => { switch (action.type) { case 'show': { - if (!former.editable) return {}; + if (!grider.editable) return {}; const column = getCellColumn(action.cell); if (!column) return state; if (column.uniquePath.length > 1) return state; @@ -418,14 +421,14 @@ if (event.keyCode == keycodes.numPadAdd) { const col = getCellColumn(currentCell); if (col.foreignKey) { - formDisplay.toggleExpandedColumn(col.uniqueName, true); + display.toggleExpandedColumn(col.uniqueName, true); } } if (event.keyCode == keycodes.numPadSub) { const col = getCellColumn(currentCell); if (col.foreignKey) { - formDisplay.toggleExpandedColumn(col.uniqueName, false); + display.toggleExpandedColumn(col.uniqueName, false); } } @@ -448,7 +451,7 @@ if (shouldOpenMultilineDialog(cellData)) { showModal(EditCellDataModal, { value: cellData, - onSave: value => former.setCellValue(column.uniqueName, value), + onSave: value => grider.setCellValue(0, column.uniqueName, value), }); return true; } @@ -476,7 +479,7 @@ columnIndex = incrementFunc(columnIndex); while ( isInRange(columnIndex) && - !filterName(formDisplay.config.formColumnFilterText, formDisplay.columns[columnIndex].columnName) + !filterName(display.config.formColumnFilterText, display.columns[columnIndex].columnName) ) { columnIndex = incrementFunc(columnIndex); } @@ -484,13 +487,13 @@ columnIndex = firstInRange; while ( isInRange(columnIndex) && - !filterName(formDisplay.config.formColumnFilterText, formDisplay.columns[columnIndex].columnName) + !filterName(display.config.formColumnFilterText, display.columns[columnIndex].columnName) ) { columnIndex = incrementFunc(columnIndex); } } if (!isInRange(columnIndex)) columnIndex = lastInRange; - return moveCurrentCell(columnIndex % formDisplay.columns.length, Math.floor(columnIndex / rowCount) * 2); + return moveCurrentCell(columnIndex % display.columns.length, Math.floor(columnIndex / rowCount) * 2); }; if (isCtrlOrCommandKey(event)) { @@ -507,23 +510,23 @@ case keycodes.rightArrow: return moveCurrentCell(currentCell[0], currentCell[1] + 1); case keycodes.upArrow: - if (currentCell[1] % 2 == 0 && formDisplay.config.formColumnFilterText) { + if (currentCell[1] % 2 == 0 && display.config.formColumnFilterText) { return findFilteredColumn( x => x - 1, x => x >= 0, - formDisplay.columns.length - 1, + display.columns.length - 1, 0 ); } return moveCurrentCell(currentCell[0] - 1, currentCell[1]); case keycodes.downArrow: - if (currentCell[1] % 2 == 0 && formDisplay.config.formColumnFilterText) { + if (currentCell[1] % 2 == 0 && display.config.formColumnFilterText) { return findFilteredColumn( x => x + 1, - x => x < formDisplay.columns.length, + x => x < display.columns.length, 0, - formDisplay.columns.length - 1 + display.columns.length - 1 ); } @@ -547,10 +550,10 @@ showModal(DictionaryLookupModal, { conid, database, - driver: formDisplay?.driver, + driver: display?.driver, pureName: col.foreignKey.refTableName, schemaName: col.foreignKey.refSchemaName, - onConfirm: value => former.setCellValue(col.uniqueName, value), + onConfirm: value => grider.setCellValue(0, col.uniqueName, value), }); } @@ -566,18 +569,18 @@ data-row={rowIndex} data-col={chunkIndex * 2} style={rowHeight > 1 ? `height: ${rowHeight}px` : undefined} - class:columnFiltered={formDisplay.config.formColumnFilterText && - filterName(formDisplay.config.formColumnFilterText, col.columnName)} + class:columnFiltered={display.config.formColumnFilterText && + filterName(display.config.formColumnFilterText, col.columnName)} class:isSelected={currentCell[0] == rowIndex && currentCell[1] == chunkIndex * 2} bind:this={domCells[`${rowIndex},${chunkIndex * 2}`]} >
{#if col.foreignKey} { e.stopPropagation(); - formDisplay.toggleExpandedColumn(col.uniqueName); + display.toggleExpandedColumn(col.uniqueName); }} /> {:else} @@ -614,7 +617,7 @@ {dispatchInsplaceEditor} cellValue={rowData[col.uniqueName]} onSetValue={value => { - former.setCellValue(col.uniqueName, value); + grider.setCellValue(0, col.uniqueName, value); }} /> {/if} diff --git a/packages/web/src/formview/Former.ts b/packages/web/src/formview/Former.ts index cbd1508d2..045b74bac 100644 --- a/packages/web/src/formview/Former.ts +++ b/packages/web/src/formview/Former.ts @@ -1,53 +1,53 @@ -// export interface GriderRowStatus { -// status: 'regular' | 'updated' | 'deleted' | 'inserted'; -// modifiedFields?: Set; -// insertedFields?: Set; -// deletedFields?: Set; +// // export interface GriderRowStatus { +// // status: 'regular' | 'updated' | 'deleted' | 'inserted'; +// // modifiedFields?: Set; +// // insertedFields?: Set; +// // deletedFields?: Set; +// // } + +// export default abstract class Former { +// public rowData: any; + +// // getRowStatus(index): GriderRowStatus { +// // const res: GriderRowStatus = { +// // status: 'regular', +// // }; +// // return res; +// // } +// beginUpdate() {} +// endUpdate() {} +// setCellValue(uniqueName: string, value: any) {} +// revertRowChanges() {} +// revertAllChanges() {} +// undo() {} +// redo() {} +// get editable() { +// return false; // } - -export default abstract class Former { - public rowData: any; - - // getRowStatus(index): GriderRowStatus { - // const res: GriderRowStatus = { - // status: 'regular', - // }; - // return res; - // } - beginUpdate() {} - endUpdate() {} - setCellValue(uniqueName: string, value: any) {} - revertRowChanges() {} - revertAllChanges() {} - undo() {} - redo() {} - get editable() { - return false; - } - get canInsert() { - return false; - } - get allowSave() { - return this.containsChanges; - } - get canUndo() { - return false; - } - get canRedo() { - return false; - } - get containsChanges() { - return false; - } - get disableLoadNextPage() { - return false; - } - get errors() { - return null; - } - updateRow(changeObject) { - for (const key of Object.keys(changeObject)) { - this.setCellValue(key, changeObject[key]); - } - } -} +// get canInsert() { +// return false; +// } +// get allowSave() { +// return this.containsChanges; +// } +// get canUndo() { +// return false; +// } +// get canRedo() { +// return false; +// } +// get containsChanges() { +// return false; +// } +// get disableLoadNextPage() { +// return false; +// } +// get errors() { +// return null; +// } +// updateRow(changeObject) { +// for (const key of Object.keys(changeObject)) { +// this.setCellValue(key, changeObject[key]); +// } +// } +// } diff --git a/packages/web/src/formview/SqlFormView.svelte b/packages/web/src/formview/SqlFormView.svelte index af0e3761e..34aa87e66 100644 --- a/packages/web/src/formview/SqlFormView.svelte +++ b/packages/web/src/formview/SqlFormView.svelte @@ -16,17 +16,18 @@ - +