Bibliothèque de queries
Bibliothèque de queriesInjecter des données CSV dans un article Bricks

Injecter des données CSV dans un article Bricks

Cette requête analyse des données CSV et les injecte dans les éléments text d'une page Bricks.

Cette requête nécessite que l'extension Bricks soit activée.

La requête nécessite les variables suivantes :

  • $customPostId: L'ID de l'article personnalisé Bricks à mettre à jour
  • $csvFileURL: L'URL du fichier CSV à analyser
query InitializeGlobalVariables
  @configureWarningsOnExportingDuplicateVariable(enabled: false)
{
  emptyArray: _echo(value: [])
    @export(as: "elementToUpdateIDs")
  
  emptyNumber: _echo(value: 0)
    @export(as: "numberCsvEntries")
}
 
query GetCSVData(
  $url: URL!
  $headingElementColumn: String! = "Title"
  $textElementColumn: String! = "Description"
)
  @depends(on: "InitializeGlobalVariables")
{
  _sendHTTPRequest(input: {
    url: $url,
    method: GET
  }) {
    body
    csv: _strParseCSV(
      string: $__body
    )
      @underEachArrayItem(
        passValueOnwardsAs: "csvPostEntry"
        affectDirectivesUnderPos: [1, 3]
      )
        @underJSONObjectProperty(by: { key: $headingElementColumn })
          @export(as: "csvHeadings")
        @underJSONObjectProperty(by: { key: $textElementColumn })
          @export(as: "csvTexts")
    numberCsvEntries: _arrayLength(array: $__csv)
      @export(as: "numberCsvEntries")
  }
}
 
query ExportData($customPostId: ID!)
  @depends(on: "GetCSVData")
{
  customPost(by:{ id: $customPostId }, status: any) {
    id
    title
    bricksDataTextElements: bricksData(filterBy: { include: ["text"] })
      @arraySplice(offset: $numberCsvEntries)
      @underEachArrayItem(
        passIndexOnwardsAs: "index",
        passValueOnwardsAs: "elementJSON"
        affectDirectivesUnderPos: [1, 2, 3]
      )
        @applyField(
          name: "_objectProperty",
          arguments: {
            object: $elementJSON,
            by: { key: "id" }
          },
          passOnwardsAs: "elementID"
        )
        @applyField(
          name: "_arrayItem",
          arguments: {
            array: $csvTexts,
            position: $index
          },
          passOnwardsAs: "csvText"
        )
        @applyField(
          name: "_echo",
          arguments: {
            value: {
              id: $elementID,
              settings: {
                text: $csvText
              }
            }
          }
          setResultInResponse: true
        )
      @export(as: "textMergeInputElements")
    bricksDataHeadingElements: bricksData(filterBy: { include: ["heading"] })
      @arraySplice(offset: $numberCsvEntries)
      @underEachArrayItem(
        passIndexOnwardsAs: "index",
        passValueOnwardsAs: "elementJSON"
        affectDirectivesUnderPos: [1, 2, 3]
      )
        @applyField(
          name: "_objectProperty",
          arguments: {
            object: $elementJSON,
            by: { key: "id" }
          },
          passOnwardsAs: "elementID"
        )
        @applyField(
          name: "_arrayItem",
          arguments: {
            array: $csvHeadings,
            position: $index
          },
          passOnwardsAs: "csvHeading"
        )
        @applyField(
          name: "_echo",
          arguments: {
            value: {
              id: $elementID,
              settings: {
                text: $csvHeading
              }
            }
          }
          setResultInResponse: true
        )
      @export(as: "headingMergeInputElements")
  }
}
 
query AdaptData
  @depends(on: "ExportData")
{
  allMergeInputElements: _arrayMerge(
    arrays: [$textMergeInputElements, $headingMergeInputElements]
  )
    @export(as: "allMergeInputElements")
}
 
mutation UpdateData($customPostId: ID!)
  @depends(on: "AdaptData")
{
  bricksMergeCustomPostElementDataItem(input: {
    customPostID: $customPostId
    elements: $allMergeInputElements
  }) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
          @passOnwards(as: "message")
          @fail(
            message: $message
            condition: ALWAYS
          )
      }
    }
    customPost {
      __typename
      ...on CustomPost {
        id
        bricksData
      }
    }
  }
}