Add lan_address support in RPC and container management
- Introduced a new `lan_address` field in the RPC response for containers, allowing for easier access to UI launch URLs based on container names. - Updated the `ContainerStatus` struct to include `lan_address`, ensuring it is initialized and passed through relevant methods in both Podman and Docker runtimes. - Enhanced the UI store to compute enriched bundled apps with their respective `lan_address`, improving the user experience for accessing containerized applications. - Modified the `ContainerApps` view to utilize the enriched data, ensuring the correct launch URLs are displayed for bundled apps.
This commit is contained in:
@@ -96,6 +96,17 @@ export const useContainerStore = defineStore('container', () => {
|
||||
return container.state
|
||||
})
|
||||
|
||||
// Get enriched bundled apps with runtime data (like lan_address)
|
||||
const enrichedBundledApps = computed(() => {
|
||||
return BUNDLED_APPS.map(app => {
|
||||
const container = getContainerForApp.value(app.id)
|
||||
return {
|
||||
...app,
|
||||
lan_address: container?.lan_address
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
// Actions
|
||||
async function fetchContainers() {
|
||||
loading.value = true
|
||||
@@ -240,6 +251,7 @@ export const useContainerStore = defineStore('container', () => {
|
||||
getContainerForApp,
|
||||
isAppLoading,
|
||||
getAppState,
|
||||
enrichedBundledApps,
|
||||
// Actions
|
||||
fetchContainers,
|
||||
fetchHealthStatus,
|
||||
|
||||
@@ -184,13 +184,13 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { onMounted, computed } from 'vue'
|
||||
import { useContainerStore, BUNDLED_APPS, type BundledApp } from '@/stores/container'
|
||||
import { useContainerStore, type BundledApp } from '@/stores/container'
|
||||
import ContainerStatus from '@/components/ContainerStatus.vue'
|
||||
|
||||
const store = useContainerStore()
|
||||
|
||||
// Expose BUNDLED_APPS to the template (prevents tree-shaking)
|
||||
const bundledApps = BUNDLED_APPS
|
||||
// Use enriched bundled apps with runtime data (like lan_address)
|
||||
const bundledApps = computed(() => store.enrichedBundledApps)
|
||||
|
||||
// Get current host for launch URLs
|
||||
const currentHost = computed(() => window.location.hostname)
|
||||
@@ -208,14 +208,14 @@ onMounted(async () => {
|
||||
|
||||
// Containers that aren't bundled apps
|
||||
const otherContainers = computed(() => {
|
||||
const bundledIds = bundledApps.map(a => a.id)
|
||||
const bundledIds = bundledApps.value.map(a => a.id)
|
||||
return store.containers.filter(c => {
|
||||
const name = c.name.toLowerCase()
|
||||
return !bundledIds.some(id => name.includes(id))
|
||||
})
|
||||
})
|
||||
|
||||
const hasAnyApps = computed(() => bundledApps.length > 0 || store.containers.length > 0)
|
||||
const hasAnyApps = computed(() => bundledApps.value.length > 0 || store.containers.length > 0)
|
||||
|
||||
function extractAppName(containerName: string): string {
|
||||
return containerName
|
||||
@@ -276,6 +276,12 @@ function getStatusText(appId: string): string {
|
||||
}
|
||||
|
||||
function getLaunchUrl(app: BundledApp): string {
|
||||
// Prefer lan_address from backend (for apps with custom UIs)
|
||||
if (app.lan_address) {
|
||||
return app.lan_address
|
||||
}
|
||||
|
||||
// Fallback to first configured port
|
||||
const port = app.ports[0]?.host
|
||||
if (!port) return '#'
|
||||
return `http://${currentHost.value}:${port}`
|
||||
|
||||
Reference in New Issue
Block a user