From f8cf26eee34974cbec5867eb44f29a9bc2cdd8f2 Mon Sep 17 00:00:00 2001 From: marcsello Date: Sat, 12 Jun 2021 23:36:23 +0200 Subject: [PATCH] van fej --- .env | 1 + package-lock.json | 11 +++++-- package.json | 1 + src/components/GlobalDeviceBuzgerator.vue | 36 +++++++++++++++++--- src/components/SingleDeviceBuzgerator.vue | 36 ++++++++++++++++++-- src/main.js | 40 +++++++++++++++++++++++ 6 files changed, 115 insertions(+), 10 deletions(-) create mode 100644 .env diff --git a/.env b/.env new file mode 100644 index 0000000..b2d4442 --- /dev/null +++ b/.env @@ -0,0 +1 @@ +VUE_APP_API_LOCATION=https://birb.k8s.kmlabz.com/ \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index f10a2a9..756709b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2661,6 +2661,14 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, + "axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "requires": { + "follow-redirects": "^1.10.0" + } + }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", @@ -5781,8 +5789,7 @@ "follow-redirects": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", - "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", - "dev": true + "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==" }, "for-in": { "version": "1.0.2", diff --git a/package.json b/package.json index 7729742..425b952 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "lint": "vue-cli-service lint" }, "dependencies": { + "axios": "^0.21.1", "bootstrap": "^4.5.2", "bootstrap-vue": "^2.16.0", "core-js": "^3.6.5", diff --git a/src/components/GlobalDeviceBuzgerator.vue b/src/components/GlobalDeviceBuzgerator.vue index fbbbc97..dc39ac4 100644 --- a/src/components/GlobalDeviceBuzgerator.vue +++ b/src/components/GlobalDeviceBuzgerator.vue @@ -1,23 +1,49 @@ diff --git a/src/components/SingleDeviceBuzgerator.vue b/src/components/SingleDeviceBuzgerator.vue index cf7ab8b..b1a128a 100644 --- a/src/components/SingleDeviceBuzgerator.vue +++ b/src/components/SingleDeviceBuzgerator.vue @@ -8,9 +8,9 @@ Could not read device data! - Bring online - Bring offline - Manual alert + Bring online + Bring offline + Manual alert @@ -23,10 +23,40 @@ export default { type: String } }, + data() { + return { + actionPending: false + } + }, computed: { cardTitle() { return `Device: ${this.device_id}` } + }, + methods: { + performPostAndEverything(url) { + this.actionPending = true + this.$api.post(url).then(() => this.actionPending = false).catch((error) => { + if (!error.response) { + // network error happened + this.$showToast("Some network error happened.\nCheck logs!") + } else { + // server returned bruh moment + this.$showToast(`The server returned error: ${error.response.status} ${error.response.statusText}\n${error.response.data}`) + } + + this.actionPending = false + }); + }, + bringOffline() { + this.performPostAndEverything(`/devices/${this.device_id}/offline`) + }, + bringOnline() { + this.performPostAndEverything(`/devices/${this.device_id}/online`) + }, + doManualAlert() { + this.performPostAndEverything(`/devices/${this.device_id}/alert`) + } } } diff --git a/src/main.js b/src/main.js index cbf54c0..2235c48 100644 --- a/src/main.js +++ b/src/main.js @@ -3,6 +3,8 @@ import App from './App.vue' import router from './router' import store from './store' +import axios from 'axios' + import { BootstrapVue, IconsPlugin } from 'bootstrap-vue' import 'bootstrap/dist/css/bootstrap.css' @@ -13,6 +15,44 @@ Vue.use(IconsPlugin) Vue.config.productionTip = false +Vue.prototype.$api = axios.create({ + baseURL: process.env.VUE_APP_API_LOCATION +}); + +Vue.prototype.$showToast = function (text, type = 'error', local=true) { + + let options = {} + switch (type) { + case "error": + options = { + title: "Error!", + variant: "danger" + } + break; + case "user_error": + options = { + title: "Oopsie woopsie", + variant: "warning" + } + break; + case "success": + options = { + title: "Success!", + variant: "success" + } + break; + } + + const bvToast = local ? this.$bvToast : this.$root.$bvToast + + bvToast.toast(text, { + ...options, + toaster: 'b-toaster-top-right', + solid: true, + appendToast: false + }) +} + new Vue({ router, store,