|
|
@ -45,6 +45,7 @@ import { NcError } from '~/helpers/catchError'; |
|
|
|
import getAst from '~/helpers/getAst'; |
|
|
|
import getAst from '~/helpers/getAst'; |
|
|
|
import { |
|
|
|
import { |
|
|
|
Audit, |
|
|
|
Audit, |
|
|
|
|
|
|
|
BaseUser, |
|
|
|
Column, |
|
|
|
Column, |
|
|
|
Filter, |
|
|
|
Filter, |
|
|
|
Model, |
|
|
|
Model, |
|
|
@ -4554,69 +4555,49 @@ class BaseModelSqlv2 { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (userColumns.length) { |
|
|
|
if (userColumns.length) { |
|
|
|
|
|
|
|
const baseUsers = await BaseUser.getUsersList({ |
|
|
|
|
|
|
|
base_id: childTable ? childTable.base_id : this.model.base_id, |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
if (Array.isArray(data)) { |
|
|
|
if (Array.isArray(data)) { |
|
|
|
data = await Promise.all( |
|
|
|
data = await Promise.all( |
|
|
|
data.map((d) => this._convertUserFormat(userColumns, d)), |
|
|
|
data.map((d) => this._convertUserFormat(userColumns, baseUsers, d)), |
|
|
|
); |
|
|
|
); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
data = await this._convertUserFormat(userColumns, data); |
|
|
|
data = await this._convertUserFormat(userColumns, baseUsers, data); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return data; |
|
|
|
return data; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
protected async _convertUserFormat( |
|
|
|
protected _convertUserFormat( |
|
|
|
userColumns: Record<string, any>[], |
|
|
|
userColumns: Record<string, any>[], |
|
|
|
|
|
|
|
baseUsers: Partial<User>[], |
|
|
|
d: Record<string, any>, |
|
|
|
d: Record<string, any>, |
|
|
|
) { |
|
|
|
) { |
|
|
|
try { |
|
|
|
try { |
|
|
|
if (d) { |
|
|
|
if (d) { |
|
|
|
const promises = []; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (const col of userColumns) { |
|
|
|
for (const col of userColumns) { |
|
|
|
// we expect array of string of comma separated user ids in case of lookup
|
|
|
|
if (d[col.id] && d[col.id].length) { |
|
|
|
if (Array.isArray(d[col.id])) { |
|
|
|
d[col.id] = d[col.id].split(','); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
if (d[col.id] && d[col.id].length) { |
|
|
|
d[col.id] = null; |
|
|
|
d[col.id] = d[col.id].split(','); |
|
|
|
} |
|
|
|
} else { |
|
|
|
|
|
|
|
d[col.id] = []; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (d[col.id]?.length) { |
|
|
|
if (d[col.id]?.length) { |
|
|
|
promises.push( |
|
|
|
d[col.id] = d[col.id].map((fid) => { |
|
|
|
new Promise((resolve) => { |
|
|
|
const { id, email, display_name } = baseUsers.find( |
|
|
|
const users = []; |
|
|
|
(u) => u.id === fid, |
|
|
|
for (const userId of d[col.id]) { |
|
|
|
|
|
|
|
users.push( |
|
|
|
|
|
|
|
User.get(userId) |
|
|
|
|
|
|
|
.then((user) => { |
|
|
|
|
|
|
|
const { id, email, display_name } = user; |
|
|
|
|
|
|
|
return { |
|
|
|
|
|
|
|
id, |
|
|
|
|
|
|
|
email, |
|
|
|
|
|
|
|
display_name: display_name?.length |
|
|
|
|
|
|
|
? display_name |
|
|
|
|
|
|
|
: null, |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
.catch((e) => { |
|
|
|
|
|
|
|
console.log(e); |
|
|
|
|
|
|
|
return null; |
|
|
|
|
|
|
|
}), |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
Promise.all(users).then((users) => { |
|
|
|
|
|
|
|
d[col.id] = users; |
|
|
|
|
|
|
|
resolve(true); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
}), |
|
|
|
|
|
|
|
); |
|
|
|
); |
|
|
|
} |
|
|
|
return { |
|
|
|
|
|
|
|
id, |
|
|
|
|
|
|
|
email, |
|
|
|
|
|
|
|
display_name: display_name?.length ? display_name : null, |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
await Promise.all(promises); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} catch {} |
|
|
|
} catch {} |
|
|
|
return d; |
|
|
|
return d; |
|
|
@ -5492,6 +5473,10 @@ class BaseModelSqlv2 { |
|
|
|
} catch (e) {} |
|
|
|
} catch (e) {} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const baseUsers = await BaseUser.getUsersList({ |
|
|
|
|
|
|
|
base_id: this.model.base_id, |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
if (typeof data[column.column_name] === 'string') { |
|
|
|
if (typeof data[column.column_name] === 'string') { |
|
|
|
const users = data[column.column_name] |
|
|
|
const users = data[column.column_name] |
|
|
|
.split(',') |
|
|
|
.split(',') |
|
|
@ -5499,13 +5484,13 @@ class BaseModelSqlv2 { |
|
|
|
for (const user of users) { |
|
|
|
for (const user of users) { |
|
|
|
try { |
|
|
|
try { |
|
|
|
if (user.includes('@')) { |
|
|
|
if (user.includes('@')) { |
|
|
|
const u = await User.getByEmail(user); |
|
|
|
const u = baseUsers.find((u) => u.email === user); |
|
|
|
if (!u) { |
|
|
|
if (!u) { |
|
|
|
throw new Error(`User with email '${user}' not found`); |
|
|
|
throw new Error(`User with email '${user}' not found`); |
|
|
|
} |
|
|
|
} |
|
|
|
userIds.push(u.id); |
|
|
|
userIds.push(u.id); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
const u = await User.get(user); |
|
|
|
const u = baseUsers.find((u) => u.id === user); |
|
|
|
if (!u) { |
|
|
|
if (!u) { |
|
|
|
throw new Error(`User with id '${user}' not found`); |
|
|
|
throw new Error(`User with id '${user}' not found`); |
|
|
|
} |
|
|
|
} |
|
|
@ -5525,13 +5510,13 @@ class BaseModelSqlv2 { |
|
|
|
const user = extractProps(userObj, ['id', 'email']); |
|
|
|
const user = extractProps(userObj, ['id', 'email']); |
|
|
|
try { |
|
|
|
try { |
|
|
|
if (user.id) { |
|
|
|
if (user.id) { |
|
|
|
const u = await User.get(user.id); |
|
|
|
const u = baseUsers.find((u) => u.id === user.id); |
|
|
|
if (!u) { |
|
|
|
if (!u) { |
|
|
|
throw new Error(`User with id '${user.id}' not found`); |
|
|
|
throw new Error(`User with id '${user.id}' not found`); |
|
|
|
} |
|
|
|
} |
|
|
|
userIds.push(u.id); |
|
|
|
userIds.push(u.id); |
|
|
|
} else if (user.email) { |
|
|
|
} else if (user.email) { |
|
|
|
const u = await User.getByEmail(user.email); |
|
|
|
const u = baseUsers.find((u) => u.email === user.email); |
|
|
|
if (!u) { |
|
|
|
if (!u) { |
|
|
|
throw new Error( |
|
|
|
throw new Error( |
|
|
|
`User with email '${user.email}' not found`, |
|
|
|
`User with email '${user.email}' not found`, |
|
|
|