import {View} from 'react-native' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {useCleanError} from '#/lib/hooks/useCleanError' import {atoms as a, web} from '#/alf' import {Admonition} from '#/components/Admonition' import {Button, ButtonIcon, ButtonText} from '#/components/Button' import * as Dialog from '#/components/Dialog' import {Loader} from '#/components/Loader' import * as Toast from '#/components/Toast' import {Span, Text} from '#/components/Typography' import {IS_NATIVE} from '#/env' import {useUpdateLiveEventPreferences} from '#/features/liveEvents/preferences' import { type LiveEventFeed, type LiveEventFeedMetricContext, } from '#/features/liveEvents/types' export {useDialogControl} from '#/components/Dialog' export function LiveEventFeedOptionsMenu({ control, feed, metricContext, }: { control: Dialog.DialogControlProps feed: LiveEventFeed metricContext: LiveEventFeedMetricContext }) { const {_} = useLingui() return ( ) } function Inner({ control, feed, metricContext, }: { control: Dialog.DialogControlProps feed: LiveEventFeed metricContext: LiveEventFeedMetricContext }) { const {_} = useLingui() const { isPending, mutate: update, error: rawError, variables, } = useUpdateLiveEventPreferences({ feed, metricContext, onUpdateSuccess({undoAction}) { Toast.show( Your live event preferences have been updated. {undoAction && ( { if (undoAction) { update(undoAction) } }}> Undo )} , {type: 'success'}, ) /* * If there is no `undoAction`, it means that the action was already * undone, and therefore the menu would have been closed prior to the * undo happening. */ if (undoAction) { control.close() } }, }) const cleanError = useCleanError() const error = rawError ? cleanError(rawError) : undefined const isHidingFeed = variables?.type === 'hideFeed' && isPending const isHidingAllFeeds = variables?.type === 'toggleHideAllFeeds' && isPending return ( Live event options Live events appear occasionally when something exciting is happening. If you'd like, you can hide this particular event, or all events for this placement in your app interface. If you choose to hide all events, you can always re-enable them from{' '} Settings → Content & Media. {IS_NATIVE && ( )} {error && ( {error.clean || error.raw || _(msg`An unknown error occurred.`)} )} ) }