Compare commits

..

2 Commits

18 changed files with 48 additions and 97 deletions

View File

@ -38,7 +38,7 @@ abstract final class EnergyManagementChartsHelper {
sideTitles: SideTitles( sideTitles: SideTitles(
showTitles: true, showTitles: true,
maxIncluded: false, maxIncluded: false,
minIncluded: false, minIncluded: true,
interval: leftTitlesInterval, interval: leftTitlesInterval,
reservedSize: 110, reservedSize: 110,
getTitlesWidget: (value, meta) => Padding( getTitlesWidget: (value, meta) => Padding(

View File

@ -78,7 +78,7 @@ class CustomWebTextField extends StatelessWidget {
controller: controller, controller: controller,
style: const TextStyle(color: Colors.black), style: const TextStyle(color: Colors.black),
decoration: textBoxDecoration()!.copyWith( decoration: textBoxDecoration()!.copyWith(
errorStyle: const TextStyle(height: 0.01), errorStyle: const TextStyle(height: 0),
hintStyle: context.textTheme.titleSmall! hintStyle: context.textTheme.titleSmall!
.copyWith(color: Colors.grey, fontSize: 12), .copyWith(color: Colors.grey, fontSize: 12),
hintText: hintText ?? 'Please enter'), hintText: hintText ?? 'Please enter'),

View File

@ -1,7 +1,10 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:syncrow_web/pages/device_managment/all_devices/bloc/device_mgmt_bloc/device_managment_bloc.dart';
import 'package:syncrow_web/pages/device_managment/all_devices/models/devices_model.dart'; import 'package:syncrow_web/pages/device_managment/all_devices/models/devices_model.dart';
import 'package:syncrow_web/pages/device_managment/device_setting/bloc/setting_bloc_bloc.dart';
import 'package:syncrow_web/pages/device_managment/device_setting/settings_model/device_info_model.dart'; import 'package:syncrow_web/pages/device_managment/device_setting/settings_model/device_info_model.dart';
import 'package:syncrow_web/pages/device_managment/device_setting/settings_model/sub_space_model.dart'; import 'package:syncrow_web/pages/device_managment/device_setting/settings_model/sub_space_model.dart';
import 'package:syncrow_web/pages/device_managment/device_setting/sub_space_dialog.dart'; import 'package:syncrow_web/pages/device_managment/device_setting/sub_space_dialog.dart';
@ -66,14 +69,25 @@ class DeviceManagementContent extends StatelessWidget {
Padding( Padding(
padding: const EdgeInsets.all(10.0), padding: const EdgeInsets.all(10.0),
child: InkWell( child: InkWell(
onTap: () { onTap: () async {
showSubSpaceDialog( final selectedSubSpace = await showSubSpaceDialog(
context, context,
communityUuid: device.community!.uuid!, communityUuid: device.community!.uuid!,
spaceUuid: device.spaces!.first.uuid!, spaceUuid: device.spaces!.first.uuid!,
subSpaces: subSpaces, subSpaces: subSpaces,
selected: device.subspace!.uuid, selected: deviceInfo.subspace.uuid,
); );
if (selectedSubSpace != null) {
Future.delayed(const Duration(milliseconds: 500), () {
context.read<SettingDeviceBloc>().add(
SettingBlocAssignRoom(
communityUuid: device.community!.uuid!,
spaceUuid: device.spaces!.first.uuid!,
subSpaceUuid: selectedSubSpace.id ?? '',
),
);
});
}
}, },
child: infoRow( child: infoRow(
label: 'Sub-Space:', label: 'Sub-Space:',

View File

@ -9,13 +9,11 @@ import 'package:syncrow_web/utils/extension/build_context_x.dart';
class SubSpaceDialog extends StatefulWidget { class SubSpaceDialog extends StatefulWidget {
final List<SubSpaceModel> subSpaces; final List<SubSpaceModel> subSpaces;
final String? selected; final String? selected;
final void Function(SubSpaceModel?) onConfirmed;
const SubSpaceDialog({ const SubSpaceDialog({
Key? key, Key? key,
required this.subSpaces, required this.subSpaces,
this.selected, this.selected,
required this.onConfirmed,
}) : super(key: key); }) : super(key: key);
@override @override
@ -86,30 +84,21 @@ class _SubSpaceDialogState extends State<SubSpaceDialog> {
} }
} }
void showSubSpaceDialog( Future<SubSpaceModel?> showSubSpaceDialog(
BuildContext context, { BuildContext context, {
required List<SubSpaceModel> subSpaces, required List<SubSpaceModel> subSpaces,
String? selected, String? selected,
required String communityUuid, required String communityUuid,
required String spaceUuid, required String spaceUuid,
}) { }) {
showDialog( return showDialog<SubSpaceModel>(
context: context, context: context,
barrierDismissible: true, builder: (ctx) => BlocProvider.value(
builder: (ctx) => SubSpaceDialog( value: BlocProvider.of<SettingDeviceBloc>(context),
subSpaces: subSpaces, child: SubSpaceDialog(
selected: selected, subSpaces: subSpaces,
onConfirmed: (selectedModel) { selected: selected,
if (selectedModel != null) { ),
context.read<SettingDeviceBloc>().add(
SettingBlocAssignRoom(
communityUuid: communityUuid,
spaceUuid: spaceUuid,
subSpaceUuid: selectedModel.id ?? '',
),
);
}
},
), ),
); );
} }

View File

@ -1,6 +1,4 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_web/pages/device_managment/device_setting/bloc/setting_bloc_bloc.dart';
import 'package:syncrow_web/pages/device_managment/device_setting/settings_model/sub_space_model.dart'; import 'package:syncrow_web/pages/device_managment/device_setting/settings_model/sub_space_model.dart';
import 'package:syncrow_web/pages/device_managment/device_setting/sub_space_dialog.dart'; import 'package:syncrow_web/pages/device_managment/device_setting/sub_space_dialog.dart';
import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/color_manager.dart';
@ -62,11 +60,12 @@ class SubSpaceDialogButtons extends StatelessWidget {
? null ? null
: () { : () {
final selectedModel = widget.subSpaces.firstWhere( final selectedModel = widget.subSpaces.firstWhere(
(space) => space.id == _selectedId, (space) => space.id == _selectedId,
orElse: () => orElse: () =>
SubSpaceModel(id: null, name: '', devices: [])); SubSpaceModel(id: null, name: '', devices: []),
widget.onConfirmed(selectedModel); );
Navigator.of(context).pop(); Navigator.of(context)
.pop(selectedModel);
}, },
child: Text( child: Text(
'Confirm', 'Confirm',
@ -84,31 +83,3 @@ class SubSpaceDialogButtons extends StatelessWidget {
); );
} }
} }
void showSubSpaceDialog(
BuildContext context, {
required List<SubSpaceModel> subSpaces,
String? selected,
required String communityUuid,
required String spaceUuid,
}) {
showDialog(
context: context,
barrierDismissible: true,
builder: (ctx) => SubSpaceDialog(
subSpaces: subSpaces,
selected: selected,
onConfirmed: (selectedModel) {
if (selectedModel != null) {
context.read<SettingDeviceBloc>().add(
SettingBlocAssignRoom(
communityUuid: communityUuid,
spaceUuid: spaceUuid,
subSpaceUuid: selectedModel.id ?? '',
),
);
}
},
),
);
}

View File

@ -40,7 +40,7 @@ class HomeCard extends StatelessWidget {
child: Text( child: Text(
name, name,
style: const TextStyle( style: const TextStyle(
fontSize: 30, fontSize: 20,
color: Colors.white, color: Colors.white,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),

View File

@ -97,7 +97,7 @@ class _HomeWebPageState extends State<HomeWebPage> {
itemCount: homeBloc.homeItems.length, itemCount: homeBloc.homeItems.length,
gridDelegate: gridDelegate:
const SliverGridDelegateWithFixedCrossAxisCount( const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 4, // Adjust as needed. crossAxisCount: 3, // Adjust as needed.
crossAxisSpacing: 20.0, crossAxisSpacing: 20.0,
mainAxisSpacing: 20.0, mainAxisSpacing: 20.0,
childAspectRatio: 1.5, childAspectRatio: 1.5,

View File

@ -118,7 +118,6 @@ class DeviceDialogHelper {
uniqueCustomId: data['uniqueCustomId'], uniqueCustomId: data['uniqueCustomId'],
deviceSelectedFunctions: deviceSelectedFunctions, deviceSelectedFunctions: deviceSelectedFunctions,
device: data['device'], device: data['device'],
dialogType: dialogType,
); );
case 'NCPS': case 'NCPS':
return FlushPresenceSensor.showFlushFunctionsDialog( return FlushPresenceSensor.showFlushFunctionsDialog(

View File

@ -65,9 +65,7 @@ class ACHelper {
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
DialogHeader(dialogType == 'THEN' const DialogHeader('AC Functions'),
? 'AC Functions'
: 'AC Conditions'),
Expanded( Expanded(
child: Row( child: Row(
crossAxisAlignment: CrossAxisAlignment.stretch, crossAxisAlignment: CrossAxisAlignment.stretch,

View File

@ -96,9 +96,7 @@ class _WallPresenceSensorState extends State<FlushPresenceSensor> {
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
DialogHeader(widget.dialogType == 'THEN' const DialogHeader('Presence Sensor Condition'),
? 'Presence Sensor Functions'
: 'Presence Sensor Condition'),
Expanded(child: _buildMainContent(context, state)), Expanded(child: _buildMainContent(context, state)),
_buildDialogFooter(context, state), _buildDialogFooter(context, state),
], ],

View File

@ -16,10 +16,9 @@ class GatewayDialog extends StatefulWidget {
required this.functions, required this.functions,
required this.deviceSelectedFunctions, required this.deviceSelectedFunctions,
required this.device, required this.device,
required this.dialogType,
super.key, super.key,
}); });
final String dialogType;
final String? uniqueCustomId; final String? uniqueCustomId;
final List<DeviceFunction> functions; final List<DeviceFunction> functions;
final List<DeviceFunctionData> deviceSelectedFunctions; final List<DeviceFunctionData> deviceSelectedFunctions;
@ -56,9 +55,7 @@ class _GatewayDialogState extends State<GatewayDialog> {
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
DialogHeader(widget.dialogType == 'THEN' const DialogHeader('Gateway Conditions'),
? 'Gateway Functions'
: 'Gateway Conditions'),
Expanded(child: _buildMainContent(context, state)), Expanded(child: _buildMainContent(context, state)),
_buildDialogFooter(context, state), _buildDialogFooter(context, state),
], ],

View File

@ -14,7 +14,6 @@ abstract final class GatewayHelper {
required String? uniqueCustomId, required String? uniqueCustomId,
required List<DeviceFunctionData> deviceSelectedFunctions, required List<DeviceFunctionData> deviceSelectedFunctions,
required AllDevicesModel? device, required AllDevicesModel? device,
required String dialogType,
}) async { }) async {
return showDialog( return showDialog(
context: context, context: context,
@ -28,7 +27,6 @@ abstract final class GatewayHelper {
functions: functions, functions: functions,
deviceSelectedFunctions: deviceSelectedFunctions, deviceSelectedFunctions: deviceSelectedFunctions,
device: device, device: device,
dialogType:dialogType,
), ),
), ),
); );

View File

@ -59,9 +59,7 @@ class OneGangSwitchHelper {
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
DialogHeader(dialogType == 'THEN' const DialogHeader('1 Gang Light Switch Condition'),
? '1 Gang Light Switch Functions'
: '1 Gang Light Switch Condition'),
Expanded( Expanded(
child: Row( child: Row(
children: [ children: [
@ -248,9 +246,9 @@ class OneGangSwitchHelper {
withSpecialChar: false, withSpecialChar: false,
currentCondition: selectedFunctionData?.condition, currentCondition: selectedFunctionData?.condition,
dialogType: dialogType, dialogType: dialogType,
sliderRange: (0, 43200), sliderRange: (0, 43200),
displayedValue: (initialValue ?? 0).toString(), displayedValue: (initialValue ?? 0).toString(),
initialValue: (initialValue ?? 0).toString(), initialValue: (initialValue ?? 0).toString(),
onConditionChanged: (condition) { onConditionChanged: (condition) {
context.read<FunctionBloc>().add( context.read<FunctionBloc>().add(
AddFunction( AddFunction(

View File

@ -98,9 +98,7 @@ class _EnergyClampDialogState extends State<EnergyClampDialog> {
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
DialogHeader(widget.dialogType == 'THEN' const DialogHeader('Energy Clamp Conditions'),
? 'Energy Clamp Functions'
: 'Energy Clamp Conditions'),
Expanded( Expanded(
child: Visibility( child: Visibility(
visible: _functions.isNotEmpty, visible: _functions.isNotEmpty,

View File

@ -58,9 +58,7 @@ class ThreeGangSwitchHelper {
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
DialogHeader(dialogType == 'THEN' const DialogHeader('3 Gangs Light Switch Condition'),
? '3 Gangs Light Switch Functions'
: '3 Gangs Light Switch Condition'),
Expanded( Expanded(
child: Row( child: Row(
children: [ children: [

View File

@ -59,9 +59,7 @@ class TwoGangSwitchHelper {
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
DialogHeader(dialogType == 'THEN' const DialogHeader('2 Gangs Light Switch Condition'),
? '2 Gangs Light Switch Functions'
: '2 Gangs Light Switch Condition'),
Expanded( Expanded(
child: Row( child: Row(
children: [ children: [

View File

@ -63,8 +63,7 @@ class _WallPresenceSensorState extends State<WallPresenceSensor> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_wpsFunctions = _wpsFunctions = widget.functions.whereType<WpsFunctions>().where((function) {
widget.functions.whereType<WpsFunctions>().where((function) {
if (widget.dialogType == 'THEN') { if (widget.dialogType == 'THEN') {
return function.type == 'THEN' || function.type == 'BOTH'; return function.type == 'THEN' || function.type == 'BOTH';
} }
@ -98,9 +97,7 @@ class _WallPresenceSensorState extends State<WallPresenceSensor> {
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
DialogHeader(widget.dialogType == 'THEN' const DialogHeader('Presence Sensor Condition'),
? 'Presence Sensor Functions'
: 'Presence Sensor Condition'),
Expanded(child: _buildMainContent(context, state)), Expanded(child: _buildMainContent(context, state)),
_buildDialogFooter(context, state), _buildDialogFooter(context, state),
], ],

View File

@ -93,9 +93,7 @@ class _WaterHeaterDialogRoutinesState extends State<WaterHeaterDialogRoutines> {
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
DialogHeader(widget.dialogType == 'THEN' const DialogHeader('Water Heater Condition'),
? 'Water Heater Funtions'
: 'Water Heater Condition'),
Expanded(child: _buildMainContent(context, state)), Expanded(child: _buildMainContent(context, state)),
_buildDialogFooter(context, state), _buildDialogFooter(context, state),
], ],