mirror of https://github.com/mastodon/mastodon
Add first-time user education hint about quote removal on Quote notifications (#35986)
parent
42be0ca0eb
commit
e7c30cd072
@ -0,0 +1,90 @@
|
|||||||
|
import { useRef } from 'react';
|
||||||
|
|
||||||
|
import { FormattedMessage, useIntl } from 'react-intl';
|
||||||
|
|
||||||
|
import classNames from 'classnames';
|
||||||
|
|
||||||
|
import Overlay from 'react-overlays/Overlay';
|
||||||
|
|
||||||
|
import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react';
|
||||||
|
|
||||||
|
import { Button } from '../button';
|
||||||
|
import { useDismissableBannerState } from '../dismissable_banner';
|
||||||
|
import { Icon } from '../icon';
|
||||||
|
|
||||||
|
const DISMISSABLE_BANNER_ID = 'notifications/remove_quote_hint';
|
||||||
|
|
||||||
|
export const RemoveQuoteHint: React.FC<{
|
||||||
|
canShowHint: boolean;
|
||||||
|
className?: string;
|
||||||
|
children: (dismiss: () => void) => React.ReactNode;
|
||||||
|
}> = ({ canShowHint, className, children }) => {
|
||||||
|
const anchorRef = useRef<HTMLDivElement>(null);
|
||||||
|
const intl = useIntl();
|
||||||
|
|
||||||
|
const { isVisible, dismiss } = useDismissableBannerState({
|
||||||
|
id: DISMISSABLE_BANNER_ID,
|
||||||
|
});
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={className} ref={anchorRef}>
|
||||||
|
{children(dismiss)}
|
||||||
|
{isVisible && canShowHint && (
|
||||||
|
<Overlay
|
||||||
|
show
|
||||||
|
flip
|
||||||
|
offset={[12, 10]}
|
||||||
|
placement='bottom-end'
|
||||||
|
target={anchorRef.current}
|
||||||
|
container={anchorRef.current}
|
||||||
|
>
|
||||||
|
{({ props, placement }) => (
|
||||||
|
<div
|
||||||
|
{...props}
|
||||||
|
className={classNames(
|
||||||
|
'info-tooltip info-tooltip--solid dropdown-animation',
|
||||||
|
placement,
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
<h4>
|
||||||
|
<FormattedMessage
|
||||||
|
id='remove_quote_hint.title'
|
||||||
|
defaultMessage='Want to remove your quoted post?'
|
||||||
|
/>
|
||||||
|
</h4>
|
||||||
|
<FormattedMessage
|
||||||
|
id='remove_quote_hint.message'
|
||||||
|
defaultMessage='You can do so from the {icon} options menu.'
|
||||||
|
values={{
|
||||||
|
icon: (
|
||||||
|
<Icon
|
||||||
|
id='ellipsis-h'
|
||||||
|
icon={MoreHorizIcon}
|
||||||
|
aria-label={intl.formatMessage({
|
||||||
|
id: 'status.more',
|
||||||
|
defaultMessage: 'More',
|
||||||
|
})}
|
||||||
|
style={{ verticalAlign: 'middle' }}
|
||||||
|
/>
|
||||||
|
),
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{(text) => <p>{text}</p>}
|
||||||
|
</FormattedMessage>
|
||||||
|
<FormattedMessage
|
||||||
|
id='remove_quote_hint.button_label'
|
||||||
|
defaultMessage='Got it'
|
||||||
|
>
|
||||||
|
{(text) => (
|
||||||
|
<Button plain compact onClick={dismiss}>
|
||||||
|
{text}
|
||||||
|
</Button>
|
||||||
|
)}
|
||||||
|
</FormattedMessage>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</Overlay>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
Loading…
Reference in New Issue