UNPKG

@dww/graphiql-code-exporter

Version:

Export working code snippets from GraphiQL queries

55 lines (40 loc) 2.97 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _commentsFactory = require('../../utils/commentsFactory'); var _commentsFactory2 = _interopRequireDefault(_commentsFactory); var _capitalizeFirstLetter = require('../../utils/capitalizeFirstLetter'); var _capitalizeFirstLetter2 = _interopRequireDefault(_capitalizeFirstLetter); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var comments = { effectEmptyArray: 'empty array to only fetch on did mount\n', finallyLoading: 'finally makes sures loading is set to false in any case\n' }; exports.default = { language: 'JavaScript', name: 'react-with-hooks', prismLanguage: 'jsx', options: [{ id: 'comments', label: 'show comments', initial: false }, { id: 'reactNative', label: 'react-native', initial: false }], generate: function generate(_ref) { var serverUrl = _ref.serverUrl, headers = _ref.headers, variables = _ref.variables, variableName = _ref.variableName, operationType = _ref.operationType, operationName = _ref.operationName, operation = _ref.operation, options = _ref.options; var getComment = (0, _commentsFactory2.default)(options.comments, comments); var element = options.reactNative ? 'View' : 'div'; var reactImport = 'import React, { useState, useEffect } from "react"'; var reactNativeImport = options.reactNative ? 'import { View } from "react-native"' : ''; var graphqlQuery = 'const ' + variableName + ' = `\n' + operation + '`'; var urlVariable = 'const serverUrl = "' + serverUrl + '"'; var vars = JSON.stringify(variables, null, 2); var heads = JSON.stringify(headers, null, 2); var fetchBody = 'fetch(serverUrl, {\n method: \'POST\',\n headers: ' + heads + ',\n body: JSON.stringify({ query: ' + variableName + ', variables: ' + vars + ' })\n })\n .then(res => res.json())\n .then(({ data, errors }) => {\n if (errors) {\n setErrors(errors)\n }\n \n setData(data)\n })\n .catch(err => setErrors([err]))\n ' + getComment('finallyLoading') + '.finally(() => setLoading(false))\n '; var snippet = '\n' + reactImport + '\n' + reactNativeImport + '\n\n' + graphqlQuery + '\n\n' + urlVariable + '\n\nfunction ' + (0, _capitalizeFirstLetter2.default)(operationName) + '() {\n const [loading, setLoading] = useState(false)\n const [errors, setErrors] = useState([])\n const [data, setData] = useState(null)\n\n useEffect(\n () => {\n setLoading(true)\n \n ' + fetchBody + '\n },\n ' + getComment('effectEmptyArray') + '[]\n )\n\n if (loading) return <' + element + '>Loading</' + element + '>\n if (errors.length > 0) return <' + element + '>{JSON.stringify(errors)}</' + element + '>\n\n return (\n <' + element + '>{JSON.stringify(data, null, 2)}</' + element + '>\n )\n}'; return snippet; } };