From 0179777a92858e43ebd7f1f39aae16abeee258f0 Mon Sep 17 00:00:00 2001 From: Raju Udava <86527202+dstala@users.noreply.github.com> Date: Thu, 24 Aug 2023 14:46:49 +0530 Subject: [PATCH 1/7] sync @1446 Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> --- packages/nc-gui/components/cell/TextArea.vue | 2 +- packages/nc-gui/composables/useMultiSelect/index.ts | 3 ++- packages/nc-gui/utils/browserUtils.ts | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/nc-gui/components/cell/TextArea.vue b/packages/nc-gui/components/cell/TextArea.vue index ed9d8d1264..81782d1bd7 100644 --- a/packages/nc-gui/components/cell/TextArea.vue +++ b/packages/nc-gui/components/cell/TextArea.vue @@ -103,7 +103,7 @@ onClickOutside(inputWrapperRef, (e) => { +
Enable Public Access
- +
diff --git a/packages/nc-gui/components/dlg/share-and-collaborate/View.vue b/packages/nc-gui/components/dlg/share-and-collaborate/View.vue index 935fd74f12..905560a185 100644 --- a/packages/nc-gui/components/dlg/share-and-collaborate/View.vue +++ b/packages/nc-gui/components/dlg/share-and-collaborate/View.vue @@ -1,7 +1,7 @@ diff --git a/packages/nc-gui/store/project.ts b/packages/nc-gui/store/project.ts index 7101b1a6a3..e9c572f20b 100644 --- a/packages/nc-gui/store/project.ts +++ b/packages/nc-gui/store/project.ts @@ -256,6 +256,19 @@ export const useProject = defineStore('projectStore', () => { }, ) + const navigateToProjectPage = async ({ page }: { page: 'all-table' | 'collaborator' | 'data-source' }) => { + await router.push({ + name: 'index-typeOrId-projectId-index-index', + params: { + typeOrId: route.value.params.typeOrId, + projectId: route.value.params.projectId, + }, + query: { + page, + }, + }) + } + return { project, bases, @@ -284,6 +297,7 @@ export const useProject = defineStore('projectStore', () => { setProject, projectUrl, getBaseType, + navigateToProjectPage, } }) diff --git a/packages/nc-gui/store/projects.ts b/packages/nc-gui/store/projects.ts index 9af558dd70..f9f7ae97a0 100644 --- a/packages/nc-gui/store/projects.ts +++ b/packages/nc-gui/store/projects.ts @@ -86,6 +86,11 @@ export const useProjects = defineStore('projectsStore', () => { await api.auth.projectUserUpdate(projectId, user.id, user as ProjectUserReqType) } + + const removeProjectUser = async (projectId: string, user: User) => { + await api.auth.projectUserRemove(projectId, user.id) + } + const loadProjects = async (page: 'recent' | 'shared' | 'starred' | 'workspace' = 'recent') => { // if shared base then get the shared project and create a list if (route.value.params.typeOrId === 'base' && route.value.params.projectId) { @@ -102,7 +107,7 @@ export const useProjects = defineStore('projectsStore', () => { projects.value.set(project.id!, { ...(projects.value.get(project.id!) || {}), ...project, - bases: [...(projects.value.get(project.id!)?.bases ?? []), ...(project.bases ?? [])], + bases: [...(project.bases ?? projects.value.get(project.id!)?.bases ?? [])], isExpanded: route.value.params.projectId === project.id || projects.value.get(project.id!)?.isExpanded, isLoading: false, }) @@ -224,7 +229,7 @@ export const useProjects = defineStore('projectsStore', () => { linked_db_project_ids: projectPayload.linkedDbProjectIds, }, { - baseURL: getBaseUrl('default'), + baseURL: getBaseUrl('nc'), }, ) @@ -310,6 +315,7 @@ export const useProjects = defineStore('projectsStore', () => { createProjectUser, updateProjectUser, navigateToProject, + removeProjectUser } }) diff --git a/packages/nc-gui/store/views.ts b/packages/nc-gui/store/views.ts index 25faafe344..db5093522f 100644 --- a/packages/nc-gui/store/views.ts +++ b/packages/nc-gui/store/views.ts @@ -15,8 +15,8 @@ export const useViewsStore = defineStore('viewsStore', () => { const { activeTable } = storeToRefs(useTablesStore()) - const activeViewTitle = computed(() => { - if (!route.value.params.viewTitle?.length) return views.value.length ? views.value[0].title : undefined + const activeViewTitleOrId = computed(() => { + if (!route.value.params.viewTitle?.length) return views.value.length ? views.value[0].id : undefined return route.value.params.viewTitle }) @@ -42,9 +42,12 @@ export const useViewsStore = defineStore('viewsStore', () => { if (!activeTable.value) return undefined - if (!activeViewTitle.value) return undefined + if (!activeViewTitleOrId.value) return undefined - return views.value.find((v) => v.title === activeViewTitle.value) + return ( + views.value.find((v) => v.id === activeViewTitleOrId.value) ?? + views.value.find((v) => v.title === activeViewTitleOrId.value) + ) }, set(_view: ViewType | undefined) { if (sharedView.value) { @@ -55,7 +58,9 @@ export const useViewsStore = defineStore('viewsStore', () => { if (!activeTable.value) return if (!_view) return - const viewIndex = views.value.findIndex((v) => v.title === activeViewTitle.value) + const viewIndex = + views.value.findIndex((v) => v.id === activeViewTitleOrId.value) ?? + views.value.findIndex((v) => v.title === activeViewTitleOrId.value) if (viewIndex === -1) return views.value[viewIndex] = _view @@ -86,7 +91,7 @@ export const useViewsStore = defineStore('viewsStore', () => { projectId: route.value.params.projectId, type: route.value.params.type, viewId: route.value.params.viewId, - viewTitle: activeViewTitle.value, + viewTitle: activeViewTitleOrId.value, slugs: [page], }, }) diff --git a/packages/nc-gui/store/webhooks.ts b/packages/nc-gui/store/webhooks.ts index 99789ee9ca..b22993a4f4 100644 --- a/packages/nc-gui/store/webhooks.ts +++ b/packages/nc-gui/store/webhooks.ts @@ -178,7 +178,7 @@ export const useWebhooksStore = defineStore('webhooksStore', () => { projectId: route.value.params.projectId, type: route.value.params.type, viewId: route.value.params.viewId, - viewTitle: activeView.title, + viewTitle: activeView.id, slugs: openMainPage ? ['webhook'] : ['webhook', openCreatePage ? 'create' : hookId!], }, } diff --git a/packages/nocodb/src/middlewares/extract-ids/extract-ids.middleware.ts b/packages/nocodb/src/middlewares/extract-ids/extract-ids.middleware.ts index bbd807c7e6..6559d4ff44 100644 --- a/packages/nocodb/src/middlewares/extract-ids/extract-ids.middleware.ts +++ b/packages/nocodb/src/middlewares/extract-ids/extract-ids.middleware.ts @@ -154,11 +154,14 @@ export class ExtractIdsMiddleware implements NestMiddleware, CanActivate { }); req.ncProjectId = model?.project_id; } - // extract project id from query params only if it's userMe endpoint + // extract project id from query params only if it's userMe endpoint or webhook plugin list else if ( - ['/auth/user/me', '/api/v1/db/auth/user/me', '/api/v1/auth/user/me'].some( - (userMePath) => req.route.path === userMePath, - ) && + [ + '/auth/user/me', + '/api/v1/db/auth/user/me', + '/api/v1/auth/user/me', + '/api/v1/db/meta/plugins/webhook', + ].some((userMePath) => req.route.path === userMePath) && req.query.project_id ) { req.ncProjectId = req.query.project_id; From a64ff2e4535367b2bedbafd3cb0c8a60ef2f3e12 Mon Sep 17 00:00:00 2001 From: Raju Udava <86527202+dstala@users.noreply.github.com> Date: Thu, 24 Aug 2023 17:55:45 +0530 Subject: [PATCH 3/7] sync @1800 Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> --- .../components/dlg/share-and-collaborate/SharePage.vue | 5 ++++- packages/nc-gui/composables/useGlobal/actions.ts | 8 ++++++++ packages/nc-gui/store/tables.ts | 4 ++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/nc-gui/components/dlg/share-and-collaborate/SharePage.vue b/packages/nc-gui/components/dlg/share-and-collaborate/SharePage.vue index 236d738b40..e288297d49 100644 --- a/packages/nc-gui/components/dlg/share-and-collaborate/SharePage.vue +++ b/packages/nc-gui/components/dlg/share-and-collaborate/SharePage.vue @@ -45,8 +45,10 @@ const url = computed(() => { return sharedViewUrl() ?? '' }) +const passwordProtectedLocal = ref(false) + const passwordProtected = computed(() => { - return !!(activeView.value?.password !== undefined && activeView.value?.password !== null) + return !!activeView.value?.password || passwordProtectedLocal.value }) const password = computed({ @@ -74,6 +76,7 @@ const viewTheme = computed({ }) const togglePasswordProtected = async () => { + passwordProtectedLocal.value = !passwordProtected.value if (!activeView.value) return if (isUpdating.value.password) return diff --git a/packages/nc-gui/composables/useGlobal/actions.ts b/packages/nc-gui/composables/useGlobal/actions.ts index 8e28c42bb4..e581910d57 100644 --- a/packages/nc-gui/composables/useGlobal/actions.ts +++ b/packages/nc-gui/composables/useGlobal/actions.ts @@ -1,3 +1,4 @@ +import { getActivePinia } from 'pinia' import type { Actions, AppInfo, State } from './types' import { type NcProjectType, message, useNuxtApp } from '#imports' import { navigateTo } from '#app' @@ -16,6 +17,13 @@ export function useGlobalActions(state: State): Actions { } finally { state.token.value = null state.user.value = null + const pn = getActivePinia() + if (pn) { + pn._s.forEach((store) => { + store.$dispose() + delete pn.state.value[store.$id] + }) + } } } diff --git a/packages/nc-gui/store/tables.ts b/packages/nc-gui/store/tables.ts index e5a2125795..bddaefc7bf 100644 --- a/packages/nc-gui/store/tables.ts +++ b/packages/nc-gui/store/tables.ts @@ -129,7 +129,7 @@ export const useTablesStore = defineStore('tablesStore', () => { await getMeta(table.id as string) - const typeOrId = (route.value.params.typeOrId as string) || 'nc' + // const typeOrId = (route.value.params.typeOrId as string) || 'nc' let workspaceIdOrType = workspaceId @@ -144,7 +144,7 @@ export const useTablesStore = defineStore('tablesStore', () => { } await navigateTo({ - path: `/${workspaceIdOrType}/${projectIdOrBaseId}/table/${table?.id}${table.title ? `/${table.title}` : ''}`, + path: `/${workspaceIdOrType}/${projectIdOrBaseId}/table/${table?.id}`, query: route.value.query, }) } From e1958c6e15ccc444f3fb983f5b65fba028e46be8 Mon Sep 17 00:00:00 2001 From: Raju Udava <86527202+dstala@users.noreply.github.com> Date: Thu, 24 Aug 2023 21:41:24 +0530 Subject: [PATCH 4/7] sync 2145 Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> --- .../nc-gui/components/dashboard/Sidebar.vue | 24 +++++++------ .../settings/data-sources/CreateBase.vue | 35 +++++++++++++------ .../nc-gui/components/dlg/ProjectDelete.vue | 10 +++++- .../nc-gui/components/smartsheet/Gallery.vue | 2 +- .../nc-gui/components/smartsheet/Kanban.vue | 19 +++++----- .../smartsheet/SharedMapMarkerPopup.vue | 2 +- packages/nc-gui/store/projects.ts | 33 +++++++++-------- packages/nc-gui/utils/virtualCell.ts | 5 ++- .../jobs/export-import/duplicate.processor.ts | 2 ++ .../jobs/jobs/export-import/export.service.ts | 34 ++++++++++++++++++ .../jobs/jobs/export-import/import.service.ts | 14 ++++++++ .../nocodb/src/services/projects.service.ts | 10 +++--- 12 files changed, 136 insertions(+), 54 deletions(-) diff --git a/packages/nc-gui/components/dashboard/Sidebar.vue b/packages/nc-gui/components/dashboard/Sidebar.vue index eedf598263..8b5e49ba1b 100644 --- a/packages/nc-gui/components/dashboard/Sidebar.vue +++ b/packages/nc-gui/components/dashboard/Sidebar.vue @@ -58,7 +58,7 @@ const navigateToSettings = () => { height: isSharedBase ? '100%' : null, }" > -
+
{ form.value?.$el.querySelector('.ant-form-item-explain-error')?.parentNode?.parentNode?.querySelector('input')?.focus() } +const isConnSuccess = ref(false) const createBase = async () => { try { await validate() + isConnSuccess.value = false } catch (e) { focusInvalidInput() + isConnSuccess.value = false return } @@ -287,17 +290,7 @@ const testConnection = async () => { if (result.code === 0) { testSuccess.value = true - - Modal.confirm({ - title: t('msg.info.dbConnected'), - icon: null, - type: 'success', - okText: 'Ok & Add Base', - okType: 'primary', - cancelText: t('general.cancel'), - onOk: createBase, - style: 'top: 30%!important', - }) + isConnSuccess.value = true } else { testSuccess.value = false @@ -374,6 +367,15 @@ watch( diff --git a/packages/nc-gui/components/dlg/ProjectDelete.vue b/packages/nc-gui/components/dlg/ProjectDelete.vue index a6fcd4612f..ae729f2a9e 100644 --- a/packages/nc-gui/components/dlg/ProjectDelete.vue +++ b/packages/nc-gui/components/dlg/ProjectDelete.vue @@ -1,4 +1,6 @@