Add keyboard shortcuts for view switching in Planning page
This commit is contained in:
parent
b5d4ecab27
commit
bc379e9fc2
1 changed files with 59 additions and 1 deletions
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Reference in a new issue