[Glitch] Enable quotes of manually-reviewed quotes with a different label

Port 9c55b2fbe4 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
This commit is contained in:
Claire
2025-08-27 16:55:39 +02:00
parent e7890c0153
commit a68dc4ab7a

View File

@@ -46,6 +46,14 @@ const messages = defineMessages({
id: 'status.cannot_quote', id: 'status.cannot_quote',
defaultMessage: 'Author has disabled quoting on this post', defaultMessage: 'Author has disabled quoting on this post',
}, },
quote_followers_only: {
id: 'status.quote_followers_only',
defaultMessage: 'Only followers can quote this post',
},
quote_manual_review: {
id: 'status.quote_manual_review',
defaultMessage: 'Author will manually review',
},
quote_private: { quote_private: {
id: 'status.quote_private', id: 'status.quote_private',
defaultMessage: 'Private posts cannot be quoted', defaultMessage: 'Private posts cannot be quoted',
@@ -63,6 +71,10 @@ const messages = defineMessages({
id: 'status.cannot_reblog', id: 'status.cannot_reblog',
defaultMessage: 'This post cannot be boosted', defaultMessage: 'This post cannot be boosted',
}, },
request_quote: {
id: 'status.request_quote',
defaultMessage: 'Request to quote',
},
}); });
interface ReblogButtonProps { interface ReblogButtonProps {
@@ -79,13 +91,21 @@ export const StatusReblogButton: FC<ReblogButtonProps> = ({
const statusState = useAppSelector((state) => const statusState = useAppSelector((state) =>
selectStatusState(state, status), selectStatusState(state, status),
); );
const { isLoggedIn, isReblogged, isReblogAllowed, isQuoteAllowed } = const {
statusState; isLoggedIn,
isReblogged,
isReblogAllowed,
isQuoteAutomaticallyAccepted,
isQuoteManuallyAccepted,
} = statusState;
const { iconComponent } = useMemo( const { iconComponent } = useMemo(
() => reblogIconText(statusState), () => reblogIconText(statusState),
[statusState], [statusState],
); );
const disabled = !isQuoteAllowed && !isReblogAllowed; const disabled =
!isQuoteAutomaticallyAccepted &&
!isQuoteManuallyAccepted &&
!isReblogAllowed;
const dispatch = useAppDispatch(); const dispatch = useAppDispatch();
const statusId = status.get('id') as string; const statusId = status.get('id') as string;
@@ -320,9 +340,15 @@ const selectStatusState = createAppSelector(
status.get('visibility') === 'private', status.get('visibility') === 'private',
isReblogged: !!status.get('reblogged'), isReblogged: !!status.get('reblogged'),
isReblogAllowed: isPublic || isMineAndPrivate, isReblogAllowed: isPublic || isMineAndPrivate,
isQuoteAllowed: isQuoteAutomaticallyAccepted:
status.getIn(['quote_approval', 'current_user']) === 'automatic' && status.getIn(['quote_approval', 'current_user']) === 'automatic' &&
(isPublic || isMineAndPrivate), (isPublic || isMineAndPrivate),
isQuoteManuallyAccepted:
status.getIn(['quote_approval', 'current_user']) === 'manual' &&
(isPublic || isMineAndPrivate),
isQuoteFollowersOnly:
status.getIn(['quote_approval', 'automatic', 0]) === 'followers' ||
status.getIn(['quote_approval', 'manual', 0]) === 'followers',
}; };
}, },
); );
@@ -364,7 +390,9 @@ function reblogIconText({
function quoteIconText({ function quoteIconText({
isMine, isMine,
isQuoteAllowed, isQuoteAutomaticallyAccepted,
isQuoteManuallyAccepted,
isQuoteFollowersOnly,
isPublic, isPublic,
}: StatusState): IconText { }: StatusState): IconText {
const iconText: IconText = { const iconText: IconText = {
@@ -372,12 +400,22 @@ function quoteIconText({
iconComponent: FormatQuote, iconComponent: FormatQuote,
}; };
if (!isQuoteAllowed || (!isPublic && !isMine)) { if (!isPublic && !isMine) {
iconText.meta = !isQuoteAllowed
? messages.quote_cannot
: messages.quote_private;
iconText.iconComponent = FormatQuoteOff;
iconText.disabled = true; iconText.disabled = true;
iconText.iconComponent = FormatQuoteOff;
iconText.meta = messages.quote_private;
} else if (isQuoteAutomaticallyAccepted) {
iconText.title = messages.quote;
} else if (isQuoteManuallyAccepted) {
iconText.title = messages.request_quote;
iconText.meta = messages.quote_manual_review;
} else {
iconText.disabled = true;
iconText.iconComponent = FormatQuoteOff;
iconText.meta = isQuoteFollowersOnly
? messages.quote_followers_only
: messages.quote_cannot;
} }
return iconText; return iconText;
} }