import { useState } from 'react' import type { FC, ReactNode } from 'react' import { FloatingFocusManager, autoUpdate, flip, shift, useDismiss, useFloating, useHover, useInteractions, useRole } from '@floating-ui/react' import { RiDeleteBinLine } from '@remixicon/react' import type { SliceProps } from './type' import { SliceContainer, SliceContent, SliceDivider, SliceLabel } from './shared' import classNames from '@/utils/classnames' import ActionButton, { ActionButtonState } from '@/app/components/base/action-button' type EditSliceProps = SliceProps<{ label: ReactNode onDelete: () => void labelClassName?: string contentClassName?: string }> export const EditSlice: FC = (props) => { const { label, className, text, onDelete, labelClassName, contentClassName, ...rest } = props const [delBtnShow, setDelBtnShow] = useState(false) const [isDelBtnHover, setDelBtnHover] = useState(false) const { refs, floatingStyles, context } = useFloating({ open: delBtnShow, onOpenChange: setDelBtnShow, placement: 'right', whileElementsMounted: autoUpdate, middleware: [ flip(), shift(), ], }) const hover = useHover(context, {}) const dismiss = useDismiss(context) const role = useRole(context) const { getReferenceProps, getFloatingProps } = useInteractions([hover, dismiss, role]) const isDestructive = delBtnShow && isDelBtnHover return (
{label} {text} {delBtnShow &&
setDelBtnHover(true)} onMouseLeave={() => setDelBtnHover(false)} > { e.stopPropagation() onDelete() setDelBtnShow(false) }} state={ActionButtonState.Destructive} >
}
) }