From 061d89b89e09021f39ec502ed691a30f422f0f8c Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Thu, 21 Jul 2022 19:30:21 +0200 Subject: [PATCH] refactor(gui-v2): accept projectID as argument for `useProject` --- packages/nc-gui-v2/composables/useProject.ts | 33 +++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/packages/nc-gui-v2/composables/useProject.ts b/packages/nc-gui-v2/composables/useProject.ts index 1df977267a..ed3eb1464c 100644 --- a/packages/nc-gui-v2/composables/useProject.ts +++ b/packages/nc-gui-v2/composables/useProject.ts @@ -1,17 +1,19 @@ import { SqlUiFactory } from 'nocodb-sdk' import type { ProjectType, TableType } from 'nocodb-sdk' +import type { MaybeRef } from '@vueuse/core' import { useNuxtApp, useState } from '#app' import { USER_PROJECT_ROLES } from '~/lib/constants' -export default () => { +export default (projectId?: MaybeRef) => { const projectRoles = useState>(USER_PROJECT_ROLES, () => ({})) - const { $api } = useNuxtApp() + const _projectId = $computed(() => unref(projectId)) + const project = useState('project') - const tables = useState('tables') + const tables = useState('tables', () => [] as TableType[]) - const loadProjectRoles = async () => { + async function loadProjectRoles() { projectRoles.value = {} if (project.value.id) { @@ -19,21 +21,30 @@ export default () => { projectRoles.value = user.roles } } - const loadTables = async () => { + async function loadTables() { if (project.value.id) { const tablesResponse = await $api.dbTable.list(project.value.id) if (tablesResponse.list) tables.value = tablesResponse.list } } - const loadProject = async (projectId: string) => { - project.value = await $api.project.read(projectId) + async function loadProject(id: string) { + project.value = await $api.project.read(id) await loadProjectRoles() } - const isMysql = computed(() => ['mysql', 'mysql2'].includes(project.value?.bases?.[0]?.type || '')) - const isPg = computed(() => project.value?.bases?.[0]?.type === 'pg') - const sqlUi = computed(() => SqlUiFactory.create({ client: project.value?.bases?.[0]?.type || '' })) + watchEffect(async () => { + if (_projectId) { + await loadProject(_projectId) + await loadTables() + } + }) + + const projectBaseType = $computed(() => project.value?.bases?.[0]?.type || '') + + const isMysql = computed(() => ['mysql', 'mysql2'].includes(projectBaseType)) + const isPg = computed(() => projectBaseType === 'pg') + const sqlUi = computed(() => SqlUiFactory.create({ client: projectBaseType })) - return { project, tables, loadProject, loadTables, isMysql, isPg, sqlUi } + return { project, tables, loadProjectRoles, loadProject, loadTables, isMysql, isPg, sqlUi } }