2024-05-21 04:32:10 -07:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using GraphQlClient.Core;
|
|
|
|
|
using UnityEditor;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
namespace GraphQlClient.Editor
|
|
|
|
|
{
|
|
|
|
|
[CustomEditor(typeof(GraphApi))]
|
|
|
|
|
public class GraphApiEditor : UnityEditor.Editor
|
|
|
|
|
{
|
|
|
|
|
private int index;
|
|
|
|
|
|
|
|
|
|
public override void OnInspectorGUI(){
|
|
|
|
|
GraphApi graph = (GraphApi) target;
|
|
|
|
|
GUIStyle style = new GUIStyle{fontSize = 15, alignment = TextAnchor.MiddleCenter};
|
2024-05-21 11:33:09 -07:00
|
|
|
|
graph.GetSchema();
|
2024-05-21 04:32:10 -07:00
|
|
|
|
EditorGUILayout.LabelField(graph.name, style);
|
|
|
|
|
EditorGUILayout.Space();
|
|
|
|
|
if (GUILayout.Button("Reset")){
|
|
|
|
|
graph.DeleteAllQueries();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
EditorGUILayout.Space();
|
|
|
|
|
EditorGUILayout.Space();
|
|
|
|
|
graph.url = EditorGUILayout.TextField("Url", graph.url);
|
|
|
|
|
if (GUILayout.Button("Introspect")){
|
|
|
|
|
graph.Introspect();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (graph.loading){
|
|
|
|
|
EditorGUILayout.LabelField("API is being introspected. Please wait...");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
EditorGUILayout.Space();
|
|
|
|
|
EditorGUILayout.Space();
|
|
|
|
|
if (graph.schemaClass == null){
|
|
|
|
|
return;
|
|
|
|
|
}
|
2024-05-21 11:33:09 -07:00
|
|
|
|
|
2024-05-21 04:32:10 -07:00
|
|
|
|
EditorGUILayout.BeginHorizontal();
|
|
|
|
|
if (GUILayout.Button("Create New Query")){
|
|
|
|
|
graph.CreateNewQuery();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (GUILayout.Button("Create New Mutation")){
|
|
|
|
|
graph.CreateNewMutation();
|
2024-05-21 11:33:09 -07:00
|
|
|
|
|
2024-05-21 04:32:10 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (GUILayout.Button("Create New Subscription")){
|
|
|
|
|
graph.CreateNewSubscription();
|
2024-05-21 11:33:09 -07:00
|
|
|
|
|
2024-05-21 04:32:10 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
EditorGUILayout.EndHorizontal();
|
|
|
|
|
|
|
|
|
|
EditorGUILayout.Space();
|
|
|
|
|
EditorGUILayout.Space();
|
|
|
|
|
|
|
|
|
|
DisplayFields(graph, graph.queries, "Query");
|
|
|
|
|
DisplayFields(graph, graph.mutations, "Mutation");
|
|
|
|
|
DisplayFields(graph, graph.subscriptions, "Subscription");
|
2024-05-21 11:33:09 -07:00
|
|
|
|
|
2024-05-21 04:32:10 -07:00
|
|
|
|
EditorUtility.SetDirty(graph);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void DisplayFields(GraphApi graph, List<GraphApi.Query> queryList, string type){
|
|
|
|
|
if (queryList != null){
|
|
|
|
|
if (queryList.Count > 0)
|
|
|
|
|
EditorGUILayout.LabelField(type);
|
|
|
|
|
for (int i = 0; i < queryList.Count; i++){
|
|
|
|
|
EditorGUILayout.Space();
|
|
|
|
|
EditorGUILayout.Space();
|
|
|
|
|
EditorGUILayout.Space();
|
|
|
|
|
GraphApi.Query query = queryList[i];
|
|
|
|
|
query.name = EditorGUILayout.TextField($"{type} Name", query.name);
|
|
|
|
|
string[] options = query.queryOptions.ToArray();
|
|
|
|
|
if (String.IsNullOrEmpty(query.returnType)){
|
2024-05-21 11:33:09 -07:00
|
|
|
|
EditorGUILayout.BeginHorizontal();
|
|
|
|
|
EditorGUILayout.PrefixLabel(type);
|
|
|
|
|
if (GUILayout.Button(queryList[i].queryString, EditorStyles.popup))
|
|
|
|
|
{
|
|
|
|
|
SearchOptionWindow.Show(Event.current.mousePosition, options, type, index =>
|
|
|
|
|
{
|
|
|
|
|
query.queryString = options[index];
|
|
|
|
|
this.index = index;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
EditorGUILayout.EndHorizontal();
|
2024-05-21 04:32:10 -07:00
|
|
|
|
query.queryString = options[index];
|
|
|
|
|
EditorGUILayout.LabelField(options[index]);
|
|
|
|
|
if (GUILayout.Button($"Confirm {type}")){
|
|
|
|
|
graph.GetQueryReturnType(query, options[index]);
|
|
|
|
|
}
|
|
|
|
|
if (GUILayout.Button("Delete")){
|
|
|
|
|
graph.DeleteQuery(queryList, i);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (query.isComplete){
|
|
|
|
|
GUILayout.Label(query.query);
|
|
|
|
|
if (query.fields.Count > 0){
|
|
|
|
|
if (GUILayout.Button($"Edit {type}")){
|
|
|
|
|
graph.EditQuery(query);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (GUILayout.Button("Delete")){
|
|
|
|
|
graph.DeleteQuery(queryList, i);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EditorGUILayout.LabelField(query.queryString,
|
|
|
|
|
$"Return Type: {query.returnType}");
|
|
|
|
|
if (graph.CheckSubFields(query.returnType)){
|
|
|
|
|
if (GUILayout.Button("Create Field")){
|
|
|
|
|
graph.GetQueryReturnType(query, options[index]);
|
|
|
|
|
graph.AddField(query, query.returnType);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
foreach (GraphApi.Field field in query.fields){
|
|
|
|
|
GUI.color = new Color(0.8f,0.8f,0.8f);
|
|
|
|
|
string[] fieldOptions = field.possibleFields.Select((aField => aField.name)).ToArray();
|
|
|
|
|
EditorGUILayout.BeginHorizontal();
|
|
|
|
|
GUIStyle fieldStyle = EditorStyles.popup;
|
|
|
|
|
fieldStyle.contentOffset = new Vector2(field.parentIndexes.Count * 20, 0);
|
2024-05-21 11:33:09 -07:00
|
|
|
|
field.Index = field.index;
|
|
|
|
|
if (GUILayout.Button(fieldOptions[field.Index], EditorStyles.popup))
|
|
|
|
|
{
|
|
|
|
|
SearchOptionWindow.Show(Event.current.mousePosition, fieldOptions, "Field", index =>
|
|
|
|
|
{
|
|
|
|
|
field.Index = index;
|
|
|
|
|
});
|
|
|
|
|
}
|
2024-05-21 04:32:10 -07:00
|
|
|
|
GUI.color = Color.white;
|
|
|
|
|
field.CheckSubFields(graph.schemaClass);
|
|
|
|
|
if (field.hasSubField){
|
|
|
|
|
if (GUILayout.Button("Create Sub Field")){
|
|
|
|
|
graph.AddField(query, field.possibleFields[field.Index].type, field);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (GUILayout.Button("x", GUILayout.MaxWidth(20))){
|
|
|
|
|
int parentIndex = query.fields.FindIndex(aField => aField == field);
|
|
|
|
|
query.fields.RemoveAll(afield => afield.parentIndexes.Contains(parentIndex));
|
|
|
|
|
query.fields.Remove(field);
|
|
|
|
|
field.hasChanged = false;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
EditorGUILayout.EndHorizontal();
|
|
|
|
|
|
|
|
|
|
if (field.hasChanged){
|
|
|
|
|
int parentIndex = query.fields.FindIndex(aField => aField == field);
|
|
|
|
|
query.fields.RemoveAll(afield => afield.parentIndexes.Contains(parentIndex));
|
|
|
|
|
field.hasChanged = false;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
EditorGUILayout.Space();
|
|
|
|
|
EditorGUILayout.Space();
|
|
|
|
|
|
|
|
|
|
if (query.fields.Count > 0){
|
|
|
|
|
if (GUILayout.Button($"Preview {type}")){
|
|
|
|
|
query.CompleteQuery();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (GUILayout.Button("Delete")){
|
|
|
|
|
graph.DeleteQuery(queryList, i);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
EditorGUILayout.Space();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|