// Copyright 2022 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only import React from 'react'; import classNames from 'classnames'; import type { ConversationType } from '../state/ducks/conversations'; import type { LocalizerType } from '../types/Util'; import type { ShowToastActionCreatorType } from '../state/ducks/toast'; import type { StorySendStateType, StoryViewType } from '../types/Stories'; import { Avatar, AvatarSize } from './Avatar'; import { HasStories } from '../types/Stories'; import { StoryImage } from './StoryImage'; import { getAvatarColor } from '../types/Colors'; import { MessageTimestamp } from './conversation/MessageTimestamp'; import { StoriesAddStoryButton } from './StoriesAddStoryButton'; import { isFailed, isPending } from '../messages/MessageSendState'; export type PropsType = { hasMultiple: boolean; i18n: LocalizerType; me: ConversationType; newestStory?: StoryViewType; onAddStory: () => unknown; onClick: () => unknown; queueStoryDownload: (storyId: string) => unknown; showToast: ShowToastActionCreatorType; }; enum ResolvedSendStatus { Failed, Sending, Sent, } function resolveSendStatus( sendStates: Array ): ResolvedSendStatus { let anyPending = false; for (const sendState of sendStates) { if (isFailed(sendState.status)) { // Immediately return if any send failed return ResolvedSendStatus.Failed; } if (isPending(sendState.status)) { // Don't return yet in case we have a failure anyPending = true; } } if (anyPending) { return ResolvedSendStatus.Sending; } return ResolvedSendStatus.Sent; } export const MyStoriesButton = ({ hasMultiple, i18n, me, newestStory, onAddStory, onClick, queueStoryDownload, showToast, }: PropsType): JSX.Element => { const { acceptedMessageRequest, avatarPath, color, isMe, profileName, sharedGroupNames, title, } = me; if (!newestStory) { return (
<>
{i18n('Stories__mine')}
{i18n('Stories__add')}
); } const newStoryResolvedSendStatus = resolveSendStatus( newestStory.sendState ?? [] ); return (
{ if (ev.key === 'Enter') { onClick(); ev.stopPropagation(); ev.preventDefault(); } }} role="button" tabIndex={0} >
{i18n('Stories__mine')}
{newStoryResolvedSendStatus === ResolvedSendStatus.Sending && ( {i18n('Stories__list--sending')} )} {newStoryResolvedSendStatus === ResolvedSendStatus.Failed && ( {i18n('Stories__list--send_failed')} )} {newStoryResolvedSendStatus === ResolvedSendStatus.Sent && ( )}
{hasMultiple &&
}
); };