domando la lista de publicaciones

8 de septiembre de 2026 meta admini18nsvelte

El trabajo de idiomas de ayer tuvo un efecto secundario que solo noté cuando abrí el panel de administración hoy: la lista de publicaciones se había triplicado. Cada publicación ahora es una fila real por idioma por debajo, que es el modelo de datos correcto, pero la lista de administración las mostraba todas. 34 publicaciones, 102 filas, y la que quería editar enterrada entre sus propias gemelas noruega y española. Parecía un desastre porque lo era.

La solución tiene dos mitades. La lista ahora filtra a un idioma por defecto (inglés), así que cada publicación aparece una sola vez, y cada fila lleva una pequeña tira de chips mostrando qué versiones existen y su estado. Chip verde, publicado. Chip gris, todavía borrador. Haz clic en un chip y aterrizas en el editor de esa versión. Un selector de filtro me permite cambiar toda la lista a noruego, español, o la vieja vista de todo cuando de verdad la quiero.

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

La segunda mitad está dentro del editor. La pequeña insignia de idioma en la esquina se convirtió en un desplegable. Elige un idioma que ya existe y saltas directo a esa versión. Elige uno que todavía no existe y crea el borrador prellenado en el acto y te lleva ahí. La lógica de decisión es lo bastante pequeña como para probarla como una función pura:

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' };
}

Hay una condición de carrera escondida en ese camino de creación: si la versión de alguna forma se creó entre cargar la página y elegir el idioma, la solicitud de creación responde 409. El primer instinto es mostrar un error, pero desde el editor el clic significaba "llévame a la versión en español", así que ante un 409 la acción del servidor simplemente busca qué fila ganó y navega ahí en su lugar. El usuario pidió cambiar, así que cambia.

Los chips también necesitaron una pequeña adición en el backend. El endpoint de la lista no tenía idea de las hermanas, y preguntar por fila habría significado una consulta por publicación en cada carga de página. En su lugar, una consulta agrupada obtiene cada hermana de todos los grupos de traducción de la página de una vez, y el handler las pliega en cada fila. Una consulta extra en total, no treinta.

La revisión detectó un bug real antes de la fusión: un idioma no reconocido en la URL (digamos un marcador antiguo con ?language=de) volvía correctamente al inglés para los datos, pero al desplegable de filtro se le decía el valor bruto y se desincronizaba silenciosamente de lo que la lista realmente mostraba. Una línea, pero exactamente el tipo de mentira que una interfaz no debería contar.

Sobra honesto: el editor todavía tiene el viejo panel de traducciones más abajo, ahora redundante junto al desplegable. Funciona, simplemente está duplicado, y puede desaparecer en una limpieza posterior. La lista, sin embargo, ha vuelto a 34 filas, y la semana caótica en la que cada publicación existía por triplicado se acabó.

0 comentarios

Inicia sesión para comentar.

Iniciar sesión

¿No tienes cuenta?