From 2955533209ae2d120cf66ef3d377ece389ed7b2b Mon Sep 17 00:00:00 2001 From: ashrafzarkanisala Date: Sun, 22 Sep 2024 21:56:17 +0300 Subject: [PATCH] push factory reset logic and call for all devices --- .../device_managment/ac/bloc/ac_bloc.dart | 19 +++++++ .../device_managment/ac/bloc/ac_event.dart | 14 +++++ .../ac/view/ac_device_batch_control.dart | 11 +++- .../models/factory_reset_model.dart | 55 +++++++++++++++++++ .../ceiling_sensor/bloc/bloc.dart | 23 +++++++- .../ceiling_sensor/bloc/event.dart | 14 +++++ .../view/ceiling_sensor_batch_control.dart | 13 ++++- .../curtain/bloc/curtain_bloc.dart | 19 +++++++ .../curtain/bloc/curtain_event.dart | 12 ++++ .../view/curtain_batch_status_view.dart | 12 +++- .../door_lock/bloc/door_lock_bloc.dart | 19 +++++++ .../door_lock/bloc/door_lock_event.dart | 12 ++++ .../view/door_lock_batch_control_view.dart | 15 ++++- .../gateway/bloc/gate_way_bloc.dart | 20 +++++++ .../gateway/bloc/gate_way_event.dart | 12 ++++ .../gateway/view/gateway_batch_control.dart | 13 ++++- .../bloc/wall_light_switch_bloc.dart | 19 +++++++ .../bloc/wall_light_switch_event.dart | 11 ++++ .../view/wall_light_batch_control.dart | 9 ++- .../shared/batch_control/factory_reset.dart | 53 ++++++++++-------- .../bloc/living_room_bloc.dart | 20 +++++++ .../bloc/living_room_event.dart | 9 +++ .../view/living_room_batch_controls.dart | 10 +++- .../bloc/two_gang_switch_bloc.dart | 19 +++++++ .../bloc/two_gang_switch_event.dart | 11 ++++ .../view/wall_light_batch_control.dart | 10 +++- .../wall_sensor/bloc/bloc.dart | 19 +++++++ .../wall_sensor/bloc/event.dart | 11 ++++ .../view/wall_sensor_batch_control.dart | 12 +++- lib/services/devices_mang_api.dart | 18 ++++++ lib/utils/constants/api_const.dart | 2 + 31 files changed, 481 insertions(+), 35 deletions(-) create mode 100644 lib/pages/device_managment/all_devices/models/factory_reset_model.dart diff --git a/lib/pages/device_managment/ac/bloc/ac_bloc.dart b/lib/pages/device_managment/ac/bloc/ac_bloc.dart index 54f36889..7c6ee628 100644 --- a/lib/pages/device_managment/ac/bloc/ac_bloc.dart +++ b/lib/pages/device_managment/ac/bloc/ac_bloc.dart @@ -18,6 +18,7 @@ class AcBloc extends Bloc { on(_onFetchAcBatchStatus); on(_onAcControl); on(_onAcBatchControl); + on(_onFactoryReset); } FutureOr _onFetchAcStatus( @@ -184,4 +185,22 @@ class AcBloc extends Bloc { emit: emit, ); } + + FutureOr _onFactoryReset( + AcFactoryResetEvent event, Emitter emit) async { + emit(AcsLoadingState()); + try { + final response = await DevicesManagementApi().factoryReset( + event.factoryResetModel, + event.deviceId, + ); + if (!response) { + emit(const AcsFailedState(error: 'Failed')); + } else { + add(AcFetchDeviceStatusEvent(event.deviceId)); + } + } catch (e) { + emit(AcsFailedState(error: e.toString())); + } + } } diff --git a/lib/pages/device_managment/ac/bloc/ac_event.dart b/lib/pages/device_managment/ac/bloc/ac_event.dart index acb81d95..8d49df96 100644 --- a/lib/pages/device_managment/ac/bloc/ac_event.dart +++ b/lib/pages/device_managment/ac/bloc/ac_event.dart @@ -1,4 +1,5 @@ import 'package:equatable/equatable.dart'; +import 'package:syncrow_web/pages/device_managment/all_devices/models/factory_reset_model.dart'; sealed class AcsEvent extends Equatable { const AcsEvent(); @@ -54,3 +55,16 @@ class AcBatchControlEvent extends AcsEvent { @override List get props => [devicesIds, code, value]; } + +class AcFactoryResetEvent extends AcsEvent { + final String deviceId; + final FactoryResetModel factoryResetModel; + + const AcFactoryResetEvent({ + required this.deviceId, + required this.factoryResetModel, + }); + + @override + List get props => [deviceId, factoryResetModel]; +} diff --git a/lib/pages/device_managment/ac/view/ac_device_batch_control.dart b/lib/pages/device_managment/ac/view/ac_device_batch_control.dart index edda3c5d..987084fa 100644 --- a/lib/pages/device_managment/ac/view/ac_device_batch_control.dart +++ b/lib/pages/device_managment/ac/view/ac_device_batch_control.dart @@ -6,6 +6,7 @@ import 'package:syncrow_web/pages/device_managment/ac/bloc/ac_state.dart'; import 'package:syncrow_web/pages/device_managment/ac/view/batch_control_list/batch_ac_mode.dart'; import 'package:syncrow_web/pages/device_managment/ac/view/batch_control_list/batch_current_temp.dart'; import 'package:syncrow_web/pages/device_managment/ac/view/batch_control_list/batch_fan_speed.dart'; +import 'package:syncrow_web/pages/device_managment/all_devices/models/factory_reset_model.dart'; import 'package:syncrow_web/pages/device_managment/shared/batch_control/factory_reset.dart'; import 'package:syncrow_web/pages/device_managment/shared/batch_control/firmware_update.dart'; import 'package:syncrow_web/pages/device_managment/shared/toggle_widget.dart'; @@ -89,7 +90,15 @@ class AcDeviceBatchControlView extends StatelessWidget }, ), FirmwareUpdateWidget(deviceId: devicesIds.first, version: 5), - FactoryResetWidget(deviceId: devicesIds.first), + FactoryResetWidget( + callFactoryReset: () { + context.read().add(AcFactoryResetEvent( + deviceId: state.status.uuid, + factoryResetModel: + FactoryResetModel(devicesUuid: devicesIds), + )); + }, + ), ], ); } else if (state is AcsLoadingState) { diff --git a/lib/pages/device_managment/all_devices/models/factory_reset_model.dart b/lib/pages/device_managment/all_devices/models/factory_reset_model.dart new file mode 100644 index 00000000..aec14d16 --- /dev/null +++ b/lib/pages/device_managment/all_devices/models/factory_reset_model.dart @@ -0,0 +1,55 @@ +import 'package:flutter/foundation.dart'; + +class FactoryResetModel { + final List devicesUuid; + + FactoryResetModel({ + required this.devicesUuid, + }); + + factory FactoryResetModel.fromJson(Map json) { + return FactoryResetModel( + devicesUuid: List.from(json['devicesUuid']), + ); + } + + Map toJson() { + return { + 'devicesUuid': devicesUuid, + }; + } + + FactoryResetModel copyWith({ + List? devicesUuid, + }) { + return FactoryResetModel( + devicesUuid: devicesUuid ?? this.devicesUuid, + ); + } + + Map toMap() { + return { + 'devicesUuid': devicesUuid, + }; + } + + factory FactoryResetModel.fromMap(Map map) { + return FactoryResetModel( + devicesUuid: List.from(map['devicesUuid']), + ); + } + + @override + String toString() => 'FactoryReset(devicesUuid: $devicesUuid)'; + + @override + bool operator ==(Object other) { + if (identical(this, other)) return true; + + return other is FactoryResetModel && + listEquals(other.devicesUuid, devicesUuid); + } + + @override + int get hashCode => devicesUuid.hashCode; +} diff --git a/lib/pages/device_managment/ceiling_sensor/bloc/bloc.dart b/lib/pages/device_managment/ceiling_sensor/bloc/bloc.dart index ba8e4114..a2382ba6 100644 --- a/lib/pages/device_managment/ceiling_sensor/bloc/bloc.dart +++ b/lib/pages/device_managment/ceiling_sensor/bloc/bloc.dart @@ -20,14 +20,15 @@ class CeilingSensorBloc extends Bloc { on(_getDeviceReports); on(_showDescription); on(_backToGridView); + on(_onFactoryReset); } void _fetchCeilingSensorStatus( CeilingInitialEvent event, Emitter emit) async { emit(CeilingLoadingInitialState()); try { - var response = await DevicesManagementApi() - .getDeviceStatus(event.deviceId); + var response = + await DevicesManagementApi().getDeviceStatus(event.deviceId); deviceStatus = CeilingSensorModel.fromJson(response.status); emit(CeilingUpdateState(ceilingSensorModel: deviceStatus)); // _listenToChanges(); @@ -188,4 +189,22 @@ class CeilingSensorBloc extends Bloc { return; } } + + FutureOr _onFactoryReset( + CeilingFactoryResetEvent event, Emitter emit) async { + emit(CeilingLoadingNewSate(ceilingSensorModel: deviceStatus)); + try { + final response = await DevicesManagementApi().factoryReset( + event.factoryResetModel, + event.devicesId, + ); + if (!response) { + emit(const CeilingFailedState(error: 'Failed')); + } else { + emit(CeilingUpdateState(ceilingSensorModel: deviceStatus)); + } + } catch (e) { + emit(CeilingFailedState(error: e.toString())); + } + } } diff --git a/lib/pages/device_managment/ceiling_sensor/bloc/event.dart b/lib/pages/device_managment/ceiling_sensor/bloc/event.dart index c1efa47c..582c9836 100644 --- a/lib/pages/device_managment/ceiling_sensor/bloc/event.dart +++ b/lib/pages/device_managment/ceiling_sensor/bloc/event.dart @@ -1,4 +1,5 @@ import 'package:equatable/equatable.dart'; +import 'package:syncrow_web/pages/device_managment/all_devices/models/factory_reset_model.dart'; abstract class CeilingSensorEvent extends Equatable { const CeilingSensorEvent(); @@ -69,3 +70,16 @@ class ShowCeilingDescriptionEvent extends CeilingSensorEvent { } class BackToCeilingGridViewEvent extends CeilingSensorEvent {} + +class CeilingFactoryResetEvent extends CeilingSensorEvent { + final String devicesId; + final FactoryResetModel factoryResetModel; + + const CeilingFactoryResetEvent({ + required this.devicesId, + required this.factoryResetModel, + }); + + @override + List get props => [devicesId, factoryResetModel]; +} diff --git a/lib/pages/device_managment/ceiling_sensor/view/ceiling_sensor_batch_control.dart b/lib/pages/device_managment/ceiling_sensor/view/ceiling_sensor_batch_control.dart index f95852a5..a6e60c8f 100644 --- a/lib/pages/device_managment/ceiling_sensor/view/ceiling_sensor_batch_control.dart +++ b/lib/pages/device_managment/ceiling_sensor/view/ceiling_sensor_batch_control.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:syncrow_web/pages/device_managment/all_devices/models/factory_reset_model.dart'; import 'package:syncrow_web/pages/device_managment/ceiling_sensor/bloc/bloc.dart'; import 'package:syncrow_web/pages/device_managment/ceiling_sensor/bloc/event.dart'; import 'package:syncrow_web/pages/device_managment/ceiling_sensor/bloc/state.dart'; @@ -112,7 +113,17 @@ class CeilingSensorBatchControlView extends StatelessWidget ), ), FirmwareUpdateWidget(deviceId: devicesIds.first, version: 4), - FactoryResetWidget(deviceId: devicesIds.first), + FactoryResetWidget( + callFactoryReset: () { + context.read().add( + CeilingFactoryResetEvent( + devicesId: devicesIds.first, + factoryResetModel: + FactoryResetModel(devicesUuid: devicesIds), + ), + ); + }, + ), ], ); } diff --git a/lib/pages/device_managment/curtain/bloc/curtain_bloc.dart b/lib/pages/device_managment/curtain/bloc/curtain_bloc.dart index eb031552..4599f360 100644 --- a/lib/pages/device_managment/curtain/bloc/curtain_bloc.dart +++ b/lib/pages/device_managment/curtain/bloc/curtain_bloc.dart @@ -15,6 +15,7 @@ class CurtainBloc extends Bloc { on(_onFetchBatchStatus); on(_onCurtainControl); on(_onCurtainBatchControl); + on(_onFactoryReset); } FutureOr _onFetchDeviceStatus( @@ -139,4 +140,22 @@ class CurtainBloc extends Bloc { isBatch: true, ); } + + FutureOr _onFactoryReset( + CurtainFactoryReset event, Emitter emit) async { + emit(CurtainStatusLoading()); + try { + final response = await DevicesManagementApi().factoryReset( + event.factoryReset, + event.deviceId, + ); + if (!response) { + emit(const CurtainControlError('Failed')); + } else { + add(CurtainFetchDeviceStatus(event.deviceId)); + } + } catch (e) { + emit(CurtainControlError(e.toString())); + } + } } diff --git a/lib/pages/device_managment/curtain/bloc/curtain_event.dart b/lib/pages/device_managment/curtain/bloc/curtain_event.dart index 8ef85145..7236016c 100644 --- a/lib/pages/device_managment/curtain/bloc/curtain_event.dart +++ b/lib/pages/device_managment/curtain/bloc/curtain_event.dart @@ -1,4 +1,5 @@ import 'package:equatable/equatable.dart'; +import 'package:syncrow_web/pages/device_managment/all_devices/models/factory_reset_model.dart'; sealed class CurtainEvent extends Equatable { const CurtainEvent(); @@ -48,3 +49,14 @@ class CurtainBatchControl extends CurtainEvent { @override List get props => [devicesIds, code, value]; } + +class CurtainFactoryReset extends CurtainEvent { + final String deviceId; + final FactoryResetModel factoryReset; + + const CurtainFactoryReset( + {required this.deviceId, required this.factoryReset}); + + @override + List get props => [deviceId, factoryReset]; +} diff --git a/lib/pages/device_managment/curtain/view/curtain_batch_status_view.dart b/lib/pages/device_managment/curtain/view/curtain_batch_status_view.dart index ec1a0076..b558c837 100644 --- a/lib/pages/device_managment/curtain/view/curtain_batch_status_view.dart +++ b/lib/pages/device_managment/curtain/view/curtain_batch_status_view.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_web/pages/common/curtain_toggle.dart'; +import 'package:syncrow_web/pages/device_managment/all_devices/models/factory_reset_model.dart'; import 'package:syncrow_web/pages/device_managment/curtain/bloc/curtain_bloc.dart'; import 'package:syncrow_web/pages/device_managment/curtain/bloc/curtain_event.dart'; import 'package:syncrow_web/pages/device_managment/curtain/bloc/curtain_state.dart'; @@ -68,7 +69,16 @@ class CurtainBatchStatusView extends StatelessWidget }, ), FirmwareUpdateWidget(deviceId: devicesIds.first, version: 5), - FactoryResetWidget(deviceId: devicesIds.first), + FactoryResetWidget( + callFactoryReset: () { + context.read().add( + CurtainFactoryReset( + deviceId: devicesIds.first, + factoryReset: FactoryResetModel(devicesUuid: devicesIds), + ), + ); + }, + ), ], ); } diff --git a/lib/pages/device_managment/door_lock/bloc/door_lock_bloc.dart b/lib/pages/device_managment/door_lock/bloc/door_lock_bloc.dart index 8ad2a05c..c50203f3 100644 --- a/lib/pages/device_managment/door_lock/bloc/door_lock_bloc.dart +++ b/lib/pages/device_managment/door_lock/bloc/door_lock_bloc.dart @@ -17,6 +17,7 @@ class DoorLockBloc extends Bloc { on(_onFetchDeviceStatus); //on(_onDoorLockControl); on(_updateLock); + on(_onFactoryReset); } FutureOr _onFetchDeviceStatus( @@ -113,4 +114,22 @@ class DoorLockBloc extends Bloc { return null; } } + + FutureOr _onFactoryReset( + DoorLockFactoryReset event, Emitter emit) async { + emit(DoorLockStatusLoading()); + try { + final response = await DevicesManagementApi().factoryReset( + event.factoryReset, + event.deviceId, + ); + if (!response) { + emit(const DoorLockControlError('Failed')); + } else { + add(DoorLockFetchStatus(event.deviceId)); + } + } catch (e) { + emit(DoorLockControlError(e.toString())); + } + } } diff --git a/lib/pages/device_managment/door_lock/bloc/door_lock_event.dart b/lib/pages/device_managment/door_lock/bloc/door_lock_event.dart index 4033676f..54fa1ddf 100644 --- a/lib/pages/device_managment/door_lock/bloc/door_lock_event.dart +++ b/lib/pages/device_managment/door_lock/bloc/door_lock_event.dart @@ -1,4 +1,5 @@ import 'package:equatable/equatable.dart'; +import 'package:syncrow_web/pages/device_managment/all_devices/models/factory_reset_model.dart'; sealed class DoorLockEvent extends Equatable { const DoorLockEvent(); @@ -38,4 +39,15 @@ class UpdateLockEvent extends DoorLockEvent { List get props => [value]; } +class DoorLockFactoryReset extends DoorLockEvent { + final String deviceId; + final FactoryResetModel factoryReset; + const DoorLockFactoryReset({ + required this.deviceId, + required this.factoryReset, + }); + + @override + List get props => [deviceId, factoryReset]; +} diff --git a/lib/pages/device_managment/door_lock/view/door_lock_batch_control_view.dart b/lib/pages/device_managment/door_lock/view/door_lock_batch_control_view.dart index e4875f12..4efd76fc 100644 --- a/lib/pages/device_managment/door_lock/view/door_lock_batch_control_view.dart +++ b/lib/pages/device_managment/door_lock/view/door_lock_batch_control_view.dart @@ -1,4 +1,8 @@ import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:syncrow_web/pages/device_managment/all_devices/models/factory_reset_model.dart'; +import 'package:syncrow_web/pages/device_managment/door_lock/bloc/door_lock_bloc.dart'; +import 'package:syncrow_web/pages/device_managment/door_lock/bloc/door_lock_event.dart'; import 'package:syncrow_web/pages/device_managment/shared/batch_control/factory_reset.dart'; import 'package:syncrow_web/pages/device_managment/shared/batch_control/firmware_update.dart'; import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart'; @@ -30,7 +34,16 @@ class DoorLockBatchControlView extends StatelessWidget deviceId: devicesIds.first, version: 12, ), - FactoryResetWidget(deviceId: devicesIds.first), + FactoryResetWidget( + callFactoryReset: () { + BlocProvider.of(context).add( + DoorLockFactoryReset( + deviceId: devicesIds.first, + factoryReset: FactoryResetModel(devicesUuid: devicesIds), + ), + ); + }, + ), ], ), ); diff --git a/lib/pages/device_managment/gateway/bloc/gate_way_bloc.dart b/lib/pages/device_managment/gateway/bloc/gate_way_bloc.dart index ca572bf0..f4c16ba0 100644 --- a/lib/pages/device_managment/gateway/bloc/gate_way_bloc.dart +++ b/lib/pages/device_managment/gateway/bloc/gate_way_bloc.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; +import 'package:syncrow_web/pages/device_managment/all_devices/models/factory_reset_model.dart'; import 'package:syncrow_web/pages/visitor_password/model/device_model.dart'; import 'package:syncrow_web/services/devices_mang_api.dart'; @@ -12,6 +13,7 @@ class GateWayBloc extends Bloc { GateWayBloc() : super(GateWayInitial()) { on((event, emit) {}); on(_getGatWayById); + on(_onFactoryReset); } FutureOr _getGatWayById( @@ -27,4 +29,22 @@ class GateWayBloc extends Bloc { return; } } + + FutureOr _onFactoryReset( + GateWayFactoryReset event, Emitter emit) async { + emit(GatewayLoadingState()); + try { + final response = await DevicesManagementApi().factoryReset( + event.factoryReset, + event.deviceId, + ); + if (!response) { + emit(const ErrorState(message: 'Failed')); + } else { + add(GatWayById(event.deviceId)); + } + } catch (e) { + emit(ErrorState(message: e.toString())); + } + } } diff --git a/lib/pages/device_managment/gateway/bloc/gate_way_event.dart b/lib/pages/device_managment/gateway/bloc/gate_way_event.dart index 22c81a12..6ee5faf5 100644 --- a/lib/pages/device_managment/gateway/bloc/gate_way_event.dart +++ b/lib/pages/device_managment/gateway/bloc/gate_way_event.dart @@ -18,3 +18,15 @@ class GatWayById extends GateWayEvent { final String getWayId; const GatWayById(this.getWayId); } + +class GateWayFactoryReset extends GateWayEvent { + final String deviceId; + final FactoryResetModel factoryReset; + const GateWayFactoryReset({ + required this.deviceId, + required this.factoryReset, + }); + + @override + List get props => [deviceId, factoryReset]; +} diff --git a/lib/pages/device_managment/gateway/view/gateway_batch_control.dart b/lib/pages/device_managment/gateway/view/gateway_batch_control.dart index f303cdba..8679a78f 100644 --- a/lib/pages/device_managment/gateway/view/gateway_batch_control.dart +++ b/lib/pages/device_managment/gateway/view/gateway_batch_control.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:syncrow_web/pages/device_managment/all_devices/models/factory_reset_model.dart'; import 'package:syncrow_web/pages/device_managment/gateway/bloc/gate_way_bloc.dart'; import 'package:syncrow_web/pages/device_managment/shared/batch_control/factory_reset.dart'; import 'package:syncrow_web/pages/device_managment/shared/batch_control/firmware_update.dart'; @@ -36,7 +37,17 @@ class GatewayBatchControlView extends StatelessWidget ), children: [ FirmwareUpdateWidget(deviceId: gatewayIds.first, version: 2), - FactoryResetWidget(deviceId: gatewayIds.first), + FactoryResetWidget( + callFactoryReset: () { + context.read().add( + GateWayFactoryReset( + deviceId: gatewayIds.first, + factoryReset: + FactoryResetModel(devicesUuid: gatewayIds), + ), + ); + }, + ), ], ); } else { diff --git a/lib/pages/device_managment/one_gang_switch/bloc/wall_light_switch_bloc.dart b/lib/pages/device_managment/one_gang_switch/bloc/wall_light_switch_bloc.dart index ef25e7ac..595e7e06 100644 --- a/lib/pages/device_managment/one_gang_switch/bloc/wall_light_switch_bloc.dart +++ b/lib/pages/device_managment/one_gang_switch/bloc/wall_light_switch_bloc.dart @@ -15,6 +15,7 @@ class WallLightSwitchBloc on(_onControl); on(_onFetchBatchStatus); on(_onBatchControl); + on(_onFactoryReset); } late WallLightStatusModel deviceStatus; @@ -153,4 +154,22 @@ class WallLightSwitchBloc isBatch: true, ); } + + FutureOr _onFactoryReset( + WallLightFactoryReset event, Emitter emit) async { + emit(WallLightSwitchLoading()); + try { + final response = await DevicesManagementApi().factoryReset( + event.factoryReset, + event.deviceId, + ); + if (!response) { + emit(WallLightSwitchError('Failed')); + } else { + emit(WallLightSwitchStatusLoaded(deviceStatus)); + } + } catch (e) { + emit(WallLightSwitchError(e.toString())); + } + } } diff --git a/lib/pages/device_managment/one_gang_switch/bloc/wall_light_switch_event.dart b/lib/pages/device_managment/one_gang_switch/bloc/wall_light_switch_event.dart index 88c86c97..5c601484 100644 --- a/lib/pages/device_managment/one_gang_switch/bloc/wall_light_switch_event.dart +++ b/lib/pages/device_managment/one_gang_switch/bloc/wall_light_switch_event.dart @@ -1,4 +1,5 @@ import 'package:equatable/equatable.dart'; +import 'package:syncrow_web/pages/device_managment/all_devices/models/factory_reset_model.dart'; class WallLightSwitchEvent extends Equatable { @override @@ -46,3 +47,13 @@ class WallLightSwitchBatchControl extends WallLightSwitchEvent { @override List get props => [devicesIds, code, value]; } + +class WallLightFactoryReset extends WallLightSwitchEvent { + final String deviceId; + final FactoryResetModel factoryReset; + + WallLightFactoryReset({required this.deviceId, required this.factoryReset}); + + @override + List get props => [deviceId, factoryReset]; +} diff --git a/lib/pages/device_managment/one_gang_switch/view/wall_light_batch_control.dart b/lib/pages/device_managment/one_gang_switch/view/wall_light_batch_control.dart index 0c58c6f5..e1dabb61 100644 --- a/lib/pages/device_managment/one_gang_switch/view/wall_light_batch_control.dart +++ b/lib/pages/device_managment/one_gang_switch/view/wall_light_batch_control.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:syncrow_web/pages/device_managment/all_devices/models/factory_reset_model.dart'; import 'package:syncrow_web/pages/device_managment/one_gang_switch/bloc/wall_light_switch_bloc.dart'; import 'package:syncrow_web/pages/device_managment/one_gang_switch/bloc/wall_light_switch_event.dart'; import 'package:syncrow_web/pages/device_managment/one_gang_switch/bloc/wall_light_switch_state.dart'; @@ -77,7 +78,13 @@ class WallLightBatchControlView extends StatelessWidget deviceId: deviceIds.first, version: 12, ), - FactoryResetWidget(deviceId: deviceIds.first), + FactoryResetWidget( + callFactoryReset: () { + context.read().add(WallLightFactoryReset( + deviceId: status.uuid, + factoryReset: FactoryResetModel(devicesUuid: deviceIds))); + }, + ), ], ), ); diff --git a/lib/pages/device_managment/shared/batch_control/factory_reset.dart b/lib/pages/device_managment/shared/batch_control/factory_reset.dart index 98f8f043..78dfc307 100644 --- a/lib/pages/device_managment/shared/batch_control/factory_reset.dart +++ b/lib/pages/device_managment/shared/batch_control/factory_reset.dart @@ -6,36 +6,41 @@ import 'package:syncrow_web/utils/constants/assets.dart'; import 'package:syncrow_web/utils/extension/build_context_x.dart'; class FactoryResetWidget extends StatelessWidget { - const FactoryResetWidget({super.key, required String deviceId}); + const FactoryResetWidget({super.key, required this.callFactoryReset}); + + final Null Function() callFactoryReset; @override Widget build(BuildContext context) { return DeviceControlsContainer( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - ClipOval( - child: Container( - color: ColorsManager.whiteColors, - height: 60, - width: 60, - child: Padding( - padding: const EdgeInsets.all(12.0), - child: SvgPicture.asset( - Assets.factoryReset, - fit: BoxFit.cover, + child: GestureDetector( + onTap: callFactoryReset, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + ClipOval( + child: Container( + color: ColorsManager.whiteColors, + height: 60, + width: 60, + child: Padding( + padding: const EdgeInsets.all(12.0), + child: SvgPicture.asset( + Assets.factoryReset, + fit: BoxFit.cover, + ), + ), + )), + Text( + 'Factory Reset', + style: context.textTheme.titleMedium!.copyWith( + fontWeight: FontWeight.w400, + color: ColorsManager.blackColor, ), ), - )), - Text( - 'Factory Reset', - style: context.textTheme.titleMedium!.copyWith( - fontWeight: FontWeight.w400, - color: ColorsManager.blackColor, - ), - ), - ], + ], + ), ), ); } diff --git a/lib/pages/device_managment/three_gang_switch/bloc/living_room_bloc.dart b/lib/pages/device_managment/three_gang_switch/bloc/living_room_bloc.dart index 4ab6f8e8..ca264c13 100644 --- a/lib/pages/device_managment/three_gang_switch/bloc/living_room_bloc.dart +++ b/lib/pages/device_managment/three_gang_switch/bloc/living_room_bloc.dart @@ -4,6 +4,7 @@ import 'dart:async'; import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:syncrow_web/pages/device_managment/all_devices/models/device_status.dart'; +import 'package:syncrow_web/pages/device_managment/all_devices/models/factory_reset_model.dart'; import 'package:syncrow_web/pages/device_managment/three_gang_switch/models/living_room_model.dart'; import 'package:syncrow_web/services/devices_mang_api.dart'; @@ -20,6 +21,7 @@ class LivingRoomBloc extends Bloc { on(_livingRoomControl); on(_livingRoomBatchControl); on(_livingRoomFetchBatchControl); + on(_livingRoomFactoryReset); } FutureOr _onFetchDeviceStatus(LivingRoomFetchDeviceStatusEvent event, @@ -165,4 +167,22 @@ class LivingRoomBloc extends Bloc { isBatch: true, ); } + + FutureOr _livingRoomFactoryReset( + LivingRoomFactoryResetEvent event, Emitter emit) async { + emit(LivingRoomDeviceStatusLoading()); + try { + final response = await DevicesManagementApi().factoryReset( + event.factoryReset, + event.uuid, + ); + if (!response) { + emit(const LivingRoomDeviceManagementError('Failed')); + } else { + emit(LivingRoomDeviceStatusLoaded(deviceStatus)); + } + } catch (e) { + emit(LivingRoomDeviceManagementError(e.toString())); + } + } } diff --git a/lib/pages/device_managment/three_gang_switch/bloc/living_room_event.dart b/lib/pages/device_managment/three_gang_switch/bloc/living_room_event.dart index a3b0d78b..c0ada0f6 100644 --- a/lib/pages/device_managment/three_gang_switch/bloc/living_room_event.dart +++ b/lib/pages/device_managment/three_gang_switch/bloc/living_room_event.dart @@ -49,3 +49,12 @@ class LivingRoomBatchControl extends LivingRoomEvent { @override List get props => [devicesIds, code, value]; } + +class LivingRoomFactoryResetEvent extends LivingRoomEvent { + final String uuid; + final FactoryResetModel factoryReset; + const LivingRoomFactoryResetEvent(this.uuid, this.factoryReset); + + @override + List get props => [uuid, factoryReset]; +} diff --git a/lib/pages/device_managment/three_gang_switch/view/living_room_batch_controls.dart b/lib/pages/device_managment/three_gang_switch/view/living_room_batch_controls.dart index f8c40179..0d82c515 100644 --- a/lib/pages/device_managment/three_gang_switch/view/living_room_batch_controls.dart +++ b/lib/pages/device_managment/three_gang_switch/view/living_room_batch_controls.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:syncrow_web/pages/device_managment/all_devices/models/factory_reset_model.dart'; import 'package:syncrow_web/pages/device_managment/shared/batch_control/factory_reset.dart'; import 'package:syncrow_web/pages/device_managment/shared/batch_control/firmware_update.dart'; import 'package:syncrow_web/pages/device_managment/three_gang_switch/bloc/living_room_bloc.dart'; @@ -105,7 +106,14 @@ class LivingRoomBatchControlsView extends StatelessWidget deviceId: deviceIds.first, version: 12, ), - FactoryResetWidget(deviceId: deviceIds.first), + FactoryResetWidget(callFactoryReset: () { + context.read().add( + LivingRoomFactoryResetEvent( + status.uuid, + FactoryResetModel(devicesUuid: deviceIds), + ), + ); + }), ], ), ); diff --git a/lib/pages/device_managment/two_gang_switch/bloc/two_gang_switch_bloc.dart b/lib/pages/device_managment/two_gang_switch/bloc/two_gang_switch_bloc.dart index 7a15a68c..0d35d8e8 100644 --- a/lib/pages/device_managment/two_gang_switch/bloc/two_gang_switch_bloc.dart +++ b/lib/pages/device_managment/two_gang_switch/bloc/two_gang_switch_bloc.dart @@ -13,6 +13,7 @@ class TwoGangSwitchBloc extends Bloc { on(_onControl); on(_onFetchBatchStatus); on(_onBatchControl); + on(_onFactoryReset); } late TwoGangStatusModel deviceStatus; @@ -155,4 +156,22 @@ class TwoGangSwitchBloc extends Bloc { isBatch: true, ); } + + FutureOr _onFactoryReset( + TwoGangFactoryReset event, Emitter emit) async { + emit(TwoGangSwitchLoading()); + try { + final response = await DevicesManagementApi().factoryReset( + event.factoryReset, + event.deviceId, + ); + if (!response) { + emit(TwoGangSwitchError('Failed')); + } else { + emit(TwoGangSwitchStatusLoaded(deviceStatus)); + } + } catch (e) { + emit(TwoGangSwitchError(e.toString())); + } + } } diff --git a/lib/pages/device_managment/two_gang_switch/bloc/two_gang_switch_event.dart b/lib/pages/device_managment/two_gang_switch/bloc/two_gang_switch_event.dart index d5b9a01d..16973b3a 100644 --- a/lib/pages/device_managment/two_gang_switch/bloc/two_gang_switch_event.dart +++ b/lib/pages/device_managment/two_gang_switch/bloc/two_gang_switch_event.dart @@ -1,4 +1,5 @@ import 'package:equatable/equatable.dart'; +import 'package:syncrow_web/pages/device_managment/all_devices/models/factory_reset_model.dart'; class TwoGangSwitchEvent extends Equatable { @override @@ -46,3 +47,13 @@ class TwoGangSwitchBatchControl extends TwoGangSwitchEvent { @override List get props => [deviceId, code, value]; } + +class TwoGangFactoryReset extends TwoGangSwitchEvent { + final String deviceId; + final FactoryResetModel factoryReset; + + TwoGangFactoryReset({required this.deviceId, required this.factoryReset}); + + @override + List get props => [deviceId, factoryReset]; +} diff --git a/lib/pages/device_managment/two_gang_switch/view/wall_light_batch_control.dart b/lib/pages/device_managment/two_gang_switch/view/wall_light_batch_control.dart index 1e417dfa..52900155 100644 --- a/lib/pages/device_managment/two_gang_switch/view/wall_light_batch_control.dart +++ b/lib/pages/device_managment/two_gang_switch/view/wall_light_batch_control.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:syncrow_web/pages/device_managment/all_devices/models/factory_reset_model.dart'; import 'package:syncrow_web/pages/device_managment/shared/batch_control/factory_reset.dart'; import 'package:syncrow_web/pages/device_managment/shared/batch_control/firmware_update.dart'; import 'package:syncrow_web/pages/device_managment/shared/toggle_widget.dart'; @@ -87,7 +88,14 @@ class TwoGangBatchControlView extends StatelessWidget deviceId: deviceIds.first, version: 12, ), - FactoryResetWidget(deviceId: deviceIds.first), + FactoryResetWidget(callFactoryReset: () { + context.read().add( + TwoGangFactoryReset( + deviceId: status.uuid, + factoryReset: FactoryResetModel(devicesUuid: deviceIds), + ), + ); + }), ], ), ); diff --git a/lib/pages/device_managment/wall_sensor/bloc/bloc.dart b/lib/pages/device_managment/wall_sensor/bloc/bloc.dart index cc96955a..f3040b48 100644 --- a/lib/pages/device_managment/wall_sensor/bloc/bloc.dart +++ b/lib/pages/device_managment/wall_sensor/bloc/bloc.dart @@ -19,6 +19,7 @@ class WallSensorBloc extends Bloc { on(_getDeviceReports); on(_showDescription); on(_backToGridView); + on(_onFactoryReset); } void _fetchWallSensorStatus( @@ -168,4 +169,22 @@ class WallSensorBloc extends Bloc { BackToGridViewEvent event, Emitter emit) { emit(WallSensorUpdateState(wallSensorModel: deviceStatus)); } + + FutureOr _onFactoryReset( + WallSensorFactoryResetEvent event, Emitter emit) async { + emit(WallSensorLoadingNewSate(wallSensorModel: deviceStatus)); + try { + final response = await DevicesManagementApi().factoryReset( + event.factoryReset, + event.deviceId, + ); + if (!response) { + emit(const WallSensorFailedState(error: 'Failed')); + } else { + emit(WallSensorUpdateState(wallSensorModel: deviceStatus)); + } + } catch (e) { + emit(WallSensorFailedState(error: e.toString())); + } + } } diff --git a/lib/pages/device_managment/wall_sensor/bloc/event.dart b/lib/pages/device_managment/wall_sensor/bloc/event.dart index f09c7123..17d85d43 100644 --- a/lib/pages/device_managment/wall_sensor/bloc/event.dart +++ b/lib/pages/device_managment/wall_sensor/bloc/event.dart @@ -1,4 +1,5 @@ import 'package:equatable/equatable.dart'; +import 'package:syncrow_web/pages/device_managment/all_devices/models/factory_reset_model.dart'; abstract class WallSensorEvent extends Equatable { const WallSensorEvent(); @@ -59,3 +60,13 @@ class WallSensorBatchControlEvent extends WallSensorEvent { @override List get props => [deviceIds, code, value]; } + +class WallSensorFactoryResetEvent extends WallSensorEvent { + final String deviceId; + final FactoryResetModel factoryReset; + + const WallSensorFactoryResetEvent({ + required this.deviceId, + required this.factoryReset, + }); +} diff --git a/lib/pages/device_managment/wall_sensor/view/wall_sensor_batch_control.dart b/lib/pages/device_managment/wall_sensor/view/wall_sensor_batch_control.dart index dab1e152..5e855208 100644 --- a/lib/pages/device_managment/wall_sensor/view/wall_sensor_batch_control.dart +++ b/lib/pages/device_managment/wall_sensor/view/wall_sensor_batch_control.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:syncrow_web/pages/device_managment/all_devices/models/factory_reset_model.dart'; import 'package:syncrow_web/pages/device_managment/shared/batch_control/factory_reset.dart'; import 'package:syncrow_web/pages/device_managment/shared/batch_control/firmware_update.dart'; import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presence_update_data.dart'; @@ -118,7 +119,16 @@ class WallSensorBatchControlView extends StatelessWidget ), ), FirmwareUpdateWidget(deviceId: devicesIds.first, version: 2), - FactoryResetWidget(deviceId: devicesIds.first), + FactoryResetWidget( + callFactoryReset: () { + context.read().add( + WallSensorFactoryResetEvent( + deviceId: devicesIds.first, + factoryReset: FactoryResetModel(devicesUuid: devicesIds), + ), + ); + }, + ), ], ); } diff --git a/lib/services/devices_mang_api.dart b/lib/services/devices_mang_api.dart index 9ac42eca..5551bfe6 100644 --- a/lib/services/devices_mang_api.dart +++ b/lib/services/devices_mang_api.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:syncrow_web/pages/device_managment/all_devices/models/device_reports.dart'; import 'package:syncrow_web/pages/device_managment/all_devices/models/device_status.dart'; import 'package:syncrow_web/pages/device_managment/all_devices/models/devices_model.dart'; +import 'package:syncrow_web/pages/device_managment/all_devices/models/factory_reset_model.dart'; import 'package:syncrow_web/pages/device_managment/water_heater/models/schedule_model.dart'; import 'package:syncrow_web/pages/visitor_password/model/device_model.dart'; import 'package:syncrow_web/services/api/http_service.dart'; @@ -259,4 +260,21 @@ class DevicesManagementApi { return false; } } + + Future factoryReset(FactoryResetModel factoryReset, String uuid) async { + try { + final response = await HTTPService().post( + path: ApiEndpoints.factoryReset.replaceAll('{deviceUuid}', uuid), + body: factoryReset.toMap(), + showServerMessage: true, + expectedResponseModel: (json) { + return json['success'] ?? false; + }, + ); + return response; + } catch (e) { + debugPrint('Error fetching $e'); + return false; + } + } } diff --git a/lib/utils/constants/api_const.dart b/lib/utils/constants/api_const.dart index 2b39fc03..23bc5c6c 100644 --- a/lib/utils/constants/api_const.dart +++ b/lib/utils/constants/api_const.dart @@ -46,4 +46,6 @@ abstract class ApiEndpoints { '/schedule/{deviceUuid}/{scheduleUuid}'; static const String updateScheduleByDeviceId = '/schedule/enable/{deviceUuid}'; + + static const String factoryReset = '/device/factory/reset/{deviceUuid}'; }