Add keyboard shortcuts for view switching in Planning page

This commit is contained in:
Arthur Belleville 2025-07-27 14:34:56 +02:00
parent b5d4ecab27
commit bc379e9fc2
No known key found for this signature in database

View file

@ -1,4 +1,4 @@
import { useState } from "react";
import { useState, useEffect } from "react";
import { useTablosList } from "@ui/hooks/tablos";
import { useEventsByTablo, useDeleteEvent } from "@ui/hooks/events";
import {
@ -32,6 +32,44 @@ export const PlanningPage = () => {
const deleteEvent = useDeleteEvent();
// Keyboard shortcuts for view switching
useEffect(() => {
const handleKeyPress = (event: KeyboardEvent) => {
// Only trigger shortcuts when not typing in input fields
if (
event.target instanceof HTMLInputElement ||
event.target instanceof HTMLTextAreaElement ||
event.target instanceof HTMLSelectElement
) {
return;
}
// Prevent default behavior and switch views
switch (event.key.toLowerCase()) {
case "m":
case "1":
event.preventDefault();
setCurrentView("month");
break;
case "w":
case "s":
case "2":
event.preventDefault();
setCurrentView("week");
break;
case "d":
case "j":
case "3":
event.preventDefault();
setCurrentView("day");
break;
}
};
window.addEventListener("keydown", handleKeyPress);
return () => window.removeEventListener("keydown", handleKeyPress);
}, []);
const handleExportICS = () => {
if (!tabloEvents || tabloEvents.length === 0) {
return;
@ -780,6 +818,19 @@ export const PlanningPage = () => {
<button
key={view}
onClick={() => setCurrentView(view)}
title={`${
view === "month"
? "Mois"
: view === "week"
? "Semaine"
: "Jour"
} (${
view === "month"
? "M ou 1"
: view === "week"
? "W ou 2"
: "D ou 3"
})`}
className={`px-3 py-1.5 text-sm rounded-md transition-colors capitalize ${
currentView === view
? "bg-white dark:bg-gray-800 text-gray-900 dark:text-white shadow-sm"
@ -791,6 +842,13 @@ export const PlanningPage = () => {
: view === "week"
? "Semaine"
: "Jour"}
<span className="ml-1 text-xs opacity-60">
{view === "month"
? "(M)"
: view === "week"
? "(S)"
: "(J)"}
</span>
</button>
))}
</div>