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
11b9c240
Commit
11b9c240
authored
Feb 11, 2025
by
Johnny
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactor: workspace setting store
parent
e27f6f0c
Changes
21
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
73 additions
and
124 deletions
+73
-124
App.tsx
web/src/App.tsx
+1
-1
ActivityCalendar.tsx
web/src/components/ActivityCalendar.tsx
+2
-7
Link.tsx
web/src/components/MemoContent/Link.tsx
+2
-3
index.tsx
web/src/components/MemoEditor/index.tsx
+3
-4
MemoView.tsx
web/src/components/MemoView.tsx
+3
-3
MobileHeader.tsx
web/src/components/MobileHeader.tsx
+2
-6
ReactionSelector.tsx
web/src/components/ReactionSelector.tsx
+3
-3
MemoRelatedSettings.tsx
web/src/components/Settings/MemoRelatedSettings.tsx
+4
-4
StorageSection.tsx
web/src/components/Settings/StorageSection.tsx
+6
-6
WorkspaceSection.tsx
web/src/components/Settings/WorkspaceSection.tsx
+5
-5
UpdateAccountDialog.tsx
web/src/components/UpdateAccountDialog.tsx
+3
-5
UpdateCustomizedProfileDialog.tsx
web/src/components/UpdateCustomizedProfileDialog.tsx
+5
-7
UserBanner.tsx
web/src/components/UserBanner.tsx
+2
-6
AdminSignIn.tsx
web/src/pages/AdminSignIn.tsx
+1
-6
MemoDetail.tsx
web/src/pages/MemoDetail.tsx
+3
-3
Setting.tsx
web/src/pages/Setting.tsx
+1
-3
SignIn.tsx
web/src/pages/SignIn.tsx
+2
-6
SignUp.tsx
web/src/pages/SignUp.tsx
+2
-6
index.ts
web/src/store/v1/index.ts
+0
-1
workspaceSetting.ts
web/src/store/v1/workspaceSetting.ts
+0
-33
workspace.ts
web/src/store/v2/workspace.ts
+23
-6
No files found.
web/src/App.tsx
View file @
11b9c240
...
@@ -13,7 +13,7 @@ const App = observer(() => {
...
@@ -13,7 +13,7 @@ const App = observer(() => {
const
{
mode
,
setMode
}
=
useColorScheme
();
const
{
mode
,
setMode
}
=
useColorScheme
();
const
workspaceProfile
=
workspaceStore
.
state
.
profile
;
const
workspaceProfile
=
workspaceStore
.
state
.
profile
;
const
userSetting
=
userStore
.
state
.
userSetting
;
const
userSetting
=
userStore
.
state
.
userSetting
;
const
workspaceGeneralSetting
=
workspaceStore
.
generalSetting
;
const
workspaceGeneralSetting
=
workspaceStore
.
state
.
generalSetting
;
// Redirect to sign up page if no instance owner.
// Redirect to sign up page if no instance owner.
useEffect
(()
=>
{
useEffect
(()
=>
{
...
...
web/src/components/ActivityCalendar.tsx
View file @
11b9c240
import
{
Tooltip
}
from
"@mui/joy"
;
import
{
Tooltip
}
from
"@mui/joy"
;
import
dayjs
from
"dayjs"
;
import
dayjs
from
"dayjs"
;
import
{
useWorkspaceSettingStore
}
from
"@/store/v1"
;
import
{
workspaceStore
}
from
"@/store/v2"
;
import
{
WorkspaceGeneralSetting
}
from
"@/types/proto/api/v1/workspace_setting_service"
;
import
{
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
import
{
cn
}
from
"@/utils"
;
import
{
cn
}
from
"@/utils"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
...
@@ -32,10 +30,7 @@ const getCellAdditionalStyles = (count: number, maxCount: number) => {
...
@@ -32,10 +30,7 @@ const getCellAdditionalStyles = (count: number, maxCount: number) => {
const
ActivityCalendar
=
(
props
:
Props
)
=>
{
const
ActivityCalendar
=
(
props
:
Props
)
=>
{
const
t
=
useTranslate
();
const
t
=
useTranslate
();
const
{
month
:
monthStr
,
data
,
onClick
}
=
props
;
const
{
month
:
monthStr
,
data
,
onClick
}
=
props
;
const
workspaceSettingStore
=
useWorkspaceSettingStore
();
const
weekStartDayOffset
=
workspaceStore
.
state
.
generalSetting
.
weekStartDayOffset
;
const
weekStartDayOffset
=
(
workspaceSettingStore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
GENERAL
).
generalSetting
||
WorkspaceGeneralSetting
.
fromPartial
({})
).
weekStartDayOffset
;
const
year
=
dayjs
(
monthStr
).
toDate
().
getFullYear
();
const
year
=
dayjs
(
monthStr
).
toDate
().
getFullYear
();
const
month
=
dayjs
(
monthStr
).
toDate
().
getMonth
();
const
month
=
dayjs
(
monthStr
).
toDate
().
getMonth
();
...
...
web/src/components/MemoContent/Link.tsx
View file @
11b9c240
import
{
Link
as
MLink
,
Tooltip
}
from
"@mui/joy"
;
import
{
Link
as
MLink
,
Tooltip
}
from
"@mui/joy"
;
import
{
useState
}
from
"react"
;
import
{
useState
}
from
"react"
;
import
{
markdownServiceClient
}
from
"@/grpcweb"
;
import
{
markdownServiceClient
}
from
"@/grpcweb"
;
import
{
useWorkspaceSettingStore
}
from
"@/store/v1
"
;
import
{
workspaceStore
}
from
"@/store/v2
"
;
import
{
LinkMetadata
}
from
"@/types/proto/api/v1/markdown_service"
;
import
{
LinkMetadata
}
from
"@/types/proto/api/v1/markdown_service"
;
import
{
WorkspaceMemoRelatedSetting
}
from
"@/types/proto/api/v1/workspace_setting_service"
;
import
{
WorkspaceMemoRelatedSetting
}
from
"@/types/proto/api/v1/workspace_setting_service"
;
import
{
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
import
{
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
...
@@ -21,9 +21,8 @@ const getFaviconWithGoogleS2 = (url: string) => {
...
@@ -21,9 +21,8 @@ const getFaviconWithGoogleS2 = (url: string) => {
};
};
const
Link
:
React
.
FC
<
Props
>
=
({
text
,
url
}:
Props
)
=>
{
const
Link
:
React
.
FC
<
Props
>
=
({
text
,
url
}:
Props
)
=>
{
const
workspaceSettingStore
=
useWorkspaceSettingStore
();
const
workspaceMemoRelatedSetting
=
const
workspaceMemoRelatedSetting
=
workspaceS
ettingS
tore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
MEMO_RELATED
).
memoRelatedSetting
||
workspaceStore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
MEMO_RELATED
).
memoRelatedSetting
||
WorkspaceMemoRelatedSetting
.
fromPartial
({});
WorkspaceMemoRelatedSetting
.
fromPartial
({});
const
[
initialized
,
setInitialized
]
=
useState
<
boolean
>
(
false
);
const
[
initialized
,
setInitialized
]
=
useState
<
boolean
>
(
false
);
const
[
showTooltip
,
setShowTooltip
]
=
useState
<
boolean
>
(
false
);
const
[
showTooltip
,
setShowTooltip
]
=
useState
<
boolean
>
(
false
);
...
...
web/src/components/MemoEditor/index.tsx
View file @
11b9c240
...
@@ -14,8 +14,8 @@ import { TAB_SPACE_WIDTH } from "@/helpers/consts";
...
@@ -14,8 +14,8 @@ import { TAB_SPACE_WIDTH } from "@/helpers/consts";
import
{
isValidUrl
}
from
"@/helpers/utils"
;
import
{
isValidUrl
}
from
"@/helpers/utils"
;
import
useAsyncEffect
from
"@/hooks/useAsyncEffect"
;
import
useAsyncEffect
from
"@/hooks/useAsyncEffect"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
{
useMemoStore
,
useResourceStore
,
useWorkspaceSettingStore
}
from
"@/store/v1"
;
import
{
useMemoStore
,
useResourceStore
}
from
"@/store/v1"
;
import
{
userStore
}
from
"@/store/v2"
;
import
{
userStore
,
workspaceStore
}
from
"@/store/v2"
;
import
{
MemoRelation
,
MemoRelation_Type
}
from
"@/types/proto/api/v1/memo_relation_service"
;
import
{
MemoRelation
,
MemoRelation_Type
}
from
"@/types/proto/api/v1/memo_relation_service"
;
import
{
Location
,
Memo
,
Visibility
}
from
"@/types/proto/api/v1/memo_service"
;
import
{
Location
,
Memo
,
Visibility
}
from
"@/types/proto/api/v1/memo_service"
;
import
{
Resource
}
from
"@/types/proto/api/v1/resource_service"
;
import
{
Resource
}
from
"@/types/proto/api/v1/resource_service"
;
...
@@ -63,7 +63,6 @@ const MemoEditor = observer((props: Props) => {
...
@@ -63,7 +63,6 @@ const MemoEditor = observer((props: Props) => {
const
{
className
,
cacheKey
,
memoName
,
parentMemoName
,
autoFocus
,
onConfirm
,
onCancel
}
=
props
;
const
{
className
,
cacheKey
,
memoName
,
parentMemoName
,
autoFocus
,
onConfirm
,
onCancel
}
=
props
;
const
t
=
useTranslate
();
const
t
=
useTranslate
();
const
{
i18n
}
=
useTranslation
();
const
{
i18n
}
=
useTranslation
();
const
workspaceSettingStore
=
useWorkspaceSettingStore
();
const
memoStore
=
useMemoStore
();
const
memoStore
=
useMemoStore
();
const
resourceStore
=
useResourceStore
();
const
resourceStore
=
useResourceStore
();
const
currentUser
=
useCurrentUser
();
const
currentUser
=
useCurrentUser
();
...
@@ -89,7 +88,7 @@ const MemoEditor = observer((props: Props) => {
...
@@ -89,7 +88,7 @@ const MemoEditor = observer((props: Props) => {
)
)
:
state
.
relationList
.
filter
((
relation
)
=>
relation
.
type
===
MemoRelation_Type
.
REFERENCE
);
:
state
.
relationList
.
filter
((
relation
)
=>
relation
.
type
===
MemoRelation_Type
.
REFERENCE
);
const
workspaceMemoRelatedSetting
=
const
workspaceMemoRelatedSetting
=
workspaceS
ettingS
tore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
MEMO_RELATED
)?.
memoRelatedSetting
||
workspaceStore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
MEMO_RELATED
)?.
memoRelatedSetting
||
WorkspaceMemoRelatedSetting
.
fromPartial
({});
WorkspaceMemoRelatedSetting
.
fromPartial
({});
useEffect
(()
=>
{
useEffect
(()
=>
{
...
...
web/src/components/MemoView.tsx
View file @
11b9c240
...
@@ -5,7 +5,8 @@ import { Link, useLocation } from "react-router-dom";
...
@@ -5,7 +5,8 @@ import { Link, useLocation } from "react-router-dom";
import
useAsyncEffect
from
"@/hooks/useAsyncEffect"
;
import
useAsyncEffect
from
"@/hooks/useAsyncEffect"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
useNavigateTo
from
"@/hooks/useNavigateTo"
;
import
useNavigateTo
from
"@/hooks/useNavigateTo"
;
import
{
useUserStore
,
useWorkspaceSettingStore
,
useMemoStore
,
useUserStatsStore
}
from
"@/store/v1"
;
import
{
useUserStore
,
useMemoStore
,
useUserStatsStore
}
from
"@/store/v1"
;
import
{
workspaceStore
}
from
"@/store/v2"
;
import
{
State
}
from
"@/types/proto/api/v1/common"
;
import
{
State
}
from
"@/types/proto/api/v1/common"
;
import
{
MemoRelation_Type
}
from
"@/types/proto/api/v1/memo_relation_service"
;
import
{
MemoRelation_Type
}
from
"@/types/proto/api/v1/memo_relation_service"
;
import
{
Memo
,
Visibility
}
from
"@/types/proto/api/v1/memo_service"
;
import
{
Memo
,
Visibility
}
from
"@/types/proto/api/v1/memo_service"
;
...
@@ -46,13 +47,12 @@ const MemoView: React.FC<Props> = (props: Props) => {
...
@@ -46,13 +47,12 @@ const MemoView: React.FC<Props> = (props: Props) => {
const
userStore
=
useUserStore
();
const
userStore
=
useUserStore
();
const
user
=
useCurrentUser
();
const
user
=
useCurrentUser
();
const
memoStore
=
useMemoStore
();
const
memoStore
=
useMemoStore
();
const
workspaceSettingStore
=
useWorkspaceSettingStore
();
const
userStatsStore
=
useUserStatsStore
();
const
userStatsStore
=
useUserStatsStore
();
const
[
showEditor
,
setShowEditor
]
=
useState
<
boolean
>
(
false
);
const
[
showEditor
,
setShowEditor
]
=
useState
<
boolean
>
(
false
);
const
[
creator
,
setCreator
]
=
useState
(
userStore
.
getUserByName
(
memo
.
creator
));
const
[
creator
,
setCreator
]
=
useState
(
userStore
.
getUserByName
(
memo
.
creator
));
const
memoContainerRef
=
useRef
<
HTMLDivElement
>
(
null
);
const
memoContainerRef
=
useRef
<
HTMLDivElement
>
(
null
);
const
workspaceMemoRelatedSetting
=
const
workspaceMemoRelatedSetting
=
workspaceS
ettingS
tore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
MEMO_RELATED
).
memoRelatedSetting
||
workspaceStore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
MEMO_RELATED
).
memoRelatedSetting
||
WorkspaceMemoRelatedSetting
.
fromPartial
({});
WorkspaceMemoRelatedSetting
.
fromPartial
({});
const
referencedMemos
=
memo
.
relations
.
filter
((
relation
)
=>
relation
.
type
===
MemoRelation_Type
.
REFERENCE
);
const
referencedMemos
=
memo
.
relations
.
filter
((
relation
)
=>
relation
.
type
===
MemoRelation_Type
.
REFERENCE
);
const
commentAmount
=
memo
.
relations
.
filter
(
const
commentAmount
=
memo
.
relations
.
filter
(
...
...
web/src/components/MobileHeader.tsx
View file @
11b9c240
import
useWindowScroll
from
"react-use/lib/useWindowScroll"
;
import
useWindowScroll
from
"react-use/lib/useWindowScroll"
;
import
useResponsiveWidth
from
"@/hooks/useResponsiveWidth"
;
import
useResponsiveWidth
from
"@/hooks/useResponsiveWidth"
;
import
{
useWorkspaceSettingStore
}
from
"@/store/v1"
;
import
{
workspaceStore
}
from
"@/store/v2"
;
import
{
WorkspaceGeneralSetting
}
from
"@/types/proto/api/v1/workspace_setting_service"
;
import
{
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
import
{
cn
}
from
"@/utils"
;
import
{
cn
}
from
"@/utils"
;
import
NavigationDrawer
from
"./NavigationDrawer"
;
import
NavigationDrawer
from
"./NavigationDrawer"
;
...
@@ -15,9 +13,7 @@ const MobileHeader = (props: Props) => {
...
@@ -15,9 +13,7 @@ const MobileHeader = (props: Props) => {
const
{
className
,
children
}
=
props
;
const
{
className
,
children
}
=
props
;
const
{
sm
}
=
useResponsiveWidth
();
const
{
sm
}
=
useResponsiveWidth
();
const
{
y
:
offsetTop
}
=
useWindowScroll
();
const
{
y
:
offsetTop
}
=
useWindowScroll
();
const
workspaceSettingStore
=
useWorkspaceSettingStore
();
const
workspaceGeneralSetting
=
workspaceStore
.
state
.
generalSetting
;
const
workspaceGeneralSetting
=
workspaceSettingStore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
GENERAL
).
generalSetting
||
WorkspaceGeneralSetting
.
fromPartial
({});
return
(
return
(
<
div
<
div
...
...
web/src/components/ReactionSelector.tsx
View file @
11b9c240
...
@@ -4,7 +4,8 @@ import { useRef, useState } from "react";
...
@@ -4,7 +4,8 @@ import { useRef, useState } from "react";
import
useClickAway
from
"react-use/lib/useClickAway"
;
import
useClickAway
from
"react-use/lib/useClickAway"
;
import
{
memoServiceClient
}
from
"@/grpcweb"
;
import
{
memoServiceClient
}
from
"@/grpcweb"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
{
useMemoStore
,
useWorkspaceSettingStore
}
from
"@/store/v1"
;
import
{
useMemoStore
}
from
"@/store/v1"
;
import
{
workspaceStore
}
from
"@/store/v2"
;
import
{
Memo
}
from
"@/types/proto/api/v1/memo_service"
;
import
{
Memo
}
from
"@/types/proto/api/v1/memo_service"
;
import
{
WorkspaceMemoRelatedSetting
}
from
"@/types/proto/api/v1/workspace_setting_service"
;
import
{
WorkspaceMemoRelatedSetting
}
from
"@/types/proto/api/v1/workspace_setting_service"
;
import
{
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
import
{
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
...
@@ -19,11 +20,10 @@ const ReactionSelector = (props: Props) => {
...
@@ -19,11 +20,10 @@ const ReactionSelector = (props: Props) => {
const
{
memo
,
className
}
=
props
;
const
{
memo
,
className
}
=
props
;
const
currentUser
=
useCurrentUser
();
const
currentUser
=
useCurrentUser
();
const
memoStore
=
useMemoStore
();
const
memoStore
=
useMemoStore
();
const
workspaceSettingStore
=
useWorkspaceSettingStore
();
const
[
open
,
setOpen
]
=
useState
(
false
);
const
[
open
,
setOpen
]
=
useState
(
false
);
const
containerRef
=
useRef
<
HTMLDivElement
>
(
null
);
const
containerRef
=
useRef
<
HTMLDivElement
>
(
null
);
const
workspaceMemoRelatedSetting
=
const
workspaceMemoRelatedSetting
=
workspaceS
ettingS
tore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
MEMO_RELATED
)?.
memoRelatedSetting
||
workspaceStore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
MEMO_RELATED
)?.
memoRelatedSetting
||
WorkspaceMemoRelatedSetting
.
fromPartial
({});
WorkspaceMemoRelatedSetting
.
fromPartial
({});
useClickAway
(
containerRef
,
()
=>
{
useClickAway
(
containerRef
,
()
=>
{
...
...
web/src/components/Settings/MemoRelatedSettings.tsx
View file @
11b9c240
...
@@ -4,16 +4,16 @@ import { isEqual, uniq } from "lodash-es";
...
@@ -4,16 +4,16 @@ import { isEqual, uniq } from "lodash-es";
import
{
CheckIcon
}
from
"lucide-react"
;
import
{
CheckIcon
}
from
"lucide-react"
;
import
{
useState
}
from
"react"
;
import
{
useState
}
from
"react"
;
import
{
toast
}
from
"react-hot-toast"
;
import
{
toast
}
from
"react-hot-toast"
;
import
{
workspaceSettingNamePrefix
,
useWorkspaceSettingStore
}
from
"@/store/v1"
;
import
{
workspaceSettingNamePrefix
}
from
"@/store/v1"
;
import
{
workspaceStore
}
from
"@/store/v2"
;
import
{
WorkspaceMemoRelatedSetting
}
from
"@/types/proto/api/v1/workspace_setting_service"
;
import
{
WorkspaceMemoRelatedSetting
}
from
"@/types/proto/api/v1/workspace_setting_service"
;
import
{
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
import
{
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
const
MemoRelatedSettings
=
()
=>
{
const
MemoRelatedSettings
=
()
=>
{
const
t
=
useTranslate
();
const
t
=
useTranslate
();
const
workspaceSettingStore
=
useWorkspaceSettingStore
();
const
originalSetting
=
WorkspaceMemoRelatedSetting
.
fromPartial
(
const
originalSetting
=
WorkspaceMemoRelatedSetting
.
fromPartial
(
workspaceS
ettingS
tore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
MEMO_RELATED
)?.
memoRelatedSetting
||
{},
workspaceStore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
MEMO_RELATED
)?.
memoRelatedSetting
||
{},
);
);
const
[
memoRelatedSetting
,
setMemoRelatedSetting
]
=
useState
<
WorkspaceMemoRelatedSetting
>
(
originalSetting
);
const
[
memoRelatedSetting
,
setMemoRelatedSetting
]
=
useState
<
WorkspaceMemoRelatedSetting
>
(
originalSetting
);
const
[
editingReaction
,
setEditingReaction
]
=
useState
<
string
>
(
""
);
const
[
editingReaction
,
setEditingReaction
]
=
useState
<
string
>
(
""
);
...
@@ -42,7 +42,7 @@ const MemoRelatedSettings = () => {
...
@@ -42,7 +42,7 @@ const MemoRelatedSettings = () => {
}
}
try
{
try
{
await
workspaceS
ettingStore
.
se
tWorkspaceSetting
({
await
workspaceS
tore
.
upser
tWorkspaceSetting
({
name
:
`
${
workspaceSettingNamePrefix
}${
WorkspaceSettingKey
.
MEMO_RELATED
}
`
,
name
:
`
${
workspaceSettingNamePrefix
}${
WorkspaceSettingKey
.
MEMO_RELATED
}
`
,
memoRelatedSetting
,
memoRelatedSetting
,
});
});
...
...
web/src/components/Settings/StorageSection.tsx
View file @
11b9c240
...
@@ -5,7 +5,8 @@ import { HelpCircleIcon } from "lucide-react";
...
@@ -5,7 +5,8 @@ import { HelpCircleIcon } from "lucide-react";
import
React
,
{
useMemo
,
useState
}
from
"react"
;
import
React
,
{
useMemo
,
useState
}
from
"react"
;
import
{
toast
}
from
"react-hot-toast"
;
import
{
toast
}
from
"react-hot-toast"
;
import
{
Link
}
from
"react-router-dom"
;
import
{
Link
}
from
"react-router-dom"
;
import
{
workspaceSettingNamePrefix
,
useWorkspaceSettingStore
}
from
"@/store/v1"
;
import
{
workspaceSettingNamePrefix
}
from
"@/store/v1"
;
import
{
workspaceStore
}
from
"@/store/v2"
;
import
{
import
{
WorkspaceStorageSetting
,
WorkspaceStorageSetting
,
WorkspaceStorageSetting_S3Config
,
WorkspaceStorageSetting_S3Config
,
...
@@ -16,9 +17,8 @@ import { useTranslate } from "@/utils/i18n";
...
@@ -16,9 +17,8 @@ import { useTranslate } from "@/utils/i18n";
const
StorageSection
=
()
=>
{
const
StorageSection
=
()
=>
{
const
t
=
useTranslate
();
const
t
=
useTranslate
();
const
workspaceSettingStore
=
useWorkspaceSettingStore
();
const
[
workspaceStorageSetting
,
setWorkspaceStorageSetting
]
=
useState
<
WorkspaceStorageSetting
>
(
const
[
workspaceStorageSetting
,
setWorkspaceStorageSetting
]
=
useState
<
WorkspaceStorageSetting
>
(
WorkspaceStorageSetting
.
fromPartial
(
workspaceS
ettingS
tore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
STORAGE
)?.
storageSetting
||
{}),
WorkspaceStorageSetting
.
fromPartial
(
workspaceStore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
STORAGE
)?.
storageSetting
||
{}),
);
);
const
allowSaveStorageSetting
=
useMemo
(()
=>
{
const
allowSaveStorageSetting
=
useMemo
(()
=>
{
...
@@ -27,7 +27,7 @@ const StorageSection = () => {
...
@@ -27,7 +27,7 @@ const StorageSection = () => {
}
}
const
origin
=
WorkspaceStorageSetting
.
fromPartial
(
const
origin
=
WorkspaceStorageSetting
.
fromPartial
(
workspaceS
ettingS
tore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
STORAGE
)?.
storageSetting
||
{},
workspaceStore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
STORAGE
)?.
storageSetting
||
{},
);
);
if
(
workspaceStorageSetting
.
storageType
===
WorkspaceStorageSetting_StorageType
.
LOCAL
)
{
if
(
workspaceStorageSetting
.
storageType
===
WorkspaceStorageSetting_StorageType
.
LOCAL
)
{
if
(
workspaceStorageSetting
.
filepathTemplate
.
length
===
0
)
{
if
(
workspaceStorageSetting
.
filepathTemplate
.
length
===
0
)
{
...
@@ -45,7 +45,7 @@ const StorageSection = () => {
...
@@ -45,7 +45,7 @@ const StorageSection = () => {
}
}
}
}
return
!
isEqual
(
origin
,
workspaceStorageSetting
);
return
!
isEqual
(
origin
,
workspaceStorageSetting
);
},
[
workspaceStorageSetting
,
workspaceS
ettingStore
.
getState
()
]);
},
[
workspaceStorageSetting
,
workspaceS
tore
.
state
]);
const
handleMaxUploadSizeChanged
=
async
(
event
:
React
.
FocusEvent
<
HTMLInputElement
>
)
=>
{
const
handleMaxUploadSizeChanged
=
async
(
event
:
React
.
FocusEvent
<
HTMLInputElement
>
)
=>
{
let
num
=
parseInt
(
event
.
target
.
value
);
let
num
=
parseInt
(
event
.
target
.
value
);
...
@@ -113,7 +113,7 @@ const StorageSection = () => {
...
@@ -113,7 +113,7 @@ const StorageSection = () => {
};
};
const
saveWorkspaceStorageSetting
=
async
()
=>
{
const
saveWorkspaceStorageSetting
=
async
()
=>
{
await
workspaceS
ettingStore
.
se
tWorkspaceSetting
({
await
workspaceS
tore
.
upser
tWorkspaceSetting
({
name
:
`
${
workspaceSettingNamePrefix
}${
WorkspaceSettingKey
.
STORAGE
}
`
,
name
:
`
${
workspaceSettingNamePrefix
}${
WorkspaceSettingKey
.
STORAGE
}
`
,
storageSetting
:
workspaceStorageSetting
,
storageSetting
:
workspaceStorageSetting
,
});
});
...
...
web/src/components/Settings/WorkspaceSection.tsx
View file @
11b9c240
...
@@ -6,7 +6,8 @@ import { useEffect, useState } from "react";
...
@@ -6,7 +6,8 @@ import { useEffect, useState } from "react";
import
{
toast
}
from
"react-hot-toast"
;
import
{
toast
}
from
"react-hot-toast"
;
import
{
Link
}
from
"react-router-dom"
;
import
{
Link
}
from
"react-router-dom"
;
import
{
identityProviderServiceClient
}
from
"@/grpcweb"
;
import
{
identityProviderServiceClient
}
from
"@/grpcweb"
;
import
{
workspaceSettingNamePrefix
,
useWorkspaceSettingStore
}
from
"@/store/v1"
;
import
{
workspaceSettingNamePrefix
}
from
"@/store/v1"
;
import
{
workspaceStore
}
from
"@/store/v2"
;
import
{
IdentityProvider
}
from
"@/types/proto/api/v1/idp_service"
;
import
{
IdentityProvider
}
from
"@/types/proto/api/v1/idp_service"
;
import
{
WorkspaceGeneralSetting
}
from
"@/types/proto/api/v1/workspace_setting_service"
;
import
{
WorkspaceGeneralSetting
}
from
"@/types/proto/api/v1/workspace_setting_service"
;
import
{
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
import
{
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
...
@@ -15,16 +16,15 @@ import showUpdateCustomizedProfileDialog from "../UpdateCustomizedProfileDialog"
...
@@ -15,16 +16,15 @@ import showUpdateCustomizedProfileDialog from "../UpdateCustomizedProfileDialog"
const
WorkspaceSection
=
()
=>
{
const
WorkspaceSection
=
()
=>
{
const
t
=
useTranslate
();
const
t
=
useTranslate
();
const
workspaceSettingStore
=
useWorkspaceSettingStore
();
const
originalSetting
=
WorkspaceGeneralSetting
.
fromPartial
(
const
originalSetting
=
WorkspaceGeneralSetting
.
fromPartial
(
workspaceS
ettingS
tore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
GENERAL
)?.
generalSetting
||
{},
workspaceStore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
GENERAL
)?.
generalSetting
||
{},
);
);
const
[
workspaceGeneralSetting
,
setWorkspaceGeneralSetting
]
=
useState
<
WorkspaceGeneralSetting
>
(
originalSetting
);
const
[
workspaceGeneralSetting
,
setWorkspaceGeneralSetting
]
=
useState
<
WorkspaceGeneralSetting
>
(
originalSetting
);
const
[
identityProviderList
,
setIdentityProviderList
]
=
useState
<
IdentityProvider
[]
>
([]);
const
[
identityProviderList
,
setIdentityProviderList
]
=
useState
<
IdentityProvider
[]
>
([]);
useEffect
(()
=>
{
useEffect
(()
=>
{
setWorkspaceGeneralSetting
(
originalSetting
);
setWorkspaceGeneralSetting
(
originalSetting
);
},
[
workspaceS
ettingS
tore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
GENERAL
)]);
},
[
workspaceStore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
GENERAL
)]);
const
handleUpdateCustomizedProfileButtonClick
=
()
=>
{
const
handleUpdateCustomizedProfileButtonClick
=
()
=>
{
showUpdateCustomizedProfileDialog
();
showUpdateCustomizedProfileDialog
();
...
@@ -41,7 +41,7 @@ const WorkspaceSection = () => {
...
@@ -41,7 +41,7 @@ const WorkspaceSection = () => {
const
handleSaveGeneralSetting
=
async
()
=>
{
const
handleSaveGeneralSetting
=
async
()
=>
{
try
{
try
{
await
workspaceS
ettingStore
.
se
tWorkspaceSetting
({
await
workspaceS
tore
.
upser
tWorkspaceSetting
({
name
:
`
${
workspaceSettingNamePrefix
}${
WorkspaceSettingKey
.
GENERAL
}
`
,
name
:
`
${
workspaceSettingNamePrefix
}${
WorkspaceSettingKey
.
GENERAL
}
`
,
generalSetting
:
workspaceGeneralSetting
,
generalSetting
:
workspaceGeneralSetting
,
});
});
...
...
web/src/components/UpdateAccountDialog.tsx
View file @
11b9c240
...
@@ -6,9 +6,9 @@ import { useState } from "react";
...
@@ -6,9 +6,9 @@ import { useState } from "react";
import
{
toast
}
from
"react-hot-toast"
;
import
{
toast
}
from
"react-hot-toast"
;
import
{
convertFileToBase64
}
from
"@/helpers/utils"
;
import
{
convertFileToBase64
}
from
"@/helpers/utils"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
{
useUserStore
,
useWorkspaceSettingStore
}
from
"@/store/v1"
;
import
{
useUserStore
}
from
"@/store/v1"
;
import
{
workspaceStore
}
from
"@/store/v2"
;
import
{
User
as
UserPb
}
from
"@/types/proto/api/v1/user_service"
;
import
{
User
as
UserPb
}
from
"@/types/proto/api/v1/user_service"
;
import
{
WorkspaceGeneralSetting
,
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
{
generateDialog
}
from
"./Dialog"
;
import
{
generateDialog
}
from
"./Dialog"
;
import
UserAvatar
from
"./UserAvatar"
;
import
UserAvatar
from
"./UserAvatar"
;
...
@@ -34,9 +34,7 @@ const UpdateAccountDialog: React.FC<Props> = ({ destroy }: Props) => {
...
@@ -34,9 +34,7 @@ const UpdateAccountDialog: React.FC<Props> = ({ destroy }: Props) => {
email
:
currentUser
.
email
,
email
:
currentUser
.
email
,
description
:
currentUser
.
description
,
description
:
currentUser
.
description
,
});
});
const
workspaceSettingStore
=
useWorkspaceSettingStore
();
const
workspaceGeneralSetting
=
workspaceStore
.
state
.
generalSetting
;
const
workspaceGeneralSetting
=
workspaceSettingStore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
GENERAL
)?.
generalSetting
||
WorkspaceGeneralSetting
.
fromPartial
({});
const
handleCloseBtnClick
=
()
=>
{
const
handleCloseBtnClick
=
()
=>
{
destroy
();
destroy
();
...
...
web/src/components/UpdateCustomizedProfileDialog.tsx
View file @
11b9c240
...
@@ -3,8 +3,9 @@ import { Button, Input } from "@usememos/mui";
...
@@ -3,8 +3,9 @@ import { Button, Input } from "@usememos/mui";
import
{
XIcon
}
from
"lucide-react"
;
import
{
XIcon
}
from
"lucide-react"
;
import
{
useState
}
from
"react"
;
import
{
useState
}
from
"react"
;
import
{
toast
}
from
"react-hot-toast"
;
import
{
toast
}
from
"react-hot-toast"
;
import
{
workspaceSettingNamePrefix
,
useWorkspaceSettingStore
}
from
"@/store/v1"
;
import
{
workspaceSettingNamePrefix
}
from
"@/store/v1"
;
import
{
WorkspaceCustomProfile
,
WorkspaceGeneralSetting
}
from
"@/types/proto/api/v1/workspace_setting_service"
;
import
{
workspaceStore
}
from
"@/store/v2"
;
import
{
WorkspaceCustomProfile
}
from
"@/types/proto/api/v1/workspace_setting_service"
;
import
{
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
import
{
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
AppearanceSelect
from
"./AppearanceSelect"
;
import
AppearanceSelect
from
"./AppearanceSelect"
;
...
@@ -15,10 +16,7 @@ type Props = DialogProps;
...
@@ -15,10 +16,7 @@ type Props = DialogProps;
const
UpdateCustomizedProfileDialog
:
React
.
FC
<
Props
>
=
({
destroy
}:
Props
)
=>
{
const
UpdateCustomizedProfileDialog
:
React
.
FC
<
Props
>
=
({
destroy
}:
Props
)
=>
{
const
t
=
useTranslate
();
const
t
=
useTranslate
();
const
workspaceSettingStore
=
useWorkspaceSettingStore
();
const
workspaceGeneralSetting
=
workspaceStore
.
state
.
generalSetting
;
const
workspaceGeneralSetting
=
WorkspaceGeneralSetting
.
fromPartial
(
workspaceSettingStore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
GENERAL
)?.
generalSetting
||
{},
);
const
[
customProfile
,
setCustomProfile
]
=
useState
<
WorkspaceCustomProfile
>
(
const
[
customProfile
,
setCustomProfile
]
=
useState
<
WorkspaceCustomProfile
>
(
WorkspaceCustomProfile
.
fromPartial
(
workspaceGeneralSetting
.
customProfile
||
{}),
WorkspaceCustomProfile
.
fromPartial
(
workspaceGeneralSetting
.
customProfile
||
{}),
);
);
...
@@ -83,7 +81,7 @@ const UpdateCustomizedProfileDialog: React.FC<Props> = ({ destroy }: Props) => {
...
@@ -83,7 +81,7 @@ const UpdateCustomizedProfileDialog: React.FC<Props> = ({ destroy }: Props) => {
}
}
try
{
try
{
await
workspaceS
ettingStore
.
se
tWorkspaceSetting
({
await
workspaceS
tore
.
upser
tWorkspaceSetting
({
name
:
`
${
workspaceSettingNamePrefix
}${
WorkspaceSettingKey
.
GENERAL
}
`
,
name
:
`
${
workspaceSettingNamePrefix
}${
WorkspaceSettingKey
.
GENERAL
}
`
,
generalSetting
:
{
generalSetting
:
{
...
workspaceGeneralSetting
,
...
workspaceGeneralSetting
,
...
...
web/src/components/UserBanner.tsx
View file @
11b9c240
...
@@ -4,9 +4,7 @@ import { authServiceClient } from "@/grpcweb";
...
@@ -4,9 +4,7 @@ import { authServiceClient } from "@/grpcweb";
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
useNavigateTo
from
"@/hooks/useNavigateTo"
;
import
useNavigateTo
from
"@/hooks/useNavigateTo"
;
import
{
Routes
}
from
"@/router"
;
import
{
Routes
}
from
"@/router"
;
import
{
useWorkspaceSettingStore
}
from
"@/store/v1"
;
import
{
workspaceStore
}
from
"@/store/v2"
;
import
{
WorkspaceGeneralSetting
}
from
"@/types/proto/api/v1/workspace_setting_service"
;
import
{
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
import
{
cn
}
from
"@/utils"
;
import
{
cn
}
from
"@/utils"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
UserAvatar
from
"./UserAvatar"
;
import
UserAvatar
from
"./UserAvatar"
;
...
@@ -20,9 +18,7 @@ const UserBanner = (props: Props) => {
...
@@ -20,9 +18,7 @@ const UserBanner = (props: Props) => {
const
t
=
useTranslate
();
const
t
=
useTranslate
();
const
navigateTo
=
useNavigateTo
();
const
navigateTo
=
useNavigateTo
();
const
user
=
useCurrentUser
();
const
user
=
useCurrentUser
();
const
workspaceSettingStore
=
useWorkspaceSettingStore
();
const
workspaceGeneralSetting
=
workspaceStore
.
state
.
generalSetting
;
const
workspaceGeneralSetting
=
workspaceSettingStore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
GENERAL
).
generalSetting
||
WorkspaceGeneralSetting
.
fromPartial
({});
const
title
=
(
user
?
user
.
nickname
||
user
.
username
:
workspaceGeneralSetting
.
customProfile
?.
title
)
||
"Memos"
;
const
title
=
(
user
?
user
.
nickname
||
user
.
username
:
workspaceGeneralSetting
.
customProfile
?.
title
)
||
"Memos"
;
const
avatarUrl
=
(
user
?
user
.
avatarUrl
:
workspaceGeneralSetting
.
customProfile
?.
logoUrl
)
||
"/full-logo.webp"
;
const
avatarUrl
=
(
user
?
user
.
avatarUrl
:
workspaceGeneralSetting
.
customProfile
?.
logoUrl
)
||
"/full-logo.webp"
;
...
...
web/src/pages/AdminSignIn.tsx
View file @
11b9c240
...
@@ -2,15 +2,10 @@ import { observer } from "mobx-react-lite";
...
@@ -2,15 +2,10 @@ import { observer } from "mobx-react-lite";
import
AppearanceSelect
from
"@/components/AppearanceSelect"
;
import
AppearanceSelect
from
"@/components/AppearanceSelect"
;
import
LocaleSelect
from
"@/components/LocaleSelect"
;
import
LocaleSelect
from
"@/components/LocaleSelect"
;
import
PasswordSignInForm
from
"@/components/PasswordSignInForm"
;
import
PasswordSignInForm
from
"@/components/PasswordSignInForm"
;
import
{
useWorkspaceSettingStore
}
from
"@/store/v1"
;
import
{
workspaceStore
}
from
"@/store/v2"
;
import
{
workspaceStore
}
from
"@/store/v2"
;
import
{
WorkspaceGeneralSetting
}
from
"@/types/proto/api/v1/workspace_setting_service"
;
import
{
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
const
AdminSignIn
=
observer
(()
=>
{
const
AdminSignIn
=
observer
(()
=>
{
const
workspaceSettingStore
=
useWorkspaceSettingStore
();
const
workspaceGeneralSetting
=
workspaceStore
.
state
.
generalSetting
;
const
workspaceGeneralSetting
=
workspaceSettingStore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
GENERAL
).
generalSetting
||
WorkspaceGeneralSetting
.
fromPartial
({});
const
handleLocaleSelectChange
=
(
locale
:
Locale
)
=>
{
const
handleLocaleSelectChange
=
(
locale
:
Locale
)
=>
{
workspaceStore
.
state
.
setPartial
({
locale
});
workspaceStore
.
state
.
setPartial
({
locale
});
...
...
web/src/pages/MemoDetail.tsx
View file @
11b9c240
...
@@ -11,7 +11,8 @@ import MobileHeader from "@/components/MobileHeader";
...
@@ -11,7 +11,8 @@ import MobileHeader from "@/components/MobileHeader";
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
useNavigateTo
from
"@/hooks/useNavigateTo"
;
import
useNavigateTo
from
"@/hooks/useNavigateTo"
;
import
useResponsiveWidth
from
"@/hooks/useResponsiveWidth"
;
import
useResponsiveWidth
from
"@/hooks/useResponsiveWidth"
;
import
{
memoNamePrefix
,
useMemoStore
,
useWorkspaceSettingStore
}
from
"@/store/v1"
;
import
{
memoNamePrefix
,
useMemoStore
}
from
"@/store/v1"
;
import
{
workspaceStore
}
from
"@/store/v2"
;
import
{
MemoRelation_Type
}
from
"@/types/proto/api/v1/memo_relation_service"
;
import
{
MemoRelation_Type
}
from
"@/types/proto/api/v1/memo_relation_service"
;
import
{
Memo
}
from
"@/types/proto/api/v1/memo_service"
;
import
{
Memo
}
from
"@/types/proto/api/v1/memo_service"
;
import
{
WorkspaceMemoRelatedSetting
,
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
import
{
WorkspaceMemoRelatedSetting
,
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
...
@@ -24,14 +25,13 @@ const MemoDetail = () => {
...
@@ -24,14 +25,13 @@ const MemoDetail = () => {
const
params
=
useParams
();
const
params
=
useParams
();
const
navigateTo
=
useNavigateTo
();
const
navigateTo
=
useNavigateTo
();
const
{
state
:
locationState
}
=
useLocation
();
const
{
state
:
locationState
}
=
useLocation
();
const
workspaceSettingStore
=
useWorkspaceSettingStore
();
const
currentUser
=
useCurrentUser
();
const
currentUser
=
useCurrentUser
();
const
memoStore
=
useMemoStore
();
const
memoStore
=
useMemoStore
();
const
uid
=
params
.
uid
;
const
uid
=
params
.
uid
;
const
memoName
=
`
${
memoNamePrefix
}${
uid
}
`
;
const
memoName
=
`
${
memoNamePrefix
}${
uid
}
`
;
const
memo
=
memoStore
.
getMemoByName
(
memoName
);
const
memo
=
memoStore
.
getMemoByName
(
memoName
);
const
workspaceMemoRelatedSetting
=
WorkspaceMemoRelatedSetting
.
fromPartial
(
const
workspaceMemoRelatedSetting
=
WorkspaceMemoRelatedSetting
.
fromPartial
(
workspaceS
ettingS
tore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
MEMO_RELATED
)?.
memoRelatedSetting
||
{},
workspaceStore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
MEMO_RELATED
)?.
memoRelatedSetting
||
{},
);
);
const
[
parentMemo
,
setParentMemo
]
=
useState
<
Memo
|
undefined
>
(
undefined
);
const
[
parentMemo
,
setParentMemo
]
=
useState
<
Memo
|
undefined
>
(
undefined
);
const
[
showCommentEditor
,
setShowCommentEditor
]
=
useState
(
false
);
const
[
showCommentEditor
,
setShowCommentEditor
]
=
useState
(
false
);
...
...
web/src/pages/Setting.tsx
View file @
11b9c240
...
@@ -13,7 +13,6 @@ import SectionMenuItem from "@/components/Settings/SectionMenuItem";
...
@@ -13,7 +13,6 @@ import SectionMenuItem from "@/components/Settings/SectionMenuItem";
import
StorageSection
from
"@/components/Settings/StorageSection"
;
import
StorageSection
from
"@/components/Settings/StorageSection"
;
import
WorkspaceSection
from
"@/components/Settings/WorkspaceSection"
;
import
WorkspaceSection
from
"@/components/Settings/WorkspaceSection"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
{
useWorkspaceSettingStore
}
from
"@/store/v1"
;
import
{
workspaceStore
}
from
"@/store/v2"
;
import
{
workspaceStore
}
from
"@/store/v2"
;
import
{
User_Role
}
from
"@/types/proto/api/v1/user_service"
;
import
{
User_Role
}
from
"@/types/proto/api/v1/user_service"
;
import
{
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
import
{
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
...
@@ -41,7 +40,6 @@ const Setting = observer(() => {
...
@@ -41,7 +40,6 @@ const Setting = observer(() => {
const
t
=
useTranslate
();
const
t
=
useTranslate
();
const
location
=
useLocation
();
const
location
=
useLocation
();
const
user
=
useCurrentUser
();
const
user
=
useCurrentUser
();
const
workspaceSettingStore
=
useWorkspaceSettingStore
();
const
[
state
,
setState
]
=
useState
<
State
>
({
const
[
state
,
setState
]
=
useState
<
State
>
({
selectedSection
:
"my-account"
,
selectedSection
:
"my-account"
,
});
});
...
@@ -74,7 +72,7 @@ const Setting = observer(() => {
...
@@ -74,7 +72,7 @@ const Setting = observer(() => {
// Initial fetch for workspace settings.
// Initial fetch for workspace settings.
(
async
()
=>
{
(
async
()
=>
{
[
WorkspaceSettingKey
.
MEMO_RELATED
,
WorkspaceSettingKey
.
STORAGE
].
forEach
(
async
(
key
)
=>
{
[
WorkspaceSettingKey
.
MEMO_RELATED
,
WorkspaceSettingKey
.
STORAGE
].
forEach
(
async
(
key
)
=>
{
await
workspaceS
ettingS
tore
.
fetchWorkspaceSetting
(
key
);
await
workspaceStore
.
fetchWorkspaceSetting
(
key
);
});
});
})();
})();
},
[
isHost
]);
},
[
isHost
]);
...
...
web/src/pages/SignIn.tsx
View file @
11b9c240
...
@@ -11,20 +11,16 @@ import { identityProviderServiceClient } from "@/grpcweb";
...
@@ -11,20 +11,16 @@ import { identityProviderServiceClient } from "@/grpcweb";
import
{
absolutifyLink
}
from
"@/helpers/utils"
;
import
{
absolutifyLink
}
from
"@/helpers/utils"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
{
Routes
}
from
"@/router"
;
import
{
Routes
}
from
"@/router"
;
import
{
extractIdentityProviderIdFromName
,
useWorkspaceSettingStore
}
from
"@/store/v1"
;
import
{
extractIdentityProviderIdFromName
}
from
"@/store/v1"
;
import
{
workspaceStore
}
from
"@/store/v2"
;
import
{
workspaceStore
}
from
"@/store/v2"
;
import
{
IdentityProvider
,
IdentityProvider_Type
}
from
"@/types/proto/api/v1/idp_service"
;
import
{
IdentityProvider
,
IdentityProvider_Type
}
from
"@/types/proto/api/v1/idp_service"
;
import
{
WorkspaceGeneralSetting
}
from
"@/types/proto/api/v1/workspace_setting_service"
;
import
{
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
const
SignIn
=
observer
(()
=>
{
const
SignIn
=
observer
(()
=>
{
const
t
=
useTranslate
();
const
t
=
useTranslate
();
const
currentUser
=
useCurrentUser
();
const
currentUser
=
useCurrentUser
();
const
workspaceSettingStore
=
useWorkspaceSettingStore
();
const
[
identityProviderList
,
setIdentityProviderList
]
=
useState
<
IdentityProvider
[]
>
([]);
const
[
identityProviderList
,
setIdentityProviderList
]
=
useState
<
IdentityProvider
[]
>
([]);
const
workspaceGeneralSetting
=
const
workspaceGeneralSetting
=
workspaceStore
.
state
.
generalSetting
;
workspaceSettingStore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
GENERAL
).
generalSetting
||
WorkspaceGeneralSetting
.
fromPartial
({});
// Redirect to root page if already signed in.
// Redirect to root page if already signed in.
useEffect
(()
=>
{
useEffect
(()
=>
{
...
...
web/src/pages/SignUp.tsx
View file @
11b9c240
...
@@ -10,22 +10,18 @@ import LocaleSelect from "@/components/LocaleSelect";
...
@@ -10,22 +10,18 @@ import LocaleSelect from "@/components/LocaleSelect";
import
{
authServiceClient
}
from
"@/grpcweb"
;
import
{
authServiceClient
}
from
"@/grpcweb"
;
import
useLoading
from
"@/hooks/useLoading"
;
import
useLoading
from
"@/hooks/useLoading"
;
import
useNavigateTo
from
"@/hooks/useNavigateTo"
;
import
useNavigateTo
from
"@/hooks/useNavigateTo"
;
import
{
useUserStore
,
useWorkspaceSettingStore
}
from
"@/store/v1"
;
import
{
useUserStore
}
from
"@/store/v1"
;
import
{
workspaceStore
}
from
"@/store/v2"
;
import
{
workspaceStore
}
from
"@/store/v2"
;
import
{
WorkspaceGeneralSetting
}
from
"@/types/proto/api/v1/workspace_setting_service"
;
import
{
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
const
SignUp
=
observer
(()
=>
{
const
SignUp
=
observer
(()
=>
{
const
t
=
useTranslate
();
const
t
=
useTranslate
();
const
navigateTo
=
useNavigateTo
();
const
navigateTo
=
useNavigateTo
();
const
workspaceSettingStore
=
useWorkspaceSettingStore
();
const
userStore
=
useUserStore
();
const
userStore
=
useUserStore
();
const
actionBtnLoadingState
=
useLoading
(
false
);
const
actionBtnLoadingState
=
useLoading
(
false
);
const
[
username
,
setUsername
]
=
useState
(
""
);
const
[
username
,
setUsername
]
=
useState
(
""
);
const
[
password
,
setPassword
]
=
useState
(
""
);
const
[
password
,
setPassword
]
=
useState
(
""
);
const
workspaceGeneralSetting
=
const
workspaceGeneralSetting
=
workspaceStore
.
state
.
generalSetting
;
workspaceSettingStore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
GENERAL
).
generalSetting
||
WorkspaceGeneralSetting
.
fromPartial
({});
const
handleUsernameInputChanged
=
(
e
:
React
.
ChangeEvent
<
HTMLInputElement
>
)
=>
{
const
handleUsernameInputChanged
=
(
e
:
React
.
ChangeEvent
<
HTMLInputElement
>
)
=>
{
const
text
=
e
.
target
.
value
as
string
;
const
text
=
e
.
target
.
value
as
string
;
...
...
web/src/store/v1/index.ts
View file @
11b9c240
...
@@ -2,6 +2,5 @@ export * from "./user";
...
@@ -2,6 +2,5 @@ export * from "./user";
export
*
from
"./memo"
;
export
*
from
"./memo"
;
export
*
from
"./resourceName"
;
export
*
from
"./resourceName"
;
export
*
from
"./resource"
;
export
*
from
"./resource"
;
export
*
from
"./workspaceSetting"
;
export
*
from
"./memoFilter"
;
export
*
from
"./memoFilter"
;
export
*
from
"./userStats"
;
export
*
from
"./userStats"
;
web/src/store/v1/workspaceSetting.ts
deleted
100644 → 0
View file @
e27f6f0c
import
{
create
}
from
"zustand"
;
import
{
combine
}
from
"zustand/middleware"
;
import
{
workspaceSettingServiceClient
}
from
"@/grpcweb"
;
import
{
WorkspaceSetting
}
from
"@/types/proto/api/v1/workspace_setting_service"
;
import
{
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
import
{
workspaceSettingNamePrefix
}
from
"./resourceName"
;
interface
State
{
workspaceSettingByName
:
Record
<
string
,
WorkspaceSetting
>
;
}
const
getDefaultState
=
():
State
=>
({
workspaceSettingByName
:
{},
});
export
const
useWorkspaceSettingStore
=
create
(
combine
(
getDefaultState
(),
(
set
,
get
)
=>
({
getState
:
()
=>
{
return
get
();
},
fetchWorkspaceSetting
:
async
(
key
:
WorkspaceSettingKey
)
=>
{
const
setting
=
await
workspaceSettingServiceClient
.
getWorkspaceSetting
({
name
:
`
${
workspaceSettingNamePrefix
}${
key
}
`
});
set
({
workspaceSettingByName
:
{
...
get
().
workspaceSettingByName
,
[
setting
.
name
]:
setting
}
});
},
getWorkspaceSettingByKey
:
(
key
:
WorkspaceSettingKey
):
WorkspaceSetting
=>
{
return
get
().
workspaceSettingByName
[
`
${
workspaceSettingNamePrefix
}${
key
}
`
]
||
WorkspaceSetting
.
fromPartial
({});
},
setWorkspaceSetting
:
async
(
setting
:
WorkspaceSetting
)
=>
{
await
workspaceSettingServiceClient
.
setWorkspaceSetting
({
setting
});
set
({
workspaceSettingByName
:
{
...
get
().
workspaceSettingByName
,
[
setting
.
name
]:
setting
}
});
},
})),
);
web/src/store/v2/workspace.ts
View file @
11b9c240
...
@@ -13,6 +13,13 @@ class LocalState {
...
@@ -13,6 +13,13 @@ class LocalState {
profile
:
WorkspaceProfile
=
WorkspaceProfile
.
fromPartial
({});
profile
:
WorkspaceProfile
=
WorkspaceProfile
.
fromPartial
({});
settings
:
WorkspaceSetting
[]
=
[];
settings
:
WorkspaceSetting
[]
=
[];
get
generalSetting
()
{
return
(
this
.
settings
.
find
((
setting
)
=>
setting
.
name
===
`
${
workspaceSettingNamePrefix
}${
WorkspaceSettingKey
.
GENERAL
}
`
)?.
generalSetting
||
WorkspaceGeneralSetting
.
fromPartial
({})
);
}
constructor
()
{
constructor
()
{
makeAutoObservable
(
this
);
makeAutoObservable
(
this
);
}
}
...
@@ -35,10 +42,6 @@ class LocalState {
...
@@ -35,10 +42,6 @@ class LocalState {
const
workspaceStore
=
(()
=>
{
const
workspaceStore
=
(()
=>
{
const
state
=
new
LocalState
();
const
state
=
new
LocalState
();
const
generalSetting
=
state
.
settings
.
find
((
setting
)
=>
setting
.
name
===
`
${
workspaceSettingNamePrefix
}${
WorkspaceSettingKey
.
GENERAL
}
`
)?.
generalSetting
||
WorkspaceGeneralSetting
.
fromPartial
({});
const
fetchWorkspaceSetting
=
async
(
settingKey
:
WorkspaceSettingKey
)
=>
{
const
fetchWorkspaceSetting
=
async
(
settingKey
:
WorkspaceSettingKey
)
=>
{
const
setting
=
await
workspaceSettingServiceClient
.
getWorkspaceSetting
({
name
:
`
${
workspaceSettingNamePrefix
}${
settingKey
}
`
});
const
setting
=
await
workspaceSettingServiceClient
.
getWorkspaceSetting
({
name
:
`
${
workspaceSettingNamePrefix
}${
settingKey
}
`
});
state
.
setPartial
({
state
.
setPartial
({
...
@@ -46,10 +49,24 @@ const workspaceStore = (() => {
...
@@ -46,10 +49,24 @@ const workspaceStore = (() => {
});
});
};
};
const
upsertWorkspaceSetting
=
async
(
setting
:
WorkspaceSetting
)
=>
{
await
workspaceSettingServiceClient
.
setWorkspaceSetting
({
setting
});
state
.
setPartial
({
settings
:
uniqBy
([
setting
,
...
state
.
settings
],
"name"
),
});
};
const
getWorkspaceSettingByKey
=
(
settingKey
:
WorkspaceSettingKey
)
=>
{
return
(
state
.
settings
.
find
((
setting
)
=>
setting
.
name
===
`
${
workspaceSettingNamePrefix
}${
settingKey
}
`
)
||
WorkspaceSetting
.
fromPartial
({})
);
};
return
{
return
{
state
,
state
,
generalSetting
,
fetchWorkspaceSetting
,
fetchWorkspaceSetting
,
upsertWorkspaceSetting
,
getWorkspaceSettingByKey
,
};
};
})();
})();
...
@@ -60,7 +77,7 @@ export const initialWorkspaceStore = async () => {
...
@@ -60,7 +77,7 @@ export const initialWorkspaceStore = async () => {
await
workspaceStore
.
fetchWorkspaceSetting
(
key
);
await
workspaceStore
.
fetchWorkspaceSetting
(
key
);
}
}
const
workspaceGeneralSetting
=
workspaceStore
.
generalSetting
;
const
workspaceGeneralSetting
=
workspaceStore
.
state
.
generalSetting
;
workspaceStore
.
state
.
setPartial
({
workspaceStore
.
state
.
setPartial
({
locale
:
workspaceGeneralSetting
.
customProfile
?.
locale
,
locale
:
workspaceGeneralSetting
.
customProfile
?.
locale
,
appearance
:
workspaceGeneralSetting
.
customProfile
?.
appearance
,
appearance
:
workspaceGeneralSetting
.
customProfile
?.
appearance
,
...
...
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