From 894bf1e880d20727e52dca66d24436ed049e23e2 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 9 Mar 2022 12:16:24 -0600 Subject: [PATCH] Account normalizer: convert to Typescript, add type --- .../normalizers/{account.js => account.ts} | 58 ++++++++++++++++--- 1 file changed, 51 insertions(+), 7 deletions(-) rename app/soapbox/normalizers/{account.js => account.ts} (58%) diff --git a/app/soapbox/normalizers/account.js b/app/soapbox/normalizers/account.ts similarity index 58% rename from app/soapbox/normalizers/account.js rename to app/soapbox/normalizers/account.ts index 9515e1217..61db66915 100644 --- a/app/soapbox/normalizers/account.js +++ b/app/soapbox/normalizers/account.ts @@ -2,6 +2,44 @@ import { Map as ImmutableMap, List as ImmutableList, Record } from 'immutable'; import { mergeDefined } from 'soapbox/utils/normalizers'; +interface Account { + acct: string; + avatar: string; + avatar_static: string; + birthday: Date | undefined; + bot: boolean; + created_at: Date; + display_name: string; + emojis: ImmutableList; + fields: ImmutableList; + followers_count: number; + following_count: number; + fqn: string; + header: string; + header_static: string; + id: string; + last_status_at: Date; + location: string; + locked: boolean; + moved: null; + note: string; + pleroma: ImmutableMap; + source: ImmutableMap; + statuses_count: number; + uri: string; + url: string; + username: string; + verified: boolean; + + // Internal fields + display_name_html: string; + note_emojified: string; + note_plain: string; + patron: ImmutableMap; + relationship: ImmutableList; + should_refetch: boolean; +} + const AccountRecord = Record({ acct: '', avatar: '', @@ -41,8 +79,8 @@ const AccountRecord = Record({ }); // https://gitlab.com/soapbox-pub/soapbox-fe/-/issues/549 -const normalizePleromaLegacyFields = account => { - return account.update('pleroma', ImmutableMap(), pleroma => { +const normalizePleromaLegacyFields = (account: ImmutableMap) => { + return account.update('pleroma', ImmutableMap(), (pleroma: ImmutableMap) => { return pleroma.withMutations(pleroma => { const legacy = ImmutableMap({ is_active: !pleroma.get('deactivated'), @@ -57,7 +95,7 @@ const normalizePleromaLegacyFields = account => { }; // Normalize Pleroma/Fedibird birthday -const normalizeBirthday = account => { +const normalizeBirthday = (account: ImmutableMap) => { const birthday = [ account.getIn(['pleroma', 'birthday']), account.getIn(['other_settings', 'birthday']), @@ -66,18 +104,24 @@ const normalizeBirthday = account => { return account.set('birthday', birthday); }; +// Get Pleroma tags +const getTags = (account: ImmutableMap): ImmutableList => { + const tags = account.getIn(['pleroma', 'tags']); + return ImmutableList(ImmutableList.isList(tags) ? tags : []); +}; + // Normalize Truth Social/Pleroma verified -const normalizeVerified = account => { +const normalizeVerified = (account: ImmutableMap) => { return account.update('verified', verified => { return [ verified === true, - account.getIn(['pleroma', 'tags'], ImmutableList()).includes('verified'), + getTags(account).includes('verified'), ].some(Boolean); }); }; // Normalize Fedibird/Truth Social location -const normalizeLocation = account => { +const normalizeLocation = (account: ImmutableMap) => { return account.update('location', location => { return [ location, @@ -86,7 +130,7 @@ const normalizeLocation = account => { }); }; -export const normalizeAccount = account => { +export const normalizeAccount = (account: ImmutableMap): Account => { return AccountRecord( account.withMutations(account => { normalizePleromaLegacyFields(account);