Files
klas 40143734fc Initial commit: COPILOT D6 Flutter keyboard controller
Flutter web app replacing legacy WPF CCTV surveillance keyboard controller.
Includes wall overview, section view with monitor grid, camera input,
PTZ control, alarm/lock/sequence BLoCs, and legacy-matching UI styling.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 14:57:38 +01:00

52 lines
1.3 KiB
Dart

import 'package:equatable/equatable.dart';
import '../../../domain/entities/alarm_state.dart' as domain;
class AlarmBlocState extends Equatable {
final List<domain.AlarmState> activeAlarms;
final bool isLoading;
final String? error;
final DateTime? lastSync;
const AlarmBlocState({
this.activeAlarms = const [],
this.isLoading = false,
this.error,
this.lastSync,
});
/// Get count of active blocking alarms
int get blockingAlarmCount =>
activeAlarms.where((a) => a.blocksMonitor).length;
/// Get alarms for a specific monitor
List<domain.AlarmState> alarmsForMonitor(int monitorId) {
return activeAlarms
.where((a) => a.associatedMonitor == monitorId)
.toList();
}
/// Check if monitor has blocking alarm
bool monitorHasBlockingAlarm(int monitorId) {
return activeAlarms.any(
(a) => a.associatedMonitor == monitorId && a.blocksMonitor);
}
AlarmBlocState copyWith({
List<domain.AlarmState>? activeAlarms,
bool? isLoading,
String? error,
DateTime? lastSync,
}) {
return AlarmBlocState(
activeAlarms: activeAlarms ?? this.activeAlarms,
isLoading: isLoading ?? this.isLoading,
error: error,
lastSync: lastSync ?? this.lastSync,
);
}
@override
List<Object?> get props => [activeAlarms, isLoading, error, lastSync];
}