Browse Source

feat: copy & paste user field

pull/7202/head
mertmit 10 months ago
parent
commit
1e694f1d02
  1. 3
      packages/nc-gui/composables/useData.ts
  2. 18
      packages/nc-gui/composables/useMultiSelect/convertCellData.ts
  3. 10
      packages/nc-gui/composables/useMultiSelect/index.ts
  4. 11
      packages/nocodb/src/db/BaseModelSqlv2.ts

3
packages/nc-gui/composables/useData.ts

@ -241,6 +241,7 @@ export function useData(args: {
col.uidt === UITypes.Barcode ||
col.uidt === UITypes.Rollup ||
col.uidt === UITypes.Checkbox ||
col.uidt === UITypes.User ||
col.au ||
col.cdf?.includes(' on update ')
)
@ -387,6 +388,8 @@ export function useData(args: {
col.uidt === UITypes.QrCode ||
col.uidt === UITypes.Barcode ||
col.uidt === UITypes.Rollup ||
col.uidt === UITypes.Checkbox ||
col.uidt === UITypes.User ||
col.au ||
col.cdf?.includes(' on update ')
)

18
packages/nc-gui/composables/useMultiSelect/convertCellData.ts

@ -195,6 +195,24 @@ export default function convertCellData(
return validVals.join(',')
}
case UITypes.User: {
let parsedVal
try {
try {
parsedVal = typeof value === 'string' ? JSON.parse(value) : value
} catch {
parsedVal = null
}
} catch (e) {
if (isMultiple) {
return null
} else {
throw new Error('Invalid user data')
}
}
return parsedVal || value
}
case UITypes.LinkToAnotherRecord:
case UITypes.Lookup:
case UITypes.Rollup:

10
packages/nc-gui/composables/useMultiSelect/index.ts

@ -112,6 +112,16 @@ export function useMultiSelect(
textToCopy = !!textToCopy
}
if (columnObj.uidt === UITypes.User) {
if (textToCopy && Array.isArray(textToCopy)) {
textToCopy = textToCopy
.map((user: { id: string; email: string; display_name: string }) => {
return user.email
})
.join(', ')
}
}
if (typeof textToCopy === 'object') {
textToCopy = JSON.stringify(textToCopy)
} else {

11
packages/nocodb/src/db/BaseModelSqlv2.ts

@ -5483,8 +5483,17 @@ class BaseModelSqlv2 {
} else if (column.uidt === UITypes.User) {
if (data[column.column_name]) {
const userIds = [];
if (typeof data[column.column_name] === 'string') {
try {
data[column.column_name] = JSON.parse(data[column.column_name]);
} catch (e) {}
}
if (typeof data[column.column_name] === 'string') {
const users = data[column.column_name].split(',');
const users = data[column.column_name]
.split(',')
.map((u) => u.trim());
for (const user of users) {
try {
if (user.includes('@')) {

Loading…
Cancel
Save