import { useCallback, useState } from "react"; import { Button, Field, Input, MessageBar, MessageBarBody } from "@fluentui/react-components"; import { Delete24Regular, LinkEdit24Regular } from "@fluentui/react-icons"; import type { ActionConfig } from "../../types/config"; import { useActionRawFile } from "../../hooks/useActionRawFile"; import { ActionForm } from "./ActionForm"; import { RawConfigSection } from "./RawConfigSection"; import { useConfigStyles } from "./configStyles"; interface ActionDetailProps { action: ActionConfig; onAssignClick: () => void; onRemovedFromJail: (jailName: string) => Promise; } export function ActionDetail({ action, onAssignClick, onRemovedFromJail }: ActionDetailProps): React.JSX.Element { const styles = useConfigStyles(); const [removingJail, setRemovingJail] = useState(null); const [removeError, setRemoveError] = useState(null); const { fetchRawContent, saveRawContent } = useActionRawFile(action.name); const handleRemoveFromJail = useCallback( (jailName: string): void => { setRemovingJail(jailName); setRemoveError(null); onRemovedFromJail(jailName) .catch((err: unknown) => { setRemoveError(err instanceof Error ? err.message : "Failed to remove action from jail."); }) .finally(() => { setRemovingJail(null); }); }, [onRemovedFromJail], ); return (
{action.used_by_jails.length > 0 && (
{removeError !== null && ( {removeError} )}
{action.used_by_jails.map((jailName) => (
{jailName}
))}
)}
); }