mirror of
https://github.com/SyncrowIOT/web.git
synced 2025-07-10 15:17:31 +00:00
Refactor ScheduleBloc and related components to use dynamic category handling for schedule events
This commit is contained in:
@ -257,11 +257,11 @@ class ScheduleBloc extends Bloc<ScheduleEvent, ScheduleState> {
|
|||||||
category: event.category,
|
category: event.category,
|
||||||
deviceId: deviceId,
|
deviceId: deviceId,
|
||||||
time: getTimeStampWithoutSeconds(dateTime).toString(),
|
time: getTimeStampWithoutSeconds(dateTime).toString(),
|
||||||
code: 'switch_1',
|
code: event.category,
|
||||||
value: event.functionOn,
|
value: event.functionOn,
|
||||||
days: event.selectedDays);
|
days: event.selectedDays);
|
||||||
if (success) {
|
if (success) {
|
||||||
add(const ScheduleGetEvent(category: 'switch_1'));
|
add(ScheduleGetEvent(category: event.category));
|
||||||
} else {
|
} else {
|
||||||
emit(const ScheduleError('Failed to add schedule'));
|
emit(const ScheduleError('Failed to add schedule'));
|
||||||
}
|
}
|
||||||
@ -282,7 +282,7 @@ class ScheduleBloc extends Bloc<ScheduleEvent, ScheduleState> {
|
|||||||
scheduleId: event.scheduleId,
|
scheduleId: event.scheduleId,
|
||||||
category: event.category,
|
category: event.category,
|
||||||
time: getTimeStampWithoutSeconds(dateTime).toString(),
|
time: getTimeStampWithoutSeconds(dateTime).toString(),
|
||||||
function: Status(code: 'switch_1', value: event.functionOn),
|
function: Status(code: event.category, value: event.functionOn),
|
||||||
days: event.selectedDays,
|
days: event.selectedDays,
|
||||||
);
|
);
|
||||||
final success = await DevicesManagementApi().editScheduleRecord(
|
final success = await DevicesManagementApi().editScheduleRecord(
|
||||||
@ -291,7 +291,9 @@ class ScheduleBloc extends Bloc<ScheduleEvent, ScheduleState> {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (success) {
|
if (success) {
|
||||||
add(const ScheduleGetEvent(category: 'switch_1'));
|
add(ScheduleGetEvent(
|
||||||
|
category: event.category,
|
||||||
|
));
|
||||||
} else {
|
} else {
|
||||||
emit(const ScheduleError('Failed to update schedule'));
|
emit(const ScheduleError('Failed to update schedule'));
|
||||||
}
|
}
|
||||||
@ -312,7 +314,7 @@ class ScheduleBloc extends Bloc<ScheduleEvent, ScheduleState> {
|
|||||||
final updatedSchedules = currentState.schedules.map((schedule) {
|
final updatedSchedules = currentState.schedules.map((schedule) {
|
||||||
if (schedule.scheduleId == event.scheduleId) {
|
if (schedule.scheduleId == event.scheduleId) {
|
||||||
return schedule.copyWith(
|
return schedule.copyWith(
|
||||||
function: Status(code: 'switch_1', value: event.functionOn),
|
function: Status(code: event.category, value: event.functionOn),
|
||||||
enable: event.enable,
|
enable: event.enable,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -533,10 +535,6 @@ class ScheduleBloc extends Bloc<ScheduleEvent, ScheduleState> {
|
|||||||
Duration.zero;
|
Duration.zero;
|
||||||
}
|
}
|
||||||
if (state is ScheduleLoaded) {
|
if (state is ScheduleLoaded) {
|
||||||
print('Updating existing state with fetched status');
|
|
||||||
print('scheduleMode: $scheduleMode');
|
|
||||||
print('countdownRemaining: $countdownRemaining');
|
|
||||||
print('isCountdownActive: $isCountdownActive');
|
|
||||||
final currentState = state as ScheduleLoaded;
|
final currentState = state as ScheduleLoaded;
|
||||||
emit(currentState.copyWith(
|
emit(currentState.copyWith(
|
||||||
scheduleMode: scheduleMode,
|
scheduleMode: scheduleMode,
|
||||||
@ -586,35 +584,4 @@ class ScheduleBloc extends Bloc<ScheduleEvent, ScheduleState> {
|
|||||||
dateTime.day, dateTime.hour, dateTime.minute);
|
dateTime.day, dateTime.hour, dateTime.minute);
|
||||||
return dateTimeWithoutSeconds.millisecondsSinceEpoch ~/ 1000;
|
return dateTimeWithoutSeconds.millisecondsSinceEpoch ~/ 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Future <void> _updateScheduleEvent(
|
|
||||||
// StatusUpdatedScheduleEvent event,
|
|
||||||
// Emitter<ScheduleState> emit,
|
|
||||||
// ) async {
|
|
||||||
// if (state is ScheduleLoaded) {
|
|
||||||
// final currentState = state as ScheduleLoaded;
|
|
||||||
|
|
||||||
// final updatedSchedules = currentState.schedules.map((schedule) {
|
|
||||||
// if (schedule.scheduleId == event.scheduleId) {
|
|
||||||
// return schedule.copyWith(
|
|
||||||
// function: Status(code: 'switch_1', value: event.functionOn),
|
|
||||||
// enable: event.enable,
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
// return schedule;
|
|
||||||
// }).toList();
|
|
||||||
|
|
||||||
// bool success = await DevicesManagementApi().updateScheduleRecord(
|
|
||||||
// enable: event.enable,
|
|
||||||
// uuid: currentState.status.uuid,
|
|
||||||
// scheduleId: event.scheduleId,
|
|
||||||
// );
|
|
||||||
|
|
||||||
// if (success) {
|
|
||||||
// emit(currentState.copyWith(schedules: updatedSchedules));
|
|
||||||
// } else {
|
|
||||||
// emit(currentState);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
@ -121,15 +121,17 @@ class ScheduleUpdateEntryEvent extends ScheduleEvent {
|
|||||||
final String scheduleId;
|
final String scheduleId;
|
||||||
final bool functionOn;
|
final bool functionOn;
|
||||||
final bool enable;
|
final bool enable;
|
||||||
|
final String category;
|
||||||
|
|
||||||
const ScheduleUpdateEntryEvent({
|
const ScheduleUpdateEntryEvent({
|
||||||
required this.scheduleId,
|
required this.scheduleId,
|
||||||
required this.functionOn,
|
required this.functionOn,
|
||||||
required this.enable,
|
required this.enable,
|
||||||
|
required this.category,
|
||||||
});
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object> get props => [scheduleId, functionOn, enable];
|
List<Object> get props => [scheduleId, functionOn, enable, category];
|
||||||
}
|
}
|
||||||
|
|
||||||
class UpdateScheduleModeEvent extends ScheduleEvent {
|
class UpdateScheduleModeEvent extends ScheduleEvent {
|
||||||
|
@ -51,6 +51,7 @@ class BuildScheduleView extends StatelessWidget {
|
|||||||
const SizedBox(height: 20),
|
const SizedBox(height: 20),
|
||||||
if (state.scheduleMode == ScheduleModes.schedule)
|
if (state.scheduleMode == ScheduleModes.schedule)
|
||||||
ScheduleManagementUI(
|
ScheduleManagementUI(
|
||||||
|
category: category,
|
||||||
deviceUuid: deviceUuid,
|
deviceUuid: deviceUuid,
|
||||||
onAddSchedule: () async {
|
onAddSchedule: () async {
|
||||||
final entry = await ScheduleDialogHelper
|
final entry = await ScheduleDialogHelper
|
||||||
|
@ -7,11 +7,13 @@ import 'package:syncrow_web/utils/extension/build_context_x.dart';
|
|||||||
class ScheduleManagementUI extends StatelessWidget {
|
class ScheduleManagementUI extends StatelessWidget {
|
||||||
final String deviceUuid;
|
final String deviceUuid;
|
||||||
final VoidCallback onAddSchedule;
|
final VoidCallback onAddSchedule;
|
||||||
|
final String category;
|
||||||
|
|
||||||
const ScheduleManagementUI({
|
const ScheduleManagementUI({
|
||||||
super.key,
|
super.key,
|
||||||
required this.deviceUuid,
|
required this.deviceUuid,
|
||||||
required this.onAddSchedule,
|
required this.onAddSchedule,
|
||||||
|
this.category = 'switch_1',
|
||||||
});
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -42,7 +44,7 @@ class ScheduleManagementUI extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 20),
|
const SizedBox(height: 20),
|
||||||
ScheduleTableWidget(deviceUuid: deviceUuid),
|
ScheduleTableWidget(deviceUuid: deviceUuid, category: category),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -39,10 +39,10 @@ class ScheduleModeSelector extends StatelessWidget {
|
|||||||
context, 'Countdown', ScheduleModes.countdown, currentMode),
|
context, 'Countdown', ScheduleModes.countdown, currentMode),
|
||||||
_buildRadioTile(
|
_buildRadioTile(
|
||||||
context, 'Schedule', ScheduleModes.schedule, currentMode),
|
context, 'Schedule', ScheduleModes.schedule, currentMode),
|
||||||
_buildRadioTile(
|
// _buildRadioTile(
|
||||||
context, 'Circulate', ScheduleModes.circulate, currentMode),
|
// context, 'Circulate', ScheduleModes.circulate, currentMode),
|
||||||
_buildRadioTile(
|
// _buildRadioTile(
|
||||||
context, 'Inching', ScheduleModes.inching, currentMode),
|
// context, 'Inching', ScheduleModes.inching, currentMode),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
@ -164,6 +164,7 @@ class _ScheduleTableView extends StatelessWidget {
|
|||||||
onTap: () {
|
onTap: () {
|
||||||
context.read<ScheduleBloc>().add(
|
context.read<ScheduleBloc>().add(
|
||||||
ScheduleUpdateEntryEvent(
|
ScheduleUpdateEntryEvent(
|
||||||
|
category: schedule.category,
|
||||||
scheduleId: schedule.scheduleId,
|
scheduleId: schedule.scheduleId,
|
||||||
functionOn: schedule.function.value,
|
functionOn: schedule.function.value,
|
||||||
enable: !schedule.enable,
|
enable: !schedule.enable,
|
||||||
|
Reference in New Issue
Block a user