@@ -15,7 +15,7 @@ import {
1515 format ,
1616 isAfter ,
1717 isBefore , isEqual ,
18- min
18+ min , parseISO
1919} from "date-fns" ;
2020import {
2121 createTheme ,
@@ -46,6 +46,7 @@ import {usePathname, useRouter, useSearchParams} from "next/navigation";
4646import CustomMilestoneDialog , { CustomMilestoneDialogRef , Milestone } from "@/components/CustomMilestoneDialog" ;
4747import useMilestones from "@/hooks/useMilestones" ;
4848import { twColorToHex } from "@/utils/colorUtil" ;
49+ import useStorage from "@/hooks/useStorage" ;
4950
5051export default function Home ( ) {
5152 const [ maxYear , setMaxYear ] = useState ( 80 )
@@ -56,6 +57,8 @@ export default function Home() {
5657 const searchParams = useSearchParams ( )
5758 const pathname = usePathname ( )
5859
60+ const { save, load} = useStorage ( )
61+
5962 const array = useMemo ( ( ) => {
6063 return Array . from ( { length : unit * maxYear } , ( v , k ) => k )
6164 } , [ unit , maxYear ] )
@@ -80,6 +83,11 @@ export default function Home() {
8083 format ( value , 'yyyy-MM-dd' )
8184 setValidDate ( true )
8285 confirmDefaultMilestone ( value )
86+ save ( {
87+ user : {
88+ birthday : value
89+ }
90+ } )
8391 } catch ( e ) {
8492 setValidDate ( false )
8593 }
@@ -250,13 +258,14 @@ export default function Home() {
250258
251259 const timelineItems = useMemo ( ( ) => {
252260 if ( validDate ) {
253- return milestones . map ( it => {
254- return {
255- startDate : it . startDate ,
256- label : it . label ,
257- color : it . color
258- }
259- } )
261+ return milestones . filter ( it => it . startDate !== undefined )
262+ . map ( it => {
263+ return {
264+ startDate : it . startDate ,
265+ label : it . label ,
266+ color : it . color
267+ }
268+ } )
260269 } else {
261270 return [ ]
262271 }
@@ -273,17 +282,16 @@ export default function Home() {
273282 )
274283
275284 useEffect ( ( ) => {
276- const params = new URLSearchParams ( searchParams )
277- const maxYear = params . get ( 'maxYear' )
278- if ( maxYear ) {
279- setMaxYear ( parseInt ( maxYear ) )
280- }
281- const unit = params . get ( 'unit' )
282- if ( unit ) {
283- setUnit ( parseInt ( unit ) )
285+ const data = load ( )
286+ if ( data ?. user ) {
287+ if ( data . user . birthday ) {
288+ setBirthday ( parseISO ( data . user . birthday ) )
289+ setValidDate ( true )
290+ }
291+ data . user . maxYear && setMaxYear ( data . user . maxYear )
292+ data . user . unit && setUnit ( data . user . unit )
284293 }
285-
286- } , [ ] ) ;
294+ } , [ ] )
287295
288296 const customMilestoneRef = useRef < CustomMilestoneDialogRef > ( null )
289297 const [ hoveredIndex , setHoveredIndex ] = useState < number | null > ( null ) ;
@@ -310,13 +318,21 @@ export default function Home() {
310318 type = 'number'
311319 onChange = { ( e ) => {
312320 setMaxYear ( parseInt ( e . target . value ) )
313- router . push ( pathname + '?' + createQueryString ( 'maxYear' , e . target . value ) )
321+ save ( {
322+ user : {
323+ maxYear : parseInt ( e . target . value )
324+ }
325+ } )
314326 } } />
315327 < FormControl >
316328 < FormLabel > 显示粒度</ FormLabel >
317329 < RadioGroup row value = { unit } onChange = { ( e ) => {
318330 setUnit ( parseInt ( e . target . value ) )
319- router . push ( pathname + '?' + createQueryString ( 'unit' , e . target . value ) )
331+ save ( {
332+ user : {
333+ unit : parseInt ( e . target . value )
334+ }
335+ } )
320336 } } >
321337 < FormControlLabel value = { 365 } control = { < Radio /> } label = "日" />
322338 < FormControlLabel value = { 52 } control = { < Radio /> } label = "周" />
0 commit comments