|
|
|
@ -1,6 +1,6 @@
|
|
|
|
|
import { Injectable } from '@nestjs/common'; |
|
|
|
|
import { type UserType, ViewTypes } from 'nocodb-sdk'; |
|
|
|
|
import { Base } from '~/models'; |
|
|
|
|
import { BaseUser } from '~/models'; |
|
|
|
|
import { TablesService } from '~/services/tables.service'; |
|
|
|
|
import { deserializeJSON } from '~/utils/serialize'; |
|
|
|
|
|
|
|
|
@ -20,95 +20,73 @@ export class CommandPaletteService {
|
|
|
|
|
async commandPalette(param: { body: any; user: UserType }) { |
|
|
|
|
const cmdData = []; |
|
|
|
|
try { |
|
|
|
|
const { scope } = param.body; |
|
|
|
|
const allBases = []; |
|
|
|
|
|
|
|
|
|
if (scope === 'root') { |
|
|
|
|
const bases = await Base.list({ user: param.user }); |
|
|
|
|
const bases = await BaseUser.getProjectsList(param.user.id, param); |
|
|
|
|
|
|
|
|
|
for (const base of bases) { |
|
|
|
|
cmdData.push({ |
|
|
|
|
id: `p-${base.id}`, |
|
|
|
|
title: base.title, |
|
|
|
|
icon: 'project', |
|
|
|
|
iconColor: deserializeJSON(base.meta)?.iconColor, |
|
|
|
|
section: 'Bases', |
|
|
|
|
scopePayload: { |
|
|
|
|
scope: `p-${base.id}`, |
|
|
|
|
data: { |
|
|
|
|
base_id: base.id, |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
} else if (scope.startsWith('p-')) { |
|
|
|
|
const allBases = []; |
|
|
|
|
|
|
|
|
|
const bases = await Base.list({ user: param.user }); |
|
|
|
|
allBases.push(...bases); |
|
|
|
|
|
|
|
|
|
allBases.push(...bases); |
|
|
|
|
const viewList = []; |
|
|
|
|
|
|
|
|
|
const viewList = []; |
|
|
|
|
|
|
|
|
|
for (const base of bases) { |
|
|
|
|
viewList.push( |
|
|
|
|
...( |
|
|
|
|
(await this.tablesService.xcVisibilityMetaGet( |
|
|
|
|
base.id, |
|
|
|
|
null, |
|
|
|
|
false, |
|
|
|
|
)) as any[] |
|
|
|
|
).filter((v) => { |
|
|
|
|
return Object.keys(param.user.roles).some( |
|
|
|
|
(role) => param.user.roles[role] && !v.disabled[role], |
|
|
|
|
); |
|
|
|
|
}), |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
for (const base of bases) { |
|
|
|
|
viewList.push( |
|
|
|
|
...( |
|
|
|
|
(await this.tablesService.xcVisibilityMetaGet( |
|
|
|
|
base.id, |
|
|
|
|
null, |
|
|
|
|
false, |
|
|
|
|
)) as any[] |
|
|
|
|
).filter((v) => { |
|
|
|
|
return Object.keys(param.user.roles).some( |
|
|
|
|
(role) => param.user.roles[role] && !v.disabled[role], |
|
|
|
|
); |
|
|
|
|
}), |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const tableList = []; |
|
|
|
|
const vwList = []; |
|
|
|
|
const tableList = []; |
|
|
|
|
const vwList = []; |
|
|
|
|
|
|
|
|
|
for (const b of allBases) { |
|
|
|
|
cmdData.push({ |
|
|
|
|
id: `p-${b.id}`, |
|
|
|
|
title: b.title, |
|
|
|
|
icon: 'project', |
|
|
|
|
iconColor: deserializeJSON(b.meta)?.iconColor, |
|
|
|
|
section: 'Bases', |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
for (const b of allBases) { |
|
|
|
|
cmdData.push({ |
|
|
|
|
id: `p-${b.id}`, |
|
|
|
|
title: b.title, |
|
|
|
|
icon: 'project', |
|
|
|
|
iconColor: deserializeJSON(b.meta)?.iconColor, |
|
|
|
|
section: 'Bases', |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (const v of viewList) { |
|
|
|
|
if (!tableList.find((el) => el.id === `tbl-${v.fk_model_id}`)) { |
|
|
|
|
tableList.push({ |
|
|
|
|
id: `tbl-${v.fk_model_id}`, |
|
|
|
|
title: v._ptn, |
|
|
|
|
parent: `p-${v.base_id}`, |
|
|
|
|
icon: v?.table_meta?.icon || v.ptype, |
|
|
|
|
projectName: bases.find((el) => el.id === v.base_id)?.title, |
|
|
|
|
section: 'Tables', |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
vwList.push({ |
|
|
|
|
id: `vw-${v.id}`, |
|
|
|
|
title: `${v.title}`, |
|
|
|
|
parent: `tbl-${v.fk_model_id}`, |
|
|
|
|
icon: v?.meta?.icon || viewTypeAlias[v.type] || 'table', |
|
|
|
|
for (const v of viewList) { |
|
|
|
|
if (!tableList.find((el) => el.id === `tbl-${v.fk_model_id}`)) { |
|
|
|
|
tableList.push({ |
|
|
|
|
id: `tbl-${v.fk_model_id}`, |
|
|
|
|
title: v._ptn, |
|
|
|
|
parent: `p-${v.base_id}`, |
|
|
|
|
icon: v?.table_meta?.icon || v.ptype, |
|
|
|
|
projectName: bases.find((el) => el.id === v.base_id)?.title, |
|
|
|
|
section: 'Views', |
|
|
|
|
is_default: v?.is_default, |
|
|
|
|
handler: { |
|
|
|
|
type: 'navigate', |
|
|
|
|
payload: `/nc/${v.base_id}/${v.fk_model_id}/${encodeURIComponent( |
|
|
|
|
v.id, |
|
|
|
|
)}`,
|
|
|
|
|
}, |
|
|
|
|
section: 'Tables', |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
cmdData.push(...tableList); |
|
|
|
|
cmdData.push(...vwList); |
|
|
|
|
vwList.push({ |
|
|
|
|
id: `vw-${v.id}`, |
|
|
|
|
title: `${v.title}`, |
|
|
|
|
parent: `tbl-${v.fk_model_id}`, |
|
|
|
|
icon: v?.meta?.icon || viewTypeAlias[v.type] || 'table', |
|
|
|
|
projectName: bases.find((el) => el.id === v.base_id)?.title, |
|
|
|
|
section: 'Views', |
|
|
|
|
is_default: v?.is_default, |
|
|
|
|
handler: { |
|
|
|
|
type: 'navigate', |
|
|
|
|
payload: `/nc/${v.base_id}/${v.fk_model_id}/${encodeURIComponent( |
|
|
|
|
v.id, |
|
|
|
|
)}`,
|
|
|
|
|
}, |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
cmdData.push(...tableList); |
|
|
|
|
cmdData.push(...vwList); |
|
|
|
|
} catch (e) { |
|
|
|
|
console.log(e); |
|
|
|
|
return []; |
|
|
|
|