diff --git a/app/soapbox/features/compose/components/compose-form.tsx b/app/soapbox/features/compose/components/compose-form.tsx index 52fff1deb..714f6f627 100644 --- a/app/soapbox/features/compose/components/compose-form.tsx +++ b/app/soapbox/features/compose/components/compose-form.tsx @@ -1,6 +1,6 @@ import classNames from 'clsx'; import React, { useCallback, useEffect, useRef, useState } from 'react'; -import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; +import { defineMessages, FormattedMessage, MessageDescriptor, useIntl } from 'react-intl'; import { Link, useHistory } from 'react-router-dom'; import { length } from 'stringz'; @@ -47,7 +47,8 @@ const allowedAroundShortCode = '><\u0085\u0020\u00a0\u1680\u2000\u2001\u2002\u20 const messages = defineMessages({ placeholder: { id: 'compose_form.placeholder', defaultMessage: 'What\'s on your mind?' }, - pollPlaceholder: { id: 'compose_form.poll_placeholder', defaultMessage: 'Add a poll topic...' }, + pollPlaceholder: { id: 'compose_form.poll_placeholder', defaultMessage: 'Add a poll topic…' }, + eventPlaceholder: { id: 'compose_form.event_placeholder', defaultMessage: 'Post to this event' }, spoiler_placeholder: { id: 'compose_form.spoiler_placeholder', defaultMessage: 'Write your warning here' }, publish: { id: 'compose_form.publish', defaultMessage: 'Post' }, publishLoud: { id: 'compose_form.publish_loud', defaultMessage: '{publish}!' }, @@ -238,6 +239,7 @@ const ComposeForm: React.FC = ({ id, shouldCondense, autoFocus, cl const shouldAutoFocus = autoFocus && !showSearch && !isMobile(window.innerWidth); let publishText: string | JSX.Element = ''; + let textareaPlaceholder: MessageDescriptor; if (isEditing) { publishText = intl.formatMessage(messages.saveChanges); @@ -263,6 +265,14 @@ const ComposeForm: React.FC = ({ id, shouldCondense, autoFocus, cl publishText = intl.formatMessage(messages.schedule); } + if (eventDiscussion) { + textareaPlaceholder = messages.eventPlaceholder; + } else if (hasPoll) { + textareaPlaceholder = messages.pollPlaceholder; + } else { + textareaPlaceholder = messages.placeholder; + } + return ( {scheduledStatusCount > 0 && !eventDiscussion && ( @@ -316,7 +326,7 @@ const ComposeForm: React.FC = ({ id, shouldCondense, autoFocus, cl = ({ status }) => { const menu: MenuType = [ { - text: 'Export to your calendar', + text: intl.formatMessage(messages.exportIcs), action: handleExportClick, icon: require('@tabler/icons/calendar-plus.svg'), }, diff --git a/app/soapbox/features/event/event-discussion.tsx b/app/soapbox/features/event/event-discussion.tsx index 1ee361799..f83d8728b 100644 --- a/app/soapbox/features/event/event-discussion.tsx +++ b/app/soapbox/features/event/event-discussion.tsx @@ -1,6 +1,7 @@ import { List as ImmutableList, OrderedSet as ImmutableOrderedSet } from 'immutable'; import debounce from 'lodash/debounce'; import React, { useCallback, useEffect, useRef, useState } from 'react'; +import { FormattedMessage } from 'react-intl'; import { createSelector } from 'reselect'; import { eventDiscussionCompose } from 'soapbox/actions/compose'; @@ -103,7 +104,7 @@ const EventDiscussion: React.FC = (props) => { }, [props.params.statusId]); useEffect(() => { - dispatch(eventDiscussionCompose(`reply:${props.params.statusId}`, status!)); + if (isLoaded) dispatch(eventDiscussionCompose(`reply:${props.params.statusId}`, status!)); }, [isLoaded]); const handleMoveUp = (id: string) => { @@ -207,7 +208,9 @@ const EventDiscussion: React.FC = (props) => { return ( - +
+ +
= (props) => { onLoadMore={handleLoadMore} placeholderComponent={() => } initialTopMostItemIndex={0} + emptyMessage={} > {children} diff --git a/app/soapbox/features/status/index.tsx b/app/soapbox/features/status/index.tsx index b3df23126..b3224a1db 100644 --- a/app/soapbox/features/status/index.tsx +++ b/app/soapbox/features/status/index.tsx @@ -4,7 +4,7 @@ import debounce from 'lodash/debounce'; import React, { useCallback, useEffect, useRef, useState } from 'react'; import { HotKeys } from 'react-hotkeys'; import { defineMessages, useIntl } from 'react-intl'; -import { useHistory } from 'react-router-dom'; +import { Redirect, useHistory } from 'react-router-dom'; import { createSelector } from 'reselect'; import { @@ -425,6 +425,12 @@ const Thread: React.FC = (props) => { const hasAncestors = ancestorsIds.size > 0; const hasDescendants = descendantsIds.size > 0; + if (status?.event) { + return ( + + ); + } + if (!status && isLoaded) { return (