---
title: Fix the SelectedPlayer modal for pos=DST rows
type: task
status: planned
description: >-
  The Games, Plays, Seasons, Projections and Practice tabs silently render empty for DST players
  because no pid-keyed fact rows exist; suppress the inapplicable tabs or give them an explicit
  empty state.
base_uri: user:task/league/data-views/fix-dst-selected-player-modal.md
created_at: '2026-08-05T18:50:58.624Z'
entity_id: 9e4b1249-114d-4778-9d0d-fe6f95f44fba
owner_identity_uri: █████████████████████████
public_read: true
tags:
  - user:tag/league-xo-football.md
  - user:tag/software-task.md
updated_at: '2026-09-22T15:32:49.920Z'
visibility_analyzed_at: '2026-11-05T23:48:50.690Z'
---

# DST SelectedPlayer modal

## Problem

Opening the `SelectedPlayer` modal on a `pos='DST'` row silently fails on most tabs. The Games, Plays, Seasons, Projections, and Practice tabs all read per-player fact tables keyed on `pid`, and no rows exist for DST pids (`pid='ARI'`, `pos='DST'`). The tabs render empty rather than reporting that the data shape does not apply.

This is pre-existing, not caused by the identity migration. DST fantasy scoring itself is legitimate and works — only the modal drill-in is broken.

## Scope

Make the modal honest for DST rows: either suppress the inapplicable tabs or render an explicit empty state.

## Plan

- [ ] **Enumerate which tabs actually have DST data**
  - Files: `app/views/components/selected-player/`, the per-tab data selectors
  - Purpose: Some tabs may be salvageable from team-keyed tables; the rest are structurally empty for DST.

- [ ] **Decide suppress versus empty-state, per tab**
  - Purpose: A tab with no possible data should not render at all. A tab that could have data but does not for this player should say so.

- [ ] **Implement and verify against a DST row**
  - Purpose: Verify in the browser with `yarn dev:live` per [[███████████████████████████████-█████████]].

## Notes

- Surfaced during [[█████████████████████-█████████████-██-████████-████████]] and carried out of that plan as a latent pre-existing bug.
- Distinct from the three orphan pseudo-player encodings (`*-TM`, `*-DEF`, `*-OFF`) that the migration deleted from the `player` table. Those had no seed file and no legitimate reader. DST rows are real.
