Skip to content

feat(#2864): honor temporarily-unavailable path items in App Space - #2882

Merged
jung-thomas merged 1 commit into
DEVfrom
worktree-2864-appspace-disable
Oct 21, 2026
Merged

jung-thomas merged 1 commit into
DEVfrom
worktree-2864-appspace-disable

Conversation

@jung-thomas

Copy link
Copy Markdown
Contributor

Problem

Issue #2864's path-item "temporarily unavailable" flag is honored by the admin form, GraphQL, loadMissionContext, and the mission page — but the App Space kiosk (/app-space/?eventId=...) has its own data path (getAppSpaceProgress → buildPathItems/shapeItem → AppSpace.vue) that was never wired. Reported live on DEV: the Joule Studio (BDC) item was set to disabled but stayed active/clickable on the app-space card.

This is the whole purpose of the feature — quick-disable a broken/maintenance item from the live kiosk.

Fix

  • srv/lib/path-item-task-resolver.js — shapeItem/buildPathItems carry temporarilyUnavailable + unavailableReason on direct items. Group-expanded children are stamped false (not inherited), matching the mission page (packages/content/catalog-data.js).
  • hugo-apps/src/app-space/app-space-gating.ts — isTutorialOpenable returns false for unavailable items. Single chokepoint: blocks the click handler AND strips the clickable class.
  • hugo-apps/src/app-space/AppSpace.vue — "Temporarily Unavailable" badge + reason, greyed + delinked card.

Tests

  • test/unit/app-space-unavailable.test.js — buildPathItems flag passthrough (direct carries, available defaults false, group child = false).
  • test/unit/app-space-unavailable-gating.test.js — gating blocks opening, overrides the App Space completion time window #2866 redo exception.
  • hugo-apps/src/app-space/__tests__/AppSpace.unavailable.test.ts — mounted component: badge + reason render, item greyed, title not clickable, no window.open on click.

All 48 app-space suite tests pass; island bundle builds clean; vue-tsc clean.

Verification

Pending DEV deploy + live check on eventId=10000015 (Joule Studio BDC).

The per-path-item temporarily-unavailable flag (admin-toggled, already honored
on the mission page) was dropped by the App Space data path, so a disabled
item still rendered as an active, clickable kiosk card.

- path-item-task-resolver: shapeItem/buildPathItems now carry
  temporarilyUnavailable + unavailableReason on direct items (group-expanded
  children stamped false, matching the mission page).
- app-space-gating: isTutorialOpenable returns false for unavailable items —
  the single chokepoint that both blocks the click and strips .clickable.
- AppSpace.vue: 'Temporarily Unavailable' badge + reason, greyed/delinked card.

Tests: buildPathItems passthrough, gating block, and a mounted-component test
proving badge render + no window.open on click.
@jung-thomas
jung-thomas merged commit 3eeb854 into DEV Oct 21, 2026
6 checks passed
@jung-thomas
jung-thomas deleted the worktree-2864-appspace-disable branch October 21, 2026 22:39
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