|  | @@ -1,182 +0,0 @@
 | 
	
		
			
				|  |  | -<template lang='pug'>
 | 
	
		
			
				|  |  | -  v-container(fluid, grid-list-lg)
 | 
	
		
			
				|  |  | -    v-layout(row, wrap)
 | 
	
		
			
				|  |  | -      v-flex(xs12)
 | 
	
		
			
				|  |  | -        .admin-header
 | 
	
		
			
				|  |  | -          img(src='/svg/icon-console.svg', alt='Developer Tools', style='width: 80px;')
 | 
	
		
			
				|  |  | -          .admin-header-title
 | 
	
		
			
				|  |  | -            .headline.primary--text Developer Tools
 | 
	
		
			
				|  |  | -            .subheading.grey--text ¯\_(ツ)_/¯
 | 
	
		
			
				|  |  | -          v-spacer
 | 
	
		
			
				|  |  | -          v-card.radius-7
 | 
	
		
			
				|  |  | -            v-card-text
 | 
	
		
			
				|  |  | -              .caption Enables extra dev options and removes many safeguards.
 | 
	
		
			
				|  |  | -              .caption.red--text Do not enable unless you know what you're doing!
 | 
	
		
			
				|  |  | -              v-switch.mt-1(
 | 
	
		
			
				|  |  | -                color='primary'
 | 
	
		
			
				|  |  | -                hide-details
 | 
	
		
			
				|  |  | -                label='Dev Mode'
 | 
	
		
			
				|  |  | -              )
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        v-card.mt-3.white.grey--text.text--darken-3
 | 
	
		
			
				|  |  | -          v-tabs(
 | 
	
		
			
				|  |  | -            v-model='selectedTab'
 | 
	
		
			
				|  |  | -            color='grey darken-2'
 | 
	
		
			
				|  |  | -            fixed-tabs
 | 
	
		
			
				|  |  | -            slider-color='white'
 | 
	
		
			
				|  |  | -            show-arrows
 | 
	
		
			
				|  |  | -            dark
 | 
	
		
			
				|  |  | -            @change='tabChanged'
 | 
	
		
			
				|  |  | -            )
 | 
	
		
			
				|  |  | -            v-tab(key='0') Graph API Playground
 | 
	
		
			
				|  |  | -            v-tab(key='1') Graph API Map
 | 
	
		
			
				|  |  | -          v-tabs-items(v-model='selectedTab')
 | 
	
		
			
				|  |  | -            v-tab-item(key='0', :transition='false', :reverse-transition='false')
 | 
	
		
			
				|  |  | -              #graphiql
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            v-tab-item(key='1', :transition='false', :reverse-transition='false')
 | 
	
		
			
				|  |  | -              #voyager
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -</template>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -<script>
 | 
	
		
			
				|  |  | -import _ from 'lodash'
 | 
	
		
			
				|  |  | -import React from 'react'
 | 
	
		
			
				|  |  | -import ReactDOM from 'react-dom'
 | 
	
		
			
				|  |  | -import GraphiQL from 'graphiql'
 | 
	
		
			
				|  |  | -import { Voyager } from 'graphql-voyager'
 | 
	
		
			
				|  |  | -import 'graphiql/graphiql.css'
 | 
	
		
			
				|  |  | -import 'graphql-voyager/dist/voyager.css'
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -const fetcher = (qry, respType) => {
 | 
	
		
			
				|  |  | -  return fetch('/graphql', {
 | 
	
		
			
				|  |  | -    method: 'post',
 | 
	
		
			
				|  |  | -    headers: {
 | 
	
		
			
				|  |  | -      'Accept': 'application/json',
 | 
	
		
			
				|  |  | -      'Content-Type': 'application/json'
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    body: JSON.stringify(qry),
 | 
	
		
			
				|  |  | -    credentials: 'include'
 | 
	
		
			
				|  |  | -  }).then(response => {
 | 
	
		
			
				|  |  | -    if (respType === 'json') {
 | 
	
		
			
				|  |  | -      return response.json()
 | 
	
		
			
				|  |  | -    } else {
 | 
	
		
			
				|  |  | -      return response.text()
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -  }).then(responseBody => {
 | 
	
		
			
				|  |  | -    try {
 | 
	
		
			
				|  |  | -      return JSON.parse(responseBody)
 | 
	
		
			
				|  |  | -    } catch (error) {
 | 
	
		
			
				|  |  | -      return responseBody
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -  })
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -let graphiQLInstance
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -export default {
 | 
	
		
			
				|  |  | -  data() {
 | 
	
		
			
				|  |  | -    return {
 | 
	
		
			
				|  |  | -      selectedTab: 0
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -  },
 | 
	
		
			
				|  |  | -  mounted() {
 | 
	
		
			
				|  |  | -    this.renderGraphiQL()
 | 
	
		
			
				|  |  | -  },
 | 
	
		
			
				|  |  | -  methods: {
 | 
	
		
			
				|  |  | -    tabChanged (tabId) {
 | 
	
		
			
				|  |  | -      switch (tabId) {
 | 
	
		
			
				|  |  | -        case 1:
 | 
	
		
			
				|  |  | -          this.renderVoyager()
 | 
	
		
			
				|  |  | -          break
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    renderGraphiQL() {
 | 
	
		
			
				|  |  | -      ReactDOM.render(
 | 
	
		
			
				|  |  | -        React.createElement(GraphiQL, {
 | 
	
		
			
				|  |  | -          ref(el) { graphiQLInstance = el },
 | 
	
		
			
				|  |  | -          async fetcher(qry) {
 | 
	
		
			
				|  |  | -            let resp = await fetcher(qry, 'text')
 | 
	
		
			
				|  |  | -            _.delay(() => {
 | 
	
		
			
				|  |  | -              graphiQLInstance.resultComponent.viewer.refresh()
 | 
	
		
			
				|  |  | -            }, 500)
 | 
	
		
			
				|  |  | -            return resp
 | 
	
		
			
				|  |  | -          },
 | 
	
		
			
				|  |  | -          response: null,
 | 
	
		
			
				|  |  | -          variables: '{}',
 | 
	
		
			
				|  |  | -          operationName: null,
 | 
	
		
			
				|  |  | -          websocketConnectionParams: null
 | 
	
		
			
				|  |  | -        }),
 | 
	
		
			
				|  |  | -        document.getElementById('graphiql')
 | 
	
		
			
				|  |  | -      )
 | 
	
		
			
				|  |  | -      graphiQLInstance.queryEditorComponent.editor.refresh()
 | 
	
		
			
				|  |  | -      graphiQLInstance.variableEditorComponent.editor.refresh()
 | 
	
		
			
				|  |  | -      graphiQLInstance.state.variableEditorOpen = true
 | 
	
		
			
				|  |  | -      graphiQLInstance.state.docExplorerOpen = true
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    renderVoyager() {
 | 
	
		
			
				|  |  | -      ReactDOM.render(
 | 
	
		
			
				|  |  | -        React.createElement(Voyager, {
 | 
	
		
			
				|  |  | -          introspection: qry => fetcher({ query: qry }, 'json'),
 | 
	
		
			
				|  |  | -          workerURI: '/js/voyager.worker.js'
 | 
	
		
			
				|  |  | -        }),
 | 
	
		
			
				|  |  | -        document.getElementById('voyager')
 | 
	
		
			
				|  |  | -      )
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -</script>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -<style lang='scss'>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#graphiql {
 | 
	
		
			
				|  |  | -  height: calc(100vh - 270px);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  .topBar {
 | 
	
		
			
				|  |  | -    background-color: mc('grey', '200');
 | 
	
		
			
				|  |  | -    background-image: none;
 | 
	
		
			
				|  |  | -    padding: 1.5rem 0;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    > .title {
 | 
	
		
			
				|  |  | -      display: none;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  .toolbar {
 | 
	
		
			
				|  |  | -    background-color: initial;
 | 
	
		
			
				|  |  | -    box-shadow: initial;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  .doc-explorer-title-bar, .history-title-bar {
 | 
	
		
			
				|  |  | -    height: auto;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#voyager {
 | 
	
		
			
				|  |  | -  height: calc(100vh - 270px);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  .title-area {
 | 
	
		
			
				|  |  | -    display: none;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  .type-doc {
 | 
	
		
			
				|  |  | -    margin-top: 5px;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  .doc-navigation {
 | 
	
		
			
				|  |  | -    > span {
 | 
	
		
			
				|  |  | -      overflow-y: hidden;
 | 
	
		
			
				|  |  | -      display: block;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    min-height: 40px;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  .contents {
 | 
	
		
			
				|  |  | -    padding-bottom: 0;
 | 
	
		
			
				|  |  | -    color: #666;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  .type-info-popover {
 | 
	
		
			
				|  |  | -    display: none;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -</style>
 |