From f0cfee56f2106d906f00968ce0ef0ac307690016 Mon Sep 17 00:00:00 2001 From: Andrew Bastin Date: Sun, 19 Jan 2020 14:21:31 -0500 Subject: [PATCH 1/3] Added ability to query editor to validate based on schema --- components/graphql/queryeditor.vue | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/components/graphql/queryeditor.vue b/components/graphql/queryeditor.vue index c89d9807e..959781992 100644 --- a/components/graphql/queryeditor.vue +++ b/components/graphql/queryeditor.vue @@ -33,7 +33,8 @@ export default { data() { return { editor: null, - cacheValue: "" + cacheValue: "", + validationSchema: null }; }, @@ -87,10 +88,29 @@ export default { ); } }, + + setValidationSchema(schema) { + this.validationSchema = schema; + this.parseContents(this.cacheValue); + }, parseContents: debounce(function(content) { try { - gql.parse(content); + const doc = gql.parse(content); + + if (this.validationSchema) { + this.editor.session.setAnnotations( + gql.validate(this.validationSchema, doc) + .map((err) => { + return { + row: err.locations[0].line - 1, + column: err.locations[0].column - 1, + text: err.message, + type: "error" + } + }) + ) + } } catch (e) { this.editor.session.setAnnotations([ { From 77e51f330111312be0eda10a57732cd620daa2b6 Mon Sep 17 00:00:00 2001 From: Andrew Bastin Date: Sun, 19 Jan 2020 14:22:56 -0500 Subject: [PATCH 2/3] GraphQL page now notifies the query editor about the schema for validation --- pages/graphql.vue | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pages/graphql.vue b/pages/graphql.vue index f6ca59d6c..606796472 100644 --- a/pages/graphql.vue +++ b/pages/graphql.vue @@ -812,6 +812,8 @@ export default { } } this.gqlTypes = types; + + this.$refs.queryEditor.setValidationSchema(schema); this.$nuxt.$loading.finish(); const duration = Date.now() - startTime; From 744d6477044a2856c4d59d487c6fb406f7aa0f7c Mon Sep 17 00:00:00 2001 From: Andrew Bastin Date: Sun, 19 Jan 2020 14:38:46 -0500 Subject: [PATCH 3/3] GQL Query Editor doesn't give errors for empty queries --- components/graphql/queryeditor.vue | 50 ++++++++++++++++-------------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/components/graphql/queryeditor.vue b/components/graphql/queryeditor.vue index 959781992..7f1084b85 100644 --- a/components/graphql/queryeditor.vue +++ b/components/graphql/queryeditor.vue @@ -95,31 +95,35 @@ export default { }, parseContents: debounce(function(content) { - try { - const doc = gql.parse(content); + if (content !== "") { + try { + const doc = gql.parse(content); - if (this.validationSchema) { - this.editor.session.setAnnotations( - gql.validate(this.validationSchema, doc) - .map((err) => { - return { - row: err.locations[0].line - 1, - column: err.locations[0].column - 1, - text: err.message, - type: "error" - } - }) - ) - } - } catch (e) { - this.editor.session.setAnnotations([ - { - row: e.locations[0].line - 1, - column: e.locations[0].column - 1, - text: e.message, - type: "error" + if (this.validationSchema) { + this.editor.session.setAnnotations( + gql.validate(this.validationSchema, doc) + .map((err) => { + return { + row: err.locations[0].line - 1, + column: err.locations[0].column - 1, + text: err.message, + type: "error" + } + }) + ) } - ]); + } catch (e) { + this.editor.session.setAnnotations([ + { + row: e.locations[0].line - 1, + column: e.locations[0].column - 1, + text: e.message, + type: "error" + } + ]); + } + } else { + this.editor.session.setAnnotations([]); } }, 2000) },