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
b9006f8c
Commit
b9006f8c
authored
Jul 27, 2024
by
Steven
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: tweak date utils
parent
3d63d9d5
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
7 additions
and
48 deletions
+7
-48
CreateMemoRelationDialog.tsx
web/src/components/CreateMemoRelationDialog.tsx
+2
-3
UserStatisticsView.tsx
web/src/components/UserStatisticsView.tsx
+1
-1
datetime.ts
web/src/helpers/datetime.ts
+0
-31
Archived.tsx
web/src/pages/Archived.tsx
+1
-4
Explore.tsx
web/src/pages/Explore.tsx
+1
-2
Home.tsx
web/src/pages/Home.tsx
+1
-3
UserProfile.tsx
web/src/pages/UserProfile.tsx
+1
-4
No files found.
web/src/components/CreateMemoRelationDialog.tsx
View file @
b9006f8c
...
@@ -4,7 +4,6 @@ import { toast } from "react-hot-toast";
...
@@ -4,7 +4,6 @@ import { toast } from "react-hot-toast";
import
useDebounce
from
"react-use/lib/useDebounce"
;
import
useDebounce
from
"react-use/lib/useDebounce"
;
import
{
memoServiceClient
}
from
"@/grpcweb"
;
import
{
memoServiceClient
}
from
"@/grpcweb"
;
import
{
DEFAULT_LIST_MEMOS_PAGE_SIZE
}
from
"@/helpers/consts"
;
import
{
DEFAULT_LIST_MEMOS_PAGE_SIZE
}
from
"@/helpers/consts"
;
import
{
getDateTimeString
}
from
"@/helpers/datetime"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
{
Memo
}
from
"@/types/proto/api/v1/memo_service"
;
import
{
Memo
}
from
"@/types/proto/api/v1/memo_service"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
...
@@ -112,7 +111,7 @@ const CreateMemoRelationDialog: React.FC<Props> = (props: Props) => {
...
@@ -112,7 +111,7 @@ const CreateMemoRelationDialog: React.FC<Props> = (props: Props) => {
renderOption=
{
(
props
,
memo
)
=>
(
renderOption=
{
(
props
,
memo
)
=>
(
<
AutocompleteOption
{
...
props
}
>
<
AutocompleteOption
{
...
props
}
>
<
div
className=
"w-full flex flex-col justify-start items-start"
>
<
div
className=
"w-full flex flex-col justify-start items-start"
>
<
p
className=
"text-xs text-gray-400 select-none"
>
{
getDateTimeString
(
memo
.
displayTime
)
}
</
p
>
<
p
className=
"text-xs text-gray-400 select-none"
>
{
memo
.
displayTime
?.
toLocaleString
(
)
}
</
p
>
<
p
className=
"mt-0.5 text-sm leading-5 line-clamp-2"
>
{
searchText
?
getHighlightedContent
(
memo
.
content
)
:
memo
.
snippet
}
</
p
>
<
p
className=
"mt-0.5 text-sm leading-5 line-clamp-2"
>
{
searchText
?
getHighlightedContent
(
memo
.
content
)
:
memo
.
snippet
}
</
p
>
</
div
>
</
div
>
</
AutocompleteOption
>
</
AutocompleteOption
>
...
@@ -121,7 +120,7 @@ const CreateMemoRelationDialog: React.FC<Props> = (props: Props) => {
...
@@ -121,7 +120,7 @@ const CreateMemoRelationDialog: React.FC<Props> = (props: Props) => {
memos
.
map
((
memo
)
=>
(
memos
.
map
((
memo
)
=>
(
<
Chip
key=
{
memo
.
name
}
className=
"!max-w-full !rounded"
variant=
"outlined"
color=
"neutral"
>
<
Chip
key=
{
memo
.
name
}
className=
"!max-w-full !rounded"
variant=
"outlined"
color=
"neutral"
>
<
div
className=
"w-full flex flex-col justify-start items-start"
>
<
div
className=
"w-full flex flex-col justify-start items-start"
>
<
p
className=
"text-xs text-gray-400 select-none"
>
{
getDateTimeString
(
memo
.
displayTime
)
}
</
p
>
<
p
className=
"text-xs text-gray-400 select-none"
>
{
memo
.
displayTime
?.
toLocaleString
(
)
}
</
p
>
<
span
className=
"w-full text-sm leading-5 truncate"
>
{
memo
.
content
}
</
span
>
<
span
className=
"w-full text-sm leading-5 truncate"
>
{
memo
.
content
}
</
span
>
</
div
>
</
div
>
</
Chip
>
</
Chip
>
...
...
web/src/components/UserStatisticsView.tsx
View file @
b9006f8c
...
@@ -82,7 +82,7 @@ const UserStatisticsView = () => {
...
@@ -82,7 +82,7 @@ const UserStatisticsView = () => {
type=
"month"
type=
"month"
value=
{
monthString
}
value=
{
monthString
}
onFocus=
{
(
e
:
any
)
=>
e
.
target
.
showPicker
()
}
onFocus=
{
(
e
:
any
)
=>
e
.
target
.
showPicker
()
}
onChange=
{
(
e
)
=>
setMonthString
(
e
.
target
.
value
)
}
onChange=
{
(
e
)
=>
setMonthString
(
e
.
target
.
value
||
dayjs
().
format
(
"YYYY-MM"
)
)
}
/>
/>
</
div
>
</
div
>
<
div
className=
"invisible group-hover:visible flex justify-end items-center"
>
<
div
className=
"invisible group-hover:visible flex justify-end items-center"
>
...
...
web/src/helpers/datetime.ts
deleted
100644 → 0
View file @
3d63d9d5
import
i18n
from
"@/i18n"
;
export
function
getTimeStampByDate
(
t
:
Date
|
number
|
string
|
any
):
number
{
return
new
Date
(
t
).
getTime
();
}
/**
* Get a localized date and time string to provided time.
*
* If no date is provided, the current date is used.
*
* Sample outputs:
* - "en" locale: "1/30/2023, 10:05:00 PM"
* - "pt-BR" locale: "30/01/2023 22:05:00"
* - "pl" locale: "30.01.2023, 22:05:00"
*/
export
function
getDateTimeString
(
t
?:
Date
|
number
|
string
|
any
,
locale
=
i18n
.
language
):
string
{
const
tsFromDate
=
new
Date
(
getTimeStampByDate
(
t
?
t
:
Date
.
now
()));
try
{
return
tsFromDate
.
toLocaleString
(
locale
,
{
year
:
"numeric"
,
month
:
"numeric"
,
day
:
"numeric"
,
hour
:
"numeric"
,
minute
:
"numeric"
,
second
:
"numeric"
,
});
}
catch
(
error
)
{
return
tsFromDate
.
toLocaleString
();
}
}
web/src/pages/Archived.tsx
View file @
b9006f8c
...
@@ -9,7 +9,6 @@ import MemoFilters from "@/components/MemoFilters";
...
@@ -9,7 +9,6 @@ import MemoFilters from "@/components/MemoFilters";
import
MobileHeader
from
"@/components/MobileHeader"
;
import
MobileHeader
from
"@/components/MobileHeader"
;
import
SearchBar
from
"@/components/SearchBar"
;
import
SearchBar
from
"@/components/SearchBar"
;
import
{
DEFAULT_LIST_MEMOS_PAGE_SIZE
}
from
"@/helpers/consts"
;
import
{
DEFAULT_LIST_MEMOS_PAGE_SIZE
}
from
"@/helpers/consts"
;
import
{
getTimeStampByDate
}
from
"@/helpers/datetime"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
{
useMemoFilterStore
,
useMemoList
,
useMemoStore
}
from
"@/store/v1"
;
import
{
useMemoFilterStore
,
useMemoList
,
useMemoStore
}
from
"@/store/v1"
;
import
{
RowStatus
}
from
"@/types/proto/api/v1/common"
;
import
{
RowStatus
}
from
"@/types/proto/api/v1/common"
;
...
@@ -24,9 +23,7 @@ const Archived = () => {
...
@@ -24,9 +23,7 @@ const Archived = () => {
const
memoFilterStore
=
useMemoFilterStore
();
const
memoFilterStore
=
useMemoFilterStore
();
const
[
isRequesting
,
setIsRequesting
]
=
useState
(
true
);
const
[
isRequesting
,
setIsRequesting
]
=
useState
(
true
);
const
[
nextPageToken
,
setNextPageToken
]
=
useState
<
string
>
(
""
);
const
[
nextPageToken
,
setNextPageToken
]
=
useState
<
string
>
(
""
);
const
sortedMemos
=
memoList
.
value
const
sortedMemos
=
memoList
.
value
.
filter
((
memo
)
=>
memo
.
rowStatus
===
RowStatus
.
ARCHIVED
);
.
filter
((
memo
)
=>
memo
.
rowStatus
===
RowStatus
.
ARCHIVED
)
.
sort
((
a
,
b
)
=>
getTimeStampByDate
(
b
.
displayTime
)
-
getTimeStampByDate
(
a
.
displayTime
));
useEffect
(()
=>
{
useEffect
(()
=>
{
memoList
.
reset
();
memoList
.
reset
();
...
...
web/src/pages/Explore.tsx
View file @
b9006f8c
...
@@ -8,7 +8,6 @@ import MemoFilters from "@/components/MemoFilters";
...
@@ -8,7 +8,6 @@ import MemoFilters from "@/components/MemoFilters";
import
MemoView
from
"@/components/MemoView"
;
import
MemoView
from
"@/components/MemoView"
;
import
MobileHeader
from
"@/components/MobileHeader"
;
import
MobileHeader
from
"@/components/MobileHeader"
;
import
{
DEFAULT_LIST_MEMOS_PAGE_SIZE
}
from
"@/helpers/consts"
;
import
{
DEFAULT_LIST_MEMOS_PAGE_SIZE
}
from
"@/helpers/consts"
;
import
{
getTimeStampByDate
}
from
"@/helpers/datetime"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
useResponsiveWidth
from
"@/hooks/useResponsiveWidth"
;
import
useResponsiveWidth
from
"@/hooks/useResponsiveWidth"
;
import
{
useMemoFilterStore
,
useMemoList
,
useMemoStore
}
from
"@/store/v1"
;
import
{
useMemoFilterStore
,
useMemoList
,
useMemoStore
}
from
"@/store/v1"
;
...
@@ -23,7 +22,7 @@ const Explore = () => {
...
@@ -23,7 +22,7 @@ const Explore = () => {
const
memoFilterStore
=
useMemoFilterStore
();
const
memoFilterStore
=
useMemoFilterStore
();
const
[
isRequesting
,
setIsRequesting
]
=
useState
(
true
);
const
[
isRequesting
,
setIsRequesting
]
=
useState
(
true
);
const
[
nextPageToken
,
setNextPageToken
]
=
useState
<
string
>
(
""
);
const
[
nextPageToken
,
setNextPageToken
]
=
useState
<
string
>
(
""
);
const
sortedMemos
=
memoList
.
value
.
sort
((
a
,
b
)
=>
getTimeStampByDate
(
b
.
displayTime
)
-
getTimeStampByDate
(
a
.
displayTime
))
;
const
sortedMemos
=
memoList
.
value
;
useEffect
(()
=>
{
useEffect
(()
=>
{
memoList
.
reset
();
memoList
.
reset
();
...
...
web/src/pages/Home.tsx
View file @
b9006f8c
...
@@ -9,7 +9,6 @@ import MemoFilters from "@/components/MemoFilters";
...
@@ -9,7 +9,6 @@ import MemoFilters from "@/components/MemoFilters";
import
MemoView
from
"@/components/MemoView"
;
import
MemoView
from
"@/components/MemoView"
;
import
MobileHeader
from
"@/components/MobileHeader"
;
import
MobileHeader
from
"@/components/MobileHeader"
;
import
{
DEFAULT_LIST_MEMOS_PAGE_SIZE
}
from
"@/helpers/consts"
;
import
{
DEFAULT_LIST_MEMOS_PAGE_SIZE
}
from
"@/helpers/consts"
;
import
{
getTimeStampByDate
}
from
"@/helpers/datetime"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
useResponsiveWidth
from
"@/hooks/useResponsiveWidth"
;
import
useResponsiveWidth
from
"@/hooks/useResponsiveWidth"
;
import
{
useMemoFilterStore
,
useMemoList
,
useMemoStore
}
from
"@/store/v1"
;
import
{
useMemoFilterStore
,
useMemoList
,
useMemoStore
}
from
"@/store/v1"
;
...
@@ -27,7 +26,6 @@ const Home = () => {
...
@@ -27,7 +26,6 @@ const Home = () => {
const
[
nextPageToken
,
setNextPageToken
]
=
useState
<
string
>
(
""
);
const
[
nextPageToken
,
setNextPageToken
]
=
useState
<
string
>
(
""
);
const
sortedMemos
=
memoList
.
value
const
sortedMemos
=
memoList
.
value
.
filter
((
memo
)
=>
memo
.
rowStatus
===
RowStatus
.
ACTIVE
)
.
filter
((
memo
)
=>
memo
.
rowStatus
===
RowStatus
.
ACTIVE
)
.
sort
((
a
,
b
)
=>
getTimeStampByDate
(
b
.
displayTime
)
-
getTimeStampByDate
(
a
.
displayTime
))
.
sort
((
a
,
b
)
=>
Number
(
b
.
pinned
)
-
Number
(
a
.
pinned
));
.
sort
((
a
,
b
)
=>
Number
(
b
.
pinned
)
-
Number
(
a
.
pinned
));
useEffect
(()
=>
{
useEffect
(()
=>
{
...
@@ -52,7 +50,7 @@ const Home = () => {
...
@@ -52,7 +50,7 @@ const Home = () => {
}
else
if
(
filter
.
factor
===
"property.hasCode"
)
{
}
else
if
(
filter
.
factor
===
"property.hasCode"
)
{
filters
.
push
(
`has_code == true`
);
filters
.
push
(
`has_code == true`
);
}
else
if
(
filter
.
factor
===
"displayTime"
)
{
}
else
if
(
filter
.
factor
===
"displayTime"
)
{
const
timestampAfter
=
getTimeStampByDate
(
new
Date
(
filter
.
value
)
)
/
1000
;
const
timestampAfter
=
new
Date
(
filter
.
value
).
getTime
(
)
/
1000
;
filters
.
push
(
`display_time_after ==
${
timestampAfter
}
`
);
filters
.
push
(
`display_time_after ==
${
timestampAfter
}
`
);
filters
.
push
(
`display_time_before ==
${
timestampAfter
+
60
*
60
*
24
}
`
);
filters
.
push
(
`display_time_before ==
${
timestampAfter
+
60
*
60
*
24
}
`
);
}
}
...
...
web/src/pages/UserProfile.tsx
View file @
b9006f8c
...
@@ -10,7 +10,6 @@ import MemoView from "@/components/MemoView";
...
@@ -10,7 +10,6 @@ import MemoView from "@/components/MemoView";
import
MobileHeader
from
"@/components/MobileHeader"
;
import
MobileHeader
from
"@/components/MobileHeader"
;
import
UserAvatar
from
"@/components/UserAvatar"
;
import
UserAvatar
from
"@/components/UserAvatar"
;
import
{
DEFAULT_LIST_MEMOS_PAGE_SIZE
}
from
"@/helpers/consts"
;
import
{
DEFAULT_LIST_MEMOS_PAGE_SIZE
}
from
"@/helpers/consts"
;
import
{
getTimeStampByDate
}
from
"@/helpers/datetime"
;
import
useLoading
from
"@/hooks/useLoading"
;
import
useLoading
from
"@/hooks/useLoading"
;
import
{
useMemoFilterStore
,
useMemoList
,
useMemoStore
,
useUserStore
}
from
"@/store/v1"
;
import
{
useMemoFilterStore
,
useMemoList
,
useMemoStore
,
useUserStore
}
from
"@/store/v1"
;
import
{
User
}
from
"@/types/proto/api/v1/user_service"
;
import
{
User
}
from
"@/types/proto/api/v1/user_service"
;
...
@@ -27,9 +26,7 @@ const UserProfile = () => {
...
@@ -27,9 +26,7 @@ const UserProfile = () => {
const
memoFilterStore
=
useMemoFilterStore
();
const
memoFilterStore
=
useMemoFilterStore
();
const
[
isRequesting
,
setIsRequesting
]
=
useState
(
true
);
const
[
isRequesting
,
setIsRequesting
]
=
useState
(
true
);
const
[
nextPageToken
,
setNextPageToken
]
=
useState
<
string
>
(
""
);
const
[
nextPageToken
,
setNextPageToken
]
=
useState
<
string
>
(
""
);
const
sortedMemos
=
memoList
.
value
const
sortedMemos
=
memoList
.
value
.
sort
((
a
,
b
)
=>
Number
(
b
.
pinned
)
-
Number
(
a
.
pinned
));
.
sort
((
a
,
b
)
=>
getTimeStampByDate
(
b
.
displayTime
)
-
getTimeStampByDate
(
a
.
displayTime
))
.
sort
((
a
,
b
)
=>
Number
(
b
.
pinned
)
-
Number
(
a
.
pinned
));
useEffect
(()
=>
{
useEffect
(()
=>
{
const
username
=
params
.
username
;
const
username
=
params
.
username
;
...
...
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