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 ) { const selectedDate = new Date(dayInCalendar.value); const selectedMonth = new React.State(selectedDate.getMonth() + 1); const selectedYear = new React.State(selectedDate.getFullYear()); React.bulkSubscribe([selectedMonth, selectedYear], () => updateSelectedDate()); updateSelectedDate(); function updateSelectedDate() { selectedDate.setMonth(selectedMonth.value - 1); selectedDate.setFullYear(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.setDate(1); currentDate.setMonth(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.getMonth() == newSelectedDate.getMonth()) { monthGridCells.value.push( MiniatureDayView(chat, messageObjects, new Date(currentDate)) ); currentDate.setDate(currentDate.getDate() + 1); } monthGridCells.callSubscriptions(); }); return (

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