From a693c3d6d643b88cccfda4ec9c60ce47bba8b085 Mon Sep 17 00:00:00 2001 From: Arhan Jain Date: Sun, 9 Oct 2022 16:23:07 -0700 Subject: [PATCH] UI for switching calendar view (day/week/month) (#2421) * UI for switching calendar view (day/week/month) * darken options on hover --- .../lib/core/calendar-constants.ts | 6 ++-- .../lib/core/header-controls.tsx | 29 ++++++++++++++++ .../lib/core/mailspring-calendar.tsx | 9 +++-- .../main-calendar/lib/core/month-view.tsx | 34 ++++++++++++++++++- .../main-calendar/lib/core/week-view.tsx | 3 ++ .../main-calendar/styles/nylas-calendar.less | 32 +++++++++++++++++ 6 files changed, 104 insertions(+), 9 deletions(-) diff --git a/app/internal_packages/main-calendar/lib/core/calendar-constants.ts b/app/internal_packages/main-calendar/lib/core/calendar-constants.ts index 91e66815e..01427ec41 100644 --- a/app/internal_packages/main-calendar/lib/core/calendar-constants.ts +++ b/app/internal_packages/main-calendar/lib/core/calendar-constants.ts @@ -1,5 +1,5 @@ export enum CalendarView { - DAY = 'day', - WEEK = 'week', - MONTH = 'month', + DAY = 'Day', + WEEK = 'Week', + MONTH = 'Month', } diff --git a/app/internal_packages/main-calendar/lib/core/header-controls.tsx b/app/internal_packages/main-calendar/lib/core/header-controls.tsx index 8e87c20bd..342b76ca8 100644 --- a/app/internal_packages/main-calendar/lib/core/header-controls.tsx +++ b/app/internal_packages/main-calendar/lib/core/header-controls.tsx @@ -1,11 +1,14 @@ import React from 'react'; import { Utils } from 'mailspring-exports'; import { RetinaImg } from 'mailspring-component-kit'; +import { CalendarView } from './calendar-constants'; export class HeaderControls extends React.Component<{ title: string; nextAction: () => void; prevAction: () => void; + onChangeView: (view: CalendarView) => void; + disabledViewButton: string; }> { static displayName = 'HeaderControls'; @@ -35,6 +38,10 @@ export class HeaderControls extends React.Component<{ ); } + _changeView = newView => { + this.props.onChangeView(newView); + }; + render() { return (
@@ -43,6 +50,28 @@ export class HeaderControls extends React.Component<{ {this.props.title} {this._renderNextAction()}
+
+ {[ + //{view: CalendarView.DAY, isDisabled: CalendarView.DAY === this.props.disabledViewButton,}, + { + view: CalendarView.WEEK, + isDisabled: CalendarView.WEEK === this.props.disabledViewButton, + }, + { + view: CalendarView.MONTH, + isDisabled: CalendarView.MONTH === this.props.disabledViewButton, + }, + ].map(buttonOptions => ( + + ))} +
{this.props.children} ); diff --git a/app/internal_packages/main-calendar/lib/core/mailspring-calendar.tsx b/app/internal_packages/main-calendar/lib/core/mailspring-calendar.tsx index 31b344e41..19b7c670d 100644 --- a/app/internal_packages/main-calendar/lib/core/mailspring-calendar.tsx +++ b/app/internal_packages/main-calendar/lib/core/mailspring-calendar.tsx @@ -26,7 +26,6 @@ import { Disposable } from 'rx-core'; import { CalendarEventArgs } from './calendar-event-container'; import { CalendarEventPopover } from './calendar-event-popover'; - const DISABLED_CALENDARS = 'mailspring.disabledCalendars'; const VIEWS = { @@ -56,7 +55,7 @@ export interface MailspringCalendarViewProps extends EventRendererProps { /* * Mailspring Calendar */ -interface MailspringCalendarProps { } +interface MailspringCalendarProps {} interface MailspringCalendarState { view: CalendarView; @@ -197,9 +196,9 @@ export class MailspringCalendar extends React.Component< } }; - _onCalendarMouseDown = () => { }; - _onCalendarMouseMove = () => { }; - _onCalendarMouseUp = () => { }; + _onCalendarMouseDown = () => {}; + _onCalendarMouseMove = () => {}; + _onCalendarMouseUp = () => {}; render() { const CurrentView = VIEWS[this.state.view]; diff --git a/app/internal_packages/main-calendar/lib/core/month-view.tsx b/app/internal_packages/main-calendar/lib/core/month-view.tsx index d63554e7a..94033b295 100644 --- a/app/internal_packages/main-calendar/lib/core/month-view.tsx +++ b/app/internal_packages/main-calendar/lib/core/month-view.tsx @@ -1,6 +1,9 @@ import React from 'react'; import { MailspringCalendarViewProps } from './mailspring-calendar'; +import { CalendarEventContainer } from './calendar-event-container'; +import { ScrollRegion, InjectedComponentSet } from 'mailspring-component-kit'; import { CalendarView } from './calendar-constants'; +import { HeaderControls } from './header-controls'; export class MonthView extends React.Component { static displayName = 'MonthView'; @@ -10,6 +13,35 @@ export class MonthView extends React.Component { }; render() { - return ; + return ( +
+ +
+ +
+ + console.log('Next Month')} + prevAction={() => console.log('Previous Month')} + onChangeView={this.props.onChangeView} + disabledViewButton={CalendarView.MONTH} + > + + +
+
+ ); } } diff --git a/app/internal_packages/main-calendar/lib/core/week-view.tsx b/app/internal_packages/main-calendar/lib/core/week-view.tsx index fe3efd0ef..a12173f4a 100644 --- a/app/internal_packages/main-calendar/lib/core/week-view.tsx +++ b/app/internal_packages/main-calendar/lib/core/week-view.tsx @@ -12,6 +12,7 @@ import { WeekViewAllDayEvents } from './week-view-all-day-events'; import { CalendarEventContainer } from './calendar-event-container'; import { CurrentTimeIndicator } from './current-time-indicator'; import { Disposable } from 'rx-core'; +import { CalendarView } from './calendar-constants'; import { overlapForEvents, maxConcurrentEvents, @@ -264,6 +265,8 @@ export class WeekView extends React.Component< title={headerText} nextAction={this._onClickNextWeek} prevAction={this._onClickPrevWeek} + onChangeView={this.props.onChangeView} + disabledViewButton={CalendarView.WEEK} >