ABANDONED (2026-06-24). The "Did You Know?" feature is no longer planned — see Change 4 in the Backend API Mapping Report: "No endpoint will be built; remove from all planning." The rest of this page still presents the data source as active/provisional (a stale carry-over from before Change 4 was dropped) — kept here for historical reference to ListViewModel's scaffold/factory pattern (D11), not as an active spec. Do not implement DidYouKnowListFactory/DidYouKnowListService below.
Component: List — listy card generic (a generic list item)
Type: Domain control — Did You Know List: composes the generic ListViewModel scaffold via DidYouKnowListFactory (maps a list item onto the scaffold; it does not subclass it — see Decisions D11)
Work Item: AB#2126
Last Updated: 2026-06-05 (corrected — not a flight card)
Correction (2026-06-05): an earlier draft modelled
listy card genericas a multi-leg flight card (DL 302 / status badge / 6px stroke). That was wrong. On the live design (node5172:15482) the List item is a simple date · headline · subtitle row, used 6× on the "Did you know" screen. The rich multi-leg flight card (DEN→MIA, DL 302, layovers) is the separate Flight Finder result card (node4713:25168) — a different component, not yet built.
A compact list item — a timestamp date, a headline, and a subtitle date (favorite heart shown per D31). Figma: listy card generic (345×105px).
May 26, 2026 ◄── TimestampDate (date label)
Lorem ipsum dolor ◄── HeadlineText
Fri April 24 ◄── SubtitleDate
| Property | Status | Source | Notes |
|---|---|---|---|
| TimestampDate | ⚠️ TBD | "Did you know" item | Top date label |
| HeadlineText | ⚠️ TBD | "Did you know" item | Primary line |
| SubtitleDate | ⚠️ TBD | "Did you know" item | Secondary date / line |
| IsFavorite | ✅ Client | Settings.FavoriteItemIdsJSON | Heart rendered on the row (D31, 2026-06-26) |
| IsLoading | ✅ Available | ViewModel state | Default strategy (no skeleton) |
Data source is provisional. The concrete "Did you know" item type (a notification / update / tip) is confirmed during the Notifications screen deep-dive. Until then, treat the three text fields above as the contract.
The generic ListViewModel scaffold stays domain-free; a pure factory maps a "Did you know" item onto it; a domain service fetches the items (DI-injected), then calls the factory (decision D11).
// Scaffold — generic list item, domain-free
public class ListViewModel : ContainerSurfaceViewModel
{
public string? TimestampDate { get; set; }
public string? HeadlineText { get; set; }
public string? SubtitleDate { get; set; }
public bool IsFavorite { get; set; }
}
// Domain control — PURE MAPPER: item in, scaffold VM out
public sealed class DidYouKnowListFactory : RawRepresentationFactory<ListViewModel>
{
public ListViewModel Create(DidYouKnowItem item, bool isFavorite) => new()
{
TimestampDate = item.Date,
HeadlineText = item.Headline,
SubtitleDate = item.SubtitleDate,
IsFavorite = isFavorite,
};
}
// Domain service — fetches the items (DI), then maps
public sealed class DidYouKnowListService(DataManager dataManager, DidYouKnowListFactory factory)
{
public async Task<IReadOnlyList<ListViewModel>> BuildAsync()
{
var items = await dataManager.GetDidYouKnowItemsAsync(); // source TBD — Notifications deep-dive
return items
.Select(i => factory.Create(i, isFavorite: IsSaved(i))) // Settings.FavoriteItemIdsJSON
.ToList();
}
}
docs/component-specifications/list/list-component.htmldomain-controls.html#did-you-know-list4713:25168Document Owner: ALPA Mobile Team
Purpose: Data-source analysis for the List (Did You Know) domain control — data source provisional pending the Notifications deep-dive.