å temme innleggslisten

8. september 2026 meta admini18nsvelte

Gårsdagens språkarbeid hadde en bivirkning jeg først la merke til da jeg åpnet adminpanelet i dag: innleggslisten hadde tredoblet seg. Hvert innlegg er nå en ekte rad per språk under overflaten, som er den riktige datamodellen, men adminlisten viste alle sammen. 34 innlegg, 102 rader, og det ene jeg ville redigere begravet mellom sine egne norske og spanske tvillinger. Det så ut som et rot fordi det var et.

Løsningen har to halvdeler. Listen filtrerer nå til ett språk som standard (engelsk), så hvert innlegg vises én gang, og hver rad bærer en liten brikkestripe som viser hvilke versjoner som finnes og statusen deres. Grønn brikke, publisert. Grå brikke, fortsatt et utkast. Klikk en brikke og du havner i den versjonens editor. Et filtervalg lar meg bytte hele listen til norsk, spansk, eller den gamle alt-visningen når jeg faktisk vil ha den.

The admin post list after the fix, one row per post with language chips

Den andre halvparten er inne i editoren. Den lille språkmerkelappen i hjørnet ble en nedtrekksmeny. Velg et språk som allerede finnes og du hopper rett til den versjonen. Velg ett som ikke finnes ennå og den lager det forhåndsutfylte utkastet på stedet og tar deg dit. Beslutningslogikken er liten nok til å testes som en ren funksjon:

export function resolveLanguageSwitch(
    current: Language,
    siblings: LanguageSwitchSibling[],
    selected: Language
): LanguageSwitchResult {
    if (selected === current) return { type: 'noop' };
    const sibling = siblings.find((s) => s.language === selected);
    return sibling ? { type: 'navigate', id: sibling.id } : { type: 'create' };
}

Det gjemmer seg ett race i den opprettelsesveien: hvis versjonen på en eller annen måte ble opprettet mellom sidelasting og språkvalg, svarer opprettelsesforespørselen 409. Den første instinktive reaksjonen er å vise en feil, men fra editoren betydde klikket "ta meg til den spanske versjonen", så ved en 409 slår server-handlingen bare opp hvilken rad som vant og navigerer dit i stedet. Brukeren ba om å bytte, så bytt.

Brikkene trengte også en liten backend-tilføyelse. Listeendepunktet visste ingenting om søsken, og å spørre per rad ville betydd én spørring per innlegg på hver sidelasting. I stedet henter én batchet spørring hvert søsken på tvers av hele sidens oversettelsesgrupper på én gang, og handleren folder dem inn i hver rad. Én ekstra spørring totalt, ikke tretti.

Gjennomgangen fanget opp én ekte bug før merge: et ukjent språk i URL-en (si et gammelt bokmerke med ?language=de) falt riktig tilbake til engelsk for dataene, men filternedtrekksmenyen ble fortalt råverdien og desynkroniserte stille fra det listen faktisk viste. Én linje, men akkurat den typen løgn et brukergrensesnitt ikke bør fortelle.

Ærlig rest: editoren har fortsatt det gamle oversettelsespanelet lenger nede, nå overflødig ved siden av nedtrekksmenyen. Det fungerer, det er bare duplisert, og det kan forsvinne i en senere opprydding. Listen er derimot tilbake på 34 rader, og den rotete uken der hvert innlegg fantes i tre eksemplarer er over.

0 kommentarer

Logg inn for å kommentere.

Logg inn

Ingen konto?