index.tsx50 lines · main
1import { useParams } from 'common'
2import { useRouter } from 'next/router'
3import { useEffect } from 'react'
4
5import DefaultLayout from '@/components/layouts/DefaultLayout'
6import { EditorBaseLayout } from '@/components/layouts/editors/EditorBaseLayout'
7import SQLEditorLayout from '@/components/layouts/SQLEditorLayout/SQLEditorLayout'
8import { SQLEditorMenu } from '@/components/layouts/SQLEditorLayout/SQLEditorMenu'
9import { useDashboardHistory } from '@/hooks/misc/useDashboardHistory'
10import { useTabsStateSnapshot } from '@/state/tabs'
11import type { NextPageWithLayout } from '@/types'
12
13const SQLEditorIndexPage: NextPageWithLayout = () => {
14 const router = useRouter()
15 const { ref: projectRef } = useParams()
16 const store = useTabsStateSnapshot()
17
18 const { history, isHistoryLoaded } = useDashboardHistory()
19
20 useEffect(() => {
21 if (isHistoryLoaded) {
22 // Handle redirect to last opened snippet tab, or last snippet tab
23 const lastOpenedTab = history.sql
24 const lastTabId = store.openTabs.find((id) => store.tabsMap[id]?.type === 'sql')
25 if (lastOpenedTab !== undefined) {
26 router.replace(`/project/${projectRef}/sql/${history.sql}`)
27 } else if (lastTabId) {
28 const lastTab = store.tabsMap[lastTabId]
29 if (lastTab) {
30 router.replace(`/project/${projectRef}/sql/${lastTab.id.replace('sql-', '')}`)
31 }
32 } else {
33 router.replace(`/project/${projectRef}/sql/new`)
34 }
35 }
36 // eslint-disable-next-line react-hooks/exhaustive-deps
37 }, [isHistoryLoaded])
38
39 return null
40}
41
42SQLEditorIndexPage.getLayout = (page) => (
43 <DefaultLayout>
44 <EditorBaseLayout productMenu={<SQLEditorMenu />} product="SQL Editor">
45 <SQLEditorLayout>{page}</SQLEditorLayout>
46 </EditorBaseLayout>
47 </DefaultLayout>
48)
49
50export default SQLEditorIndexPage