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
43541bde
Unverified
Commit
43541bde
authored
Oct 29, 2022
by
boojack
Committed by
GitHub
Oct 29, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: add update version banner (#365)
feat: add update version banenr
parent
1e01c4dc
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
92 additions
and
1 deletion
+92
-1
UpdateVersionBanner.tsx
web/src/components/UpdateVersionBanner.tsx
+42
-0
api.ts
web/src/helpers/api.ts
+10
-0
home.less
web/src/less/home.less
+4
-0
Home.tsx
web/src/pages/Home.tsx
+36
-1
No files found.
web/src/components/UpdateVersionBanner.tsx
0 → 100644
View file @
43541bde
import
{
useEffect
,
useState
}
from
"react"
;
import
*
as
api
from
"../helpers/api"
;
import
Icon
from
"./Icon"
;
import
"../less/about-site-dialog.less"
;
interface
State
{
latestVersion
:
string
;
}
const
UpdateVersionBanner
:
React
.
FC
=
()
=>
{
const
[
state
,
setState
]
=
useState
<
State
>
({
latestVersion
:
""
,
});
useEffect
(()
=>
{
try
{
api
.
getRepoLatestTag
().
then
((
latestTag
)
=>
{
setState
({
latestVersion
:
latestTag
,
});
});
}
catch
(
error
)
{
// do nth
}
},
[]);
return
(
<
div
className=
"w-full flex flex-row justify-center items-center text-white bg-green-600 py-2"
>
<
a
className=
"flex flex-row justify-center items-center hover:underline"
target=
"_blank"
href=
"https://github.com/usememos/memos/releases"
rel=
"noreferrer"
>
<
Icon
.
ArrowUpCircle
className=
"w-5 h-auto mr-2"
/>
New Update
<
span
className=
"font-bold ml-1"
>
{
state
.
latestVersion
}
</
span
>
</
a
>
</
div
>
);
};
export
default
UpdateVersionBanner
;
web/src/helpers/api.ts
View file @
43541bde
...
...
@@ -189,3 +189,13 @@ export async function getRepoStarCount() {
});
return
data
.
stargazers_count
as
number
;
}
export
async
function
getRepoLatestTag
()
{
const
{
data
}
=
await
axios
.
get
(
`https://api.github.com/repos/usememos/memos/tags`
,
{
headers
:
{
Accept
:
"application/vnd.github.v3.star+json"
,
Authorization
:
""
,
},
});
return
data
[
0
].
name
as
string
;
}
web/src/less/home.less
View file @
43541bde
...
...
@@ -4,6 +4,10 @@
@apply relative top-0 w-full h-screen overflow-y-auto overflow-x-hidden;
background-color: #f6f5f4;
> .banner-wrapper {
@apply w-full flex flex-col justify-start items-center;
}
> .page-container {
@apply relative w-full min-h-screen mx-auto flex flex-row justify-start sm:justify-center items-start;
...
...
web/src/pages/Home.tsx
View file @
43541bde
import
{
useEffect
}
from
"react"
;
import
{
useEffect
,
useState
}
from
"react"
;
import
{
useTranslation
}
from
"react-i18next"
;
import
{
useLocation
}
from
"react-router-dom"
;
import
*
as
api
from
"../helpers/api"
;
import
{
globalService
,
userService
}
from
"../services"
;
import
{
useAppSelector
}
from
"../store"
;
import
toastHelper
from
"../components/Toast"
;
...
...
@@ -9,12 +10,45 @@ import MemosHeader from "../components/MemosHeader";
import
MemoEditor
from
"../components/MemoEditor"
;
import
MemoFilter
from
"../components/MemoFilter"
;
import
MemoList
from
"../components/MemoList"
;
import
UpdateVersionBanner
from
"../components/UpdateVersionBanner"
;
import
"../less/home.less"
;
interface
State
{
shouldShowUpdateVersionBanner
:
boolean
;
}
function
Home
()
{
const
{
t
}
=
useTranslation
();
const
location
=
useLocation
();
const
user
=
useAppSelector
((
state
)
=>
state
.
user
.
user
);
const
[
state
,
setState
]
=
useState
<
State
>
({
shouldShowUpdateVersionBanner
:
false
,
});
useEffect
(()
=>
{
Promise
.
all
([
api
.
getRepoLatestTag
(),
api
.
getSystemStatus
()])
.
then
(
([
latestTag
,
{
data
:
{
data
:
{
profile
},
},
},
])
=>
{
const
latestVersion
=
latestTag
.
slice
(
1
)
||
"0.0.0"
;
const
currentVersion
=
profile
.
version
;
if
(
latestVersion
>
currentVersion
)
{
setState
({
shouldShowUpdateVersionBanner
:
true
,
});
}
}
)
.
catch
(()
=>
{
// do nth
});
},
[]);
useEffect
(()
=>
{
const
{
owner
}
=
userService
.
getState
();
...
...
@@ -34,6 +68,7 @@ function Home() {
return
(
<
section
className=
"page-wrapper home"
>
<
div
className=
"banner-wrapper"
>
{
state
.
shouldShowUpdateVersionBanner
&&
<
UpdateVersionBanner
/>
}
</
div
>
<
div
className=
"page-container"
>
<
Sidebar
/>
<
main
className=
"memos-wrapper"
>
...
...
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