diff --git a/web/components.d.ts b/web/components.d.ts index 1ace9b58d..d1e7bad0d 100644 --- a/web/components.d.ts +++ b/web/components.d.ts @@ -47,6 +47,7 @@ declare module 'vue' { 'DevModalTest.standalone': typeof import('./src/components/DevModalTest.standalone.vue')['default'] DevSettings: typeof import('./src/components/DevSettings.vue')['default'] 'DevThemeSwitcher.standalone': typeof import('./src/components/DevThemeSwitcher.standalone.vue')['default'] + DockerAutostartSettings: typeof import('./src/components/Docker/DockerAutostartSettings.vue')['default'] DockerContainerManagement: typeof import('./src/components/Docker/DockerContainerManagement.vue')['default'] DockerContainerOverview: typeof import('./src/components/Docker/DockerContainerOverview.vue')['default'] 'DockerContainerOverview.standalone': typeof import('./src/components/Docker/DockerContainerOverview.standalone.vue')['default'] diff --git a/web/src/components/Docker/DockerAutostartSettings.vue b/web/src/components/Docker/DockerAutostartSettings.vue index 0e12279a9..951236e17 100644 --- a/web/src/components/Docker/DockerAutostartSettings.vue +++ b/web/src/components/Docker/DockerAutostartSettings.vue @@ -69,6 +69,7 @@ function containersToEntries(containers: DockerContainer[]): AutostartEntry[] { } const entries = ref([]); +const selectedIds = ref([]); watch( () => props.containers, @@ -165,6 +166,20 @@ async function handleWaitChange(entry: AutostartEntry, value: string | number) { await persistConfiguration(snapshot); } +async function handleBulkToggle() { + if (saving.value || !selectedIds.value.length) return; + const snapshot = entries.value.map((item) => ({ ...item })); + const selected = new Set(selectedIds.value); + entries.value.forEach((entry) => { + if (!selected.has(entry.id)) return; + entry.autoStart = !entry.autoStart; + if (!entry.autoStart) { + entry.wait = 0; + } + }); + await persistConfiguration(snapshot); +} + async function handleDrop(event: DropEvent) { if (mutationLoading.value) return; const { target, area, sourceIds } = event; @@ -197,6 +212,7 @@ const busyRowIds = computed(() => { }); const saving = computed(() => props.loading || mutationLoading.value); +const hasSelection = computed(() => selectedIds.value.length > 0); const UBadge = resolveComponent('UBadge') as Component; const USwitch = resolveComponent('USwitch') as Component; @@ -226,7 +242,7 @@ const columns = computed>[]>(() => { ? h(UBadge, { label: entry.container.state, variant: 'subtle', - size: 'xs', + size: 'sm', }) : null; return h('div', { class: 'flex items-center justify-between gap-3 pr-2' }, [ @@ -280,15 +296,26 @@ const columns = computed>[]>(() => { Drag containers to adjust the auto-start sequence. Changes are saved automatically.

- - Back to Overview - +
+ + Toggle Auto Start + + + Back to Overview + +
>[]>(() => { :enable-drag-drop="true" :busy-row-ids="busyRowIds" selectable-type="container" + v-model:selected-ids="selectedIds" @row:drop="handleDrop" />