'Using graphql playground to test Saleor productCreate, what's the correct syntax for adding a product description?

In the code example below, if I exclude the description field the product is created successfully. With the description field in place I get a GraphQL error.

The code:

    productCreate(
    input: {
      category: "Q2F0ZWdvcnk6MQ==", # Category ID
      name: "Delete Me!", # Product name
      productType: "UHJvZHVjdFR5cGU6MQ==", # Product Type ID
      chargeTaxes: true,
      weight: "0.3", # in Kg
      rating: 5,
      description: {text:"some text"}, # nope
    }
  )

The error:

graphql.error.base.GraphQLError: Argument \"input\" has invalid value {category: \"Q2F0ZWdvcnk6MQ==\", name: \"Delete Me!\", productType: \"UHJvZHVjdFR5cGU6MQ==\", chargeTaxes: true, weight: \"0.3\", rating: 5, description: {text: \"some text\"}}.",
              "In field \"description\": Expected type \"JSONString\", found {text: \"some text\"}."


Solution 1:[1]

It is a string, for rich text it is using https://editorjs.io/

You can inspect the network tab in the dashboard to learn how APIs are being used

Solution 2:[2]

JSON string means providing a JSON text converted to a string. This can be achieved by escaping quotation marks within the JSON.

For example, this JSON

{ "text": "some text" }

can be converted to String as below:

"{\"text\":\"sometext\"}"

As you notice that the text encapsulated inside quotation marks, to be a valid String.

You can use https://jsontostring.com/ for the conversion

Your final code should be like this:

mutation {
  productCreate(
    input: {
      category: "Q2F0ZWdvcnk6MQ==" # Category ID
      name: "Delete Me!" # Product name
      productType: "UHJvZHVjdFR5cGU6MQ==" # Product Type ID
      chargeTaxes: true
      weight: "0.3" # in Kg
      rating: 5
      description: "{\"text\":\"sometext\"}" # nope
    }
  ){
    product{
      id
    }
  }
}

Solution 3:[3]

Sorting out the description syntax wasn't straightforward. From my question here:

Saleor on Github

I got this answer:

{
  "id": "UHJvZHVjdDo3Mg==",
  "description": "{\"blocks\":[{\"type\":\"paragraph\",\"data\":{\"text\":\"New description\"}}]}"
}

which I then implemented like this:

    query = gql(
        """
        mutation (
            $slug: String!,
            $product_title: String!,
            $description: JSONString!,
            $weight_grams: WeightScalar!,
            )
            {
            productCreate(
                input:{
                    category: "Q2F0ZWdvcnk6NQ==",
                    name: $product_title,
                    productType: "UHJvZHVjdFR5cGU6MQ==",
                    slug: $slug,
                    description: $description,
                    weight: $weight_grams,
                }
            )
            {
                errors {
                    field
                    message
                }
                product {
                    id
                    name
                    productType {
                        id
                    }
                    slug
                }
            }
        }
        """
    )
    params = {
        "product_title": str(product_title),
        "description": '{"blocks":[{"type":"paragraph","data":{"text":"'
        + str(product_title + " (" + csv_product_id + ")")
        + '"}}]}',
        "slug": str(csv_sku_code),
        "weight_grams": str(weight_grams),
    }
    result = client.execute(query, variable_values=params)

This works well for us.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 ZZB
Solution 2 Mohamed Sharaf
Solution 3 John Chiverton