import React, { useEffect } from 'react'; import find from 'lodash/find'; import get from 'lodash/get'; import classnames from 'classnames'; import { IconRefresh, IconLoader2, IconBook, IconDownload } from '@tabler/icons'; import { useSelector, useDispatch } from 'react-redux'; import { updateRequestPaneTab } from 'providers/ReduxStore/slices/tabs'; import QueryEditor from 'components/RequestPane/QueryEditor'; import Auth from 'components/RequestPane/Auth'; import GraphQLVariables from 'components/RequestPane/GraphQLVariables'; import RequestHeaders from 'components/RequestPane/RequestHeaders'; import Vars from 'components/RequestPane/Vars'; import Assertions from 'components/RequestPane/Assertions'; import Script from 'components/RequestPane/Script'; import Tests from 'components/RequestPane/Tests'; import { useTheme } from 'providers/Theme'; import { updateRequestGraphqlQuery } from 'providers/ReduxStore/slices/collections'; import { sendRequest, saveRequest } from 'providers/ReduxStore/slices/collections/actions'; import { findEnvironmentInCollection } from 'utils/collections'; import useGraphqlSchema from './useGraphqlSchema'; import StyledWrapper from './StyledWrapper'; import Documentation from 'components/Documentation/index'; const GraphQLRequestPane = ({ item, collection, leftPaneWidth, onSchemaLoad, toggleDocs, handleGqlClickReference }) => { const dispatch = useDispatch(); const tabs = useSelector((state) => state.tabs.tabs); const activeTabUid = useSelector((state) => state.tabs.activeTabUid); const query = item.draft ? get(item, 'draft.request.body.graphql.query') : get(item, 'request.body.graphql.query'); const variables = item.draft ? get(item, 'draft.request.body.graphql.variables') : get(item, 'request.body.graphql.variables'); const url = item.draft ? get(item, 'draft.request.url') : get(item, 'request.url'); const { storedTheme } = useTheme(); const environment = findEnvironmentInCollection(collection, collection.activeEnvironmentUid); const request = item.draft ? item.draft.request : item.request; let { schema, loadSchema, isLoading: isSchemaLoading } = useGraphqlSchema(url, environment, request, collection); const loadGqlSchema = () => { if (!isSchemaLoading) { loadSchema(); } }; useEffect(() => { if (onSchemaLoad) { onSchemaLoad(schema); } }, [schema]); const onQueryChange = (value) => { dispatch( updateRequestGraphqlQuery({ query: value, itemUid: item.uid, collectionUid: collection.uid }) ); }; const onRun = () => dispatch(sendRequest(item, collection.uid)); const onSave = () => dispatch(saveRequest(item.uid, collection.uid)); const selectTab = (tab) => { dispatch( updateRequestPaneTab({ uid: item.uid, requestPaneTab: tab }) ); }; const getTabPanel = (tab) => { switch (tab) { case 'query': { return ( ); } case 'variables': { return ; } case 'headers': { return ; } case 'auth': { return ; } case 'vars': { return ; } case 'assert': { return ; } case 'script': { return