@atlaskit/tag
Version:
A tag labels UI objects for quick recognition and navigation.
34 lines (33 loc) • 1.23 kB
JavaScript
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
};
}