import { Button, Group } from '@mantine/core'; import { notifications } from '@mantine/notifications'; import { IconCheck, IconPlayerPlay, IconPlayerStop, IconPlus, IconRefresh, IconRotateClockwise, IconTrash, } from '@tabler/icons-react'; import Dockerode from 'dockerode'; import { useTranslation } from 'next-i18next'; import { useState } from 'react'; import { v4 as uuidv4 } from 'uuid'; import { RouterInputs, api } from '~/utils/api'; import { useConfigContext } from '../../config/provider'; import { openContextModalGeneric } from '../../tools/mantineModalManagerExtensions'; import { AppType } from '../../types/app'; export interface ContainerActionBarProps { selected: Dockerode.ContainerInfo[]; reload: () => void; } export default function ContainerActionBar({ selected, reload }: ContainerActionBarProps) { const { t } = useTranslation('modules/docker'); const [isLoading, setLoading] = useState(false); const { config } = useConfigContext(); const sendDockerCommand = useDockerActionMutation(); if (!config) { return null; } const getLowestWrapper = () => config.wrappers.sort((wrapper1, wrapper2) => wrapper1.position - wrapper2.position)[0]; if (process.env.DISABLE_EDIT_MODE === 'true') { return null; } return ( ); } const useDockerActionMutation = () => { const { t } = useTranslation('modules/docker'); const utils = api.useContext(); const mutation = api.docker.action.useMutation(); return async ( container: Dockerode.ContainerInfo, action: RouterInputs['docker']['action']['action'] ) => { const containerName = container.Names[0].substring(1); notifications.show({ id: container.Id, loading: true, title: `${t(`actions.${action}.start`)} ${containerName}`, message: undefined, autoClose: false, withCloseButton: false, }); await mutation.mutateAsync( { action, id: container.Id }, { onSuccess: () => { notifications.show({ id: container.Id, title: containerName, message: `${t(`actions.${action}.end`)} ${containerName}`, icon: , autoClose: 2000, }); }, onError: (err) => { notifications.update({ id: container.Id, color: 'red', title: t('errors.unknownError.title'), message: err.message, autoClose: 2000, }); }, onSettled: () => { utils.docker.containers.invalidate(); }, } ); }; };