40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
import { createGraphiQLFetcher } from '@graphiql/toolkit';
|
|
import { useExplorerPlugin } from '@graphiql/plugin-explorer';
|
|
import { GraphiQL } from 'graphiql';
|
|
import { createElement, useState } from 'react';
|
|
import { createRoot } from 'react-dom/client';
|
|
|
|
import { getConfig, csrfToken } from '@utils';
|
|
|
|
import 'graphiql/graphiql.css';
|
|
import '@graphiql/plugin-explorer/dist/style.css';
|
|
|
|
const { defaultQuery, defaultVariables } = getConfig();
|
|
const fetcher = createGraphiQLFetcher({
|
|
url: '/api/v2/graphql',
|
|
headers: { 'x-csrf-token': csrfToken() ?? '' }
|
|
});
|
|
|
|
function GraphiQLWithExplorer() {
|
|
const [query, setQuery] = useState(defaultQuery);
|
|
const explorerPlugin = useExplorerPlugin({
|
|
query: query ?? '',
|
|
onEdit: setQuery,
|
|
showAttribution: false
|
|
});
|
|
return createElement(GraphiQL, {
|
|
fetcher: fetcher,
|
|
defaultEditorToolsVisibility: true,
|
|
plugins: [explorerPlugin],
|
|
query: query,
|
|
variables: defaultVariables,
|
|
onEditQuery: setQuery,
|
|
isHeadersEditorEnabled: false
|
|
});
|
|
}
|
|
|
|
const element = document.getElementById('playground');
|
|
if (element) {
|
|
const root = createRoot(element);
|
|
root.render(createElement(GraphiQLWithExplorer));
|
|
}
|