import * as React from 'react'; import { CollectionSubView } from './CollectionSubView'; import { observer } from 'mobx-react'; import { computed, makeObservable, observable } from 'mobx'; import { Doc, DocListCast, Opt } from '../../../fields/Doc'; import { CollectionStackingView } from './CollectionStackingView'; import { CollectionViewType } from '../../documents/DocumentTypes'; import { dateRangeStrToDates, emptyFunction, returnAll, returnEmptyDoclist, returnNone, returnOne, returnTrue } from '../../../Utils'; import { DocumentView, DocumentViewProps } from '../nodes/DocumentView'; import { TbRuler } from 'react-icons/tb'; import { Transform } from '../../util/Transform'; import { DocData } from '../../../fields/DocSymbols'; import { Cast, NumCast, StrCast } from '../../../fields/Types'; import { StyleProp } from '../StyleProvider'; import { CollectionFreeFormDocumentView } from '../nodes/CollectionFreeFormDocumentView'; @observer export class CollectionCalendarView extends CollectionSubView() { constructor(props: any) { super(props); makeObservable(this); } componentDidMount(): void {} componentWillUnmount(): void {} @computed get allCalendars() { return this.childDocs; // returns a list of docs (i.e. calendars) } removeCalendar = () => {}; addCalendar = (doc: Doc | Doc[], annotationKey?: string | undefined): boolean => { // bring up calendar modal with option to create a calendar return true; }; _stackRef = React.createRef(); panelHeight = () => { return this._props.PanelHeight() - 40; // this should be the height of the stacking view. For now, it's the hieight of the calendar view minus 40 to allow for a title }; // most recent calendar should come first sortByMostRecentDate = (calendarA: Doc, calendarB: Doc) => { const aDateRangeStr = StrCast(DocListCast(calendarA.data).lastElement()?.date_range); const bDateRangeStr = StrCast(DocListCast(calendarB.data).lastElement()?.date_range); const [aFromDate, aToDate] = dateRangeStrToDates(aDateRangeStr); const [bFromDate, bToDate] = dateRangeStrToDates(bDateRangeStr); if (aFromDate > bFromDate) { return -1; // a comes first } else if (aFromDate < bFromDate) { return 1; // b comes first } else { // start dates are the same if (aToDate > bToDate) { return -1; // a comes first } else if (aToDate < bToDate) { return 1; // b comes first } else { return 0; // same start and end dates } } }; screenToLocalTransform = () => this._props .ScreenToLocalTransform() .translate(Doc.NativeWidth(this._props.Document), 0) .scale(this._props.NativeDimScaling?.() || 1); get calendarsKey() { return this._props.fieldKey; } render() { return (
); } }