From 1e5794f2354ba3286f2d51f8fa395b330335a632 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Thu, 21 Jul 2022 12:53:21 +0530 Subject: [PATCH 01/17] feat(gui-v2): convert tabview into nested page Signed-off-by: Pranav C --- .../{[projectId].vue => [projectId]/index.vue} | 3 ++- .../pages/nc/[projectId]/index/index.vue | 11 +++++++++++ .../pages/nc/[projectId]/index/index/index.vue | 17 +++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) rename packages/nc-gui-v2/pages/nc/{[projectId].vue => [projectId]/index.vue} (94%) create mode 100644 packages/nc-gui-v2/pages/nc/[projectId]/index/index.vue create mode 100644 packages/nc-gui-v2/pages/nc/[projectId]/index/index/index.vue diff --git a/packages/nc-gui-v2/pages/nc/[projectId].vue b/packages/nc-gui-v2/pages/nc/[projectId]/index.vue similarity index 94% rename from packages/nc-gui-v2/pages/nc/[projectId].vue rename to packages/nc-gui-v2/pages/nc/[projectId]/index.vue index 01b32f99f0..ce224f7857 100644 --- a/packages/nc-gui-v2/pages/nc/[projectId].vue +++ b/packages/nc-gui-v2/pages/nc/[projectId]/index.vue @@ -29,7 +29,8 @@ $state.sidebarOpen.value = true - + + diff --git a/packages/nc-gui-v2/pages/nc/[projectId]/index/index.vue b/packages/nc-gui-v2/pages/nc/[projectId]/index/index.vue new file mode 100644 index 0000000000..8119a0ec08 --- /dev/null +++ b/packages/nc-gui-v2/pages/nc/[projectId]/index/index.vue @@ -0,0 +1,11 @@ + + + + + diff --git a/packages/nc-gui-v2/pages/nc/[projectId]/index/index/index.vue b/packages/nc-gui-v2/pages/nc/[projectId]/index/index/index.vue new file mode 100644 index 0000000000..d40f82d345 --- /dev/null +++ b/packages/nc-gui-v2/pages/nc/[projectId]/index/index/index.vue @@ -0,0 +1,17 @@ + + + + + From 6292e1f2aa4442d94cfb5cca955ef3c222e88f8c Mon Sep 17 00:00:00 2001 From: Pranav C Date: Sat, 23 Jul 2022 13:43:26 +0530 Subject: [PATCH 02/17] wip(gui-v2): route based tab navigation Signed-off-by: Pranav C --- packages/nc-gui-v2/composables/useTabs.ts | 37 ++++++++++++++++++- .../pages/nc/[projectId]/index/index.vue | 33 ++++++++++++++--- .../index/table/[title]/[viewTitle]/index.vue | 9 +++++ .../index/index/table/[title]/index.vue | 9 +++++ 4 files changed, 81 insertions(+), 7 deletions(-) create mode 100644 packages/nc-gui-v2/pages/nc/[projectId]/index/index/table/[title]/[viewTitle]/index.vue create mode 100644 packages/nc-gui-v2/pages/nc/[projectId]/index/index/table/[title]/index.vue diff --git a/packages/nc-gui-v2/composables/useTabs.ts b/packages/nc-gui-v2/composables/useTabs.ts index d2fef08531..e2e5a65517 100644 --- a/packages/nc-gui-v2/composables/useTabs.ts +++ b/packages/nc-gui-v2/composables/useTabs.ts @@ -15,7 +15,42 @@ function getPredicate(key: Partial) { export default () => { const tabs = useState('tabs', () => []) - const activeTab = useState('activeTab', () => 0) + // const activeTab = useState('activeTab', () => 0) + + const route = useRoute() + const router = useRouter() + const { tables } = useProject() + + const activeTab: WritableComputedRef = computed({ + get() { + if ((route?.name as string)?.startsWith('nc-projectId-index-index-table-title') && tables?.value?.length) { + const tab: Partial = { type: 'table', title: route.params.title as string } + const id = tables.value?.find((t) => t.title === tab.title)?.id + tab.id = id as string + let index = tabs.value.findIndex((t) => t.id === tab.id) + if (index === -1) { + tabs.value.push(tab as TabItem) + index = tabs.value.length - 1 + } + return index + } + return -1 + }, + set(index: number) { + if (index === -1) { + router.push(`/nc/${route.params.projectId}`) + } else { + router.push(`/nc/${route.params.projectId}/table/${tabs.value?.[index]?.title}`) + } + }, + + // if (route.params.title) { + // const tab = tabs.value.find(t => t.id === route.params.tab) + // if (tab) { + // activeTab.value = tabs.value.indexOf(tab) + // } + // } + }) const addTab = (tabMeta: TabItem) => { const tabIndex = tabs.value.findIndex((tab) => tab.id === tabMeta.id) diff --git a/packages/nc-gui-v2/pages/nc/[projectId]/index/index.vue b/packages/nc-gui-v2/pages/nc/[projectId]/index/index.vue index 8119a0ec08..2f2ce1a288 100644 --- a/packages/nc-gui-v2/pages/nc/[projectId]/index/index.vue +++ b/packages/nc-gui-v2/pages/nc/[projectId]/index/index.vue @@ -1,11 +1,32 @@ - - + diff --git a/packages/nc-gui-v2/pages/nc/[projectId]/index/index/table/[title]/[viewTitle]/index.vue b/packages/nc-gui-v2/pages/nc/[projectId]/index/index/table/[title]/[viewTitle]/index.vue new file mode 100644 index 0000000000..8435a144c0 --- /dev/null +++ b/packages/nc-gui-v2/pages/nc/[projectId]/index/index/table/[title]/[viewTitle]/index.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/packages/nc-gui-v2/pages/nc/[projectId]/index/index/table/[title]/index.vue b/packages/nc-gui-v2/pages/nc/[projectId]/index/index/table/[title]/index.vue new file mode 100644 index 0000000000..10745f6de9 --- /dev/null +++ b/packages/nc-gui-v2/pages/nc/[projectId]/index/index/table/[title]/index.vue @@ -0,0 +1,9 @@ + + + + + From 73d532f145335744f8c90b20f7d7d2a4ed2d4521 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Mon, 25 Jul 2022 12:36:21 +0530 Subject: [PATCH 03/17] fix(gui-v2): handle closing active tab Signed-off-by: Pranav C --- packages/nc-gui-v2/composables/useTabs.ts | 26 +++++++++++------------ 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/nc-gui-v2/composables/useTabs.ts b/packages/nc-gui-v2/composables/useTabs.ts index e2e5a65517..2485fb46bb 100644 --- a/packages/nc-gui-v2/composables/useTabs.ts +++ b/packages/nc-gui-v2/composables/useTabs.ts @@ -1,4 +1,6 @@ +import type { WritableComputedRef } from '@vue/reactivity' import { useState } from '#app' +import useProject from '~/composables/useProject' export interface TabItem { type: 'table' | 'view' | 'auth' @@ -43,13 +45,6 @@ export default () => { router.push(`/nc/${route.params.projectId}/table/${tabs.value?.[index]?.title}`) } }, - - // if (route.params.title) { - // const tab = tabs.value.find(t => t.id === route.params.tab) - // if (tab) { - // activeTab.value = tabs.value.indexOf(tab) - // } - // } }) const addTab = (tabMeta: TabItem) => { @@ -67,13 +62,18 @@ export default () => { const clearTabs = () => { tabs.value = [] } - - const closeTab = (key: number | Partial) => { - if (typeof key === 'number') tabs.value.splice(key, 1) - else { - const index = tabs.value.findIndex(getPredicate(key)) - if (index > -1) tabs.value.splice(index, 1) + const closeTab = async (key: number | Partial) => { + const index = typeof key === 'number' ? key : tabs.value.findIndex(getPredicate(key)) + if (activeTab.value === index) { + let newTabIndex = index - 1 + if (newTabIndex < 0 && tabs.value?.length > 1) newTabIndex = index + 1 + if (newTabIndex === -1) { + await router.push(`/nc/${route.params.projectId}`) + } else { + await router.push(`/nc/${route.params.projectId}/table/${tabs.value?.[newTabIndex]?.title}`) + } } + tabs.value.splice(index, 1) } const updateTab = (key: number | Partial, newTabItemProps: Partial) => { From 78a8c1caa62396810c431528e3ab52833b550797 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Mon, 25 Jul 2022 13:03:46 +0530 Subject: [PATCH 04/17] feat(gui-v2): render smartsheet based on route Signed-off-by: Pranav C --- .../components/dashboard/TreeView.vue | 2 +- .../nc-gui-v2/components/tabs/Smartsheet.vue | 19 +++++------- packages/nc-gui-v2/composables/useTabs.ts | 29 ++++++++++++++----- packages/nc-gui-v2/context/index.ts | 5 ++-- .../nc-gui-v2/pages/nc/[projectId]/index.vue | 2 ++ .../pages/nc/[projectId]/index/index.vue | 8 +++-- .../[title]/[viewTitle]/index.vue | 4 ++- .../index/{table => [type]}/[title]/index.vue | 4 ++- .../pages/nc/[projectId]/index/index/auth.vue | 5 ++++ .../pages/project/index/create-external.vue | 1 - .../nocodb-sdk/src/lib/helperFunctions.ts | 13 +++++---- 11 files changed, 58 insertions(+), 34 deletions(-) rename packages/nc-gui-v2/pages/nc/[projectId]/index/index/{table => [type]}/[title]/[viewTitle]/index.vue (64%) rename packages/nc-gui-v2/pages/nc/[projectId]/index/index/{table => [type]}/[title]/index.vue (64%) create mode 100644 packages/nc-gui-v2/pages/nc/[projectId]/index/index/auth.vue diff --git a/packages/nc-gui-v2/components/dashboard/TreeView.vue b/packages/nc-gui-v2/components/dashboard/TreeView.vue index ab122869b1..2a0b628fda 100644 --- a/packages/nc-gui-v2/components/dashboard/TreeView.vue +++ b/packages/nc-gui-v2/components/dashboard/TreeView.vue @@ -192,7 +192,7 @@ const reloadTables = async () => { } const addTableTab = (table: TableType) => { $e('a:table:open') - addTab({ title: table.title, id: table.id }) + addTab({ title: table.title, id: table.id, type: table.type as any }) } diff --git a/packages/nc-gui-v2/components/tabs/Smartsheet.vue b/packages/nc-gui-v2/components/tabs/Smartsheet.vue index cfbf6b7a07..763689697a 100644 --- a/packages/nc-gui-v2/components/tabs/Smartsheet.vue +++ b/packages/nc-gui-v2/components/tabs/Smartsheet.vue @@ -1,25 +1,22 @@