UNPKG

@atlaskit/flag

Version:

A flag is used for confirmations, alerts, and acknowledgments that require minimal user interaction, often displayed using a flag group.

74 lines (73 loc) 2.98 kB
import _extends from "@babel/runtime/helpers/extends"; import React, { useCallback, useEffect, useRef } from 'react'; import { usePlatformLeafEventHandler } from '@atlaskit/analytics-next/usePlatformLeafEventHandler'; import noop from '@atlaskit/ds-lib/noop'; import Flag from './flag'; import { useFlagGroup } from './internal/use-flag-group'; var packageName = "@atlaskit/flag"; var packageVersion = "18.5.5"; export var AUTO_DISMISS_SECONDS = 8; /** * __Auto dismiss flag__ * * An auto dismiss flag is dismissed automatically after eight seconds. * * - [Examples](https://atlassian.design/components/flag/auto-dismiss-flag/examples) * - [Code](https://atlassian.design/components/flag/auto-dismiss-flag/code) */ var AutoDismissFlag = function AutoDismissFlag(props) { var id = props.id, analyticsContext = props.analyticsContext, _props$onDismissed = props.onDismissed, onDismissedProp = _props$onDismissed === void 0 ? noop : _props$onDismissed, _props$autoDismissSec = props.autoDismissSeconds, autoDismissSeconds = _props$autoDismissSec === void 0 ? AUTO_DISMISS_SECONDS : _props$autoDismissSec; var autoDismissTimer = useRef(null); var _useFlagGroup = useFlagGroup(), onDismissedFromFlagGroup = _useFlagGroup.onDismissed, isDismissAllowed = _useFlagGroup.isDismissAllowed; var onDismissed = useCallback(function (id, analyticsEvent) { onDismissedProp(id, analyticsEvent); onDismissedFromFlagGroup(id, analyticsEvent); }, [onDismissedProp, onDismissedFromFlagGroup]); var onDismissedAnalytics = usePlatformLeafEventHandler({ fn: onDismissed, action: 'dismissed', analyticsData: analyticsContext, componentName: 'flag', packageName: packageName, packageVersion: packageVersion }); var isAutoDismissAllowed = isDismissAllowed && onDismissed; var dismissFlag = useCallback(function () { if (isAutoDismissAllowed) { onDismissedAnalytics(id); } }, [id, onDismissedAnalytics, isAutoDismissAllowed]); var stopAutoDismissTimer = useCallback(function () { if (autoDismissTimer.current) { clearTimeout(autoDismissTimer.current); autoDismissTimer.current = null; } }, []); var startAutoDismissTimer = useCallback(function () { if (!isAutoDismissAllowed) { return; } stopAutoDismissTimer(); autoDismissTimer.current = window.setTimeout(dismissFlag, autoDismissSeconds * 1000); }, [dismissFlag, stopAutoDismissTimer, isAutoDismissAllowed, autoDismissSeconds]); useEffect(function () { startAutoDismissTimer(); return stopAutoDismissTimer; }, [startAutoDismissTimer, stopAutoDismissTimer]); return /*#__PURE__*/React.createElement(Flag // eslint-disable-next-line @repo/internal/react/no-unsafe-spread-props , _extends({}, props, { onMouseOver: stopAutoDismissTimer, onFocus: stopAutoDismissTimer, onMouseOut: startAutoDismissTimer, onBlur: startAutoDismissTimer })); }; export default AutoDismissFlag;