Updated field, type and graphql page to use the new argument and typelink components

This commit is contained in:
Andrew Bastin
2020-01-09 13:32:38 -05:00
parent faa420753f
commit cc396aecd3
3 changed files with 58 additions and 9 deletions

View File

@@ -1,6 +1,18 @@
<template> <template>
<div class="field-box"> <div class="field-box">
<div class="field-title">{{ fieldString }}</div> <div class="field-title">
{{ fieldName }}
<span v-if="fieldArgs.length > 0">
(
<span v-for="(field, index) in fieldArgs" :key="index">
{{ field.name }}: <typelink :gqlType="field.type" :jumpTypeCallback="jumpTypeCallback" />
<span v-if="index !== fieldArgs.length - 1">
,
</span>
</span>
)
</span>: <typelink :gqlType="gqlField.type" :jumpTypeCallback="jumpTypeCallback" />
</div>
<div class="field-desc" v-if="gqlField.description"> <div class="field-desc" v-if="gqlField.description">
{{ gqlField.description }} {{ gqlField.description }}
</div> </div>
@@ -8,6 +20,7 @@
<div class="field-deprecated" v-if="gqlField.isDeprecated"> <div class="field-deprecated" v-if="gqlField.isDeprecated">
DEPRECATED DEPRECATED
</div> </div>
</div> </div>
</template> </template>
@@ -36,9 +49,17 @@
</style> </style>
<script> <script>
import typelink from './typelink';
export default { export default {
components: {
typelink: typelink
},
props: { props: {
gqlField: Object gqlField: Object,
jumpTypeCallback: Function
}, },
computed: { computed: {
@@ -56,6 +77,14 @@ export default {
return `${ return `${
this.gqlField.name this.gqlField.name
}${argsString}: ${this.gqlField.type.toString()}`; }${argsString}: ${this.gqlField.type.toString()}`;
},
fieldName() {
return this.gqlField.name;
},
fieldArgs() {
return this.gqlField.args || [];
} }
} }
}; };

View File

@@ -8,7 +8,7 @@
<div v-if="gqlType.getFields"> <div v-if="gqlType.getFields">
<h5>FIELDS</h5> <h5>FIELDS</h5>
<div v-for="field in gqlType.getFields()" :key="field.name"> <div v-for="field in gqlType.getFields()" :key="field.name">
<gql-field :gqlField="field" /> <gql-field :gqlField="field" :jumpTypeCallback="jumpTypeCallback" />
</div> </div>
</div> </div>
</div> </div>
@@ -36,7 +36,9 @@ export default {
"gql-field": () => import("./field") "gql-field": () => import("./field")
}, },
props: { props: {
gqlType: {} gqlType: {},
jumpTypeCallback: Function
} }
}; };
</script> </script>

View File

@@ -288,7 +288,7 @@
</label> </label>
<div v-if="queryFields.length > 0" class="tab"> <div v-if="queryFields.length > 0" class="tab">
<div v-for="field in queryFields" :key="field.name"> <div v-for="field in queryFields" :key="field.name">
<gql-field :gqlField="field" /> <gql-field :gqlField="field" :jumpTypeCallback="handleJumpToType" />
</div> </div>
</div> </div>
@@ -304,7 +304,7 @@
</label> </label>
<div v-if="mutationFields.length > 0" class="tab"> <div v-if="mutationFields.length > 0" class="tab">
<div v-for="field in mutationFields" :key="field.name"> <div v-for="field in mutationFields" :key="field.name">
<gql-field :gqlField="field" /> <gql-field :gqlField="field" :jumpTypeCallback="handleJumpToType" />
</div> </div>
</div> </div>
@@ -320,7 +320,7 @@
</label> </label>
<div v-if="subscriptionFields.length > 0" class="tab"> <div v-if="subscriptionFields.length > 0" class="tab">
<div v-for="field in subscriptionFields" :key="field.name"> <div v-for="field in subscriptionFields" :key="field.name">
<gql-field :gqlField="field" /> <gql-field :gqlField="field" :jumpTypeCallback="handleJumpToType" />
</div> </div>
</div> </div>
@@ -335,8 +335,8 @@
{{ $t("types") }} {{ $t("types") }}
</label> </label>
<div v-if="gqlTypes.length > 0" class="tab"> <div v-if="gqlTypes.length > 0" class="tab">
<div v-for="type in gqlTypes" :key="type.name"> <div v-for="type in gqlTypes" :key="type.name" :id="`type_${type.name}`">
<gql-type :gqlType="type" /> <gql-type :gqlType="type" :jumpTypeCallback="handleJumpToType" />
</div> </div>
</div> </div>
</section> </section>
@@ -563,6 +563,24 @@ export default {
} }
}, },
methods: { methods: {
handleJumpToType(type) {
const typesTab = document.getElementById("gqltypes-tab");
typesTab.checked = true;
const rootTypeName = this.resolveRootType(type).name;
const target = document.getElementById(`type_${rootTypeName}`);
if (target) {
target.scrollIntoView({
behavior: 'smooth'
});
}
},
resolveRootType(type) {
let t = type;
while (t.ofType != null) t = t.ofType;
return t;
},
copySchema() { copySchema() {
this.$refs.copySchemaCode.innerHTML = this.doneButton; this.$refs.copySchemaCode.innerHTML = this.doneButton;
const aux = document.createElement("textarea"); const aux = document.createElement("textarea");