import { Avatar, Button, Group, List, LoadingOverlay, Stack, Text, TextInput } from "@mantine/core"; import { z } from "zod/v4"; import type { RouterOutputs } from "@homarr/api"; import { clientApi } from "@homarr/api/client"; import { useZodForm } from "@homarr/form"; import { createModal } from "@homarr/modals"; import { showErrorNotification, showSuccessNotification } from "@homarr/notifications"; import { useI18n } from "@homarr/translation/client"; interface AddDockerAppToHomarrProps { selectedContainers: RouterOutputs["docker"]["getContainers"]["containers"]; } export const AddDockerAppToHomarrModal = createModal(({ actions, innerProps }) => { const t = useI18n(); const form = useZodForm( z.object({ containerUrls: z.array(z.string().url().nullable()), }), { initialValues: { containerUrls: innerProps.selectedContainers.map((container) => { if (container.ports[0]) { return `http://${container.ports[0].IP}:${container.ports[0].PublicPort}`; } return null; }), }, }, ); const { mutate, isPending } = clientApi.app.createMany.useMutation({ onSuccess() { actions.closeModal(); showSuccessNotification({ title: t("docker.action.addToHomarr.notification.success.title"), message: t("docker.action.addToHomarr.notification.success.message"), }); }, onError() { showErrorNotification({ title: t("docker.action.addToHomarr.notification.error.title"), message: t("docker.action.addToHomarr.notification.error.message"), }); }, }); const handleSubmit = () => { mutate( innerProps.selectedContainers.map((container, index) => ({ name: container.name, iconUrl: container.iconUrl, description: null, href: form.values.containerUrls[index] ?? null, pingUrl: null, })), ); }; return (
{innerProps.selectedContainers.map((container, index) => ( {container.name.at(0)?.toUpperCase()} } key={container.id} > {container.name} ))} ); }).withOptions({ defaultTitle(t) { return t("docker.action.addToHomarr.modal.title"); }, size: "lg", });