From 15ebf7c1c3e018c5889faddbca7c159b8aa275e3 Mon Sep 17 00:00:00 2001
From: Hangzhi Yu <hangzhi@protonmail.com>
Date: Thu, 26 Jan 2023 12:51:04 +0100
Subject: [PATCH] Add SPA support

---
 CHANGELOG.rst                                 |  5 ++++
 aleksis/apps/matrix/frontend/index.js         | 27 +++++++++++++++++++
 aleksis/apps/matrix/frontend/messages/de.json |  8 ++++++
 aleksis/apps/matrix/frontend/messages/en.json |  8 ++++++
 aleksis/apps/matrix/views.py                  |  4 +++
 5 files changed, 52 insertions(+)
 create mode 100644 aleksis/apps/matrix/frontend/index.js
 create mode 100644 aleksis/apps/matrix/frontend/messages/de.json
 create mode 100644 aleksis/apps/matrix/frontend/messages/en.json

diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index d21a88a..32f9135 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -9,6 +9,11 @@ and this project adheres to `Semantic Versioning`_.
 Unreleased
 ----------
 
+Added
+~~~~~
+
+* Add SPA support.
+
 `1.0`_ - 2022-06-25
 -------------------
 
diff --git a/aleksis/apps/matrix/frontend/index.js b/aleksis/apps/matrix/frontend/index.js
new file mode 100644
index 0000000..0c46c2e
--- /dev/null
+++ b/aleksis/apps/matrix/frontend/index.js
@@ -0,0 +1,27 @@
+export default
+  {
+    meta: {
+      inMenu: true,
+      titleKey: "matrix.menu_title",
+      icon: "mdi-forum-outline",
+    },
+    props: {
+      byTheGreatnessOfTheAlmightyAleksolotlISwearIAmWorthyOfUsingTheLegacyBaseTemplate: true,
+    },
+    children: [
+      {
+        path: "rooms/",
+        component: () => import("aleksis.core/components/LegacyBaseTemplate.vue"),
+        name: "matrix.groupsAndRooms",
+        meta: {
+          inMenu: true,
+          titleKey: "matrix.rooms.menu_title",
+          icon: "mdi-account-group-outline",
+          permission: "matrix.view_matrixrooms_rule",
+        },
+        props: {
+          byTheGreatnessOfTheAlmightyAleksolotlISwearIAmWorthyOfUsingTheLegacyBaseTemplate: true,
+        },
+      },
+    ],
+  }
diff --git a/aleksis/apps/matrix/frontend/messages/de.json b/aleksis/apps/matrix/frontend/messages/de.json
new file mode 100644
index 0000000..fcede48
--- /dev/null
+++ b/aleksis/apps/matrix/frontend/messages/de.json
@@ -0,0 +1,8 @@
+{
+  "matrix": {
+    "menu_title": "Matrix",
+    "rooms": {
+      "menu_title": "Gruppen und Räume"
+    }
+  }
+}
diff --git a/aleksis/apps/matrix/frontend/messages/en.json b/aleksis/apps/matrix/frontend/messages/en.json
new file mode 100644
index 0000000..d119675
--- /dev/null
+++ b/aleksis/apps/matrix/frontend/messages/en.json
@@ -0,0 +1,8 @@
+{
+  "matrix": {
+    "menu_title": "Matrix",
+    "rooms": {
+      "menu_title": "Groups and Rooms"
+    }
+  }
+}
diff --git a/aleksis/apps/matrix/views.py b/aleksis/apps/matrix/views.py
index f3f9dd9..53cebb5 100644
--- a/aleksis/apps/matrix/views.py
+++ b/aleksis/apps/matrix/views.py
@@ -1,3 +1,5 @@
+from django.utils.decorators import method_decorator
+
 from django_filters.views import FilterView
 from django_tables2 import SingleTableMixin
 from guardian.shortcuts import get_objects_for_user
@@ -6,9 +8,11 @@ from rules.contrib.views import PermissionRequiredMixin
 from aleksis.apps.matrix.filters import GroupMatrixRoomFilter
 from aleksis.apps.matrix.forms import GroupMatrixRoomActionForm
 from aleksis.apps.matrix.tables import GroupsMatrixRoomsTable
+from aleksis.core.decorators import pwa_cache
 from aleksis.core.models import Group
 
 
+@method_decorator(pwa_cache, name="dispatch")
 class MatrixRoomListView(PermissionRequiredMixin, SingleTableMixin, FilterView):
     """Overview about groups and their Matrix rooms."""
 
-- 
GitLab