From 5484072fd8002c7918273298ce327b5b3dda0602 Mon Sep 17 00:00:00 2001
From: Hangzhi Yu <hangzhi@protonmail.com>
Date: Sat, 16 Jul 2022 17:10:47 +0200
Subject: [PATCH] Start including apollo

---
 aleksis/core/settings.py                  | 14 +++++++++++++-
 aleksis/core/static/js/vue/app.js         | 12 ++++++++++++
 aleksis/core/templates/core/vue_base.html | 12 +++++++++---
 3 files changed, 34 insertions(+), 4 deletions(-)

diff --git a/aleksis/core/settings.py b/aleksis/core/settings.py
index 2e47b4488..3877c6b47 100644
--- a/aleksis/core/settings.py
+++ b/aleksis/core/settings.py
@@ -586,6 +586,9 @@ YARN_INSTALLED_APPS = [
     "vue@^2.6.14",
     "vuetify@^2.6.5",
     "@mdi/font",
+    "vue-apollo@^3",
+    "apollo-boost",
+    "graphql",
 ]
 
 merge_app_settings("YARN_INSTALLED_APPS", YARN_INSTALLED_APPS, True)
@@ -627,7 +630,16 @@ ANY_JS = {
         "css_url": JS_URL + "/vuetify/dist/vuetify.min.css",
         "js_url": JS_URL + "/vuetify/dist/vuetify.min.js",
     },
-    "mdi-font": {"css_url": JS_URL + "/@mdi/font/css/materialdesignicons.css"}
+    "vue-apollo": {
+        "js_url": JS_URL + "/vue-apollo/dist/vue-apollo.min.js",
+    },
+    "apollo-boost": {
+        "js_url": JS_URL + "/apollo-boost/lib/bundle.cjs.js",
+    },
+    "graphql": {
+        "js_url": JS_URL + "/graphql/index.mjs",
+    },
+    "mdi-font": {"css_url": JS_URL + "/@mdi/font/css/materialdesignicons.css"},
 }
 
 merge_app_settings("ANY_JS", ANY_JS, True)
diff --git a/aleksis/core/static/js/vue/app.js b/aleksis/core/static/js/vue/app.js
index 03b4521a6..1f4d50557 100644
--- a/aleksis/core/static/js/vue/app.js
+++ b/aleksis/core/static/js/vue/app.js
@@ -38,6 +38,10 @@ const vuetify = new Vuetify({
     }
 })
 
+const apolloClient = new ApolloClient({
+  uri: JSON.parse(document.getElementById("graphql-url").textContent)
+})
+
 
 import CacheNotification from "./components/core/CacheNotification.js";
 import LanguageForm from "./components/core/LanguageForm.js";
@@ -49,6 +53,8 @@ Vue.component(MessageBox.name, MessageBox); // Load MessageBox globally as other
 
 const app = new Vue({
     el: '#app',
+    apolloProvider,
+    render: h => h(App),
     vuetify: vuetify,
     // delimiters: ["<%","%>"] // FIXME: discuss new delimiters, [[ <% [{ {[ <[ (( …
     data: () => ({
@@ -65,3 +71,9 @@ const app = new Vue({
         "sidenav-search": SidenavSearch,
     },
 })
+
+Vue.use(VueApollo)
+
+const apolloProvider = new VueApollo({
+  defaultClient: apolloClient,
+})
diff --git a/aleksis/core/templates/core/vue_base.html b/aleksis/core/templates/core/vue_base.html
index 41c09533f..6f6e97945 100644
--- a/aleksis/core/templates/core/vue_base.html
+++ b/aleksis/core/templates/core/vue_base.html
@@ -1,6 +1,6 @@
 {# -*- engine:django -*- #}
 
-{% load i18n menu_generator static sass_tags any_js rules %}
+{% load i18n menu_generator static sass_tags any_js rules html_helpers %}
 {% get_current_language as LANGUAGE_CODE %}
 {% get_available_languages as LANGUAGES %}
 
@@ -169,13 +169,13 @@
       </v-container>
     </v-main>
 
-    <v-footer app absolute inset color="primary" class="white--text">
+    <v-footer app absolute inset class="white--text">
       <v-container>
         <v-row>
           <v-col cols="12" lg="6">
             {% include "core/partials/vue_footer_menu.html" %}
           </v-col>
-          <v-col cols="12" class="text-white-darken-1">
+          <v-col cols="12" >
             <v-row>
               <v-btn plain rounded href="{% url "about_aleksis" %}" color="white">
                 {% trans "About AlekSIS® — The Free School Information System" %}
@@ -208,9 +208,15 @@
 {#{% include_js "materialize" %}#}
 {% include_js "vue" %}
 {% include_js "vuetify" %}
+<script type="module" src="{% static 'apollo-boost/lib/bundle.esm.js' %}"></script>
+<script type="module" src="{% static 'vue-apollo/dist/vue-apollo.esm.js' %}"></script>
+<script type="module" src="{% static 'graphql-tag/lib/index.js' %}"></script>
+<script type="module" src="{% static 'graphql/index.mjs' %}"></script>
 {% include_js "sortablejs" %}
 {# Fixme: das muss weg ↓ #}
 {% include_js "jquery-sortablejs" %}
+{% absolute_url "graphql" as GRAPHQL_URL %}
+{{ GRAPHQL_URL|json_script:"graphql-url" }}
 {{ request.user.person.preferences.theme__design|json_script:"design-mode" }}
 {{ request.site.preferences.theme__primary|json_script:"primary-color" }}
 {{ request.site.preferences.theme__secondary|json_script:"secondary-color" }}
-- 
GitLab