Skip to content

fix(signage-manager): fix shared list, decode and picker behaviour - #531

Merged
MrYuion merged 2 commits into
developfrom
fix/signage-manager-shell
Oct 2, 2026
Merged

MrYuion merged 2 commits into
developfrom
fix/signage-manager-shell

Conversation

@MrYuion

@MrYuion MrYuion commented Oct 2, 2026 •

Copy link
Copy Markdown
Collaborator

Shared signage-manager code had several bugs that affected many pages:

  • Display status: the inventory and command palette used querySystems, which fills a missing signage_last_seen with "now". A display that never checked in showed Online on Schedules.
  • decodeEntityNames: it copied items with { ...item }, which drops class getters. SignageMedia.media_url was undefined, so the edit modal preview was blank.
  • PagedList: reset(null) while a page was loading left loading stuck.
  • PagedSearch: it had no error state, so failed picker searches showed "No displays" or "No zones".
  • Command palette: Enter during the debounce could open a match for the previous term.
  • <load-error>: the Retry button had no type="button", so inside a form it submitted the form and reloaded the page.

Changes

  • Display queries: querySignageDisplays in the inventory and the command palette.
  • decodeEntityNames: keeps the prototype and is typed T.
  • PagedList: reset clears loading.
  • PagedSearch: error and retry(). The display and zone pickers show <load-error>.
  • Command palette: shows API matches only for the current term.
  • <load-error> (libs/components): the Retry button gets type="button".

Testing

  • Unit tests for each fix. Each fails without its fix.
  • nx test signage-manager, nx test components and nx build signage-manager pass.
  • Local PlaceOS stack: never-seen display status, the media edit preview, picker errors and Retry (including inside forms), palette debounce, clearing a search mid-request, & names decoded in every list, and no console errors.

Merge order

Conflicts with #532 and #537 only in apps/signage-manager/USER_STORIES.md. Whichever merges later needs a rebase. Based on develop.


Changes made by Claude Opus 5.5 (1M context) in Claude Code, running in T3 Code.

🤖 Generated with Claude Code

- Load displays for the inventory and command palette with
  querySignageDisplays, so never-seen displays are not shown online.
- decodeEntityNames keeps the class prototype, so getters such as
  SignageMedia.media_url work.
- PagedList.reset(null) clears loading.
- PagedSearch exposes error and retry; the display and zone pickers
  show a load error with Retry.
- The command palette hides the previous term's matches while the new
  term is debounced.
- The shared Retry button no longer submits a surrounding form.
@vercel

vercel Bot commented Oct 2, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated
frontend-templates Ignored Ignored Oct 2, 2026 3:15am UTC

@greptile-apps

greptile-apps Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

RetriggerConfidence Score: 5/5

[Medium risk] Fixes error handling and display logic in search dialogs.

The PR appears safe to merge; both earlier findings are fixed, and no new issue was established.

What we checked:

  • Saved names decode twice: decodeEntityNames recognizes copies it already returned, so queryAll does not decode the display again.
  • Retry shows old matches: retry skips the old term. When the new term is ready, the search resets the list and clears the error.

Summary

This PR fixes display data and shared search behavior in signage-manager, so schedules show never-seen displays correctly and picker failures can be retried.

  • Keeps decoded media usable and prevents names from being decoded twice.
  • Hides old command-palette matches while a new search waits.
  • Makes Retry buttons safe to use inside forms.
Diagram
%%{init: {'theme': 'neutral'}}%%
flowchart LR
  A["Display API response"] --> B["querySignageDisplays: decode name once"]
  B --> C["queryAll: keep decoded copy"]
  C --> D["Inventory and schedule display"]
Loading

Reviews (2) · Last reviewed commit: "fix(signage-manager): decode names once ..."

Comment thread apps/signage-manager/src/app/signage-inventory.service.ts
Comment thread apps/signage-manager/src/app/shared/paged-search.ts
…arch

- decodeEntityNames returns its own copies unchanged, so an item that
  passes through querySignageDisplays and then a list helper is decoded
  once. A saved "&amp;" no longer turns into "&".
- PagedSearch.retry() does nothing while a new term waits for its
  debounce, so it cannot show the old term's matches.
@vercel

vercel Bot commented Oct 2, 2026

Copy link
Copy Markdown

Deployment failed for project frontend-templates with the following error:

Resource is limited - try again in 24 hours (more than 100, code: "api-deployments-free-per-day").

Learn More: https://vercel.com/placeos?upgradeToPro=build-rate-limit

@MrYuion
MrYuion merged commit fc0b435 into develop Oct 2, 2026
4 of 5 checks passed
@MrYuion
MrYuion deleted the fix/signage-manager-shell branch October 2, 2026 04:24
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