import { useState } from "react"; import { Icon, Menu, MenuButton, MenuItem, MenuList, MenuDivider, Text, Spinner, IconButton, } from "@chakra-ui/react"; import { BsFillTrashFill, BsGear, BsStars } from "react-icons/bs"; import { FaRegClone } from "react-icons/fa"; import { RiExchangeFundsFill } from "react-icons/ri"; import { api } from "~/utils/api"; import { useHandledAsyncCallback, useVisibleScenarioIds } from "~/utils/hooks"; import { type PromptVariant } from "../types"; import { RefinePromptModal } from "../../RefinePromptModal/RefinePromptModal"; import { ChangeModelModal } from "../../ChangeModelModal/ChangeModelModal"; export default function VariantHeaderMenuButton({ variant, canHide, menuOpen, setMenuOpen, }: { variant: PromptVariant; canHide: boolean; menuOpen: boolean; setMenuOpen: (open: boolean) => void; }) { const utils = api.useContext(); const duplicateMutation = api.promptVariants.create.useMutation(); const visibleScenarios = useVisibleScenarioIds(); const [duplicateVariant, duplicationInProgress] = useHandledAsyncCallback(async () => { await duplicateMutation.mutateAsync({ experimentId: variant.experimentId, variantId: variant.id, streamScenarios: visibleScenarios, }); await utils.promptVariants.list.invalidate(); }, [duplicateMutation, variant.experimentId, variant.id]); const hideMutation = api.promptVariants.hide.useMutation(); const [onHide] = useHandledAsyncCallback(async () => { await hideMutation.mutateAsync({ id: variant.id, }); await utils.promptVariants.list.invalidate(); }, [hideMutation, variant.id]); const [changeModelModalOpen, setChangeModelModalOpen] = useState(false); const [refinePromptModalOpen, setRefinePromptModalOpen] = useState(false); return ( <>
{changeModelModalOpen && (