import { createEffect, createMemo, createSignal, For } from "solid-js" import { comparisonHref, modelRefFromCatalog } from "./compare-cards" import type { ModelCatalogEntry } from "./model-catalog" export function ComparisonSelector(props: { models: ModelCatalogEntry[] firstId?: string secondId?: string label?: string }) { const [firstId, setFirstId] = createSignal(props.firstId ?? props.models[0]?.id ?? "") const [secondId, setSecondId] = createSignal(differentModelId(props.models, firstId(), props.secondId)) const modelById = createMemo(() => new Map(props.models.map((model) => [model.id, model]))) const href = createMemo(() => { const first = modelById().get(firstId()) const second = modelById().get(secondId()) if (!first || !second || first.id === second.id) return undefined return comparisonHref(modelRefFromCatalog(first), modelRefFromCatalog(second)) }) createEffect(() => { if (firstId() && modelById().has(firstId())) return const next = props.firstId && modelById().has(props.firstId) ? props.firstId : props.models[0]?.id if (next) setFirstId(next) }) createEffect(() => { if (secondId() && secondId() !== firstId() && modelById().has(secondId())) return setSecondId(differentModelId(props.models, firstId(), props.secondId)) }) return (
) } function differentModelId(models: ModelCatalogEntry[], firstId: string, preferredId: string | undefined) { if (preferredId && preferredId !== firstId && models.some((model) => model.id === preferredId)) return preferredId return models.find((model) => model.id !== firstId)?.id ?? "" }