Compare commits

..

1 Commits

Author SHA1 Message Date
d80f5e1f3a Refactor energy consumption charts to enhance grid data configuration
Updated the grid data for EnergyConsumptionByPhasesChart, EnergyConsumptionPerDeviceChart, and TotalEnergyConsumptionChart to include horizontal line visibility and set a horizontal interval of 250. Removed unused phasesJson constant from TotalEnergyConsumptionChart for cleaner code.
2025-05-15 14:25:13 +03:00
8 changed files with 57 additions and 83 deletions

View File

@ -14,6 +14,7 @@ class AnalyticsPageTabsAndChildren extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final spaceTreeState = context.read<SpaceTreeBloc>().state;
return BlocBuilder<AnalyticsTabBloc, AnalyticsPageTab>( return BlocBuilder<AnalyticsTabBloc, AnalyticsPageTab>(
buildWhen: (previous, current) => previous != current, buildWhen: (previous, current) => previous != current,
builder: (context, selectedTab) => Column( builder: (context, selectedTab) => Column(
@ -67,21 +68,15 @@ class AnalyticsPageTabsAndChildren extends StatelessWidget {
context.read<AnalyticsDatePickerBloc>().add( context.read<AnalyticsDatePickerBloc>().add(
UpdateAnalyticsDatePickerEvent(montlyDate: value), UpdateAnalyticsDatePickerEvent(montlyDate: value),
); );
FetchEnergyManagementDataHelper.loadEnergyManagementData(
final spaceTreeState = context,
context.read<SpaceTreeBloc>().state; selectedDate: value,
if (spaceTreeState.selectedSpaces.isNotEmpty) { communityId:
FetchEnergyManagementDataHelper spaceTreeState.selectedCommunities.firstOrNull ??
.loadEnergyManagementData( '',
context, spaceId:
selectedDate: value, spaceTreeState.selectedSpaces.firstOrNull ?? '',
communityId: );
spaceTreeState.selectedCommunities.firstOrNull ??
'',
spaceId:
spaceTreeState.selectedSpaces.firstOrNull ?? '',
);
}
}, },
selectedDate: context selectedDate: context
.watch<AnalyticsDatePickerBloc>() .watch<AnalyticsDatePickerBloc>()

View File

@ -18,7 +18,10 @@ class EnergyConsumptionByPhasesChart extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return BarChart( return BarChart(
BarChartData( BarChartData(
gridData: EnergyManagementChartsHelper.gridData(), gridData: EnergyManagementChartsHelper.gridData().copyWith(
checkToShowHorizontalLine: (value) => true,
horizontalInterval: 250,
),
borderData: EnergyManagementChartsHelper.borderData(), borderData: EnergyManagementChartsHelper.borderData(),
barTouchData: _barTouchData(context), barTouchData: _barTouchData(context),
titlesData: _titlesData(context), titlesData: _titlesData(context),

View File

@ -16,7 +16,10 @@ class EnergyConsumptionPerDeviceChart extends StatelessWidget {
context, context,
leftTitlesInterval: 250, leftTitlesInterval: 250,
), ),
gridData: EnergyManagementChartsHelper.gridData(), gridData: EnergyManagementChartsHelper.gridData().copyWith(
checkToShowHorizontalLine: (value) => true,
horizontalInterval: 250,
),
borderData: EnergyManagementChartsHelper.borderData(), borderData: EnergyManagementChartsHelper.borderData(),
lineTouchData: EnergyManagementChartsHelper.lineTouchData(), lineTouchData: EnergyManagementChartsHelper.lineTouchData(),
lineBarsData: chartData.map((e) { lineBarsData: chartData.map((e) {

View File

@ -4,15 +4,6 @@ import 'package:syncrow_web/pages/analytics/models/energy_data_model.dart';
import 'package:syncrow_web/pages/analytics/modules/energy_management/helpers/energy_management_charts_helper.dart'; import 'package:syncrow_web/pages/analytics/modules/energy_management/helpers/energy_management_charts_helper.dart';
import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/color_manager.dart';
// energy_consumption_chart will return id, name and consumption
const phasesJson = {
"1": {
"phaseOne": 1000,
"phaseTwo": 2000,
"phaseThree": 3000,
}
};
class TotalEnergyConsumptionChart extends StatelessWidget { class TotalEnergyConsumptionChart extends StatelessWidget {
const TotalEnergyConsumptionChart({required this.chartData, super.key}); const TotalEnergyConsumptionChart({required this.chartData, super.key});
@ -23,8 +14,14 @@ class TotalEnergyConsumptionChart extends StatelessWidget {
return Expanded( return Expanded(
child: LineChart( child: LineChart(
LineChartData( LineChartData(
titlesData: EnergyManagementChartsHelper.titlesData(context), titlesData: EnergyManagementChartsHelper.titlesData(
gridData: EnergyManagementChartsHelper.gridData(), context,
leftTitlesInterval: 250,
),
gridData: EnergyManagementChartsHelper.gridData().copyWith(
checkToShowHorizontalLine: (value) => true,
horizontalInterval: 250,
),
borderData: EnergyManagementChartsHelper.borderData(), borderData: EnergyManagementChartsHelper.borderData(),
lineTouchData: EnergyManagementChartsHelper.lineTouchData(), lineTouchData: EnergyManagementChartsHelper.lineTouchData(),
lineBarsData: _lineBarsData, lineBarsData: _lineBarsData,

View File

@ -28,13 +28,25 @@ abstract final class FetchOccupancyDataHelper {
loadAnalyticsDevices(context, communityUuid: communityId, spaceUuid: spaceId); loadAnalyticsDevices(context, communityUuid: communityId, spaceUuid: spaceId);
final selectedDevice = context.read<AnalyticsDevicesBloc>().state.selectedDevice; final selectedDevice = context.read<AnalyticsDevicesBloc>().state.selectedDevice;
loadOccupancyChartData( context.read<OccupancyBloc>().add(
context, LoadOccupancyEvent(
communityUuid: communityId, GetOccupancyParam(
spaceUuid: spaceId, monthDate:
date: datePickerState.monthlyDate, '${datePickerState.monthlyDate.year}-${datePickerState.monthlyDate.month}',
); spaceUuid: spaceId,
loadHeatMapData(context, spaceUuid: spaceId, year: datePickerState.yearlyDate); communityUuid: communityId,
),
),
);
context.read<OccupancyHeatMapBloc>().add(
LoadOccupancyHeatMapEvent(
GetOccupancyHeatMapParam(
spaceUuid: spaceId,
year: datePickerState.yearlyDate,
),
),
);
if (selectedDevice case final AnalyticsDevice device) { if (selectedDevice case final AnalyticsDevice device) {
context.read<RealtimeDeviceChangesBloc>() context.read<RealtimeDeviceChangesBloc>()
@ -45,35 +57,6 @@ abstract final class FetchOccupancyDataHelper {
} }
} }
static void loadHeatMapData(
BuildContext context, {
required String spaceUuid,
required DateTime year,
}) {
context.read<OccupancyHeatMapBloc>().add(
LoadOccupancyHeatMapEvent(
GetOccupancyHeatMapParam(spaceUuid: spaceUuid, year: year),
),
);
}
static void loadOccupancyChartData(
BuildContext context, {
required String communityUuid,
required String spaceUuid,
required DateTime date,
}) {
context.read<OccupancyBloc>().add(
LoadOccupancyEvent(
GetOccupancyParam(
monthDate: '${date.year}-${date.month}',
spaceUuid: spaceUuid,
communityUuid: communityUuid,
),
),
);
}
static void loadAnalyticsDevices( static void loadAnalyticsDevices(
BuildContext context, { BuildContext context, {
required String communityUuid, required String communityUuid,

View File

@ -47,17 +47,11 @@ class OccupancyChartBox extends StatelessWidget {
context.read<AnalyticsDatePickerBloc>().add( context.read<AnalyticsDatePickerBloc>().add(
UpdateAnalyticsDatePickerEvent(montlyDate: value), UpdateAnalyticsDatePickerEvent(montlyDate: value),
); );
if (spaceTreeState.selectedSpaces.isNotEmpty) { FetchOccupancyDataHelper.loadOccupancyData(
FetchOccupancyDataHelper.loadOccupancyChartData( context,
context, communityId: spaceTreeState.selectedCommunities.firstOrNull ?? '',
communityUuid: spaceId: spaceTreeState.selectedSpaces.firstOrNull ?? '',
spaceTreeState.selectedCommunities.firstOrNull ?? );
'',
spaceUuid:
spaceTreeState.selectedSpaces.firstOrNull ?? '',
date: value,
);
}
}, },
selectedDate: context selectedDate: context
.watch<AnalyticsDatePickerBloc>() .watch<AnalyticsDatePickerBloc>()

View File

@ -47,14 +47,12 @@ class OccupancyHeatMapBox extends StatelessWidget {
context.read<AnalyticsDatePickerBloc>().add( context.read<AnalyticsDatePickerBloc>().add(
UpdateAnalyticsDatePickerEvent(yearlyDate: value), UpdateAnalyticsDatePickerEvent(yearlyDate: value),
); );
if (spaceTreeState.selectedSpaces.isNotEmpty) { FetchOccupancyDataHelper.loadOccupancyData(
FetchOccupancyDataHelper.loadHeatMapData( context,
context, communityId:
spaceUuid: spaceTreeState.selectedCommunities.firstOrNull ?? '',
spaceTreeState.selectedSpaces.firstOrNull ?? '', spaceId: spaceTreeState.selectedSpaces.firstOrNull ?? '',
year: value, );
);
}
}, },
datePickerType: DatePickerType.year, datePickerType: DatePickerType.year,
selectedDate: context selectedDate: context

View File

@ -39,6 +39,7 @@ class RemoteOccupancyAnalyticsDevicesService implements AnalyticsDevicesService
path: path:
'/projects/$projectUuid/communities/${param.communityUuid}/spaces/${param.spaceUuid}/devices', '/projects/$projectUuid/communities/${param.communityUuid}/spaces/${param.spaceUuid}/devices',
queryParameters: { queryParameters: {
'requestType': param.requestType.name,
'communityUuid': param.communityUuid, 'communityUuid': param.communityUuid,
'spaceUuid': param.spaceUuid, 'spaceUuid': param.spaceUuid,
'productType': param.deviceTypes.first, 'productType': param.deviceTypes.first,