Saltearse al contenido

mapContentToModel

La función mapContentToModel convierte el contenido a su modelo correspondiente definido en Content Island.

Esta función es útil para acceder a los datos de manera más sencilla y directa, sin tener que lidiar con la estructura interna del contenido.

Ejemplo:

import { createClient, mapContentToModel } from '@content-island/api-client';
// ... código de inicialización del cliente
const content = await client.getContent('1');
console.log(content);
/*
{
id: '1',
contentType: { id: '100', name: 'post' },
lastUpdate: '2023-10-01T12:00:00Z',
fields: [
{ id: 'title', name: 'Título', value: 'Hola Mundo', type: 'short-text', isArray: false, language: 'es' },
{ id: 'body', name: 'Cuerpo', value: 'Este es el cuerpo del post en markdown.', type: 'long-text', isArray: false, language: 'es' },
{ id: 'order', name: 'Orden', value: 1, type: 'number', isArray: false, language: 'es' },
],
}
*/
// Tu modelo Post definido en Content Island
interface Post {
id: string; // Id del contenido
title: string; // Campo definido en el modelo
body: string; // Campo definido en el modelo
order: number; // Campo definido en el modelo
language: 'es' | 'en'; // o cualquier otro idioma que tengas definido en tu proyecto
}
const post = mapContentToModel<Post>(content);
console.log(post);
/*
{
id: '1',
title: 'Hola Mundo',
body: 'Este es el cuerpo del post en markdown.',
order: 1,
language: 'es',
}
*/

Interfaz

function mapContentToModel<Model extends BaseModel<Language>, Language = Model["language"]>(content: Content, language?: Language) => Model;

Parámetros

Esta función acepta los siguientes parámetros:

  • content: El contenido que deseas mapear a su modelo correspondiente.
interface Content {
id: string;
contentType: { id: string; name: string };
lastUpdate: string;
fields: Field[];
}
  • language: Recupera solamente los campos que coincidan con este idioma. Si no se proporciona, se utilizará el primer idioma que se encuentre.

Salida

La función mapContentToModel devuelve el contenido mapeado a su modelo correspondiente. Este objeto tiene la misma estructura que el modelo definido en Content Island, lo que facilita su uso en tu aplicación.

Ejemplo filtrando por idioma

import { createClient, mapContentToModel } from '@content-island/api-client';
// ... código de inicialización del cliente
const content = client.getContent('1', { contentType: 'post' }); // Recupera el post con id=1 en varios idiomas (es, en)
console.log(content);
/*
{
id: '1',
contentType: { id: '100', name: 'post' },
lastUpdate: '2023-10-01T12:00:00Z',
fields: [
{ id: '111', name: 'title', value: 'Hola Mundo', type: 'short-text', isArray: false, language: 'es' },
{ id: '222', name: 'body', value: 'Este es el cuerpo del post en markdown.', type: 'long-text', isArray: false, language: 'es' },
{ id: '333', name: 'order', value: 1, type: 'number', isArray: false, language: 'es' },
{ id: '444', name: 'title', value: 'Hello World', type: 'short-text', isArray: false, language: 'en' },
{ id: '555', name: 'body', value: 'This is the body of the post in markdown.', type: 'long-text', isArray: false, language: 'en' },
{ id: '666', name: 'order', value: 1, type: 'number', isArray: false, language: 'en' },
],
}
*/
// Tu modelo Post definido en Content Island
interface Post {
id: string; // Id del contenido
title: string; // Campo definido en el modelo
body: string; // Campo definido en el modelo
order: number; // Campo definido en el modelo
language: 'es' | 'en'; // o cualquier otro idioma que tengas definido en tu proyecto
}
const post = mapContentToModel<Post>(content); // Transforma el contenido a su modelo correspondiente. Devuelve los campos en español porque es el primer idioma que encuentra.
console.log(post);
/*
{
id: '1',
title: 'Hola Mundo',
body: 'Este es el cuerpo del post en markdown.',
order: 1,
language: 'es',
}
*/
const spanishPost = mapContentToModel<Post>(content, 'es'); // Transforma el contenido a su modelo correspondiente. Devuelve los campos en español porque es el idioma que hemos seleccionado.
console.log(spanishPost);
/*
{
id: '1',
title: 'Hola Mundo',
body: 'Este es el cuerpo del post en markdown.',
order: 1,
language: 'es',
}
*/
const englishPost = mapContentToModel<Post>(content, 'en'); // Transforma el contenido a su modelo correspondiente. Devuelve los campos en inglés porque es el idioma que hemos seleccionado.
console.log(englishPost);
/*
{
id: '1',
title: 'Hello World',
body: 'This is the body of the post in markdown.',
order: 1,
language: 'en',
}
*/