mirror of
https://github.com/usebruno/bruno.git
synced 2025-04-02 03:26:06 +02:00
56 lines
1.5 KiB
JavaScript
56 lines
1.5 KiB
JavaScript
import { useState } from 'react';
|
|
import toast from 'react-hot-toast';
|
|
import { buildClientSchema } from 'graphql';
|
|
import { fetchGqlSchema } from 'utils/network';
|
|
import { simpleHash } from 'utils/common';
|
|
|
|
const schemaHashPrefix = 'bruno.graphqlSchema';
|
|
|
|
const useGraphqlSchema = (endpoint, environment) => {
|
|
const localStorageKey = `${schemaHashPrefix}.${simpleHash(endpoint)}`;
|
|
const [error, setError] = useState(null);
|
|
const [isLoading, setIsLoading] = useState(false);
|
|
const [schema, setSchema] = useState(() => {
|
|
try {
|
|
const saved = localStorage.getItem(localStorageKey);
|
|
if(!saved) {
|
|
return null;
|
|
}
|
|
return buildClientSchema(JSON.parse(saved));
|
|
} catch {
|
|
localStorage.setItem(localStorageKey, null);
|
|
return null;
|
|
}
|
|
});
|
|
|
|
const loadSchema = () => {
|
|
setIsLoading(true);
|
|
fetchGqlSchema(endpoint, environment)
|
|
.then((res) => res.data)
|
|
.then((s) => {
|
|
if (s && s.data) {
|
|
setSchema(buildClientSchema(s.data));
|
|
setIsLoading(false);
|
|
localStorage.setItem(localStorageKey, JSON.stringify(s.data));
|
|
toast.success('Graphql Schema loaded successfully');
|
|
} else {
|
|
return Promise.reject(new Error('An error occurred while introspecting schema'));
|
|
}
|
|
})
|
|
.catch((err) => {
|
|
setIsLoading(false);
|
|
setError(err);
|
|
toast.error('Error occured while loading Graphql Schema');
|
|
});
|
|
};
|
|
|
|
return {
|
|
isLoading,
|
|
schema,
|
|
loadSchema,
|
|
error
|
|
};
|
|
};
|
|
|
|
export default useGraphqlSchema;
|