Path: blob/master/docker/dd-extension/ui/src/components/Uninstall.tsx
1091 views
import { useState } from "react";1import { Button, Row } from "react-bootstrap";2import Form from "react-bootstrap/Form";3import { useDockerDesktopClient } from "../hooks/useDockerDesktopClient";45import Loader from "./Loader";67interface UninstallProps {8isEnabled: boolean;9image: string;10}11export default function Uninstall({ isEnabled, image }: UninstallProps) {12const [isLoading, setLoading] = useState(false);13const ddClient = useDockerDesktopClient();1415if (!isEnabled) return null;1617const handleUninstall = () => {18setLoading(true);19ddClient.docker.cli20.exec("ps", [21"--all",22"--format",23'"{{json .}}"',24"--filter",25`ancestor=${image}`,26])27.then(async (result) => {28// result.parseJsonLines() parses the output of the command into an array of objects29const containers = result.parseJsonLines();30for (let index = 0; index < containers.length; index++) {31const container = containers[index];32await ddClient.docker.cli.exec("container", ["rm", container.ID]);33}34const rmiResult = await ddClient.docker.cli.exec("rmi", [image, "-f"]);35console.debug(rmiResult);36await ddClient.docker.cli.exec("image", ["prune", "-f"]);37setLoading(false);38})39.catch((err) => {40ddClient.desktopUI.toast.error(`Uninstall Snapshot Error`);41console.error(err);42setLoading(false);43});44};4546return (47<Form.Group as={Row} className="mb-3">48<div className="col-2">49<Button50className="btn btn-danger"51type="button"52onClick={handleUninstall}53id="uninstall-button"54>55<Loader isLoading={isLoading} />56Uninstall57</Button>58</div>59<label60className="col-auto align-self-center form-label"61htmlFor="uninstall-button"62>63Remove the Docker image and mark the product as uninstalled.64</label>65</Form.Group>66);67}686970