11'use client'
22
33import React , { useEffect , useMemo , useState } from 'react' ;
4- import { AlertCircle , Clock , Trash2 , X } from 'lucide-react' ;
4+ import { Clock , Trash2 } from 'lucide-react' ;
55import { Heading } from "@/app/components/layout/Heading" ;
66import { useTranslations } from 'next-intl' ;
77import { timeslotToDate , timeslotToLocalTime } from "@/lib/time" ;
@@ -12,6 +12,7 @@ import { deleteTicket, updateTicket, useTickets } from "@/lib/fetch/ticket";
1212import { ItemTicketDocumentWithItem , TICKET_STATUS , TicketStatus } from "@/model/ticket" ;
1313import Button from '@/app/components/Button' ;
1414import SearchInput from "@/app/components/SearchInput" ;
15+ import ErrorMessage from "@/app/components/ErrorMessage" ;
1516
1617const PizzaMakerStation = ( ) => {
1718 const queryClient = useQueryClient ( ) ;
@@ -194,15 +195,15 @@ const PizzaMakerStation = () => {
194195 disabled = { selectedTickets . size === 0 }
195196 className = "w-full py-4 text-lg font-semibold bg-green-500 hover:bg-green-600 disabled:bg-gray-300 disabled:cursor-not-allowed rounded-xl"
196197 >
197- Mark Ready ( { selectedTickets . size } )
198+ { t ( 'Admin.Prepare.Actions.markReady' , { count : selectedTickets . size } ) }
198199 </ Button >
199200
200201 < Button
201202 onClick = { markSelectedNotReady }
202203 disabled = { selectedTickets . size === 0 }
203204 className = "w-full py-4 text-lg font-semibold bg-yellow-500 hover:bg-yellow-600 disabled:bg-gray-300 disabled:cursor-not-allowed rounded-xl"
204205 >
205- Mark Not Ready ( { selectedTickets . size } )
206+ { t ( 'Admin.Prepare.Actions.markNotReady' , { count : selectedTickets . size } ) }
206207 </ Button >
207208
208209 < Button
@@ -211,7 +212,7 @@ const PizzaMakerStation = () => {
211212 className = "w-full py-4 text-lg font-semibold bg-red-500 hover:bg-red-600 disabled:bg-gray-300 disabled:cursor-not-allowed rounded-xl flex items-center justify-center gap-2"
212213 >
213214 < Trash2 className = "w-5 h-5" />
214- Delete Tickets ( { selectedTickets . size } )
215+ { t ( 'Admin.Prepare.Actions.deleteTickets' , { count : selectedTickets . size } ) }
215216 </ Button >
216217 </ div >
217218
@@ -226,38 +227,43 @@ const PizzaMakerStation = () => {
226227 return 1
227228 }
228229 return ( timeslotToDate ( a . timeslot ) ?. getTime ( ) || 0 ) - ( timeslotToDate ( b . timeslot ) ?. getTime ( ) || 0 )
229- } ) . map ( ticket => (
230- < button
231- key = { `${ ticket . _id . toString ( ) } -${ ticket . status } ` }
232- onClick = { ( ) => toggleTicketSelection ( ticket . _id . toString ( ) ) }
233- className = { `
234- border-2 px-4 py-3 rounded-xl text-base flex items-center justify-between cursor-pointer
235- transition-all duration-200 hover:shadow-md
236- ${ ticket . status !== TICKET_STATUS . DEMANDED && ! selectedTickets . has ( ticket . _id . toString ( ) )
237- ? 'bg-green-50 border-green-200 text-gray-600'
238- : 'bg-white'
239- }
240- ${ ticket . status !== TICKET_STATUS . DEMANDED && selectedTickets . has ( ticket . _id . toString ( ) )
241- ? 'border-blue-500 border-green-200 text-gray-600'
242- : 'bg-white'
243- }
244- ${ selectedTickets . has ( ticket . _id . toString ( ) ) ? 'border-blue-500' : 'border-gray-200 hover:border-gray-300' }
245- ` }
246- >
247- < div className = "flex flex-col" >
248- < span className = "font-semibold" > { ticket . itemTypeRef . name } </ span >
249- { ticket ?. orderId && (
250- < span
251- className = "text-sm text-gray-500" > Order: { ticket . orderId . toString ( ) . slice ( - 6 ) } </ span >
230+ } ) . map ( ticket => {
231+ let color = ''
232+ let border = ''
233+
234+ if ( ticket . status === TICKET_STATUS . DEMANDED ) {
235+ color = 'gray'
236+ } else {
237+ border = 'green'
238+ }
239+
240+ if ( selectedTickets . has ( ticket . _id . toString ( ) ) ) {
241+ border = 'primary'
242+ }
243+
244+ return (
245+ < Button
246+ key = { `${ ticket . _id . toString ( ) } -${ ticket . status } ` }
247+ onClick = { ( ) => toggleTicketSelection ( ticket . _id . toString ( ) ) }
248+ color = { color }
249+ border = { border }
250+ className = "px-4 py-3 rounded-xl text-base flex items-center justify-between"
251+ >
252+ < div className = "flex flex-col" >
253+ < span className = "font-semibold" > { ticket . itemTypeRef . name } </ span >
254+ { ticket ?. orderId && (
255+ < span
256+ className = "text-sm text-gray-500" > Order: { ticket . orderId . toString ( ) . slice ( - 6 ) } </ span >
257+ ) }
258+ </ div >
259+ { ticket . timeslot && (
260+ < span className = "bg-gray-100 py-1 px-3 rounded-full text-sm font-medium" >
261+ { timeslotToLocalTime ( ticket . timeslot ) }
262+ </ span >
252263 ) }
253- </ div >
254- { ticket . timeslot && (
255- < span className = "bg-gray-100 py-1 px-3 rounded-full text-sm font-medium" >
256- { timeslotToLocalTime ( ticket . timeslot ) }
257- </ span >
258- ) }
259- </ button >
260- ) ) }
264+ </ Button >
265+ ) ;
266+ } ) }
261267 </ div >
262268
263269 { upcomingItems . size === 0 && (
@@ -316,17 +322,7 @@ const PizzaMakerStation = () => {
316322
317323 { /* Error Toast */ }
318324 { error && (
319- < div
320- className = "fixed bottom-8 right-8 bg-red-500 text-white rounded-xl px-6 py-4 flex items-center gap-3 shadow-2xl z-50" >
321- < AlertCircle className = "w-6 h-6" />
322- < span className = "font-medium" > { error } </ span >
323- < button
324- onClick = { ( ) => setError ( '' ) }
325- className = "ml-2 text-white hover:text-gray-200"
326- >
327- < X className = "w-5 h-5" />
328- </ button >
329- </ div >
325+ < ErrorMessage error = { error } />
330326 ) }
331327 </ >
332328 ) ;
0 commit comments