diff --git a/packages/nc-gui/components/account/UserMenu.vue b/packages/nc-gui/components/account/UserMenu.vue index 7fb5e180aa..f125eeae3b 100644 --- a/packages/nc-gui/components/account/UserMenu.vue +++ b/packages/nc-gui/components/account/UserMenu.vue @@ -4,7 +4,7 @@ import type { UsersSortType } from '~/lib' const { field, direction, handleUserSort } = defineProps<{ field: UsersSortType['field'] - direction?: UsersSortType['direction'] + direction: UsersSortType['direction'] handleUserSort: Function }>() diff --git a/packages/nc-gui/components/project/AccessSettings.vue b/packages/nc-gui/components/project/AccessSettings.vue index 67290d9da1..9070a744c2 100644 --- a/packages/nc-gui/components/project/AccessSettings.vue +++ b/packages/nc-gui/components/project/AccessSettings.vue @@ -156,7 +156,7 @@ onMounted(async () => { v-else-if="!filteredCollaborators?.length" class="nc-collaborators-list w-full h-full flex flex-col items-center justify-center mt-36" > - +
diff --git a/packages/nc-gui/components/smartsheet/grid/Table.vue b/packages/nc-gui/components/smartsheet/grid/Table.vue index d2c6704c41..379065f7ca 100644 --- a/packages/nc-gui/components/smartsheet/grid/Table.vue +++ b/packages/nc-gui/components/smartsheet/grid/Table.vue @@ -1732,7 +1732,7 @@ onKeyStroke('ArrowDown', onDown) v-if="contextMenuTarget && hasEditPermission" class="nc-base-menu-item" data-testid="context-menu-item-paste" - :disabled="!!isSystemColumn(fields[contextMenuTarget.col])" + :disabled="isSystemColumn(fields[contextMenuTarget.col])" @click="paste" >
@@ -1751,7 +1751,7 @@ onKeyStroke('ArrowDown', onDown) (isLinksOrLTAR(fields[contextMenuTarget.col]) || !isVirtualCol(fields[contextMenuTarget.col])) " class="nc-base-menu-item" - :disabled="!!isSystemColumn(fields[contextMenuTarget.col])" + :disabled="isSystemColumn(fields[contextMenuTarget.col])" data-testid="context-menu-item-clear" @click="clearCell(contextMenuTarget)" > @@ -1765,7 +1765,7 @@ onKeyStroke('ArrowDown', onDown) diff --git a/packages/nc-gui/composables/useMultiSelect/convertCellData.ts b/packages/nc-gui/composables/useMultiSelect/convertCellData.ts index bf2e52933e..28da5af27e 100644 --- a/packages/nc-gui/composables/useMultiSelect/convertCellData.ts +++ b/packages/nc-gui/composables/useMultiSelect/convertCellData.ts @@ -182,7 +182,13 @@ export default function convertCellData( attachments.push(attachment) } - return attachments.length ? (value ? JSON.stringify(attachments) : files ? attachments : null) : null + if (value && attachments.length) { + return JSON.stringify(attachments) + } else if (files && attachments.length) { + return attachments + } else { + return null + } } case UITypes.SingleSelect: case UITypes.MultiSelect: { diff --git a/packages/nc-gui/composables/useMultiSelect/index.ts b/packages/nc-gui/composables/useMultiSelect/index.ts index 50dbd4fa29..9dea1fab90 100644 --- a/packages/nc-gui/composables/useMultiSelect/index.ts +++ b/packages/nc-gui/composables/useMultiSelect/index.ts @@ -912,24 +912,27 @@ export function useMultiSelect( const rows = unref(data).slice(startRow, endRow + 1) const props = [] - if (e.clipboardData?.files?.length) { - let pasteValue - for (const row of rows) { - // TODO handle insert new row - if (!row || row.rowMeta.new) continue - - for (const col of cols) { - if (!col.title || !isPasteable(row, col) || col.uidt !== UITypes.Attachment) { + let pasteValue + const files = e.clipboardData?.files + for (const row of rows) { + // TODO handle insert new row + if (!row || row.rowMeta.new) continue + + for (const col of cols) { + if (!col.title || !isPasteable(row, col)) { + continue + } + + if (files?.length) { + if (col.uidt !== UITypes.Attachment) { continue } - props.push(col.title) - if (pasteValue === undefined) { const fileUploadPayload = convertCellData( { value: '', - files: e.clipboardData?.files, + files: files, to: col.uidt as UITypes, column: col, appInfo: unref(appInfo), @@ -943,27 +946,8 @@ export function useMultiSelect( pasteValue = Array.isArray(uploadedFiles) && uploadedFiles.length ? JSON.stringify(uploadedFiles) : null } } - - if (pasteValue !== undefined) { - row.row[col.title] = pasteValue - } - } - } - } else { - for (const row of rows) { - // TODO handle insert new row - if (!row || row.rowMeta.new) continue - - for (const col of cols) { - if (!col.title) continue - - if (!isPasteable(row, col)) { - continue - } - - props.push(col.title) - - const pasteValue = convertCellData( + } else { + pasteValue = convertCellData( { value: clipboardData, to: col.uidt as UITypes, @@ -973,13 +957,16 @@ export function useMultiSelect( isMysql(meta.value?.source_id), true, ) + } - if (pasteValue !== undefined) { - row.row[col.title] = pasteValue - } + props.push(col.title) + + if (pasteValue !== undefined) { + row.row[col.title] = pasteValue } } } + if (!props.length) return await bulkUpdateRows?.(rows, props) } diff --git a/packages/nocodb-sdk/src/lib/helperFunctions.ts b/packages/nocodb-sdk/src/lib/helperFunctions.ts index decd5bc7f7..527e479af6 100644 --- a/packages/nocodb-sdk/src/lib/helperFunctions.ts +++ b/packages/nocodb-sdk/src/lib/helperFunctions.ts @@ -14,13 +14,15 @@ const getSystemColumnsIds = (columns) => { const getSystemColumns = (columns) => columns.filter(isSystemColumn) || []; const isSystemColumn = (col): boolean => - col && - (col.uidt === UITypes.ForeignKey || - ((col.column_name === 'created_at' || col.column_name === 'updated_at') && - col.uidt === UITypes.DateTime) || - (col.pk && (col.ai || col.cdf)) || - (col.pk && col.meta && col.meta.ag) || - col.system); + !!( + col && + (col.uidt === UITypes.ForeignKey || + ((col.column_name === 'created_at' || col.column_name === 'updated_at') && + col.uidt === UITypes.DateTime) || + (col.pk && (col.ai || col.cdf)) || + (col.pk && col.meta && col.meta.ag) || + col.system) + ); const isSelfReferencingTableColumn = (col): boolean => { return (