group method

Map<Weekday, Map<(SlotTimeUnit, SlotTimeUnit), List<Slot>>> group()

Groups all slots by their weekday and time unit.

Implementation

Map<Weekday, Map<(SlotTimeUnit, SlotTimeUnit), List<Slot>>> group() {
  if (!state.hasData) {
    return {};
  }

  final grouped = <Weekday, Map<(SlotTimeUnit, SlotTimeUnit), List<Slot>>>{};

  for (final slot in state.requireData) {
    grouped[slot.weekday] ??= {};

    final timeGroup = (slot.startUnit, slot.endUnit);

    grouped[slot.weekday]![timeGroup] ??= [];

    grouped[slot.weekday]![timeGroup]!.add(slot);

    grouped[slot.weekday]![timeGroup]!.sort(
      (a, b) {
        if (a.startUnit == b.startUnit) {
          return a.endUnit.compareTo(b.endUnit);
        }

        return a.startUnit.compareTo(b.startUnit);
      },
    );
  }

  return grouped;
}