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
59314cdf
Commit
59314cdf
authored
Mar 03, 2024
by
Steven
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: add compact mode to memo view
parent
ac031533
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
30 additions
and
2 deletions
+30
-2
MemoView.tsx
web/src/components/MemoView.tsx
+24
-0
en.json
web/src/locales/en.json
+2
-1
MemoDetail.tsx
web/src/pages/MemoDetail.tsx
+4
-1
No files found.
web/src/components/MemoView.tsx
View file @
59314cdf
...
@@ -42,10 +42,12 @@ const MemoView: React.FC<Props> = (props: Props) => {
...
@@ -42,10 +42,12 @@ const MemoView: React.FC<Props> = (props: Props) => {
const
[
displayTime
,
setDisplayTime
]
=
useState
<
string
>
(
getRelativeTimeString
(
getTimeStampByDate
(
memo
.
displayTime
)));
const
[
displayTime
,
setDisplayTime
]
=
useState
<
string
>
(
getRelativeTimeString
(
getTimeStampByDate
(
memo
.
displayTime
)));
const
[
creator
,
setCreator
]
=
useState
(
userStore
.
getUserByUsername
(
extractUsernameFromName
(
memo
.
creator
)));
const
[
creator
,
setCreator
]
=
useState
(
userStore
.
getUserByUsername
(
extractUsernameFromName
(
memo
.
creator
)));
const
memoContainerRef
=
useRef
<
HTMLDivElement
>
(
null
);
const
memoContainerRef
=
useRef
<
HTMLDivElement
>
(
null
);
const
[
showCompactMode
,
setShowCompactMode
]
=
useState
(
false
);
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
((
relation
)
=>
relation
.
type
===
MemoRelation_Type
.
COMMENT
).
length
;
const
commentAmount
=
memo
.
relations
.
filter
((
relation
)
=>
relation
.
type
===
MemoRelation_Type
.
COMMENT
).
length
;
const
readonly
=
memo
.
creator
!==
user
?.
name
;
const
readonly
=
memo
.
creator
!==
user
?.
name
;
// Initial related data: creator.
useEffect
(()
=>
{
useEffect
(()
=>
{
(
async
()
=>
{
(
async
()
=>
{
const
user
=
await
userStore
.
getOrFetchUserByUsername
(
extractUsernameFromName
(
memo
.
creator
));
const
user
=
await
userStore
.
getOrFetchUserByUsername
(
extractUsernameFromName
(
memo
.
creator
));
...
@@ -53,6 +55,16 @@ const MemoView: React.FC<Props> = (props: Props) => {
...
@@ -53,6 +55,16 @@ const MemoView: React.FC<Props> = (props: Props) => {
})();
})();
},
[]);
},
[]);
// Initial compact mode.
useEffect
(()
=>
{
if
(
!
memoContainerRef
.
current
)
{
return
;
}
if
((
memoContainerRef
.
current
as
HTMLDivElement
).
getBoundingClientRect
().
height
>
512
)
{
setShowCompactMode
(
true
);
}
},
[]);
// Update display time string.
// Update display time string.
useEffect
(()
=>
{
useEffect
(()
=>
{
let
intervalFlag
:
any
=
-
1
;
let
intervalFlag
:
any
=
-
1
;
...
@@ -151,12 +163,24 @@ const MemoView: React.FC<Props> = (props: Props) => {
...
@@ -151,12 +163,24 @@ const MemoView: React.FC<Props> = (props: Props) => {
</
div
>
</
div
>
</
div
>
</
div
>
<
MemoContent
<
MemoContent
className=
{
showCompactMode
?
"!line-clamp-6"
:
""
}
key=
{
`${memo.id}-${memo.updateTime}`
}
key=
{
`${memo.id}-${memo.updateTime}`
}
memoId=
{
memo
.
id
}
memoId=
{
memo
.
id
}
content=
{
memo
.
content
}
content=
{
memo
.
content
}
readonly=
{
readonly
}
readonly=
{
readonly
}
onClick=
{
handleMemoContentClick
}
onClick=
{
handleMemoContentClick
}
/>
/>
{
showCompactMode
&&
(
<
div
className=
"w-full mt-2"
>
<
Link
className=
"w-auto flex flex-row justify-start items-center text-sm text-blue-600 dark:text-blue-400 hover:underline"
to=
{
`/m/${memo.name}`
}
>
<
span
>
{
t
(
"memo.show-more"
)
}
</
span
>
<
Icon
.
ChevronRight
className=
"w-4 h-auto"
/>
</
Link
>
</
div
>
)
}
<
MemoResourceListView
resources=
{
memo
.
resources
}
/>
<
MemoResourceListView
resources=
{
memo
.
resources
}
/>
<
MemoRelationListView
memo=
{
memo
}
relations=
{
referencedMemos
}
/>
<
MemoRelationListView
memo=
{
memo
}
relations=
{
referencedMemos
}
/>
<
MemoReactionistView
memo=
{
memo
}
reactions=
{
memo
.
reactions
}
/>
<
MemoReactionistView
memo=
{
memo
}
reactions=
{
memo
.
reactions
}
/>
...
...
web/src/locales/en.json
View file @
59314cdf
...
@@ -102,7 +102,8 @@
...
@@ -102,7 +102,8 @@
"comment"
:
{
"comment"
:
{
"self"
:
"Comments"
,
"self"
:
"Comments"
,
"no-comment"
:
"No comment"
"no-comment"
:
"No comment"
}
},
"show-more"
:
"Show more"
},
},
"resource"
:
{
"resource"
:
{
"no-resources"
:
"No resources."
,
"no-resources"
:
"No resources."
,
...
...
web/src/pages/MemoDetail.tsx
View file @
59314cdf
...
@@ -207,7 +207,10 @@ const MemoDetail = () => {
...
@@ -207,7 +207,10 @@ const MemoDetail = () => {
</
div
>
</
div
>
</
div
>
</
div
>
</
div
>
</
div
>
<
div
id=
"comments"
className=
"pt-8 pb-16 w-full"
>
<
div
className=
"pt-8 pb-16 w-full"
>
<
h2
id=
"comments"
className=
"sr-only"
>
Comments
</
h2
>
<
div
className=
"relative mx-auto flex-grow w-full min-h-full flex flex-col justify-start items-start gap-y-1"
>
<
div
className=
"relative mx-auto flex-grow w-full min-h-full flex flex-col justify-start items-start gap-y-1"
>
{
comments
.
length
===
0
?
(
{
comments
.
length
===
0
?
(
<
div
className=
"w-full flex flex-col justify-center items-center py-6 mb-2"
>
<
div
className=
"w-full flex flex-col justify-center items-center py-6 mb-2"
>
...
...
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