Compare commits

..

5 Commits

Author SHA1 Message Date
562c67a958 Add deviceName field to FailedOperation and SuccessOperation models 2025-06-25 12:24:09 +03:00
423ad6e687 Enhance navigation buttons in SmartPowerDeviceControl for better user… (#293)
… experience

<!--
  Thanks for contributing!

Provide a description of your changes below and a general summary in the
title

Please look at the following checklist to ensure that your PR can be
accepted quickly:
-->



## Description

<!--- Describe your changes in detail -->
Enhance navigation buttons in SmartPowerDeviceControl 

## Type of Change

<!--- Put an `x` in all the boxes that apply: -->

- [ ]  New feature (non-breaking change which adds functionality)
- [x] 🛠️ Bug fix (non-breaking change which fixes an issue)
- [ ]  Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] 🧹 Code refactor
- [ ]  Build configuration change
- [ ] 📝 Documentation
- [ ] 🗑️ Chore
2025-06-25 09:13:33 +03:00
932e50f518 sp:1677 [FE] Device status in Control modal always shows "Online" regardless of actual status (#287)
<!--
  Thanks for contributing!

Provide a description of your changes below and a general summary in the
title

Please look at the following checklist to ensure that your PR can be
accepted quickly:
-->

## Jira Ticket
[SP-1677](https://syncrow.atlassian.net/browse/SP-1677)

## Description

status depend on the real status of the device afterit was static 

## Type of Change

<!--- Put an `x` in all the boxes that apply: -->

- [ ]  New feature (non-breaking change which adds functionality)
- [x] 🛠️ Bug fix (non-breaking change which fixes an issue)
- [ ]  Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] 🧹 Code refactor
- [ ]  Build configuration change
- [ ] 📝 Documentation
- [ ] 🗑️ Chore 


[SP-1677]:
https://syncrow.atlassian.net/browse/SP-1677?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ
2025-06-25 08:18:10 +03:00
c649044a1f Enhance navigation buttons in SmartPowerDeviceControl for better user experience 2025-06-24 16:40:42 +03:00
95d6e1ecda if online go green with online status else red with offline status 2025-06-23 16:33:45 +03:00
4 changed files with 42 additions and 27 deletions

View File

@ -12,7 +12,8 @@ import 'package:syncrow_web/utils/constants/assets.dart';
import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart'; import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart';
//Smart Power Clamp //Smart Power Clamp
class SmartPowerDeviceControl extends StatelessWidget with HelperResponsiveLayout { class SmartPowerDeviceControl extends StatelessWidget
with HelperResponsiveLayout {
final String deviceId; final String deviceId;
const SmartPowerDeviceControl({super.key, required this.deviceId}); const SmartPowerDeviceControl({super.key, required this.deviceId});
@ -145,13 +146,16 @@ class SmartPowerDeviceControl extends StatelessWidget with HelperResponsiveLayou
children: [ children: [
IconButton( IconButton(
icon: const Icon(Icons.arrow_left), icon: const Icon(Icons.arrow_left),
onPressed: () { onPressed: blocProvider.currentPage <= 0
blocProvider.add(SmartPowerArrowPressedEvent(-1)); ? null
pageController.previousPage( : () {
duration: const Duration(milliseconds: 300), blocProvider
curve: Curves.easeInOut, .add(SmartPowerArrowPressedEvent(-1));
); pageController.previousPage(
}, duration: const Duration(milliseconds: 300),
curve: Curves.easeInOut,
);
},
), ),
Text( Text(
currentPage == 0 currentPage == 0
@ -165,13 +169,16 @@ class SmartPowerDeviceControl extends StatelessWidget with HelperResponsiveLayou
), ),
IconButton( IconButton(
icon: const Icon(Icons.arrow_right), icon: const Icon(Icons.arrow_right),
onPressed: () { onPressed: blocProvider.currentPage >= 3
blocProvider.add(SmartPowerArrowPressedEvent(1)); ? null
pageController.nextPage( : () {
duration: const Duration(milliseconds: 300), blocProvider
curve: Curves.easeInOut, .add(SmartPowerArrowPressedEvent(1));
); pageController.nextPage(
}, duration: const Duration(milliseconds: 300),
curve: Curves.easeInOut,
);
},
), ),
], ],
), ),
@ -195,8 +202,8 @@ class SmartPowerDeviceControl extends StatelessWidget with HelperResponsiveLayou
blocProvider.add(SelectDateEvent(context: context)); blocProvider.add(SelectDateEvent(context: context));
blocProvider.add(FilterRecordsByDateEvent( blocProvider.add(FilterRecordsByDateEvent(
selectedDate: blocProvider.dateTime!, selectedDate: blocProvider.dateTime!,
viewType: viewType: blocProvider
blocProvider.views[blocProvider.currentIndex])); .views[blocProvider.currentIndex]));
}, },
widget: blocProvider.dateSwitcher(), widget: blocProvider.dateSwitcher(),
chartData: blocProvider.energyDataList.isNotEmpty chartData: blocProvider.energyDataList.isNotEmpty

View File

@ -79,6 +79,7 @@ class DeviceControlDialog extends StatelessWidget with RouteControlsBasedCode {
} }
Widget _buildDeviceInfoSection() { Widget _buildDeviceInfoSection() {
final isOnlineDevice = device.online != null && device.online!;
return Padding( return Padding(
padding: const EdgeInsets.symmetric(vertical: 25, horizontal: 50), padding: const EdgeInsets.symmetric(vertical: 25, horizontal: 50),
child: Table( child: Table(
@ -107,7 +108,7 @@ class DeviceControlDialog extends StatelessWidget with RouteControlsBasedCode {
'Installation Date and Time:', 'Installation Date and Time:',
formatDateTime( formatDateTime(
DateTime.fromMillisecondsSinceEpoch( DateTime.fromMillisecondsSinceEpoch(
((device.createTime ?? 0) * 1000), (device.createTime ?? 0) * 1000,
), ),
), ),
), ),
@ -126,12 +127,16 @@ class DeviceControlDialog extends StatelessWidget with RouteControlsBasedCode {
), ),
TableRow( TableRow(
children: [ children: [
_buildInfoRow('Status:', 'Online', statusColor: Colors.green), _buildInfoRow(
'Status:',
isOnlineDevice ? 'Online' : 'offline',
statusColor: isOnlineDevice ? Colors.green : Colors.red,
),
_buildInfoRow( _buildInfoRow(
'Last Offline Date and Time:', 'Last Offline Date and Time:',
formatDateTime( formatDateTime(
DateTime.fromMillisecondsSinceEpoch( DateTime.fromMillisecondsSinceEpoch(
((device.updateTime ?? 0) * 1000), (device.updateTime ?? 0) * 1000,
), ),
), ),
), ),

View File

@ -2,11 +2,13 @@ class FailedOperation {
final bool success; final bool success;
final dynamic deviceUuid; final dynamic deviceUuid;
final dynamic error; final dynamic error;
final String deviceName;
FailedOperation({ FailedOperation({
required this.success, required this.success,
required this.deviceUuid, required this.deviceUuid,
required this.error, required this.error,
required this.deviceName,
}); });
factory FailedOperation.fromJson(Map<String, dynamic> json) { factory FailedOperation.fromJson(Map<String, dynamic> json) {
@ -14,6 +16,7 @@ class FailedOperation {
success: json['success'], success: json['success'],
deviceUuid: json['deviceUuid'], deviceUuid: json['deviceUuid'],
error: json['error'], error: json['error'],
deviceName: json['deviceName'] as String? ?? '',
); );
} }
@ -22,21 +25,22 @@ class FailedOperation {
'success': success, 'success': success,
'deviceUuid': deviceUuid, 'deviceUuid': deviceUuid,
'error': error, 'error': error,
'deviceName': deviceName,
}; };
} }
} }
class SuccessOperation { class SuccessOperation {
final bool success; final bool success;
// final Result result; // final Result result;
final String deviceUuid; final String deviceUuid;
final String deviceName;
SuccessOperation({ SuccessOperation({
required this.success, required this.success,
// required this.result, // required this.result,
required this.deviceUuid, required this.deviceUuid,
required this.deviceName,
}); });
factory SuccessOperation.fromJson(Map<String, dynamic> json) { factory SuccessOperation.fromJson(Map<String, dynamic> json) {
@ -44,6 +48,7 @@ class SuccessOperation {
success: json['success'], success: json['success'],
// result: Result.fromJson(json['result']), // result: Result.fromJson(json['result']),
deviceUuid: json['deviceUuid'], deviceUuid: json['deviceUuid'],
deviceName: json['deviceName'] as String? ?? '',
); );
} }
@ -52,6 +57,7 @@ class SuccessOperation {
'success': success, 'success': success,
// 'result': result.toJson(), // 'result': result.toJson(),
'deviceUuid': deviceUuid, 'deviceUuid': deviceUuid,
'deviceName': deviceName,
}; };
} }
} }
@ -92,8 +98,6 @@ class SuccessOperation {
// } // }
// } // }
class PasswordStatus { class PasswordStatus {
final List<SuccessOperation> successOperations; final List<SuccessOperation> successOperations;
final List<FailedOperation> failedOperations; final List<FailedOperation> failedOperations;
@ -121,4 +125,3 @@ class PasswordStatus {
}; };
} }
} }

View File

@ -63,7 +63,7 @@ class VisitorPasswordDialog extends StatelessWidget {
child: Text(visitorBloc child: Text(visitorBloc
.passwordStatus! .passwordStatus!
.failedOperations[index] .failedOperations[index]
.deviceUuid)), .deviceName)),
); );
}, },
), ),
@ -92,7 +92,7 @@ class VisitorPasswordDialog extends StatelessWidget {
child: Text(visitorBloc child: Text(visitorBloc
.passwordStatus! .passwordStatus!
.successOperations[index] .successOperations[index]
.deviceUuid)), .deviceName)),
); );
}, },
), ),