Skip to content

Commit 00c8605

Browse files
authored
feat(@graphiql/react): migrate React context to zustand, replace useStorageContext with useStorage hook (#3942)
* upd * upd * upd * upd * upd * upd * upd * upd * upd * upd * upd * changeset * upd
1 parent 7cc06c0 commit 00c8605

15 files changed

Lines changed: 113 additions & 80 deletions

File tree

.changeset/tame-swans-act.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
'@graphiql/plugin-history': patch
3+
'@graphiql/react': minor
4+
'graphiql': patch
5+
---
6+
7+
feat(@graphiql/react): migrate React context to zustand, replace `useStorageContext` with `useStorage` hook
8+

examples/graphiql-webpack/src/index.jsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import 'graphiql/style.css';
99
import '@graphiql/plugin-explorer/style.css';
1010
import '@graphiql/plugin-code-exporter/style.css';
1111
import { createGraphiQLFetcher } from '@graphiql/toolkit';
12-
import { useStorageContext } from '@graphiql/react';
12+
import { useStorage } from '@graphiql/react';
1313

1414
export const STARTING_URL =
1515
'https://swapi-graphql.netlify.app/.netlify/functions/index';
@@ -60,9 +60,9 @@ const style = { height: '100vh' };
6060
const explorer = explorerPlugin();
6161

6262
const App = () => {
63-
const storage = useStorageContext();
63+
const storage = useStorage({ nonNull: true });
6464

65-
const lastUrl = storage?.get(LAST_URL_KEY);
65+
const lastUrl = storage.get(LAST_URL_KEY);
6666
const [currentUrl, setUrl] = React.useState(lastUrl ?? STARTING_URL);
6767
// TODO: a breaking change where we make URL an internal state concern, and then expose hooks
6868
// so that you can handle/set URL state internally from a plugin

examples/graphiql-webpack/src/select-server-plugin.jsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
import * as React from 'react';
22

33
import './select-server-plugin.css';
4-
import { useStorageContext, useSchemaContext } from '@graphiql/react';
4+
import { useStorage, useSchemaContext } from '@graphiql/react';
55

66
export const LAST_URL_KEY = 'lastURL';
77

88
export const PREV_URLS_KEY = 'previousURLs';
99

1010
const SelectServer = ({ url, setUrl }) => {
1111
const inputRef = React.useRef(null);
12-
const storage = useStorageContext();
13-
const lastUrl = storage?.get(LAST_URL_KEY);
12+
const storage = useStorage({ nonNull: true });
13+
const lastUrl = storage.get(LAST_URL_KEY);
1414
const currentUrl = lastUrl ?? url;
1515
const [inputValue, setInputValue] = React.useState(currentUrl);
1616
const [previousUrls, setPreviousUrls] = React.useState(
17-
JSON.parse(storage?.get(PREV_URLS_KEY)) ?? [currentUrl],
17+
JSON.parse(storage.get(PREV_URLS_KEY)) ?? [currentUrl],
1818
);
1919
const [error, setError] = React.useState(null);
2020

packages/graphiql-plugin-history/src/context.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
import { createStore, StoreApi, useStore } from 'zustand';
1111
import { HistoryStore, QueryStoreItem, StorageAPI } from '@graphiql/toolkit';
1212
import {
13-
useStorageContext,
13+
useStorage,
1414
useExecutionContext,
1515
useEditorContext,
1616
} from '@graphiql/react';
@@ -141,7 +141,7 @@ export const HistoryContextProvider: FC<HistoryContextProviderProps> = ({
141141
maxHistoryLength = 20,
142142
children,
143143
}) => {
144-
const storage = useStorageContext();
144+
const storage = useStorage();
145145
const { isFetching } = useExecutionContext({ nonNull: true });
146146
const { tabs, activeTabIndex } = useEditorContext({ nonNull: true });
147147
const activeTab = tabs[activeTabIndex];

packages/graphiql-react/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@
5656
"get-value": "^3.0.1",
5757
"graphql-language-service": "^5.3.1",
5858
"markdown-it": "^14.1.0",
59-
"set-value": "^4.1.0"
59+
"set-value": "^4.1.0",
60+
"zustand": "^5"
6061
},
6162
"devDependencies": {
6263
"babel-plugin-react-compiler": "19.1.0-rc.1",

packages/graphiql-react/src/editor/context.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
import { VariableToType } from 'graphql-language-service';
1010
import { FC, ReactNode, useEffect, useRef, useState } from 'react';
1111

12-
import { useStorageContext } from '../storage';
12+
import { useStorage } from '../storage';
1313
import { createContextHook, createNullableContext } from '../utility/context';
1414
import { STORAGE_KEY as STORAGE_KEY_HEADERS } from './header-editor';
1515
import { useSynchronizeValue } from './hooks';
@@ -255,7 +255,7 @@ type EditorContextProviderProps = {
255255
};
256256

257257
export const EditorContextProvider: FC<EditorContextProviderProps> = props => {
258-
const storage = useStorageContext();
258+
const storage = useStorage();
259259
const [headerEditor, setHeaderEditor] = useState<CodeMirrorEditor | null>(
260260
null,
261261
);

packages/graphiql-react/src/editor/hooks.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { parse, print } from 'graphql';
1212
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
1313
import { usePluginContext } from '../plugin';
1414
import { useSchemaContext } from '../schema';
15-
import { useStorageContext } from '../storage';
15+
import { useStorage } from '../storage';
1616
import { debounce } from '../utility';
1717
import { onHasCompletion } from './completion';
1818
import { useEditorContext } from './context';
@@ -47,7 +47,7 @@ export function useChangeHandler(
4747
caller: Function,
4848
) {
4949
const { updateActiveTabValues } = useEditorContext({ nonNull: true, caller });
50-
const storage = useStorageContext();
50+
const storage = useStorage();
5151

5252
useEffect(() => {
5353
if (!editor) {

packages/graphiql-react/src/editor/query-editor.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { useExecutionContext } from '../execution';
1616
import { markdown } from '../markdown';
1717
import { usePluginContext } from '../plugin';
1818
import { useSchemaContext } from '../schema';
19-
import { useStorageContext } from '../storage';
19+
import { useStorage } from '../storage';
2020
import { debounce } from '../utility/debounce';
2121
import {
2222
commonKeys,
@@ -147,7 +147,7 @@ export function useQueryEditor(
147147
caller: caller || _useQueryEditor,
148148
});
149149
const executionContext = useExecutionContext();
150-
const storage = useStorageContext();
150+
const storage = useStorage();
151151
const plugin = usePluginContext();
152152
const copy = useCopyQuery({ caller: caller || _useQueryEditor, onCopyQuery });
153153
const merge = useMergeQuery({ caller: caller || _useQueryEditor });

packages/graphiql-react/src/index.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,7 @@ export {
3939
SchemaContextProvider,
4040
useSchemaContext,
4141
} from './schema';
42-
export {
43-
StorageContext,
44-
StorageContextProvider,
45-
useStorageContext,
46-
} from './storage';
42+
export { StorageContextProvider, useStorage } from './storage';
4743
export { useTheme } from './theme';
4844

4945
export * from './utility';

packages/graphiql-react/src/plugin.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ComponentType, FC, ReactNode, useEffect, useState } from 'react';
2-
import { useStorageContext } from './storage';
2+
import { useStorage } from './storage';
33
import { createContextHook, createNullableContext } from './utility';
44

55
export type GraphiQLPlugin = {
@@ -75,7 +75,7 @@ export const PluginContextProvider: FC<PluginContextProviderProps> = ({
7575
plugins: $plugins,
7676
referencePlugin,
7777
}) => {
78-
const storage = useStorageContext();
78+
const storage = useStorage();
7979
const plugins = (() => {
8080
const pluginList: GraphiQLPlugin[] = [];
8181
const pluginTitles: Record<string, true> = {};

0 commit comments

Comments
 (0)