From 6fcaacaa778107ace820a54f4339f2a4bdb2fb3b Mon Sep 17 00:00:00 2001 From: Alexander Harding Date: Sun, 1 Mar 2026 12:16:10 -0600 Subject: [PATCH] feat: dangerous alerts are always first --- src/helpers/weather.ts | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/src/helpers/weather.ts b/src/helpers/weather.ts index 658c441..b7763d5 100644 --- a/src/helpers/weather.ts +++ b/src/helpers/weather.ts @@ -39,29 +39,39 @@ export function sortAlerts( allAlerts: Alert[], gAirmetRead: OnOff, ): Alert[] { + const DANGEROUS_OFFSET = 0; + const NON_DANGEROUS_OFFSET = 1e15; + const GAIRMET_READ_OFFSET = 2e15; + return sortBy(alerts, (alert) => { + const dangerousPrefix = isAlertDangerous(alert) + ? DANGEROUS_OFFSET + : NON_DANGEROUS_OFFSET; + // If the setting for always marking G-Airmets as read is on, - // push all G-Airmets to the bottom of the list of alerts so - // the user doesn't have to scroll to get to the stuff they care about more + // push all G-Airmets to the bottom of the list of alerts if (gAirmetRead === OnOff.On && isGAirmetAlert(alert)) return ( -new Date( extractIssuedTimestamp(alert, findRelatedAlerts(alert, allAlerts)), - ).getTime() + - 1000 * 60 * 60 * 60 + ).getTime() + GAIRMET_READ_OFFSET ); if (isWeatherAlert(alert)) - return -new Date(alert.properties.onset).getTime(); + return -new Date(alert.properties.onset).getTime() + dangerousPrefix; if (isTFRAlert(alert)) - return -new Date( - alert.properties.coreNOTAMData.notam.effectiveStart, - ).getTime(); + return ( + -new Date( + alert.properties.coreNOTAMData.notam.effectiveStart, + ).getTime() + dangerousPrefix + ); - return -new Date( - extractIssuedTimestamp(alert, findRelatedAlerts(alert, allAlerts)), - ).getTime(); + return ( + -new Date( + extractIssuedTimestamp(alert, findRelatedAlerts(alert, allAlerts)), + ).getTime() + dangerousPrefix + ); }); }