mirror of
https://github.com/zadam/trilium.git
synced 2025-11-18 14:34:30 +01:00
60 lines
1.8 KiB
TypeScript
60 lines
1.8 KiB
TypeScript
import { PluginDef } from "@fullcalendar/core/index.js";
|
|
import { ViewModeProps } from "../interface";
|
|
import Calendar from "./calendar";
|
|
import { useEffect, useState } from "preact/hooks";
|
|
import "./index.css";
|
|
import { useTriliumOption, useTriliumOptionInt } from "../../react/hooks";
|
|
|
|
interface CalendarViewData {
|
|
|
|
}
|
|
|
|
const CALENDAR_VIEWS = [
|
|
"timeGridWeek",
|
|
"dayGridMonth",
|
|
"multiMonthYear",
|
|
"listMonth"
|
|
]
|
|
|
|
export default function CalendarView({ note, noteIds }: ViewModeProps<CalendarViewData>) {
|
|
const plugins = usePlugins(false, false);
|
|
const [ firstDayOfWeek ] = useTriliumOptionInt("firstDayOfWeek");
|
|
|
|
return (plugins &&
|
|
<div className="calendar-view">
|
|
<Calendar
|
|
plugins={plugins}
|
|
tabIndex={100}
|
|
initialView="dayGridMonth"
|
|
headerToolbar={{
|
|
start: "title",
|
|
end: `${CALENDAR_VIEWS.join(",")} today prev,next`
|
|
}}
|
|
firstDay={firstDayOfWeek ?? 0}
|
|
/>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
function usePlugins(isEditable: boolean, isCalendarRoot: boolean) {
|
|
const [ plugins, setPlugins ] = useState<PluginDef[]>();
|
|
|
|
useEffect(() => {
|
|
async function loadPlugins() {
|
|
const plugins: PluginDef[] = [];
|
|
plugins.push((await import("@fullcalendar/daygrid")).default);
|
|
plugins.push((await import("@fullcalendar/timegrid")).default);
|
|
plugins.push((await import("@fullcalendar/list")).default);
|
|
plugins.push((await import("@fullcalendar/multimonth")).default);
|
|
if (isEditable || isCalendarRoot) {
|
|
plugins.push((await import("@fullcalendar/interaction")).default);
|
|
}
|
|
setPlugins(plugins);
|
|
}
|
|
|
|
loadPlugins();
|
|
}, [ isEditable, isCalendarRoot ]);
|
|
|
|
return plugins;
|
|
}
|