Pustaka queries
Pustaka queriesMenyuntikkan data dari CSV ke dalam post Bricks

Menyuntikkan data dari CSV ke dalam post Bricks

Query ini mengurai data CSV dan menyuntikkannya ke dalam elemen text di halaman Bricks.

Query ini memerlukan ekstensi Bricks untuk diaktifkan.

Query ini memerlukan variabel berikut:

  • $customPostId: ID dari custom post Bricks yang akan diperbarui
  • $csvFileURL: URL dari file CSV yang akan diurai
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
      }
    }
  }
}