Skip to content

Releases: Resgrid/IC

1.35

Choose a tag to compare

@github-actions github-actions released this 25 Jul 19:17
5f95be3

Version 7.1.35 - 2026-07-25

Description

Overview

This PR implements RIC-T40 Fixes, a collection of stability, robustness, and feature improvements across the Resgrid IC mobile application.

Key Changes

🔐 Authentication Stability

  • Single-flight token refresh: Introduced refreshTokenSingleFlight wrapper to ensure concurrent refresh requests (from the axios 401 interceptor and proactive refresh timer) share a single in-flight request, preventing the rotating refresh token from being consumed multiple times.
  • Safe expires_in handling: Added fallback to 3600 seconds when expires_in is missing or undefined, preventing crashes during login, SSO login, and token refresh.
  • API timeouts: Added 15-second timeouts to the main API client and auth API instances.

🗺️ Maps Route Restructuring

  • Moved Maps from a top-level unauthenticated route into the authenticated app shell as a hidden tab route, preserving the app header and tab bar across nested map screens.
  • Added maps-route.ts helper to dynamically set the correct header (drawer menu on landing, back button on child routes) and title based on the current pathname.
  • Created _layout.tsx for Maps with a Stack navigator supporting index, search, custom maps, and indoor maps screens.

🔍 Incidents Search

  • Added a search bar to the incidents screen allowing filtering by CallId, CallNumber, Name, CallName, CallAddress, CommanderName, and CommandPostLocation.
  • Shows a search-specific empty state when no results match, with a clear button to reset.

📍 Command Map Camera

  • Implemented priority-based imperative camera recentering (saved view > ICP > first pin) to handle asynchronous pin/ICP arrival after mount.
  • Added camera ref and auto-center priority tracking to avoid unnecessary recentering once a higher-priority target has been applied.

🛡️ Robustness & Null-Safety Fixes

  • Map markers: Added null coalescing (MapMakerInfos ?? []) in map rendering and SignalR update handler.
  • Cache manager: Graceful handling of corrupted cache entries (catches JSON parse errors, deletes the bad entry, returns null).
  • Call detail: Validates dates with isValid before formatting, falling back to raw string or empty value.
  • Contact notes: Safer date sorting that handles invalid dates without throwing.
  • Units & Dispatch stores: Null-safe handling of API response data arrays.

📡 SignalR Improvements

  • Access token factory now reads lazily from the auth store, ensuring automatic reconnects use the current valid token.
  • Pending reconnect timers are now cancelled on disconnect, preventing stale reconnection attempts after teardown.
  • Event listener callbacks are wrapped in try-catch to prevent unhandled errors from propagating.

📱 Push Notifications

  • Moved notifee.onBackgroundEvent registration to module scope so notification action presses work when the app is killed (headless JS task).
  • Made the check-in action handler resilient — it never throws, preventing unhandled promise rejections that could crash the background task.

📞 LiveKit

  • Added Reconnecting and Disconnected event handlers with automatic cleanup on unexpected disconnects.
  • Made disconnectFromRoom resilient — cleanup continues even if the disconnect call or sound playback fails.

📍 Location Service

  • Added background permission re-check before starting background updates.
  • Wrapped app state change handler in try-catch to prevent unhandled rejections.

🔧 Other

  • Bluetooth audio: Awaiting scan failures so they're caught in the error handler.
  • CallKeep service: Refactored to a TypeScript barrel file that delegates to platform-specific implementations resolved by Metro/Jest.
  • LiveKit call store: Fails fast when no token endpoint is available instead of leaving isConnecting in a permanent state.

1.30

Choose a tag to compare

@github-actions github-actions released this 24 Jul 06:32
df2f68f

Version 7.1.30 - 2026-07-24

Pull Request Description

RIC-T40 Build fix
This PR replaces the third-party app-icon-badge Expo plugin with a custom local implementation to resolve a build issue caused by a race condition in the original plugin.

Changes

  • Replaced plugin reference in app.config.ts: Switched from the external app-icon-badge plugin to a custom ./plugins/with-app-icon-badge.js wrapper.
  • New custom plugin (plugins/with-app-icon-badge.js): Collects all configured icons (main, iOS, and Android adaptive icon), passes them as batch jobs to a generator script, validates that each generated image was created successfully, and updates the Expo config to reference the new badged icons.
  • New generation script (scripts/generate-app-icon-badges.js): Wraps the addBadge function from the app-icon-badge library with a workaround that addresses an async issue where image files weren't fully written before being used. The script uses a polling mechanism to verify PNG file integrity, writes to temporary files, and copies validated output to the final destination.
  • Added unit tests (plugins/__tests__/with-app-icon-badge.test.ts): Verifies that all configured icons are generated and config paths are updated when badges are enabled, and that icon paths remain untouched when badges are disabled.

Purpose

The original app-icon-badge plugin had a bug where it did not await Jimp.writeAsync, causing intermittent build failures when generated icon files were incomplete or missing. This custom implementation ensures reliable icon generation by properly waiting for valid output before proceeding.

1.28

Choose a tag to compare

@github-actions github-actions released this 23 Jul 21:57
862b006

Version 7.1.28 - 2026-07-23

This pull request delivers several functional improvements to the Resgrid IC (Incident Command) application, primarily focused on the accountability/PAR system, offline status handling, toast notifications, and weather alert reliability.

Key Changes

Accountability/PAR Section Overhaul

  • Extracted the accountability section into a dedicated AccountabilitySection component with an activation flow: when check-in timers are inactive, the IC sees an "Activate" action instead of a pre-populated critical list.
  • Added the ability to perform personnel, IC, and unit-type check-ins directly from the accountability section.
  • Introduced personnel check-in status fetching via a new API endpoint (GetCallPersonnelCheckInStatuses).
  • Added timer activation/deactivation through the ToggleCallTimers endpoint (now using query-string parameters).
  • Managed personnel check-ins (with a target user) now fail gracefully when offline rather than being queued, since they require a live connection.

Check-in Bottom Sheet

  • Removed the "IC" check-in type from the general check-in bottom sheet, as IC check-in is now handled exclusively within the accountability section.

Toast & Offline Status System

  • Enhanced the toast system with dismiss buttons, tappable actions (onPress), and configurable durations.
  • Replaced the layout-consuming OfflineStatusBar with a non-intrusive OfflineStatusToast that surfaces network and pending-sync state through toasts. Pending-sync toasts are tappable to navigate directly to the sync queue.

Weather Alert Fixes

  • Added robust date parsing for department-local timestamp formats (e.g., MM/DD/YYYY h:mm:ss AM/PM) to prevent "Invalid Date" display across weather alert cards, detail screens, and the incident weather section.
  • Fixed multipolygon bounding-box calculation for weather alert maps, ensuring the camera correctly fits all polygon parts.
  • Weather alert maps no longer render a default U.S. map when location data is absent.
  • Weather alert banner dismiss now fires before navigation, and the close button properly stops event propagation.

App Shell Layout

  • Added dynamic header height calculation based on safe-area insets and orientation for consistent header sizing.
  • Improved touch target sizing with hitSlop on header and notification buttons.

Project Naming

  • Updated references from "Resgrid Unit" to "Resgrid IC" across AI coding guidelines and documentation.

1.25

Choose a tag to compare

@github-actions github-actions released this 23 Jul 00:51
db80de2

Version 7.1.25 - 2026-07-23

PR Description: RIC-T40 Fixes

This pull request addresses several fixes related to the weather alerts feature:

Changes

1. Fixed Weather Alert Detail API Call

The getWeatherAlert function was updated to pass the alertId as a path parameter (/WeatherAlerts/GetWeatherAlert/{alertId}) rather than as a query parameter. This corrects how the endpoint is constructed for retrieving a specific weather alert by ID.

2. Improved Weather Alert Detail Loading State

When fetching a new weather alert's details, the store now clears the previously loaded selectedAlert (sets it to null) before beginning the fetch. This prevents stale data from being displayed while a new alert detail is loading.

3. Fixed Severity Filter Tabs Layout

Added grow-0 class to the severity filter tabs ScrollView to prevent it from expanding unnecessarily, fixing a layout issue with the filter tabs.

1.20

Choose a tag to compare

@github-actions github-actions released this 21 Jul 21:08
26e239a

Version 7.1.20 - 2026-07-22

  • Merge pull request #16 from Resgrid/develop

1.18

Choose a tag to compare

@github-actions github-actions released this 21 Jul 19:22
489e0c1

Version 7.1.18 - 2026-07-21

  • Merge pull request #15 from Resgrid/develop

1.16

Choose a tag to compare

@github-actions github-actions released this 21 Jul 18:01
a0e91bd

Version 7.1.16 - 2026-07-21

  • Merge pull request #14 from Resgrid/develop

1.13

Choose a tag to compare

@github-actions github-actions released this 21 Jul 06:06
d0b405d

Version 7.1.13 - 2026-07-21

  • Merge pull request #13 from Resgrid/develop

1.11

Choose a tag to compare

@github-actions github-actions released this 21 Jul 03:41
fe9c3b1

Version 7.1.11 - 2026-07-21

  • Merge pull request #12 from Resgrid/develop