getContentList
La función getContentList
obtiene una lista de contenidos de un proyecto.
Esta función es útil para obtener todos los contenidos o se puede filtrar por un modelo específico.
Por ejemplo, si tienes un modelo llamado post
, puedes usar esta función para obtener todos los contenidos de ese modelo.
Ejemplo:
// Usando el cliente que ya hemos creado previamenteconst postContentList = await client.getClientList({ contentType: 'post' });console.log(postContentList);
Interfaz
La función getContentList
acepta de forma opcional
un objeto de QueryParams
como parámetro y devuelve una promesa que se resuelve con una lista de contenidos.
export interface ApiClient { getContentList: (queryParam?: QueryParams) => Promise<Content[]>; // ... otros métodos}
Parámetros
queryParam
: Un objeto que contiene los parámetros de consulta para filtrar la lista de contenidos. Este parámetro es opcional y si no se proporciona, se devolverá una lista de todos los contenidos del proyecto.
interface QueryParams { id?: Filter; contentType?: Filter; language?: Filter;}
nombre | descripción |
---|---|
id | El campo id del contenido a recuperar. Este filtro es útil cuando se quiere recuperar una lista de contenidos pero se conoce los ids de éstos.Por ejemplo: client.getContentList({ id: { in: ['1', '2', '3']}) |
contentType | El modelo del contenido que queremos recuperar. Por ejemplo: client.getContentList({ contentType: 'post' }); |
language | El idioma del contenido que queremos recuperar. Cuando aplicamos este filtro, solamente devolverá los campos del modelo en el idioma seleccionado y descartará los demás. Por ejemplo: client.getContentList({ language: 'es' }); |
type Filter = | string | { in?: string[]; // A futuro se añadirán más filtros };
nombre | descripción |
---|---|
string | Filtra el contentido donde el parámetro es igual a este valor.Por ejemplo: client.getContentList({ contentType: 'post' }) Recupera una lista de contenidos cuyo modelo es igual a post |
in | Filtra el contenido donde el parámetro contiene alguno de estos valores.Por ejemplo: client.getContentList({ language: { in: ['es', 'en'] } }) Recupera una lista de contenidos filtrando los campos que coincidan con es y/o en |
Salida
La función getContentList
devuelve una lista de contenidos (filtrados o no). Esta lista es un array de objetos que representan los valores del contenido y meta-datos
:
export interface Content { id: string; contentType: { id: string; name: string }; lastUpdate: Date; fields: Field[];}
export interface Field { id: string; name: string; value: any; type: FieldType; isArray: boolean; language: string;}
Como puedes ver, cada contenido tiene un id
, un contentType
(que representa el modelo al que pertenece), una fecha de última actualización lastUpdate
y un array de fields
que representan los campos del contenido.
Consumir los campos tal cual como se definen en esta interfaz es útil si se quiere integrar con un sistema externo, por ejemplo integrarlo con un servidor de GraphQL o si se quiere hacer un mapeo
de los campos a otro tipo de contenido.
Sin embargo, la forma más sencilla y recomendable de consumir los contenidos es a través de la función mapContentToModel
una vez que ya hemos recuperado los datos, devuelve el contenido ya mapeado a su modelo correspondiente.
Ejemplo:
import { createClient, mapContentToModel } from '@content-island/api-client';
// ... código de inicialización del cliente
const contentList = await client.getContentList({ contentType: 'post' });console.log(contentList);/* [ { 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' }, ], }, ]*/
// Tu modelo Post definido en Content Islandinterface 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 postList = contentList.map(content => mapContentToModel<Post>(content));console.log(postList);
/* [ { id: '1', title: 'Hola Mundo', body: 'Este es el cuerpo del post en markdown.', order: 1, language: 'es', } ]*/
Puedes ver que el contenido ya está mapeado a su modelo correspondiente y puedes acceder a los campos directamente sin tener que hacer un mapeo manual. Para más información sobre esta función, puedes consultar la sección de mapContentToModel.