@vuu-ui/vuu-data-editing 3.0.0-beta.1 → 3.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/EditSession.js +1 -2
- package/cjs/EditSession.js.map +1 -1
- package/cjs/edit-utils.js +1 -2
- package/cjs/edit-utils.js.map +1 -1
- package/cjs/index.js +3 -3
- package/cjs/useEditableTable.js +1 -2
- package/cjs/useEditableTable.js.map +1 -1
- package/esm/EditSession.js +1 -2
- package/esm/EditSession.js.map +1 -1
- package/esm/edit-utils.js +1 -1
- package/esm/edit-utils.js.map +1 -1
- package/esm/index.js +1 -1
- package/esm/useEditableTable.js +1 -2
- package/esm/useEditableTable.js.map +1 -1
- package/package.json +6 -7
- package/types/edit-utils.d.ts +1 -1
- package/types/index.d.ts +1 -1
package/cjs/EditSession.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
4
|
-
var vuuUtils2 = require('@vuu-ui/vuu-utils2');
|
|
5
4
|
|
|
6
5
|
var __defProp = Object.defineProperty;
|
|
7
6
|
var __typeError = (msg) => {
|
|
@@ -362,7 +361,7 @@ const _EditSession = class _EditSession extends vuuUtils.EventEmitter {
|
|
|
362
361
|
__privateMethod(this, _EditSession_instances, setLifecycle_fn).call(this, { status: "idle" });
|
|
363
362
|
} catch (cause) {
|
|
364
363
|
const error = cause instanceof Error ? cause : new Error(String(cause));
|
|
365
|
-
if (error instanceof
|
|
364
|
+
if (error instanceof vuuUtils.StaleUpdateError) {
|
|
366
365
|
__privateMethod(this, _EditSession_instances, setStale_fn).call(this, true);
|
|
367
366
|
}
|
|
368
367
|
__privateMethod(this, _EditSession_instances, setLifecycle_fn).call(this, {
|
package/cjs/EditSession.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditSession.js","sources":["../../../packages/vuu-data-editing/src/EditSession.tsx"],"sourcesContent":["import type {\n CopyOption,\n DataSource,\n DeleteRowMode,\n DeleteSelectedRowsResult,\n EditApi,\n EditSessionMode,\n UndoRowChangeResult,\n} from \"@vuu-ui/vuu-data-types\";\nimport type { RpcResult, VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { EventEmitter, isRpcError } from \"@vuu-ui/vuu-utils\";\nimport { StaleUpdateError } from \"@vuu-ui/vuu-utils2\";\n\nexport type EditState = \"clean\" | \"dirty\" | \"invalid\" | \"stale\";\nexport type EditSessionApi =\n | \"createSessionDataSource\"\n | \"beginEditSession\";\nconst toEditSessionMode = (copyOption: CopyOption): EditSessionMode => {\n switch (copyOption) {\n case \"All\":\n return \"all-rows\";\n case \"Selected\":\n return \"selected-rows\";\n case \"Empty\":\n return \"empty-session-table\";\n }\n};\nexport type NewRowState = {\n columns: readonly string[];\n draftRevision: number;\n errors: Readonly<Record<string, string>>;\n submitting: boolean;\n values: Readonly<Record<string, VuuRowDataItemType>>;\n};\n\nexport type EditLifecycle =\n | { status: \"idle\" }\n | { status: \"starting\" }\n | { status: \"active\"; sessionDataSource: DataSource }\n | { status: \"ending\"; sessionDataSource: DataSource }\n | {\n status: \"error\";\n operation: \"begin\" | \"end\";\n error: Error;\n sessionDataSource?: DataSource;\n };\n\nexport class EditError extends Error {}\nexport class SupersededEditError extends Error {}\n\ntype CellEdit = {\n originalValue: VuuRowDataItemType;\n editedValue: VuuRowDataItemType;\n isValid: boolean;\n};\n\ntype RowEditDetails = {\n /**\n * Column name => cell edit details\n */\n cellEdits: Map<string, CellEdit>;\n};\n\ntype EditSessionEvents = {\n cellEditChanged: (key: string, columnName: string) => void;\n editState: (editState: EditState) => void;\n lifecycle: (lifecycle: EditLifecycle) => void;\n newRow: (newRowState: NewRowState) => void;\n};\n\nexport class EditSession extends EventEmitter<EditSessionEvents> {\n static readonly newRowKey = \"__vuu_new_row__\";\n /**\n * Row key => row edits\n */\n #rowEdits = new Map<string, RowEditDetails>();\n #deletedRows = new Set<string>();\n #deleteRevision = 0;\n #rowDeleteRevisions = new Map<string, number>();\n #editCount = 0;\n #deleteCount = 0;\n #addCount = 0;\n #invalidCount = 0;\n #isStale = false;\n #commitRevision = 0;\n #cellCommitRevisions = new Map<string, Map<string, number>>();\n #deleteMode: DeleteRowMode;\n #editSessionApi: EditSessionApi;\n #sourceTableDataSource?: EditApi;\n #sessionDataSource?: DataSource;\n #newRowState: NewRowState = {\n columns: [],\n draftRevision: 0,\n errors: {},\n submitting: false,\n values: {},\n };\n #lifecycle: EditLifecycle = { status: \"idle\" };\n /** Prevent begin/end RPCs from overlapping and observing stale lifecycle state. */\n #transitionQueue: Promise<void> = Promise.resolve();\n\n constructor(\n dataSource: EditApi,\n deleteMode: DeleteRowMode = \"soft\",\n editSessionApi: EditSessionApi = \"createSessionDataSource\",\n ) {\n super();\n this.#sourceTableDataSource = dataSource;\n this.#deleteMode = deleteMode;\n this.#editSessionApi = editSessionApi;\n }\n\n get editCount() {\n return this.#editCount;\n }\n\n set editCount(val: number) {\n this.#setEditCounts(val, this.#invalidCount);\n }\n\n get invalidCount() {\n return this.#invalidCount;\n }\n\n set invalidCount(val: number) {\n this.#setEditCounts(this.#editCount, val);\n }\n\n get deleteCount() {\n return this.#deleteCount;\n }\n\n set deleteCount(val: number) {\n if (val !== this.#deleteCount) {\n const oldState = this.editState;\n const oldCount = this.#deleteCount;\n this.#deleteCount = val;\n this.#emitEditStateChange(oldState, oldCount === 0 || val === 0);\n }\n }\n\n get addCount() {\n return this.#addCount;\n }\n\n set addCount(val: number) {\n if (val !== this.#addCount) {\n const oldState = this.editState;\n const oldCount = this.#addCount;\n this.#addCount = val;\n this.#emitEditStateChange(oldState, oldCount === 0 || val === 0);\n }\n }\n\n get editState(): EditState {\n if (this.#invalidCount > 0) {\n return \"invalid\";\n }\n if (this.#isStale) {\n return \"stale\";\n }\n return this.#editCount === 0 &&\n this.#deleteCount === 0 &&\n this.#addCount === 0\n ? \"clean\"\n : \"dirty\";\n }\n\n #emitEditStateChange(oldState: EditState, force = false) {\n const newState = this.editState;\n if (force || newState !== oldState) {\n this.emit(\"editState\", newState);\n }\n }\n\n #setEditCounts(editCount: number, invalidCount: number) {\n if (editCount !== this.#editCount || invalidCount !== this.#invalidCount) {\n const oldState = this.editState;\n this.#editCount = editCount;\n this.#invalidCount = invalidCount;\n this.#emitEditStateChange(oldState);\n }\n }\n\n #setStale(isStale: boolean) {\n if (isStale !== this.#isStale) {\n const oldState = this.editState;\n this.#isStale = isStale;\n this.#emitEditStateChange(oldState);\n }\n }\n\n #refreshEditCounts() {\n let editCount = 0;\n let invalidCount = 0;\n for (const { cellEdits } of this.#rowEdits.values()) {\n for (const cellEdit of cellEdits.values()) {\n if (cellEdit.isValid) {\n editCount++;\n } else {\n invalidCount++;\n }\n }\n }\n this.#setEditCounts(editCount, invalidCount);\n }\n\n get newRowState(): NewRowState {\n return this.#newRowState;\n }\n\n isNewRow(key: string) {\n return key === EditSession.newRowKey;\n }\n\n isNewRowFinalColumn(columnName: string) {\n return this.#newRowState.columns.at(-1) === columnName;\n }\n\n isNewRowComplete() {\n return this.#newRowState.columns.every((column) => {\n const value = this.#newRowState.values[column];\n return (\n value !== undefined &&\n (typeof value !== \"string\" || value.trim() !== \"\")\n );\n });\n }\n\n configureNewRow(columns: readonly string[]) {\n if (\n columns.length === this.#newRowState.columns.length &&\n columns.every(\n (column, index) => column === this.#newRowState.columns[index],\n )\n ) {\n return;\n }\n\n const columnSet = new Set(columns);\n const errors = Object.fromEntries(\n Object.entries(this.#newRowState.errors).filter(([column]) =>\n columnSet.has(column),\n ),\n );\n this.#setNewRowState({\n ...this.#newRowState,\n columns: [...columns],\n errors,\n });\n }\n\n setNewRowValue(column: string, value: VuuRowDataItemType) {\n const errors = { ...this.#newRowState.errors };\n delete errors[column];\n this.#setNewRowState({\n ...this.#newRowState,\n errors,\n values: { ...this.#newRowState.values, [column]: value },\n });\n }\n\n async addNewRow(): Promise<RpcResult> {\n const missingErrors = Object.fromEntries(\n this.#newRowState.columns\n .filter((column) => {\n const value = this.#newRowState.values[column];\n return (\n value === undefined ||\n (typeof value === \"string\" && value.trim() === \"\")\n );\n })\n .map((column) => [column, \"Value required\"]),\n );\n const errors = { ...this.#newRowState.errors, ...missingErrors };\n\n if (Object.keys(errors).length > 0) {\n this.#setNewRowState({ ...this.#newRowState, errors });\n return { data: undefined, type: \"SUCCESS_RESULT\" };\n }\n\n if (this.#newRowState.submitting) {\n return { data: undefined, type: \"SUCCESS_RESULT\" };\n }\n\n this.#setNewRowState({ ...this.#newRowState, submitting: true });\n try {\n const response = await this.addRow({ ...this.#newRowState.values });\n if (isRpcError(response)) {\n const finalColumn = this.#newRowState.columns.at(-1);\n this.#setNewRowState({\n ...this.#newRowState,\n errors: finalColumn\n ? { [finalColumn]: response.errorMessage }\n : this.#newRowState.errors,\n submitting: false,\n });\n return response;\n }\n\n this.#setNewRowState({\n columns: this.#newRowState.columns,\n draftRevision: this.#newRowState.draftRevision + 1,\n errors: {},\n submitting: false,\n values: {},\n });\n return response;\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : \"Unable to add row\";\n const finalColumn = this.#newRowState.columns.at(-1);\n this.#setNewRowState({\n ...this.#newRowState,\n errors: finalColumn\n ? { [finalColumn]: errorMessage }\n : this.#newRowState.errors,\n submitting: false,\n });\n return { errorMessage, type: \"ERROR_RESULT\" };\n }\n }\n\n #setNewRowState(newRowState: NewRowState) {\n this.#newRowState = newRowState;\n this.emit(\"newRow\", newRowState);\n }\n\n async deleteSelectedRows(): Promise<void> {\n const response = await this.dataSource?.deleteSelectedRows?.(\n this.#deleteMode,\n );\n if (isRpcError(response)) return;\n const deletedKeys = (response?.data as DeleteSelectedRowsResult | undefined)\n ?.deletedKeys;\n if (deletedKeys && deletedKeys.length > 0) {\n let newCount = 0;\n for (const key of deletedKeys) {\n this.#rowDeleteRevisions.set(key, ++this.#deleteRevision);\n if (!this.#deletedRows.has(key)) {\n this.#deletedRows.add(key);\n newCount++;\n }\n }\n if (newCount > 0) {\n this.deleteCount = this.#deleteCount + newCount;\n }\n }\n }\n\n async addRow(\n rowData: Record<string, VuuRowDataItemType> = {},\n ): Promise<RpcResult> {\n const addRow = this.dataSource?.addRow;\n if (addRow === undefined) {\n throw Error(\"[EditSession] datasource does not support adding rows\");\n }\n\n const response = await addRow.call(this.dataSource, rowData);\n if (response === undefined) {\n throw Error(\n \"[EditSession] datasource returned no response when adding row\",\n );\n }\n if (!isRpcError(response)) {\n this.addCount = this.#addCount + 1;\n }\n return response;\n }\n\n restoreRows(keys: string[]) {\n for (const key of keys) {\n if (this.#deletedRows.has(key)) {\n this.#deletedRows.delete(key);\n this.#rowDeleteRevisions.delete(key);\n this.deleteCount = this.#deleteCount - 1;\n }\n }\n }\n\n hasRowChanges(key: string): boolean {\n return this.#rowEdits.has(key) || this.#deletedRows.has(key);\n }\n\n isCellEdited(key: string, columnName: string): boolean {\n const cellEdit = this.#rowEdits.get(key)?.cellEdits.get(columnName);\n return (\n cellEdit?.isValid === true &&\n cellEdit.originalValue !== cellEdit.editedValue\n );\n }\n\n async undoRowChange(key: string): Promise<void> {\n if (!this.inEditMode) return;\n\n const undoRevision = this.#commitRevision;\n const deleteRevisionAtRequest = this.#rowDeleteRevisions.get(key);\n const rowEditsAtRequest = this.#rowEdits.get(key);\n const columnsAtRequest = new Set(rowEditsAtRequest?.cellEdits.keys());\n const wasDeleted = this.#deletedRows.has(key);\n const response = await this.dataSource?.undoRowChange?.(key);\n\n if (isRpcError(response)) {\n return;\n }\n\n const rowEdits = this.#rowEdits.get(key);\n if (rowEdits) {\n const changedColumns: string[] = [];\n for (const columnName of columnsAtRequest) {\n const latestRevision =\n this.#cellCommitRevisions.get(key)?.get(columnName) ?? 0;\n if (latestRevision > undoRevision) {\n continue;\n }\n if (this.isCellEdited(key, columnName)) {\n changedColumns.push(columnName);\n }\n rowEdits.cellEdits.delete(columnName);\n this.#setCellCommitRevision(key, columnName);\n }\n if (rowEdits.cellEdits.size === 0) {\n this.#rowEdits.delete(key);\n }\n this.#refreshEditCounts();\n for (const columnName of changedColumns) {\n this.emit(\"cellEditChanged\", key, columnName);\n }\n }\n if (\n wasDeleted &&\n this.#deletedRows.has(key) &&\n this.#rowDeleteRevisions.get(key) === deleteRevisionAtRequest\n ) {\n this.#deletedRows.delete(key);\n this.#rowDeleteRevisions.delete(key);\n this.deleteCount = this.#deleteCount - 1;\n }\n\n // If the server deleted a newly inserted row, decrement addCount\n const wasInsertedRow =\n (response?.data as UndoRowChangeResult | undefined)?.wasInsertedRow ===\n true;\n if (wasInsertedRow) {\n this.addCount = this.#addCount - 1;\n }\n }\n\n #clearEdits() {\n const oldState = this.editState;\n const editedCells = [...this.#rowEdits].flatMap(([key, { cellEdits }]) =>\n [...cellEdits.keys()]\n .filter((columnName) => this.isCellEdited(key, columnName))\n .map((columnName) => [key, columnName] as const),\n );\n this.#rowEdits.clear();\n this.#deletedRows.clear();\n this.#rowDeleteRevisions.clear();\n this.#cellCommitRevisions.clear();\n this.#editCount = 0;\n this.#deleteCount = 0;\n this.#addCount = 0;\n this.#invalidCount = 0;\n this.#isStale = false;\n this.#setNewRowState({\n columns: this.#newRowState.columns,\n draftRevision: this.#newRowState.draftRevision + 1,\n errors: {},\n submitting: false,\n values: {},\n });\n for (const [key, columnName] of editedCells) {\n this.emit(\"cellEditChanged\", key, columnName);\n }\n this.#emitEditStateChange(oldState);\n }\n\n #setLifecycle(lifecycle: EditLifecycle) {\n this.#lifecycle = lifecycle;\n this.emit(\"lifecycle\", lifecycle);\n }\n\n #enqueue<T>(operation: () => Promise<T>): Promise<T> {\n const result = this.#transitionQueue.then(operation);\n // Reassign to a settled continuation: callers keep the real result, while a\n // rejected transition cannot poison the queue for later begin/end requests.\n this.#transitionQueue = result.then(\n () => undefined,\n () => undefined,\n );\n return result;\n }\n\n begin(copyOption: CopyOption = \"All\"): Promise<DataSource> {\n return this.#enqueue(async () => {\n if (\n this.#lifecycle.status === \"active\" ||\n (this.#lifecycle.status === \"error\" &&\n this.#lifecycle.operation === \"end\")\n ) {\n const sessionDataSource = this.#sessionDataSource;\n if (!sessionDataSource) {\n throw new Error(\"[EditSession] active lifecycle has no datasource\");\n }\n if (this.#lifecycle.status === \"error\") {\n this.#setLifecycle({\n status: \"active\",\n sessionDataSource,\n });\n }\n return sessionDataSource;\n }\n\n this.#setLifecycle({ status: \"starting\" });\n\n try {\n const sourceDataSource = this.#sourceTableDataSource;\n const sessionDataSource =\n this.#editSessionApi === \"beginEditSession\"\n ? await sourceDataSource?.beginEditSession?.(\n toEditSessionMode(copyOption),\n )\n : await sourceDataSource?.createSessionDataSource?.(copyOption);\n if (!sessionDataSource) {\n throw new Error(\n `[EditSession] datasource does not support ${this.#editSessionApi}`,\n );\n }\n\n this.#sessionDataSource = sessionDataSource;\n this.#setStale(false);\n this.#setLifecycle({ status: \"active\", sessionDataSource });\n return sessionDataSource;\n } catch (cause) {\n const error = cause instanceof Error ? cause : new Error(String(cause));\n this.#setLifecycle({ status: \"error\", operation: \"begin\", error });\n throw error;\n }\n\n });\n }\n\n get dataSource() {\n return this.#sessionDataSource ?? this.#sourceTableDataSource;\n }\n\n get sessionDataSource() {\n return this.#sessionDataSource;\n }\n\n end(saveChanges = false, force = false): Promise<void> {\n return this.#enqueue(async () => {\n if (\n this.#lifecycle.status === \"idle\" ||\n (this.#lifecycle.status === \"error\" &&\n this.#lifecycle.operation === \"begin\")\n ) {\n if (this.#lifecycle.status !== \"idle\") {\n this.#setLifecycle({ status: \"idle\" });\n }\n return;\n }\n\n const sessionDataSource = this.#sessionDataSource;\n if (!sessionDataSource) {\n throw new Error(\"[EditSession] ending lifecycle has no datasource\");\n }\n this.#setLifecycle({ status: \"ending\", sessionDataSource });\n\n try {\n await this.dataSource?.endEditSession?.(saveChanges, force);\n this.#clearEdits();\n this.#sessionDataSource = undefined;\n this.#setLifecycle({ status: \"idle\" });\n } catch (cause) {\n const error = cause instanceof Error ? cause : new Error(String(cause));\n if (error instanceof StaleUpdateError) {\n this.#setStale(true);\n }\n this.#setLifecycle({\n status: \"error\",\n operation: \"end\",\n error,\n sessionDataSource,\n });\n throw error;\n }\n });\n }\n\n get lifecycle() {\n return this.#lifecycle;\n }\n\n get inEditMode() {\n return (\n this.#lifecycle.status === \"active\" ||\n this.#lifecycle.status === \"ending\" ||\n (this.#lifecycle.status === \"error\" &&\n this.#lifecycle.operation === \"end\")\n );\n }\n\n #getOrCreateRowEdits(key: string): RowEditDetails {\n const rowEditDetails = this.#rowEdits.get(key);\n if (rowEditDetails) {\n return rowEditDetails;\n } else {\n const rowEditDetails = {\n cellEdits: new Map<string, CellEdit>(),\n };\n this.#rowEdits.set(key, rowEditDetails);\n return rowEditDetails;\n }\n }\n\n #storeCellEdit(\n key: string,\n cellEdits: Map<string, CellEdit>,\n column: string,\n originalValue: VuuRowDataItemType,\n editedValue: VuuRowDataItemType,\n isValid: boolean,\n ) {\n const wasEdited = this.isCellEdited(key, column);\n const existingCellEdit = cellEdits.get(column);\n const cellEdit: CellEdit = {\n originalValue: existingCellEdit?.originalValue ?? originalValue,\n editedValue,\n isValid,\n };\n\n if (isValid && cellEdit.originalValue === editedValue) {\n cellEdits.delete(column);\n } else {\n cellEdits.set(column, cellEdit);\n }\n this.#refreshEditCounts();\n if (wasEdited !== this.isCellEdited(key, column)) {\n this.emit(\"cellEditChanged\", key, column);\n }\n return cellEdit;\n }\n\n #setCellCommitRevision(key: string, columnName: string) {\n const revision = ++this.#commitRevision;\n const rowRevisions =\n this.#cellCommitRevisions.get(key) ?? new Map<string, number>();\n rowRevisions.set(columnName, revision);\n this.#cellCommitRevisions.set(key, rowRevisions);\n return revision;\n }\n\n #isLatestCellCommit(key: string, columnName: string, revision: number) {\n return this.#cellCommitRevisions.get(key)?.get(columnName) === revision;\n }\n\n async commit(\n key: string,\n columnName: string,\n originalValue: VuuRowDataItemType,\n typedValue: string | number | boolean,\n isValid: boolean,\n ): Promise<RpcResult> {\n if (\n this.#lifecycle.status !== \"active\" &&\n !(\n this.#lifecycle.status === \"error\" &&\n this.#lifecycle.operation === \"end\"\n )\n ) {\n throw new Error(\"No edit session in progress\");\n }\n const revision = this.#setCellCommitRevision(key, columnName);\n const rowEditDetails = this.#getOrCreateRowEdits(key);\n const { cellEdits } = rowEditDetails;\n\n if (isValid) {\n const cellEdit = this.#storeCellEdit(\n key,\n cellEdits,\n columnName,\n originalValue,\n typedValue,\n isValid,\n );\n\n if (this.dataSource?.editCell) {\n const response = await this.dataSource.editCell(\n key,\n columnName,\n typedValue,\n );\n if (!this.#isLatestCellCommit(key, columnName, revision)) {\n throw new SupersededEditError(\n `Edit response superseded for ${key}:${columnName}`,\n );\n }\n const currentCellEdits = this.#getOrCreateRowEdits(key).cellEdits;\n if (isRpcError(response)) {\n this.#storeCellEdit(\n key,\n currentCellEdits,\n columnName,\n cellEdit.originalValue,\n typedValue,\n false,\n );\n } else if (currentCellEdits.size === 0) {\n this.#rowEdits.delete(key);\n }\n\n return response;\n }\n if (cellEdits.size === 0) {\n this.#rowEdits.delete(key);\n }\n return { data: undefined, type: \"SUCCESS_RESULT\" };\n } else {\n this.#storeCellEdit(\n key,\n cellEdits,\n columnName,\n originalValue,\n typedValue,\n isValid,\n );\n return { data: undefined, type: \"SUCCESS_RESULT\" };\n }\n }\n}\n"],"names":["EventEmitter","isRpcError","StaleUpdateError","rowEditDetails"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EditSession.js","sources":["../../../packages/vuu-data-editing/src/EditSession.tsx"],"sourcesContent":["import type {\n CopyOption,\n DataSource,\n DeleteRowMode,\n DeleteSelectedRowsResult,\n EditApi,\n EditSessionMode,\n UndoRowChangeResult,\n} from \"@vuu-ui/vuu-data-types\";\nimport type { RpcResult, VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { EventEmitter, isRpcError, StaleUpdateError } from \"@vuu-ui/vuu-utils\";\n\nexport type EditState = \"clean\" | \"dirty\" | \"invalid\" | \"stale\";\nexport type EditSessionApi =\n | \"createSessionDataSource\"\n | \"beginEditSession\";\nconst toEditSessionMode = (copyOption: CopyOption): EditSessionMode => {\n switch (copyOption) {\n case \"All\":\n return \"all-rows\";\n case \"Selected\":\n return \"selected-rows\";\n case \"Empty\":\n return \"empty-session-table\";\n }\n};\nexport type NewRowState = {\n columns: readonly string[];\n draftRevision: number;\n errors: Readonly<Record<string, string>>;\n submitting: boolean;\n values: Readonly<Record<string, VuuRowDataItemType>>;\n};\n\nexport type EditLifecycle =\n | { status: \"idle\" }\n | { status: \"starting\" }\n | { status: \"active\"; sessionDataSource: DataSource }\n | { status: \"ending\"; sessionDataSource: DataSource }\n | {\n status: \"error\";\n operation: \"begin\" | \"end\";\n error: Error;\n sessionDataSource?: DataSource;\n };\n\nexport class EditError extends Error {}\nexport class SupersededEditError extends Error {}\n\ntype CellEdit = {\n originalValue: VuuRowDataItemType;\n editedValue: VuuRowDataItemType;\n isValid: boolean;\n};\n\ntype RowEditDetails = {\n /**\n * Column name => cell edit details\n */\n cellEdits: Map<string, CellEdit>;\n};\n\ntype EditSessionEvents = {\n cellEditChanged: (key: string, columnName: string) => void;\n editState: (editState: EditState) => void;\n lifecycle: (lifecycle: EditLifecycle) => void;\n newRow: (newRowState: NewRowState) => void;\n};\n\nexport class EditSession extends EventEmitter<EditSessionEvents> {\n static readonly newRowKey = \"__vuu_new_row__\";\n /**\n * Row key => row edits\n */\n #rowEdits = new Map<string, RowEditDetails>();\n #deletedRows = new Set<string>();\n #deleteRevision = 0;\n #rowDeleteRevisions = new Map<string, number>();\n #editCount = 0;\n #deleteCount = 0;\n #addCount = 0;\n #invalidCount = 0;\n #isStale = false;\n #commitRevision = 0;\n #cellCommitRevisions = new Map<string, Map<string, number>>();\n #deleteMode: DeleteRowMode;\n #editSessionApi: EditSessionApi;\n #sourceTableDataSource?: EditApi;\n #sessionDataSource?: DataSource;\n #newRowState: NewRowState = {\n columns: [],\n draftRevision: 0,\n errors: {},\n submitting: false,\n values: {},\n };\n #lifecycle: EditLifecycle = { status: \"idle\" };\n /** Prevent begin/end RPCs from overlapping and observing stale lifecycle state. */\n #transitionQueue: Promise<void> = Promise.resolve();\n\n constructor(\n dataSource: EditApi,\n deleteMode: DeleteRowMode = \"soft\",\n editSessionApi: EditSessionApi = \"createSessionDataSource\",\n ) {\n super();\n this.#sourceTableDataSource = dataSource;\n this.#deleteMode = deleteMode;\n this.#editSessionApi = editSessionApi;\n }\n\n get editCount() {\n return this.#editCount;\n }\n\n set editCount(val: number) {\n this.#setEditCounts(val, this.#invalidCount);\n }\n\n get invalidCount() {\n return this.#invalidCount;\n }\n\n set invalidCount(val: number) {\n this.#setEditCounts(this.#editCount, val);\n }\n\n get deleteCount() {\n return this.#deleteCount;\n }\n\n set deleteCount(val: number) {\n if (val !== this.#deleteCount) {\n const oldState = this.editState;\n const oldCount = this.#deleteCount;\n this.#deleteCount = val;\n this.#emitEditStateChange(oldState, oldCount === 0 || val === 0);\n }\n }\n\n get addCount() {\n return this.#addCount;\n }\n\n set addCount(val: number) {\n if (val !== this.#addCount) {\n const oldState = this.editState;\n const oldCount = this.#addCount;\n this.#addCount = val;\n this.#emitEditStateChange(oldState, oldCount === 0 || val === 0);\n }\n }\n\n get editState(): EditState {\n if (this.#invalidCount > 0) {\n return \"invalid\";\n }\n if (this.#isStale) {\n return \"stale\";\n }\n return this.#editCount === 0 &&\n this.#deleteCount === 0 &&\n this.#addCount === 0\n ? \"clean\"\n : \"dirty\";\n }\n\n #emitEditStateChange(oldState: EditState, force = false) {\n const newState = this.editState;\n if (force || newState !== oldState) {\n this.emit(\"editState\", newState);\n }\n }\n\n #setEditCounts(editCount: number, invalidCount: number) {\n if (editCount !== this.#editCount || invalidCount !== this.#invalidCount) {\n const oldState = this.editState;\n this.#editCount = editCount;\n this.#invalidCount = invalidCount;\n this.#emitEditStateChange(oldState);\n }\n }\n\n #setStale(isStale: boolean) {\n if (isStale !== this.#isStale) {\n const oldState = this.editState;\n this.#isStale = isStale;\n this.#emitEditStateChange(oldState);\n }\n }\n\n #refreshEditCounts() {\n let editCount = 0;\n let invalidCount = 0;\n for (const { cellEdits } of this.#rowEdits.values()) {\n for (const cellEdit of cellEdits.values()) {\n if (cellEdit.isValid) {\n editCount++;\n } else {\n invalidCount++;\n }\n }\n }\n this.#setEditCounts(editCount, invalidCount);\n }\n\n get newRowState(): NewRowState {\n return this.#newRowState;\n }\n\n isNewRow(key: string) {\n return key === EditSession.newRowKey;\n }\n\n isNewRowFinalColumn(columnName: string) {\n return this.#newRowState.columns.at(-1) === columnName;\n }\n\n isNewRowComplete() {\n return this.#newRowState.columns.every((column) => {\n const value = this.#newRowState.values[column];\n return (\n value !== undefined &&\n (typeof value !== \"string\" || value.trim() !== \"\")\n );\n });\n }\n\n configureNewRow(columns: readonly string[]) {\n if (\n columns.length === this.#newRowState.columns.length &&\n columns.every(\n (column, index) => column === this.#newRowState.columns[index],\n )\n ) {\n return;\n }\n\n const columnSet = new Set(columns);\n const errors = Object.fromEntries(\n Object.entries(this.#newRowState.errors).filter(([column]) =>\n columnSet.has(column),\n ),\n );\n this.#setNewRowState({\n ...this.#newRowState,\n columns: [...columns],\n errors,\n });\n }\n\n setNewRowValue(column: string, value: VuuRowDataItemType) {\n const errors = { ...this.#newRowState.errors };\n delete errors[column];\n this.#setNewRowState({\n ...this.#newRowState,\n errors,\n values: { ...this.#newRowState.values, [column]: value },\n });\n }\n\n async addNewRow(): Promise<RpcResult> {\n const missingErrors = Object.fromEntries(\n this.#newRowState.columns\n .filter((column) => {\n const value = this.#newRowState.values[column];\n return (\n value === undefined ||\n (typeof value === \"string\" && value.trim() === \"\")\n );\n })\n .map((column) => [column, \"Value required\"]),\n );\n const errors = { ...this.#newRowState.errors, ...missingErrors };\n\n if (Object.keys(errors).length > 0) {\n this.#setNewRowState({ ...this.#newRowState, errors });\n return { data: undefined, type: \"SUCCESS_RESULT\" };\n }\n\n if (this.#newRowState.submitting) {\n return { data: undefined, type: \"SUCCESS_RESULT\" };\n }\n\n this.#setNewRowState({ ...this.#newRowState, submitting: true });\n try {\n const response = await this.addRow({ ...this.#newRowState.values });\n if (isRpcError(response)) {\n const finalColumn = this.#newRowState.columns.at(-1);\n this.#setNewRowState({\n ...this.#newRowState,\n errors: finalColumn\n ? { [finalColumn]: response.errorMessage }\n : this.#newRowState.errors,\n submitting: false,\n });\n return response;\n }\n\n this.#setNewRowState({\n columns: this.#newRowState.columns,\n draftRevision: this.#newRowState.draftRevision + 1,\n errors: {},\n submitting: false,\n values: {},\n });\n return response;\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : \"Unable to add row\";\n const finalColumn = this.#newRowState.columns.at(-1);\n this.#setNewRowState({\n ...this.#newRowState,\n errors: finalColumn\n ? { [finalColumn]: errorMessage }\n : this.#newRowState.errors,\n submitting: false,\n });\n return { errorMessage, type: \"ERROR_RESULT\" };\n }\n }\n\n #setNewRowState(newRowState: NewRowState) {\n this.#newRowState = newRowState;\n this.emit(\"newRow\", newRowState);\n }\n\n async deleteSelectedRows(): Promise<void> {\n const response = await this.dataSource?.deleteSelectedRows?.(\n this.#deleteMode,\n );\n if (isRpcError(response)) return;\n const deletedKeys = (response?.data as DeleteSelectedRowsResult | undefined)\n ?.deletedKeys;\n if (deletedKeys && deletedKeys.length > 0) {\n let newCount = 0;\n for (const key of deletedKeys) {\n this.#rowDeleteRevisions.set(key, ++this.#deleteRevision);\n if (!this.#deletedRows.has(key)) {\n this.#deletedRows.add(key);\n newCount++;\n }\n }\n if (newCount > 0) {\n this.deleteCount = this.#deleteCount + newCount;\n }\n }\n }\n\n async addRow(\n rowData: Record<string, VuuRowDataItemType> = {},\n ): Promise<RpcResult> {\n const addRow = this.dataSource?.addRow;\n if (addRow === undefined) {\n throw Error(\"[EditSession] datasource does not support adding rows\");\n }\n\n const response = await addRow.call(this.dataSource, rowData);\n if (response === undefined) {\n throw Error(\n \"[EditSession] datasource returned no response when adding row\",\n );\n }\n if (!isRpcError(response)) {\n this.addCount = this.#addCount + 1;\n }\n return response;\n }\n\n restoreRows(keys: string[]) {\n for (const key of keys) {\n if (this.#deletedRows.has(key)) {\n this.#deletedRows.delete(key);\n this.#rowDeleteRevisions.delete(key);\n this.deleteCount = this.#deleteCount - 1;\n }\n }\n }\n\n hasRowChanges(key: string): boolean {\n return this.#rowEdits.has(key) || this.#deletedRows.has(key);\n }\n\n isCellEdited(key: string, columnName: string): boolean {\n const cellEdit = this.#rowEdits.get(key)?.cellEdits.get(columnName);\n return (\n cellEdit?.isValid === true &&\n cellEdit.originalValue !== cellEdit.editedValue\n );\n }\n\n async undoRowChange(key: string): Promise<void> {\n if (!this.inEditMode) return;\n\n const undoRevision = this.#commitRevision;\n const deleteRevisionAtRequest = this.#rowDeleteRevisions.get(key);\n const rowEditsAtRequest = this.#rowEdits.get(key);\n const columnsAtRequest = new Set(rowEditsAtRequest?.cellEdits.keys());\n const wasDeleted = this.#deletedRows.has(key);\n const response = await this.dataSource?.undoRowChange?.(key);\n\n if (isRpcError(response)) {\n return;\n }\n\n const rowEdits = this.#rowEdits.get(key);\n if (rowEdits) {\n const changedColumns: string[] = [];\n for (const columnName of columnsAtRequest) {\n const latestRevision =\n this.#cellCommitRevisions.get(key)?.get(columnName) ?? 0;\n if (latestRevision > undoRevision) {\n continue;\n }\n if (this.isCellEdited(key, columnName)) {\n changedColumns.push(columnName);\n }\n rowEdits.cellEdits.delete(columnName);\n this.#setCellCommitRevision(key, columnName);\n }\n if (rowEdits.cellEdits.size === 0) {\n this.#rowEdits.delete(key);\n }\n this.#refreshEditCounts();\n for (const columnName of changedColumns) {\n this.emit(\"cellEditChanged\", key, columnName);\n }\n }\n if (\n wasDeleted &&\n this.#deletedRows.has(key) &&\n this.#rowDeleteRevisions.get(key) === deleteRevisionAtRequest\n ) {\n this.#deletedRows.delete(key);\n this.#rowDeleteRevisions.delete(key);\n this.deleteCount = this.#deleteCount - 1;\n }\n\n // If the server deleted a newly inserted row, decrement addCount\n const wasInsertedRow =\n (response?.data as UndoRowChangeResult | undefined)?.wasInsertedRow ===\n true;\n if (wasInsertedRow) {\n this.addCount = this.#addCount - 1;\n }\n }\n\n #clearEdits() {\n const oldState = this.editState;\n const editedCells = [...this.#rowEdits].flatMap(([key, { cellEdits }]) =>\n [...cellEdits.keys()]\n .filter((columnName) => this.isCellEdited(key, columnName))\n .map((columnName) => [key, columnName] as const),\n );\n this.#rowEdits.clear();\n this.#deletedRows.clear();\n this.#rowDeleteRevisions.clear();\n this.#cellCommitRevisions.clear();\n this.#editCount = 0;\n this.#deleteCount = 0;\n this.#addCount = 0;\n this.#invalidCount = 0;\n this.#isStale = false;\n this.#setNewRowState({\n columns: this.#newRowState.columns,\n draftRevision: this.#newRowState.draftRevision + 1,\n errors: {},\n submitting: false,\n values: {},\n });\n for (const [key, columnName] of editedCells) {\n this.emit(\"cellEditChanged\", key, columnName);\n }\n this.#emitEditStateChange(oldState);\n }\n\n #setLifecycle(lifecycle: EditLifecycle) {\n this.#lifecycle = lifecycle;\n this.emit(\"lifecycle\", lifecycle);\n }\n\n #enqueue<T>(operation: () => Promise<T>): Promise<T> {\n const result = this.#transitionQueue.then(operation);\n // Reassign to a settled continuation: callers keep the real result, while a\n // rejected transition cannot poison the queue for later begin/end requests.\n this.#transitionQueue = result.then(\n () => undefined,\n () => undefined,\n );\n return result;\n }\n\n begin(copyOption: CopyOption = \"All\"): Promise<DataSource> {\n return this.#enqueue(async () => {\n if (\n this.#lifecycle.status === \"active\" ||\n (this.#lifecycle.status === \"error\" &&\n this.#lifecycle.operation === \"end\")\n ) {\n const sessionDataSource = this.#sessionDataSource;\n if (!sessionDataSource) {\n throw new Error(\"[EditSession] active lifecycle has no datasource\");\n }\n if (this.#lifecycle.status === \"error\") {\n this.#setLifecycle({\n status: \"active\",\n sessionDataSource,\n });\n }\n return sessionDataSource;\n }\n\n this.#setLifecycle({ status: \"starting\" });\n\n try {\n const sourceDataSource = this.#sourceTableDataSource;\n const sessionDataSource =\n this.#editSessionApi === \"beginEditSession\"\n ? await sourceDataSource?.beginEditSession?.(\n toEditSessionMode(copyOption),\n )\n : await sourceDataSource?.createSessionDataSource?.(copyOption);\n if (!sessionDataSource) {\n throw new Error(\n `[EditSession] datasource does not support ${this.#editSessionApi}`,\n );\n }\n\n this.#sessionDataSource = sessionDataSource;\n this.#setStale(false);\n this.#setLifecycle({ status: \"active\", sessionDataSource });\n return sessionDataSource;\n } catch (cause) {\n const error = cause instanceof Error ? cause : new Error(String(cause));\n this.#setLifecycle({ status: \"error\", operation: \"begin\", error });\n throw error;\n }\n\n });\n }\n\n get dataSource() {\n return this.#sessionDataSource ?? this.#sourceTableDataSource;\n }\n\n get sessionDataSource() {\n return this.#sessionDataSource;\n }\n\n end(saveChanges = false, force = false): Promise<void> {\n return this.#enqueue(async () => {\n if (\n this.#lifecycle.status === \"idle\" ||\n (this.#lifecycle.status === \"error\" &&\n this.#lifecycle.operation === \"begin\")\n ) {\n if (this.#lifecycle.status !== \"idle\") {\n this.#setLifecycle({ status: \"idle\" });\n }\n return;\n }\n\n const sessionDataSource = this.#sessionDataSource;\n if (!sessionDataSource) {\n throw new Error(\"[EditSession] ending lifecycle has no datasource\");\n }\n this.#setLifecycle({ status: \"ending\", sessionDataSource });\n\n try {\n await this.dataSource?.endEditSession?.(saveChanges, force);\n this.#clearEdits();\n this.#sessionDataSource = undefined;\n this.#setLifecycle({ status: \"idle\" });\n } catch (cause) {\n const error = cause instanceof Error ? cause : new Error(String(cause));\n if (error instanceof StaleUpdateError) {\n this.#setStale(true);\n }\n this.#setLifecycle({\n status: \"error\",\n operation: \"end\",\n error,\n sessionDataSource,\n });\n throw error;\n }\n });\n }\n\n get lifecycle() {\n return this.#lifecycle;\n }\n\n get inEditMode() {\n return (\n this.#lifecycle.status === \"active\" ||\n this.#lifecycle.status === \"ending\" ||\n (this.#lifecycle.status === \"error\" &&\n this.#lifecycle.operation === \"end\")\n );\n }\n\n #getOrCreateRowEdits(key: string): RowEditDetails {\n const rowEditDetails = this.#rowEdits.get(key);\n if (rowEditDetails) {\n return rowEditDetails;\n } else {\n const rowEditDetails = {\n cellEdits: new Map<string, CellEdit>(),\n };\n this.#rowEdits.set(key, rowEditDetails);\n return rowEditDetails;\n }\n }\n\n #storeCellEdit(\n key: string,\n cellEdits: Map<string, CellEdit>,\n column: string,\n originalValue: VuuRowDataItemType,\n editedValue: VuuRowDataItemType,\n isValid: boolean,\n ) {\n const wasEdited = this.isCellEdited(key, column);\n const existingCellEdit = cellEdits.get(column);\n const cellEdit: CellEdit = {\n originalValue: existingCellEdit?.originalValue ?? originalValue,\n editedValue,\n isValid,\n };\n\n if (isValid && cellEdit.originalValue === editedValue) {\n cellEdits.delete(column);\n } else {\n cellEdits.set(column, cellEdit);\n }\n this.#refreshEditCounts();\n if (wasEdited !== this.isCellEdited(key, column)) {\n this.emit(\"cellEditChanged\", key, column);\n }\n return cellEdit;\n }\n\n #setCellCommitRevision(key: string, columnName: string) {\n const revision = ++this.#commitRevision;\n const rowRevisions =\n this.#cellCommitRevisions.get(key) ?? new Map<string, number>();\n rowRevisions.set(columnName, revision);\n this.#cellCommitRevisions.set(key, rowRevisions);\n return revision;\n }\n\n #isLatestCellCommit(key: string, columnName: string, revision: number) {\n return this.#cellCommitRevisions.get(key)?.get(columnName) === revision;\n }\n\n async commit(\n key: string,\n columnName: string,\n originalValue: VuuRowDataItemType,\n typedValue: string | number | boolean,\n isValid: boolean,\n ): Promise<RpcResult> {\n if (\n this.#lifecycle.status !== \"active\" &&\n !(\n this.#lifecycle.status === \"error\" &&\n this.#lifecycle.operation === \"end\"\n )\n ) {\n throw new Error(\"No edit session in progress\");\n }\n const revision = this.#setCellCommitRevision(key, columnName);\n const rowEditDetails = this.#getOrCreateRowEdits(key);\n const { cellEdits } = rowEditDetails;\n\n if (isValid) {\n const cellEdit = this.#storeCellEdit(\n key,\n cellEdits,\n columnName,\n originalValue,\n typedValue,\n isValid,\n );\n\n if (this.dataSource?.editCell) {\n const response = await this.dataSource.editCell(\n key,\n columnName,\n typedValue,\n );\n if (!this.#isLatestCellCommit(key, columnName, revision)) {\n throw new SupersededEditError(\n `Edit response superseded for ${key}:${columnName}`,\n );\n }\n const currentCellEdits = this.#getOrCreateRowEdits(key).cellEdits;\n if (isRpcError(response)) {\n this.#storeCellEdit(\n key,\n currentCellEdits,\n columnName,\n cellEdit.originalValue,\n typedValue,\n false,\n );\n } else if (currentCellEdits.size === 0) {\n this.#rowEdits.delete(key);\n }\n\n return response;\n }\n if (cellEdits.size === 0) {\n this.#rowEdits.delete(key);\n }\n return { data: undefined, type: \"SUCCESS_RESULT\" };\n } else {\n this.#storeCellEdit(\n key,\n cellEdits,\n columnName,\n originalValue,\n typedValue,\n isValid,\n );\n return { data: undefined, type: \"SUCCESS_RESULT\" };\n }\n }\n}\n"],"names":["EventEmitter","isRpcError","StaleUpdateError","rowEditDetails"],"mappings":"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"}
|
package/cjs/edit-utils.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
5
|
-
var vuuUtils2 = require('@vuu-ui/vuu-utils2');
|
|
6
5
|
|
|
7
6
|
const timeFormatter = vuuUtils.formatDate({ time: "hh:mm:ss" });
|
|
8
7
|
const dataRowEditErrors = /* @__PURE__ */ Symbol("vuuDataRowEditErrors");
|
|
@@ -45,7 +44,7 @@ const getVuuEditMessage = (dataRow, column, originalValue) => {
|
|
|
45
44
|
|
|
46
45
|
Object.defineProperty(exports, "isInlineEditingSession", {
|
|
47
46
|
enumerable: true,
|
|
48
|
-
get: function () { return
|
|
47
|
+
get: function () { return vuuUtils.isInlineEditingSession; }
|
|
49
48
|
});
|
|
50
49
|
exports.getVuuEditMessage = getVuuEditMessage;
|
|
51
50
|
exports.isEditRowReadOnly = isEditRowReadOnly;
|
package/cjs/edit-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit-utils.js","sources":["../../../packages/vuu-data-editing/src/edit-utils.tsx"],"sourcesContent":["import type { DataRow, RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { formatDate } from \"@vuu-ui/vuu-utils\";\n\nexport { isInlineEditingSession } from \"@vuu-ui/vuu-
|
|
1
|
+
{"version":3,"file":"edit-utils.js","sources":["../../../packages/vuu-data-editing/src/edit-utils.tsx"],"sourcesContent":["import type { DataRow, RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { formatDate } from \"@vuu-ui/vuu-utils\";\n\nexport { isInlineEditingSession } from \"@vuu-ui/vuu-utils\";\n\nconst timeFormatter = formatDate({ time: \"hh:mm:ss\" });\nconst dataRowEditErrors = Symbol(\"vuuDataRowEditErrors\");\n\nexport const isEditRowReadOnly = (dataRow: DataRow) =>\n dataRow.vuu_action === \"deleteRow\";\n\ntype DataRowWithEditErrors = DataRow & {\n [dataRowEditErrors]?: Record<string, string>;\n};\n\nexport const withDataRowEditErrors = <T extends DataRow>(\n dataRow: T,\n errors: Record<string, string>,\n): T => {\n Object.defineProperty(dataRow, dataRowEditErrors, {\n configurable: true,\n value: errors,\n });\n return dataRow;\n};\n\nexport const getVuuEditMessage = (\n dataRow: DataRow,\n column: RuntimeColumnDescriptor,\n originalValue: string,\n) => {\n const editError = (dataRow as DataRowWithEditErrors)[dataRowEditErrors]?.[\n column.name\n ];\n if (editError) {\n return editError;\n }\n\n const vuuMsg = dataRow.vuuMsg as string;\n if (typeof vuuMsg === \"string\" && vuuMsg !== \"\") {\n const columnMessages = vuuMsg.split(\",\");\n const msgForCol = columnMessages.find((msg) =>\n msg.startsWith(`${column.name}:`),\n );\n if (msgForCol) {\n const [, value, updatedValue, ts] = msgForCol.split(\":\");\n const updateTime = timeFormatter(new Date(parseInt(ts as string)));\n return (\n <span>\n {\"Update rejected. Original value \"}\n <b>{originalValue}</b>\n {\" could not be updated to \"}\n <b>{value}</b>\n {\". It was updated to \"}\n <b>{updatedValue}</b>\n {\" at \"}\n {updateTime}\n {\".\"}\n </span>\n );\n }\n }\n};\n"],"names":["formatDate","jsx"],"mappings":";;;;;AAKA,MAAM,aAAgB,GAAAA,mBAAA,CAAW,EAAE,IAAA,EAAM,YAAY,CAAA;AACrD,MAAM,iBAAA,0BAA2B,sBAAsB,CAAA;AAEhD,MAAM,iBAAoB,GAAA,CAAC,OAChC,KAAA,OAAA,CAAQ,UAAe,KAAA;AAMZ,MAAA,qBAAA,GAAwB,CACnC,OAAA,EACA,MACM,KAAA;AACN,EAAO,MAAA,CAAA,cAAA,CAAe,SAAS,iBAAmB,EAAA;AAAA,IAChD,YAAc,EAAA,IAAA;AAAA,IACd,KAAO,EAAA;AAAA,GACR,CAAA;AACD,EAAO,OAAA,OAAA;AACT;AAEO,MAAM,iBAAoB,GAAA,CAC/B,OACA,EAAA,MAAA,EACA,aACG,KAAA;AACH,EAAA,MAAM,SAAa,GAAA,OAAA,CAAkC,iBAAiB,CAAA,GACpE,OAAO,IACT,CAAA;AACA,EAAA,IAAI,SAAW,EAAA;AACb,IAAO,OAAA,SAAA;AAAA;AAGT,EAAA,MAAM,SAAS,OAAQ,CAAA,MAAA;AACvB,EAAA,IAAI,OAAO,MAAA,KAAW,QAAY,IAAA,MAAA,KAAW,EAAI,EAAA;AAC/C,IAAM,MAAA,cAAA,GAAiB,MAAO,CAAA,KAAA,CAAM,GAAG,CAAA;AACvC,IAAA,MAAM,YAAY,cAAe,CAAA,IAAA;AAAA,MAAK,CAAC,GACrC,KAAA,GAAA,CAAI,WAAW,CAAG,EAAA,MAAA,CAAO,IAAI,CAAG,CAAA,CAAA;AAAA,KAClC;AACA,IAAA,IAAI,SAAW,EAAA;AACb,MAAM,MAAA,GAAG,KAAO,EAAA,YAAA,EAAc,EAAE,CAAI,GAAA,SAAA,CAAU,MAAM,GAAG,CAAA;AACvD,MAAA,MAAM,aAAa,aAAc,CAAA,IAAI,KAAK,QAAS,CAAA,EAAY,CAAC,CAAC,CAAA;AACjE,MAAA,uCACG,MACE,EAAA,EAAA,QAAA,EAAA;AAAA,QAAA,kCAAA;AAAA,wBACDC,cAAA,CAAC,OAAG,QAAc,EAAA,aAAA,EAAA,CAAA;AAAA,QACjB,2BAAA;AAAA,wBACDA,cAAA,CAAC,OAAG,QAAM,EAAA,KAAA,EAAA,CAAA;AAAA,QACT,sBAAA;AAAA,wBACDA,cAAA,CAAC,OAAG,QAAa,EAAA,YAAA,EAAA,CAAA;AAAA,QAChB,MAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,OACH,EAAA,CAAA;AAAA;AAEJ;AAEJ;;;;;;;;;;"}
|
package/cjs/index.js
CHANGED
|
@@ -6,7 +6,7 @@ var editUtils = require('./edit-utils.js');
|
|
|
6
6
|
var EditButtons = require('./EditButtons.js');
|
|
7
7
|
var EditModeProvider = require('./EditModeProvider.js');
|
|
8
8
|
var EditSession = require('./EditSession.js');
|
|
9
|
-
var
|
|
9
|
+
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
10
10
|
var editActionRowClassNameGenerator = require('./editActionRowClassNameGenerator.js');
|
|
11
11
|
var UndoCellRenderer = require('./UndoCellRenderer.js');
|
|
12
12
|
var useEditableTable = require('./useEditableTable.js');
|
|
@@ -27,11 +27,11 @@ exports.EditSession = EditSession.EditSession;
|
|
|
27
27
|
exports.SupersededEditError = EditSession.SupersededEditError;
|
|
28
28
|
Object.defineProperty(exports, "StaleUpdateError", {
|
|
29
29
|
enumerable: true,
|
|
30
|
-
get: function () { return
|
|
30
|
+
get: function () { return vuuUtils.StaleUpdateError; }
|
|
31
31
|
});
|
|
32
32
|
Object.defineProperty(exports, "isInlineEditingSession", {
|
|
33
33
|
enumerable: true,
|
|
34
|
-
get: function () { return
|
|
34
|
+
get: function () { return vuuUtils.isInlineEditingSession; }
|
|
35
35
|
});
|
|
36
36
|
exports.EDIT_ACTION_ROW_CLASS_NAME_GENERATOR = editActionRowClassNameGenerator.EDIT_ACTION_ROW_CLASS_NAME_GENERATOR;
|
|
37
37
|
exports.editActionRowClassNameGenerator = editActionRowClassNameGenerator.editActionRowClassNameGenerator;
|
package/cjs/useEditableTable.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
4
|
-
var vuuUtils2 = require('@vuu-ui/vuu-utils2');
|
|
5
4
|
var react = require('react');
|
|
6
5
|
var EditSession = require('./EditSession.js');
|
|
7
6
|
var editActionRowClassNameGenerator = require('./editActionRowClassNameGenerator.js');
|
|
@@ -20,7 +19,7 @@ const useEditableTable = ({
|
|
|
20
19
|
onSave,
|
|
21
20
|
table
|
|
22
21
|
}) => {
|
|
23
|
-
const { VuuDataSource } =
|
|
22
|
+
const { VuuDataSource } = vuuUtils.useData();
|
|
24
23
|
const [selectionCount, setSelectionCount] = react.useState(0);
|
|
25
24
|
vuuUtils.useLayoutEffectSkipFirst(() => {
|
|
26
25
|
console.warn("[useEditableTable] columns and or table changed");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEditableTable.js","sources":["../../../packages/vuu-data-editing/src/useEditableTable.ts"],"sourcesContent":["import type {\n CopyOption,\n DataSource,\n DeleteRowMode,\n EditApi,\n} from \"@vuu-ui/vuu-data-types\";\nimport type { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { useLayoutEffectSkipFirst } from \"@vuu-ui/vuu-utils\";\nimport { useData } from \"@vuu-ui/vuu-utils2\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n EditSession,\n type EditLifecycle,\n type EditSessionApi,\n type EditState,\n} from \"./EditSession\";\nimport { EDIT_ACTION_ROW_CLASS_NAME_GENERATOR } from \"./editActionRowClassNameGenerator\";\n\nconst EDIT_ACTION_ROW_CLASS_NAME_GENERATORS = [\n EDIT_ACTION_ROW_CLASS_NAME_GENERATOR,\n];\n\nexport type EditMode = \"edit\" | \"view\";\n\nexport interface EditableTableHookProps {\n /**\n * columns to be included in subscription. If not provided,\n * default will be '*'. Ignored if dataSource prop present.\n */\n columns?: string[];\n dataSource?: DataSource;\n addRowsCount?: number;\n deleteMode?: DeleteRowMode;\n editSessionApi?: EditSessionApi;\n copyOption?: CopyOption;\n isEditMode: boolean;\n onCancel: () => void;\n onSave: () => void;\n /**\n * If dataSource not provided, new DataSource\n * will be created using table and columns\n */\n table?: VuuTable;\n}\n\nexport const useEditableTable = ({\n columns,\n dataSource: dataSourceProp,\n deleteMode = \"soft\",\n editSessionApi = \"createSessionDataSource\",\n copyOption = \"All\",\n isEditMode,\n onCancel,\n onSave,\n table,\n}: EditableTableHookProps) => {\n const { VuuDataSource } = useData();\n const [selectionCount, setSelectionCount] = useState(0);\n useLayoutEffectSkipFirst(() => {\n console.warn(\"[useEditableTable] columns and or table changed\");\n }, [columns, table]);\n\n const sourceDataSource = useMemo(() => {\n if (dataSourceProp) {\n return dataSourceProp;\n } else if (table) {\n return new VuuDataSource({ columns, table });\n } else {\n throw Error(\n \"useEditableTable unable to provide DataSource, neither dataSource nor table available as props\",\n );\n }\n }, [VuuDataSource, columns, dataSourceProp, table]);\n\n // The editSession will be made available to all the edit controls in scope\n // by wrapping the edit component with a DataEditingProvider.\n const editSession = useMemo(\n () => new EditSession(sourceDataSource as EditApi, deleteMode, editSessionApi),\n [deleteMode, editSessionApi, sourceDataSource],\n );\n const [lifecycle, setLifecycle] = useState<EditLifecycle>(\n editSession.lifecycle,\n );\n const [editState, setEditState] = useState<EditState>(editSession.editState);\n const [subscribedSessionDataSource, setSubscribedSessionDataSource] =\n useState<DataSource>();\n const onCancelRef = useRef(onCancel);\n onCancelRef.current = onCancel;\n\n const sessionDataSource =\n \"sessionDataSource\" in lifecycle ? lifecycle.sessionDataSource : undefined;\n const dataSource = sessionDataSource ?? sourceDataSource;\n\n const handleCancel = useCallback(async () => {\n try {\n await editSession.end();\n setSelectionCount(0);\n onCancel();\n } catch (error) {\n console.error(\"[useEditableTable] cancel edit session failed\", error);\n }\n }, [editSession, onCancel]);\n\n const handleSave = useCallback(\n async (force = false) => {\n try {\n await editSession.end(true, force);\n setSelectionCount(0);\n onSave();\n } catch (error) {\n console.error(\"[useEditableTable] save edit session failed\", error);\n }\n },\n [editSession, onSave],\n );\n\n const handleDelete = useCallback(async () => {\n await editSession.deleteSelectedRows();\n }, [editSession]);\n\n const handleUndoRowChange = useCallback(\n (key: string) => void editSession.undoRowChange(key),\n [editSession],\n );\n\n useEffect(() => {\n dataSource.on(\"row-selection\", setSelectionCount);\n return () => dataSource.removeListener(\"row-selection\", setSelectionCount);\n }, [dataSource]);\n\n useEffect(() => {\n if (!sessionDataSource) {\n setSubscribedSessionDataSource(undefined);\n return;\n }\n\n const handleSubscribed = () =>\n setSubscribedSessionDataSource(sessionDataSource);\n\n setSubscribedSessionDataSource(undefined);\n sessionDataSource.on(\"subscribed\", handleSubscribed);\n if (\n sessionDataSource.status === \"subscribed\" &&\n sessionDataSource.tableSchema\n ) {\n handleSubscribed();\n }\n\n return () =>\n sessionDataSource.removeListener(\"subscribed\", handleSubscribed);\n }, [sessionDataSource]);\n\n useEffect(() => {\n const handleEditState = (nextEditState: EditState) => {\n setEditState(nextEditState);\n };\n const handleLifecycle = (nextLifecycle: EditLifecycle) => {\n setLifecycle(nextLifecycle);\n };\n\n setEditState(editSession.editState);\n setLifecycle(editSession.lifecycle);\n editSession.on(\"editState\", handleEditState);\n editSession.on(\"lifecycle\", handleLifecycle);\n return () => {\n editSession.removeListener(\"editState\", handleEditState);\n editSession.removeListener(\"lifecycle\", handleLifecycle);\n };\n }, [editSession]);\n\n useEffect(() => {\n const transition = isEditMode\n ? editSession.begin(copyOption)\n : editSession.end();\n\n void transition.catch((error) => {\n if (isEditMode) {\n console.error(\"[useEditableTable] begin edit session failed\", error);\n onCancelRef.current();\n } else {\n console.error(\"[useEditableTable] end edit session failed\", error);\n }\n });\n }, [copyOption, editSession, isEditMode]);\n\n const canCancel =\n lifecycle.status === \"active\" ||\n (lifecycle.status === \"error\" && lifecycle.operation === \"end\");\n\n const canSave =\n canCancel &&\n (editState === \"dirty\" || editState === \"stale\") &&\n editSession.invalidCount === 0;\n const isEditSessionReady =\n isEditMode &&\n sessionDataSource !== undefined &&\n sessionDataSource === editSession.sessionDataSource &&\n subscribedSessionDataSource === sessionDataSource &&\n sessionDataSource.status === \"subscribed\" &&\n sessionDataSource.tableSchema !== undefined;\n\n return {\n canCancel,\n canSave,\n dataSource,\n editSession,\n lifecycle,\n hasSelection: selectionCount > 0,\n isEditSessionReady,\n onCancel: handleCancel,\n onDelete: handleDelete,\n onSave: handleSave,\n onUndoRowChange: handleUndoRowChange,\n rowClassNameGenerators: isEditMode\n ? EDIT_ACTION_ROW_CLASS_NAME_GENERATORS\n : undefined,\n sessionDataSource,\n sourceDataSource,\n };\n};\n"],"names":["EDIT_ACTION_ROW_CLASS_NAME_GENERATOR","useData","useState","useLayoutEffectSkipFirst","useMemo","EditSession","useRef","useCallback","useEffect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useEditableTable.js","sources":["../../../packages/vuu-data-editing/src/useEditableTable.ts"],"sourcesContent":["import type {\n CopyOption,\n DataSource,\n DeleteRowMode,\n EditApi,\n} from \"@vuu-ui/vuu-data-types\";\nimport type { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { useData, useLayoutEffectSkipFirst } from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n EditSession,\n type EditLifecycle,\n type EditSessionApi,\n type EditState,\n} from \"./EditSession\";\nimport { EDIT_ACTION_ROW_CLASS_NAME_GENERATOR } from \"./editActionRowClassNameGenerator\";\n\nconst EDIT_ACTION_ROW_CLASS_NAME_GENERATORS = [\n EDIT_ACTION_ROW_CLASS_NAME_GENERATOR,\n];\n\nexport type EditMode = \"edit\" | \"view\";\n\nexport interface EditableTableHookProps {\n /**\n * columns to be included in subscription. If not provided,\n * default will be '*'. Ignored if dataSource prop present.\n */\n columns?: string[];\n dataSource?: DataSource;\n addRowsCount?: number;\n deleteMode?: DeleteRowMode;\n editSessionApi?: EditSessionApi;\n copyOption?: CopyOption;\n isEditMode: boolean;\n onCancel: () => void;\n onSave: () => void;\n /**\n * If dataSource not provided, new DataSource\n * will be created using table and columns\n */\n table?: VuuTable;\n}\n\nexport const useEditableTable = ({\n columns,\n dataSource: dataSourceProp,\n deleteMode = \"soft\",\n editSessionApi = \"createSessionDataSource\",\n copyOption = \"All\",\n isEditMode,\n onCancel,\n onSave,\n table,\n}: EditableTableHookProps) => {\n const { VuuDataSource } = useData();\n const [selectionCount, setSelectionCount] = useState(0);\n useLayoutEffectSkipFirst(() => {\n console.warn(\"[useEditableTable] columns and or table changed\");\n }, [columns, table]);\n\n const sourceDataSource = useMemo(() => {\n if (dataSourceProp) {\n return dataSourceProp;\n } else if (table) {\n return new VuuDataSource({ columns, table });\n } else {\n throw Error(\n \"useEditableTable unable to provide DataSource, neither dataSource nor table available as props\",\n );\n }\n }, [VuuDataSource, columns, dataSourceProp, table]);\n\n // The editSession will be made available to all the edit controls in scope\n // by wrapping the edit component with a DataEditingProvider.\n const editSession = useMemo(\n () => new EditSession(sourceDataSource as EditApi, deleteMode, editSessionApi),\n [deleteMode, editSessionApi, sourceDataSource],\n );\n const [lifecycle, setLifecycle] = useState<EditLifecycle>(\n editSession.lifecycle,\n );\n const [editState, setEditState] = useState<EditState>(editSession.editState);\n const [subscribedSessionDataSource, setSubscribedSessionDataSource] =\n useState<DataSource>();\n const onCancelRef = useRef(onCancel);\n onCancelRef.current = onCancel;\n\n const sessionDataSource =\n \"sessionDataSource\" in lifecycle ? lifecycle.sessionDataSource : undefined;\n const dataSource = sessionDataSource ?? sourceDataSource;\n\n const handleCancel = useCallback(async () => {\n try {\n await editSession.end();\n setSelectionCount(0);\n onCancel();\n } catch (error) {\n console.error(\"[useEditableTable] cancel edit session failed\", error);\n }\n }, [editSession, onCancel]);\n\n const handleSave = useCallback(\n async (force = false) => {\n try {\n await editSession.end(true, force);\n setSelectionCount(0);\n onSave();\n } catch (error) {\n console.error(\"[useEditableTable] save edit session failed\", error);\n }\n },\n [editSession, onSave],\n );\n\n const handleDelete = useCallback(async () => {\n await editSession.deleteSelectedRows();\n }, [editSession]);\n\n const handleUndoRowChange = useCallback(\n (key: string) => void editSession.undoRowChange(key),\n [editSession],\n );\n\n useEffect(() => {\n dataSource.on(\"row-selection\", setSelectionCount);\n return () => dataSource.removeListener(\"row-selection\", setSelectionCount);\n }, [dataSource]);\n\n useEffect(() => {\n if (!sessionDataSource) {\n setSubscribedSessionDataSource(undefined);\n return;\n }\n\n const handleSubscribed = () =>\n setSubscribedSessionDataSource(sessionDataSource);\n\n setSubscribedSessionDataSource(undefined);\n sessionDataSource.on(\"subscribed\", handleSubscribed);\n if (\n sessionDataSource.status === \"subscribed\" &&\n sessionDataSource.tableSchema\n ) {\n handleSubscribed();\n }\n\n return () =>\n sessionDataSource.removeListener(\"subscribed\", handleSubscribed);\n }, [sessionDataSource]);\n\n useEffect(() => {\n const handleEditState = (nextEditState: EditState) => {\n setEditState(nextEditState);\n };\n const handleLifecycle = (nextLifecycle: EditLifecycle) => {\n setLifecycle(nextLifecycle);\n };\n\n setEditState(editSession.editState);\n setLifecycle(editSession.lifecycle);\n editSession.on(\"editState\", handleEditState);\n editSession.on(\"lifecycle\", handleLifecycle);\n return () => {\n editSession.removeListener(\"editState\", handleEditState);\n editSession.removeListener(\"lifecycle\", handleLifecycle);\n };\n }, [editSession]);\n\n useEffect(() => {\n const transition = isEditMode\n ? editSession.begin(copyOption)\n : editSession.end();\n\n void transition.catch((error) => {\n if (isEditMode) {\n console.error(\"[useEditableTable] begin edit session failed\", error);\n onCancelRef.current();\n } else {\n console.error(\"[useEditableTable] end edit session failed\", error);\n }\n });\n }, [copyOption, editSession, isEditMode]);\n\n const canCancel =\n lifecycle.status === \"active\" ||\n (lifecycle.status === \"error\" && lifecycle.operation === \"end\");\n\n const canSave =\n canCancel &&\n (editState === \"dirty\" || editState === \"stale\") &&\n editSession.invalidCount === 0;\n const isEditSessionReady =\n isEditMode &&\n sessionDataSource !== undefined &&\n sessionDataSource === editSession.sessionDataSource &&\n subscribedSessionDataSource === sessionDataSource &&\n sessionDataSource.status === \"subscribed\" &&\n sessionDataSource.tableSchema !== undefined;\n\n return {\n canCancel,\n canSave,\n dataSource,\n editSession,\n lifecycle,\n hasSelection: selectionCount > 0,\n isEditSessionReady,\n onCancel: handleCancel,\n onDelete: handleDelete,\n onSave: handleSave,\n onUndoRowChange: handleUndoRowChange,\n rowClassNameGenerators: isEditMode\n ? EDIT_ACTION_ROW_CLASS_NAME_GENERATORS\n : undefined,\n sessionDataSource,\n sourceDataSource,\n };\n};\n"],"names":["EDIT_ACTION_ROW_CLASS_NAME_GENERATOR","useData","useState","useLayoutEffectSkipFirst","useMemo","EditSession","useRef","useCallback","useEffect"],"mappings":"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"}
|
package/esm/EditSession.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { EventEmitter, isRpcError } from '@vuu-ui/vuu-utils';
|
|
2
|
-
import { StaleUpdateError } from '@vuu-ui/vuu-utils2';
|
|
1
|
+
import { EventEmitter, isRpcError, StaleUpdateError } from '@vuu-ui/vuu-utils';
|
|
3
2
|
|
|
4
3
|
var __defProp = Object.defineProperty;
|
|
5
4
|
var __typeError = (msg) => {
|
package/esm/EditSession.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditSession.js","sources":["../../../packages/vuu-data-editing/src/EditSession.tsx"],"sourcesContent":["import type {\n CopyOption,\n DataSource,\n DeleteRowMode,\n DeleteSelectedRowsResult,\n EditApi,\n EditSessionMode,\n UndoRowChangeResult,\n} from \"@vuu-ui/vuu-data-types\";\nimport type { RpcResult, VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { EventEmitter, isRpcError } from \"@vuu-ui/vuu-utils\";\nimport { StaleUpdateError } from \"@vuu-ui/vuu-utils2\";\n\nexport type EditState = \"clean\" | \"dirty\" | \"invalid\" | \"stale\";\nexport type EditSessionApi =\n | \"createSessionDataSource\"\n | \"beginEditSession\";\nconst toEditSessionMode = (copyOption: CopyOption): EditSessionMode => {\n switch (copyOption) {\n case \"All\":\n return \"all-rows\";\n case \"Selected\":\n return \"selected-rows\";\n case \"Empty\":\n return \"empty-session-table\";\n }\n};\nexport type NewRowState = {\n columns: readonly string[];\n draftRevision: number;\n errors: Readonly<Record<string, string>>;\n submitting: boolean;\n values: Readonly<Record<string, VuuRowDataItemType>>;\n};\n\nexport type EditLifecycle =\n | { status: \"idle\" }\n | { status: \"starting\" }\n | { status: \"active\"; sessionDataSource: DataSource }\n | { status: \"ending\"; sessionDataSource: DataSource }\n | {\n status: \"error\";\n operation: \"begin\" | \"end\";\n error: Error;\n sessionDataSource?: DataSource;\n };\n\nexport class EditError extends Error {}\nexport class SupersededEditError extends Error {}\n\ntype CellEdit = {\n originalValue: VuuRowDataItemType;\n editedValue: VuuRowDataItemType;\n isValid: boolean;\n};\n\ntype RowEditDetails = {\n /**\n * Column name => cell edit details\n */\n cellEdits: Map<string, CellEdit>;\n};\n\ntype EditSessionEvents = {\n cellEditChanged: (key: string, columnName: string) => void;\n editState: (editState: EditState) => void;\n lifecycle: (lifecycle: EditLifecycle) => void;\n newRow: (newRowState: NewRowState) => void;\n};\n\nexport class EditSession extends EventEmitter<EditSessionEvents> {\n static readonly newRowKey = \"__vuu_new_row__\";\n /**\n * Row key => row edits\n */\n #rowEdits = new Map<string, RowEditDetails>();\n #deletedRows = new Set<string>();\n #deleteRevision = 0;\n #rowDeleteRevisions = new Map<string, number>();\n #editCount = 0;\n #deleteCount = 0;\n #addCount = 0;\n #invalidCount = 0;\n #isStale = false;\n #commitRevision = 0;\n #cellCommitRevisions = new Map<string, Map<string, number>>();\n #deleteMode: DeleteRowMode;\n #editSessionApi: EditSessionApi;\n #sourceTableDataSource?: EditApi;\n #sessionDataSource?: DataSource;\n #newRowState: NewRowState = {\n columns: [],\n draftRevision: 0,\n errors: {},\n submitting: false,\n values: {},\n };\n #lifecycle: EditLifecycle = { status: \"idle\" };\n /** Prevent begin/end RPCs from overlapping and observing stale lifecycle state. */\n #transitionQueue: Promise<void> = Promise.resolve();\n\n constructor(\n dataSource: EditApi,\n deleteMode: DeleteRowMode = \"soft\",\n editSessionApi: EditSessionApi = \"createSessionDataSource\",\n ) {\n super();\n this.#sourceTableDataSource = dataSource;\n this.#deleteMode = deleteMode;\n this.#editSessionApi = editSessionApi;\n }\n\n get editCount() {\n return this.#editCount;\n }\n\n set editCount(val: number) {\n this.#setEditCounts(val, this.#invalidCount);\n }\n\n get invalidCount() {\n return this.#invalidCount;\n }\n\n set invalidCount(val: number) {\n this.#setEditCounts(this.#editCount, val);\n }\n\n get deleteCount() {\n return this.#deleteCount;\n }\n\n set deleteCount(val: number) {\n if (val !== this.#deleteCount) {\n const oldState = this.editState;\n const oldCount = this.#deleteCount;\n this.#deleteCount = val;\n this.#emitEditStateChange(oldState, oldCount === 0 || val === 0);\n }\n }\n\n get addCount() {\n return this.#addCount;\n }\n\n set addCount(val: number) {\n if (val !== this.#addCount) {\n const oldState = this.editState;\n const oldCount = this.#addCount;\n this.#addCount = val;\n this.#emitEditStateChange(oldState, oldCount === 0 || val === 0);\n }\n }\n\n get editState(): EditState {\n if (this.#invalidCount > 0) {\n return \"invalid\";\n }\n if (this.#isStale) {\n return \"stale\";\n }\n return this.#editCount === 0 &&\n this.#deleteCount === 0 &&\n this.#addCount === 0\n ? \"clean\"\n : \"dirty\";\n }\n\n #emitEditStateChange(oldState: EditState, force = false) {\n const newState = this.editState;\n if (force || newState !== oldState) {\n this.emit(\"editState\", newState);\n }\n }\n\n #setEditCounts(editCount: number, invalidCount: number) {\n if (editCount !== this.#editCount || invalidCount !== this.#invalidCount) {\n const oldState = this.editState;\n this.#editCount = editCount;\n this.#invalidCount = invalidCount;\n this.#emitEditStateChange(oldState);\n }\n }\n\n #setStale(isStale: boolean) {\n if (isStale !== this.#isStale) {\n const oldState = this.editState;\n this.#isStale = isStale;\n this.#emitEditStateChange(oldState);\n }\n }\n\n #refreshEditCounts() {\n let editCount = 0;\n let invalidCount = 0;\n for (const { cellEdits } of this.#rowEdits.values()) {\n for (const cellEdit of cellEdits.values()) {\n if (cellEdit.isValid) {\n editCount++;\n } else {\n invalidCount++;\n }\n }\n }\n this.#setEditCounts(editCount, invalidCount);\n }\n\n get newRowState(): NewRowState {\n return this.#newRowState;\n }\n\n isNewRow(key: string) {\n return key === EditSession.newRowKey;\n }\n\n isNewRowFinalColumn(columnName: string) {\n return this.#newRowState.columns.at(-1) === columnName;\n }\n\n isNewRowComplete() {\n return this.#newRowState.columns.every((column) => {\n const value = this.#newRowState.values[column];\n return (\n value !== undefined &&\n (typeof value !== \"string\" || value.trim() !== \"\")\n );\n });\n }\n\n configureNewRow(columns: readonly string[]) {\n if (\n columns.length === this.#newRowState.columns.length &&\n columns.every(\n (column, index) => column === this.#newRowState.columns[index],\n )\n ) {\n return;\n }\n\n const columnSet = new Set(columns);\n const errors = Object.fromEntries(\n Object.entries(this.#newRowState.errors).filter(([column]) =>\n columnSet.has(column),\n ),\n );\n this.#setNewRowState({\n ...this.#newRowState,\n columns: [...columns],\n errors,\n });\n }\n\n setNewRowValue(column: string, value: VuuRowDataItemType) {\n const errors = { ...this.#newRowState.errors };\n delete errors[column];\n this.#setNewRowState({\n ...this.#newRowState,\n errors,\n values: { ...this.#newRowState.values, [column]: value },\n });\n }\n\n async addNewRow(): Promise<RpcResult> {\n const missingErrors = Object.fromEntries(\n this.#newRowState.columns\n .filter((column) => {\n const value = this.#newRowState.values[column];\n return (\n value === undefined ||\n (typeof value === \"string\" && value.trim() === \"\")\n );\n })\n .map((column) => [column, \"Value required\"]),\n );\n const errors = { ...this.#newRowState.errors, ...missingErrors };\n\n if (Object.keys(errors).length > 0) {\n this.#setNewRowState({ ...this.#newRowState, errors });\n return { data: undefined, type: \"SUCCESS_RESULT\" };\n }\n\n if (this.#newRowState.submitting) {\n return { data: undefined, type: \"SUCCESS_RESULT\" };\n }\n\n this.#setNewRowState({ ...this.#newRowState, submitting: true });\n try {\n const response = await this.addRow({ ...this.#newRowState.values });\n if (isRpcError(response)) {\n const finalColumn = this.#newRowState.columns.at(-1);\n this.#setNewRowState({\n ...this.#newRowState,\n errors: finalColumn\n ? { [finalColumn]: response.errorMessage }\n : this.#newRowState.errors,\n submitting: false,\n });\n return response;\n }\n\n this.#setNewRowState({\n columns: this.#newRowState.columns,\n draftRevision: this.#newRowState.draftRevision + 1,\n errors: {},\n submitting: false,\n values: {},\n });\n return response;\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : \"Unable to add row\";\n const finalColumn = this.#newRowState.columns.at(-1);\n this.#setNewRowState({\n ...this.#newRowState,\n errors: finalColumn\n ? { [finalColumn]: errorMessage }\n : this.#newRowState.errors,\n submitting: false,\n });\n return { errorMessage, type: \"ERROR_RESULT\" };\n }\n }\n\n #setNewRowState(newRowState: NewRowState) {\n this.#newRowState = newRowState;\n this.emit(\"newRow\", newRowState);\n }\n\n async deleteSelectedRows(): Promise<void> {\n const response = await this.dataSource?.deleteSelectedRows?.(\n this.#deleteMode,\n );\n if (isRpcError(response)) return;\n const deletedKeys = (response?.data as DeleteSelectedRowsResult | undefined)\n ?.deletedKeys;\n if (deletedKeys && deletedKeys.length > 0) {\n let newCount = 0;\n for (const key of deletedKeys) {\n this.#rowDeleteRevisions.set(key, ++this.#deleteRevision);\n if (!this.#deletedRows.has(key)) {\n this.#deletedRows.add(key);\n newCount++;\n }\n }\n if (newCount > 0) {\n this.deleteCount = this.#deleteCount + newCount;\n }\n }\n }\n\n async addRow(\n rowData: Record<string, VuuRowDataItemType> = {},\n ): Promise<RpcResult> {\n const addRow = this.dataSource?.addRow;\n if (addRow === undefined) {\n throw Error(\"[EditSession] datasource does not support adding rows\");\n }\n\n const response = await addRow.call(this.dataSource, rowData);\n if (response === undefined) {\n throw Error(\n \"[EditSession] datasource returned no response when adding row\",\n );\n }\n if (!isRpcError(response)) {\n this.addCount = this.#addCount + 1;\n }\n return response;\n }\n\n restoreRows(keys: string[]) {\n for (const key of keys) {\n if (this.#deletedRows.has(key)) {\n this.#deletedRows.delete(key);\n this.#rowDeleteRevisions.delete(key);\n this.deleteCount = this.#deleteCount - 1;\n }\n }\n }\n\n hasRowChanges(key: string): boolean {\n return this.#rowEdits.has(key) || this.#deletedRows.has(key);\n }\n\n isCellEdited(key: string, columnName: string): boolean {\n const cellEdit = this.#rowEdits.get(key)?.cellEdits.get(columnName);\n return (\n cellEdit?.isValid === true &&\n cellEdit.originalValue !== cellEdit.editedValue\n );\n }\n\n async undoRowChange(key: string): Promise<void> {\n if (!this.inEditMode) return;\n\n const undoRevision = this.#commitRevision;\n const deleteRevisionAtRequest = this.#rowDeleteRevisions.get(key);\n const rowEditsAtRequest = this.#rowEdits.get(key);\n const columnsAtRequest = new Set(rowEditsAtRequest?.cellEdits.keys());\n const wasDeleted = this.#deletedRows.has(key);\n const response = await this.dataSource?.undoRowChange?.(key);\n\n if (isRpcError(response)) {\n return;\n }\n\n const rowEdits = this.#rowEdits.get(key);\n if (rowEdits) {\n const changedColumns: string[] = [];\n for (const columnName of columnsAtRequest) {\n const latestRevision =\n this.#cellCommitRevisions.get(key)?.get(columnName) ?? 0;\n if (latestRevision > undoRevision) {\n continue;\n }\n if (this.isCellEdited(key, columnName)) {\n changedColumns.push(columnName);\n }\n rowEdits.cellEdits.delete(columnName);\n this.#setCellCommitRevision(key, columnName);\n }\n if (rowEdits.cellEdits.size === 0) {\n this.#rowEdits.delete(key);\n }\n this.#refreshEditCounts();\n for (const columnName of changedColumns) {\n this.emit(\"cellEditChanged\", key, columnName);\n }\n }\n if (\n wasDeleted &&\n this.#deletedRows.has(key) &&\n this.#rowDeleteRevisions.get(key) === deleteRevisionAtRequest\n ) {\n this.#deletedRows.delete(key);\n this.#rowDeleteRevisions.delete(key);\n this.deleteCount = this.#deleteCount - 1;\n }\n\n // If the server deleted a newly inserted row, decrement addCount\n const wasInsertedRow =\n (response?.data as UndoRowChangeResult | undefined)?.wasInsertedRow ===\n true;\n if (wasInsertedRow) {\n this.addCount = this.#addCount - 1;\n }\n }\n\n #clearEdits() {\n const oldState = this.editState;\n const editedCells = [...this.#rowEdits].flatMap(([key, { cellEdits }]) =>\n [...cellEdits.keys()]\n .filter((columnName) => this.isCellEdited(key, columnName))\n .map((columnName) => [key, columnName] as const),\n );\n this.#rowEdits.clear();\n this.#deletedRows.clear();\n this.#rowDeleteRevisions.clear();\n this.#cellCommitRevisions.clear();\n this.#editCount = 0;\n this.#deleteCount = 0;\n this.#addCount = 0;\n this.#invalidCount = 0;\n this.#isStale = false;\n this.#setNewRowState({\n columns: this.#newRowState.columns,\n draftRevision: this.#newRowState.draftRevision + 1,\n errors: {},\n submitting: false,\n values: {},\n });\n for (const [key, columnName] of editedCells) {\n this.emit(\"cellEditChanged\", key, columnName);\n }\n this.#emitEditStateChange(oldState);\n }\n\n #setLifecycle(lifecycle: EditLifecycle) {\n this.#lifecycle = lifecycle;\n this.emit(\"lifecycle\", lifecycle);\n }\n\n #enqueue<T>(operation: () => Promise<T>): Promise<T> {\n const result = this.#transitionQueue.then(operation);\n // Reassign to a settled continuation: callers keep the real result, while a\n // rejected transition cannot poison the queue for later begin/end requests.\n this.#transitionQueue = result.then(\n () => undefined,\n () => undefined,\n );\n return result;\n }\n\n begin(copyOption: CopyOption = \"All\"): Promise<DataSource> {\n return this.#enqueue(async () => {\n if (\n this.#lifecycle.status === \"active\" ||\n (this.#lifecycle.status === \"error\" &&\n this.#lifecycle.operation === \"end\")\n ) {\n const sessionDataSource = this.#sessionDataSource;\n if (!sessionDataSource) {\n throw new Error(\"[EditSession] active lifecycle has no datasource\");\n }\n if (this.#lifecycle.status === \"error\") {\n this.#setLifecycle({\n status: \"active\",\n sessionDataSource,\n });\n }\n return sessionDataSource;\n }\n\n this.#setLifecycle({ status: \"starting\" });\n\n try {\n const sourceDataSource = this.#sourceTableDataSource;\n const sessionDataSource =\n this.#editSessionApi === \"beginEditSession\"\n ? await sourceDataSource?.beginEditSession?.(\n toEditSessionMode(copyOption),\n )\n : await sourceDataSource?.createSessionDataSource?.(copyOption);\n if (!sessionDataSource) {\n throw new Error(\n `[EditSession] datasource does not support ${this.#editSessionApi}`,\n );\n }\n\n this.#sessionDataSource = sessionDataSource;\n this.#setStale(false);\n this.#setLifecycle({ status: \"active\", sessionDataSource });\n return sessionDataSource;\n } catch (cause) {\n const error = cause instanceof Error ? cause : new Error(String(cause));\n this.#setLifecycle({ status: \"error\", operation: \"begin\", error });\n throw error;\n }\n\n });\n }\n\n get dataSource() {\n return this.#sessionDataSource ?? this.#sourceTableDataSource;\n }\n\n get sessionDataSource() {\n return this.#sessionDataSource;\n }\n\n end(saveChanges = false, force = false): Promise<void> {\n return this.#enqueue(async () => {\n if (\n this.#lifecycle.status === \"idle\" ||\n (this.#lifecycle.status === \"error\" &&\n this.#lifecycle.operation === \"begin\")\n ) {\n if (this.#lifecycle.status !== \"idle\") {\n this.#setLifecycle({ status: \"idle\" });\n }\n return;\n }\n\n const sessionDataSource = this.#sessionDataSource;\n if (!sessionDataSource) {\n throw new Error(\"[EditSession] ending lifecycle has no datasource\");\n }\n this.#setLifecycle({ status: \"ending\", sessionDataSource });\n\n try {\n await this.dataSource?.endEditSession?.(saveChanges, force);\n this.#clearEdits();\n this.#sessionDataSource = undefined;\n this.#setLifecycle({ status: \"idle\" });\n } catch (cause) {\n const error = cause instanceof Error ? cause : new Error(String(cause));\n if (error instanceof StaleUpdateError) {\n this.#setStale(true);\n }\n this.#setLifecycle({\n status: \"error\",\n operation: \"end\",\n error,\n sessionDataSource,\n });\n throw error;\n }\n });\n }\n\n get lifecycle() {\n return this.#lifecycle;\n }\n\n get inEditMode() {\n return (\n this.#lifecycle.status === \"active\" ||\n this.#lifecycle.status === \"ending\" ||\n (this.#lifecycle.status === \"error\" &&\n this.#lifecycle.operation === \"end\")\n );\n }\n\n #getOrCreateRowEdits(key: string): RowEditDetails {\n const rowEditDetails = this.#rowEdits.get(key);\n if (rowEditDetails) {\n return rowEditDetails;\n } else {\n const rowEditDetails = {\n cellEdits: new Map<string, CellEdit>(),\n };\n this.#rowEdits.set(key, rowEditDetails);\n return rowEditDetails;\n }\n }\n\n #storeCellEdit(\n key: string,\n cellEdits: Map<string, CellEdit>,\n column: string,\n originalValue: VuuRowDataItemType,\n editedValue: VuuRowDataItemType,\n isValid: boolean,\n ) {\n const wasEdited = this.isCellEdited(key, column);\n const existingCellEdit = cellEdits.get(column);\n const cellEdit: CellEdit = {\n originalValue: existingCellEdit?.originalValue ?? originalValue,\n editedValue,\n isValid,\n };\n\n if (isValid && cellEdit.originalValue === editedValue) {\n cellEdits.delete(column);\n } else {\n cellEdits.set(column, cellEdit);\n }\n this.#refreshEditCounts();\n if (wasEdited !== this.isCellEdited(key, column)) {\n this.emit(\"cellEditChanged\", key, column);\n }\n return cellEdit;\n }\n\n #setCellCommitRevision(key: string, columnName: string) {\n const revision = ++this.#commitRevision;\n const rowRevisions =\n this.#cellCommitRevisions.get(key) ?? new Map<string, number>();\n rowRevisions.set(columnName, revision);\n this.#cellCommitRevisions.set(key, rowRevisions);\n return revision;\n }\n\n #isLatestCellCommit(key: string, columnName: string, revision: number) {\n return this.#cellCommitRevisions.get(key)?.get(columnName) === revision;\n }\n\n async commit(\n key: string,\n columnName: string,\n originalValue: VuuRowDataItemType,\n typedValue: string | number | boolean,\n isValid: boolean,\n ): Promise<RpcResult> {\n if (\n this.#lifecycle.status !== \"active\" &&\n !(\n this.#lifecycle.status === \"error\" &&\n this.#lifecycle.operation === \"end\"\n )\n ) {\n throw new Error(\"No edit session in progress\");\n }\n const revision = this.#setCellCommitRevision(key, columnName);\n const rowEditDetails = this.#getOrCreateRowEdits(key);\n const { cellEdits } = rowEditDetails;\n\n if (isValid) {\n const cellEdit = this.#storeCellEdit(\n key,\n cellEdits,\n columnName,\n originalValue,\n typedValue,\n isValid,\n );\n\n if (this.dataSource?.editCell) {\n const response = await this.dataSource.editCell(\n key,\n columnName,\n typedValue,\n );\n if (!this.#isLatestCellCommit(key, columnName, revision)) {\n throw new SupersededEditError(\n `Edit response superseded for ${key}:${columnName}`,\n );\n }\n const currentCellEdits = this.#getOrCreateRowEdits(key).cellEdits;\n if (isRpcError(response)) {\n this.#storeCellEdit(\n key,\n currentCellEdits,\n columnName,\n cellEdit.originalValue,\n typedValue,\n false,\n );\n } else if (currentCellEdits.size === 0) {\n this.#rowEdits.delete(key);\n }\n\n return response;\n }\n if (cellEdits.size === 0) {\n this.#rowEdits.delete(key);\n }\n return { data: undefined, type: \"SUCCESS_RESULT\" };\n } else {\n this.#storeCellEdit(\n key,\n cellEdits,\n columnName,\n originalValue,\n typedValue,\n isValid,\n );\n return { data: undefined, type: \"SUCCESS_RESULT\" };\n }\n }\n}\n"],"names":["rowEditDetails"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EditSession.js","sources":["../../../packages/vuu-data-editing/src/EditSession.tsx"],"sourcesContent":["import type {\n CopyOption,\n DataSource,\n DeleteRowMode,\n DeleteSelectedRowsResult,\n EditApi,\n EditSessionMode,\n UndoRowChangeResult,\n} from \"@vuu-ui/vuu-data-types\";\nimport type { RpcResult, VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { EventEmitter, isRpcError, StaleUpdateError } from \"@vuu-ui/vuu-utils\";\n\nexport type EditState = \"clean\" | \"dirty\" | \"invalid\" | \"stale\";\nexport type EditSessionApi =\n | \"createSessionDataSource\"\n | \"beginEditSession\";\nconst toEditSessionMode = (copyOption: CopyOption): EditSessionMode => {\n switch (copyOption) {\n case \"All\":\n return \"all-rows\";\n case \"Selected\":\n return \"selected-rows\";\n case \"Empty\":\n return \"empty-session-table\";\n }\n};\nexport type NewRowState = {\n columns: readonly string[];\n draftRevision: number;\n errors: Readonly<Record<string, string>>;\n submitting: boolean;\n values: Readonly<Record<string, VuuRowDataItemType>>;\n};\n\nexport type EditLifecycle =\n | { status: \"idle\" }\n | { status: \"starting\" }\n | { status: \"active\"; sessionDataSource: DataSource }\n | { status: \"ending\"; sessionDataSource: DataSource }\n | {\n status: \"error\";\n operation: \"begin\" | \"end\";\n error: Error;\n sessionDataSource?: DataSource;\n };\n\nexport class EditError extends Error {}\nexport class SupersededEditError extends Error {}\n\ntype CellEdit = {\n originalValue: VuuRowDataItemType;\n editedValue: VuuRowDataItemType;\n isValid: boolean;\n};\n\ntype RowEditDetails = {\n /**\n * Column name => cell edit details\n */\n cellEdits: Map<string, CellEdit>;\n};\n\ntype EditSessionEvents = {\n cellEditChanged: (key: string, columnName: string) => void;\n editState: (editState: EditState) => void;\n lifecycle: (lifecycle: EditLifecycle) => void;\n newRow: (newRowState: NewRowState) => void;\n};\n\nexport class EditSession extends EventEmitter<EditSessionEvents> {\n static readonly newRowKey = \"__vuu_new_row__\";\n /**\n * Row key => row edits\n */\n #rowEdits = new Map<string, RowEditDetails>();\n #deletedRows = new Set<string>();\n #deleteRevision = 0;\n #rowDeleteRevisions = new Map<string, number>();\n #editCount = 0;\n #deleteCount = 0;\n #addCount = 0;\n #invalidCount = 0;\n #isStale = false;\n #commitRevision = 0;\n #cellCommitRevisions = new Map<string, Map<string, number>>();\n #deleteMode: DeleteRowMode;\n #editSessionApi: EditSessionApi;\n #sourceTableDataSource?: EditApi;\n #sessionDataSource?: DataSource;\n #newRowState: NewRowState = {\n columns: [],\n draftRevision: 0,\n errors: {},\n submitting: false,\n values: {},\n };\n #lifecycle: EditLifecycle = { status: \"idle\" };\n /** Prevent begin/end RPCs from overlapping and observing stale lifecycle state. */\n #transitionQueue: Promise<void> = Promise.resolve();\n\n constructor(\n dataSource: EditApi,\n deleteMode: DeleteRowMode = \"soft\",\n editSessionApi: EditSessionApi = \"createSessionDataSource\",\n ) {\n super();\n this.#sourceTableDataSource = dataSource;\n this.#deleteMode = deleteMode;\n this.#editSessionApi = editSessionApi;\n }\n\n get editCount() {\n return this.#editCount;\n }\n\n set editCount(val: number) {\n this.#setEditCounts(val, this.#invalidCount);\n }\n\n get invalidCount() {\n return this.#invalidCount;\n }\n\n set invalidCount(val: number) {\n this.#setEditCounts(this.#editCount, val);\n }\n\n get deleteCount() {\n return this.#deleteCount;\n }\n\n set deleteCount(val: number) {\n if (val !== this.#deleteCount) {\n const oldState = this.editState;\n const oldCount = this.#deleteCount;\n this.#deleteCount = val;\n this.#emitEditStateChange(oldState, oldCount === 0 || val === 0);\n }\n }\n\n get addCount() {\n return this.#addCount;\n }\n\n set addCount(val: number) {\n if (val !== this.#addCount) {\n const oldState = this.editState;\n const oldCount = this.#addCount;\n this.#addCount = val;\n this.#emitEditStateChange(oldState, oldCount === 0 || val === 0);\n }\n }\n\n get editState(): EditState {\n if (this.#invalidCount > 0) {\n return \"invalid\";\n }\n if (this.#isStale) {\n return \"stale\";\n }\n return this.#editCount === 0 &&\n this.#deleteCount === 0 &&\n this.#addCount === 0\n ? \"clean\"\n : \"dirty\";\n }\n\n #emitEditStateChange(oldState: EditState, force = false) {\n const newState = this.editState;\n if (force || newState !== oldState) {\n this.emit(\"editState\", newState);\n }\n }\n\n #setEditCounts(editCount: number, invalidCount: number) {\n if (editCount !== this.#editCount || invalidCount !== this.#invalidCount) {\n const oldState = this.editState;\n this.#editCount = editCount;\n this.#invalidCount = invalidCount;\n this.#emitEditStateChange(oldState);\n }\n }\n\n #setStale(isStale: boolean) {\n if (isStale !== this.#isStale) {\n const oldState = this.editState;\n this.#isStale = isStale;\n this.#emitEditStateChange(oldState);\n }\n }\n\n #refreshEditCounts() {\n let editCount = 0;\n let invalidCount = 0;\n for (const { cellEdits } of this.#rowEdits.values()) {\n for (const cellEdit of cellEdits.values()) {\n if (cellEdit.isValid) {\n editCount++;\n } else {\n invalidCount++;\n }\n }\n }\n this.#setEditCounts(editCount, invalidCount);\n }\n\n get newRowState(): NewRowState {\n return this.#newRowState;\n }\n\n isNewRow(key: string) {\n return key === EditSession.newRowKey;\n }\n\n isNewRowFinalColumn(columnName: string) {\n return this.#newRowState.columns.at(-1) === columnName;\n }\n\n isNewRowComplete() {\n return this.#newRowState.columns.every((column) => {\n const value = this.#newRowState.values[column];\n return (\n value !== undefined &&\n (typeof value !== \"string\" || value.trim() !== \"\")\n );\n });\n }\n\n configureNewRow(columns: readonly string[]) {\n if (\n columns.length === this.#newRowState.columns.length &&\n columns.every(\n (column, index) => column === this.#newRowState.columns[index],\n )\n ) {\n return;\n }\n\n const columnSet = new Set(columns);\n const errors = Object.fromEntries(\n Object.entries(this.#newRowState.errors).filter(([column]) =>\n columnSet.has(column),\n ),\n );\n this.#setNewRowState({\n ...this.#newRowState,\n columns: [...columns],\n errors,\n });\n }\n\n setNewRowValue(column: string, value: VuuRowDataItemType) {\n const errors = { ...this.#newRowState.errors };\n delete errors[column];\n this.#setNewRowState({\n ...this.#newRowState,\n errors,\n values: { ...this.#newRowState.values, [column]: value },\n });\n }\n\n async addNewRow(): Promise<RpcResult> {\n const missingErrors = Object.fromEntries(\n this.#newRowState.columns\n .filter((column) => {\n const value = this.#newRowState.values[column];\n return (\n value === undefined ||\n (typeof value === \"string\" && value.trim() === \"\")\n );\n })\n .map((column) => [column, \"Value required\"]),\n );\n const errors = { ...this.#newRowState.errors, ...missingErrors };\n\n if (Object.keys(errors).length > 0) {\n this.#setNewRowState({ ...this.#newRowState, errors });\n return { data: undefined, type: \"SUCCESS_RESULT\" };\n }\n\n if (this.#newRowState.submitting) {\n return { data: undefined, type: \"SUCCESS_RESULT\" };\n }\n\n this.#setNewRowState({ ...this.#newRowState, submitting: true });\n try {\n const response = await this.addRow({ ...this.#newRowState.values });\n if (isRpcError(response)) {\n const finalColumn = this.#newRowState.columns.at(-1);\n this.#setNewRowState({\n ...this.#newRowState,\n errors: finalColumn\n ? { [finalColumn]: response.errorMessage }\n : this.#newRowState.errors,\n submitting: false,\n });\n return response;\n }\n\n this.#setNewRowState({\n columns: this.#newRowState.columns,\n draftRevision: this.#newRowState.draftRevision + 1,\n errors: {},\n submitting: false,\n values: {},\n });\n return response;\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : \"Unable to add row\";\n const finalColumn = this.#newRowState.columns.at(-1);\n this.#setNewRowState({\n ...this.#newRowState,\n errors: finalColumn\n ? { [finalColumn]: errorMessage }\n : this.#newRowState.errors,\n submitting: false,\n });\n return { errorMessage, type: \"ERROR_RESULT\" };\n }\n }\n\n #setNewRowState(newRowState: NewRowState) {\n this.#newRowState = newRowState;\n this.emit(\"newRow\", newRowState);\n }\n\n async deleteSelectedRows(): Promise<void> {\n const response = await this.dataSource?.deleteSelectedRows?.(\n this.#deleteMode,\n );\n if (isRpcError(response)) return;\n const deletedKeys = (response?.data as DeleteSelectedRowsResult | undefined)\n ?.deletedKeys;\n if (deletedKeys && deletedKeys.length > 0) {\n let newCount = 0;\n for (const key of deletedKeys) {\n this.#rowDeleteRevisions.set(key, ++this.#deleteRevision);\n if (!this.#deletedRows.has(key)) {\n this.#deletedRows.add(key);\n newCount++;\n }\n }\n if (newCount > 0) {\n this.deleteCount = this.#deleteCount + newCount;\n }\n }\n }\n\n async addRow(\n rowData: Record<string, VuuRowDataItemType> = {},\n ): Promise<RpcResult> {\n const addRow = this.dataSource?.addRow;\n if (addRow === undefined) {\n throw Error(\"[EditSession] datasource does not support adding rows\");\n }\n\n const response = await addRow.call(this.dataSource, rowData);\n if (response === undefined) {\n throw Error(\n \"[EditSession] datasource returned no response when adding row\",\n );\n }\n if (!isRpcError(response)) {\n this.addCount = this.#addCount + 1;\n }\n return response;\n }\n\n restoreRows(keys: string[]) {\n for (const key of keys) {\n if (this.#deletedRows.has(key)) {\n this.#deletedRows.delete(key);\n this.#rowDeleteRevisions.delete(key);\n this.deleteCount = this.#deleteCount - 1;\n }\n }\n }\n\n hasRowChanges(key: string): boolean {\n return this.#rowEdits.has(key) || this.#deletedRows.has(key);\n }\n\n isCellEdited(key: string, columnName: string): boolean {\n const cellEdit = this.#rowEdits.get(key)?.cellEdits.get(columnName);\n return (\n cellEdit?.isValid === true &&\n cellEdit.originalValue !== cellEdit.editedValue\n );\n }\n\n async undoRowChange(key: string): Promise<void> {\n if (!this.inEditMode) return;\n\n const undoRevision = this.#commitRevision;\n const deleteRevisionAtRequest = this.#rowDeleteRevisions.get(key);\n const rowEditsAtRequest = this.#rowEdits.get(key);\n const columnsAtRequest = new Set(rowEditsAtRequest?.cellEdits.keys());\n const wasDeleted = this.#deletedRows.has(key);\n const response = await this.dataSource?.undoRowChange?.(key);\n\n if (isRpcError(response)) {\n return;\n }\n\n const rowEdits = this.#rowEdits.get(key);\n if (rowEdits) {\n const changedColumns: string[] = [];\n for (const columnName of columnsAtRequest) {\n const latestRevision =\n this.#cellCommitRevisions.get(key)?.get(columnName) ?? 0;\n if (latestRevision > undoRevision) {\n continue;\n }\n if (this.isCellEdited(key, columnName)) {\n changedColumns.push(columnName);\n }\n rowEdits.cellEdits.delete(columnName);\n this.#setCellCommitRevision(key, columnName);\n }\n if (rowEdits.cellEdits.size === 0) {\n this.#rowEdits.delete(key);\n }\n this.#refreshEditCounts();\n for (const columnName of changedColumns) {\n this.emit(\"cellEditChanged\", key, columnName);\n }\n }\n if (\n wasDeleted &&\n this.#deletedRows.has(key) &&\n this.#rowDeleteRevisions.get(key) === deleteRevisionAtRequest\n ) {\n this.#deletedRows.delete(key);\n this.#rowDeleteRevisions.delete(key);\n this.deleteCount = this.#deleteCount - 1;\n }\n\n // If the server deleted a newly inserted row, decrement addCount\n const wasInsertedRow =\n (response?.data as UndoRowChangeResult | undefined)?.wasInsertedRow ===\n true;\n if (wasInsertedRow) {\n this.addCount = this.#addCount - 1;\n }\n }\n\n #clearEdits() {\n const oldState = this.editState;\n const editedCells = [...this.#rowEdits].flatMap(([key, { cellEdits }]) =>\n [...cellEdits.keys()]\n .filter((columnName) => this.isCellEdited(key, columnName))\n .map((columnName) => [key, columnName] as const),\n );\n this.#rowEdits.clear();\n this.#deletedRows.clear();\n this.#rowDeleteRevisions.clear();\n this.#cellCommitRevisions.clear();\n this.#editCount = 0;\n this.#deleteCount = 0;\n this.#addCount = 0;\n this.#invalidCount = 0;\n this.#isStale = false;\n this.#setNewRowState({\n columns: this.#newRowState.columns,\n draftRevision: this.#newRowState.draftRevision + 1,\n errors: {},\n submitting: false,\n values: {},\n });\n for (const [key, columnName] of editedCells) {\n this.emit(\"cellEditChanged\", key, columnName);\n }\n this.#emitEditStateChange(oldState);\n }\n\n #setLifecycle(lifecycle: EditLifecycle) {\n this.#lifecycle = lifecycle;\n this.emit(\"lifecycle\", lifecycle);\n }\n\n #enqueue<T>(operation: () => Promise<T>): Promise<T> {\n const result = this.#transitionQueue.then(operation);\n // Reassign to a settled continuation: callers keep the real result, while a\n // rejected transition cannot poison the queue for later begin/end requests.\n this.#transitionQueue = result.then(\n () => undefined,\n () => undefined,\n );\n return result;\n }\n\n begin(copyOption: CopyOption = \"All\"): Promise<DataSource> {\n return this.#enqueue(async () => {\n if (\n this.#lifecycle.status === \"active\" ||\n (this.#lifecycle.status === \"error\" &&\n this.#lifecycle.operation === \"end\")\n ) {\n const sessionDataSource = this.#sessionDataSource;\n if (!sessionDataSource) {\n throw new Error(\"[EditSession] active lifecycle has no datasource\");\n }\n if (this.#lifecycle.status === \"error\") {\n this.#setLifecycle({\n status: \"active\",\n sessionDataSource,\n });\n }\n return sessionDataSource;\n }\n\n this.#setLifecycle({ status: \"starting\" });\n\n try {\n const sourceDataSource = this.#sourceTableDataSource;\n const sessionDataSource =\n this.#editSessionApi === \"beginEditSession\"\n ? await sourceDataSource?.beginEditSession?.(\n toEditSessionMode(copyOption),\n )\n : await sourceDataSource?.createSessionDataSource?.(copyOption);\n if (!sessionDataSource) {\n throw new Error(\n `[EditSession] datasource does not support ${this.#editSessionApi}`,\n );\n }\n\n this.#sessionDataSource = sessionDataSource;\n this.#setStale(false);\n this.#setLifecycle({ status: \"active\", sessionDataSource });\n return sessionDataSource;\n } catch (cause) {\n const error = cause instanceof Error ? cause : new Error(String(cause));\n this.#setLifecycle({ status: \"error\", operation: \"begin\", error });\n throw error;\n }\n\n });\n }\n\n get dataSource() {\n return this.#sessionDataSource ?? this.#sourceTableDataSource;\n }\n\n get sessionDataSource() {\n return this.#sessionDataSource;\n }\n\n end(saveChanges = false, force = false): Promise<void> {\n return this.#enqueue(async () => {\n if (\n this.#lifecycle.status === \"idle\" ||\n (this.#lifecycle.status === \"error\" &&\n this.#lifecycle.operation === \"begin\")\n ) {\n if (this.#lifecycle.status !== \"idle\") {\n this.#setLifecycle({ status: \"idle\" });\n }\n return;\n }\n\n const sessionDataSource = this.#sessionDataSource;\n if (!sessionDataSource) {\n throw new Error(\"[EditSession] ending lifecycle has no datasource\");\n }\n this.#setLifecycle({ status: \"ending\", sessionDataSource });\n\n try {\n await this.dataSource?.endEditSession?.(saveChanges, force);\n this.#clearEdits();\n this.#sessionDataSource = undefined;\n this.#setLifecycle({ status: \"idle\" });\n } catch (cause) {\n const error = cause instanceof Error ? cause : new Error(String(cause));\n if (error instanceof StaleUpdateError) {\n this.#setStale(true);\n }\n this.#setLifecycle({\n status: \"error\",\n operation: \"end\",\n error,\n sessionDataSource,\n });\n throw error;\n }\n });\n }\n\n get lifecycle() {\n return this.#lifecycle;\n }\n\n get inEditMode() {\n return (\n this.#lifecycle.status === \"active\" ||\n this.#lifecycle.status === \"ending\" ||\n (this.#lifecycle.status === \"error\" &&\n this.#lifecycle.operation === \"end\")\n );\n }\n\n #getOrCreateRowEdits(key: string): RowEditDetails {\n const rowEditDetails = this.#rowEdits.get(key);\n if (rowEditDetails) {\n return rowEditDetails;\n } else {\n const rowEditDetails = {\n cellEdits: new Map<string, CellEdit>(),\n };\n this.#rowEdits.set(key, rowEditDetails);\n return rowEditDetails;\n }\n }\n\n #storeCellEdit(\n key: string,\n cellEdits: Map<string, CellEdit>,\n column: string,\n originalValue: VuuRowDataItemType,\n editedValue: VuuRowDataItemType,\n isValid: boolean,\n ) {\n const wasEdited = this.isCellEdited(key, column);\n const existingCellEdit = cellEdits.get(column);\n const cellEdit: CellEdit = {\n originalValue: existingCellEdit?.originalValue ?? originalValue,\n editedValue,\n isValid,\n };\n\n if (isValid && cellEdit.originalValue === editedValue) {\n cellEdits.delete(column);\n } else {\n cellEdits.set(column, cellEdit);\n }\n this.#refreshEditCounts();\n if (wasEdited !== this.isCellEdited(key, column)) {\n this.emit(\"cellEditChanged\", key, column);\n }\n return cellEdit;\n }\n\n #setCellCommitRevision(key: string, columnName: string) {\n const revision = ++this.#commitRevision;\n const rowRevisions =\n this.#cellCommitRevisions.get(key) ?? new Map<string, number>();\n rowRevisions.set(columnName, revision);\n this.#cellCommitRevisions.set(key, rowRevisions);\n return revision;\n }\n\n #isLatestCellCommit(key: string, columnName: string, revision: number) {\n return this.#cellCommitRevisions.get(key)?.get(columnName) === revision;\n }\n\n async commit(\n key: string,\n columnName: string,\n originalValue: VuuRowDataItemType,\n typedValue: string | number | boolean,\n isValid: boolean,\n ): Promise<RpcResult> {\n if (\n this.#lifecycle.status !== \"active\" &&\n !(\n this.#lifecycle.status === \"error\" &&\n this.#lifecycle.operation === \"end\"\n )\n ) {\n throw new Error(\"No edit session in progress\");\n }\n const revision = this.#setCellCommitRevision(key, columnName);\n const rowEditDetails = this.#getOrCreateRowEdits(key);\n const { cellEdits } = rowEditDetails;\n\n if (isValid) {\n const cellEdit = this.#storeCellEdit(\n key,\n cellEdits,\n columnName,\n originalValue,\n typedValue,\n isValid,\n );\n\n if (this.dataSource?.editCell) {\n const response = await this.dataSource.editCell(\n key,\n columnName,\n typedValue,\n );\n if (!this.#isLatestCellCommit(key, columnName, revision)) {\n throw new SupersededEditError(\n `Edit response superseded for ${key}:${columnName}`,\n );\n }\n const currentCellEdits = this.#getOrCreateRowEdits(key).cellEdits;\n if (isRpcError(response)) {\n this.#storeCellEdit(\n key,\n currentCellEdits,\n columnName,\n cellEdit.originalValue,\n typedValue,\n false,\n );\n } else if (currentCellEdits.size === 0) {\n this.#rowEdits.delete(key);\n }\n\n return response;\n }\n if (cellEdits.size === 0) {\n this.#rowEdits.delete(key);\n }\n return { data: undefined, type: \"SUCCESS_RESULT\" };\n } else {\n this.#storeCellEdit(\n key,\n cellEdits,\n columnName,\n originalValue,\n typedValue,\n isValid,\n );\n return { data: undefined, type: \"SUCCESS_RESULT\" };\n }\n }\n}\n"],"names":["rowEditDetails"],"mappings":"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"}
|
package/esm/edit-utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { formatDate } from '@vuu-ui/vuu-utils';
|
|
3
|
-
export { isInlineEditingSession } from '@vuu-ui/vuu-
|
|
3
|
+
export { isInlineEditingSession } from '@vuu-ui/vuu-utils';
|
|
4
4
|
|
|
5
5
|
const timeFormatter = formatDate({ time: "hh:mm:ss" });
|
|
6
6
|
const dataRowEditErrors = /* @__PURE__ */ Symbol("vuuDataRowEditErrors");
|
package/esm/edit-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit-utils.js","sources":["../../../packages/vuu-data-editing/src/edit-utils.tsx"],"sourcesContent":["import type { DataRow, RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { formatDate } from \"@vuu-ui/vuu-utils\";\n\nexport { isInlineEditingSession } from \"@vuu-ui/vuu-
|
|
1
|
+
{"version":3,"file":"edit-utils.js","sources":["../../../packages/vuu-data-editing/src/edit-utils.tsx"],"sourcesContent":["import type { DataRow, RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { formatDate } from \"@vuu-ui/vuu-utils\";\n\nexport { isInlineEditingSession } from \"@vuu-ui/vuu-utils\";\n\nconst timeFormatter = formatDate({ time: \"hh:mm:ss\" });\nconst dataRowEditErrors = Symbol(\"vuuDataRowEditErrors\");\n\nexport const isEditRowReadOnly = (dataRow: DataRow) =>\n dataRow.vuu_action === \"deleteRow\";\n\ntype DataRowWithEditErrors = DataRow & {\n [dataRowEditErrors]?: Record<string, string>;\n};\n\nexport const withDataRowEditErrors = <T extends DataRow>(\n dataRow: T,\n errors: Record<string, string>,\n): T => {\n Object.defineProperty(dataRow, dataRowEditErrors, {\n configurable: true,\n value: errors,\n });\n return dataRow;\n};\n\nexport const getVuuEditMessage = (\n dataRow: DataRow,\n column: RuntimeColumnDescriptor,\n originalValue: string,\n) => {\n const editError = (dataRow as DataRowWithEditErrors)[dataRowEditErrors]?.[\n column.name\n ];\n if (editError) {\n return editError;\n }\n\n const vuuMsg = dataRow.vuuMsg as string;\n if (typeof vuuMsg === \"string\" && vuuMsg !== \"\") {\n const columnMessages = vuuMsg.split(\",\");\n const msgForCol = columnMessages.find((msg) =>\n msg.startsWith(`${column.name}:`),\n );\n if (msgForCol) {\n const [, value, updatedValue, ts] = msgForCol.split(\":\");\n const updateTime = timeFormatter(new Date(parseInt(ts as string)));\n return (\n <span>\n {\"Update rejected. Original value \"}\n <b>{originalValue}</b>\n {\" could not be updated to \"}\n <b>{value}</b>\n {\". It was updated to \"}\n <b>{updatedValue}</b>\n {\" at \"}\n {updateTime}\n {\".\"}\n </span>\n );\n }\n }\n};\n"],"names":[],"mappings":";;;;AAKA,MAAM,aAAgB,GAAA,UAAA,CAAW,EAAE,IAAA,EAAM,YAAY,CAAA;AACrD,MAAM,iBAAA,0BAA2B,sBAAsB,CAAA;AAEhD,MAAM,iBAAoB,GAAA,CAAC,OAChC,KAAA,OAAA,CAAQ,UAAe,KAAA;AAMZ,MAAA,qBAAA,GAAwB,CACnC,OAAA,EACA,MACM,KAAA;AACN,EAAO,MAAA,CAAA,cAAA,CAAe,SAAS,iBAAmB,EAAA;AAAA,IAChD,YAAc,EAAA,IAAA;AAAA,IACd,KAAO,EAAA;AAAA,GACR,CAAA;AACD,EAAO,OAAA,OAAA;AACT;AAEO,MAAM,iBAAoB,GAAA,CAC/B,OACA,EAAA,MAAA,EACA,aACG,KAAA;AACH,EAAA,MAAM,SAAa,GAAA,OAAA,CAAkC,iBAAiB,CAAA,GACpE,OAAO,IACT,CAAA;AACA,EAAA,IAAI,SAAW,EAAA;AACb,IAAO,OAAA,SAAA;AAAA;AAGT,EAAA,MAAM,SAAS,OAAQ,CAAA,MAAA;AACvB,EAAA,IAAI,OAAO,MAAA,KAAW,QAAY,IAAA,MAAA,KAAW,EAAI,EAAA;AAC/C,IAAM,MAAA,cAAA,GAAiB,MAAO,CAAA,KAAA,CAAM,GAAG,CAAA;AACvC,IAAA,MAAM,YAAY,cAAe,CAAA,IAAA;AAAA,MAAK,CAAC,GACrC,KAAA,GAAA,CAAI,WAAW,CAAG,EAAA,MAAA,CAAO,IAAI,CAAG,CAAA,CAAA;AAAA,KAClC;AACA,IAAA,IAAI,SAAW,EAAA;AACb,MAAM,MAAA,GAAG,KAAO,EAAA,YAAA,EAAc,EAAE,CAAI,GAAA,SAAA,CAAU,MAAM,GAAG,CAAA;AACvD,MAAA,MAAM,aAAa,aAAc,CAAA,IAAI,KAAK,QAAS,CAAA,EAAY,CAAC,CAAC,CAAA;AACjE,MAAA,4BACG,MACE,EAAA,EAAA,QAAA,EAAA;AAAA,QAAA,kCAAA;AAAA,wBACD,GAAA,CAAC,OAAG,QAAc,EAAA,aAAA,EAAA,CAAA;AAAA,QACjB,2BAAA;AAAA,wBACD,GAAA,CAAC,OAAG,QAAM,EAAA,KAAA,EAAA,CAAA;AAAA,QACT,sBAAA;AAAA,wBACD,GAAA,CAAC,OAAG,QAAa,EAAA,YAAA,EAAA,CAAA;AAAA,QAChB,MAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,OACH,EAAA,CAAA;AAAA;AAEJ;AAEJ;;;;"}
|
package/esm/index.js
CHANGED
|
@@ -4,7 +4,7 @@ export { getVuuEditMessage, isEditRowReadOnly, withDataRowEditErrors } from './e
|
|
|
4
4
|
export { EditButtons } from './EditButtons.js';
|
|
5
5
|
export { EditModeProvider, useEditMode } from './EditModeProvider.js';
|
|
6
6
|
export { EditError, EditSession, SupersededEditError } from './EditSession.js';
|
|
7
|
-
export { StaleUpdateError, isInlineEditingSession } from '@vuu-ui/vuu-
|
|
7
|
+
export { StaleUpdateError, isInlineEditingSession } from '@vuu-ui/vuu-utils';
|
|
8
8
|
export { EDIT_ACTION_ROW_CLASS_NAME_GENERATOR, editActionRowClassNameGenerator } from './editActionRowClassNameGenerator.js';
|
|
9
9
|
export { UNDO_CELL_RENDERER, UndoCellRenderer, getUndoButtonContent, getUndoTooltipContent } from './UndoCellRenderer.js';
|
|
10
10
|
export { useEditableTable } from './useEditableTable.js';
|
package/esm/useEditableTable.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { useLayoutEffectSkipFirst } from '@vuu-ui/vuu-utils';
|
|
2
|
-
import { useData } from '@vuu-ui/vuu-utils2';
|
|
1
|
+
import { useData, useLayoutEffectSkipFirst } from '@vuu-ui/vuu-utils';
|
|
3
2
|
import { useState, useMemo, useRef, useCallback, useEffect } from 'react';
|
|
4
3
|
import { EditSession } from './EditSession.js';
|
|
5
4
|
import { EDIT_ACTION_ROW_CLASS_NAME_GENERATOR } from './editActionRowClassNameGenerator.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEditableTable.js","sources":["../../../packages/vuu-data-editing/src/useEditableTable.ts"],"sourcesContent":["import type {\n CopyOption,\n DataSource,\n DeleteRowMode,\n EditApi,\n} from \"@vuu-ui/vuu-data-types\";\nimport type { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { useLayoutEffectSkipFirst } from \"@vuu-ui/vuu-utils\";\nimport { useData } from \"@vuu-ui/vuu-utils2\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n EditSession,\n type EditLifecycle,\n type EditSessionApi,\n type EditState,\n} from \"./EditSession\";\nimport { EDIT_ACTION_ROW_CLASS_NAME_GENERATOR } from \"./editActionRowClassNameGenerator\";\n\nconst EDIT_ACTION_ROW_CLASS_NAME_GENERATORS = [\n EDIT_ACTION_ROW_CLASS_NAME_GENERATOR,\n];\n\nexport type EditMode = \"edit\" | \"view\";\n\nexport interface EditableTableHookProps {\n /**\n * columns to be included in subscription. If not provided,\n * default will be '*'. Ignored if dataSource prop present.\n */\n columns?: string[];\n dataSource?: DataSource;\n addRowsCount?: number;\n deleteMode?: DeleteRowMode;\n editSessionApi?: EditSessionApi;\n copyOption?: CopyOption;\n isEditMode: boolean;\n onCancel: () => void;\n onSave: () => void;\n /**\n * If dataSource not provided, new DataSource\n * will be created using table and columns\n */\n table?: VuuTable;\n}\n\nexport const useEditableTable = ({\n columns,\n dataSource: dataSourceProp,\n deleteMode = \"soft\",\n editSessionApi = \"createSessionDataSource\",\n copyOption = \"All\",\n isEditMode,\n onCancel,\n onSave,\n table,\n}: EditableTableHookProps) => {\n const { VuuDataSource } = useData();\n const [selectionCount, setSelectionCount] = useState(0);\n useLayoutEffectSkipFirst(() => {\n console.warn(\"[useEditableTable] columns and or table changed\");\n }, [columns, table]);\n\n const sourceDataSource = useMemo(() => {\n if (dataSourceProp) {\n return dataSourceProp;\n } else if (table) {\n return new VuuDataSource({ columns, table });\n } else {\n throw Error(\n \"useEditableTable unable to provide DataSource, neither dataSource nor table available as props\",\n );\n }\n }, [VuuDataSource, columns, dataSourceProp, table]);\n\n // The editSession will be made available to all the edit controls in scope\n // by wrapping the edit component with a DataEditingProvider.\n const editSession = useMemo(\n () => new EditSession(sourceDataSource as EditApi, deleteMode, editSessionApi),\n [deleteMode, editSessionApi, sourceDataSource],\n );\n const [lifecycle, setLifecycle] = useState<EditLifecycle>(\n editSession.lifecycle,\n );\n const [editState, setEditState] = useState<EditState>(editSession.editState);\n const [subscribedSessionDataSource, setSubscribedSessionDataSource] =\n useState<DataSource>();\n const onCancelRef = useRef(onCancel);\n onCancelRef.current = onCancel;\n\n const sessionDataSource =\n \"sessionDataSource\" in lifecycle ? lifecycle.sessionDataSource : undefined;\n const dataSource = sessionDataSource ?? sourceDataSource;\n\n const handleCancel = useCallback(async () => {\n try {\n await editSession.end();\n setSelectionCount(0);\n onCancel();\n } catch (error) {\n console.error(\"[useEditableTable] cancel edit session failed\", error);\n }\n }, [editSession, onCancel]);\n\n const handleSave = useCallback(\n async (force = false) => {\n try {\n await editSession.end(true, force);\n setSelectionCount(0);\n onSave();\n } catch (error) {\n console.error(\"[useEditableTable] save edit session failed\", error);\n }\n },\n [editSession, onSave],\n );\n\n const handleDelete = useCallback(async () => {\n await editSession.deleteSelectedRows();\n }, [editSession]);\n\n const handleUndoRowChange = useCallback(\n (key: string) => void editSession.undoRowChange(key),\n [editSession],\n );\n\n useEffect(() => {\n dataSource.on(\"row-selection\", setSelectionCount);\n return () => dataSource.removeListener(\"row-selection\", setSelectionCount);\n }, [dataSource]);\n\n useEffect(() => {\n if (!sessionDataSource) {\n setSubscribedSessionDataSource(undefined);\n return;\n }\n\n const handleSubscribed = () =>\n setSubscribedSessionDataSource(sessionDataSource);\n\n setSubscribedSessionDataSource(undefined);\n sessionDataSource.on(\"subscribed\", handleSubscribed);\n if (\n sessionDataSource.status === \"subscribed\" &&\n sessionDataSource.tableSchema\n ) {\n handleSubscribed();\n }\n\n return () =>\n sessionDataSource.removeListener(\"subscribed\", handleSubscribed);\n }, [sessionDataSource]);\n\n useEffect(() => {\n const handleEditState = (nextEditState: EditState) => {\n setEditState(nextEditState);\n };\n const handleLifecycle = (nextLifecycle: EditLifecycle) => {\n setLifecycle(nextLifecycle);\n };\n\n setEditState(editSession.editState);\n setLifecycle(editSession.lifecycle);\n editSession.on(\"editState\", handleEditState);\n editSession.on(\"lifecycle\", handleLifecycle);\n return () => {\n editSession.removeListener(\"editState\", handleEditState);\n editSession.removeListener(\"lifecycle\", handleLifecycle);\n };\n }, [editSession]);\n\n useEffect(() => {\n const transition = isEditMode\n ? editSession.begin(copyOption)\n : editSession.end();\n\n void transition.catch((error) => {\n if (isEditMode) {\n console.error(\"[useEditableTable] begin edit session failed\", error);\n onCancelRef.current();\n } else {\n console.error(\"[useEditableTable] end edit session failed\", error);\n }\n });\n }, [copyOption, editSession, isEditMode]);\n\n const canCancel =\n lifecycle.status === \"active\" ||\n (lifecycle.status === \"error\" && lifecycle.operation === \"end\");\n\n const canSave =\n canCancel &&\n (editState === \"dirty\" || editState === \"stale\") &&\n editSession.invalidCount === 0;\n const isEditSessionReady =\n isEditMode &&\n sessionDataSource !== undefined &&\n sessionDataSource === editSession.sessionDataSource &&\n subscribedSessionDataSource === sessionDataSource &&\n sessionDataSource.status === \"subscribed\" &&\n sessionDataSource.tableSchema !== undefined;\n\n return {\n canCancel,\n canSave,\n dataSource,\n editSession,\n lifecycle,\n hasSelection: selectionCount > 0,\n isEditSessionReady,\n onCancel: handleCancel,\n onDelete: handleDelete,\n onSave: handleSave,\n onUndoRowChange: handleUndoRowChange,\n rowClassNameGenerators: isEditMode\n ? EDIT_ACTION_ROW_CLASS_NAME_GENERATORS\n : undefined,\n sessionDataSource,\n sourceDataSource,\n };\n};\n"],"names":[],"mappings":";;;;;;AAkBA,MAAM,qCAAwC,GAAA;AAAA,EAC5C;AACF,CAAA;AAyBO,MAAM,mBAAmB,CAAC;AAAA,EAC/B,OAAA;AAAA,EACA,UAAY,EAAA,cAAA;AAAA,EACZ,UAAa,GAAA,MAAA;AAAA,EACb,cAAiB,GAAA,yBAAA;AAAA,EACjB,UAAa,GAAA,KAAA;AAAA,EACb,UAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAA8B,KAAA;AAC5B,EAAM,MAAA,EAAE,aAAc,EAAA,GAAI,OAAQ,EAAA;AAClC,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAS,CAAC,CAAA;AACtD,EAAA,wBAAA,CAAyB,MAAM;AAC7B,IAAA,OAAA,CAAQ,KAAK,iDAAiD,CAAA;AAAA,GAC7D,EAAA,CAAC,OAAS,EAAA,KAAK,CAAC,CAAA;AAEnB,EAAM,MAAA,gBAAA,GAAmB,QAAQ,MAAM;AACrC,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAO,OAAA,cAAA;AAAA,eACE,KAAO,EAAA;AAChB,MAAA,OAAO,IAAI,aAAA,CAAc,EAAE,OAAA,EAAS,OAAO,CAAA;AAAA,KACtC,MAAA;AACL,MAAM,MAAA,KAAA;AAAA,QACJ;AAAA,OACF;AAAA;AACF,KACC,CAAC,aAAA,EAAe,OAAS,EAAA,cAAA,EAAgB,KAAK,CAAC,CAAA;AAIlD,EAAA,MAAM,WAAc,GAAA,OAAA;AAAA,IAClB,MAAM,IAAI,WAAY,CAAA,gBAAA,EAA6B,YAAY,cAAc,CAAA;AAAA,IAC7E,CAAC,UAAY,EAAA,cAAA,EAAgB,gBAAgB;AAAA,GAC/C;AACA,EAAM,MAAA,CAAC,SAAW,EAAA,YAAY,CAAI,GAAA,QAAA;AAAA,IAChC,WAAY,CAAA;AAAA,GACd;AACA,EAAA,MAAM,CAAC,SAAW,EAAA,YAAY,CAAI,GAAA,QAAA,CAAoB,YAAY,SAAS,CAAA;AAC3E,EAAA,MAAM,CAAC,2BAAA,EAA6B,8BAA8B,CAAA,GAChE,QAAqB,EAAA;AACvB,EAAM,MAAA,WAAA,GAAc,OAAO,QAAQ,CAAA;AACnC,EAAA,WAAA,CAAY,OAAU,GAAA,QAAA;AAEtB,EAAA,MAAM,iBACJ,GAAA,mBAAA,IAAuB,SAAY,GAAA,SAAA,CAAU,iBAAoB,GAAA,KAAA,CAAA;AACnE,EAAA,MAAM,aAAa,iBAAqB,IAAA,gBAAA;AAExC,EAAM,MAAA,YAAA,GAAe,YAAY,YAAY;AAC3C,IAAI,IAAA;AACF,MAAA,MAAM,YAAY,GAAI,EAAA;AACtB,MAAA,iBAAA,CAAkB,CAAC,CAAA;AACnB,MAAS,QAAA,EAAA;AAAA,aACF,KAAO,EAAA;AACd,MAAQ,OAAA,CAAA,KAAA,CAAM,iDAAiD,KAAK,CAAA;AAAA;AACtE,GACC,EAAA,CAAC,WAAa,EAAA,QAAQ,CAAC,CAAA;AAE1B,EAAA,MAAM,UAAa,GAAA,WAAA;AAAA,IACjB,OAAO,QAAQ,KAAU,KAAA;AACvB,MAAI,IAAA;AACF,QAAM,MAAA,WAAA,CAAY,GAAI,CAAA,IAAA,EAAM,KAAK,CAAA;AACjC,QAAA,iBAAA,CAAkB,CAAC,CAAA;AACnB,QAAO,MAAA,EAAA;AAAA,eACA,KAAO,EAAA;AACd,QAAQ,OAAA,CAAA,KAAA,CAAM,+CAA+C,KAAK,CAAA;AAAA;AACpE,KACF;AAAA,IACA,CAAC,aAAa,MAAM;AAAA,GACtB;AAEA,EAAM,MAAA,YAAA,GAAe,YAAY,YAAY;AAC3C,IAAA,MAAM,YAAY,kBAAmB,EAAA;AAAA,GACvC,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,MAAM,mBAAsB,GAAA,WAAA;AAAA,IAC1B,CAAC,GAAA,KAAgB,KAAK,WAAA,CAAY,cAAc,GAAG,CAAA;AAAA,IACnD,CAAC,WAAW;AAAA,GACd;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAW,UAAA,CAAA,EAAA,CAAG,iBAAiB,iBAAiB,CAAA;AAChD,IAAA,OAAO,MAAM,UAAA,CAAW,cAAe,CAAA,eAAA,EAAiB,iBAAiB,CAAA;AAAA,GAC3E,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,iBAAmB,EAAA;AACtB,MAAA,8BAAA,CAA+B,KAAS,CAAA,CAAA;AACxC,MAAA;AAAA;AAGF,IAAM,MAAA,gBAAA,GAAmB,MACvB,8BAAA,CAA+B,iBAAiB,CAAA;AAElD,IAAA,8BAAA,CAA+B,KAAS,CAAA,CAAA;AACxC,IAAkB,iBAAA,CAAA,EAAA,CAAG,cAAc,gBAAgB,CAAA;AACnD,IAAA,IACE,iBAAkB,CAAA,MAAA,KAAW,YAC7B,IAAA,iBAAA,CAAkB,WAClB,EAAA;AACA,MAAiB,gBAAA,EAAA;AAAA;AAGnB,IAAA,OAAO,MACL,iBAAA,CAAkB,cAAe,CAAA,YAAA,EAAc,gBAAgB,CAAA;AAAA,GACnE,EAAG,CAAC,iBAAiB,CAAC,CAAA;AAEtB,EAAA,SAAA,CAAU,MAAM;AACd,IAAM,MAAA,eAAA,GAAkB,CAAC,aAA6B,KAAA;AACpD,MAAA,YAAA,CAAa,aAAa,CAAA;AAAA,KAC5B;AACA,IAAM,MAAA,eAAA,GAAkB,CAAC,aAAiC,KAAA;AACxD,MAAA,YAAA,CAAa,aAAa,CAAA;AAAA,KAC5B;AAEA,IAAA,YAAA,CAAa,YAAY,SAAS,CAAA;AAClC,IAAA,YAAA,CAAa,YAAY,SAAS,CAAA;AAClC,IAAY,WAAA,CAAA,EAAA,CAAG,aAAa,eAAe,CAAA;AAC3C,IAAY,WAAA,CAAA,EAAA,CAAG,aAAa,eAAe,CAAA;AAC3C,IAAA,OAAO,MAAM;AACX,MAAY,WAAA,CAAA,cAAA,CAAe,aAAa,eAAe,CAAA;AACvD,MAAY,WAAA,CAAA,cAAA,CAAe,aAAa,eAAe,CAAA;AAAA,KACzD;AAAA,GACF,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,aAAa,UACf,GAAA,WAAA,CAAY,MAAM,UAAU,CAAA,GAC5B,YAAY,GAAI,EAAA;AAEpB,IAAK,KAAA,UAAA,CAAW,KAAM,CAAA,CAAC,KAAU,KAAA;AAC/B,MAAA,IAAI,UAAY,EAAA;AACd,QAAQ,OAAA,CAAA,KAAA,CAAM,gDAAgD,KAAK,CAAA;AACnE,QAAA,WAAA,CAAY,OAAQ,EAAA;AAAA,OACf,MAAA;AACL,QAAQ,OAAA,CAAA,KAAA,CAAM,8CAA8C,KAAK,CAAA;AAAA;AACnE,KACD,CAAA;AAAA,GACA,EAAA,CAAC,UAAY,EAAA,WAAA,EAAa,UAAU,CAAC,CAAA;AAExC,EAAM,MAAA,SAAA,GACJ,UAAU,MAAW,KAAA,QAAA,IACpB,UAAU,MAAW,KAAA,OAAA,IAAW,UAAU,SAAc,KAAA,KAAA;AAE3D,EAAA,MAAM,UACJ,SACC,KAAA,SAAA,KAAc,WAAW,SAAc,KAAA,OAAA,CAAA,IACxC,YAAY,YAAiB,KAAA,CAAA;AAC/B,EAAA,MAAM,kBACJ,GAAA,UAAA,IACA,iBAAsB,KAAA,KAAA,CAAA,IACtB,iBAAsB,KAAA,WAAA,CAAY,iBAClC,IAAA,2BAAA,KAAgC,iBAChC,IAAA,iBAAA,CAAkB,MAAW,KAAA,YAAA,IAC7B,kBAAkB,WAAgB,KAAA,KAAA,CAAA;AAEpC,EAAO,OAAA;AAAA,IACL,SAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAc,cAAiB,GAAA,CAAA;AAAA,IAC/B,kBAAA;AAAA,IACA,QAAU,EAAA,YAAA;AAAA,IACV,QAAU,EAAA,YAAA;AAAA,IACV,MAAQ,EAAA,UAAA;AAAA,IACR,eAAiB,EAAA,mBAAA;AAAA,IACjB,sBAAA,EAAwB,aACpB,qCACA,GAAA,KAAA,CAAA;AAAA,IACJ,iBAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"useEditableTable.js","sources":["../../../packages/vuu-data-editing/src/useEditableTable.ts"],"sourcesContent":["import type {\n CopyOption,\n DataSource,\n DeleteRowMode,\n EditApi,\n} from \"@vuu-ui/vuu-data-types\";\nimport type { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { useData, useLayoutEffectSkipFirst } from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n EditSession,\n type EditLifecycle,\n type EditSessionApi,\n type EditState,\n} from \"./EditSession\";\nimport { EDIT_ACTION_ROW_CLASS_NAME_GENERATOR } from \"./editActionRowClassNameGenerator\";\n\nconst EDIT_ACTION_ROW_CLASS_NAME_GENERATORS = [\n EDIT_ACTION_ROW_CLASS_NAME_GENERATOR,\n];\n\nexport type EditMode = \"edit\" | \"view\";\n\nexport interface EditableTableHookProps {\n /**\n * columns to be included in subscription. If not provided,\n * default will be '*'. Ignored if dataSource prop present.\n */\n columns?: string[];\n dataSource?: DataSource;\n addRowsCount?: number;\n deleteMode?: DeleteRowMode;\n editSessionApi?: EditSessionApi;\n copyOption?: CopyOption;\n isEditMode: boolean;\n onCancel: () => void;\n onSave: () => void;\n /**\n * If dataSource not provided, new DataSource\n * will be created using table and columns\n */\n table?: VuuTable;\n}\n\nexport const useEditableTable = ({\n columns,\n dataSource: dataSourceProp,\n deleteMode = \"soft\",\n editSessionApi = \"createSessionDataSource\",\n copyOption = \"All\",\n isEditMode,\n onCancel,\n onSave,\n table,\n}: EditableTableHookProps) => {\n const { VuuDataSource } = useData();\n const [selectionCount, setSelectionCount] = useState(0);\n useLayoutEffectSkipFirst(() => {\n console.warn(\"[useEditableTable] columns and or table changed\");\n }, [columns, table]);\n\n const sourceDataSource = useMemo(() => {\n if (dataSourceProp) {\n return dataSourceProp;\n } else if (table) {\n return new VuuDataSource({ columns, table });\n } else {\n throw Error(\n \"useEditableTable unable to provide DataSource, neither dataSource nor table available as props\",\n );\n }\n }, [VuuDataSource, columns, dataSourceProp, table]);\n\n // The editSession will be made available to all the edit controls in scope\n // by wrapping the edit component with a DataEditingProvider.\n const editSession = useMemo(\n () => new EditSession(sourceDataSource as EditApi, deleteMode, editSessionApi),\n [deleteMode, editSessionApi, sourceDataSource],\n );\n const [lifecycle, setLifecycle] = useState<EditLifecycle>(\n editSession.lifecycle,\n );\n const [editState, setEditState] = useState<EditState>(editSession.editState);\n const [subscribedSessionDataSource, setSubscribedSessionDataSource] =\n useState<DataSource>();\n const onCancelRef = useRef(onCancel);\n onCancelRef.current = onCancel;\n\n const sessionDataSource =\n \"sessionDataSource\" in lifecycle ? lifecycle.sessionDataSource : undefined;\n const dataSource = sessionDataSource ?? sourceDataSource;\n\n const handleCancel = useCallback(async () => {\n try {\n await editSession.end();\n setSelectionCount(0);\n onCancel();\n } catch (error) {\n console.error(\"[useEditableTable] cancel edit session failed\", error);\n }\n }, [editSession, onCancel]);\n\n const handleSave = useCallback(\n async (force = false) => {\n try {\n await editSession.end(true, force);\n setSelectionCount(0);\n onSave();\n } catch (error) {\n console.error(\"[useEditableTable] save edit session failed\", error);\n }\n },\n [editSession, onSave],\n );\n\n const handleDelete = useCallback(async () => {\n await editSession.deleteSelectedRows();\n }, [editSession]);\n\n const handleUndoRowChange = useCallback(\n (key: string) => void editSession.undoRowChange(key),\n [editSession],\n );\n\n useEffect(() => {\n dataSource.on(\"row-selection\", setSelectionCount);\n return () => dataSource.removeListener(\"row-selection\", setSelectionCount);\n }, [dataSource]);\n\n useEffect(() => {\n if (!sessionDataSource) {\n setSubscribedSessionDataSource(undefined);\n return;\n }\n\n const handleSubscribed = () =>\n setSubscribedSessionDataSource(sessionDataSource);\n\n setSubscribedSessionDataSource(undefined);\n sessionDataSource.on(\"subscribed\", handleSubscribed);\n if (\n sessionDataSource.status === \"subscribed\" &&\n sessionDataSource.tableSchema\n ) {\n handleSubscribed();\n }\n\n return () =>\n sessionDataSource.removeListener(\"subscribed\", handleSubscribed);\n }, [sessionDataSource]);\n\n useEffect(() => {\n const handleEditState = (nextEditState: EditState) => {\n setEditState(nextEditState);\n };\n const handleLifecycle = (nextLifecycle: EditLifecycle) => {\n setLifecycle(nextLifecycle);\n };\n\n setEditState(editSession.editState);\n setLifecycle(editSession.lifecycle);\n editSession.on(\"editState\", handleEditState);\n editSession.on(\"lifecycle\", handleLifecycle);\n return () => {\n editSession.removeListener(\"editState\", handleEditState);\n editSession.removeListener(\"lifecycle\", handleLifecycle);\n };\n }, [editSession]);\n\n useEffect(() => {\n const transition = isEditMode\n ? editSession.begin(copyOption)\n : editSession.end();\n\n void transition.catch((error) => {\n if (isEditMode) {\n console.error(\"[useEditableTable] begin edit session failed\", error);\n onCancelRef.current();\n } else {\n console.error(\"[useEditableTable] end edit session failed\", error);\n }\n });\n }, [copyOption, editSession, isEditMode]);\n\n const canCancel =\n lifecycle.status === \"active\" ||\n (lifecycle.status === \"error\" && lifecycle.operation === \"end\");\n\n const canSave =\n canCancel &&\n (editState === \"dirty\" || editState === \"stale\") &&\n editSession.invalidCount === 0;\n const isEditSessionReady =\n isEditMode &&\n sessionDataSource !== undefined &&\n sessionDataSource === editSession.sessionDataSource &&\n subscribedSessionDataSource === sessionDataSource &&\n sessionDataSource.status === \"subscribed\" &&\n sessionDataSource.tableSchema !== undefined;\n\n return {\n canCancel,\n canSave,\n dataSource,\n editSession,\n lifecycle,\n hasSelection: selectionCount > 0,\n isEditSessionReady,\n onCancel: handleCancel,\n onDelete: handleDelete,\n onSave: handleSave,\n onUndoRowChange: handleUndoRowChange,\n rowClassNameGenerators: isEditMode\n ? EDIT_ACTION_ROW_CLASS_NAME_GENERATORS\n : undefined,\n sessionDataSource,\n sourceDataSource,\n };\n};\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "3.0.0-beta.
|
|
2
|
+
"version": "3.0.0-beta.2",
|
|
3
3
|
"description": "Shared data editing APIs and React components for VUU UI",
|
|
4
4
|
"author": "heswell",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"dependencies": {
|
|
8
8
|
"@salt-ds/core": "1.54.1",
|
|
9
|
-
"@vuu-ui/vuu-ui-controls": "3.0.0-beta.
|
|
10
|
-
"@vuu-ui/vuu-utils": "3.0.0-beta.
|
|
11
|
-
"@vuu-ui/vuu-utils2": "3.0.0-beta.1"
|
|
9
|
+
"@vuu-ui/vuu-ui-controls": "3.0.0-beta.2",
|
|
10
|
+
"@vuu-ui/vuu-utils": "3.0.0-beta.2"
|
|
12
11
|
},
|
|
13
12
|
"devDependencies": {
|
|
14
|
-
"@vuu-ui/vuu-data-types": "3.0.0-beta.
|
|
15
|
-
"@vuu-ui/vuu-protocol-types": "3.0.0-beta.
|
|
16
|
-
"@vuu-ui/vuu-table-types": "3.0.0-beta.
|
|
13
|
+
"@vuu-ui/vuu-data-types": "3.0.0-beta.2",
|
|
14
|
+
"@vuu-ui/vuu-protocol-types": "3.0.0-beta.2",
|
|
15
|
+
"@vuu-ui/vuu-table-types": "3.0.0-beta.2"
|
|
17
16
|
},
|
|
18
17
|
"peerDependencies": {
|
|
19
18
|
"react": "^19.2.3"
|
package/types/edit-utils.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { DataRow, RuntimeColumnDescriptor } from "@vuu-ui/vuu-table-types";
|
|
2
|
-
export { isInlineEditingSession } from "@vuu-ui/vuu-
|
|
2
|
+
export { isInlineEditingSession } from "@vuu-ui/vuu-utils";
|
|
3
3
|
export declare const isEditRowReadOnly: (dataRow: DataRow) => boolean;
|
|
4
4
|
export declare const withDataRowEditErrors: <T extends DataRow>(dataRow: T, errors: Record<string, string>) => T;
|
|
5
5
|
export declare const getVuuEditMessage: (dataRow: DataRow, column: RuntimeColumnDescriptor, originalValue: string) => string | import("react/jsx-runtime").JSX.Element | undefined;
|
package/types/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ export { getVuuEditMessage, isInlineEditingSession, isEditRowReadOnly, withDataR
|
|
|
4
4
|
export { EditButtons, type EditButtonProps } from "./EditButtons";
|
|
5
5
|
export { EditModeProvider, useEditMode, type EditModeContextProps, } from "./EditModeProvider";
|
|
6
6
|
export { EditError, EditSession, SupersededEditError, type EditLifecycle, type NewRowState, type EditState, } from "./EditSession";
|
|
7
|
-
export { StaleUpdateError } from "@vuu-ui/vuu-
|
|
7
|
+
export { StaleUpdateError } from "@vuu-ui/vuu-utils";
|
|
8
8
|
export { EDIT_ACTION_ROW_CLASS_NAME_GENERATOR, editActionRowClassNameGenerator, } from "./editActionRowClassNameGenerator";
|
|
9
9
|
export { getUndoButtonContent, getUndoTooltipContent, UNDO_CELL_RENDERER, UndoCellRenderer, type UndoCellRendererComponentProps, } from "./UndoCellRenderer";
|
|
10
10
|
export { useEditableTable, type EditableTableHookProps, type EditMode, } from "./useEditableTable";
|