import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:syncrow_web/pages/device_managment/all_devices/models/device_reports.dart'; import 'package:syncrow_web/pages/device_managment/shared/table/table_cell_widget.dart'; import 'package:syncrow_web/pages/device_managment/shared/table/table_header.dart'; import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/extension/build_context_x.dart'; // ignore: must_be_immutable class ReportsTable extends StatelessWidget { final DeviceReport report; final String? thirdColumnTitle; final String? thirdColumnDescription; final Function(int index) onRowTap; final VoidCallback onClose; bool? hideValueShowDescription; bool? mainDoorSensor; bool? garageDoorSensor; bool? waterLeak; ReportsTable({ super.key, required this.report, required this.onRowTap, required this.onClose, this.thirdColumnTitle, this.thirdColumnDescription, this.hideValueShowDescription, this.mainDoorSensor, this.garageDoorSensor, this.waterLeak, }); @override Widget build(BuildContext context) { return report.data == null || report.data!.isEmpty ? Container( padding: const EdgeInsets.all(20.0), width: MediaQuery.sizeOf(context).width, alignment: AlignmentDirectional.center, height: 100, child: Text( 'No reports found', style: context.textTheme.bodyLarge!.copyWith(color: ColorsManager.grayColor), ), ) : Stack( children: [ Padding( padding: const EdgeInsets.all(20.0), child: Table( border: TableBorder.all(color: Colors.grey.shade300, width: 1), columnWidths: const { 0: FlexColumnWidth(), 1: FlexColumnWidth(), 2: FlexColumnWidth(), }, children: [ TableRow( decoration: BoxDecoration(color: Colors.grey.shade200), children: [ const TableHeader(title: 'Date'), const TableHeader(title: 'Time'), TableHeader(title: thirdColumnTitle ?? 'Status'), ], ), if (report.data != null) ...report.data!.asMap().entries.map((entry) { int index = entry.key; DeviceEvent data = entry.value; // Parse eventTime into Date and Time DateTime eventDateTime = DateTime.fromMillisecondsSinceEpoch(data.eventTime!); String date = DateFormat('dd/MM/yyyy').format(eventDateTime); String time = DateFormat('HH:mm').format(eventDateTime); String value; if (hideValueShowDescription == true) { if (mainDoorSensor != null && mainDoorSensor == true) { value = data.value == 'true' ? 'Open' : 'Close'; } else if (garageDoorSensor != null && garageDoorSensor == true) { value = data.value == 'true' ? 'Opened' : 'Closed'; } else if (waterLeak != null && waterLeak == true) { value = data.value == 'normal' ? 'Normal' : 'Leak Detected'; } else { value = '${data.value!} ${thirdColumnDescription ?? ''}'; } } else { value = '${data.value!} ${thirdColumnDescription ?? ''}'; } return TableRow( children: [ TableCellWidget(value: date), TableCellWidget(value: time), TableCellWidget( value: value, onTap: () => onRowTap(index), ), ], ); }) ], ), ), Positioned( top: 0, right: 0, child: IconButton( icon: const Icon( Icons.close, color: Colors.red, size: 18, ), onPressed: onClose, ), ), ], ); } }