Skip to content

Commit 37abcd3

Browse files
phryneasbenjie
authored andcommitted
feat(postgraphiql): save headers to localStorage (#1174)
1 parent ee8e52c commit 37abcd3

File tree

1 file changed

+33
-2
lines changed

1 file changed

+33
-2
lines changed

postgraphiql/src/components/PostGraphiQL.js

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,11 @@ const websocketUrl = POSTGRAPHILE_CONFIG.graphqlUrl.match(/^https?:/)
7171
l.port !== 80 && l.port !== 443 ? ':' + l.port : ''
7272
}${POSTGRAPHILE_CONFIG.graphqlUrl}`;
7373

74+
const STORAGE_KEYS = {
75+
SAVE_HEADERS_TEXT: 'PostGraphiQL:saveHeadersText',
76+
HEADERS_TEXT: 'PostGraphiQL:headersText',
77+
};
78+
7479
/**
7580
* The standard GraphiQL interface wrapped with some PostGraphile extensions.
7681
* Including a JWT setter and live schema udpate capabilities.
@@ -85,7 +90,8 @@ class PostGraphiQL extends React.PureComponent {
8590
schema: null,
8691
query: '',
8792
showHeaderEditor: false,
88-
headersText: '{\n"Authorization": null\n}\n',
93+
saveHeadersText: this._storage.get(STORAGE_KEYS.SAVE_HEADERS_TEXT) === 'true' ? true : false,
94+
headersText: this._storage.get(STORAGE_KEYS.HEADERS_TEXT) || '{\n"Authorization": null\n}\n',
8995
headersTextValid: true,
9096
explorerIsOpen: this._storage.get('explorerIsOpen') === 'false' ? false : true,
9197
haveActiveSubscription: false,
@@ -510,6 +516,22 @@ class PostGraphiQL extends React.PureComponent {
510516
);
511517
};
512518

519+
handleToggleSaveHeaders = () => {
520+
this.setState(
521+
oldState => ({ saveHeadersText: !oldState.saveHeadersText }),
522+
() => {
523+
this._storage.set(
524+
STORAGE_KEYS.SAVE_HEADERS_TEXT,
525+
JSON.stringify(this.state.saveHeadersText),
526+
);
527+
this._storage.set(
528+
STORAGE_KEYS.HEADERS_TEXT,
529+
this.state.saveHeadersText ? this.state.headersText : '',
530+
);
531+
},
532+
);
533+
};
534+
513535
renderSocketStatus() {
514536
const { socketStatus, error } = this.state;
515537
if (socketStatus === null) {
@@ -681,13 +703,18 @@ class PostGraphiQL extends React.PureComponent {
681703
open={this.state.showHeaderEditor}
682704
value={this.state.headersText}
683705
valid={this.state.headersTextValid}
706+
toggleSaveHeaders={this.handleToggleSaveHeaders}
707+
saveHeaders={this.state.saveHeadersText}
684708
onChange={e =>
685709
this.setState(
686710
{
687711
headersText: e.target.value,
688712
headersTextValid: isValidJSON(e.target.value),
689713
},
690714
() => {
715+
if (this.state.headersTextValid && this.state.saveHeadersText) {
716+
this._storage.set(STORAGE_KEYS.HEADERS_TEXT, this.state.headersText);
717+
}
691718
if (this.state.headersTextValid && this.subscriptionsClient) {
692719
// Reconnect to websocket with new headers
693720
this.subscriptionsClient.close(false, true);
@@ -706,7 +733,7 @@ class PostGraphiQL extends React.PureComponent {
706733
}
707734
}
708735

709-
function EditHeaders({ children, open, value, onChange, valid }) {
736+
function EditHeaders({ children, open, value, onChange, valid, saveHeaders, toggleSaveHeaders }) {
710737
return (
711738
<div
712739
className="graphiql-container not-really"
@@ -723,6 +750,10 @@ function EditHeaders({ children, open, value, onChange, valid }) {
723750
<div className="doc-explorer-rhs">{children}</div>
724751
</div>
725752
<div className="doc-explorer-contents">
753+
<label>
754+
<input type="checkbox" checked={saveHeaders} onChange={toggleSaveHeaders} />
755+
save headers to localStorage
756+
</label>
726757
<textarea
727758
value={value}
728759
onChange={onChange}

0 commit comments

Comments
 (0)