diff --git a/aleksis/core/frontend/app/apollo.js b/aleksis/core/frontend/app/apollo.js index 10f63e2d5e48e0383af2d07fdd4f33259ee5a119..c14ba118d0c4d14558f23a747a98b207067ff7b2 100644 --- a/aleksis/core/frontend/app/apollo.js +++ b/aleksis/core/frontend/app/apollo.js @@ -8,8 +8,6 @@ import { RetryLink } from "@/apollo-link-retry"; import { persistCache, LocalStorageWrapper } from "@/apollo3-cache-persist"; import { InMemoryCache } from "@/apollo-cache-inmemory"; -import gql from "@/graphql-tag"; - // Cache for GraphQL query results in memory and persistent across sessions const cache = new InMemoryCache(); await persistCache({ @@ -63,7 +61,12 @@ const apolloOpts = { error: ({ graphQLErrors, networkError }, vm) => { if (graphQLErrors) { for (let err of graphQLErrors) { - console.error("GraphQL query error in query", err.path.join(".") , ":", err.message); + console.error( + "GraphQL query error in query", + err.path.join("."), + ":", + err.message + ); } // Add a snackbar on all errors returned by the GraphQL endpoint // If App is offline, don't add snackbar since only the ping query is active diff --git a/aleksis/core/frontend/components/app/AccountMenu.vue b/aleksis/core/frontend/components/app/AccountMenu.vue index 4e140982b673f35b60073f6e282c549e73811cfa..70e8c52fa770b743c138c6212f296b223be83340 100644 --- a/aleksis/core/frontend/components/app/AccountMenu.vue +++ b/aleksis/core/frontend/components/app/AccountMenu.vue @@ -66,6 +66,7 @@ export default { accountMenu: { type: Array, required: false, + default: () => [], }, systemProperties: { type: Object, diff --git a/aleksis/core/frontend/components/app/App.vue b/aleksis/core/frontend/components/app/App.vue index 37329222811eb567e857c4fa4a4155c73849a67a..c86e5910a1797bc675973d198f80ce9bd4116c9c 100644 --- a/aleksis/core/frontend/components/app/App.vue +++ b/aleksis/core/frontend/components/app/App.vue @@ -116,10 +116,7 @@ <div v-if="footerMenu && footerMenu.items"> <v-card-text class="pa-0"> <v-container class="px-6"> - <v-row - justify="center" - no-gutters - > + <v-row justify="center" no-gutters> <v-btn v-for="menu_item in footerMenu.items" :key="menu_item.name" @@ -186,7 +183,7 @@ :snackbar-item="item" /> <v-snackbar v-model="needRefresh" v-if="!refreshDismissed" timeout="-1"> - {{ $t("service_worker.new_version_available") }} + {{ $t("service_worker.new_version_available") }} <template #action="{ attrs }"> <v-btn color="primary" text @click="updateServiceWorker()"> diff --git a/aleksis/core/frontend/components/app/ErrorPage.vue b/aleksis/core/frontend/components/app/ErrorPage.vue index 7de45dac644f794317d754d96f4020d5b54a9e94..abbf6a6cd828e5673c999032cc285c83b71d6a0b 100644 --- a/aleksis/core/frontend/components/app/ErrorPage.vue +++ b/aleksis/core/frontend/components/app/ErrorPage.vue @@ -16,9 +16,15 @@ export default { name: "ErrorPage", props: { - shortErrorMessageKey: String, - longErrorMessageKey: String, - } + shortErrorMessageKey: { + type: String, + required: true, + }, + longErrorMessageKey: { + type: String, + required: true, + }, + }, }; </script> diff --git a/aleksis/core/frontend/components/app/SideNav.vue b/aleksis/core/frontend/components/app/SideNav.vue index 21185b2a95a33c0dc3d0ae3cd62c977f40c0aebd..c9c06c88194f83ef665e2888cf6b33d684dc2efe 100644 --- a/aleksis/core/frontend/components/app/SideNav.vue +++ b/aleksis/core/frontend/components/app/SideNav.vue @@ -86,7 +86,7 @@ export default { SidenavSearch, }, props: { - sideNavMenu: { type: Array, required: false }, + sideNavMenu: { type: Array, required: false, default: null }, systemProperties: { type: Object, required: true }, value: { type: Boolean, required: true }, }, diff --git a/aleksis/core/frontend/components/generic/ObjectOverview.vue b/aleksis/core/frontend/components/generic/ObjectOverview.vue index 3f400d6bbfa0fcd82d237dcb7e5efd4f81b13f39..d962243e988167f266cf003fd81b01c6e41a0454 100644 --- a/aleksis/core/frontend/components/generic/ObjectOverview.vue +++ b/aleksis/core/frontend/components/generic/ObjectOverview.vue @@ -3,15 +3,14 @@ <slot name="loading" v-if="$apollo.queries.object.loading"></slot> <slot v-else-if="object" v-bind="object"></slot> <error-page - v-else - :shortErrorMessageKey="shortErrorMessageKey" - :longErrorMessageKey="longErrorMessageKey" + v-else + :short-error-message-key="shortErrorMessageKey" + :long-error-message-key="longErrorMessageKey" /> </div> </template> <script> - export default { name: "ObjectOverview", props: { @@ -37,9 +36,11 @@ export default { methods: { getTitleAttr(obj) { let tmpObj = obj; - this.titleAttr.split(".").forEach((attr) => {tmpObj = tmpObj[attr]}) + this.titleAttr.split(".").forEach((attr) => { + tmpObj = tmpObj[attr]; + }); return tmpObj; - } + }, }, apollo: { object() { @@ -53,18 +54,16 @@ export default { } return {}; }, - result({data}) { + result({ data }) { if (data && data.object) { this.$root.$setPageTitle(this.getTitleAttr(data.object)); } }, - error() {} + error() {}, }; }, }, -} +}; </script> -<style scoped> - -</style> +<style scoped></style> diff --git a/aleksis/core/frontend/components/person/PersonOverview.vue b/aleksis/core/frontend/components/person/PersonOverview.vue index 5171a22f0ed594bb849d82d8bab671db7e1207ec..2bddfe2cba739e4f21d09cb265dcbfe5ee4cfdfe 100644 --- a/aleksis/core/frontend/components/person/PersonOverview.vue +++ b/aleksis/core/frontend/components/person/PersonOverview.vue @@ -1,8 +1,5 @@ <template> - <object-overview - :query="query" - title-attr="fullName" - > + <object-overview :query="query" title-attr="fullName"> <template #loading> <v-skeleton-loader type="article" /> @@ -12,7 +9,7 @@ </v-col> </v-row> </template> - <template v-slot="person"> + <template #default="person"> <detail-view> <template #avatarContent> <person-avatar-clickbox :id="id" /> @@ -218,7 +215,7 @@ export default { data() { return { query: gqlPersonOverview, - } + }; }, props: { id: { diff --git a/aleksis/core/frontend/index.js b/aleksis/core/frontend/index.js index 29b41db349774e51639c3f18643d3292abfd5a27..ef66ecf6576ed1d7d4581639a65b5607c7a75dc5 100644 --- a/aleksis/core/frontend/index.js +++ b/aleksis/core/frontend/index.js @@ -13,7 +13,9 @@ import VueApollo from "@/vue-apollo"; import AleksisVue from "./plugins/aleksis.js"; console.info("🎒 Welcome to AlekSIS®, the Free School Information System!"); -console.info("AlekSIS® is Free Software, licenced under the EUPL, version 1.2 or later, by Teckids e.V. (Bonn, Germany)"); +console.info( + "AlekSIS® is Free Software, licenced under the EUPL, version 1.2 or later, by Teckids e.V. (Bonn, Germany)" +); // Install the AleksisVue plugin first and let it do early setup Vue.use(AleksisVue); diff --git a/aleksis/core/frontend/plugins/aleksis.js b/aleksis/core/frontend/plugins/aleksis.js index 9b2207585600a6154fcb8aaf01f1e07c25e7d4c8..8c221c6d62953206b501aa7c7d949e808d2e63cd 100644 --- a/aleksis/core/frontend/plugins/aleksis.js +++ b/aleksis/core/frontend/plugins/aleksis.js @@ -29,7 +29,7 @@ AleksisVue.install = function (Vue) { */ Vue.$configureSentry = function (router) { if (Vue.$aleksisFrontendSettings.sentry.enabled) { - import("../app/sentry.js").then(mod => { + import("../app/sentry.js").then((mod) => { mod.default.Sentry.init({ Vue, dsn: Vue.$aleksisFrontendSettings.sentry.dsn, @@ -39,7 +39,8 @@ AleksisVue.install = function (Vue) { logError: true, integrations: [ new mod.default.BrowserTracing({ - routingInstrumentation: Sentry.vueRouterInstrumentation(router), + routingInstrumentation: + mod.default.Sentry.vueRouterInstrumentation(router), }), ], }); @@ -72,7 +73,7 @@ AleksisVue.install = function (Vue) { Vue.component("ButtonMenu", () => import("../components/generic/ButtonMenu.vue") ); - Vue.component("ErrorPage", () => import("../components/app/ErrorPage.vue")) + Vue.component("ErrorPage", () => import("../components/app/ErrorPage.vue")); }; /** diff --git a/aleksis/core/frontend/routes.js b/aleksis/core/frontend/routes.js index bf8ec6be934fa7675ed2ef1aaf33f463d5fa150b..b3ca0df952023bd1759920e485539693d615d899 100644 --- a/aleksis/core/frontend/routes.js +++ b/aleksis/core/frontend/routes.js @@ -782,7 +782,7 @@ const routes = [ // and generates importing code at bundle time. for (const [appName, appRoutes] of Object.entries(appObjects)) { routes.push({ - ...appRoutes, + ...appRoutes, path: `/app/${appName}`, component: () => import("./components/Parent.vue"), name: `${appName}`, @@ -794,7 +794,10 @@ routes.push({ path: "/*", component: () => import("./components/app/ErrorPage.vue"), name: "core.error404", - props: { shortErrorMessageKey: "network_errors.error_404", longErrorMessageKey: "network_errors.page_not_found" }, + props: { + shortErrorMessageKey: "network_errors.error_404", + longErrorMessageKey: "network_errors.page_not_found", + }, }); export default routes; diff --git a/aleksis/core/tests/browser/test_selenium.py b/aleksis/core/tests/browser/test_selenium.py index 696fb72c9bf179302ee7f00fc183c9908f10c53a..e35fc5bd59eb83527c1efc3649a3109b894ebd05 100644 --- a/aleksis/core/tests/browser/test_selenium.py +++ b/aleksis/core/tests/browser/test_selenium.py @@ -83,7 +83,7 @@ class SeleniumTests(SeleniumTestCase): # Should redirect away from login page and not put up an alert about wrong credentials assert "Please enter a correct username and password." not in self.selenium.page_source - # Deactivated for now as Selenium test infrastructure needs a complete rethinking + # Deactivated for now as Selenium test infrastructure needs a complete rethinking # because of the new Vue frontend # def test_pdf_generation(self): # self._login()