From c08512d464d2adf5727562ba2a5e88fe1db2b2ea Mon Sep 17 00:00:00 2001 From: ajnart Date: Fri, 2 Sep 2022 13:01:56 +0200 Subject: [PATCH] :lipstick: Change UI for docker module --- public/locales/en/modules/docker.json | 6 ++-- src/components/AppShelf/AddAppShelfItem.tsx | 22 ++++++++---- src/modules/docker/ContainerActionBar.tsx | 37 ++++++++++++++++++++- src/modules/docker/DockerModule.tsx | 2 +- src/modules/docker/DockerTable.tsx | 32 +----------------- 5 files changed, 58 insertions(+), 41 deletions(-) diff --git a/public/locales/en/modules/docker.json b/public/locales/en/modules/docker.json index 8e8bfa590..f54db9bd9 100644 --- a/public/locales/en/modules/docker.json +++ b/public/locales/en/modules/docker.json @@ -11,8 +11,7 @@ "name": "Name", "image": "Image", "ports": "Ports", - "state": "State", - "addToHomarr": "Add to homarr" + "state": "State" }, "body": { "portCollapse": "{{ports}} more" @@ -43,6 +42,9 @@ }, "remove": { "title": "Remove" + }, + "addToHomarr": { + "title": "Add to Homarr" } }, "messages": { diff --git a/src/components/AppShelf/AddAppShelfItem.tsx b/src/components/AppShelf/AddAppShelfItem.tsx index e3d4b8479..b2f44f4ec 100644 --- a/src/components/AppShelf/AddAppShelfItem.tsx +++ b/src/components/AppShelf/AddAppShelfItem.tsx @@ -24,10 +24,11 @@ import { v4 as uuidv4 } from 'uuid'; import { useDebouncedValue } from '@mantine/hooks'; import { useTranslation } from 'next-i18next'; import { useConfig } from '../../tools/state'; -import { tryMatchPort, ServiceTypeList, StatusCodes } from '../../tools/types'; +import { tryMatchPort, ServiceTypeList, StatusCodes, Config } from '../../tools/types'; import Tip from '../layout/Tip'; export function AddItemShelfButton(props: any) { + const { config, setConfig } = useConfig(); const [opened, setOpened] = useState(false); const { t } = useTranslation('layout/add-service-app-shelf'); return ( @@ -39,7 +40,7 @@ export function AddItemShelfButton(props: any) { opened={props.opened || opened} onClose={() => setOpened(false)} > - + void } & any) { - const { close } = props; - const { config, setConfig } = useConfig(); +interface AddAppShelfItemFormProps { + setOpened: (b: boolean) => void; + config: Config; + setConfig: (config: Config) => void; + // Any other props you want to pass to the form + [key: string]: any; +} + +export function AddAppShelfItemForm(props: AddAppShelfItemFormProps) { + const { setOpened, config, setConfig } = props; + // Only get config and setConfig from useCOnfig if they are not present in props const [isLoading, setLoading] = useState(false); const { t } = useTranslation('layout/add-service-app-shelf'); @@ -195,12 +204,13 @@ export function AddAppShelfItemForm(props: { close: () => void } & any) { }), }); } else { + console.log(newForm); setConfig({ ...config, services: [...config.services, newForm], }); } - close(false); + setOpened(false); form.reset(); })} > diff --git a/src/modules/docker/ContainerActionBar.tsx b/src/modules/docker/ContainerActionBar.tsx index cca2970b7..125ccd80c 100644 --- a/src/modules/docker/ContainerActionBar.tsx +++ b/src/modules/docker/ContainerActionBar.tsx @@ -1,9 +1,12 @@ -import { Button, Group } from '@mantine/core'; +/* eslint-disable @typescript-eslint/no-non-null-assertion */ +import { Button, Group, TextInput, Title } from '@mantine/core'; +import { closeAllModals, closeModal, openModal } from '@mantine/modals'; import { showNotification, updateNotification } from '@mantine/notifications'; import { IconCheck, IconPlayerPlay, IconPlayerStop, + IconPlus, IconRefresh, IconRotateClockwise, IconTrash, @@ -13,6 +16,9 @@ import Dockerode from 'dockerode'; import { useTranslation } from 'next-i18next'; import { useState } from 'react'; import { TFunction } from 'react-i18next'; +import { AddAppShelfItemForm } from '../../components/AppShelf/AddAppShelfItem'; +import { tryMatchService } from '../../tools/addToHomarr'; +import { useConfig } from '../../tools/state'; let t: TFunction<'modules/docker', undefined>; @@ -63,6 +69,8 @@ export interface ContainerActionBarProps { export default function ContainerActionBar({ selected, reload }: ContainerActionBarProps) { t = useTranslation('modules/docker').t; const [isLoading, setisLoading] = useState(false); + const { config, setConfig } = useConfig(); + return ( + ); } diff --git a/src/modules/docker/DockerModule.tsx b/src/modules/docker/DockerModule.tsx index d895a4625..61101723e 100644 --- a/src/modules/docker/DockerModule.tsx +++ b/src/modules/docker/DockerModule.tsx @@ -53,7 +53,7 @@ export default function DockerMenuButton(props: any) { icon: , message: t('errors.integrationFailed.message'), }); - }); + }); }, 300); } const exists = config.modules?.[DockerModule.id]?.enabled ?? false; diff --git a/src/modules/docker/DockerTable.tsx b/src/modules/docker/DockerTable.tsx index 6d4d7b2c9..c8fbf9c19 100644 --- a/src/modules/docker/DockerTable.tsx +++ b/src/modules/docker/DockerTable.tsx @@ -7,9 +7,8 @@ import { ScrollArea, TextInput, Modal, - ActionIcon, } from '@mantine/core'; -import { IconPlus, IconSearch } from '@tabler/icons'; +import { IconSearch } from '@tabler/icons'; import Dockerode from 'dockerode'; import { useTranslation } from 'next-i18next'; import { useEffect, useState } from 'react'; @@ -36,10 +35,8 @@ export default function DockerTable({ selection: Dockerode.ContainerInfo[]; }) { const [usedContainers, setContainers] = useState(containers); - const [rowSelected, setRowSelected] = useState(); const { classes, cx } = useStyles(); const [search, setSearch] = useState(''); - const [opened, setOpened] = useState(false); const { t } = useTranslation('modules/docker'); @@ -106,38 +103,12 @@ export default function DockerTable({ - - { - setRowSelected(element); - setOpened(true); - }} - > - - - ); }); return ( - setOpened(false)} - title={t('actionBar.addService.title')} - > - - {t('table.header.image')} {t('table.header.ports')} {t('table.header.state')} - {t('table.header.addToHomarr')} {rows}