Queries Library
Queries LibraryReplace the text elements in a Bricks page with injected content

Replace the text elements in a Bricks page with injected content

This query replaces the text elements in a Bricks page with data injected via variables.

This query requires the Bricks extension to be enabled.

The query requires the following variables:

  • $customPostId: The ID of the Bricks custom post to update
  • $descriptions: An array of strings to replace the text elements with
query InitializeGlobalVariables
  @configureWarningsOnExportingDuplicateVariable(enabled: false)
{
  emptyArray: _echo(value: [])
    @export(as: "elementToUpdateIDs")
}
 
query ExportData($customPostId: ID!)
  @depends(on: "InitializeGlobalVariables")
{
  customPost(by:{ id: $customPostId }, status: any) {
    id
    title
    bricksData(filterBy: { include: ["text"] })
      @underEachArrayItem
        @underJSONObjectProperty(by: { key: "id" })
          @export(as: "elementToUpdateIDs")
  }
}
 
query ProcessData($descriptions: [String!]!)
  @depends(on: "ExportData")
{  # Make sure the number of descriptions is the same as the number of elements to update
  numberOfDescriptions: _arrayLength(array: $elementToUpdateIDs)
  descriptions: _arrayPad(array: $descriptions, length: $__numberOfDescriptions, value: "")
    @export(as: "adaptedDescriptions")
}
 
query AdaptData
  @depends(on: "ProcessData")
{
  elementToUpdateIDs: _echo(value: $elementToUpdateIDs)
  elementToUpdateTexts: _echo(value: $adaptedDescriptions)
  elementToUpdateMergeInputElements: _echo(value: $elementToUpdateIDs)
    @underEachArrayItem(
      passIndexOnwardsAs: "index",
      passValueOnwardsAs: "elementToUpdateID"
      affectDirectivesUnderPos: [1, 2]
    )
      @applyField(
        name: "_arrayItem",
        arguments: {
          array: $adaptedDescriptions,
          position: $index
        },
        passOnwardsAs: "elementToUpdateText"
      )
      @applyField(
        name: "_echo",
        arguments: {
          value: {
            id: $elementToUpdateID,
            settings: {
              text: $elementToUpdateText
            }
          }
        }
        setResultInResponse: true
      )
    @export(as: "elementToUpdateMergeInputElements")
}
 
mutation UpdateData($customPostId: ID!)
  @depends(on: "AdaptData")
{
  bricksMergeCustomPostElementDataItem(input: {
    customPostID: $customPostId
    elements: $elementToUpdateMergeInputElements
  }) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
          @passOnwards(as: "message")
          @fail(
            message: $message
            condition: ALWAYS
          )
      }
    }
    customPost {
      __typename
      ...on CustomPost {
        id
        bricksData
      }
    }
  }
}