Библиотека queries
Библиотека queriesЗамена текстовых элементов на странице Bricks внедрённым содержимым

Замена текстовых элементов на странице Bricks внедрённым содержимым

Этот запрос заменяет элементы text на странице Bricks данными, внедрёнными через переменные.

Этот запрос требует, чтобы расширение Bricks было включено.

Запрос требует следующих переменных:

  • $customPostId: Идентификатор пользовательской записи Bricks для обновления
  • $descriptions: Массив строк, которыми будут заменены элементы text
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
      }
    }
  }
}