56 lines
2.3 KiB
TypeScript
56 lines
2.3 KiB
TypeScript
// Construcción de URLs de ImageKit para los assets de "Entre Líneas".
|
||
//
|
||
// El campo `image` que devuelve Typesense ya viene con la subruta completa
|
||
// dentro del bucket, incluyendo extensión (ej.
|
||
// "5171cd64-4b42-4e6d-a081-3703efbe7d43.jpeg"). Aquí sólo lo combinamos con
|
||
// la base pública de ImageKit y le añadimos el preset de transformación
|
||
// según el contexto (lista, detalle, fullscreen).
|
||
//
|
||
// Mismo patrón que `getAssetUrl` del cliente Directus: una sola fuente de
|
||
// verdad para la URL, todos los componentes leen de aquí.
|
||
|
||
/** Base pública de ImageKit donde están alojadas las imágenes de Entre Líneas.
|
||
* Si cambia la cuenta o el folder, sólo hay que tocar esta constante. */
|
||
const IMAGEKIT_BASE = 'https://images.carpa.com/entrelineas'
|
||
|
||
/**
|
||
* Transforms de ImageKit por contexto. Los anchos cuentan con high-DPI:
|
||
* un container de 320 px CSS necesita ~640 px reales en pantallas 2x,
|
||
* por eso `detail` pide 1800 px. Quality 80–90 es el sweet spot:
|
||
* notablemente más nítido que 60 con poco aumento de peso.
|
||
*/
|
||
const IMAGE_PRESETS = {
|
||
thumb: 'tr=w-600,q-80', // miniaturas en lista de resultados
|
||
detail: 'tr=w-1800,q-90', // imagen principal del panel de detalle
|
||
full: 'tr=q-95' // sin resize, máxima calidad (zoom / lightbox)
|
||
} as const
|
||
|
||
export type EntrelineaImagePreset = keyof typeof IMAGE_PRESETS
|
||
|
||
/**
|
||
* Construye la URL de ImageKit para una imagen de entrelínea.
|
||
*
|
||
* - `image` es el valor del campo `image` de Typesense, ya con extensión
|
||
* incluida (ej. "5171cd64-4b42-4e6d-a081-3703efbe7d43.jpeg"). Se concatena
|
||
* tal cual a la base.
|
||
* - `preset` es el preset de transformación a aplicar (default: `detail`).
|
||
*
|
||
* Devuelve `null` si no hay imagen para no romper la UI; los componentes
|
||
* deben mostrar placeholder en ese caso.
|
||
*
|
||
* Ejemplo:
|
||
* getEntrelineaImageUrl('5171cd64-...jpeg')
|
||
* → 'https://images.carpa.com/entrelineas/5171cd64-...jpeg?tr=w-1800,q-90'
|
||
*/
|
||
export function getEntrelineaImageUrl(
|
||
image: string | null | undefined,
|
||
preset: EntrelineaImagePreset = 'detail'
|
||
): string | null {
|
||
if (!image) return null
|
||
// Defensivo: por si algún día llega con barra al inicio o el base con
|
||
// barra al final, evitamos doble slash en la URL final.
|
||
const base = IMAGEKIT_BASE.replace(/\/+$/, '')
|
||
const path = String(image).replace(/^\/+/, '')
|
||
return `${base}/${path}?${IMAGE_PRESETS[preset]}`
|
||
}
|