@ -1,5 +1,5 @@
|
||||
import React from 'react';
|
||||
import { defineMessages, IntlShape } from 'react-intl';
|
||||
import { defineMessages, FormattedMessage, IntlShape } from 'react-intl';
|
||||
|
||||
import { fetchAccountByUsername } from 'pl-fe/actions/accounts';
|
||||
import { deactivateUser, deleteUser, deleteStatus, toggleStatusSensitivity } from 'pl-fe/actions/admin';
|
||||
@ -15,7 +15,6 @@ import type { AppDispatch, RootState } from 'pl-fe/store';
|
||||
|
||||
const messages = defineMessages({
|
||||
deactivateUserHeading: { id: 'confirmations.admin.deactivate_user.heading', defaultMessage: 'Deactivate @{acct}' },
|
||||
deactivateUserPrompt: { id: 'confirmations.admin.deactivate_user.message', defaultMessage: 'You are about to deactivate @{acct}. Deactivating a user is a reversible action.' },
|
||||
deactivateUserConfirm: { id: 'confirmations.admin.deactivate_user.confirm', defaultMessage: 'Deactivate @{name}' },
|
||||
userDeactivated: { id: 'admin.users.user_deactivated_message', defaultMessage: '@{acct} was deactivated' },
|
||||
deleteUserHeading: { id: 'confirmations.admin.delete_user.heading', defaultMessage: 'Delete @{acct}' },
|
||||
@ -50,7 +49,7 @@ const deactivateUserModal = (intl: IntlShape, accountId: string, afterConfirm =
|
||||
</OutlineBox>
|
||||
|
||||
<Text>
|
||||
{intl.formatMessage(messages.deactivateUserPrompt, { acct })}
|
||||
<FormattedMessage id='confirmations.admin.deactivate_user.message' defaultMessage='You are about to deactivate @{acct}. Deactivating a user is a reversible action.' values={{ acct }} />
|
||||
</Text>
|
||||
</Stack>
|
||||
);
|
||||
@ -84,7 +83,7 @@ const deleteUserModal = (intl: IntlShape, accountId: string, afterConfirm = () =
|
||||
</OutlineBox>
|
||||
|
||||
<Text>
|
||||
{intl.formatMessage(messages.deleteUserPrompt, { acct })}
|
||||
<FormattedMessage id='confirmations.admin.delete_user.message' defaultMessage='You are about to delete @{acct}. THIS IS A DESTRUCTIVE ACTION THAT CANNOT BE UNDONE.' values={{ acct }} />
|
||||
</Text>
|
||||
</Stack>
|
||||
);
|
||||
|
||||
@ -250,7 +250,7 @@ const Account = ({
|
||||
|
||||
{account.verified && <VerificationBadge />}
|
||||
|
||||
{account.bot && <Badge slug='bot' title={intl.formatMessage(messages.bot)} />}
|
||||
{account.bot && <Badge slug='bot' title={<FormattedMessage id='account.badges.bot' defaultMessage='Bot' />} />}
|
||||
</HStack>
|
||||
|
||||
<Stack space={withAccountNote || note ? 1 : 0}>
|
||||
@ -329,7 +329,7 @@ const Account = ({
|
||||
|
||||
{account.verified && <VerificationBadge />}
|
||||
|
||||
{account.bot && <Badge slug='bot' title={intl.formatMessage(messages.bot)} />}
|
||||
{account.bot && <Badge slug='bot' title={<FormattedMessage id='account.badges.bot' defaultMessage='Bot' />} />}
|
||||
</HStack>
|
||||
</LinkEl>
|
||||
</ProfilePopper>
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import React, { useMemo } from 'react';
|
||||
import { defineMessages, useIntl } from 'react-intl';
|
||||
import { defineMessages, FormattedDate, useIntl } from 'react-intl';
|
||||
|
||||
import IconButton from 'pl-fe/components/icon-button';
|
||||
import { DatePicker } from 'pl-fe/features/ui/util/async-components';
|
||||
@ -76,7 +76,7 @@ const BirthdayInput: React.FC<IBirthdayInput> = ({ value, onChange, required })
|
||||
aria-label={intl.formatMessage(messages.previousMonth)}
|
||||
title={intl.formatMessage(messages.previousMonth)}
|
||||
/>
|
||||
{intl.formatDate(date, { month: 'long' })}
|
||||
<FormattedDate value={date} month='long' />
|
||||
<IconButton
|
||||
className='datepicker__button rtl:rotate-180'
|
||||
src={require('@phosphor-icons/core/regular/caret-right.svg')}
|
||||
@ -95,7 +95,7 @@ const BirthdayInput: React.FC<IBirthdayInput> = ({ value, onChange, required })
|
||||
aria-label={intl.formatMessage(messages.previousYear)}
|
||||
title={intl.formatMessage(messages.previousYear)}
|
||||
/>
|
||||
{intl.formatDate(date, { year: 'numeric' })}
|
||||
<FormattedDate value={date} year='numeric' />
|
||||
<IconButton
|
||||
className='datepicker__button rtl:rotate-180'
|
||||
src={require('@phosphor-icons/core/regular/caret-right.svg')}
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
import { useInfiniteQuery } from '@tanstack/react-query';
|
||||
import clsx from 'clsx';
|
||||
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
||||
import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
import { Link, NavLink } from 'react-router-dom';
|
||||
|
||||
import { fetchOwnAccounts, logOut, switchAccount } from 'pl-fe/actions/auth';
|
||||
@ -29,30 +29,6 @@ import sourceCode from 'pl-fe/utils/code';
|
||||
|
||||
import type { Account as AccountEntity } from 'pl-fe/normalizers/account';
|
||||
|
||||
const messages = defineMessages({
|
||||
profile: { id: 'account.profile', defaultMessage: 'Profile' },
|
||||
preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },
|
||||
followedTags: { id: 'navigation_bar.followed_tags', defaultMessage: 'Followed hashtags' },
|
||||
logout: { id: 'navigation_bar.logout', defaultMessage: 'Logout' },
|
||||
profileDirectory: { id: 'navigation_bar.profile_directory', defaultMessage: 'Profile directory' },
|
||||
bookmarks: { id: 'column.bookmarks', defaultMessage: 'Bookmarks' },
|
||||
lists: { id: 'column.lists', defaultMessage: 'Lists' },
|
||||
circles: { id: 'column.circles', defaultMessage: 'Circles' },
|
||||
groups: { id: 'column.groups', defaultMessage: 'Groups' },
|
||||
events: { id: 'column.events', defaultMessage: 'Events' },
|
||||
dashboard: { id: 'navigation.dashboard', defaultMessage: 'Dashboard' },
|
||||
scheduledStatuses: { id: 'column.scheduled_statuses', defaultMessage: 'Scheduled posts' },
|
||||
drafts: { id: 'navigation.drafts', defaultMessage: 'Drafts' },
|
||||
addAccount: { id: 'profile_dropdown.add_account', defaultMessage: 'Add an existing account' },
|
||||
followRequests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' },
|
||||
interactionRequests: { id: 'navigation.interaction_requests', defaultMessage: 'Interaction requests' },
|
||||
close: { id: 'lightbox.close', defaultMessage: 'Close' },
|
||||
login: { id: 'account.login', defaultMessage: 'Log in' },
|
||||
register: { id: 'account.register', defaultMessage: 'Sign up' },
|
||||
sourceCode: { id: 'navigation.source_code', defaultMessage: 'Source code' },
|
||||
conversations: { id: 'navigation.direct_messages', defaultMessage: 'Direct messages' },
|
||||
});
|
||||
|
||||
interface IDropdownNavigationLink {
|
||||
href?: string;
|
||||
to?: string;
|
||||
@ -88,7 +64,6 @@ const DropdownNavigationLink: React.FC<IDropdownNavigationLink> = React.memo(({
|
||||
});
|
||||
|
||||
const DropdownNavigation: React.FC = React.memo((): JSX.Element | null => {
|
||||
const intl = useIntl();
|
||||
const dispatch = useAppDispatch();
|
||||
|
||||
const { isSidebarOpen, closeSidebar } = useUiStore();
|
||||
@ -223,7 +198,7 @@ const DropdownNavigation: React.FC = React.memo((): JSX.Element | null => {
|
||||
<DropdownNavigationLink
|
||||
to={`/@${account.acct}`}
|
||||
icon={require('@phosphor-icons/core/regular/user.svg')}
|
||||
text={intl.formatMessage(messages.profile)}
|
||||
text={<FormattedMessage id='account.profile' defaultMessage='Profile' />}
|
||||
onClick={closeSidebar}
|
||||
/>
|
||||
|
||||
@ -231,7 +206,7 @@ const DropdownNavigation: React.FC = React.memo((): JSX.Element | null => {
|
||||
<DropdownNavigationLink
|
||||
to='/follow_requests'
|
||||
icon={require('@phosphor-icons/core/regular/user-plus.svg')}
|
||||
text={intl.formatMessage(messages.followRequests)}
|
||||
text={<FormattedMessage id='navigation_bar.follow_requests' defaultMessage='Follow requests' />}
|
||||
onClick={closeSidebar}
|
||||
/>
|
||||
)}
|
||||
@ -240,7 +215,7 @@ const DropdownNavigation: React.FC = React.memo((): JSX.Element | null => {
|
||||
<DropdownNavigationLink
|
||||
to='/interaction_requests'
|
||||
icon={require('@phosphor-icons/core/regular/heart-half.svg')}
|
||||
text={intl.formatMessage(messages.interactionRequests)}
|
||||
text={<FormattedMessage id='navigation.interaction_requests' defaultMessage='Interaction requests' />}
|
||||
onClick={closeSidebar}
|
||||
/>
|
||||
)}
|
||||
@ -249,7 +224,7 @@ const DropdownNavigation: React.FC = React.memo((): JSX.Element | null => {
|
||||
<DropdownNavigationLink
|
||||
to='/conversations'
|
||||
icon={require('@phosphor-icons/core/regular/envelope-simple.svg')}
|
||||
text={intl.formatMessage(messages.conversations)}
|
||||
text={<FormattedMessage id='navigation.direct_messages' defaultMessage='Direct messages' />}
|
||||
onClick={closeSidebar}
|
||||
/>
|
||||
)}
|
||||
@ -258,7 +233,7 @@ const DropdownNavigation: React.FC = React.memo((): JSX.Element | null => {
|
||||
<DropdownNavigationLink
|
||||
to='/bookmarks'
|
||||
icon={require('@phosphor-icons/core/regular/bookmarks.svg')}
|
||||
text={intl.formatMessage(messages.bookmarks)}
|
||||
text={<FormattedMessage id='column.bookmarks' defaultMessage='Bookmarks' />}
|
||||
onClick={closeSidebar}
|
||||
/>
|
||||
)}
|
||||
@ -267,7 +242,7 @@ const DropdownNavigation: React.FC = React.memo((): JSX.Element | null => {
|
||||
<DropdownNavigationLink
|
||||
to='/groups'
|
||||
icon={require('@phosphor-icons/core/regular/users-three.svg')}
|
||||
text={intl.formatMessage(messages.groups)}
|
||||
text={<FormattedMessage id='column.groups' defaultMessage='Groups' />}
|
||||
onClick={closeSidebar}
|
||||
/>
|
||||
)}
|
||||
@ -276,7 +251,7 @@ const DropdownNavigation: React.FC = React.memo((): JSX.Element | null => {
|
||||
<DropdownNavigationLink
|
||||
to='/lists'
|
||||
icon={require('@phosphor-icons/core/regular/list-dashes.svg')}
|
||||
text={intl.formatMessage(messages.lists)}
|
||||
text={<FormattedMessage id='column.lists' defaultMessage='Lists' />}
|
||||
onClick={closeSidebar}
|
||||
/>
|
||||
)}
|
||||
@ -285,7 +260,7 @@ const DropdownNavigation: React.FC = React.memo((): JSX.Element | null => {
|
||||
<DropdownNavigationLink
|
||||
to='/circles'
|
||||
icon={require('@phosphor-icons/core/regular/circles-three.svg')}
|
||||
text={intl.formatMessage(messages.circles)}
|
||||
text={<FormattedMessage id='column.circles' defaultMessage='Circles' />}
|
||||
onClick={closeSidebar}
|
||||
/>
|
||||
)}
|
||||
@ -294,7 +269,7 @@ const DropdownNavigation: React.FC = React.memo((): JSX.Element | null => {
|
||||
<DropdownNavigationLink
|
||||
to='/events'
|
||||
icon={require('@phosphor-icons/core/regular/calendar-dots.svg')}
|
||||
text={intl.formatMessage(messages.events)}
|
||||
text={<FormattedMessage id='column.events' defaultMessage='Events' />}
|
||||
onClick={closeSidebar}
|
||||
/>
|
||||
)}
|
||||
@ -303,7 +278,7 @@ const DropdownNavigation: React.FC = React.memo((): JSX.Element | null => {
|
||||
<DropdownNavigationLink
|
||||
to='/directory'
|
||||
icon={require('@phosphor-icons/core/regular/address-book.svg')}
|
||||
text={intl.formatMessage(messages.profileDirectory)}
|
||||
text={<FormattedMessage id='navigation_bar.profile_directory' defaultMessage='Profile directory' />}
|
||||
onClick={closeSidebar}
|
||||
/>
|
||||
)}
|
||||
@ -312,7 +287,7 @@ const DropdownNavigation: React.FC = React.memo((): JSX.Element | null => {
|
||||
<DropdownNavigationLink
|
||||
to='/scheduled_statuses'
|
||||
icon={require('@phosphor-icons/core/regular/hourglass.svg')}
|
||||
text={intl.formatMessage(messages.scheduledStatuses)}
|
||||
text={<FormattedMessage id='column.scheduled_statuses' defaultMessage='Scheduled statuses' />}
|
||||
onClick={closeSidebar}
|
||||
/>
|
||||
)}
|
||||
@ -321,7 +296,7 @@ const DropdownNavigation: React.FC = React.memo((): JSX.Element | null => {
|
||||
<DropdownNavigationLink
|
||||
to='/draft_statuses'
|
||||
icon={require('@phosphor-icons/core/regular/pencil-simple.svg')}
|
||||
text={intl.formatMessage(messages.drafts)}
|
||||
text={<FormattedMessage id='navigation.drafts' defaultMessage='Drafts' />}
|
||||
onClick={closeSidebar}
|
||||
/>
|
||||
)}
|
||||
@ -369,7 +344,7 @@ const DropdownNavigation: React.FC = React.memo((): JSX.Element | null => {
|
||||
<DropdownNavigationLink
|
||||
to='/settings/preferences'
|
||||
icon={require('@phosphor-icons/core/regular/sliders-horizontal.svg')}
|
||||
text={intl.formatMessage(messages.preferences)}
|
||||
text={<FormattedMessage id='navigation_bar.preferences' defaultMessage='Preferences' />}
|
||||
onClick={closeSidebar}
|
||||
/>
|
||||
|
||||
@ -377,7 +352,7 @@ const DropdownNavigation: React.FC = React.memo((): JSX.Element | null => {
|
||||
<DropdownNavigationLink
|
||||
to='/followed_tags'
|
||||
icon={require('@phosphor-icons/core/regular/hash.svg')}
|
||||
text={intl.formatMessage(messages.followedTags)}
|
||||
text={<FormattedMessage id='navigation_bar.followed_tags' defaultMessage='Followed hashtags' />}
|
||||
onClick={closeSidebar}
|
||||
/>
|
||||
)}
|
||||
@ -386,7 +361,7 @@ const DropdownNavigation: React.FC = React.memo((): JSX.Element | null => {
|
||||
<DropdownNavigationLink
|
||||
to='/admin'
|
||||
icon={require('@phosphor-icons/core/regular/gauge.svg')}
|
||||
text={intl.formatMessage(messages.dashboard)}
|
||||
text={<FormattedMessage id='navigation.dashboard' defaultMessage='Dashboard' />}
|
||||
onClick={closeSidebar}
|
||||
// count={dashboardCount} WIP
|
||||
/>
|
||||
@ -397,7 +372,7 @@ const DropdownNavigation: React.FC = React.memo((): JSX.Element | null => {
|
||||
<DropdownNavigationLink
|
||||
to='/logout'
|
||||
icon={require('@phosphor-icons/core/regular/sign-out.svg')}
|
||||
text={intl.formatMessage(messages.logout)}
|
||||
text={<FormattedMessage id='navigation_bar.logout' defaultMessage='Logout' />}
|
||||
onClick={onClickLogOut}
|
||||
/>
|
||||
|
||||
@ -406,7 +381,7 @@ const DropdownNavigation: React.FC = React.memo((): JSX.Element | null => {
|
||||
<DropdownNavigationLink
|
||||
href={sourceCode.url}
|
||||
icon={require('@phosphor-icons/core/regular/code.svg')}
|
||||
text={intl.formatMessage(messages.sourceCode)}
|
||||
text={<FormattedMessage id='navigation.source_code' defaultMessage='Source code' />}
|
||||
onClick={closeSidebar}
|
||||
/>
|
||||
|
||||
@ -433,7 +408,7 @@ const DropdownNavigation: React.FC = React.memo((): JSX.Element | null => {
|
||||
|
||||
<NavLink className='⁂-dropdown-navigation__account-switcher__add' to='/login/add' onClick={handleClose}>
|
||||
<Icon src={require('@phosphor-icons/core/regular/plus.svg')} />
|
||||
<Text size='sm' weight='medium'>{intl.formatMessage(messages.addAccount)}</Text>
|
||||
<Text size='sm' weight='medium'><FormattedMessage id='profile_dropdown.add_account' defaultMessage='Add an existing account' /></Text>
|
||||
</NavLink>
|
||||
</div>
|
||||
)}
|
||||
@ -483,7 +458,7 @@ const DropdownNavigation: React.FC = React.memo((): JSX.Element | null => {
|
||||
<DropdownNavigationLink
|
||||
to='/login'
|
||||
icon={require('@phosphor-icons/core/regular/sign-in.svg')}
|
||||
text={intl.formatMessage(messages.login)}
|
||||
text={<FormattedMessage id='account.login' defaultMessage='Log in' />}
|
||||
onClick={closeSidebar}
|
||||
/>
|
||||
|
||||
@ -491,7 +466,7 @@ const DropdownNavigation: React.FC = React.memo((): JSX.Element | null => {
|
||||
<DropdownNavigationLink
|
||||
to='/signup'
|
||||
icon={require('@phosphor-icons/core/regular/user-plus.svg')}
|
||||
text={intl.formatMessage(messages.register)}
|
||||
text={<FormattedMessage id='account.register' defaultMessage='Sign up' />}
|
||||
onClick={closeSidebar}
|
||||
/>
|
||||
)}
|
||||
@ -501,7 +476,7 @@ const DropdownNavigation: React.FC = React.memo((): JSX.Element | null => {
|
||||
<DropdownNavigationLink
|
||||
href={sourceCode.url}
|
||||
icon={require('@phosphor-icons/core/regular/code.svg')}
|
||||
text={intl.formatMessage(messages.sourceCode)}
|
||||
text={<FormattedMessage id='navigation.source_code' defaultMessage='Source code' />}
|
||||
onClick={closeSidebar}
|
||||
/>
|
||||
</div>
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import React, { useState } from 'react';
|
||||
import { defineMessages, useIntl } from 'react-intl';
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
|
||||
import { vote } from 'pl-fe/actions/polls';
|
||||
import Stack from 'pl-fe/components/ui/stack';
|
||||
@ -23,14 +23,9 @@ interface IPoll {
|
||||
truncate?: boolean;
|
||||
}
|
||||
|
||||
const messages = defineMessages({
|
||||
multiple: { id: 'poll.choose_multiple', defaultMessage: 'Choose as many as you\'d like.' },
|
||||
});
|
||||
|
||||
const Poll: React.FC<IPoll> = ({ id, status, language, truncate }): JSX.Element | null => {
|
||||
const { openModal } = useModalsStore();
|
||||
const dispatch = useAppDispatch();
|
||||
const intl = useIntl();
|
||||
|
||||
const isLoggedIn = useAppSelector((state) => state.me);
|
||||
const poll = useAppSelector((state) => state.polls[id]);
|
||||
@ -79,7 +74,7 @@ const Poll: React.FC<IPoll> = ({ id, status, language, truncate }): JSX.Element
|
||||
<div onClick={e => e.stopPropagation()}>
|
||||
{!showResults && poll.multiple && (
|
||||
<Text className='mb-4' theme='muted' size='sm'>
|
||||
{intl.formatMessage(messages.multiple)}
|
||||
<FormattedMessage id='poll.choose_multiple' defaultMessage="Choose as many as you'd like." />
|
||||
</Text>
|
||||
)}
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import clsx from 'clsx';
|
||||
import React, { useState } from 'react';
|
||||
import { defineMessages, useIntl } from 'react-intl';
|
||||
import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
|
||||
import { useHistory } from 'react-router-dom';
|
||||
|
||||
import AutosuggestAccountInput from 'pl-fe/components/autosuggest-account-input';
|
||||
@ -74,7 +74,7 @@ const SearchInput = React.memo(() => {
|
||||
|
||||
return (
|
||||
<div className='w-full'>
|
||||
<label htmlFor='search' className='sr-only'>{intl.formatMessage(messages.placeholder)}</label>
|
||||
<label htmlFor='search' className='sr-only'><FormattedMessage id='search.placeholder' defaultMessage='Search' /></label>
|
||||
|
||||
<div className='relative'>
|
||||
<AutosuggestAccountInput
|
||||
|
||||
@ -21,8 +21,6 @@ import type { Chat } from 'pl-api';
|
||||
import type { Menu } from 'pl-fe/components/dropdown-menu';
|
||||
|
||||
const messages = defineMessages({
|
||||
blockedYou: { id: 'chat_list_item.blocked_you', defaultMessage: 'This user has blocked you' },
|
||||
blocking: { id: 'chat_list_item.blocking', defaultMessage: 'You have blocked this user' },
|
||||
leaveMessage: { id: 'chat_settings.leave.message', defaultMessage: 'Are you sure you want to leave this chat? Messages will be deleted for you and this chat will be removed from your inbox.' },
|
||||
leaveHeading: { id: 'chat_settings.leave.heading', defaultMessage: 'Leave chat' },
|
||||
leaveConfirm: { id: 'chat_settings.leave.confirm', defaultMessage: 'Leave chat' },
|
||||
|
||||
@ -2,7 +2,6 @@ import React from 'react';
|
||||
import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
|
||||
|
||||
import { WITH_LANDING_PAGE } from 'pl-fe/build-config';
|
||||
import Text from 'pl-fe/components/ui/text';
|
||||
import Emojify from 'pl-fe/features/emoji/emojify';
|
||||
import { usePlFeConfig } from 'pl-fe/hooks/use-pl-fe-config';
|
||||
import sourceCode from 'pl-fe/utils/code';
|
||||
|
||||
@ -312,6 +312,7 @@
|
||||
"chat_composer.unblock": "Unblock",
|
||||
"chat_list_item.blocked_you": "This user has blocked you",
|
||||
"chat_list_item.blocking": "You have blocked this user",
|
||||
"chat_list_item.settings": "Chat settings",
|
||||
"chat_list_item_shoutbox": "{instance} shoutbox",
|
||||
"chat_message_list.blocked": "You blocked this user",
|
||||
"chat_message_list.blocked_by": "You are blocked by",
|
||||
|
||||
Reference in New Issue
Block a user