22// Licensed under the MIT License.
33import React from 'react' ;
44import { Table } from 'reactstrap' ;
5- import moment from 'moment-timezone' ;
5+ import moment , { Moment } from 'moment-timezone' ;
66import { findOneIana } from "windows-iana" ;
77import { Event } from 'microsoft-graph' ;
88import { config } from './Config' ;
99import { getUserWeekCalendar } from './GraphService' ;
1010import withAuthProvider , { AuthComponentProps } from './AuthProvider' ;
11+ import CalendarDayRow from './CalendarDayRow' ;
12+ import './Calendar.css' ;
1113
1214interface CalendarState {
1315 eventsLoaded : boolean ;
1416 events : Event [ ] ;
15- }
16-
17- export interface CalendarProps extends AuthComponentProps {
18- timeZone : any ;
19- timeFormat : any ;
20- }
21-
22- // Helper function to format Graph date/time
23- function formatDateTime ( dateTime : string | undefined ) {
24- if ( dateTime !== undefined ) {
25- return moment ( dateTime ) . format ( 'M/D/YY h:mm A' ) ;
26- }
17+ startOfWeek : Moment | undefined ;
2718}
2819
2920class Calendar extends React . Component < AuthComponentProps , CalendarState > {
3021 constructor ( props : any ) {
3122 super ( props ) ;
32- console . log ( 'Constructor: ' + JSON . stringify ( props . user ) ) ;
3323 this . state = {
3424 eventsLoaded : false ,
35- events : [ ]
25+ events : [ ] ,
26+ startOfWeek : undefined
3627 } ;
3728 }
3829
@@ -53,11 +44,16 @@ class Calendar extends React.Component<AuthComponentProps, CalendarState> {
5344 // but in UTC. For example, for Pacific Standard Time, the time value would be
5445 // 07:00:00Z
5546 var startOfWeek = moment . tz ( ianaTimeZone ! . valueOf ( ) ) . startOf ( 'week' ) . utc ( ) ;
56- console . log ( `Start of week: ${ startOfWeek } ` ) ;
47+
5748 // Get the user's events
5849 var events = await getUserWeekCalendar ( accessToken , this . props . user . timeZone , startOfWeek ) ;
50+
5951 // Update the array of events in state
60- this . setState ( { eventsLoaded : true , events : events . value } ) ;
52+ this . setState ( {
53+ eventsLoaded : true ,
54+ events : events ,
55+ startOfWeek : startOfWeek
56+ } ) ;
6157 }
6258 catch ( err ) {
6359 this . props . setError ( 'ERROR' , JSON . stringify ( err ) ) ;
@@ -67,32 +63,63 @@ class Calendar extends React.Component<AuthComponentProps, CalendarState> {
6763
6864 // <renderSnippet>
6965 render ( ) {
66+ var sunday = moment ( this . state . startOfWeek ) ;
67+ var monday = moment ( sunday ) . add ( 1 , 'day' ) ;
68+ var tuesday = moment ( monday ) . add ( 1 , 'day' ) ;
69+ var wednesday = moment ( tuesday ) . add ( 1 , 'day' ) ;
70+ var thursday = moment ( wednesday ) . add ( 1 , 'day' ) ;
71+ var friday = moment ( thursday ) . add ( 1 , 'day' ) ;
72+ var saturday = moment ( friday ) . add ( 1 , 'day' ) ;
73+
7074 return (
7175 < div >
72- < h1 > Calendar</ h1 >
73- < Table >
74- < thead >
75- < tr >
76- < th scope = "col" > Organizer</ th >
77- < th scope = "col" > Subject</ th >
78- < th scope = "col" > Start</ th >
79- < th scope = "col" > End</ th >
80- </ tr >
81- </ thead >
82- < tbody >
83- { this . state . events . map (
84- function ( event : Event ) {
85- return (
86- < tr key = { event . id } >
87- < td > { event . organizer ?. emailAddress ?. name } </ td >
88- < td > { event . subject } </ td >
89- < td > { formatDateTime ( event . start ?. dateTime ) } </ td >
90- < td > { formatDateTime ( event . end ?. dateTime ) } </ td >
91- </ tr >
92- ) ;
93- } ) }
94- </ tbody >
95- </ Table >
76+ < div className = "mb-3" >
77+ < h1 className = "mb-3" > { sunday . format ( 'MMMM D, YYYY' ) } - { saturday . format ( 'MMMM D, YYYY' ) } </ h1 >
78+ < a className = "btn btn-light btn-sm" href = "#" > New event</ a >
79+ </ div >
80+ < div className = "calendar-week" >
81+ < div className = "table-responsive" >
82+ < Table size = "sm" >
83+ < thead >
84+ < tr >
85+ < th > Date</ th >
86+ < th > Time</ th >
87+ < th > Event</ th >
88+ </ tr >
89+ </ thead >
90+ < tbody >
91+ < CalendarDayRow
92+ date = { sunday }
93+ timeFormat = { this . props . user . timeFormat }
94+ events = { this . state . events . filter ( event => moment ( event . start ?. dateTime ) . day ( ) === sunday . day ( ) ) } />
95+ < CalendarDayRow
96+ date = { monday }
97+ timeFormat = { this . props . user . timeFormat }
98+ events = { this . state . events . filter ( event => moment ( event . start ?. dateTime ) . day ( ) === monday . day ( ) ) } />
99+ < CalendarDayRow
100+ date = { tuesday }
101+ timeFormat = { this . props . user . timeFormat }
102+ events = { this . state . events . filter ( event => moment ( event . start ?. dateTime ) . day ( ) === tuesday . day ( ) ) } />
103+ < CalendarDayRow
104+ date = { wednesday }
105+ timeFormat = { this . props . user . timeFormat }
106+ events = { this . state . events . filter ( event => moment ( event . start ?. dateTime ) . day ( ) === wednesday . day ( ) ) } />
107+ < CalendarDayRow
108+ date = { thursday }
109+ timeFormat = { this . props . user . timeFormat }
110+ events = { this . state . events . filter ( event => moment ( event . start ?. dateTime ) . day ( ) === thursday . day ( ) ) } />
111+ < CalendarDayRow
112+ date = { friday }
113+ timeFormat = { this . props . user . timeFormat }
114+ events = { this . state . events . filter ( event => moment ( event . start ?. dateTime ) . day ( ) === friday . day ( ) ) } />
115+ < CalendarDayRow
116+ date = { saturday }
117+ timeFormat = { this . props . user . timeFormat }
118+ events = { this . state . events . filter ( event => moment ( event . start ?. dateTime ) . day ( ) === saturday . day ( ) ) } />
119+ </ tbody >
120+ </ Table >
121+ </ div >
122+ </ div >
96123 </ div >
97124 ) ;
98125 }
0 commit comments