Skip to content

Commit 3bd3719

Browse files
demo: pass presets as props (#285)
1 parent beb6de1 commit 3bd3719

File tree

2 files changed

+30
-23
lines changed

2 files changed

+30
-23
lines changed

demo/IntrospectionModal.tsx

+26-21
Original file line numberDiff line numberDiff line change
@@ -19,31 +19,30 @@ import {
1919
} from 'graphql/utilities';
2020
import * as React from 'react';
2121

22-
import { defaultPresetName, PRESETS } from './presets';
23-
2422
enum InputType {
2523
Presets = 'Presets',
2624
SDL = 'SDL',
2725
Introspection = 'Introspection',
2826
}
2927

30-
const initialConfig = {
31-
inputType: InputType.Presets,
32-
activePreset: defaultPresetName,
33-
sdlText: '',
34-
jsonText: '',
35-
};
36-
3728
interface IntrospectionModalProps {
3829
open: boolean;
30+
presets?: { [name: string]: any };
3931
onClose: () => void;
4032
onChange: (introspection: any) => void;
4133
}
4234

4335
export function IntrospectionModal(props: IntrospectionModalProps) {
44-
const { open, onChange, onClose } = props;
36+
const { open, presets, onChange, onClose } = props;
37+
const presetNames = presets != null ? Object.keys(presets) : [];
38+
const hasPresets = presetNames.length > 0;
4539

46-
const [submitted, setSubmitted] = React.useState(initialConfig);
40+
const [submitted, setSubmitted] = React.useState({
41+
inputType: hasPresets ? InputType.Presets : InputType.SDL,
42+
activePreset: presetNames.at(0) ?? '',
43+
sdlText: '',
44+
jsonText: '',
45+
});
4746

4847
const [inputType, setInputType] = React.useState(submitted.inputType);
4948
const [sdlText, setSDLText] = React.useState(submitted.sdlText);
@@ -65,19 +64,24 @@ export function IntrospectionModal(props: IntrospectionModalProps) {
6564
textColor="primary"
6665
onChange={(_, activeTab) => setInputType(activeTab)}
6766
>
68-
<Tab value={InputType.Presets} label={InputType.Presets} />
67+
{hasPresets && (
68+
<Tab value={InputType.Presets} label={InputType.Presets} />
69+
)}
6970
<Tab value={InputType.SDL} label={InputType.SDL} />
7071
<Tab
7172
value={InputType.Introspection}
7273
label={InputType.Introspection}
7374
/>
7475
</TabList>
75-
<TabPanel value={InputType.Presets}>
76-
<PresetsTab
77-
activePreset={activePreset}
78-
onPresetChange={setActivePreset}
79-
/>
80-
</TabPanel>
76+
{hasPresets && (
77+
<TabPanel value={InputType.Presets}>
78+
<PresetsTab
79+
presets={presets}
80+
activePreset={activePreset}
81+
onPresetChange={setActivePreset}
82+
/>
83+
</TabPanel>
84+
)}
8185
<TabPanel value={InputType.SDL}>
8286
<SDLTab sdlText={sdlText} onSDLTextChange={setSDLText} />
8387
</TabPanel>
@@ -102,7 +106,7 @@ export function IntrospectionModal(props: IntrospectionModalProps) {
102106
function handleSubmit() {
103107
switch (inputType) {
104108
case InputType.Presets:
105-
onChange(PRESETS[activePreset]);
109+
onChange(presets[activePreset]);
106110
break;
107111
case InputType.Introspection:
108112
onChange(JSON.parse(jsonText));
@@ -167,13 +171,14 @@ function IntrospectionDialog(props: IntrospectionDialogProps) {
167171
}
168172

169173
interface PresetsTabProps {
174+
presets: { [name: string]: any };
170175
activePreset: string;
171176
onPresetChange: (presetName: string) => void;
172177
}
173178

174179
function PresetsTab(props: PresetsTabProps) {
175-
const { activePreset, onPresetChange } = props;
176-
const presetNames = Object.keys(PRESETS);
180+
const { presets, activePreset, onPresetChange } = props;
181+
const presetNames = Object.keys(presets);
177182

178183
return (
179184
<Grid container spacing={4}>

demo/index.tsx

+4-2
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@ import { GraphQLVoyager } from '../src';
1212
import { theme } from '../src/components/MUITheme';
1313
import LogoIcon from './icons/logo-small.svg';
1414
import { IntrospectionModal } from './IntrospectionModal';
15-
import { defaultPreset } from './presets';
15+
import { defaultPreset, PRESETS } from './presets';
1616

1717
interface DemoProps {
1818
introspection: any;
19+
presets?: { [name: string]: any };
1920
}
2021

2122
function Demo(props: DemoProps) {
@@ -44,6 +45,7 @@ function Demo(props: DemoProps) {
4445
</GraphQLVoyager>
4546
<IntrospectionModal
4647
open={changeSchemaModalOpen}
48+
presets={props.presets}
4749
onClose={() => setChangeSchemaModalOpen(false)}
4850
onChange={setIntrospection}
4951
/>
@@ -109,4 +111,4 @@ const introspection =
109111
: defaultPreset;
110112

111113
const reactRoot = ReactDOMClient.createRoot(document.getElementById('root'));
112-
reactRoot.render(<Demo introspection={introspection} />);
114+
reactRoot.render(<Demo introspection={introspection} presets={PRESETS} />);

0 commit comments

Comments
 (0)