Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
canifa_note
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vũ Hoàng Anh
canifa_note
Commits
dfe29ec7
Commit
dfe29ec7
authored
Feb 24, 2024
by
Steven
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: tweak route layout
parent
db56e1b5
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
92 additions
and
108 deletions
+92
-108
App.tsx
web/src/App.tsx
+2
-16
CommonContextProvider.tsx
web/src/layouts/CommonContextProvider.tsx
+32
-0
HomeLayout.tsx
web/src/layouts/HomeLayout.tsx
+21
-4
main.tsx
web/src/main.tsx
+4
-1
AuthStatusProvider.tsx
web/src/router/AuthStatusProvider.tsx
+0
-27
index.tsx
web/src/router/index.tsx
+33
-60
No files found.
web/src/App.tsx
View file @
dfe29ec7
import
{
useColorScheme
}
from
"@mui/joy"
;
import
{
useColorScheme
}
from
"@mui/joy"
;
import
{
useEffect
,
useState
}
from
"react"
;
import
{
useEffect
}
from
"react"
;
import
{
useTranslation
}
from
"react-i18next"
;
import
{
useTranslation
}
from
"react-i18next"
;
import
{
Outlet
}
from
"react-router-dom"
;
import
{
Outlet
}
from
"react-router-dom"
;
import
storage
from
"./helpers/storage"
;
import
storage
from
"./helpers/storage"
;
...
@@ -16,7 +16,6 @@ const App = () => {
...
@@ -16,7 +16,6 @@ const App = () => {
const
globalStore
=
useGlobalStore
();
const
globalStore
=
useGlobalStore
();
const
workspaceSettingStore
=
useWorkspaceSettingStore
();
const
workspaceSettingStore
=
useWorkspaceSettingStore
();
const
userStore
=
useUserStore
();
const
userStore
=
useUserStore
();
const
[
loading
,
setLoading
]
=
useState
(
true
);
const
{
appearance
,
locale
,
systemStatus
}
=
globalStore
.
state
;
const
{
appearance
,
locale
,
systemStatus
}
=
globalStore
.
state
;
const
userSetting
=
userStore
.
userSetting
;
const
userSetting
=
userStore
.
userSetting
;
const
workspaceGeneralSetting
=
const
workspaceGeneralSetting
=
...
@@ -30,19 +29,6 @@ const App = () => {
...
@@ -30,19 +29,6 @@ const App = () => {
}
}
},
[
systemStatus
.
host
]);
},
[
systemStatus
.
host
]);
useEffect
(()
=>
{
const
initialState
=
async
()
=>
{
await
workspaceSettingStore
.
fetchWorkspaceSetting
(
WorkspaceSettingKey
.
WORKSPACE_SETTING_GENERAL
);
try
{
await
userStore
.
fetchCurrentUser
();
}
catch
(
error
)
{
// Do nothing.
}
};
Promise
.
all
([
initialState
()]).
then
(()
=>
setLoading
(
false
));
},
[]);
useEffect
(()
=>
{
useEffect
(()
=>
{
const
darkMediaQuery
=
window
.
matchMedia
(
"(prefers-color-scheme: dark)"
);
const
darkMediaQuery
=
window
.
matchMedia
(
"(prefers-color-scheme: dark)"
);
const
handleColorSchemeChange
=
(
e
:
MediaQueryListEvent
)
=>
{
const
handleColorSchemeChange
=
(
e
:
MediaQueryListEvent
)
=>
{
...
@@ -132,7 +118,7 @@ const App = () => {
...
@@ -132,7 +118,7 @@ const App = () => {
}
}
},
[
mode
]);
},
[
mode
]);
return
loading
?
null
:
<
Outlet
/>;
return
<
Outlet
/>;
};
};
export
default
App
;
export
default
App
;
web/src/layouts/CommonContextProvider.tsx
0 → 100644
View file @
dfe29ec7
import
{
useEffect
,
useState
}
from
"react"
;
import
{
initialGlobalState
}
from
"@/store/module"
;
import
{
useUserStore
,
useWorkspaceSettingStore
}
from
"@/store/v1"
;
import
{
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
interface
Props
{
children
:
React
.
ReactNode
;
}
const
CommonContextProvider
=
(
props
:
Props
)
=>
{
const
workspaceSettingStore
=
useWorkspaceSettingStore
();
const
userStore
=
useUserStore
();
const
[
loading
,
setLoading
]
=
useState
(
true
);
useEffect
(()
=>
{
const
initialState
=
async
()
=>
{
await
initialGlobalState
();
await
workspaceSettingStore
.
fetchWorkspaceSetting
(
WorkspaceSettingKey
.
WORKSPACE_SETTING_GENERAL
);
try
{
await
userStore
.
fetchCurrentUser
();
}
catch
(
error
)
{
// Do nothing.
}
};
Promise
.
all
([
initialState
()]).
then
(()
=>
setLoading
(
false
));
},
[]);
return
loading
?
null
:
<>
{
props
.
children
}
</>;
};
export
default
CommonContextProvider
;
web/src/layouts/
Roo
t.tsx
→
web/src/layouts/
HomeLayou
t.tsx
View file @
dfe29ec7
import
{
Button
,
IconButton
,
Tooltip
}
from
"@mui/joy"
;
import
{
Button
,
IconButton
,
Tooltip
}
from
"@mui/joy"
;
import
classNames
from
"classnames"
;
import
classNames
from
"classnames"
;
import
{
Suspense
}
from
"react"
;
import
{
Suspense
}
from
"react"
;
import
{
Outlet
}
from
"react-router-dom"
;
import
{
Outlet
,
useLocation
}
from
"react-router-dom"
;
import
useLocalStorage
from
"react-use/lib/useLocalStorage"
;
import
useLocalStorage
from
"react-use/lib/useLocalStorage"
;
import
Icon
from
"@/components/Icon"
;
import
Icon
from
"@/components/Icon"
;
import
Navigation
from
"@/components/Navigation"
;
import
Navigation
from
"@/components/Navigation"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
useNavigateTo
from
"@/hooks/useNavigateTo"
;
import
useResponsiveWidth
from
"@/hooks/useResponsiveWidth"
;
import
useResponsiveWidth
from
"@/hooks/useResponsiveWidth"
;
import
Loading
from
"@/pages/Loading"
;
import
Loading
from
"@/pages/Loading"
;
import
{
Routes
}
from
"@/router"
;
function
Root
()
{
const
HomeLayout
=
()
=>
{
const
navigateTo
=
useNavigateTo
();
const
location
=
useLocation
();
const
{
sm
}
=
useResponsiveWidth
();
const
{
sm
}
=
useResponsiveWidth
();
const
currentUser
=
useCurrentUser
();
const
[
collapsed
,
setCollapsed
]
=
useLocalStorage
<
boolean
>
(
"navigation-collapsed"
,
false
);
const
[
collapsed
,
setCollapsed
]
=
useLocalStorage
<
boolean
>
(
"navigation-collapsed"
,
false
);
// Redirect to explore page if not logged in.
if
(
!
currentUser
&&
([
Routes
.
HOME
,
Routes
.
TIMELINE
,
Routes
.
RESOURCES
,
Routes
.
INBOX
,
Routes
.
ARCHIVED
,
Routes
.
SETTING
]
as
string
[]).
includes
(
location
.
pathname
,
)
)
{
navigateTo
(
"/explore"
);
return
;
}
return
(
return
(
<
div
className=
"w-full min-h-full"
>
<
div
className=
"w-full min-h-full"
>
<
div
<
div
...
@@ -56,6 +73,6 @@ function Root() {
...
@@ -56,6 +73,6 @@ function Root() {
</
div
>
</
div
>
</
div
>
</
div
>
);
);
}
}
;
export
default
Roo
t
;
export
default
HomeLayou
t
;
web/src/main.tsx
View file @
dfe29ec7
...
@@ -9,6 +9,7 @@ import "./css/global.css";
...
@@ -9,6 +9,7 @@ import "./css/global.css";
import
"./css/tailwind.css"
;
import
"./css/tailwind.css"
;
import
"./helpers/polyfill"
;
import
"./helpers/polyfill"
;
import
"./i18n"
;
import
"./i18n"
;
import
CommonContextProvider
from
"./layouts/CommonContextProvider"
;
import
"./less/highlight.less"
;
import
"./less/highlight.less"
;
import
router
from
"./router"
;
import
router
from
"./router"
;
import
store
from
"./store"
;
import
store
from
"./store"
;
...
@@ -25,7 +26,9 @@ import theme from "./theme";
...
@@ -25,7 +26,9 @@ import theme from "./theme";
root
.
render
(
root
.
render
(
<
Provider
store=
{
store
}
>
<
Provider
store=
{
store
}
>
<
CssVarsProvider
theme=
{
theme
}
>
<
CssVarsProvider
theme=
{
theme
}
>
<
RouterProvider
router=
{
router
}
/>
<
CommonContextProvider
>
<
RouterProvider
router=
{
router
}
/>
</
CommonContextProvider
>
<
Toaster
position=
"top-right"
/>
<
Toaster
position=
"top-right"
/>
</
CssVarsProvider
>
</
CssVarsProvider
>
</
Provider
>,
</
Provider
>,
...
...
web/src/router/AuthStatusProvider.tsx
deleted
100644 → 0
View file @
db56e1b5
import
{
useEffect
}
from
"react"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
useNavigateTo
from
"@/hooks/useNavigateTo"
;
interface
Props
{
children
:
React
.
ReactNode
;
}
const
AuthStatusProvider
=
(
props
:
Props
)
=>
{
const
navigateTo
=
useNavigateTo
();
const
currentUser
=
useCurrentUser
();
useEffect
(()
=>
{
if
(
!
currentUser
)
{
// If not logged in, redirect to explore page by default.
navigateTo
(
"/explore"
);
}
},
[]);
if
(
!
currentUser
)
{
return
null
;
}
return
<>
{
props
.
children
}
</>;
};
export
default
AuthStatusProvider
;
web/src/router/index.tsx
View file @
dfe29ec7
import
{
lazy
}
from
"react"
;
import
{
lazy
}
from
"react"
;
import
{
createBrowserRouter
}
from
"react-router-dom"
;
import
{
createBrowserRouter
}
from
"react-router-dom"
;
import
App
from
"@/App"
;
import
App
from
"@/App"
;
import
HomeLayout
from
"@/layouts/HomeLayout"
;
import
SuspenseWrapper
from
"@/layouts/SuspenseWrapper"
;
import
SuspenseWrapper
from
"@/layouts/SuspenseWrapper"
;
import
{
initialGlobalState
}
from
"@/store/module"
;
import
AuthStatusProvider
from
"./AuthStatusProvider"
;
const
Root
=
lazy
(()
=>
import
(
"@/layouts/Root"
));
const
SignIn
=
lazy
(()
=>
import
(
"@/pages/SignIn"
));
const
SignIn
=
lazy
(()
=>
import
(
"@/pages/SignIn"
));
const
SignUp
=
lazy
(()
=>
import
(
"@/pages/SignUp"
));
const
SignUp
=
lazy
(()
=>
import
(
"@/pages/SignUp"
));
const
AuthCallback
=
lazy
(()
=>
import
(
"@/pages/AuthCallback"
));
const
AuthCallback
=
lazy
(()
=>
import
(
"@/pages/AuthCallback"
));
...
@@ -22,23 +20,22 @@ const About = lazy(() => import("@/pages/About"));
...
@@ -22,23 +20,22 @@ const About = lazy(() => import("@/pages/About"));
const
NotFound
=
lazy
(()
=>
import
(
"@/pages/NotFound"
));
const
NotFound
=
lazy
(()
=>
import
(
"@/pages/NotFound"
));
const
PermissionDenied
=
lazy
(()
=>
import
(
"@/pages/PermissionDenied"
));
const
PermissionDenied
=
lazy
(()
=>
import
(
"@/pages/PermissionDenied"
));
const
initialGlobalStateLoader
=
async
()
=>
{
export
enum
Routes
{
try
{
HOME
=
"/"
,
await
initialGlobalState
();
TIMELINE
=
"/timeline"
,
}
catch
(
error
)
{
RESOURCES
=
"/resources"
,
// do nothing.
INBOX
=
"/inbox"
,
}
ARCHIVED
=
"/archived"
,
return
null
;
SETTING
=
"/setting"
,
}
;
}
const
router
=
createBrowserRouter
([
const
router
=
createBrowserRouter
([
{
{
path
:
"/"
,
path
:
"/"
,
element
:
<
App
/>,
element
:
<
App
/>,
loader
:
()
=>
initialGlobalStateLoader
(),
children
:
[
children
:
[
{
{
path
:
"/auth
/
"
,
path
:
"/auth"
,
element
:
<
SuspenseWrapper
/>,
element
:
<
SuspenseWrapper
/>,
children
:
[
children
:
[
{
{
...
@@ -57,55 +54,31 @@ const router = createBrowserRouter([
...
@@ -57,55 +54,31 @@ const router = createBrowserRouter([
},
},
{
{
path
:
"/"
,
path
:
"/"
,
element
:
<
Roo
t
/>,
element
:
<
HomeLayou
t
/>,
children
:
[
children
:
[
{
{
path
:
""
,
path
:
Routes
.
HOME
,
element
:
(
element
:
<
Home
/>,
<
AuthStatusProvider
>
},
<
Home
/>
{
</
AuthStatusProvider
>
path
:
Routes
.
TIMELINE
,
),
element
:
<
Timeline
/>,
},
},
{
{
path
:
"timeline"
,
path
:
Routes
.
RESOURCES
,
element
:
(
element
:
<
Resources
/>,
<
AuthStatusProvider
>
},
<
Timeline
/>
{
</
AuthStatusProvider
>
path
:
Routes
.
INBOX
,
),
element
:
<
Inboxes
/>,
},
},
{
{
path
:
"resources"
,
path
:
Routes
.
ARCHIVED
,
element
:
(
element
:
<
Archived
/>,
<
AuthStatusProvider
>
},
<
Resources
/>
{
</
AuthStatusProvider
>
path
:
Routes
.
SETTING
,
),
element
:
<
Setting
/>,
},
{
path
:
"inbox"
,
element
:
(
<
AuthStatusProvider
>
<
Inboxes
/>
</
AuthStatusProvider
>
),
},
{
path
:
"archived"
,
element
:
(
<
AuthStatusProvider
>
<
Archived
/>
</
AuthStatusProvider
>
),
},
{
path
:
"setting"
,
element
:
(
<
AuthStatusProvider
>
<
Setting
/>
</
AuthStatusProvider
>
),
},
},
{
{
path
:
"explore"
,
path
:
"explore"
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment