diff --git a/backend/backend/urls.py b/backend/backend/urls.py index 8856f5b..e6b6839 100644 --- a/backend/backend/urls.py +++ b/backend/backend/urls.py @@ -83,7 +83,7 @@ class OrderViewSet(viewsets.ModelViewSet): serializer_class = OrderSerializer filter_backends = [DjangoFilterBackend, filters.OrderingFilter] filterset_fields = ['waiter'] - ordering = ['-updated_on'] + ordering = ['-created_on'] def get_queryset(self): five_minutes_ago = timezone.now() + datetime.timedelta(minutes=-5) diff --git a/frontend/app/kitchen/page.tsx b/frontend/app/kitchen/page.tsx index 704b475..80cba19 100644 --- a/frontend/app/kitchen/page.tsx +++ b/frontend/app/kitchen/page.tsx @@ -3,6 +3,7 @@ import { fetcher } from '@/app/api/tools'; import useSWR from 'swr'; import Link from 'next/link'; +import { useEffect, useRef, useState } from 'react'; type Order = { id: number; @@ -11,15 +12,44 @@ type Order = { waiter: number; waiter_name: string; data: [{ item: string; additional_info: string; finished: boolean }]; - status: string; + status: number; status_name: string; }; export default function Home() { + const audioRef = useRef({} as HTMLAudioElement); + const [playedIDs, setPlayedIDs] = useState([]); + const { data, mutate, error, isLoading } = useSWR(`/api/orders`, fetcher, { refreshInterval: 1000, }); + const play = () => { + if (audioRef.current) { + audioRef.current.play(); + } else { + // Throw error + } + }; + + useEffect(() => { + if (!data) return; + + const justPlayed = (data as Order[]) + .filter( + (o) => + new Date(o.updated_on).getTime() - new Date(o.created_on).getTime() < + 10000 && o.status == 1 + ) + .map((o) => o.id) + .filter((id) => !playedIDs.includes(id)); + + if (justPlayed.length > 0) { + play(); + setPlayedIDs(playedIDs.concat(justPlayed)); + } + }, [data]); + const update_finished = (o: number, i: number, v: boolean) => { let d = data; d[o].data[i].finished = v; @@ -51,10 +81,21 @@ export default function Home() { return ( <> +

Zamówienia: