11
11
use SilverStripe \Core \Path ;
12
12
use SilverStripe \GraphQL \Schema \Schema ;
13
13
use SilverStripe \Security \SecurityToken ;
14
+ use SilverStripe \View \Requirements ;
14
15
15
16
class Controller extends BaseController
16
17
{
@@ -34,26 +35,51 @@ class Controller extends BaseController
34
35
public function index (HTTPRequest $ request )
35
36
{
36
37
$ routes = $ this ->getRoutes ();
37
- $ json = null ;
38
+ $ endpoint = sizeof ($ routes ?? []) === 1 ? $ routes [0 ] : null ;
39
+ $ csrf = SecurityToken::inst ()->getValue ();
40
+ $ tabs = [];
38
41
if (sizeof ($ routes ?? []) > 1 ) {
39
- $ tabs = [];
40
42
foreach ($ routes as $ route ) {
41
43
$ tabs [] = [
42
44
'endpoint ' => Director::absoluteURL ($ route ),
43
45
'query ' => '' ,
44
46
'name ' => $ route ,
45
47
'headers ' => [
46
- 'X-CSRF-TOKEN ' => SecurityToken:: inst ()-> getValue () ,
48
+ 'X-CSRF-TOKEN ' => $ csrf ,
47
49
]
48
50
];
49
51
}
52
+ }
53
+
54
+ $ data = [
55
+ 'headers ' => [
56
+ 'X-CSRF-TOKEN ' => $ csrf ,
57
+ ],
58
+ 'endpoint ' => $ endpoint ,
59
+ 'settings ' => [
60
+ 'request.globalHeaders ' => [
61
+ 'X-CSRF-TOKEN ' => $ csrf ,
62
+ ],
63
+ 'request.credentials ' => 'include ' ,
64
+ ],
65
+ ];
50
66
51
- $ json = json_encode ($ tabs );
67
+ if ($ tabs ) {
68
+ $ data ['tabs ' ] = $ tabs ;
52
69
}
53
70
71
+ $ jsonPayload = json_encode ($ data );
72
+
73
+ Requirements::customScript (<<<JS
74
+ window.addEventListener('load', function (event) {
75
+ GraphQLPlayground.init(document.getElementById('root'), $ jsonPayload)
76
+ });
77
+ JS
78
+ );
79
+
54
80
return [
55
- 'Endpoint ' => sizeof ( $ routes ?? []) === 1 ? $ routes [ 0 ] : null ,
56
- 'TabsJSON ' => $ json ,
81
+ 'Endpoint ' => $ endpoint ,
82
+ 'TabsJSON ' => $ tabs ? json_encode ( $ tabs ): null ,
57
83
];
58
84
}
59
85
0 commit comments