46 lines
1.8 KiB
TypeScript
46 lines
1.8 KiB
TypeScript
import React from 'react';
|
|
import { FormattedMessage } from 'react-intl';
|
|
import { Link } from 'react-router-dom';
|
|
|
|
import { useAppSelector, useCompose } from 'soapbox/hooks';
|
|
|
|
import Warning from '../components/warning';
|
|
|
|
const APPROX_HASHTAG_RE = /(?:^|[^\/\)\w])#(\w*[a-zA-Z·]\w*)/i;
|
|
|
|
interface IWarningWrapper {
|
|
composeId: string,
|
|
}
|
|
|
|
const WarningWrapper: React.FC<IWarningWrapper> = ({ composeId }) => {
|
|
const compose = useCompose(composeId);
|
|
|
|
const me = useAppSelector((state) => state.me);
|
|
|
|
const needsLockWarning = useAppSelector((state) => compose.privacy === 'private' && !state.accounts.get(me)!.locked);
|
|
const hashtagWarning = compose.privacy !== 'public' && APPROX_HASHTAG_RE.test(compose.text);
|
|
const directMessageWarning = compose.privacy === 'direct';
|
|
|
|
if (needsLockWarning) {
|
|
return <Warning message={<FormattedMessage id='compose_form.lock_disclaimer' defaultMessage='Your account is not {locked}. Anyone can follow you to view your follower-only posts.' values={{ locked: <Link to='/settings/profile'><FormattedMessage id='compose_form.lock_disclaimer.lock' defaultMessage='locked' /></Link> }} />} />;
|
|
}
|
|
|
|
if (hashtagWarning) {
|
|
return <Warning message={<FormattedMessage id='compose_form.hashtag_warning' defaultMessage="This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag." />} />;
|
|
}
|
|
|
|
if (directMessageWarning) {
|
|
const message = (
|
|
<span>
|
|
<FormattedMessage id='compose_form.direct_message_warning' defaultMessage='This post will only be sent to the mentioned users.' />
|
|
{/* <a href='/about/tos' target='_blank'><FormattedMessage id='compose_form.direct_message_warning_learn_more' defaultMessage='Learn more' /></a> */}
|
|
</span>
|
|
);
|
|
|
|
return <Warning message={message} />;
|
|
}
|
|
|
|
return null;
|
|
};
|
|
|
|
export default WarningWrapper;
|