diff --git a/data/configs/default.json b/data/configs/default.json index 3f2acea0d..9597d620c 100644 --- a/data/configs/default.json +++ b/data/configs/default.json @@ -1,20 +1,35 @@ { "name": "default", - "services": [ - { - "name": "example", - "id": "09c45847-8afc-4c1a-9697-f03192de948a", - "type": "Other", - "icon": "https://c.tenor.com/o656qFKDzeUAAAAC/rick-astley-never-gonna-give-you-up.gif", - "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ" - } - ], + "services": [], "settings": { - "searchUrl": "https://google.com/search?q=" + "searchUrl": "https://google.com/search?q=", + "appCardWidth": 0.8 }, "modules": { "Search Bar": { "enabled": true + }, + "Docker": { + "enabled": true, + "options": { + "endpoint": { + "value": "http://192.168.1.56:2376" + } + } + }, + "Weather": { + "enabled": true, + "options": { + "location": { + "value": "Perros-Guirec" + } + } + }, + "Download Speed": { + "enabled": false + }, + "Ping Services": { + "enabled": true } } -} \ No newline at end of file +} diff --git a/src/modules/docker/ContainerActionBar.tsx b/src/modules/docker/ContainerActionBar.tsx index 0ae7e2ed1..b25c03c11 100644 --- a/src/modules/docker/ContainerActionBar.tsx +++ b/src/modules/docker/ContainerActionBar.tsx @@ -11,9 +11,9 @@ import { } from '@tabler/icons'; import axios from 'axios'; import Dockerode from 'dockerode'; +import { useState } from 'react'; import { tryMatchService } from '../../tools/addToHomarr'; import { AddAppShelfItemForm } from '../../components/AppShelf/AddAppShelfItem'; -import { useState } from 'react'; function sendDockerCommand( action: string, @@ -30,7 +30,7 @@ function sendDockerCommand( disallowClose: true, }); axios - .get(`/api/docker/container/${containerId}?action=${action}`) + .get(`localhost:2375/containers/${containerId}/${action}`) .then((res) => { updateNotification({ id: containerId, @@ -88,6 +88,7 @@ export default function ContainerActionBar({ selected, reload }: ContainerAction variant="light" color="orange" radius="md" + disabled={selected.length === 0} > Restart @@ -103,6 +104,7 @@ export default function ContainerActionBar({ selected, reload }: ContainerAction variant="light" color="red" radius="md" + disabled={selected.length === 0} > Stop @@ -118,10 +120,11 @@ export default function ContainerActionBar({ selected, reload }: ContainerAction variant="light" color="green" radius="md" + disabled={selected.length === 0} > Start - @@ -156,6 +160,7 @@ export default function ContainerActionBar({ selected, reload }: ContainerAction ) ) } + disabled={selected.length === 0} > Remove diff --git a/src/modules/docker/DockerModule.tsx b/src/modules/docker/DockerModule.tsx index caca75306..3981b36ca 100644 --- a/src/modules/docker/DockerModule.tsx +++ b/src/modules/docker/DockerModule.tsx @@ -1,4 +1,4 @@ -import { ActionIcon, Drawer, Group, LoadingOverlay, Text, Tooltip } from '@mantine/core'; +import { ActionIcon, Drawer, Text, Tooltip } from '@mantine/core'; import axios from 'axios'; import { useEffect, useState } from 'react'; import Docker from 'dockerode'; @@ -14,6 +14,12 @@ export const DockerModule: IModule = { description: 'Allows you to easily manage your torrents', icon: IconBrandDocker, component: DockerMenuButton, + options: { + endpoint: { + name: 'Docker Api endpoint entry', + value: '', + }, + }, }; export default function DockerMenuButton(props: any) { @@ -21,6 +27,7 @@ export default function DockerMenuButton(props: any) { const [containers, setContainers] = useState([]); const [selection, setSelection] = useState([]); const { config } = useConfig(); + const dockerApi = (config?.modules?.[DockerModule.title]?.options?.endpoint?.value as string) ?? ''; // http://192.168.1.56:2376 const moduleEnabled = config.modules?.[DockerModule.title]?.enabled ?? false; useEffect(() => { @@ -33,7 +40,7 @@ export default function DockerMenuButton(props: any) { } setTimeout(() => { axios - .get('/api/docker/containers') + .get(`${dockerApi}/v1.41/containers/json`) .then((res) => { setContainers(res.data); setSelection([]); @@ -54,8 +61,7 @@ export default function DockerMenuButton(props: any) { if (!exists) { return null; } - // Check if the user has at least one container - if (containers.length < 1) return null; + // Always allow user to see DockerTable component through ActionIcon in order to set Docker's settings return ( <> } value={search} onChange={handleSearchChange} + disabled={usedContainers.length === 0} /> @@ -106,9 +107,10 @@ export default function DockerTable({
0} indeterminate={selection.length > 0 && selection.length !== usedContainers.length} transitionDuration={0} + disabled={usedContainers.length === 0} /> Name