Skip to content
Snippets Groups Projects
Verified Commit f81d961c authored by Jonathan Weth's avatar Jonathan Weth :keyboard:
Browse files

Merge branch '759-finalise-vuetify-app-as-spa' of...

Merge branch '759-finalise-vuetify-app-as-spa' of edugit.org:AlekSIS/official/AlekSIS-Core into 759-finalise-vuetify-app-as-spa
parents 1b0442d9 22b5ae14
No related branches found
No related tags found
2 merge requests!1123Resolve "Finalise Vuetify app as SPA",!1066Translations update from Weblate
Pipeline #105277 failed
......@@ -239,45 +239,7 @@ import gqlWhoAmI from "./whoAmI.graphql";
import gqlMessages from "./messages.graphql";
import gqlSystemProperties from "./systemProperties.graphql";
import gqlCustomMenu from "./customMenu.graphql";
function buildMenu(routes, menuKey) {
let menu = {};
// Top-level entries
for (const route of routes) {
if (route.name && route.meta && route.meta[menuKey] && !route.parent) {
let menuItem = {
...route.meta,
name: route.name,
path: route.path,
subMenu: [],
};
menu[menuItem.name] = menuItem;
}
}
// Sub menu entries
for (const route of routes) {
if (
route.name &&
route.meta &&
route.meta[menuKey] &&
route.parent &&
route.parent.name &&
route.parent.name in menu
) {
let menuItem = {
...route.meta,
name: route.name,
path: route.path,
subMenu: [],
};
menu[route.parent.name].subMenu.push(menuItem);
}
}
return Object.values(menu);
}
import gqlGlobalPermissions from "./globalPermissions.graphql";
export default {
data() {
......@@ -288,14 +250,65 @@ export default {
systemProperties: null,
messages: null,
footerMenu: null,
menuPermissions: null,
menuPermissionNames: [],
sideNavMenu: null,
accountMenu: null,
};
},
computed: {
sideNavMenu() {
return buildMenu(this.$router.getRoutes(), "inMenu");
methods: {
generateMenu() {
let permArray = [];
for (const route of this.$router.getRoutes()) {
if (route.meta && route.meta["permission"]) {
permArray.push(route.meta["permission"]);
};
}
this.$data.menuPermissionNames = permArray;
this.$data.accountMenu = this.buildMenu(this.$router.getRoutes(), "inAccountMenu");
this.$data.sideNavMenu = this.buildMenu(this.$router.getRoutes(), "inMenu");
},
accountMenu() {
return buildMenu(this.$router.getRoutes(), "inAccountMenu");
buildMenu(routes, menuKey) {
let menu = {};
// Top-level entries
for (const route of routes) {
if (route.name && route.meta && route.meta[menuKey] && !route.parent) {
let menuItem = {
...route.meta,
name: route.name,
path: route.path,
subMenu: [],
};
menu[menuItem.name] = menuItem;
}
}
// Sub menu entries
for (const route of routes) {
if (
route.name &&
route.meta &&
route.meta[menuKey] &&
route.parent &&
route.parent.name &&
route.parent.name in menu
) {
let menuItem = {
...route.meta,
name: route.name,
path: route.path,
subMenu: [],
};
menu[route.parent.name].subMenu.push(menuItem);
}
}
return Object.values(menu);
},
},
apollo: {
......@@ -321,6 +334,15 @@ export default {
},
update: data => data.customMenuByName
},
menuPermissions: {
query: gqlGlobalPermissions,
variables() {
return {
permissions: this.$data.menuPermissionNames,
};
},
update: data => data.globalPermissionsByName
},
},
watch: {
systemProperties: function (newProperties) {
......
query ($permissions: [String]!){
globalPermissionsByName(permissions: $permissions) {
name
result
}
}
......@@ -19,6 +19,7 @@ from .group import GroupType # noqa
from .installed_apps import AppType
from .message import MessageType
from .notification import MarkNotificationReadMutation, NotificationType
from .permissions import GlobalPermissionType
from .person import PersonMutation, PersonType
from .search import SearchResultType
from .system_properties import SystemPropertiesType
......@@ -50,6 +51,8 @@ class Query(graphene.ObjectType):
custom_menu_by_name = graphene.Field(CustomMenuType, name=graphene.String())
global_permissions_by_name = graphene.List(GlobalPermissionType, permissions=graphene.List(graphene.String))
def resolve_notifications(root, info, **kwargs):
return NotificationType.get_queryset(
Notification.objects.all().order_by("-created"),
......@@ -114,6 +117,10 @@ class Query(graphene.ObjectType):
def resolve_custom_menu_by_name(root, info, name, **kwargs):
return CustomMenu.get_default(name)
def resolve_global_permissions_by_name(root, info, permissions, **kwargs):
return [{"name": permission_name, "result": info.context.user.has_perm(permission_name)} for permission_name in
permissions]
class Mutation(graphene.ObjectType):
update_person = PersonMutation.Field()
......
import graphene
class GlobalPermissionType(graphene.ObjectType):
name = graphene.String()
result = graphene.Boolean()
......@@ -21,7 +21,7 @@
<body>
<main id="app">
<app></app>
<app ref="aleksisApp"></app>
</main>
{% vite_asset 'aleksis/core/assets/index.js' %}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment