1111use SilverStripe \Core \Path ;
1212use SilverStripe \GraphQL \Schema \Schema ;
1313use SilverStripe \Security \SecurityToken ;
14+ use SilverStripe \View \Requirements ;
1415
1516class Controller extends BaseController
1617{
@@ -34,26 +35,51 @@ class Controller extends BaseController
3435 public function index (HTTPRequest $ request )
3536 {
3637 $ routes = $ this ->getRoutes ();
37- $ json = null ;
38+ $ endpoint = sizeof ($ routes ?? []) === 1 ? $ routes [0 ] : null ;
39+ $ csrf = SecurityToken::inst ()->getValue ();
40+ $ tabs = [];
3841 if (sizeof ($ routes ?? []) > 1 ) {
39- $ tabs = [];
4042 foreach ($ routes as $ route ) {
4143 $ tabs [] = [
4244 'endpoint ' => Director::absoluteURL ($ route ),
4345 'query ' => '' ,
4446 'name ' => $ route ,
4547 'headers ' => [
46- 'X-CSRF-TOKEN ' => SecurityToken:: inst ()-> getValue () ,
48+ 'X-CSRF-TOKEN ' => $ csrf ,
4749 ]
4850 ];
4951 }
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+ ];
5066
51- $ json = json_encode ($ tabs );
67+ if ($ tabs ) {
68+ $ data ['tabs ' ] = $ tabs ;
5269 }
5370
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+
5480 return [
55- 'Endpoint ' => sizeof ( $ routes ?? []) === 1 ? $ routes [ 0 ] : null ,
56- 'TabsJSON ' => $ json ,
81+ 'Endpoint ' => $ endpoint ,
82+ 'TabsJSON ' => $ tabs ? json_encode ( $ tabs ): null ,
5783 ];
5884 }
5985
0 commit comments