Skip to content

Add observation search and filtering, and user location filtering - #518

Open
newmanw wants to merge 1 commit into
ngageoint:developfrom
newmanw:feature/filter-dialogs-and-search
Open

newmanw wants to merge 1 commit into
ngageoint:developfrom
newmanw:feature/filter-dialogs-and-search

Conversation

@newmanw

@newmanw newmanw commented Sep 25, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds a search bar to the observation list and filter dialogs for observations and user locations.

  • Observation search: search observations by keyword from the list toolbar.
  • Observation filter: filter by time range, team or member, attachments, favorites, important, and per-field conditions.
  • Location filter: filter people by time range and team or member.

Both lists show their active filters, result count and paging, and recover from failed searches with a retry. The filters also apply to the map, and the export page reuses the keyword and condition filters.

Changes

Client

  • New observation filter dialog, user location filter dialog and search bar, replacing the old filter component. They are standalone, use control flow and signals with OnPush, and follow Material 3.
  • EventService and FilterService drive the map, list page and locations from triggers with per-fetch teardown, so switching events or destroying the service drops late responses instead of applying them.
  • The member filter takes an event id, teams and an initial filter, owns its chips after init and clears them when the event changes.
  • Flagging as important and favoriting update the list immediately instead of waiting for the next poll.
  • Typed the map layers, user locations and observation entities shared by these components, and removed the unused follow inputs on the people list.

Server

  • Exports keep both the keyword and the condition when both are sent, and drop the filter when neither is.
  • Favorite and important updates populate the same user fields as the read path, so responses match what the list expects.
  • Documented the known team-scoping gap in resolveUserIsAnyOf.

Known gaps

  • Filter by form is not in the new observation dialog. The old "Forms" chips are gone. The condition builder needs a field, and the server search has no form-presence filter. This will be restored in a separate PR.
  • Malformed conditions are silently ignored by the export and search endpoints.
  • resolveUserIsAnyOf does not check that a team id belongs to the event (documented in code).
  • Hand-rolled listener arrays in EventService and MapService remain. Replacing them with observables is planned for a later PR.

Adds a search bar to the observation list and filter dialogs for observations
and user locations. Observations can be filtered by keyword, time range, team
or member, attachments, favorites, important, and per-field conditions. People
can be filtered by time range and team or member. Both lists show their active
filters, result count and paging, and recover from failed searches with a
retry. The filters also apply to the map, and the export page reuses the
keyword and condition filters.

Client
- New observation filter dialog, user location filter dialog and search bar,
  replacing the old filter component. They are standalone, use control flow
  and signals with OnPush, and follow Material 3.
- EventService and FilterService drive the map, list page and locations from
  triggers with per-fetch teardown, so switching events or destroying the
  service drops late responses instead of applying them.
- The member filter takes an event id, teams and an initial filter, owns its
  chips after init and clears them when the event changes.
- Flagging as important and favoriting update the list immediately instead of
  waiting for the next poll.
- A new export starts from the current observation and location filters,
  including attachments, favorites, important, keyword and condition.
- The observation, people, feed and export panels share the same backgrounds,
  toolbar colors, and empty state icons and text. The export detail toolbar
  holds the download and delete actions.
- Type the map layers, user locations and observation entities shared by these
  components, and remove the unused follow inputs on the people list.

Server
- Exports keep both the keyword and the condition when both are sent, and drop
  the filter when neither is.
- Favorite and important updates populate the same user fields as the read
  path, so responses match what the list expects.
- Document the known team-scoping gap in resolveUserIsAnyOf.

Tests
- New specs for the dialogs, search bar, date/time picker, field filter and
  observation page updates, plus expanded specs for the map, filter and event
  services, local storage, sidebar, navigation, user list and export create.
- web-app 1465 passing, service 1235 passing (55 pending).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant