1- import { useEffect , useState } from 'react'
1+ import { useEffect , useMemo , useState } from 'react'
22import { HiSparkles } from 'react-icons/hi'
33import ReactMarkdown from 'react-markdown'
44import BeatLoader from 'react-spinners/BeatLoader'
@@ -8,6 +8,7 @@ import { getAppVersion } from 'src/utils/Os'
88import { format } from 'timeago.js'
99import { useGetVersions } from '../api/getVersions'
1010import { useChangelogStore } from '../stores/changelog'
11+ import { isVersionLowerOrEqual } from '../utils/semver'
1112
1213export const Changelog = ( ) => {
1314 const tooltipId = 'tl-1'
@@ -19,10 +20,15 @@ export const Changelog = () => {
1920 } = useGetVersions ( {
2021 config : {
2122 enabled : tooltipShown ,
23+ select : ( data ) => {
24+ const currentVersion = getAppVersion ( )
25+ if ( ! currentVersion ) return data
26+ return data . filter ( ( item ) => isVersionLowerOrEqual ( item . name , currentVersion ) )
27+ } ,
2228 } ,
2329 } )
2430
25- const { lastReadVersion, setVersionAsRead } = useChangelogStore ( )
31+ const { lastReadVersion, markVersionAsRead } = useChangelogStore ( )
2632
2733 const isChangelogRead = ( ) : boolean => {
2834 return lastReadVersion === getAppVersion ( )
@@ -34,11 +40,31 @@ export const Changelog = () => {
3440 trackChangeLogOpen ( )
3541
3642 if ( currentVersion ) {
37- setVersionAsRead ( currentVersion )
43+ markVersionAsRead ( currentVersion )
3844 }
3945 }
40- } , [ tooltipShown , setVersionAsRead ] )
46+ } , [ tooltipShown , markVersionAsRead ] )
4147
48+ const versionsMemo = useMemo ( ( ) => {
49+ return ( versions || [ ] ) . map ( ( item ) => {
50+ return (
51+ < div key = { item . name } >
52+ < div className = "tooltipHeader" >
53+ < a
54+ href = "/#"
55+ className = "tooltipVersion"
56+ onClick = { ( ) => window . open ( item . html_url , '_blank' ) } >
57+ { item . name }
58+ </ a >
59+ < span className = "tooltipDate" > { format ( new Date ( item . published_at ) ) } </ span >
60+ </ div >
61+ < div className = "tooltipContent" >
62+ < ReactMarkdown children = { item . body } />
63+ </ div >
64+ </ div >
65+ )
66+ } )
67+ } , [ versions ] )
4268 return (
4369 < >
4470 < ReactTooltip
@@ -58,24 +84,7 @@ export const Changelog = () => {
5884 ) : isError || ! versions . length ? (
5985 < p className = "tooltipErrorMsg" > Failed to load the changelog</ p >
6086 ) : (
61- versions . map ( ( item ) => {
62- return (
63- < div key = { item . name } >
64- < div className = "tooltipHeader" >
65- < a
66- href = "/#"
67- className = "tooltipVersion"
68- onClick = { ( ) => window . open ( item . html_url , '_blank' ) } >
69- { item . name }
70- </ a >
71- < span className = "tooltipDate" > { format ( new Date ( item . published_at ) ) } </ span >
72- </ div >
73- < div className = "tooltipContent" >
74- < ReactMarkdown children = { item . body } />
75- </ div >
76- </ div >
77- )
78- } )
87+ versionsMemo
7988 ) }
8089 </ ReactTooltip >
8190 < button
0 commit comments