pleroma/app/soapbox/features/compose/containers/warning-container.tsx

73 lines
2 KiB
TypeScript
Raw Normal View History

import React from 'react';
2020-03-27 13:59:38 -07:00
import { FormattedMessage } from 'react-intl';
import { Link } from 'react-router-dom';
import { useAppSelector, useCompose } from 'soapbox/hooks';
2023-07-20 13:03:23 -07:00
import { selectOwnAccount } from 'soapbox/selectors';
2022-01-10 14:01:24 -08:00
import Warning from '../components/warning';
2020-03-27 13:59:38 -07:00
2023-07-20 13:03:23 -07:00
const APPROX_HASHTAG_RE = /(?:^|[^/)\w])#(\w*[a-zA-Z·]\w*)/i;
2020-03-27 13:59:38 -07:00
interface IWarningWrapper {
composeId: string
}
const WarningWrapper: React.FC<IWarningWrapper> = ({ composeId }) => {
const compose = useCompose(composeId);
2023-07-20 13:03:23 -07:00
const needsLockWarning = useAppSelector((state) => compose.privacy === 'private' && !selectOwnAccount(state)!.locked);
2023-04-21 07:19:37 -07:00
const hashtagWarning = (compose.privacy !== 'public' && compose.privacy !== 'group') && APPROX_HASHTAG_RE.test(compose.text);
const directMessageWarning = compose.privacy === 'direct';
2020-03-27 13:59:38 -07:00
if (needsLockWarning) {
2023-07-20 13:03:23 -07:00
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>
),
}}
/>
)}
/>
);
2020-03-27 13:59:38 -07:00
}
if (hashtagWarning) {
2023-07-20 13:03:23 -07:00
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."
/>
)}
/>
);
2020-03-27 13:59:38 -07:00
}
if (directMessageWarning) {
const message = (
<span>
2023-07-20 13:03:23 -07:00
<FormattedMessage
id='compose_form.direct_message_warning'
defaultMessage='This post will only be sent to the mentioned users.'
/>
2020-03-27 13:59:38 -07:00
</span>
);
return <Warning message={message} />;
}
return null;
};
export default WarningWrapper;