import 'package:flutter/material.dart'; import 'package:flutter_calendar_carousel/classes/event.dart'; import 'package:flutter_calendar_carousel/classes/event_list.dart'; import 'package:ftc_mobile_app/models/rota/WeekArrayData.dart'; import 'package:get/get.dart'; import 'package:intl/intl.dart'; import '../../ftc_mobile_app.dart'; import '../../models/rota/LiveRoasterResponseData.dart'; class RotaDashboardScreenController extends GetxController with GetSingleTickerProviderStateMixin { late TabController tabController = TabController(length: 2, vsync: this); final GlobalKey screenKey = GlobalKey(); final loadingShifts = false.obs; final myShiftsList = RxList(); //it holds shifts list for the selected date final dateFilteredShiftsList = RxList(); final targetDateTime = DateTime.now().obs; final markedDatesMap = EventList(events: {}).obs; void removeFocus() { FocusScope.of(screenKey.currentContext!).unfocus(); } @override void onInit() { getMyShifts(); super.onInit(); } Future getMyShifts() async { loadingShifts.value = true; var response = await RotaService().getMyShifts( startDateMills: DateTime.now().subtract(30.days).millisecondsSinceEpoch, endDateMills: DateTime.now().add(30.days).millisecondsSinceEpoch); if (response is LiveRoasterResponseData) { myShiftsList.value = response.daysArray ?? []; createCalendarEvents(myShiftsList()); _filterShifts(targetDateTime()); } else if (response is String && response.isNotEmpty) { FrequentFunctions.showToast(message: response); } loadingShifts.value = false; } createCalendarEvents(List list) { final Map> map = {}; for (final data in list) { // final date = DateTime.fromMillisecondsSinceEpoch(data.shiftDate!); if (data.shiftDateTime == null) return; map.addAll({ DateTime(data.shiftDateTime!.year, data.shiftDateTime!.month, data.shiftDateTime!.day): [ Event( date: DateTime(data.shiftDateTime!.year, data.shiftDateTime!.month, data.shiftDateTime!.day), title: data.serviceUserId?.displayName ?? "", icon: CalendarWidget.underlineIcon(), ) ], }); } markedDatesMap.value.events ..clear() ..addAll(map); markedDatesMap.refresh(); } onDateSelect(DateTime date, List events) { targetDateTime.value = date; if (events.isNotEmpty) { _filterShifts(date); } } _filterShifts(DateTime date) { dateFilteredShiftsList.value = myShiftsList.where((e) { return DateFormatter.dateFormatter .format(DateTime.fromMillisecondsSinceEpoch(e.shiftDate!)) == DateFormatter.dateFormatter.format(date); }).toList(); } @override void dispose() { tabController.dispose(); Get.delete(); super.dispose(); } }