You have two hooks available to fetch content:
Pages.useItem("collection", ~id="itemId")
Items have the following type:
type item = {
slug: string,
filename: string,
title: string,
date: option<string>,
draft: bool,
meta: Js.Dict.t<Js.Json.t>,
body: string,
}
Pages.useCollection("collection")
By default, useCollection returns all items, but it paginates once you provide a page param.
Pages.useCollection("collection", ~page=1)
By default, all collections are sorted alphabetically on the filename by descending order (which is the most common for blogs, where you want the latest content first), but you can change that with the direction param:
Pages.useCollection("collection", ~page=1, ~direction=#asc)
Collections have the following type:
type listItem = {
slug: string,
filename: string,
title: string,
date: option<string>,
draft: bool,
meta: Js.Dict.t<Js.Json.t>,
summary: string,
}
type paginated = {
hasPreviousPage: bool,
hasNextPage: bool,
items: array<listItem>,
}
As the server fetch is asynchronous, the two hooks return AsyncData values:
switch blocks {
| NotAsked
| Loading => "Loading"->React.string
| Done(Error(_)) => "Error"->React.string
| Done(Ok(value)) => /* Do something with `value` */
}
To help you reprensenting those states, Pages provides:
<ActivityIndicator /><ErrorIndicator />