import React, { useCallback, useContext, useEffect, useRef } from 'react'; import { useTranslation } from 'react-i18next'; import { Animated, Text, TextStyle, View, ViewStyle } from 'react-native'; import Icon from '../../../base/icons/components/Icon'; import { IconCloseLarge, IconInfoCircle, IconUsers, IconWarning } from '../../../base/icons/svg'; import { colors } from '../../../base/ui/Tokens'; import BaseTheme from '../../../base/ui/components/BaseTheme.native'; import Button from '../../../base/ui/components/native/Button'; import IconButton from '../../../base/ui/components/native/IconButton'; import { BUTTON_MODES, BUTTON_TYPES } from '../../../base/ui/constants.native'; import { CHAR_LIMIT } from '../../../chat/constants'; import { replaceNonUnicodeEmojis } from '../../../chat/functions'; import { NOTIFICATION_ICON, NOTIFICATION_TYPE } from '../../constants'; import { INotificationProps } from '../../types'; import { NotificationsTransitionContext } from '../NotificationsTransition'; import styles from './styles'; /** * Secondary colors for notification icons. * * @type {{error, info, normal, success, warning}} */ const ICON_COLOR = { error: colors.error06, normal: colors.primary06, success: colors.success05, warning: colors.warning05 }; export interface IProps extends INotificationProps { _participants: ArrayLike; onDismissed: Function; } const Notification = ({ appearance = NOTIFICATION_TYPE.NORMAL, customActionHandler, customActionNameKey, customActionType, description, descriptionArguments, descriptionKey, icon, onDismissed, title, titleArguments, titleKey, uid }: IProps) => { const { t } = useTranslation(); const notificationOpacityAnimation = useRef(new Animated.Value(0)).current; const { unmounting } = useContext(NotificationsTransitionContext); useEffect(() => { Animated.timing( notificationOpacityAnimation, { toValue: 1, duration: 200, useNativeDriver: true }) .start(); }, []); useEffect(() => { if (unmounting.get(uid ?? '')) { Animated.timing( notificationOpacityAnimation, { toValue: 0, duration: 200, useNativeDriver: true }) .start(); } }, [ unmounting ]); const onDismiss = useCallback(() => { onDismissed(uid); }, [ onDismissed, uid ]); const mapAppearanceToButtons = () => { if (customActionNameKey?.length && customActionHandler?.length && customActionType?.length) { return customActionNameKey?.map((customAction: string, index: number) => (