From 839e93ce33f366b0b368ee4cbf7db55ddfcf74fa Mon Sep 17 00:00:00 2001 From: Ramesh Mane <101566080+rameshmane7218@users.noreply.github.com> Date: Mon, 11 Mar 2024 15:11:25 +0000 Subject: [PATCH] fix(nc-gui): open view new tab in background on cmd+click --- .../dashboard/Sidebar/TopSection.vue | 6 +++++- .../dashboard/TreeView/ProjectNode.vue | 4 ++-- .../dashboard/TreeView/TableNode.vue | 2 +- .../dashboard/TreeView/ViewsNode.vue | 19 ++++++++++++++++--- packages/nc-gui/composables/useTableNew.ts | 4 ++-- packages/nc-gui/store/views.ts | 2 +- packages/nc-gui/store/workspace.ts | 11 +++++++++-- 7 files changed, 36 insertions(+), 12 deletions(-) diff --git a/packages/nc-gui/components/dashboard/Sidebar/TopSection.vue b/packages/nc-gui/components/dashboard/Sidebar/TopSection.vue index 2b409eef86..84ecb8430f 100644 --- a/packages/nc-gui/components/dashboard/Sidebar/TopSection.vue +++ b/packages/nc-gui/components/dashboard/Sidebar/TopSection.vue @@ -6,6 +6,8 @@ const { isUIAllowed } = useRoles() const { appInfo } = useGlobal() +const { meta: metaKey, ctrlKey } = useMagicKeys() + const { isWorkspaceLoading, isWorkspaceSettingsPageOpened } = storeToRefs(workspaceStore) const { navigateToWorkspaceSettings } = workspaceStore @@ -15,8 +17,10 @@ const { isSharedBase } = storeToRefs(baseStore) const isCreateProjectOpen = ref(false) const navigateToSettings = () => { + const cmdOrCtrl = isMac() ? metaKey.value : ctrlKey.value + // TODO: Handle cloud case properly - navigateToWorkspaceSettings() + navigateToWorkspaceSettings('', cmdOrCtrl) // if (appInfo.value.baseHostName) { // window.location.href = `https://app.${appInfo.value.baseHostName}/dashboard` diff --git a/packages/nc-gui/components/dashboard/TreeView/ProjectNode.vue b/packages/nc-gui/components/dashboard/TreeView/ProjectNode.vue index 6d2331e002..0230f38925 100644 --- a/packages/nc-gui/components/dashboard/TreeView/ProjectNode.vue +++ b/packages/nc-gui/components/dashboard/TreeView/ProjectNode.vue @@ -16,6 +16,7 @@ import { h, inject, navigateTo, + navigateToBlankTargetOpenOption, openLink, ref, resolveComponent, @@ -26,14 +27,13 @@ import { useDialog, useGlobal, useI18n, + useMagicKeys, useNuxtApp, useRoles, useRouter, useTablesStore, useTabs, useToggle, - useMagicKeys, - navigateToBlankTargetOpenOption, } from '#imports' import type { NcProject } from '#imports' diff --git a/packages/nc-gui/components/dashboard/TreeView/TableNode.vue b/packages/nc-gui/components/dashboard/TreeView/TableNode.vue index e108628e1e..31c23323dd 100644 --- a/packages/nc-gui/components/dashboard/TreeView/TableNode.vue +++ b/packages/nc-gui/components/dashboard/TreeView/TableNode.vue @@ -4,7 +4,7 @@ import { toRef } from '@vue/reactivity' import { message } from 'ant-design-vue' import { storeToRefs } from 'pinia' -import { ProjectRoleInj, TreeViewInj, useNuxtApp, useRoles, useTabs, useMagicKeys } from '#imports' +import { ProjectRoleInj, TreeViewInj, useMagicKeys, useNuxtApp, useRoles, useTabs } from '#imports' import type { SidebarTableNode } from '~/lib' const props = withDefaults( diff --git a/packages/nc-gui/components/dashboard/TreeView/ViewsNode.vue b/packages/nc-gui/components/dashboard/TreeView/ViewsNode.vue index b5a89d0b7a..910352b24e 100644 --- a/packages/nc-gui/components/dashboard/TreeView/ViewsNode.vue +++ b/packages/nc-gui/components/dashboard/TreeView/ViewsNode.vue @@ -9,6 +9,7 @@ import { message, onKeyStroke, useDebounceFn, + useMagicKeys, useNuxtApp, useRoles, useVModel, @@ -52,6 +53,8 @@ const { activeView } = storeToRefs(useViewsStore()) const { getMeta } = useMetas() +const { meta: metaKey, ctrlKey } = useMagicKeys() + const table = computed(() => props.table) const injectedTable = ref(table.value) @@ -80,11 +83,21 @@ const _title = ref() /** Debounce click handler, so we can potentially enable editing view name {@see onDblClick} */ const onClick = useDebounceFn(() => { - if (isEditing.value || isStopped.value) return - emits('changeView', vModel.value) }, 250) +const handleOnClick = () => { + if (isEditing.value || isStopped.value) return + + const cmdOrCtrl = isMac() ? metaKey.value : ctrlKey.value + + if (cmdOrCtrl) { + emits('changeView', vModel.value) + } else { + onClick() + } +} + /** Enable editing view name on dbl click */ function onDblClick() { if (isMobileMode.value) return @@ -209,7 +222,7 @@ watch(isDropdownOpen, async () => { }" :data-testid="`view-sidebar-view-${vModel.alias || vModel.title}`" @dblclick.stop="onDblClick" - @click="onClick" + @click.prevent="handleOnClick" >
void; baseId: string; sourceId?: string }) { diff --git a/packages/nc-gui/store/views.ts b/packages/nc-gui/store/views.ts index d767a94af6..f5e60d480c 100644 --- a/packages/nc-gui/store/views.ts +++ b/packages/nc-gui/store/views.ts @@ -1,7 +1,7 @@ import type { FilterType, SortType, ViewType, ViewTypes } from 'nocodb-sdk' import { acceptHMRUpdate, defineStore } from 'pinia' import type { ViewPageType } from '~/lib' -import { useMagicKeys, navigateToBlankTargetOpenOption } from '#imports' +import { navigateToBlankTargetOpenOption, useMagicKeys } from '#imports' export const useViewsStore = defineStore('viewsStore', () => { const { $api } = useNuxtApp() diff --git a/packages/nc-gui/store/workspace.ts b/packages/nc-gui/store/workspace.ts index db79670ce3..36f6d1df16 100644 --- a/packages/nc-gui/store/workspace.ts +++ b/packages/nc-gui/store/workspace.ts @@ -199,8 +199,15 @@ export const useWorkspace = defineStore('workspaceStore', () => { }) } - const navigateToWorkspaceSettings = async () => { - navigateTo('/account/users') + const navigateToWorkspaceSettings = async (_, cmdOrCtrl) => { + await navigateTo( + `${cmdOrCtrl ? '#' : ''}/account/users`, + cmdOrCtrl + ? { + open: navigateToBlankTargetOpenOption, + } + : undefined, + ) } function setLoadingState(isLoading = false) {