diff --git a/assets/icons/empty_records.svg b/assets/icons/empty_records.svg
new file mode 100644
index 00000000..662a3e47
--- /dev/null
+++ b/assets/icons/empty_records.svg
@@ -0,0 +1,15 @@
+
diff --git a/lib/pages/device_managment/water_heater/bloc/water_heater_bloc.dart b/lib/pages/device_managment/water_heater/bloc/water_heater_bloc.dart
index fcf52732..07f73569 100644
--- a/lib/pages/device_managment/water_heater/bloc/water_heater_bloc.dart
+++ b/lib/pages/device_managment/water_heater/bloc/water_heater_bloc.dart
@@ -5,8 +5,11 @@ import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import 'package:syncrow_web/pages/device_managment/all_devices/models/device_status.dart';
+import 'package:syncrow_web/pages/device_managment/water_heater/models/schedule_entry.dart';
+import 'package:syncrow_web/pages/device_managment/water_heater/models/send_schedule.dart';
import 'package:syncrow_web/pages/device_managment/water_heater/models/water_heater_status_model.dart';
import 'package:syncrow_web/services/devices_mang_api.dart';
+import 'package:syncrow_web/utils/format_date_time.dart';
part 'water_heater_event.dart';
part 'water_heater_state.dart';
@@ -21,11 +24,63 @@ class WaterHeaterBloc extends Bloc {
on(_onAddSchedule);
on(_onDeleteSchedule);
on(_onUpdateSchedule);
+ on(_initializeAddSchedule);
+ on(_updateSelectedTime);
+ on(_updateSelectedDay);
+ on(_updateFunctionOn);
}
late WaterHeaterStatusModel deviceStatus;
Timer? _countdownTimer;
+ FutureOr _initializeAddSchedule(
+ InitializeAddScheduleEvent event,
+ Emitter emit,
+ ) {
+ final currentState = state as WaterHeaterDeviceStatusLoaded;
+ if (event.isEditing) {
+ emit(currentState.copyWith(
+ selectedTime: event.selectedTime,
+ selectedDays: event.selectedDays ?? List.filled(7, false),
+ functionOn: event.functionOn ?? false,
+ isEditing: event.isEditing,
+ ));
+ } else {
+ emit(currentState.copyWith(
+ selectedTime: null,
+ selectedDays: List.filled(7, false),
+ functionOn: false,
+ isEditing: false,
+ ));
+ }
+ }
+
+ FutureOr _updateSelectedTime(
+ UpdateSelectedTimeEvent event,
+ Emitter emit,
+ ) {
+ final currentState = state as WaterHeaterDeviceStatusLoaded;
+ emit(currentState.copyWith(selectedTime: event.selectedTime));
+ }
+
+ FutureOr _updateSelectedDay(
+ UpdateSelectedDayEvent event,
+ Emitter emit,
+ ) {
+ final currentState = state as WaterHeaterDeviceStatusLoaded;
+ final updatedDays = List.from(currentState.selectedDays);
+ updatedDays[event.index] = event.value;
+ emit(currentState.copyWith(selectedDays: updatedDays));
+ }
+
+ FutureOr _updateFunctionOn(
+ UpdateFunctionOnEvent event,
+ Emitter emit,
+ ) {
+ final currentState = state as WaterHeaterDeviceStatusLoaded;
+ emit(currentState.copyWith(functionOn: event.isOn));
+ }
+
FutureOr _updateScheduleEvent(
UpdateScheduleEvent event,
Emitter emit,
@@ -301,21 +356,50 @@ class WaterHeaterBloc extends Bloc {
FutureOr _onAddSchedule(
AddScheduleEvent event,
Emitter emit,
- ) {
+ ) async {
if (state is WaterHeaterDeviceStatusLoaded) {
final currentState = state as WaterHeaterDeviceStatusLoaded;
- final newSchedule = ScheduleEntry(
- selectedDays: event.selectedDays,
- time: event.time,
- functionOn: event.functionOn,
- );
- final updatedSchedules = List.from(currentState.schedules)
- ..add(newSchedule);
- emit(currentState.copyWith(schedules: updatedSchedules));
+ SendSchedule sendSchedule = SendSchedule(
+ category: event.category,
+ time: formatTimeOfDayToISO(event.time),
+ function: Status(code: 'switch_1', value: event.functionOn),
+ days: _getSelectedDaysString(event.selectedDays),
+ );
+
+ bool success = await DevicesManagementApi()
+ .addScheduleRecord(sendSchedule, currentState.status.uuid);
+
+ if (success) {
+ final newSchedule = ScheduleEntry(
+ selectedDays: event.selectedDays,
+ time: event.time,
+ functionOn: event.functionOn,
+ category: event.category,
+ );
+
+ final updatedSchedules =
+ List.from(currentState.schedules)..add(newSchedule);
+
+ emit(currentState.copyWith(schedules: updatedSchedules));
+ } else {
+ emit(const WaterHeaterFailedState(
+ error: 'Failed to add schedule. Please try again.'));
+ }
}
}
+ List _getSelectedDaysString(List selectedDays) {
+ final days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
+ List selectedDaysStr = [];
+ for (int i = 0; i < selectedDays.length; i++) {
+ if (selectedDays[i]) {
+ selectedDaysStr.add(days[i]);
+ }
+ }
+ return selectedDaysStr;
+ }
+
FutureOr _onDeleteSchedule(
DeleteScheduleEvent event,
Emitter emit,
@@ -332,17 +416,42 @@ class WaterHeaterBloc extends Bloc {
FutureOr _onUpdateSchedule(
UpdateScheduleEntryEvent event,
Emitter emit,
- ) {
+ ) async {
if (state is WaterHeaterDeviceStatusLoaded) {
final currentState = state as WaterHeaterDeviceStatusLoaded;
- final updatedSchedules = List.from(currentState.schedules);
- updatedSchedules[event.index] = ScheduleEntry(
- selectedDays: event.selectedDays,
- time: event.time,
- functionOn: event.functionOn,
+
+ // Get the current schedule ID or UUID (assuming it's stored in the schedules)
+ String scheduleId =
+ ""; // Retrieve the actual schedule ID based on your model
+
+ // Call the API to update the schedule
+ bool success = await DevicesManagementApi().updateScheduleRecord(
+ enable: event.functionOn,
+ uuid: event.deviceId,
+ scheduleId: scheduleId,
);
- emit(currentState.copyWith(schedules: updatedSchedules));
+ if (success) {
+ final updatedSchedules =
+ List.from(currentState.schedules);
+
+ final updatedScheduleIndex = updatedSchedules.indexWhere((schedule) {
+ return schedule.category == event.category;
+ });
+
+ if (updatedScheduleIndex != -1) {
+ updatedSchedules[updatedScheduleIndex] = ScheduleEntry(
+ category: event.category,
+ selectedDays: updatedSchedules[updatedScheduleIndex].selectedDays,
+ time: updatedSchedules[updatedScheduleIndex].time,
+ functionOn: event.functionOn,
+ );
+ emit(currentState.copyWith(schedules: updatedSchedules));
+ }
+ } else {
+ emit(const WaterHeaterFailedState(
+ error: 'Failed to update schedule. Please try again.'));
+ }
}
}
diff --git a/lib/pages/device_managment/water_heater/bloc/water_heater_event.dart b/lib/pages/device_managment/water_heater/bloc/water_heater_event.dart
index 360f4a4f..0c9cd794 100644
--- a/lib/pages/device_managment/water_heater/bloc/water_heater_event.dart
+++ b/lib/pages/device_managment/water_heater/bloc/water_heater_event.dart
@@ -67,15 +67,17 @@ final class AddScheduleEvent extends WaterHeaterEvent {
final List selectedDays;
final TimeOfDay time;
final bool functionOn;
+ final String category;
const AddScheduleEvent({
required this.selectedDays,
required this.time,
required this.functionOn,
+ required this.category,
});
@override
- List