diff --git a/assets/components.d.ts b/assets/components.d.ts index 3661a3cf..8302228e 100644 --- a/assets/components.d.ts +++ b/assets/components.d.ts @@ -38,6 +38,7 @@ declare module 'vue' { DropdownMenu: typeof import('./components/common/DropdownMenu.vue')['default'] FieldList: typeof import('./components/LogViewer/FieldList.vue')['default'] FuzzySearchModal: typeof import('./components/FuzzySearchModal.vue')['default'] + HostList: typeof import('./components/HostList.vue')['default'] 'Ic:sharpKeyboardReturn': typeof import('~icons/ic/sharp-keyboard-return')['default'] InfiniteLoader: typeof import('./components/InfiniteLoader.vue')['default'] KeyShortcut: typeof import('./components/common/KeyShortcut.vue')['default'] @@ -73,6 +74,8 @@ declare module 'vue' { 'Ph:command': typeof import('~icons/ph/command')['default'] 'Ph:computerTower': typeof import('~icons/ph/computer-tower')['default'] 'Ph:controlBold': typeof import('~icons/ph/control-bold')['default'] + 'Ph:cpu': typeof import('~icons/ph/cpu')['default'] + 'Ph:memory': typeof import('~icons/ph/memory')['default'] Popup: typeof import('./components/Popup.vue')['default'] Releases: typeof import('./components/Releases.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] diff --git a/assets/components/ContainerTable.vue b/assets/components/ContainerTable.vue index af184fe2..6f0774af 100644 --- a/assets/components/ContainerTable.vue +++ b/assets/components/ContainerTable.vue @@ -1,13 +1,49 @@ ! @@ -66,6 +106,9 @@ import { Container } from "@/models/Container"; import { toRefs } from "@vueuse/core"; +const { hosts } = useHosts(); +const selectedHost = ref(null); + const fields = { name: { label: "label.container-name", @@ -113,9 +156,12 @@ const storage = useStorage<{ column: keys; direction: 1 | -1 }>("DOZZLE_TABLE_CO }); const { column: sortField, direction } = toRefs(storage); const counter = useInterval(10000); +const filteredContainers = computed(() => + containers.filter((c) => selectedHost.value === null || c.host === selectedHost.value), +); const sortedContainers = computedWithControl( - () => [containers.length, sortField.value, direction.value, counter.value], - () => containers.sort((a, b) => fields[sortField.value].sortFunc(a, b)), + () => [filteredContainers.value.length, sortField.value, direction.value, counter.value], + () => filteredContainers.value.sort((a, b) => fields[sortField.value].sortFunc(a, b)), ); const totalPages = computed(() => Math.ceil(sortedContainers.value.length / perPage.value)); diff --git a/assets/components/HostList.vue b/assets/components/HostList.vue new file mode 100644 index 00000000..f6da56af --- /dev/null +++ b/assets/components/HostList.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/assets/pages/index.vue b/assets/pages/index.vue index 704e3dcf..942c0b92 100644 --- a/assets/pages/index.vue +++ b/assets/pages/index.vue @@ -1,25 +1,7 @@