Family achievements strip on the card (ui-award-chips) + skills.service route fixes #872

Open
opened 2026-07-27 14:29:47 +00:00 by spikerj · 1 comment
Owner

Part of #868 (PR-4, angular). Depends on the TopAwards backend ticket.

  • New libraries/ui/award-chips (mirror of ui-destination-chips, layer:ui presentational): AwardChip { icon, label, tier?, tooltip? } → ≤4 tiles (tinted rounded icon square + title + subtitle), geometry matching the mock's benefits tiles. Tier colors via one shared helper (lift getTierColor out of profile.component.ts:653).
  • Family card maps family().topAwards → strip between the destinations panel and the CTA banner; collapses entirely when empty.
  • Fix in passing (skills.service.ts): revokeSkill must call DELETE /api/Skills/earned/{id} (currently /{id} → 404), checkAutoAwards must call POST /api/Skills/check-auto-awards (currently /auto-award → 404); drop the phantom skillDescription field the server never returns.
Part of #868 (PR-4, angular). Depends on the TopAwards backend ticket. - New `libraries/ui/award-chips` (mirror of `ui-destination-chips`, layer:ui presentational): `AwardChip { icon, label, tier?, tooltip? }` → ≤4 tiles (tinted rounded icon square + title + subtitle), geometry matching the mock's benefits tiles. Tier colors via one shared helper (lift `getTierColor` out of `profile.component.ts:653`). - Family card maps `family().topAwards` → strip between the destinations panel and the CTA banner; collapses entirely when empty. - Fix in passing (`skills.service.ts`): `revokeSkill` must call `DELETE /api/Skills/earned/{id}` (currently `/{id}` → 404), `checkAutoAwards` must call `POST /api/Skills/check-auto-awards` (currently `/auto-award` → 404); drop the phantom `skillDescription` field the server never returns.
Author
Owner

Audited against origin/mastereverything landed except one cosmetic item. (Standalone PR #589 closed unmerged; work landed via consolidated angular PR #592.)

Done

  • Lib libraries/ui/award-chips/*; AwardChip at award-chips.component.ts:9-19.
  • Shared awardTierColor at :26 — and it was genuinely lifted, not copied: profile.component.ts:31 imports it and :657 delegates. No duplicate tier hexes left in the codebase.
  • Strip collapses when empty — award-chips.component.html:1 (@if chips().length > 0) and family-card.component.html:318.
  • skills.service route fixes: :161-163DELETE {base}/earned/{id}, :171POST {base}/check-auto-awards.

Remaining (1 item): the phantom skillDescription was not dropped. Still declared at projects/spikersoft/src/app/_services/skills/skills.service.ts:30 (skillDescription?: string;), with a comment keeping it optional for legacy spec fixtures that still set it (skills.service.spec.ts:114,186,257,278,283,304).

It's type-only with no runtime effect, so this is a judgement call: either delete the field and the six fixture usages, or close this as won't-fix with a note. Flagging rather than deciding, since it was a named acceptance item.

Audited against `origin/master` — **everything landed except one cosmetic item.** (Standalone PR #589 closed unmerged; work landed via consolidated angular PR #592.) **Done** - Lib `libraries/ui/award-chips/*`; `AwardChip` at `award-chips.component.ts:9-19`. - Shared `awardTierColor` at `:26` — and it was genuinely *lifted*, not copied: `profile.component.ts:31` imports it and `:657` delegates. No duplicate tier hexes left in the codebase. - Strip collapses when empty — `award-chips.component.html:1` (`@if chips().length > 0`) and `family-card.component.html:318`. - skills.service route fixes: `:161-163` → `DELETE {base}/earned/{id}`, `:171` → `POST {base}/check-auto-awards`. **Remaining (1 item):** the phantom `skillDescription` was not dropped. Still declared at `projects/spikersoft/src/app/_services/skills/skills.service.ts:30` (`skillDescription?: string;`), with a comment keeping it optional for legacy spec fixtures that still set it (`skills.service.spec.ts:114,186,257,278,283,304`). It's type-only with no runtime effect, so this is a judgement call: either delete the field and the six fixture usages, or close this as won't-fix with a note. Flagging rather than deciding, since it was a named acceptance item.
Sign in to join this conversation.