import {ReactElement, useContext, useState} from "react" import {MdArrowDropDown} from "react-icons/md" import {BsArrowClockwise} from "react-icons/bs" import {FaPen} from "react-icons/fa" import {AxiosError} from "axios" import {useTranslation} from "react-i18next" import update from "immutability-helper" import { Button, ButtonGroup, ListItemIcon, ListItemText, Menu, MenuItem, MenuList, } from "@mui/material" import {useMutation} from "@tanstack/react-query" import {CreateAliasData, createAlias} from "~/apis" import {Alias, AliasList, AliasType, PaginationResult} from "~/server-types" import {DEFAULT_ALIAS_NOTE} from "~/constants/values" import {useErrorSuccessSnacks} from "~/hooks" import {queryClient} from "~/constants/react-query" import AuthContext, {EncryptionStatus} from "~/AuthContext/AuthContext" import CustomAliasDialog from "~/route-widgets/AliasesRoute/CustomAliasDialog" export function CreateAliasButton(): ReactElement { const {t} = useTranslation() const {showSuccess, showError} = useErrorSuccessSnacks() const {_encryptUsingMasterPassword, encryptionStatus} = useContext(AuthContext) const {mutateAsync, isLoading} = useMutation( async values => { if (encryptionStatus === EncryptionStatus.Available) { values.encryptedNotes = await _encryptUsingMasterPassword( JSON.stringify( update(DEFAULT_ALIAS_NOTE, { data: { createdAt: { $set: new Date(), }, }, }), ), ) } return createAlias(values) }, { onError: showError, onSuccess: async alias => { showSuccess(t("relations.alias.mutations.success.aliasCreation")) await queryClient.invalidateQueries({ queryKey: ["get_aliases"], }) return alias }, }, ) const [showCustomCreateDialog, setShowCustomCreateDialog] = useState(false) const [anchorElement, setAnchorElement] = useState(null) const open = Boolean(anchorElement) return ( <> setAnchorElement(null)}> { setShowCustomCreateDialog(true) setAnchorElement(null) }} > { await mutateAsync(values) setShowCustomCreateDialog(false) }} onClose={() => setShowCustomCreateDialog(false)} /> ) }