diff --git a/packages/nc-gui/composables/useData.ts b/packages/nc-gui/composables/useData.ts index 7abdb63833..c7afe11002 100644 --- a/packages/nc-gui/composables/useData.ts +++ b/packages/nc-gui/composables/useData.ts @@ -1,5 +1,5 @@ import type { ColumnType, LinkToAnotherRecordType, PaginatedType, RelationTypes, TableType, ViewType } from 'nocodb-sdk' -import { UITypes, isCreatedOrLastModifiedTimeCol } from 'nocodb-sdk' +import { UITypes, isCreatedOrLastModifiedByCol, isCreatedOrLastModifiedTimeCol } from 'nocodb-sdk' import type { ComputedRef, Ref } from 'vue' import { NOCO, @@ -163,17 +163,14 @@ export function useData(args: { { metaValue = meta.value, viewMetaValue = viewMeta.value }: { metaValue?: TableType; viewMetaValue?: ViewType } = {}, undo = false, ) { - let rowsToInsert = [] - isPaginationLoading.value = true - // Todo: use isCreatedOrLastModifiedByCol insted of hardcoded values once upgrader is ready for oss const autoGeneratedKeys = clone(metaValue?.columns || []) - .filter((c) => !c.pk && (isCreatedOrLastModifiedTimeCol(c) || c.uidt === 'CreatedBy' || c.uidt === 'LastModifiedBy')) + .filter((c) => !c.pk && (isCreatedOrLastModifiedTimeCol(c) || isCreatedOrLastModifiedByCol(c))) .map((c) => c.title) try { - rowsToInsert = + const rowsToInsert = ( await Promise.all( rows.map(async (currentRow) => { @@ -620,7 +617,7 @@ export function useData(args: { async function deleteSelectedRows() { let row = formattedData.value.length let removedRowsData: Record[] = [] - let pk = '' + let compositePrimaryKey = '' while (row--) { const { row: rowObj, rowMeta } = formattedData.value[row] as Record @@ -628,13 +625,17 @@ export function useData(args: { continue } if (!rowMeta.new) { - const primaryKey = extractPk(meta?.value?.columns as ColumnType[]) - const pkValue = extractPkFromRow(rowObj, meta?.value?.columns as ColumnType[]) + const extractedPk = extractPk(meta?.value?.columns as ColumnType[]) + const compositePkValue = extractPkFromRow(rowObj, meta?.value?.columns as ColumnType[]) - if (primaryKey && pkValue) { - if (!pk) pk = primaryKey + if (extractedPk && compositePkValue) { + if (!compositePrimaryKey) compositePrimaryKey = extractedPk - removedRowsData.push({ [pk]: pkValue as string, row: clone(formattedData.value[row]) as Row, rowIndex: row as number }) + removedRowsData.push({ + [compositePrimaryKey]: compositePkValue as string, + row: clone(formattedData.value[row]) as Row, + rowIndex: row as number, + }) } } } @@ -643,13 +644,13 @@ export function useData(args: { try { const removedRowIds: Record[] = await bulkDeleteRows( - removedRowsData.map((row) => ({ [pk]: row[pk] as string })), + removedRowsData.map((row) => ({ [compositePrimaryKey]: row[compositePrimaryKey] as string })), ) if (Array.isArray(removedRowIds)) { - const removedRowsDataSet = new Set(removedRowIds.map((row) => row[pk])) + const removedRowsDataSet = new Set(removedRowIds.map((row) => row[compositePrimaryKey])) - removedRowsData = removedRowsData.filter((row) => removedRowsDataSet.has(row[pk] as string)) + removedRowsData = removedRowsData.filter((row) => removedRowsDataSet.has(row[compositePrimaryKey] as string)) const rowIndexesSet = new Set(removedRowsData.map((row) => row.rowIndex)) formattedData.value = formattedData.value.filter((_, index) => rowIndexesSet.has(index)) @@ -664,13 +665,15 @@ export function useData(args: { addUndo({ redo: { - fn: async function redo(this: UndoRedoAction, removedRowsData: Record[], pk: string) { - const removedRowIds = await bulkDeleteRows(removedRowsData.map((row) => ({ [pk]: row[pk] as string }))) + fn: async function redo(this: UndoRedoAction, removedRowsData: Record[], compositePrimaryKey: string) { + const removedRowIds = await bulkDeleteRows( + removedRowsData.map((row) => ({ [compositePrimaryKey]: row[compositePrimaryKey] as string })), + ) if (Array.isArray(removedRowIds)) { for (const { row } of removedRowsData) { - const pk: Record = rowPkData(row.row, meta?.value?.columns as ColumnType[]) - const rowIndex = findIndexByPk(pk, formattedData.value) + const primaryKey: Record = rowPkData(row.row, meta?.value?.columns as ColumnType[]) + const rowIndex = findIndexByPk(primaryKey, formattedData.value) if (rowIndex !== -1) formattedData.value.splice(rowIndex, 1) paginationData.value.totalRows = paginationData.value.totalRows! - 1 } @@ -678,7 +681,7 @@ export function useData(args: { await callbacks?.syncPagination?.() }, - args: [removedRowsData, pk], + args: [removedRowsData, compositePrimaryKey], }, undo: { fn: async function undo( @@ -735,21 +738,21 @@ export function useData(args: { let row = start + 1 let removedRowsData: Record[] = [] - let pk = '' + let compositePrimaryKey = '' while (row--) { try { const { row: rowObj, rowMeta } = formattedData.value[row] as Record if (!rowMeta.new) { - const primaryKey = extractPk(meta?.value?.columns as ColumnType[]) - const pkValue = extractPkFromRow(rowObj, meta?.value?.columns as ColumnType[]) + const extractedPk = extractPk(meta?.value?.columns as ColumnType[]) + const compositePkValue = extractPkFromRow(rowObj, meta?.value?.columns as ColumnType[]) - if (primaryKey && pkValue) { - if (!pk) pk = primaryKey + if (extractedPk && compositePkValue) { + if (!compositePrimaryKey) compositePrimaryKey = extractedPk removedRowsData.push({ - [pk]: pkValue as string, + [compositePrimaryKey]: compositePkValue as string, row: clone(formattedData.value[row]) as Row, rowIndex: row as number, }) @@ -766,13 +769,13 @@ export function useData(args: { try { const removedRowIds: Record[] = await bulkDeleteRows( - removedRowsData.map((row) => ({ [pk]: row[pk] as string })), + removedRowsData.map((row) => ({ [compositePrimaryKey]: row[compositePrimaryKey] as string })), ) if (Array.isArray(removedRowIds)) { - const removedRowsDataSet = new Set(removedRowIds.map((row) => row[pk])) + const removedRowsDataSet = new Set(removedRowIds.map((row) => row[compositePrimaryKey])) - removedRowsData = removedRowsData.filter((row) => removedRowsDataSet.has(row[pk] as string)) + removedRowsData = removedRowsData.filter((row) => removedRowsDataSet.has(row[compositePrimaryKey] as string)) const rowIndexesSet = new Set(removedRowsData.map((row) => row.rowIndex)) formattedData.value = formattedData.value.filter((_, index) => rowIndexesSet.has(index)) @@ -787,13 +790,13 @@ export function useData(args: { addUndo({ redo: { - fn: async function redo(this: UndoRedoAction, removedRowsData: Record[], pk: string) { - const removedRowIds = await bulkDeleteRows(removedRowsData.map((row) => ({ [pk]: row[pk] as string }))) + fn: async function redo(this: UndoRedoAction, removedRowsData: Record[], compositePrimaryKey: string) { + const removedRowIds = await bulkDeleteRows(removedRowsData.map((row) => ({ [compositePrimaryKey]: row[compositePrimaryKey] as string }))) if (Array.isArray(removedRowIds)) { for (const { row } of removedRowsData) { - const pk: Record = rowPkData(row.row, meta?.value?.columns as ColumnType[]) - const rowIndex = findIndexByPk(pk, formattedData.value) + const primaryKey: Record = rowPkData(row.row, meta?.value?.columns as ColumnType[]) + const rowIndex = findIndexByPk(primaryKey, formattedData.value) if (rowIndex !== -1) formattedData.value.splice(rowIndex, 1) paginationData.value.totalRows = paginationData.value.totalRows! - 1 } @@ -801,7 +804,7 @@ export function useData(args: { await callbacks?.syncPagination?.() }, - args: [removedRowsData, pk], + args: [removedRowsData, compositePrimaryKey], }, undo: { fn: async function undo(