Remove unused account reducer... 🤦

This commit is contained in:
Alex Gleason 2024-10-19 11:31:42 -05:00
parent 32006407a3
commit c6f179b1be
No known key found for this signature in database
GPG Key ID: 7211D1F99744FBB7
8 changed files with 13 additions and 205 deletions

View File

@ -30,7 +30,7 @@ function useAccount(accountId?: string, opts: UseAccountOpts = {}) {
isLoading: isRelationshipLoading,
} = useRelationship(accountId, { enabled: withRelationship });
const isBlocked = entity?.relationship?.blocked_by === true;
const isBlocked = relationship?.blocked_by === true;
const isUnavailable = (me === entity?.id) ? false : (isBlocked && !features.blockersVisible);
const account = useMemo(

View File

@ -31,7 +31,7 @@ function useAccountLookup(acct: string | undefined, opts: UseAccountLookupOpts =
isLoading: isRelationshipLoading,
} = useRelationship(account?.id, { enabled: withRelationship });
const isBlocked = account?.relationship?.blocked_by === true;
const isBlocked = relationship?.blocked_by === true;
const isUnavailable = (me === account?.id) ? false : (isBlocked && !features.blockersVisible);
useEffect(() => {

View File

@ -9,11 +9,10 @@ import {
fromJS,
} from 'immutable';
import type { ReducerAccount } from 'soapbox/reducers/accounts';
import type { Account, EmbeddedEntity } from 'soapbox/types/entities';
export const AdminAccountRecord = ImmutableRecord({
account: null as EmbeddedEntity<Account | ReducerAccount>,
account: null as EmbeddedEntity<Account>,
approved: false,
confirmed: false,
created_at: new Date(),

View File

@ -9,21 +9,20 @@ import {
fromJS,
} from 'immutable';
import type { ReducerAccount } from 'soapbox/reducers/accounts';
import type { Account, EmbeddedEntity, Status } from 'soapbox/types/entities';
export const AdminReportRecord = ImmutableRecord({
account: null as EmbeddedEntity<Account | ReducerAccount>,
account: null as EmbeddedEntity<Account>,
action_taken: false,
action_taken_by_account: null as EmbeddedEntity<Account | ReducerAccount> | null,
assigned_account: null as EmbeddedEntity<Account | ReducerAccount> | null,
action_taken_by_account: null as EmbeddedEntity<Account> | null,
assigned_account: null as EmbeddedEntity<Account> | null,
category: '',
comment: '',
created_at: new Date(),
id: '',
rules: ImmutableList<string>(),
statuses: ImmutableList<EmbeddedEntity<Status>>(),
target_account: null as EmbeddedEntity<Account | ReducerAccount>,
target_account: null as EmbeddedEntity<Account>,
updated_at: new Date(),
});

View File

@ -17,11 +17,10 @@ import { pollSchema } from 'soapbox/schemas';
import { stripCompatibilityFeatures } from 'soapbox/utils/html';
import { makeEmojiMap } from 'soapbox/utils/normalizers';
import type { ReducerAccount } from 'soapbox/reducers/accounts';
import type { Account, Attachment, Emoji, EmbeddedEntity, Poll } from 'soapbox/types/entities';
export const StatusEditRecord = ImmutableRecord({
account: null as EmbeddedEntity<Account | ReducerAccount>,
account: null as EmbeddedEntity<Account>,
content: '',
created_at: new Date(),
emojis: ImmutableList<Emoji>(),

View File

@ -1,176 +0,0 @@
import { produce } from 'immer';
import {
ADMIN_USERS_TAG_REQUEST,
ADMIN_USERS_TAG_SUCCESS,
ADMIN_USERS_TAG_FAIL,
ADMIN_USERS_UNTAG_REQUEST,
ADMIN_USERS_UNTAG_SUCCESS,
ADMIN_USERS_UNTAG_FAIL,
ADMIN_ADD_PERMISSION_GROUP_REQUEST,
ADMIN_ADD_PERMISSION_GROUP_SUCCESS,
ADMIN_ADD_PERMISSION_GROUP_FAIL,
ADMIN_REMOVE_PERMISSION_GROUP_REQUEST,
ADMIN_REMOVE_PERMISSION_GROUP_SUCCESS,
ADMIN_REMOVE_PERMISSION_GROUP_FAIL,
ADMIN_USERS_DELETE_REQUEST,
ADMIN_USERS_DELETE_FAIL,
ADMIN_USERS_DEACTIVATE_REQUEST,
ADMIN_USERS_DEACTIVATE_FAIL,
} from 'soapbox/actions/admin';
import { CHATS_FETCH_SUCCESS, CHATS_EXPAND_SUCCESS, CHAT_FETCH_SUCCESS } from 'soapbox/actions/chats';
import {
ACCOUNT_IMPORT,
ACCOUNTS_IMPORT,
ACCOUNT_FETCH_FAIL_FOR_USERNAME_LOOKUP,
} from 'soapbox/actions/importer';
import { STREAMING_CHAT_UPDATE } from 'soapbox/actions/streaming';
import { Account, accountSchema } from 'soapbox/schemas';
import type { AnyAction } from 'redux';
export interface ReducerAccount extends Omit<Account, 'moved'> {
moved: string | null;
}
type State = Record<string, ReducerAccount>;
const initialState: State = {};
/** Convert sub-entities into string IDs (or null). */
function minifyAccount(account: Account): ReducerAccount {
return { ...account, moved: account.moved?.id ?? null };
}
/** Parse account data, and import valid accounts into the state. */
function fixAccount(state: State, data: unknown): State {
const result = accountSchema.safeParse(data);
if (!result.success) {
return state;
}
const account = result.data;
const normalized = minifyAccount(account);
return { ...state, [normalized.id]: normalized };
}
/** Import valid accounts into the state. */
function normalizeAccounts(state: State, data: unknown[]): State {
return produce(state, draft => {
data.forEach((item) => fixAccount(draft, item));
});
}
function importAccountFromChat(state: State, chat: any): State {
return fixAccount(state, chat.account);
}
function importAccountsFromChats(state: State, chats: unknown[]): State {
return produce(state, draft => {
chats.forEach(chat => importAccountFromChat(draft, chat));
});
}
function addTags(state: State, accountIds: string[], tags: string[]): State {
return produce(state, draft => {
for (const id of accountIds) {
const account = draft[id];
if (!account) continue;
const tagSet = new Set([...account.pleroma.tags, ...tags]);
account.pleroma.tags = [...tagSet];
if (tagSet.has('verified')) {
account.verified = true;
}
}
});
}
function removeTags (state: State, accountIds: string[], tags: string[]): State {
return produce(state, draft => {
for (const id of accountIds) {
const account = draft[id];
if (!account) continue;
const tagSet = new Set(account.pleroma.tags).difference(new Set(tags));
account.pleroma.tags = [...tagSet];
if (tagSet.has('verified')) {
account.verified = false;
}
}
});
}
function setActive(state: State, accountIds: Array<string>, active: boolean): State {
return produce(state, draft => {
for (const id of accountIds) {
const account = draft[id];
if (!account) continue;
account.pleroma.deactivated = !active;
}
});
}
function setPermission(state: State, accountIds: string[], permissionGroup: string, value: boolean): State {
return produce(state, draft => {
for (const id of accountIds) {
const account = draft[id];
if (!account) continue;
switch (permissionGroup) {
case 'admin':
account.pleroma.is_admin = value;
break;
case 'moderator':
account.pleroma.is_moderator = value;
break;
}
}
});
}
export default function accounts(state: State = initialState, action: AnyAction): State {
switch (action.type) {
case ACCOUNT_IMPORT:
return fixAccount(state, action.account);
case ACCOUNTS_IMPORT:
return normalizeAccounts(state, action.accounts);
case ACCOUNT_FETCH_FAIL_FOR_USERNAME_LOOKUP:
return fixAccount(state, { id: -1, username: action.username });
case CHATS_FETCH_SUCCESS:
case CHATS_EXPAND_SUCCESS:
return importAccountsFromChats(state, action.chats);
case CHAT_FETCH_SUCCESS:
case STREAMING_CHAT_UPDATE:
return importAccountsFromChats(state, [action.chat]);
case ADMIN_USERS_TAG_REQUEST:
case ADMIN_USERS_TAG_SUCCESS:
case ADMIN_USERS_UNTAG_FAIL:
return addTags(state, action.accountIds, action.tags);
case ADMIN_USERS_UNTAG_REQUEST:
case ADMIN_USERS_UNTAG_SUCCESS:
case ADMIN_USERS_TAG_FAIL:
return removeTags(state, action.accountIds, action.tags);
case ADMIN_ADD_PERMISSION_GROUP_REQUEST:
case ADMIN_ADD_PERMISSION_GROUP_SUCCESS:
case ADMIN_REMOVE_PERMISSION_GROUP_FAIL:
return setPermission(state, action.accountIds, action.permissionGroup, true);
case ADMIN_REMOVE_PERMISSION_GROUP_REQUEST:
case ADMIN_REMOVE_PERMISSION_GROUP_SUCCESS:
case ADMIN_ADD_PERMISSION_GROUP_FAIL:
return setPermission(state, action.accountIds, action.permissionGroup, false);
case ADMIN_USERS_DELETE_REQUEST:
case ADMIN_USERS_DEACTIVATE_REQUEST:
return setActive(state, action.accountIds, false);
case ADMIN_USERS_DELETE_FAIL:
case ADMIN_USERS_DEACTIVATE_FAIL:
return setActive(state, action.accountIds, true);
default:
return state;
}
}

View File

@ -7,6 +7,7 @@ import emojify from 'soapbox/features/emoji';
import { unescapeHTML } from 'soapbox/utils/html';
import { customEmojiSchema } from './custom-emoji';
import { Relationship } from './relationship';
import { coerceObject, contentSchema, filteredArray, makeCustomEmojiMap } from './utils';
import type { Resolve } from 'soapbox/utils/types';
@ -180,6 +181,9 @@ const accountSchema = baseAccountSchema.extend({
moved: baseAccountSchema.transform(transformAccount).nullable().catch(null),
}).transform(transformAccount);
type Account = Resolve<z.infer<typeof accountSchema>>;
type Account = Resolve<z.infer<typeof accountSchema>> & {
// FIXME: decouple these in components.
relationship?: Relationship;
}
export { accountSchema, type Account };

View File

@ -1,17 +0,0 @@
import { AccountRecord } from 'soapbox/normalizers';
import {
getDomain,
} from './accounts';
import type { ReducerAccount } from 'soapbox/reducers/accounts';
describe('getDomain', () => {
const account = AccountRecord({
acct: 'alice',
url: 'https://party.com/users/alice',
}) as ReducerAccount;
it('returns the domain', () => {
expect(getDomain(account)).toEqual('party.com');
});
});