UNPKG

@atlaskit/tag

Version:

A tag labels UI objects for quick recognition and navigation.

34 lines (33 loc) • 1.23 kB
import { useCallback, useState } from 'react'; import { defaultBeforeRemoveAction } from './default-before-remove-action'; import { TagStatus } from './tag-status'; /** * {description}. */ export function useTagRemoval(onBeforeRemoveAction) { const [status, setStatus] = useState(TagStatus.Showing); const handleRemoveRequest = useCallback(() => { const beforeAction = onBeforeRemoveAction !== null && onBeforeRemoveAction !== void 0 ? onBeforeRemoveAction : defaultBeforeRemoveAction; if (beforeAction()) { // Defer onAfterRemoveAction until ShrinkOut's onFinish so ExitingPersistence can run // the exit animation (e.g. in multi-select and user pickers). setStatus(TagStatus.Removed); } }, [onBeforeRemoveAction]); const onKeyPress = useCallback(e => { const spacebarOrEnter = e.key === ' ' || e.key === 'Enter'; if (spacebarOrEnter) { e.stopPropagation(); handleRemoveRequest(); } }, [handleRemoveRequest]); const removingTag = useCallback(() => setStatus(TagStatus.Removing), []); const showingTag = useCallback(() => setStatus(TagStatus.Showing), []); return { status, handleRemoveRequest, onKeyPress, removingTag, showingTag }; }