Skip to content

mapContentToModel

The mapContentToModel function converts content to its corresponding model defined in Content Island.

This function is useful for accessing data in a simpler and more direct way, without having to deal with the internal content structure.

Example:

import { createClient, mapContentToModel } from '@content-island/api-client';
// ... client initialization code
// Your Post model defined in Content Island
interface Post {
id: string;
title: string;
body: string;
order: number;
language: 'es' | 'en';
}
const content = await client.getRawContent<Post>({ id: '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' },
],
}
*/
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',
}
*/

Interface

function mapContentToModel<M extends Model<Language> = Model<any> & Record<string, any>, Language = M['language']>(
content: Content,
language?: Language
): M;

Parameters

This function accepts the following parameters:

  • content: The content to map to its corresponding model.
interface Content {
id: string;
contentType: { id: string; name: string };
lastUpdate: string;
fields: Field[];
}
  • language: Filters and maps only the fields that match this language. If not provided, the first available language is used.

Output

The mapContentToModel function returns the content mapped to its corresponding model. This object has the same structure as the model defined in Content Island, which makes it easier to use in your application.

Example filtering by language

import { createClient, mapContentToModel } from '@content-island/api-client';
// ... client initialization code
// Your Post model defined in Content Island
interface Post {
id: string;
title: string;
body: string;
order: number;
language: 'es' | 'en';
}
const content = await client.getRawContent<Post>({ id: '1', contentType: 'post' }); // Fetches post with id=1 in multiple languages (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' },
],
}
*/
const post = mapContentToModel<Post>(content); // Returns fields in the first detected language (es)
console.log(post);
const spanishPost = mapContentToModel<Post>(content, 'es'); // Returns fields in Spanish
console.log(spanishPost);
const englishPost = mapContentToModel<Post>(content, 'en'); // Returns fields in English
console.log(englishPost);