11import { TableColumn , TableDataType } from "cdm/FolderModel" ;
22import { CellContext } from "components/contexts/CellContext" ;
3- import { StyleVariables } from "helpers/Constants" ;
3+ import { ActionTypes , StyleVariables } from "helpers/Constants" ;
44import React , { useContext , useState } from "react" ;
55import Calendar from "react-calendar" ;
66import ReactDOM from "react-dom" ;
77import { DateTime } from "luxon" ;
88import { usePopper } from "react-popper" ;
9+ import { Cell } from "react-table" ;
10+ import NoteInfo from "services/NoteInfo" ;
911
1012type CalendarProps = {
1113 intialState : TableDataType ;
1214 column : TableColumn ;
15+ cellProperties : Cell ;
1316} ;
1417const CalendarPortal = ( calendarProps : CalendarProps ) => {
15- const { column } = calendarProps ;
18+ const { column, cellProperties } = calendarProps ;
19+ const dataDispatch = ( cellProperties as any ) . dataDispatch ;
1620 const [ showCalendar , setShowCalendar ] = useState ( false ) ;
1721 // Selector reference state
1822 const [ calendarRef , setCalendarRef ] = useState ( null ) ;
1923 // Selector popper state
2024 const [ selectPop , setSelectPop ] = useState ( null ) ;
2125 const { styles, attributes } = usePopper ( calendarRef , selectPop ) ;
2226 /** state of cell value */
23- const { value , setValue } = useContext ( CellContext ) ;
27+ const { contextValue , setContextValue } = useContext ( CellContext ) ;
2428
25- let initialDate = new Date ( ) ;
26- if ( DateTime . isDateTime ( value . value ) ) {
27- initialDate = DateTime . fromFormat ( value . value , "yyyy-MM-dd" ) . toJSDate ( ) ;
28- }
29- const [ calendarState , setCalendarState ] = useState ( initialDate ) ;
29+ /** Note info of current Cell */
30+ const note : NoteInfo = ( cellProperties . row . original as any ) . note ;
31+
32+ const [ calendarState , setCalendarState ] = useState (
33+ DateTime . isDateTime ( contextValue . value )
34+ ? contextValue . value . toJSDate ( )
35+ : new Date ( )
36+ ) ;
3037
3138 function handleCalendarChange ( date : Date ) {
39+ const newValue = DateTime . fromJSDate ( date ) ;
40+ // save on disk
41+ dataDispatch ( {
42+ type : ActionTypes . UPDATE_CELL ,
43+ file : note . getFile ( ) ,
44+ key : ( cellProperties . column as any ) . key ,
45+ value : DateTime . fromJSDate ( date ) . toFormat ( "yyyy-MM-dd" ) ,
46+ row : cellProperties . row ,
47+ columnId : ( cellProperties . column as any ) . id ,
48+ } ) ;
3249 setCalendarState ( date ) ;
3350 setShowCalendar ( false ) ;
34- setValue ( {
35- value : DateTime . fromJSDate ( date ) . toFormat ( "yyyy-MM-dd" ) ,
51+ setContextValue ( {
52+ value : newValue ,
3653 update : true ,
3754 } ) ;
3855 }
@@ -57,7 +74,7 @@ const CalendarPortal = (calendarProps: CalendarProps) => {
5774 padding : "0.5rem" ,
5875 background : StyleVariables . BACKGROUND_SECONDARY ,
5976 } }
60- onBlur = { ( ) => setShowCalendar ( false ) }
77+ onMouseLeave = { ( ) => setShowCalendar ( false ) }
6178 >
6279 < Calendar onChange = { handleCalendarChange } value = { calendarState } />
6380 </ div >
@@ -69,8 +86,13 @@ const CalendarPortal = (calendarProps: CalendarProps) => {
6986 className = "data-input calendar"
7087 ref = { setCalendarRef }
7188 onClick = { handlerOnClick }
89+ onBlur = { ( ) => setShowCalendar ( false ) }
7290 >
73- < span > { value . value } </ span >
91+ < span >
92+ { DateTime . isDateTime ( contextValue . value )
93+ ? contextValue . value . toFormat ( "yyyy-MM-dd" )
94+ : "" }
95+ </ span >
7496 </ div >
7597 { showCalendar &&
7698 ReactDOM . createPortal (
0 commit comments