feat(components): Register Generic component globally

pull/904/head
Bastien Wirtz 2025-03-30 15:23:22 +02:00
parent 02ff6a2039
commit 234e063d2e
49 changed files with 26 additions and 186 deletions

8
.jsconfig.json Normal file
View File

@ -0,0 +1,8 @@
{
"compilerOptions": {
"paths": {
"@/*": ["./src/*"]
}
},
"exclude": ["node_modules", "dist"]
}

View File

@ -18,6 +18,6 @@ export default [
}, },
}, },
{ {
ignores: ['**/dist/**', '**/dist-ssr/**', '**/coverage/**'], ignores: ["**/dist/**", "**/dist-ssr/**", "**/coverage/**"],
}, },
]; ];

View File

@ -64,7 +64,7 @@ export default {
}); });
}, },
hasFocus: function () { hasFocus: function () {
return document.activeElement == this.$refs.search return document.activeElement == this.$refs.search;
}, },
setSearchURL: function (value) { setSearchURL: function (value) {
const url = new URL(window.location); const url = new URL(window.location);

View File

@ -1,10 +1,12 @@
<template> <template>
<component :is="component" :item="item" :proxy="proxy"></component> <Generic v-if="isGeneric" :item="item"></Generic>
<component :is="component" v-else :item="item" :proxy="proxy"></component>
</template> </template>
<script> <script>
import { defineAsyncComponent } from "vue"; import { defineAsyncComponent } from "vue";
import Generic from "./services/Generic.vue";
const defaultService = "Generic";
export default { export default {
name: "Service", name: "Service",
@ -13,12 +15,13 @@ export default {
proxy: Object, proxy: Object,
}, },
computed: { computed: {
isGeneric() {
return defaultService === (this.item.type || defaultService);
},
component() { component() {
const type = this.item.type || "Generic"; return defineAsyncComponent(
if (type === "Generic") { () => import(`./services/${this.item.type}.vue`),
return Generic; );
}
return defineAsyncComponent(() => import(`./services/${type}.vue`));
}, },
}, },
}; };

View File

@ -21,13 +21,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "AdGuardHome", name: "AdGuardHome",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -15,13 +15,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "CopyToClipboard", name: "CopyToClipboard",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -21,13 +21,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "Docuseal", name: "Docuseal",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -21,13 +21,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "Emby", name: "Emby",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -25,13 +25,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "FreshRSS", name: "FreshRSS",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -21,13 +21,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "Gitea", name: "Gitea",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -17,13 +17,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "Glances", name: "Glances",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -19,13 +19,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "Gotify", name: "Gotify",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -18,13 +18,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "Healthchecks", name: "Healthchecks",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -21,13 +21,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "HomeAssistant", name: "HomeAssistant",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -27,13 +27,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "Immich", name: "Immich",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -20,13 +20,9 @@
</template> </template>
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "Jellyfin", name: "Jellyfin",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -27,13 +27,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "Lidarr", name: "Lidarr",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -19,13 +19,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "Mealie", name: "Mealie",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -33,13 +33,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "Medusa", name: "Medusa",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -22,13 +22,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "Mylar", name: "Mylar",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -16,13 +16,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "Nextcloud", name: "Nextcloud",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -51,13 +51,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "OctoPrint", name: "OctoPrint",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -21,13 +21,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "Olivetin", name: "Olivetin",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -21,13 +21,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "OpenHAB", name: "OpenHAB",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -16,13 +16,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "Paperless", name: "Paperless",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -19,13 +19,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "PeaNUT", name: "PeaNUT",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -27,13 +27,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "PiAlert", name: "PiAlert",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -21,13 +21,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "PiHole", name: "PiHole",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -21,13 +21,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "Ping", name: "Ping",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -22,13 +22,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "Portainer", name: "Portainer",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -19,7 +19,6 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
const AlertsStatus = Object.freeze({ const AlertsStatus = Object.freeze({
firing: "firing", firing: "firing",
@ -29,9 +28,6 @@ const AlertsStatus = Object.freeze({
export default { export default {
name: "Prometheus", name: "Prometheus",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -22,13 +22,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "Prowlarr", name: "Prowlarr",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -76,13 +76,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "Proxmox", name: "Proxmox",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -27,16 +27,12 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
const V3_API = "/api/v3"; const V3_API = "/api/v3";
const LEGACY_API = "/api"; const LEGACY_API = "/api";
export default { export default {
name: "Radarr", name: "Radarr",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -27,15 +27,11 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
const API = "/api/v1"; const API = "/api/v1";
export default { export default {
name: "Readarr", name: "Readarr",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -23,8 +23,6 @@
</template> </template>
<script> <script>
import Generic from "./Generic.vue";
// Units to add to download and upload rates. // Units to add to download and upload rates.
const units = ["B", "kiB", "MiB", "GiB"]; const units = ["B", "kiB", "MiB", "GiB"];
@ -48,7 +46,6 @@ const displayRate = (rate) => {
export default { export default {
name: "RTorrent", name: "RTorrent",
components: { Generic },
props: { item: Object }, props: { item: Object },
// Properties for download, upload, torrent count and errors. // Properties for download, upload, torrent count and errors.
data: () => ({ dl: null, ul: null, count: null, error: null }), data: () => ({ dl: null, ul: null, count: null, error: null }),

View File

@ -21,13 +21,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "SABnzbd", name: "SABnzbd",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -24,13 +24,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "Scrutiny", name: "Scrutiny",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -28,16 +28,12 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
const V3_API = "/api/v3"; const V3_API = "/api/v3";
const LEGACY_API = "/api"; const LEGACY_API = "/api";
export default { export default {
name: "Sonarr", name: "Sonarr",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -15,13 +15,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "SpeedtestTracker", name: "SpeedtestTracker",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -21,13 +21,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "Tautulli", name: "Tautulli",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -28,13 +28,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "Tdarr", name: "Tdarr",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -20,16 +20,11 @@
</template> </template>
<script> <script>
import Generic from "./Generic.vue";
let currentTheme; let currentTheme;
const app = document.getElementById("app"); const app = document.getElementById("app");
export default { export default {
name: "ThemeChooser", name: "ThemeChooser",
components: {
Generic,
},
props: { props: {
item: Object, item: Object,
}, },

View File

@ -21,13 +21,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "Traefik", name: "Traefik",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -21,13 +21,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "UptimeKuma", name: "UptimeKuma",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -22,13 +22,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "WUD", name: "WUD",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -21,13 +21,9 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
export default { export default {
name: "Wallabag", name: "Wallabag",
components: {
Generic,
},
mixins: [service], mixins: [service],
props: { props: {
item: Object, item: Object,

View File

@ -28,7 +28,6 @@
<script> <script>
import service from "@/mixins/service.js"; import service from "@/mixins/service.js";
import Generic from "./Generic.vue";
const units = ["B", "KB", "MB", "GB"]; const units = ["B", "KB", "MB", "GB"];
// Take the rate in bytes and keep dividing it by 1k until the lowest // Take the rate in bytes and keep dividing it by 1k until the lowest
@ -50,7 +49,6 @@ const displayRate = (rate) => {
export default { export default {
name: "QBittorrent", name: "QBittorrent",
components: { Generic },
mixins: [service], mixins: [service],
props: { item: Object }, props: { item: Object },
data: () => ({ dl: null, ul: null, count: null, error: null }), data: () => ({ dl: null, ul: null, count: null, error: null }),

View File

@ -3,9 +3,12 @@ import { createApp, h } from "vue";
import App from "./App.vue"; import App from "./App.vue";
const app = createApp(App); const app = createApp(App);
import Generic from "./components/services/Generic.vue";
app.component("DynamicStyle", (_props, context) => { app
return h("style", {}, context.slots); .component("Generic", Generic)
}); .component("DynamicStyle", (_props, context) => {
return h("style", {}, context.slots);
});
app.mount("#app-mount"); app.mount("#app-mount");