feat: show next tour start in ticket search
This commit is contained in:
parent
b4854dff0f
commit
068fa9519c
|
|
@ -17,54 +17,51 @@ import {
|
||||||
} from '../../../core/data-access/graphql/generated/generated';
|
} from '../../../core/data-access/graphql/generated/generated';
|
||||||
import { TicketViewComponent } from '../ticket-view/ticket-view.component';
|
import { TicketViewComponent } from '../ticket-view/ticket-view.component';
|
||||||
import { TicketsService } from '../tickets.service';
|
import { TicketsService } from '../tickets.service';
|
||||||
|
import { format, isAfter } from 'date-fns';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
template: `<div class="flex flex-col items-center justify-start p-4">
|
template: `<div class="flex flex-col items-center justify-start p-4">
|
||||||
<div class="text-lg font-bold pb-2">Ticket suchen</div>
|
<div class="text-lg font-bold pb-2">Ticket suchen</div>
|
||||||
<hr />
|
<hr />
|
||||||
<mat-form-field class="w-full">
|
<mat-form-field class="w-full">
|
||||||
<mat-label>Einsatznummer oder Patient</mat-label>
|
<mat-label>Einsatznummer oder Patient</mat-label>
|
||||||
<input class="w-full" matInput [formControl]="searchCtrl" name="search" />
|
<input class="w-full" matInput [formControl]="searchCtrl" name="search" />
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
<hr />
|
<hr />
|
||||||
<div class="w-full">
|
<div class="w-full">
|
||||||
@for (ticket of tickets$ | async; track ticket) {
|
@for (ticket of tickets$ | async; track ticket) {
|
||||||
<div
|
<div
|
||||||
class="flex flex-col justify-between items-center py-2 border-b border-gray-200 cursor-pointer"
|
class="flex flex-col justify-between items-center py-2 border-b border-gray-200 cursor-pointer"
|
||||||
(click)="showTicketView(ticket)"
|
(click)="showTicketView(ticket)"
|
||||||
>
|
>
|
||||||
<div class="w-full">
|
<div class="w-full flex justify-between">
|
||||||
{{ ticket.tours.at(0)?.ordinanceType }}
|
<span>
|
||||||
@if (ticket.tours.at(0)?.category) {
|
{{ ticket.tours.at(0)?.ordinanceType }}
|
||||||
<span
|
@if (ticket.tours.at(0)?.category) {
|
||||||
class="text-sm text-gray-600"
|
<span class="text-sm text-gray-600">
|
||||||
>
|
({{ ticket.tours.at(0)?.category }})
|
||||||
({{ ticket.tours.at(0)?.category }})
|
</span>
|
||||||
</span>
|
}
|
||||||
}
|
</span>
|
||||||
</div>
|
<!-- <span class="text-sm text-gray-600">{{ getNextStart(ticket.tours) }}</span> -->
|
||||||
<div class="w-full flex justify-between">
|
</div>
|
||||||
<span>
|
<div class="w-full flex justify-between">
|
||||||
{{ ticket.tours.at(0)?.patientName }}
|
<span>
|
||||||
{{ ticket.tours.at(0)?.patientSurname }}
|
{{ ticket.tours.at(0)?.patientName }}
|
||||||
</span>
|
{{ ticket.tours.at(0)?.patientSurname }}
|
||||||
<span>
|
</span>
|
||||||
{{ ticket.tours.length }} Tour{{
|
<span>
|
||||||
ticket.tours.length > 1 ? 'en' : ''
|
{{ getToursLength(ticket) }} Tour{{
|
||||||
}}
|
getToursLength(ticket) > 1 ? 'en' : ''
|
||||||
</span>
|
}}
|
||||||
</div>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
}
|
|
||||||
</div>
|
</div>
|
||||||
</div>`,
|
}
|
||||||
imports: [
|
</div>
|
||||||
MatFormFieldModule,
|
</div>`,
|
||||||
MatInputModule,
|
imports: [MatFormFieldModule, MatInputModule, ReactiveFormsModule, AsyncPipe],
|
||||||
ReactiveFormsModule,
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
AsyncPipe
|
|
||||||
],
|
|
||||||
changeDetection: ChangeDetectionStrategy.OnPush
|
|
||||||
})
|
})
|
||||||
export class TicketsSearchDialogComponent {
|
export class TicketsSearchDialogComponent {
|
||||||
private ticketsService = inject(TicketsService);
|
private ticketsService = inject(TicketsService);
|
||||||
|
|
@ -89,4 +86,22 @@ export class TicketsSearchDialogComponent {
|
||||||
.pipe(tap((result) => result && this.showTicketView(result)))
|
.pipe(tap((result) => result && this.showTicketView(result)))
|
||||||
.subscribe();
|
.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'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue