import React, { useMemo } from 'react'; import { StyleSheet, Text, View } from 'react-native'; import { ReminderState } from 'stream-chat'; import { useMessageContext } from '../../../../contexts/messageContext/MessageContext'; import { useTheme } from '../../../../contexts/themeContext/ThemeContext'; import { useTranslationContext } from '../../../../contexts/translationContext/TranslationContext'; import { useMessageReminder } from '../../../../hooks/useMessageReminder'; import { useStateStore } from '../../../../hooks/useStateStore'; import { Bell } from '../../../../icons'; import { primitives } from '../../../../theme'; import { useShouldUseOverlayStyles } from '../../hooks/useShouldUseOverlayStyles'; const reminderStateSelector = (state: ReminderState) => ({ timeLeftMs: state.timeLeftMs, }); type MessageReminderHeaderPropsWithContext = { timeLeftMs?: number; isReminderTimeLeft: boolean; }; const MessageReminderHeaderWithContext = (props: MessageReminderHeaderPropsWithContext) => { const { timeLeftMs, isReminderTimeLeft } = props; const { t } = useTranslationContext(); const styles = useStyles(); return ( {isReminderTimeLeft ? t('Reminder set') : t('Reminder overdue')} ยท {t('duration/Message reminder', { milliseconds: timeLeftMs, })} ); }; export type MessageReminderHeaderProps = Partial; export const MessageReminderHeader = (props: MessageReminderHeaderProps) => { const { message } = useMessageContext(); const reminder = useMessageReminder(message.id); const { timeLeftMs } = useStateStore(reminder?.state, reminderStateSelector) ?? {}; const isReminderTimeLeft = !!(timeLeftMs && timeLeftMs > 0); return ( ); }; const useStyles = () => { const { theme: { semantics, messageItemView: { reminderHeader: { container, label, dot, time }, }, }, } = useTheme(); const shouldUseOverlayStyles = useShouldUseOverlayStyles(); return useMemo(() => { return StyleSheet.create({ container: { alignItems: 'center', flexDirection: 'row', gap: primitives.spacingXxs, paddingVertical: primitives.spacingXxs, ...container, }, label: { color: shouldUseOverlayStyles ? semantics.textOnAccent : semantics.textPrimary, fontSize: primitives.typographyFontSizeXs, fontWeight: primitives.typographyFontWeightSemiBold, lineHeight: primitives.typographyLineHeightTight, ...label, }, dot: { color: shouldUseOverlayStyles ? semantics.textOnAccent : semantics.textPrimary, fontSize: primitives.typographyFontSizeXs, fontWeight: primitives.typographyFontWeightRegular, lineHeight: primitives.typographyLineHeightTight, ...dot, }, time: { color: shouldUseOverlayStyles ? semantics.textOnAccent : semantics.textPrimary, fontSize: primitives.typographyFontSizeXs, fontWeight: primitives.typographyFontWeightRegular, lineHeight: primitives.typographyLineHeightTight, ...time, }, }); }, [shouldUseOverlayStyles, container, semantics, label, dot, time]); };