feat: show next tour start in ticket search

This commit is contained in:
Marcel Arndt 2025-06-12 17:13:15 +02:00
parent b4854dff0f
commit 068fa9519c
1 changed files with 60 additions and 45 deletions

View File

@ -17,6 +17,7 @@ import {
} from '../../../core/data-access/graphql/generated/generated';
import { TicketViewComponent } from '../ticket-view/ticket-view.component';
import { TicketsService } from '../tickets.service';
import { format, isAfter } from 'date-fns';
@Component({
template: `<div class="flex flex-col items-center justify-start p-4">
@ -33,15 +34,16 @@ import { TicketsService } from '../tickets.service';
class="flex flex-col justify-between items-center py-2 border-b border-gray-200 cursor-pointer"
(click)="showTicketView(ticket)"
>
<div class="w-full">
<div class="w-full flex justify-between">
<span>
{{ ticket.tours.at(0)?.ordinanceType }}
@if (ticket.tours.at(0)?.category) {
<span
class="text-sm text-gray-600"
>
<span class="text-sm text-gray-600">
({{ ticket.tours.at(0)?.category }})
</span>
}
</span>
<!-- <span class="text-sm text-gray-600">{{ getNextStart(ticket.tours) }}</span> -->
</div>
<div class="w-full flex justify-between">
<span>
@ -49,8 +51,8 @@ import { TicketsService } from '../tickets.service';
{{ ticket.tours.at(0)?.patientSurname }}
</span>
<span>
{{ ticket.tours.length }} Tour{{
ticket.tours.length > 1 ? 'en' : ''
{{ getToursLength(ticket) }} Tour{{
getToursLength(ticket) > 1 ? 'en' : ''
}}
</span>
</div>
@ -58,13 +60,8 @@ import { TicketsService } from '../tickets.service';
}
</div>
</div>`,
imports: [
MatFormFieldModule,
MatInputModule,
ReactiveFormsModule,
AsyncPipe
],
changeDetection: ChangeDetectionStrategy.OnPush
imports: [MatFormFieldModule, MatInputModule, ReactiveFormsModule, AsyncPipe],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class TicketsSearchDialogComponent {
private ticketsService = inject(TicketsService);
@ -89,4 +86,22 @@ export class TicketsSearchDialogComponent {
.pipe(tap((result) => result && this.showTicketView(result)))
.subscribe();
}
getToursLength(ticket: unknown) {
return (ticket as Ticket & { tours: Tour[] }).tours.filter(
({ check }) => check === 0
).length;
}
getNextStart(tours: Partial<Tour>[]) {
const sortedStartDates = [...tours.map(({startDate}) => new Date(startDate))].sort((a, b) => a.getTime() - b.getTime())
for(let i = 0; i < sortedStartDates.length; i++) {
const currentDate = sortedStartDates.at(i)
if(currentDate && isAfter(currentDate, new Date())) {
return format(currentDate, 'HH:mm | dd.MM.yy')
}
}
const latestDate = sortedStartDates.at(-1);
return latestDate ? format(latestDate, 'HH:mm | dd.MM.yy') : 'No Tours'
}
}