diff --git a/.env.dist b/.env.dist index 6610908ad8..93b6c07234 100644 --- a/.env.dist +++ b/.env.dist @@ -26,6 +26,8 @@ APP_ENCRYPT_METHOD='{{APP_ENCRYPT_METHOD}}' APP_LOCALE='en_US' +APP_CUSTOM_VUE_TEMPLATE='0' + APP_MULTIPLE_ACCESS_URL='' GOOGLE_MAPS_API_KEY='' diff --git a/assets/vue/App.vue b/assets/vue/App.vue index d7185423f1..f56895a5ae 100644 --- a/assets/vue/App.vue +++ b/assets/vue/App.vue @@ -52,6 +52,8 @@ import Toast from "primevue/toast" import { useNotification } from "./composables/notification" import { useLocale } from "./composables/locale" import { useI18n } from "vue-i18n" +import { customVueTemplateEnabled } from "./config/env" +import CustomDashboardLayout from "../../var/vue_templates/components/layout/DashboardLayout.vue" const apolloClient = new ApolloClient({ link: createHttpLink({ @@ -73,6 +75,10 @@ const layout = computed(() => { return "EmptyLayout" } + if (customVueTemplateEnabled) { + return CustomDashboardLayout + } + return `${router.currentRoute.value.meta.layout ?? "Dashboard"}Layout` }) diff --git a/assets/vue/config/env.js b/assets/vue/config/env.js new file mode 100644 index 0000000000..d25db99644 --- /dev/null +++ b/assets/vue/config/env.js @@ -0,0 +1 @@ +export const customVueTemplateEnabled = '1' === ENV_CUSTOM_VUE_TEMPLATE diff --git a/assets/vue/pages/Index.vue b/assets/vue/pages/AppIndex.vue similarity index 100% rename from assets/vue/pages/Index.vue rename to assets/vue/pages/AppIndex.vue diff --git a/assets/vue/router/index.js b/assets/vue/router/index.js index 368dcbbd80..449845fb64 100644 --- a/assets/vue/router/index.js +++ b/assets/vue/router/index.js @@ -27,7 +27,8 @@ import MyCoursesLayout from "../layouts/MyCourses.vue" import CourseHome from "../views/course/CourseHome.vue" -import Index from "../pages/Index.vue" +import AppIndex from "../pages/AppIndex.vue" +import CustomAppIndex from "../../../var/vue_templates/pages/AppIndex.vue" import Home from "../pages/Home.vue" import Login from "../pages/Login.vue" import Faq from "../pages/Faq.vue" @@ -38,6 +39,7 @@ import courseService from "../services/courseService" import catalogueCourses from "./cataloguecourses" import catalogueSessions from "./cataloguesessions" +import { customVueTemplateEnabled } from "../config/env" const router = createRouter({ history: createWebHistory(), @@ -45,7 +47,7 @@ const router = createRouter({ { path: "/", name: "Index", - component: Index, + component: customVueTemplateEnabled ? CustomAppIndex : AppIndex, meta: { requiresAuth: false, showBreadcrumb: false, diff --git a/var/vue_templates/.gitkeep b/var/vue_templates/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/var/vue_templates/components/SidebarLogin.vue b/var/vue_templates/components/SidebarLogin.vue new file mode 100644 index 0000000000..639b7c71d2 --- /dev/null +++ b/var/vue_templates/components/SidebarLogin.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/var/vue_templates/components/layout/DashboardLayout.vue b/var/vue_templates/components/layout/DashboardLayout.vue new file mode 100644 index 0000000000..53a20421de --- /dev/null +++ b/var/vue_templates/components/layout/DashboardLayout.vue @@ -0,0 +1,24 @@ + + + diff --git a/var/vue_templates/components/layout/SidebarNotLoggedIn.vue b/var/vue_templates/components/layout/SidebarNotLoggedIn.vue new file mode 100644 index 0000000000..536c6962a3 --- /dev/null +++ b/var/vue_templates/components/layout/SidebarNotLoggedIn.vue @@ -0,0 +1,144 @@ + + + diff --git a/var/vue_templates/components/layout/Topbar.vue b/var/vue_templates/components/layout/Topbar.vue new file mode 100644 index 0000000000..1a1d21e709 --- /dev/null +++ b/var/vue_templates/components/layout/Topbar.vue @@ -0,0 +1,15 @@ + + + diff --git a/var/vue_templates/components/layout/TopbarNotLoggedIn.vue b/var/vue_templates/components/layout/TopbarNotLoggedIn.vue new file mode 100644 index 0000000000..dce861bdd8 --- /dev/null +++ b/var/vue_templates/components/layout/TopbarNotLoggedIn.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/var/vue_templates/pages/AppIndex.vue b/var/vue_templates/pages/AppIndex.vue new file mode 100644 index 0000000000..541c7abc40 --- /dev/null +++ b/var/vue_templates/pages/AppIndex.vue @@ -0,0 +1,39 @@ + + + diff --git a/webpack.config.js b/webpack.config.js index b27eaf0712..8c90fd6e78 100755 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,4 +1,8 @@ const Encore = require("@symfony/webpack-encore") +const dotenv = require('dotenv'); +const webpack = require('webpack'); + +const env = dotenv.config() if (!Encore.isRuntimeEnvironmentConfigured()) { Encore.configureRuntimeEnvironment(process.env.NODE_ENV || "dev") @@ -99,6 +103,11 @@ Encore.setOutputPath("public/build/") to: 'libs/mathjax/MathJax.js' },*/ ]) + .addPlugin( + new webpack.DefinePlugin({ + 'ENV_CUSTOM_VUE_TEMPLATE': JSON.stringify(env.parsed?.APP_CUSTOM_VUE_TEMPLATE), + }) + ) Encore.copyFiles({ from: "./node_modules/mediaelement/build",