Skip to content
This repository has been archived by the owner on Jan 23, 2025. It is now read-only.

Commit

Permalink
EM-39: Selectable ticket
Browse files Browse the repository at this point in the history
  • Loading branch information
hieutbui committed Jan 20, 2025
1 parent 64927b3 commit 3e1478e
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 12 deletions.
46 changes: 34 additions & 12 deletions lib/pages/live_overview/live_overview.dart
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import 'package:ecoparking_management/domain/usecase/employee/check_out_interact
import 'package:ecoparking_management/domain/usecase/employee/get_employee_attendance_status_interactor.dart';
import 'package:ecoparking_management/pages/live_overview/live_overview_view.dart';
import 'package:ecoparking_management/pages/live_overview/models/parking_occupied.dart';
import 'package:ecoparking_management/pages/live_overview/models/selectable_ticket.dart';
import 'package:ecoparking_management/utils/dialog_utils.dart';
import 'package:ecoparking_management/utils/mixins/custom_logger.dart';
import 'package:ecoparking_management/utils/navigation_utils.dart';
Expand Down Expand Up @@ -791,23 +792,43 @@ class LiveOverviewController extends State<LiveOverview> with ControllerLoggy {
];
}

return tickets
final List<SelectableTicket> selectableTickets = tickets
.map(
(e) => SelectableTicket(
ticket: e,
),
)
.toList();

return selectableTickets
.map(
(e) => DataRow(
//TODO: Show ticket info in dialog when press on row
selected: e.isSelected,
onSelectChanged: (isSelected) {
final index = selectableTickets.indexOf(e);
final ticket = selectableTickets[index];
selectableTickets[index] =
ticket.copyWith(isSelected: isSelected);
currentParkingLotAllotmentNotifier.value = selectableTickets
.where((element) => element.isSelected)
.map((e) => e.ticket)
.toList();
},
cells: <DataCell>[
DataCell(
Text(
e.vehicle?.licensePlate ?? '',
e.ticket.vehicle?.licensePlate ?? '',
style: Theme.of(context).textTheme.bodyMedium!.copyWith(
color: Theme.of(context).colorScheme.onSurface,
),
),
),
DataCell(
Text(
e.entryTime != null
? DateFormat('hh:mm a yyy/MM/dd ').format(e.entryTime!)
e.ticket.entryTime != null
? DateFormat('hh:mm a yyy/MM/dd ')
.format(e.ticket.entryTime!)
: '',
style: Theme.of(context).textTheme.bodyMedium!.copyWith(
color: Theme.of(context).colorScheme.onSurface,
Expand All @@ -816,8 +837,9 @@ class LiveOverviewController extends State<LiveOverview> with ControllerLoggy {
),
DataCell(
Text(
e.exitTime != null
? DateFormat('hh:mm a yyy/MM/dd').format(e.exitTime!)
e.ticket.exitTime != null
? DateFormat('hh:mm a yyy/MM/dd')
.format(e.ticket.exitTime!)
: '',
style: Theme.of(context).textTheme.bodyMedium!.copyWith(
color: Theme.of(context).colorScheme.onSurface,
Expand All @@ -826,39 +848,39 @@ class LiveOverviewController extends State<LiveOverview> with ControllerLoggy {
),
DataCell(
Text(
DateFormat('hh:mm a yyy/MM/dd').format(e.startTime),
DateFormat('hh:mm a yyy/MM/dd').format(e.ticket.startTime),
style: Theme.of(context).textTheme.bodyMedium!.copyWith(
color: Theme.of(context).colorScheme.onSurface,
),
),
),
DataCell(
Text(
DateFormat('hh:mm a yyy/MM/dd').format(e.endTime),
DateFormat('hh:mm a yyy/MM/dd').format(e.ticket.endTime),
style: Theme.of(context).textTheme.bodyMedium!.copyWith(
color: Theme.of(context).colorScheme.onSurface,
),
),
),
DataCell(
Text(
e.status.displayString,
e.ticket.status.displayString,
style: Theme.of(context).textTheme.bodyMedium!.copyWith(
color: statusColor(e.status),
color: statusColor(e.ticket.status),
),
),
),
DataCell(
Text(
'${e.days}d ${e.hours}h',
'${e.ticket.days}d ${e.ticket.hours}h',
style: Theme.of(context).textTheme.bodyMedium!.copyWith(
color: Theme.of(context).colorScheme.onSurface,
),
),
),
DataCell(
Text(
getFormattedCurrency(e.total),
getFormattedCurrency(e.ticket.total),
style: Theme.of(context).textTheme.bodyMedium!.copyWith(
color: Theme.of(context).colorScheme.onTertiary,
),
Expand Down
25 changes: 25 additions & 0 deletions lib/pages/live_overview/models/selectable_ticket.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import 'package:ecoparking_management/data/models/ticket_info.dart';
import 'package:equatable/equatable.dart';

class SelectableTicket with EquatableMixin {
final TicketInfo ticket;
final bool isSelected;

SelectableTicket({
required this.ticket,
this.isSelected = false,
});

SelectableTicket copyWith({
TicketInfo? ticket,
bool? isSelected,
}) {
return SelectableTicket(
ticket: ticket ?? this.ticket,
isSelected: isSelected ?? this.isSelected,
);
}

@override
List<Object?> get props => [ticket, isSelected];
}

0 comments on commit 3e1478e

Please sign in to comment.