UNPKG

@schnaq/strapi4-utils

Version:

Utility functions for working with Strapi v4

132 lines (95 loc) 3 kB
# Strapi v4 utils ## Description This library provides functions to interact with a Strapi v4 API and some more utilities. ## Installation ```bash npm install @schnaq/strapi4-utils # or yarn add @schnaq/strapi4-utils # or pnpm install @schnaq/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 ```