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
5686fdfb
Commit
5686fdfb
authored
Feb 16, 2025
by
Johnny
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: handle redirect
parent
f5394a3e
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
23 additions
and
31 deletions
+23
-31
Link.tsx
web/src/components/MemoContent/Link.tsx
+1
-5
index.tsx
web/src/components/MemoEditor/index.tsx
+1
-5
MemoView.tsx
web/src/components/MemoView.tsx
+1
-5
ReactionSelector.tsx
web/src/components/ReactionSelector.tsx
+1
-5
MemoRelatedSettings.tsx
web/src/components/Settings/MemoRelatedSettings.tsx
+1
-3
RootLayout.tsx
web/src/layouts/RootLayout.tsx
+9
-3
MemoDetail.tsx
web/src/pages/MemoDetail.tsx
+1
-4
workspace.ts
web/src/store/v2/workspace.ts
+8
-1
No files found.
web/src/components/MemoContent/Link.tsx
View file @
5686fdfb
...
...
@@ -3,8 +3,6 @@ import { useState } from "react";
import
{
markdownServiceClient
}
from
"@/grpcweb"
;
import
{
workspaceStore
}
from
"@/store/v2"
;
import
{
LinkMetadata
}
from
"@/types/proto/api/v1/markdown_service"
;
import
{
WorkspaceMemoRelatedSetting
}
from
"@/types/proto/api/v1/workspace_setting_service"
;
import
{
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
interface
Props
{
url
:
string
;
...
...
@@ -21,9 +19,7 @@ const getFaviconWithGoogleS2 = (url: string) => {
};
const
Link
:
React
.
FC
<
Props
>
=
({
text
,
url
}:
Props
)
=>
{
const
workspaceMemoRelatedSetting
=
workspaceStore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
MEMO_RELATED
).
memoRelatedSetting
||
WorkspaceMemoRelatedSetting
.
fromPartial
({});
const
workspaceMemoRelatedSetting
=
workspaceStore
.
state
.
memoRelatedSetting
;
const
[
initialized
,
setInitialized
]
=
useState
<
boolean
>
(
false
);
const
[
showTooltip
,
setShowTooltip
]
=
useState
<
boolean
>
(
false
);
const
[
linkMetadata
,
setLinkMetadata
]
=
useState
<
LinkMetadata
|
undefined
>
();
...
...
web/src/components/MemoEditor/index.tsx
View file @
5686fdfb
...
...
@@ -20,8 +20,6 @@ import { MemoRelation, MemoRelation_Type } from "@/types/proto/api/v1/memo_relat
import
{
Location
,
Memo
,
Visibility
}
from
"@/types/proto/api/v1/memo_service"
;
import
{
Resource
}
from
"@/types/proto/api/v1/resource_service"
;
import
{
UserSetting
}
from
"@/types/proto/api/v1/user_service"
;
import
{
WorkspaceMemoRelatedSetting
}
from
"@/types/proto/api/v1/workspace_setting_service"
;
import
{
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
{
convertVisibilityFromString
,
convertVisibilityToString
}
from
"@/utils/memo"
;
import
VisibilityIcon
from
"../VisibilityIcon"
;
...
...
@@ -87,9 +85,7 @@ const MemoEditor = observer((props: Props) => {
relation
.
memo
?.
name
===
memoName
&&
relation
.
relatedMemo
?.
name
!==
memoName
&&
relation
.
type
===
MemoRelation_Type
.
REFERENCE
,
)
:
state
.
relationList
.
filter
((
relation
)
=>
relation
.
type
===
MemoRelation_Type
.
REFERENCE
);
const
workspaceMemoRelatedSetting
=
workspaceStore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
MEMO_RELATED
)?.
memoRelatedSetting
||
WorkspaceMemoRelatedSetting
.
fromPartial
({});
const
workspaceMemoRelatedSetting
=
workspaceStore
.
state
.
memoRelatedSetting
;
useEffect
(()
=>
{
editorRef
.
current
?.
setContent
(
contentCache
||
""
);
...
...
web/src/components/MemoView.tsx
View file @
5686fdfb
...
...
@@ -10,8 +10,6 @@ import { userStore, workspaceStore } from "@/store/v2";
import
{
State
}
from
"@/types/proto/api/v1/common"
;
import
{
MemoRelation_Type
}
from
"@/types/proto/api/v1/memo_relation_service"
;
import
{
Memo
,
Visibility
}
from
"@/types/proto/api/v1/memo_service"
;
import
{
WorkspaceMemoRelatedSetting
}
from
"@/types/proto/api/v1/workspace_setting_service"
;
import
{
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
import
{
cn
}
from
"@/utils"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
{
convertVisibilityToString
}
from
"@/utils/memo"
;
...
...
@@ -50,9 +48,7 @@ const MemoView: React.FC<Props> = (props: Props) => {
const
[
showEditor
,
setShowEditor
]
=
useState
<
boolean
>
(
false
);
const
[
creator
,
setCreator
]
=
useState
(
userStore
.
getUserByName
(
memo
.
creator
));
const
memoContainerRef
=
useRef
<
HTMLDivElement
>
(
null
);
const
workspaceMemoRelatedSetting
=
workspaceStore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
MEMO_RELATED
).
memoRelatedSetting
||
WorkspaceMemoRelatedSetting
.
fromPartial
({});
const
workspaceMemoRelatedSetting
=
workspaceStore
.
state
.
memoRelatedSetting
;
const
referencedMemos
=
memo
.
relations
.
filter
((
relation
)
=>
relation
.
type
===
MemoRelation_Type
.
REFERENCE
);
const
commentAmount
=
memo
.
relations
.
filter
(
(
relation
)
=>
relation
.
type
===
MemoRelation_Type
.
COMMENT
&&
relation
.
relatedMemo
?.
name
===
memo
.
name
,
...
...
web/src/components/ReactionSelector.tsx
View file @
5686fdfb
...
...
@@ -7,8 +7,6 @@ import useCurrentUser from "@/hooks/useCurrentUser";
import
{
useMemoStore
}
from
"@/store/v1"
;
import
{
workspaceStore
}
from
"@/store/v2"
;
import
{
Memo
}
from
"@/types/proto/api/v1/memo_service"
;
import
{
WorkspaceMemoRelatedSetting
}
from
"@/types/proto/api/v1/workspace_setting_service"
;
import
{
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
import
{
cn
}
from
"@/utils"
;
interface
Props
{
...
...
@@ -22,9 +20,7 @@ const ReactionSelector = (props: Props) => {
const
memoStore
=
useMemoStore
();
const
[
open
,
setOpen
]
=
useState
(
false
);
const
containerRef
=
useRef
<
HTMLDivElement
>
(
null
);
const
workspaceMemoRelatedSetting
=
workspaceStore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
MEMO_RELATED
)?.
memoRelatedSetting
||
WorkspaceMemoRelatedSetting
.
fromPartial
({});
const
workspaceMemoRelatedSetting
=
workspaceStore
.
state
.
memoRelatedSetting
;
useClickAway
(
containerRef
,
()
=>
{
setOpen
(
false
);
...
...
web/src/components/Settings/MemoRelatedSettings.tsx
View file @
5686fdfb
...
...
@@ -12,9 +12,7 @@ import { useTranslate } from "@/utils/i18n";
const
MemoRelatedSettings
=
()
=>
{
const
t
=
useTranslate
();
const
originalSetting
=
WorkspaceMemoRelatedSetting
.
fromPartial
(
workspaceStore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
MEMO_RELATED
)?.
memoRelatedSetting
||
{},
);
const
originalSetting
=
workspaceStore
.
state
.
memoRelatedSetting
;
const
[
memoRelatedSetting
,
setMemoRelatedSetting
]
=
useState
<
WorkspaceMemoRelatedSetting
>
(
originalSetting
);
const
[
editingReaction
,
setEditingReaction
]
=
useState
<
string
>
(
""
);
...
...
web/src/layouts/RootLayout.tsx
View file @
5686fdfb
import
{
observer
}
from
"mobx-react-lite"
;
import
{
Suspense
,
useEffect
,
useMemo
,
useState
}
from
"react"
;
import
{
Outlet
,
useLocation
,
useSearchParams
}
from
"react-router-dom"
;
import
usePrevious
from
"react-use/lib/usePrevious"
;
...
...
@@ -7,9 +8,10 @@ import useResponsiveWidth from "@/hooks/useResponsiveWidth";
import
Loading
from
"@/pages/Loading"
;
import
{
Routes
}
from
"@/router"
;
import
{
useMemoFilterStore
}
from
"@/store/v1"
;
import
{
workspaceStore
}
from
"@/store/v2"
;
import
{
cn
}
from
"@/utils"
;
const
RootLayout
=
()
=>
{
const
RootLayout
=
observer
(
()
=>
{
const
location
=
useLocation
();
const
[
searchParams
]
=
useSearchParams
();
const
{
sm
}
=
useResponsiveWidth
();
...
...
@@ -21,7 +23,11 @@ const RootLayout = () => {
useEffect
(()
=>
{
if
(
!
currentUser
)
{
if
(([
Routes
.
ROOT
,
Routes
.
RESOURCES
,
Routes
.
INBOX
,
Routes
.
ARCHIVED
,
Routes
.
SETTING
]
as
string
[]).
includes
(
location
.
pathname
))
{
// If disallowPublicVisibility is enabled, redirect to the login page if the user is not logged in.
if
(
workspaceStore
.
state
.
memoRelatedSetting
.
disallowPublicVisibility
)
{
window
.
location
.
href
=
Routes
.
AUTH
;
return
;
}
else
if
(([
Routes
.
ROOT
,
Routes
.
RESOURCES
,
Routes
.
INBOX
,
Routes
.
ARCHIVED
,
Routes
.
SETTING
]
as
string
[]).
includes
(
location
.
pathname
))
{
window
.
location
.
href
=
Routes
.
EXPLORE
;
return
;
}
...
...
@@ -59,6 +65,6 @@ const RootLayout = () => {
</
div
>
</
div
>
);
};
}
)
;
export
default
RootLayout
;
web/src/pages/MemoDetail.tsx
View file @
5686fdfb
...
...
@@ -15,7 +15,6 @@ import { memoNamePrefix, useMemoStore } from "@/store/v1";
import
{
workspaceStore
}
from
"@/store/v2"
;
import
{
MemoRelation_Type
}
from
"@/types/proto/api/v1/memo_relation_service"
;
import
{
Memo
}
from
"@/types/proto/api/v1/memo_service"
;
import
{
WorkspaceMemoRelatedSetting
,
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
import
{
cn
}
from
"@/utils"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
...
...
@@ -30,9 +29,7 @@ const MemoDetail = () => {
const
uid
=
params
.
uid
;
const
memoName
=
`
${
memoNamePrefix
}${
uid
}
`
;
const
memo
=
memoStore
.
getMemoByName
(
memoName
);
const
workspaceMemoRelatedSetting
=
WorkspaceMemoRelatedSetting
.
fromPartial
(
workspaceStore
.
getWorkspaceSettingByKey
(
WorkspaceSettingKey
.
MEMO_RELATED
)?.
memoRelatedSetting
||
{},
);
const
workspaceMemoRelatedSetting
=
workspaceStore
.
state
.
memoRelatedSetting
;
const
[
parentMemo
,
setParentMemo
]
=
useState
<
Memo
|
undefined
>
(
undefined
);
const
[
showCommentEditor
,
setShowCommentEditor
]
=
useState
(
false
);
const
commentRelations
=
...
...
web/src/store/v2/workspace.ts
View file @
5686fdfb
...
...
@@ -2,7 +2,7 @@ import { uniqBy } from "lodash-es";
import
{
makeAutoObservable
}
from
"mobx"
;
import
{
workspaceServiceClient
,
workspaceSettingServiceClient
}
from
"@/grpcweb"
;
import
{
WorkspaceProfile
}
from
"@/types/proto/api/v1/workspace_service"
;
import
{
WorkspaceGeneralSetting
,
WorkspaceSetting
}
from
"@/types/proto/api/v1/workspace_setting_service"
;
import
{
WorkspaceGeneralSetting
,
Workspace
MemoRelatedSetting
,
Workspace
Setting
}
from
"@/types/proto/api/v1/workspace_setting_service"
;
import
{
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
import
{
isValidateLocale
}
from
"@/utils/i18n"
;
import
{
workspaceSettingNamePrefix
}
from
"../v1"
;
...
...
@@ -20,6 +20,13 @@ class LocalState {
);
}
get
memoRelatedSetting
()
{
return
(
this
.
settings
.
find
((
setting
)
=>
setting
.
name
===
`
${
workspaceSettingNamePrefix
}${
WorkspaceSettingKey
.
MEMO_RELATED
}
`
)
?.
memoRelatedSetting
||
WorkspaceMemoRelatedSetting
.
fromPartial
({})
);
}
constructor
()
{
makeAutoObservable
(
this
);
}
...
...
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