feat(vacaciones): add vacation range manager screen
Add the Vacaciones manager screen per design ADR-6: an active-range
hero (name, days-remaining countdown, determinate progress bar, and a
per-alarm pause-impact line), a "PROGRAMADOS" upcoming-ranges list, an
"Add range" CTA, and a "Rangos pasados" history section. This is the
real destination WU8's Alarmas-root summary row pushes to, replacing
WU8's own temporary placeholder (_PantallaVacacionesTemporal, now
deleted).
EstadoAlarmas gains 4 pure query methods (rangoVacacionesActivo,
vacacionesProximas, vacacionesPasadas, impactoDeRango) -- read-only
over _alarmas/_vacaciones, no writes, no rescheduling, no native
bridge calls. impactoDeRango mirrors ServicioProgramacionAlarmas's own
pause predicate exactly, so the screen never disagrees with the
scheduler about which alarms are paused. ImpactoVacaciones joins
RangoVacaciones in alarma_musical.dart.
The add-range form (_EditorVacacionesSheet, _PickerButton) moved
verbatim from pantalla_alarmas.dart to its one remaining consumer.
estado_alarmas.dart's scheduling/snooze paths and the ringing screen's
dismiss guard are untouched; both test files pass unmodified.
New ARB keys (en/es only; other 11 locales are WU18's job):
vacationImpact{Paused,Continues}Label, vacationUpcomingSectionTitle,
vacationPastSectionTitle, addVacationRangeCta,
vacationNoActiveRangeHint.
This commit is contained in:
@@ -1874,6 +1874,42 @@ abstract class AppLocalizations {
|
||||
/// **'Próximo rango en {days} días'**
|
||||
String vacationSummaryUpcomingCountdown(int days);
|
||||
|
||||
/// No description provided for @vacationImpactPausedLabel.
|
||||
///
|
||||
/// In es, this message translates to:
|
||||
/// **'Pausa: {times}'**
|
||||
String vacationImpactPausedLabel(Object times);
|
||||
|
||||
/// No description provided for @vacationImpactContinuesLabel.
|
||||
///
|
||||
/// In es, this message translates to:
|
||||
/// **'Sigue sonando: {times}'**
|
||||
String vacationImpactContinuesLabel(Object times);
|
||||
|
||||
/// No description provided for @vacationUpcomingSectionTitle.
|
||||
///
|
||||
/// In es, this message translates to:
|
||||
/// **'PROGRAMADOS'**
|
||||
String get vacationUpcomingSectionTitle;
|
||||
|
||||
/// No description provided for @vacationPastSectionTitle.
|
||||
///
|
||||
/// In es, this message translates to:
|
||||
/// **'Rangos pasados'**
|
||||
String get vacationPastSectionTitle;
|
||||
|
||||
/// No description provided for @addVacationRangeCta.
|
||||
///
|
||||
/// In es, this message translates to:
|
||||
/// **'Añadir rango'**
|
||||
String get addVacationRangeCta;
|
||||
|
||||
/// No description provided for @vacationNoActiveRangeHint.
|
||||
///
|
||||
/// In es, this message translates to:
|
||||
/// **'No hay un rango de vacaciones activo ahora mismo.'**
|
||||
String get vacationNoActiveRangeHint;
|
||||
|
||||
/// No description provided for @vacationsDefaultName.
|
||||
///
|
||||
/// In es, this message translates to:
|
||||
|
||||
@@ -1018,6 +1018,29 @@ class AppLocalizationsAr extends AppLocalizations {
|
||||
return 'Próximo rango en $days días';
|
||||
}
|
||||
|
||||
@override
|
||||
String vacationImpactPausedLabel(Object times) {
|
||||
return 'Pausa: $times';
|
||||
}
|
||||
|
||||
@override
|
||||
String vacationImpactContinuesLabel(Object times) {
|
||||
return 'Sigue sonando: $times';
|
||||
}
|
||||
|
||||
@override
|
||||
String get vacationUpcomingSectionTitle => 'PROGRAMADOS';
|
||||
|
||||
@override
|
||||
String get vacationPastSectionTitle => 'Rangos pasados';
|
||||
|
||||
@override
|
||||
String get addVacationRangeCta => 'Añadir rango';
|
||||
|
||||
@override
|
||||
String get vacationNoActiveRangeHint =>
|
||||
'No hay un rango de vacaciones activo ahora mismo.';
|
||||
|
||||
@override
|
||||
String get vacationsDefaultName => 'إجازات';
|
||||
|
||||
|
||||
@@ -1025,6 +1025,29 @@ class AppLocalizationsBn extends AppLocalizations {
|
||||
return 'Próximo rango en $days días';
|
||||
}
|
||||
|
||||
@override
|
||||
String vacationImpactPausedLabel(Object times) {
|
||||
return 'Pausa: $times';
|
||||
}
|
||||
|
||||
@override
|
||||
String vacationImpactContinuesLabel(Object times) {
|
||||
return 'Sigue sonando: $times';
|
||||
}
|
||||
|
||||
@override
|
||||
String get vacationUpcomingSectionTitle => 'PROGRAMADOS';
|
||||
|
||||
@override
|
||||
String get vacationPastSectionTitle => 'Rangos pasados';
|
||||
|
||||
@override
|
||||
String get addVacationRangeCta => 'Añadir rango';
|
||||
|
||||
@override
|
||||
String get vacationNoActiveRangeHint =>
|
||||
'No hay un rango de vacaciones activo ahora mismo.';
|
||||
|
||||
@override
|
||||
String get vacationsDefaultName => 'ছুটি';
|
||||
|
||||
|
||||
@@ -1026,6 +1026,29 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
return 'Próximo rango en $days días';
|
||||
}
|
||||
|
||||
@override
|
||||
String vacationImpactPausedLabel(Object times) {
|
||||
return 'Pausa: $times';
|
||||
}
|
||||
|
||||
@override
|
||||
String vacationImpactContinuesLabel(Object times) {
|
||||
return 'Sigue sonando: $times';
|
||||
}
|
||||
|
||||
@override
|
||||
String get vacationUpcomingSectionTitle => 'PROGRAMADOS';
|
||||
|
||||
@override
|
||||
String get vacationPastSectionTitle => 'Rangos pasados';
|
||||
|
||||
@override
|
||||
String get addVacationRangeCta => 'Añadir rango';
|
||||
|
||||
@override
|
||||
String get vacationNoActiveRangeHint =>
|
||||
'No hay un rango de vacaciones activo ahora mismo.';
|
||||
|
||||
@override
|
||||
String get vacationsDefaultName => 'Ferien';
|
||||
|
||||
|
||||
@@ -1020,6 +1020,28 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
return 'Next range in $days days';
|
||||
}
|
||||
|
||||
@override
|
||||
String vacationImpactPausedLabel(Object times) {
|
||||
return 'Paused: $times';
|
||||
}
|
||||
|
||||
@override
|
||||
String vacationImpactContinuesLabel(Object times) {
|
||||
return 'Still ringing: $times';
|
||||
}
|
||||
|
||||
@override
|
||||
String get vacationUpcomingSectionTitle => 'SCHEDULED';
|
||||
|
||||
@override
|
||||
String get vacationPastSectionTitle => 'Past ranges';
|
||||
|
||||
@override
|
||||
String get addVacationRangeCta => 'Add range';
|
||||
|
||||
@override
|
||||
String get vacationNoActiveRangeHint => 'No active vacation range right now.';
|
||||
|
||||
@override
|
||||
String get vacationsDefaultName => 'Vacation';
|
||||
|
||||
|
||||
@@ -1024,6 +1024,29 @@ class AppLocalizationsEs extends AppLocalizations {
|
||||
return 'Próximo rango en $days días';
|
||||
}
|
||||
|
||||
@override
|
||||
String vacationImpactPausedLabel(Object times) {
|
||||
return 'Pausa: $times';
|
||||
}
|
||||
|
||||
@override
|
||||
String vacationImpactContinuesLabel(Object times) {
|
||||
return 'Sigue sonando: $times';
|
||||
}
|
||||
|
||||
@override
|
||||
String get vacationUpcomingSectionTitle => 'PROGRAMADOS';
|
||||
|
||||
@override
|
||||
String get vacationPastSectionTitle => 'Rangos pasados';
|
||||
|
||||
@override
|
||||
String get addVacationRangeCta => 'Añadir rango';
|
||||
|
||||
@override
|
||||
String get vacationNoActiveRangeHint =>
|
||||
'No hay un rango de vacaciones activo ahora mismo.';
|
||||
|
||||
@override
|
||||
String get vacationsDefaultName => 'Vacaciones';
|
||||
|
||||
|
||||
@@ -1030,6 +1030,29 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
return 'Próximo rango en $days días';
|
||||
}
|
||||
|
||||
@override
|
||||
String vacationImpactPausedLabel(Object times) {
|
||||
return 'Pausa: $times';
|
||||
}
|
||||
|
||||
@override
|
||||
String vacationImpactContinuesLabel(Object times) {
|
||||
return 'Sigue sonando: $times';
|
||||
}
|
||||
|
||||
@override
|
||||
String get vacationUpcomingSectionTitle => 'PROGRAMADOS';
|
||||
|
||||
@override
|
||||
String get vacationPastSectionTitle => 'Rangos pasados';
|
||||
|
||||
@override
|
||||
String get addVacationRangeCta => 'Añadir rango';
|
||||
|
||||
@override
|
||||
String get vacationNoActiveRangeHint =>
|
||||
'No hay un rango de vacaciones activo ahora mismo.';
|
||||
|
||||
@override
|
||||
String get vacationsDefaultName => 'Vacances';
|
||||
|
||||
|
||||
@@ -1021,6 +1021,29 @@ class AppLocalizationsHi extends AppLocalizations {
|
||||
return 'Próximo rango en $days días';
|
||||
}
|
||||
|
||||
@override
|
||||
String vacationImpactPausedLabel(Object times) {
|
||||
return 'Pausa: $times';
|
||||
}
|
||||
|
||||
@override
|
||||
String vacationImpactContinuesLabel(Object times) {
|
||||
return 'Sigue sonando: $times';
|
||||
}
|
||||
|
||||
@override
|
||||
String get vacationUpcomingSectionTitle => 'PROGRAMADOS';
|
||||
|
||||
@override
|
||||
String get vacationPastSectionTitle => 'Rangos pasados';
|
||||
|
||||
@override
|
||||
String get addVacationRangeCta => 'Añadir rango';
|
||||
|
||||
@override
|
||||
String get vacationNoActiveRangeHint =>
|
||||
'No hay un rango de vacaciones activo ahora mismo.';
|
||||
|
||||
@override
|
||||
String get vacationsDefaultName => 'छुट्टियाँ';
|
||||
|
||||
|
||||
@@ -1025,6 +1025,29 @@ class AppLocalizationsId extends AppLocalizations {
|
||||
return 'Próximo rango en $days días';
|
||||
}
|
||||
|
||||
@override
|
||||
String vacationImpactPausedLabel(Object times) {
|
||||
return 'Pausa: $times';
|
||||
}
|
||||
|
||||
@override
|
||||
String vacationImpactContinuesLabel(Object times) {
|
||||
return 'Sigue sonando: $times';
|
||||
}
|
||||
|
||||
@override
|
||||
String get vacationUpcomingSectionTitle => 'PROGRAMADOS';
|
||||
|
||||
@override
|
||||
String get vacationPastSectionTitle => 'Rangos pasados';
|
||||
|
||||
@override
|
||||
String get addVacationRangeCta => 'Añadir rango';
|
||||
|
||||
@override
|
||||
String get vacationNoActiveRangeHint =>
|
||||
'No hay un rango de vacaciones activo ahora mismo.';
|
||||
|
||||
@override
|
||||
String get vacationsDefaultName => 'Liburan';
|
||||
|
||||
|
||||
@@ -1026,6 +1026,29 @@ class AppLocalizationsIt extends AppLocalizations {
|
||||
return 'Próximo rango en $days días';
|
||||
}
|
||||
|
||||
@override
|
||||
String vacationImpactPausedLabel(Object times) {
|
||||
return 'Pausa: $times';
|
||||
}
|
||||
|
||||
@override
|
||||
String vacationImpactContinuesLabel(Object times) {
|
||||
return 'Sigue sonando: $times';
|
||||
}
|
||||
|
||||
@override
|
||||
String get vacationUpcomingSectionTitle => 'PROGRAMADOS';
|
||||
|
||||
@override
|
||||
String get vacationPastSectionTitle => 'Rangos pasados';
|
||||
|
||||
@override
|
||||
String get addVacationRangeCta => 'Añadir rango';
|
||||
|
||||
@override
|
||||
String get vacationNoActiveRangeHint =>
|
||||
'No hay un rango de vacaciones activo ahora mismo.';
|
||||
|
||||
@override
|
||||
String get vacationsDefaultName => 'Vacanze';
|
||||
|
||||
|
||||
@@ -994,6 +994,29 @@ class AppLocalizationsJa extends AppLocalizations {
|
||||
return 'Próximo rango en $days días';
|
||||
}
|
||||
|
||||
@override
|
||||
String vacationImpactPausedLabel(Object times) {
|
||||
return 'Pausa: $times';
|
||||
}
|
||||
|
||||
@override
|
||||
String vacationImpactContinuesLabel(Object times) {
|
||||
return 'Sigue sonando: $times';
|
||||
}
|
||||
|
||||
@override
|
||||
String get vacationUpcomingSectionTitle => 'PROGRAMADOS';
|
||||
|
||||
@override
|
||||
String get vacationPastSectionTitle => 'Rangos pasados';
|
||||
|
||||
@override
|
||||
String get addVacationRangeCta => 'Añadir rango';
|
||||
|
||||
@override
|
||||
String get vacationNoActiveRangeHint =>
|
||||
'No hay un rango de vacaciones activo ahora mismo.';
|
||||
|
||||
@override
|
||||
String get vacationsDefaultName => '休暇';
|
||||
|
||||
|
||||
@@ -1023,6 +1023,29 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
return 'Próximo rango en $days días';
|
||||
}
|
||||
|
||||
@override
|
||||
String vacationImpactPausedLabel(Object times) {
|
||||
return 'Pausa: $times';
|
||||
}
|
||||
|
||||
@override
|
||||
String vacationImpactContinuesLabel(Object times) {
|
||||
return 'Sigue sonando: $times';
|
||||
}
|
||||
|
||||
@override
|
||||
String get vacationUpcomingSectionTitle => 'PROGRAMADOS';
|
||||
|
||||
@override
|
||||
String get vacationPastSectionTitle => 'Rangos pasados';
|
||||
|
||||
@override
|
||||
String get addVacationRangeCta => 'Añadir rango';
|
||||
|
||||
@override
|
||||
String get vacationNoActiveRangeHint =>
|
||||
'No hay un rango de vacaciones activo ahora mismo.';
|
||||
|
||||
@override
|
||||
String get vacationsDefaultName => 'Férias';
|
||||
|
||||
|
||||
@@ -1025,6 +1025,29 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
return 'Próximo rango en $days días';
|
||||
}
|
||||
|
||||
@override
|
||||
String vacationImpactPausedLabel(Object times) {
|
||||
return 'Pausa: $times';
|
||||
}
|
||||
|
||||
@override
|
||||
String vacationImpactContinuesLabel(Object times) {
|
||||
return 'Sigue sonando: $times';
|
||||
}
|
||||
|
||||
@override
|
||||
String get vacationUpcomingSectionTitle => 'PROGRAMADOS';
|
||||
|
||||
@override
|
||||
String get vacationPastSectionTitle => 'Rangos pasados';
|
||||
|
||||
@override
|
||||
String get addVacationRangeCta => 'Añadir rango';
|
||||
|
||||
@override
|
||||
String get vacationNoActiveRangeHint =>
|
||||
'No hay un rango de vacaciones activo ahora mismo.';
|
||||
|
||||
@override
|
||||
String get vacationsDefaultName => 'Отпуск';
|
||||
|
||||
|
||||
@@ -990,6 +990,29 @@ class AppLocalizationsZh extends AppLocalizations {
|
||||
return 'Próximo rango en $days días';
|
||||
}
|
||||
|
||||
@override
|
||||
String vacationImpactPausedLabel(Object times) {
|
||||
return 'Pausa: $times';
|
||||
}
|
||||
|
||||
@override
|
||||
String vacationImpactContinuesLabel(Object times) {
|
||||
return 'Sigue sonando: $times';
|
||||
}
|
||||
|
||||
@override
|
||||
String get vacationUpcomingSectionTitle => 'PROGRAMADOS';
|
||||
|
||||
@override
|
||||
String get vacationPastSectionTitle => 'Rangos pasados';
|
||||
|
||||
@override
|
||||
String get addVacationRangeCta => 'Añadir rango';
|
||||
|
||||
@override
|
||||
String get vacationNoActiveRangeHint =>
|
||||
'No hay un rango de vacaciones activo ahora mismo.';
|
||||
|
||||
@override
|
||||
String get vacationsDefaultName => '假期';
|
||||
|
||||
|
||||
Reference in New Issue
Block a user