import * as React from "bloatless-react"; import { Chat, MessageObject } from "../../Model/chatModel"; import { DayView } from "./dayView"; import { MiniatureDayView } from "./miniatureDayView"; import { dayInCalendar } from "../../Model/model"; import { translation } from "../../translations"; export function CalendarView( chat: Chat, messageObjects: React.MapState, selectedObject: React.State, isShowingObjectModal: React.State ) { let selectedDate = new Date(dayInCalendar.value); const selectedMonth = new React.State(selectedDate.getUTCMonth() + 1); const selectedYear = new React.State(selectedDate.getUTCFullYear()); React.bulkSubscribe([selectedMonth, selectedYear], () => updateSelectedDate() ); dayInCalendar.subscribeSilent(() => { selectedDate = new Date(dayInCalendar.value); }) updateSelectedDate(); function updateSelectedDate() { selectedDate.setUTCMonth(selectedMonth.value - 1); selectedDate.setUTCFullYear(selectedYear.value); dayInCalendar.value = selectedDate.toISOString().split("T")[0]; } function previousMonth() { if (selectedMonth.value <= 1) { selectedMonth.value = 12; selectedYear.value -= 1; return; } selectedMonth.value -= 1; } function nextMonth() { if (selectedMonth.value >= 12) { selectedMonth.value = 1; selectedYear.value += 1; return; } selectedMonth.value += 1; } let monthGridCells = new React.State([]); dayInCalendar.subscribe((newValue) => { const newSelectedDate = new Date(newValue); const currentDate = new Date(); monthGridCells.value = []; // initialize to first day of month currentDate.setUTCDate(1); currentDate.setUTCMonth(newSelectedDate.getMonth()); // labels for (let i = 0; i < 7; i++) { monthGridCells.value.push( {translation.weekdays[i]} ); } // create blank dates starting sunday const monthOffset = currentDate.getDay(); for (let i = 0; i < monthOffset; i++) { monthGridCells.value.push(
); } // add day views while (currentDate.getUTCMonth() == newSelectedDate.getUTCMonth()) { monthGridCells.value.push( MiniatureDayView(chat, messageObjects, currentDate) ); currentDate.setDate(currentDate.getDate() + 1); } monthGridCells.callSubscriptions(); }); return (

{DayView(chat, messageObjects, selectedObject, isShowingObjectModal)}
); }