From af39414a06736b85c2d569849519e633f0f697c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Fri, 6 May 2022 16:46:51 +0200 Subject: [PATCH] Web: introduce VueRouter and split up into more components Most of the code moved from `App.vue` to `views/JobsView.vue`. Notification bar has its own component, and there are placeholder "views" for Workers and Settings pages. There is still some clunky handling of updates via SocketIO, as those are a mix of job-specific and global (like SocketIO reconnection events). The advantage of the current approach is that SocketIO connections are closed when you leave the Jobs page, and reopened when you enter the Workers page. My gut feeling says this is nice because it ensures that all SocketIO connection-specific things are cleaned up when you navigate. --- web/app/src/App.vue | 142 ++------------------- web/app/src/components/NotificationBar.vue | 14 ++ web/app/src/main.js | 2 + web/app/src/router/index.js | 27 ++++ web/app/src/urls.js | 1 + web/app/src/views/JobsView.vue | 139 ++++++++++++++++++++ web/app/src/views/SettingsView.vue | 28 ++++ web/app/src/views/WorkersView.vue | 45 +++++++ 8 files changed, 268 insertions(+), 130 deletions(-) create mode 100644 web/app/src/components/NotificationBar.vue create mode 100644 web/app/src/router/index.js create mode 100644 web/app/src/views/JobsView.vue create mode 100644 web/app/src/views/SettingsView.vue create mode 100644 web/app/src/views/WorkersView.vue diff --git a/web/app/src/App.vue b/web/app/src/App.vue index 4fb0950f..1e7b6dd4 100644 --- a/web/app/src/App.vue +++ b/web/app/src/App.vue @@ -3,9 +3,15 @@ {{ flamencoName }} @@ -13,39 +19,14 @@ version: {{ flamencoVersion }} -
- -
-
- - -
-
- -
-
- {{ notifs.last.msg }} - -
+ diff --git a/web/app/src/main.js b/web/app/src/main.js index 7ad6cbfe..6253d57e 100644 --- a/web/app/src/main.js +++ b/web/app/src/main.js @@ -2,6 +2,7 @@ import { createApp } from 'vue' import { createPinia } from 'pinia' import App from '@/App.vue' +import router from '@/router/index' // Ensure Tabulator can find `luxon`, which it needs for sorting by // date/time/datetime. @@ -15,4 +16,5 @@ const app = createApp(App) const pinia = createPinia() app.use(pinia) +app.use(router) app.mount('#app') diff --git a/web/app/src/router/index.js b/web/app/src/router/index.js new file mode 100644 index 00000000..5549590d --- /dev/null +++ b/web/app/src/router/index.js @@ -0,0 +1,27 @@ +import { createRouter, createWebHistory } from 'vue-router' + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: [ + { + path: '/', + name: 'jobs', + // route level code-splitting + // this generates a separate chunk (ViewName.[hash].js) for this route + // which is lazy-loaded when the route is visited. + component: () => import('../views/JobsView.vue') + }, + { + path: '/workers', + name: 'workers', + component: () => import('../views/WorkersView.vue') + }, + { + path: '/settings', + name: 'settings', + component: () => import('../views/SettingsView.vue') + } + ] +}) + +export default router diff --git a/web/app/src/urls.js b/web/app/src/urls.js index a25091a4..8bfbd283 100644 --- a/web/app/src/urls.js +++ b/web/app/src/urls.js @@ -1,6 +1,7 @@ let url = new URL(window.location.href); url.port = "8080"; +url.pathname = "/"; const flamencoAPIURL = url.href; url.protocol = "ws:"; diff --git a/web/app/src/views/JobsView.vue b/web/app/src/views/JobsView.vue new file mode 100644 index 00000000..9a5fecac --- /dev/null +++ b/web/app/src/views/JobsView.vue @@ -0,0 +1,139 @@ + + + diff --git a/web/app/src/views/SettingsView.vue b/web/app/src/views/SettingsView.vue new file mode 100644 index 00000000..f72f028d --- /dev/null +++ b/web/app/src/views/SettingsView.vue @@ -0,0 +1,28 @@ + + + diff --git a/web/app/src/views/WorkersView.vue b/web/app/src/views/WorkersView.vue new file mode 100644 index 00000000..1fd5e379 --- /dev/null +++ b/web/app/src/views/WorkersView.vue @@ -0,0 +1,45 @@ + + +