@schnaq/strapi4-utils
Version:
Utility functions for working with Strapi v4
132 lines (95 loc) • 3 kB
Markdown
# Strapi v4 utils
## Description
This library provides functions to interact with a Strapi v4 API and some more utilities.
## Installation
```bash
npm install /strapi4-utils
# or
yarn add /strapi4-utils
# or
pnpm install /strapi4-utils
# ...
```
## Configuration
> [!NOTE]
> You need to configure environment variables if you want to interact with the Strapi API.
- `STRAPI_API_URL`: The URL of the Strapi API. Also looks up the public variable `NEXT_PUBLIC_STRAPI_API_URL` if you are using nextjs and are using a client component.
- `STRAPI_API_TOKEN`: The API token to authenticate with the Strapi API. Also looks up the public variable `NEXT_PUBLIC_STRAPI_API_TOKEN` if you are using nextjs and are using a client component.
## Functions
### `queryAPI<T>`
Query a Strapi API and flatten the response. It's always JSON what we are receiving from the API, and we are getting rid of the `attributes` property.
This function is formatted as a vector to be supported with hooks, like `useSWR`.
Example:
```ts
// import { Event } from "my/awesome/types"
/**
* Fetch an event from the API. The data is flattened and of type Event.
*/
export async function getEvent(eventId: Event["id"]) {
const response: Event = await queryAPI<Event>([`/events/${eventId}`])
return response?.data
}
```
Example: Usage in a react context
```ts
async function getMyBoxes() {
const { data: session, status } = useSession()
const [boxes, setBoxes] = useState<Box[]>()
useSWR(
status === "authenticated"
? [`/boxes`, undefined, "GET", session?.accessToken]
: null,
queryAPI<Box[]>,
{
onSuccess: (boxes) => {
setBoxes(boxes?.data)
},
}
)
// ...
}
```
### `queryAPIUser`
Query the strapi user and return it. Usally, we add a `/users/me`-endpoint to the Strapi API which returns the own user.
Example:
```ts
export function UserProvider({ children }: { children: React.ReactNode }) {
const { data: session, status } = useSession()
const [user, setUser] = useState<User>()
useSWR(
status === "authenticated" ? [`/users/me`, session?.accessToken] : null,
queryAPIUser,
{
onSuccess: (user) => {
setUser(user)
},
}
)
// ...
}
```
### `getImageUrlForSize`
Provide a valid image from a Strapi response. This functions provides the nearest image size to the requested one.
Example:
```ts
getImageUrlForSize(annoyotronImage, "thumbnail")
// => returns the thumbnail URL of the image
getImageUrlForSize(annoyotronImage, "large")
// => returns the large URL of the image, if available. If not, it returns the next best size, i.e. medium, and so on.
```
## Models
There are plenty of common models, e.g. API Responses, Image attributes etc.
Check out the [src/models.ts](src/models.ts).
## Release
To release a new version, run the following command:
```bash
pnpm release
```
## Developed by
```
schnaq GmbH
c/o TechHub.K67
Kasernenstr. 67
40213 Düsseldorf
Germany
```