sforkowany z mirror/soapbox
Remove account.donor as a concept, use 'badge:donor' custom tag instead
rodzic
2fc9b215a9
commit
1f0b4d01b5
|
@ -442,14 +442,6 @@ const unverifyUser = (accountId: string) =>
|
||||||
(dispatch: AppDispatch) =>
|
(dispatch: AppDispatch) =>
|
||||||
dispatch(untagUsers([accountId], ['verified']));
|
dispatch(untagUsers([accountId], ['verified']));
|
||||||
|
|
||||||
const setDonor = (accountId: string) =>
|
|
||||||
(dispatch: AppDispatch) =>
|
|
||||||
dispatch(tagUsers([accountId], ['donor']));
|
|
||||||
|
|
||||||
const removeDonor = (accountId: string) =>
|
|
||||||
(dispatch: AppDispatch) =>
|
|
||||||
dispatch(untagUsers([accountId], ['donor']));
|
|
||||||
|
|
||||||
const addPermission = (accountIds: string[], permissionGroup: string) =>
|
const addPermission = (accountIds: string[], permissionGroup: string) =>
|
||||||
(dispatch: AppDispatch, getState: () => RootState) => {
|
(dispatch: AppDispatch, getState: () => RootState) => {
|
||||||
const nicknames = nicknamesFromIds(getState, accountIds);
|
const nicknames = nicknamesFromIds(getState, accountIds);
|
||||||
|
@ -604,8 +596,6 @@ export {
|
||||||
setBadges,
|
setBadges,
|
||||||
verifyUser,
|
verifyUser,
|
||||||
unverifyUser,
|
unverifyUser,
|
||||||
setDonor,
|
|
||||||
removeDonor,
|
|
||||||
addPermission,
|
addPermission,
|
||||||
removePermission,
|
removePermission,
|
||||||
promoteToAdmin,
|
promoteToAdmin,
|
||||||
|
|
|
@ -7,14 +7,14 @@ interface IBadge {
|
||||||
}
|
}
|
||||||
/** Badge to display on a user's profile. */
|
/** Badge to display on a user's profile. */
|
||||||
const Badge: React.FC<IBadge> = ({ title, slug }) => {
|
const Badge: React.FC<IBadge> = ({ title, slug }) => {
|
||||||
const fallback = !['patron', 'admin', 'moderator', 'opaque', 'donor', 'badge:donor'].includes(slug);
|
const fallback = !['patron', 'admin', 'moderator', 'opaque', 'badge:donor'].includes(slug);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<span
|
<span
|
||||||
data-testid='badge'
|
data-testid='badge'
|
||||||
className={classNames('inline-flex items-center px-2 py-0.5 rounded text-xs font-medium', {
|
className={classNames('inline-flex items-center px-2 py-0.5 rounded text-xs font-medium', {
|
||||||
'bg-fuchsia-700 text-white': slug === 'patron',
|
'bg-fuchsia-700 text-white': slug === 'patron',
|
||||||
'bg-yellow-500 text-white': ['donor', 'badge:donor'].includes(slug),
|
'bg-emerald-800 text-white': slug === 'badge:donor',
|
||||||
'bg-black text-white': slug === 'admin',
|
'bg-black text-white': slug === 'admin',
|
||||||
'bg-cyan-600 text-white': slug === 'moderator',
|
'bg-cyan-600 text-white': slug === 'moderator',
|
||||||
'bg-gray-100 dark:bg-gray-800 text-gray-900 dark:text-gray-100': fallback,
|
'bg-gray-100 dark:bg-gray-800 text-gray-900 dark:text-gray-100': fallback,
|
||||||
|
|
|
@ -37,10 +37,6 @@ const getBadges = (account: Account): JSX.Element[] => {
|
||||||
badges.push(<Badge key='patron' slug='patron' title='Patron' />);
|
badges.push(<Badge key='patron' slug='patron' title='Patron' />);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (account.donor) {
|
|
||||||
badges.push(<Badge key='donor' slug='donor' title='Donor' />);
|
|
||||||
}
|
|
||||||
|
|
||||||
return badges;
|
return badges;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -4,8 +4,6 @@ import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
|
||||||
import {
|
import {
|
||||||
verifyUser,
|
verifyUser,
|
||||||
unverifyUser,
|
unverifyUser,
|
||||||
setDonor,
|
|
||||||
removeDonor,
|
|
||||||
suggestUsers,
|
suggestUsers,
|
||||||
unsuggestUsers,
|
unsuggestUsers,
|
||||||
setBadges as saveBadges,
|
setBadges as saveBadges,
|
||||||
|
@ -80,17 +78,6 @@ const AccountModerationModal: React.FC<IAccountModerationModal> = ({ onClose, ac
|
||||||
.catch(() => {});
|
.catch(() => {});
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleDonorChange: ChangeEventHandler<HTMLInputElement> = (e) => {
|
|
||||||
const { checked } = e.target;
|
|
||||||
|
|
||||||
const message = checked ? messages.setDonorSuccess : messages.removeDonorSuccess;
|
|
||||||
const action = checked ? setDonor : removeDonor;
|
|
||||||
|
|
||||||
dispatch(action(account.id))
|
|
||||||
.then(() => dispatch(snackbar.success(intl.formatMessage(message, { acct: account.acct }))))
|
|
||||||
.catch(() => {});
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleSuggestedChange: ChangeEventHandler<HTMLInputElement> = (e) => {
|
const handleSuggestedChange: ChangeEventHandler<HTMLInputElement> = (e) => {
|
||||||
const { checked } = e.target;
|
const { checked } = e.target;
|
||||||
|
|
||||||
|
@ -147,13 +134,6 @@ const AccountModerationModal: React.FC<IAccountModerationModal> = ({ onClose, ac
|
||||||
/>
|
/>
|
||||||
</ListItem>
|
</ListItem>
|
||||||
|
|
||||||
<ListItem label={<FormattedMessage id='account_moderation_modal.fields.donor' defaultMessage='Donor' />}>
|
|
||||||
<Toggle
|
|
||||||
checked={account.donor}
|
|
||||||
onChange={handleDonorChange}
|
|
||||||
/>
|
|
||||||
</ListItem>
|
|
||||||
|
|
||||||
{features.suggestionsV2 && (
|
{features.suggestionsV2 && (
|
||||||
<ListItem label={<FormattedMessage id='account_moderation_modal.fields.suggested' defaultMessage='Suggested in people to follow' />}>
|
<ListItem label={<FormattedMessage id='account_moderation_modal.fields.suggested' defaultMessage='Suggested in people to follow' />}>
|
||||||
<Toggle
|
<Toggle
|
||||||
|
|
|
@ -56,7 +56,6 @@ export const AccountRecord = ImmutableRecord({
|
||||||
admin: false,
|
admin: false,
|
||||||
display_name_html: '',
|
display_name_html: '',
|
||||||
domain: '',
|
domain: '',
|
||||||
donor: false,
|
|
||||||
moderator: false,
|
moderator: false,
|
||||||
note_emojified: '',
|
note_emojified: '',
|
||||||
note_plain: '',
|
note_plain: '',
|
||||||
|
@ -155,9 +154,11 @@ const normalizeVerified = (account: ImmutableMap<string, any>) => {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Get donor status from tags. */
|
/** Upgrade legacy donor tag to a badge. */
|
||||||
const normalizeDonor = (account: ImmutableMap<string, any>) => {
|
const normalizeDonor = (account: ImmutableMap<string, any>) => {
|
||||||
return account.set('donor', getTags(account).includes('donor'));
|
const tags = getTags(account);
|
||||||
|
const updated = tags.includes('donor') ? tags.push('badge:donor') : tags;
|
||||||
|
return account.setIn(['pleroma', 'tags'], updated);
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Normalize Fedibird/Truth Social/Pleroma location */
|
/** Normalize Fedibird/Truth Social/Pleroma location */
|
||||||
|
|
Ładowanie…
Reference in New Issue