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
deae53c1
Commit
deae53c1
authored
May 09, 2024
by
Steven
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: add dayjs to fix datetime format in safari
parent
1d99dad4
Changes
5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
3735 additions
and
2971 deletions
+3735
-2971
package.json
web/package.json
+1
-0
pnpm-lock.yaml
web/pnpm-lock.yaml
+3710
-2962
TagsSection.tsx
web/src/components/HomeSidebar/TagsSection.tsx
+5
-2
MemoView.tsx
web/src/components/MemoView.tsx
+10
-2
Timeline.tsx
web/src/pages/Timeline.tsx
+9
-5
No files found.
web/package.json
View file @
deae53c1
...
@@ -16,6 +16,7 @@
...
@@ -16,6 +16,7 @@
"@reduxjs/toolkit"
:
"^2.2.3"
,
"@reduxjs/toolkit"
:
"^2.2.3"
,
"clsx"
:
"^2.1.1"
,
"clsx"
:
"^2.1.1"
,
"copy-to-clipboard"
:
"^3.3.3"
,
"copy-to-clipboard"
:
"^3.3.3"
,
"dayjs"
:
"^1.11.11"
,
"fuse.js"
:
"^7.0.0"
,
"fuse.js"
:
"^7.0.0"
,
"highlight.js"
:
"^11.9.0"
,
"highlight.js"
:
"^11.9.0"
,
"i18next"
:
"^23.11.3"
,
"i18next"
:
"^23.11.3"
,
...
...
web/pnpm-lock.yaml
View file @
deae53c1
This diff is collapsed.
Click to expand it.
web/src/components/HomeSidebar/TagsSection.tsx
View file @
deae53c1
...
@@ -44,11 +44,14 @@ const TagsSection = () => {
...
@@ -44,11 +44,14 @@ const TagsSection = () => {
return
(
return
(
<
div
className=
"flex flex-col justify-start items-start w-full mt-3 px-1 h-auto shrink-0 flex-nowrap hide-scrollbar"
>
<
div
className=
"flex flex-col justify-start items-start w-full mt-3 px-1 h-auto shrink-0 flex-nowrap hide-scrollbar"
>
<
div
className=
"flex flex-row justify-
between items-center w-full
mb-1"
>
<
div
className=
"flex flex-row justify-
start items-center w-full gap-1
mb-1"
>
<
span
className=
"text-sm leading-6 font-mono text-gray-400 select-none"
>
{
t
(
"common.tags"
)
}
</
span
>
<
span
className=
"text-sm leading-6 font-mono text-gray-400 select-none"
>
{
t
(
"common.tags"
)
}
</
span
>
<
div
>
<
div
>
<
Tooltip
title=
{
"Rebuild"
}
placement=
"top"
>
<
Tooltip
title=
{
"Rebuild"
}
placement=
"top"
>
<
Icon
.
RefreshCcw
className=
"text-gray-400 w-4 h-auto cursor-pointer hover:opacity-80"
onClick=
{
handleRebuildMemoTags
}
/>
<
Icon
.
RefreshCcw
className=
"text-gray-400 w-4 h-auto cursor-pointer opacity-60 hover:opacity-100"
onClick=
{
handleRebuildMemoTags
}
/>
</
Tooltip
>
</
Tooltip
>
</
div
>
</
div
>
</
div
>
</
div
>
...
...
web/src/components/MemoView.tsx
View file @
deae53c1
...
@@ -22,6 +22,7 @@ import VisibilityIcon from "./VisibilityIcon";
...
@@ -22,6 +22,7 @@ import VisibilityIcon from "./VisibilityIcon";
interface
Props
{
interface
Props
{
memo
:
Memo
;
memo
:
Memo
;
displayTimeFormat
?:
"auto"
|
"time"
;
compact
?:
boolean
;
compact
?:
boolean
;
showCreator
?:
boolean
;
showCreator
?:
boolean
;
showVisibility
?:
boolean
;
showVisibility
?:
boolean
;
...
@@ -70,6 +71,13 @@ const MemoView: React.FC<Props> = (props: Props) => {
...
@@ -70,6 +71,13 @@ const MemoView: React.FC<Props> = (props: Props) => {
}
}
},
[]);
},
[]);
const
displayTime
=
props
.
displayTimeFormat
===
"time"
?
(
memo
.
displayTime
?.
toLocaleTimeString
()
)
:
(
<
relative
-
time
datetime=
{
memo
.
displayTime
?.
toISOString
()
}
format=
{
relativeTimeFormat
}
tense=
"past"
></
relative
-
time
>
);
return
(
return
(
<
div
<
div
className=
{
clsx
(
className=
{
clsx
(
...
@@ -98,13 +106,13 @@ const MemoView: React.FC<Props> = (props: Props) => {
...
@@ -98,13 +106,13 @@ const MemoView: React.FC<Props> = (props: Props) => {
className=
"w-auto -mt-0.5 text-xs leading-tight text-gray-400 dark:text-gray-500 select-none"
className=
"w-auto -mt-0.5 text-xs leading-tight text-gray-400 dark:text-gray-500 select-none"
onClick=
{
handleGotoMemoDetailPage
}
onClick=
{
handleGotoMemoDetailPage
}
>
>
<
relative
-
time
datetime=
{
memo
.
displayTime
?.
toISOString
()
}
format=
{
relativeTimeFormat
}
tense=
"past"
></
relative
-
time
>
{
displayTime
}
</
div
>
</
div
>
</
div
>
</
div
>
</
div
>
</
div
>
)
:
(
)
:
(
<
div
className=
"w-full text-sm leading-tight text-gray-400 dark:text-gray-500 select-none"
onClick=
{
handleGotoMemoDetailPage
}
>
<
div
className=
"w-full text-sm leading-tight text-gray-400 dark:text-gray-500 select-none"
onClick=
{
handleGotoMemoDetailPage
}
>
<
relative
-
time
datetime=
{
memo
.
displayTime
?.
toISOString
()
}
format=
{
relativeTimeFormat
}
tense=
"past"
></
relative
-
time
>
{
displayTime
}
</
div
>
</
div
>
)
}
)
}
</
div
>
</
div
>
...
...
web/src/pages/Timeline.tsx
View file @
deae53c1
import
{
Button
,
IconButton
}
from
"@mui/joy"
;
import
{
Button
,
IconButton
}
from
"@mui/joy"
;
import
clsx
from
"clsx"
;
import
clsx
from
"clsx"
;
import
dayjs
from
"dayjs"
;
import
{
useEffect
,
useRef
,
useState
}
from
"react"
;
import
{
useEffect
,
useRef
,
useState
}
from
"react"
;
import
ActivityCalendar
from
"@/components/ActivityCalendar"
;
import
ActivityCalendar
from
"@/components/ActivityCalendar"
;
import
Empty
from
"@/components/Empty"
;
import
Empty
from
"@/components/Empty"
;
...
@@ -31,7 +32,7 @@ const Timeline = () => {
...
@@ -31,7 +32,7 @@ const Timeline = () => {
const
[
isRequesting
,
setIsRequesting
]
=
useState
(
true
);
const
[
isRequesting
,
setIsRequesting
]
=
useState
(
true
);
const
nextPageTokenRef
=
useRef
<
string
|
undefined
>
(
undefined
);
const
nextPageTokenRef
=
useRef
<
string
|
undefined
>
(
undefined
);
const
sortedMemos
=
memoList
.
value
.
sort
((
a
,
b
)
=>
getTimeStampByDate
(
a
.
displayTime
)
-
getTimeStampByDate
(
b
.
displayTime
));
const
sortedMemos
=
memoList
.
value
.
sort
((
a
,
b
)
=>
getTimeStampByDate
(
a
.
displayTime
)
-
getTimeStampByDate
(
b
.
displayTime
));
const
monthString
=
new
Date
(
selectedDateString
).
getFullYear
()
+
"-"
+
(
new
Date
(
selectedDateString
).
getMonth
()
+
1
);
const
monthString
=
dayjs
(
selectedDateString
).
format
(
"YYYY-MM"
);
useEffect
(()
=>
{
useEffect
(()
=>
{
setIsRequesting
(
true
);
setIsRequesting
(
true
);
...
@@ -66,8 +67,7 @@ const Timeline = () => {
...
@@ -66,8 +67,7 @@ const Timeline = () => {
setActivityStats
(
setActivityStats
(
Object
.
fromEntries
(
Object
.
fromEntries
(
Object
.
entries
(
stats
).
filter
(([
date
])
=>
{
Object
.
entries
(
stats
).
filter
(([
date
])
=>
{
const
d
=
new
Date
(
date
);
return
dayjs
(
date
).
format
(
"YYYY-MM"
)
===
monthString
;
return
`
${
d
.
getFullYear
()}
-
${
d
.
getMonth
()
+
1
}
`
===
monthString
;
}),
}),
),
),
);
);
...
@@ -139,7 +139,7 @@ const Timeline = () => {
...
@@ -139,7 +139,7 @@ const Timeline = () => {
<
span
className=
"font-medium text-3xl sm:text-4xl"
>
<
span
className=
"font-medium text-3xl sm:text-4xl"
>
{
new
Date
(
selectedDateString
).
toLocaleDateString
(
i18n
.
language
,
{
month
:
"short"
,
day
:
"numeric"
})
}
{
new
Date
(
selectedDateString
).
toLocaleDateString
(
i18n
.
language
,
{
month
:
"short"
,
day
:
"numeric"
})
}
</
span
>
</
span
>
<
span
className=
"opacity-60 text-lg"
>
{
new
Date
(
monthString
).
getFullY
ear
()
}
</
span
>
<
span
className=
"opacity-60 text-lg"
>
{
dayjs
(
monthString
).
y
ear
()
}
</
span
>
</
div
>
</
div
>
<
ActivityCalendar
<
ActivityCalendar
month=
{
monthString
}
month=
{
monthString
}
...
@@ -155,7 +155,11 @@ const Timeline = () => {
...
@@ -155,7 +155,11 @@ const Timeline = () => {
key=
{
`${memo.name}-${memo.displayTime}`
}
key=
{
`${memo.name}-${memo.displayTime}`
}
className=
{
clsx
(
"relative w-full flex flex-col justify-start items-start pl-4 sm:pl-10 pt-0"
)
}
className=
{
clsx
(
"relative w-full flex flex-col justify-start items-start pl-4 sm:pl-10 pt-0"
)
}
>
>
<
MemoView
className=
"!border max-w-full !border-gray-100 dark:!border-zinc-700"
memo=
{
memo
}
/>
<
MemoView
className=
"!border max-w-full !border-gray-100 dark:!border-zinc-700"
memo=
{
memo
}
displayTimeFormat=
"time"
/>
<
div
className=
"absolute -left-2 sm:left-2 top-4 h-full"
>
<
div
className=
"absolute -left-2 sm:left-2 top-4 h-full"
>
{
index
!==
sortedMemos
.
length
-
1
&&
(
{
index
!==
sortedMemos
.
length
-
1
&&
(
<
div
className=
"absolute top-2 left-[7px] h-full w-0.5 bg-gray-200 dark:bg-gray-700 block"
></
div
>
<
div
className=
"absolute top-2 left-[7px] h-full w-0.5 bg-gray-200 dark:bg-gray-700 block"
></
div
>
...
...
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