103 lines
3.0 KiB
Dart
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();
|
|
}
|
|
}
|