fix: nepřepínání dnů/týdnů při otevřené minihře
CI / Generate TypeScript types (push) Successful in 11s
CI / Server unit tests (push) Successful in 27s
CI / Build server (push) Successful in 32s
CI / Build client (push) Successful in 42s
CI / Playwright E2E tests (push) Successful in 2m38s
CI / Build and push Docker image (push) Successful in 45s
CI / Notify (push) Successful in 2s

This commit is contained in:
mates committed 2026-10-19 21:09:39 +02:00
1 parent 95a35df6ab
commit fe12098ed0
5 files changed
+20 -4

No files matched your search

+2
View File
@@ -30,6 +30,7 @@ import PendingPayments from './components/PendingPayments';
import { useEasterEgg } from './context/eggs'; import { useEasterEgg } from './context/eggs';
import { ClientData, Food, MealSlot, PendingQr, PizzaOrder, DepartureTime, PizzaDayState, Restaurant, RestaurantDayMenu, RestaurantDayMenuMap, LunchChoice, LocationLunchChoicesMap, UserLunchChoice, PizzaVariant, getData, getEasterEggImage, addPizza, removePizza, updatePizzaDayNote, createPizzaDay, deletePizzaDay, lockPizzaDay, unlockPizzaDay, finishOrder, finishDelivery, addChoice, jdemeObed, removeChoices, removeChoice, updateNote, changeDepartureTime, setBuyer, generateQr } from '../../types'; import { ClientData, Food, MealSlot, PendingQr, PizzaOrder, DepartureTime, PizzaDayState, Restaurant, RestaurantDayMenu, RestaurantDayMenuMap, LunchChoice, LocationLunchChoicesMap, UserLunchChoice, PizzaVariant, getData, getEasterEggImage, addPizza, removePizza, updatePizzaDayNote, createPizzaDay, deletePizzaDay, lockPizzaDay, unlockPizzaDay, finishOrder, finishDelivery, addChoice, jdemeObed, removeChoices, removeChoice, updateNote, changeDepartureTime, setBuyer, generateQr } from '../../types';
import { getLunchChoiceName } from './enums'; import { getLunchChoiceName } from './enums';
import { isArrowNavigationBlocked } from './utils/arrowNavigation';
// import FallingLeaves, { LEAF_PRESETS, LEAF_COLOR_THEMES } from './FallingLeaves'; // import FallingLeaves, { LEAF_PRESETS, LEAF_COLOR_THEMES } from './FallingLeaves';
// import './FallingLeaves.scss'; // import './FallingLeaves.scss';
@@ -244,6 +245,7 @@ function App() {
// Navigace mezi dny pomocí klávesových šípek // Navigace mezi dny pomocí klávesových šípek
const handleKeyDown = useCallback((e: any) => { const handleKeyDown = useCallback((e: any) => {
if (isArrowNavigationBlocked(e)) return;
if (e.keyCode === 37 && dayIndex != null && dayIndex > 0) { if (e.keyCode === 37 && dayIndex != null && dayIndex > 0) {
handleDayChange(dayIndex - 1); handleDayChange(dayIndex - 1);
} else if (e.keyCode === 39 && dayIndex != null && dayIndex < 4) { } else if (e.keyCode === 39 && dayIndex != null && dayIndex < 4) {
+3 -3
View File
@@ -30,6 +30,7 @@ import BoltSimulationModal from '../components/modals/BoltSimulationModal';
import GenerateMockOrdersModal from '../components/modals/GenerateMockOrdersModal'; import GenerateMockOrdersModal from '../components/modals/GenerateMockOrdersModal';
import PendingPayments from '../components/PendingPayments'; import PendingPayments from '../components/PendingPayments';
import OrderProgress, { PROVIDER_LABEL } from '../components/OrderProgress'; import OrderProgress, { PROVIDER_LABEL } from '../components/OrderProgress';
import { isArrowNavigationBlocked } from '../utils/arrowNavigation';
const SLOT = MealSlot.EXTRA; const SLOT = MealSlot.EXTRA;
const TIME_REGEX = /^([01]\d|2[0-3]):[0-5]\d$/; const TIME_REGEX = /^([01]\d|2[0-3]):[0-5]\d$/;
@@ -224,9 +225,8 @@ export default function OrderGroupsPage() {
// Navigace mezi dny pomocí klávesových šipek (←/→), obdobně jako na hlavní stránce // Navigace mezi dny pomocí klávesových šipek (←/→), obdobně jako na hlavní stránce
const handleKeyDown = useCallback((e: KeyboardEvent) => { const handleKeyDown = useCallback((e: KeyboardEvent) => {
// Ignorujeme, pokud uživatel právě píše do formulářového pole // Ignorujeme, pokud uživatel právě píše do formulářového pole nebo je otevřený dialog (např. minihra)
const tag = (e.target as HTMLElement)?.tagName; if (isArrowNavigationBlocked(e)) return;
if (tag === 'INPUT' || tag === 'SELECT' || tag === 'TEXTAREA') return;
const currentIso = data?.isoDate; const currentIso = data?.isoDate;
if (!currentIso) return; if (!currentIso) return;
if (e.keyCode === 37) { if (e.keyCode === 37) {
+2
View File
@@ -12,6 +12,7 @@ import { Legend, Line, LineChart, Tooltip, XAxis, YAxis } from "recharts";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { getLunchChoiceName } from "../enums"; import { getLunchChoiceName } from "../enums";
import './StatsPage.scss'; import './StatsPage.scss';
import { isArrowNavigationBlocked } from '../utils/arrowNavigation';
const CHART_WIDTH = 1400; const CHART_WIDTH = 1400;
const CHART_HEIGHT = 700; const CHART_HEIGHT = 700;
@@ -131,6 +132,7 @@ export default function StatsPage() {
}, [dateRange]); }, [dateRange]);
const handleKeyDown = useCallback((e: any) => { const handleKeyDown = useCallback((e: any) => {
if (isArrowNavigationBlocked(e)) return;
if (e.keyCode === 37) { if (e.keyCode === 37) {
handlePreviousWeek(); handlePreviousWeek();
} else if (e.keyCode === 39 && !isCurrentOrFutureWeek) { } else if (e.keyCode === 39 && !isCurrentOrFutureWeek) {
+11
View File
@@ -0,0 +1,11 @@
/**
* Zda se má stisk klávesy ignorovat pro navigaci šipkami mezi dny/týdny na pozadí stránky.
* Navigace se nemá provádět, pokud uživatel píše do formulářového pole, nebo pokud je otevřený
* modální dialog (typicky minihra jako Tetris či Had, která šipky používá k ovládání) –
* jinak by se stránka na pozadí neustále přepínala a zbytečně přenačítala data ze serveru.
*/
export function isArrowNavigationBlocked(e: KeyboardEvent): boolean {
const target = e.target as HTMLElement | null;
if (target?.closest?.('input, textarea, select, [contenteditable="true"]')) return true;
return document.body.classList.contains('modal-open') || document.querySelector('.modal.show') != null;
}
+2 -1
View File
@@ -1,3 +1,4 @@
[ [
"Nové nastavení: po založení skupinové objednávky nebo připojení k ní se vaše dnešní volba automaticky přepne na \"Budu objednávat\"" "Nové nastavení: po založení skupinové objednávky nebo připojení k ní se vaše dnešní volba automaticky přepne na \"Budu objednávat\"",
"Ovládání miniher šipkami už na pozadí nepřepíná dny ani týdny"
] ]