This repository has been archived on 2024-10-18. You can view files and clone it, but cannot push or open issues or pull requests.
ftc_patient_app/lib/controllers/rota/rota_dashboard_screen_contr...

103 lines
3.0 KiB
Dart

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<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
final loadingShifts = false.obs;
final myShiftsList = RxList<DaysArrayData>();
//it holds shifts list for the selected date
final dateFilteredShiftsList = RxList<DaysArrayData>();
final targetDateTime = DateTime.now().obs;
final markedDatesMap = EventList<Event>(events: {}).obs;
void removeFocus() {
FocusScope.of(screenKey.currentContext!).unfocus();
}
@override
void onInit() {
getMyShifts();
super.onInit();
}
Future<void> 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<DaysArrayData> list) {
final Map<DateTime, List<Event>> 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<Event> 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<RotaDashboardScreenController>();
super.dispose();
}
}