# Strapi parameters

> After you install the Strapi integration, the parameter types listed on this page are available.

Source: https://docs.uniform.app/docs/integrations/content/strapi/strapi-parameters

After you install the Strapi integration, the following
parameter types are available. You can use these to incorporate
content from Strapi into your components and compositions.

| Parameter type | Description |
| --- | --- |
| [Strapi content](#strapi-content) | Select one or more entry from Strapi. |

## Strapi content

This parameter type allows a Uniform user to select one or more
Strapi entry.

### Add parameter to component

To allow a user to select an entry from Strapi,
you must add a parameter to a component. The parameter is used
to store the identifier to the selected entry when the user
selects it.

1. In Uniform, navigate to your component.
2. Add a new parameter using the parameter type **Strapi Content**.
3. The following values can be specified:

   | Name | Description |
   | --- | --- |
   | Allowed Content Types | Specifies which content types will be available to<br>select from when the parameter value is edited. You<br>can select multiple content types to allow<br>the user to select from a larger set of entries. |
   | Allow multi-select | Indicates whether the user can select only one<br>entry (the default), or more than one entry. |
   | Display field (optional) | Each entry available to be selected when the parameter<br>value is edited is displayed using the value of this<br>field. If no value is specified, the field "title" is<br>used. |
   | Required | Indicates whether the value is required when the component is used. |

   ![Strapi Content parameter with a single content type selected.](https://docs.uniform.app/images/integrations/content/strapi/use-parameters/strapi-content/parameter-config.png)

### Edit parameter value

When you use a component with a Strapi Content parameter,
by default no entry will be selected. You are prompted to
select an entry.

1. Click **Select**.

   ![](https://docs.uniform.app/images/integrations/content/strapi/use-parameters/strapi-content/edit-value-default.png)
2. Click the document you want to select.

   ![](https://docs.uniform.app/images/integrations/content/strapi/use-parameters/strapi-content/edit-value-filters.png)

   > **About this step:**
   >
   > A couple of filters are available. The dropdown allows you to filter by content type. The text box allows you to filter by entry content.
3. Click **Accept** to save your selection.

   ![](https://docs.uniform.app/images/integrations/content/strapi/use-parameters/strapi-content/edit-value-selected.png)
4. You will see details about the document you selected, including the title and some metadata.

   ![](https://docs.uniform.app/images/integrations/content/strapi/use-parameters/strapi-content/edit-value-saved.png)

   > **About this step:**
   >
   > After your selection is saved, you are presented with the following options:
   >
   > - If you want to edit the selected entry in Strapi, click **Edit**.
   > - If you want to deselect the entry, click **Unlink**.

### Configure an enhancer

When an entry is selected, Uniform only stores the identifier
for the entry. Your front-end application must retrieve the
details for the entry. Uniform provides an enhancer to
simplify this process.

> **Tip:**
>
> Using the enhancer provided by Uniform saves you from having
> to write logic to interact directly with Strapi.

#### How Uniform stores the selected document

The following is an example of what Uniform stores
for the parameter. It stores the identifiers for
the selected entries.

```json
{
  "type": "strapi-content",
  "value": {
    "entries": [
      {
        "id": "######################",
      }
    ],
  }
}
```

#### Add the enhancer

Uniform provides an enhancer so you don't need to write the API
calls to Strapi to retrieve data for documents.

1. In Strapi, get the following values:

   - API token
   - Host

   > **About this step:**
   >
   > These are the same values used to configure the Strapi integration in Canvas.
2. Add the following npm packages to your front-end application:

   ```
   @uniformdev/canvas-strapi
   strapi-sdk-js
   ```
3. In a text editor, open the file where you retrieve the
   composition definition from Uniform.

   > **About this step:**
   >
   > You are looking for the code calls the async function
   > `getComposition`. The code below assumes the
   > object returned is set in a variable `composition`.
4. Add the following import statements:

   ```javascript
   import { EnhancerBuilder, enhance } from '@uniformdev/canvas';
   import { 
       createEnhancer,
       StrapiClient,
       STRAPI_PARAMETER_TYPES,
   } from '@uniformdev/canvas-strapi';
   ```
5. Add the following code:

   ```javascript
   const client = new StrapiClient({
    apiHost: '!!! YOUR STRAPI API HOST !!!',
    apiToken: '!!! YOUR STRAPI API TOKEN !!!',
   populate: '*', 
   });
   ```

   > **About this step:**
   >
   > We recommend you moving the Strapi credentials to
   > environment variables rather than hard-coding them in the
   > front-end app.
6. Add the following code:

   ```javascript
   const strapiEnhancer = createEnhancer({ clients: client });
   ```
7. Add the following code:

   ```javascript
   await enhance({
       composition,
       enhancers: new EnhancerBuilder().parameterType(
       STRAPI_PARAMETER_TYPES, 
       strapiEnhancer,
       ),
       context: {},
   });
   ```

   > **About this step:**
   >
   > This registers the enhancer to be used for any occurrence
   > of the Strapi Content parameter.

> **Next steps:**
>
> Now, the parameter value in the composition is mutated to
> include the field values for the selected Strapi entry
> (instead of just being identifiers).
