diff --git a/lib/pages/routines/widgets/routine_dialogs/ac_dialog.dart b/lib/pages/routines/widgets/routine_dialogs/ac_dialog.dart index 11bedf24..1de9b0d4 100644 --- a/lib/pages/routines/widgets/routine_dialogs/ac_dialog.dart +++ b/lib/pages/routines/widgets/routine_dialogs/ac_dialog.dart @@ -9,6 +9,7 @@ import 'package:syncrow_web/pages/routines/models/ac/ac_operational_value.dart'; import 'package:syncrow_web/pages/routines/models/device_functions.dart'; import 'package:syncrow_web/pages/routines/widgets/dialog_footer.dart'; import 'package:syncrow_web/pages/routines/widgets/dialog_header.dart'; +import 'package:syncrow_web/pages/routines/widgets/routine_dialogs/helpers/routine_tap_function_helper.dart'; import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/extension/build_context_x.dart'; @@ -76,30 +77,23 @@ class ACHelper { acFunctions: acFunctions, device: device, onFunctionSelected: (functionCode, operationName) { - context.read().add( - SelectFunction( - functionCode: functionCode, - operationName: operationName, - ), - ); - if (functionCode == 'temp_set' || - functionCode == 'temp_current') { - context.read().add( - AddFunction( - functionData: DeviceFunctionData( - entityId: device?.uuid ?? '', - functionCode: functionCode, - operationName: operationName, - value: functionCode == 'temp_set' - ? 200 - : -100, - condition: '==', - valueDescription: selectedFunctionData - .valueDescription, - ), - ), - ); - } + RoutineTapFunctionHelper.onTapFunction( + context, + functionCode: functionCode, + functionOperationName: operationName, + functionValueDescription: + selectedFunctionData.valueDescription, + deviceUuid: device?.uuid, + codesToAddIntoFunctionsWithDefaultValue: [ + 'temp_set', + 'temp_current', + ], + defaultValue: functionCode == 'temp_set' + ? 200 + : functionCode == 'temp_current' + ? -100 + : 0, + ); }, ), ), diff --git a/lib/pages/routines/widgets/routine_dialogs/ceiling_sensor/ceiling_sensor_dialog.dart b/lib/pages/routines/widgets/routine_dialogs/ceiling_sensor/ceiling_sensor_dialog.dart index 4e174265..f3d07a66 100644 --- a/lib/pages/routines/widgets/routine_dialogs/ceiling_sensor/ceiling_sensor_dialog.dart +++ b/lib/pages/routines/widgets/routine_dialogs/ceiling_sensor/ceiling_sensor_dialog.dart @@ -135,6 +135,7 @@ class _CeilingSensorDialogState extends State { cpsFunctions: _cpsFunctions, device: widget.device, selectedFunctionData: selectedFunctionData, + dialogType: widget.dialogType, ), if (state.selectedFunction != null) Expanded( diff --git a/lib/pages/routines/widgets/routine_dialogs/ceiling_sensor/cps_functions_list.dart b/lib/pages/routines/widgets/routine_dialogs/ceiling_sensor/cps_functions_list.dart index 707246c4..efc57653 100644 --- a/lib/pages/routines/widgets/routine_dialogs/ceiling_sensor/cps_functions_list.dart +++ b/lib/pages/routines/widgets/routine_dialogs/ceiling_sensor/cps_functions_list.dart @@ -1,24 +1,24 @@ import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_web/pages/device_managment/all_devices/models/devices_model.dart'; -import 'package:syncrow_web/pages/routines/bloc/functions_bloc/functions_bloc_bloc.dart'; import 'package:syncrow_web/pages/routines/models/ceiling_presence_sensor_functions.dart'; import 'package:syncrow_web/pages/routines/models/device_functions.dart'; import 'package:syncrow_web/pages/routines/widgets/routine_dialog_function_list_tile.dart'; -import 'package:syncrow_web/pages/routines/widgets/routine_dialogs/ceiling_sensor/ceiling_sensor_helper.dart'; +import 'package:syncrow_web/pages/routines/widgets/routine_dialogs/helpers/routine_tap_function_helper.dart'; import 'package:syncrow_web/utils/color_manager.dart'; class CpsFunctionsList extends StatelessWidget { const CpsFunctionsList({ required this.cpsFunctions, - required this.device, - required this.selectedFunctionData, + required this.device, + required this.selectedFunctionData, + required this.dialogType, super.key, }); final List cpsFunctions; final AllDevicesModel? device; final DeviceFunctionData? selectedFunctionData; + final String dialogType; @override Widget build(BuildContext context) { @@ -36,28 +36,27 @@ class CpsFunctionsList extends StatelessWidget { return RoutineDialogFunctionListTile( iconPath: function.icon, operationName: function.operationName, - onTap: () { - context.read().add( - SelectFunction( - functionCode: function.code, - operationName: function.operationName, - ), - ); - if (!CeilingSensorHelper.toggleCodes.contains(function.code)) { - context.read().add( - AddFunction( - functionData: DeviceFunctionData( - entityId: device?.uuid ?? '', - functionCode: function.code, - operationName: function.operationName, - value: 0, - condition: '==', - valueDescription: selectedFunctionData?.valueDescription, - ), - ), - ); - } - }, + onTap: () => RoutineTapFunctionHelper.onTapFunction( + context, + functionCode: function.code, + functionOperationName: function.operationName, + functionValueDescription: selectedFunctionData?.valueDescription, + deviceUuid: device?.uuid, + codesToAddIntoFunctionsWithDefaultValue: [ + 'static_max_dis', + 'presence_reference', + 'moving_reference', + 'perceptual_boundary', + 'moving_boundary', + 'moving_rigger_time', + 'moving_static_time', + 'none_body_time', + 'moving_max_dis', + 'moving_range', + 'presence_range', + if (dialogType == "IF") 'sensitivity', + ], + ), ); }, ), diff --git a/lib/pages/routines/widgets/routine_dialogs/helpers/routine_tap_function_helper.dart b/lib/pages/routines/widgets/routine_dialogs/helpers/routine_tap_function_helper.dart new file mode 100644 index 00000000..2b09f579 --- /dev/null +++ b/lib/pages/routines/widgets/routine_dialogs/helpers/routine_tap_function_helper.dart @@ -0,0 +1,46 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:syncrow_web/pages/routines/bloc/functions_bloc/functions_bloc_bloc.dart'; +import 'package:syncrow_web/pages/routines/models/device_functions.dart'; + +abstract final class RoutineTapFunctionHelper { + const RoutineTapFunctionHelper._(); + + static void onTapFunction( + BuildContext context, { + required String functionCode, + required String functionOperationName, + required String? functionValueDescription, + required String? deviceUuid, + required List codesToAddIntoFunctionsWithDefaultValue, + int defaultValue = 0, + }) { + final functionsBloc = context.read(); + functionsBloc.add( + SelectFunction( + functionCode: functionCode, + operationName: functionOperationName, + ), + ); + final addedFunctions = functionsBloc.state.addedFunctions; + final isFunctionAlreadyAdded = addedFunctions.any( + (e) => e.functionCode == functionCode, + ); + final shouldAddFunction = + codesToAddIntoFunctionsWithDefaultValue.contains(functionCode); + if (!isFunctionAlreadyAdded && shouldAddFunction) { + context.read().add( + AddFunction( + functionData: DeviceFunctionData( + entityId: deviceUuid ?? '', + functionCode: functionCode, + operationName: functionOperationName, + value: defaultValue, + condition: '==', + valueDescription: functionValueDescription, + ), + ), + ); + } + } +} diff --git a/lib/pages/routines/widgets/routine_dialogs/one_gang_switch_dialog.dart b/lib/pages/routines/widgets/routine_dialogs/one_gang_switch_dialog.dart index a2d6d8db..3c786045 100644 --- a/lib/pages/routines/widgets/routine_dialogs/one_gang_switch_dialog.dart +++ b/lib/pages/routines/widgets/routine_dialogs/one_gang_switch_dialog.dart @@ -11,6 +11,7 @@ import 'package:syncrow_web/pages/routines/models/gang_switches/one_gang_switch/ import 'package:syncrow_web/pages/routines/models/gang_switches/switch_operational_value.dart'; import 'package:syncrow_web/pages/routines/widgets/dialog_footer.dart'; import 'package:syncrow_web/pages/routines/widgets/dialog_header.dart'; +import 'package:syncrow_web/pages/routines/widgets/routine_dialogs/helpers/routine_tap_function_helper.dart'; import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/extension/build_context_x.dart'; @@ -86,31 +87,19 @@ class OneGangSwitchHelper { size: 16, color: ColorsManager.textGray, ), - onTap: () { - context - .read() - .add(SelectFunction( - functionCode: function.code, - operationName: function.operationName, - )); - if (function.code == 'countdown_1') { - context.read().add( - AddFunction( - functionData: DeviceFunctionData( - entityId: device?.uuid ?? '', - functionCode: function.code, - operationName: - function.operationName, - value: 0, - condition: '==', - valueDescription: - selectedFunctionData - .valueDescription, - ), - ), - ); - } - }, + onTap: () => + RoutineTapFunctionHelper.onTapFunction( + context, + functionCode: function.code, + functionOperationName: + function.operationName, + functionValueDescription: + selectedFunctionData.valueDescription, + deviceUuid: device?.uuid, + codesToAddIntoFunctionsWithDefaultValue: [ + 'countdown_1', + ], + ), ); }, ), diff --git a/lib/pages/routines/widgets/routine_dialogs/three_gang_switch_dialog.dart b/lib/pages/routines/widgets/routine_dialogs/three_gang_switch_dialog.dart index fdc2cb98..44a367ef 100644 --- a/lib/pages/routines/widgets/routine_dialogs/three_gang_switch_dialog.dart +++ b/lib/pages/routines/widgets/routine_dialogs/three_gang_switch_dialog.dart @@ -10,6 +10,7 @@ import 'package:syncrow_web/pages/routines/models/gang_switches/base_switch_func import 'package:syncrow_web/pages/routines/models/gang_switches/switch_operational_value.dart'; import 'package:syncrow_web/pages/routines/widgets/dialog_footer.dart'; import 'package:syncrow_web/pages/routines/widgets/dialog_header.dart'; +import 'package:syncrow_web/pages/routines/widgets/routine_dialogs/helpers/routine_tap_function_helper.dart'; import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/extension/build_context_x.dart'; @@ -85,33 +86,21 @@ class ThreeGangSwitchHelper { size: 16, color: ColorsManager.textGray, ), - onTap: () { - context - .read() - .add(SelectFunction( - functionCode: function.code, - operationName: function.operationName, - )); - if (function.code == 'countdown_1' || - function.code == 'countdown_2' || - function.code == 'countdown_3') { - context.read().add( - AddFunction( - functionData: DeviceFunctionData( - entityId: device?.uuid ?? '', - functionCode: function.code, - operationName: - function.operationName, - value: 0, - condition: '==', - valueDescription: - selectedFunctionData - .valueDescription, - ), - ), - ); - } - }, + onTap: () => + RoutineTapFunctionHelper.onTapFunction( + context, + functionCode: function.code, + functionOperationName: + function.operationName, + functionValueDescription: + selectedFunctionData.valueDescription, + deviceUuid: device?.uuid, + codesToAddIntoFunctionsWithDefaultValue: [ + 'countdown_1', + 'countdown_2', + 'countdown_3', + ], + ), ); }, ), diff --git a/lib/pages/routines/widgets/routine_dialogs/two_gang_switch_dialog.dart b/lib/pages/routines/widgets/routine_dialogs/two_gang_switch_dialog.dart index 14e9f4a7..f551d21b 100644 --- a/lib/pages/routines/widgets/routine_dialogs/two_gang_switch_dialog.dart +++ b/lib/pages/routines/widgets/routine_dialogs/two_gang_switch_dialog.dart @@ -10,6 +10,7 @@ import 'package:syncrow_web/pages/routines/models/gang_switches/base_switch_func import 'package:syncrow_web/pages/routines/models/gang_switches/switch_operational_value.dart'; import 'package:syncrow_web/pages/routines/widgets/dialog_footer.dart'; import 'package:syncrow_web/pages/routines/widgets/dialog_header.dart'; +import 'package:syncrow_web/pages/routines/widgets/routine_dialogs/helpers/routine_tap_function_helper.dart'; import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/extension/build_context_x.dart'; @@ -85,32 +86,20 @@ class TwoGangSwitchHelper { size: 16, color: ColorsManager.textGray, ), - onTap: () { - context - .read() - .add(SelectFunction( - functionCode: function.code, - operationName: function.operationName, - )); - if (function.code == 'countdown_1' || - function.code == 'countdown_2') { - context.read().add( - AddFunction( - functionData: DeviceFunctionData( - entityId: device?.uuid ?? '', - functionCode: function.code, - operationName: - function.operationName, - value: 0, - condition: '==', - valueDescription: - selectedFunctionData - .valueDescription, - ), - ), - ); - } - }, + onTap: () => + RoutineTapFunctionHelper.onTapFunction( + context, + functionCode: function.code, + functionOperationName: + function.operationName, + functionValueDescription: + selectedFunctionData.valueDescription, + deviceUuid: device?.uuid, + codesToAddIntoFunctionsWithDefaultValue: [ + 'countdown_1', + 'countdown_2', + ], + ), ); }, ), diff --git a/lib/pages/routines/widgets/routine_dialogs/wall_sensor/wall_presence_sensor.dart b/lib/pages/routines/widgets/routine_dialogs/wall_sensor/wall_presence_sensor.dart index 44f1efcc..4d04102d 100644 --- a/lib/pages/routines/widgets/routine_dialogs/wall_sensor/wall_presence_sensor.dart +++ b/lib/pages/routines/widgets/routine_dialogs/wall_sensor/wall_presence_sensor.dart @@ -8,6 +8,7 @@ import 'package:syncrow_web/pages/routines/models/device_functions.dart'; import 'package:syncrow_web/pages/routines/models/wps/wps_functions.dart'; import 'package:syncrow_web/pages/routines/widgets/dialog_footer.dart'; import 'package:syncrow_web/pages/routines/widgets/dialog_header.dart'; +import 'package:syncrow_web/pages/routines/widgets/routine_dialogs/helpers/routine_tap_function_helper.dart'; import 'package:syncrow_web/pages/routines/widgets/routine_dialogs/wall_sensor/wps_value_selector_widget.dart'; import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/extension/build_context_x.dart'; @@ -159,29 +160,18 @@ class _WallPresenceSensorState extends State { size: 16, color: ColorsManager.textGray, ), - onTap: () { - context.read().add( - SelectFunction( - functionCode: function.code, - operationName: function.operationName, - ), - ); - if (['dis_current', 'presence_time', 'illuminance_value'] - .contains(function.code)) { - context.read().add( - AddFunction( - functionData: DeviceFunctionData( - entityId: widget.device?.uuid ?? '', - functionCode: function.code, - operationName: function.operationName, - value: 0, - condition: '==', - valueDescription: selectedFunctionData.valueDescription, - ), - ), - ); - } - }, + onTap: () => RoutineTapFunctionHelper.onTapFunction( + context, + functionCode: function.code, + functionOperationName: function.operationName, + functionValueDescription: selectedFunctionData.valueDescription, + deviceUuid: widget.device?.uuid, + codesToAddIntoFunctionsWithDefaultValue: [ + 'dis_current', + 'presence_time', + 'illuminance_value', + ], + ), ); }, ),