feat: umožnění automatického přepnutí na volbu "Budu objednávat" při přidání se k objednávce
CI / Generate TypeScript types (push) Successful in 16s
CI / Server unit tests (push) Successful in 29s
CI / Build server (push) Successful in 31s
CI / Build client (push) Successful in 42s
CI / Playwright E2E tests (push) Successful in 2m16s
CI / Build and push Docker image (push) Successful in 1m11s
CI / Notify (push) Successful in 3s

This commit is contained in:
mates committed 2026-10-19 16:57:09 +02:00
1 parent 297cb80662
commit 95a35df6ab
4 files changed
+66 -4

No files matched your search

+24 -4
View File
@@ -7,8 +7,8 @@ import DatePicker, { registerLocale } from 'react-datepicker';
import { cs } from 'date-fns/locale';
import 'react-datepicker/dist/react-datepicker.css';
import {
ClientData, GroupState, MealSlot, OrderGroup, OrderGroupMember, PendingQr, TrackingProvider,
StoreMenuDish, getData, createGroup, deleteGroup, addGroupMember, removeGroupMember, updateGroupMember, setGroupState, updateGroupTimes, setTracking, getOrderDates, getStoreMenu,
ClientData, GroupState, LunchChoice, MealSlot, OrderGroup, OrderGroupMember, PendingQr, TrackingProvider,
StoreMenuDish, getData, createGroup, deleteGroup, addGroupMember, removeGroupMember, updateGroupMember, setGroupState, updateGroupTimes, setTracking, getOrderDates, getStoreMenu, addChoice,
} from '../../../types';
import MenuHintCell from '../components/MenuHintCell';
import EaterBadge from '../components/EaterBadge';
@@ -261,6 +261,22 @@ export default function OrderGroupsPage() {
return true;
};
/**
* Pokud to má uživatel zapnuté v nastavení, přepne jeho dnešní volbu stravování na "Budu objednávat".
* Volbu nemění, pokud již objednává, nebo je přihlášen na Pizza day (změnou by přišel o objednané pizzy).
*/
const switchChoiceToOrdering = async () => {
if (!settings?.autoOrderChoice || !auth?.login) return;
const lunch = await getData({ query: { slot: MealSlot.OBED } });
const choices = lunch.data?.choices;
if (!choices) return;
if (auth.login in (choices[LunchChoice.OBJEDNAVAM] ?? {}) || auth.login in (choices[LunchChoice.PIZZA] ?? {})) return;
const result = await addChoice({ body: { locationKey: LunchChoice.OBJEDNAVAM, slot: MealSlot.OBED } });
if (result.error) {
setPageError(`Nepodařilo se přepnout volbu stravování: ${(result.error as any).error || 'Nastala chyba'}`);
}
};
const handleCreate = async () => {
if (!newGroupName || !auth?.login) return;
setCreating(true);
@@ -271,13 +287,17 @@ export default function OrderGroupsPage() {
if (ok) {
setNewGroupName('');
setNewGroupUrl('');
await switchChoiceToOrdering();
}
setCreating(false);
};
const handleJoin = (groupId: string) =>
refresh(() => addGroupMember({ body: { id: groupId } }));
const handleJoin = async (groupId: string) => {
if (await refresh(() => addGroupMember({ body: { id: groupId } }))) {
await switchChoiceToOrdering();
}
};
const handleToggleLock = (group: OrderGroup) => {
const next = group.state === GroupState.OPEN ? GroupState.LOCKED : GroupState.OPEN;