diff --git a/packages/pl-fe/src/actions/importer.ts b/packages/pl-fe/src/actions/importer.ts index e8cd37203..944189815 100644 --- a/packages/pl-fe/src/actions/importer.ts +++ b/packages/pl-fe/src/actions/importer.ts @@ -1,6 +1,5 @@ import { importEntities as importEntityStoreEntities } from 'pl-fe/entity-store/actions'; import { Entities } from 'pl-fe/entity-store/entities'; -import { normalizeGroup } from 'pl-fe/normalizers/group'; import { queryClient } from 'pl-fe/queries/client'; import { selectAccount } from 'pl-fe/selectors'; @@ -114,7 +113,7 @@ const importEntities = (entities: { } if (!isEmpty(accounts)) dispatch(importEntityStoreEntities(Object.values(accounts), Entities.ACCOUNTS)); - if (!isEmpty(groups)) dispatch(importEntityStoreEntities(Object.values(groups).map(normalizeGroup), Entities.GROUPS)); + if (!isEmpty(groups)) dispatch(importEntityStoreEntities(Object.values(groups), Entities.GROUPS)); if (!isEmpty(polls)) { for (const poll of Object.values(polls)) { queryClient.setQueryData(['statuses', 'polls', poll.id], poll); diff --git a/packages/pl-fe/src/api/hooks/groups/use-create-group.ts b/packages/pl-fe/src/api/hooks/groups/use-create-group.ts index 5cf5b6b5f..75aa1fe0f 100644 --- a/packages/pl-fe/src/api/hooks/groups/use-create-group.ts +++ b/packages/pl-fe/src/api/hooks/groups/use-create-group.ts @@ -1,17 +1,15 @@ import { Entities } from 'pl-fe/entity-store/entities'; import { useCreateEntity } from 'pl-fe/entity-store/hooks/use-create-entity'; import { useClient } from 'pl-fe/hooks/use-client'; -import { normalizeGroup, type Group } from 'pl-fe/normalizers/group'; -import type { Group as BaseGroup, CreateGroupParams } from 'pl-api'; +import type { Group, CreateGroupParams } from 'pl-api'; const useCreateGroup = () => { const client = useClient(); - const { createEntity, ...rest } = useCreateEntity( + const { createEntity, ...rest } = useCreateEntity( [Entities.GROUPS, 'search', ''], (params: CreateGroupParams) => client.experimental.groups.createGroup(params), - { transform: normalizeGroup }, ); return { diff --git a/packages/pl-fe/src/api/hooks/groups/use-group.ts b/packages/pl-fe/src/api/hooks/groups/use-group.ts index ef1e2203b..9e80c208d 100644 --- a/packages/pl-fe/src/api/hooks/groups/use-group.ts +++ b/packages/pl-fe/src/api/hooks/groups/use-group.ts @@ -4,21 +4,19 @@ import { useHistory } from 'react-router-dom'; import { Entities } from 'pl-fe/entity-store/entities'; import { useEntity } from 'pl-fe/entity-store/hooks/use-entity'; import { useClient } from 'pl-fe/hooks/use-client'; -import { normalizeGroup, type Group } from 'pl-fe/normalizers/group'; import { useGroupRelationship } from './use-group-relationship'; -import type { Group as BaseGroup } from 'pl-api'; +import type { Group } from 'pl-api'; const useGroup = (groupId: string, refetch = true) => { const client = useClient(); const history = useHistory(); - const { entity: group, isUnauthorized, ...result } = useEntity( + const { entity: group, isUnauthorized, ...result } = useEntity( [Entities.GROUPS, groupId], () => client.experimental.groups.getGroup(groupId), { - transform: normalizeGroup, refetch, enabled: !!groupId, }, diff --git a/packages/pl-fe/src/api/hooks/groups/use-groups.ts b/packages/pl-fe/src/api/hooks/groups/use-groups.ts index 43aff160b..cda4b93b4 100644 --- a/packages/pl-fe/src/api/hooks/groups/use-groups.ts +++ b/packages/pl-fe/src/api/hooks/groups/use-groups.ts @@ -2,20 +2,19 @@ import { Entities } from 'pl-fe/entity-store/entities'; import { useEntities } from 'pl-fe/entity-store/hooks/use-entities'; import { useClient } from 'pl-fe/hooks/use-client'; import { useFeatures } from 'pl-fe/hooks/use-features'; -import { normalizeGroup, type Group } from 'pl-fe/normalizers/group'; import { useGroupRelationships } from './use-group-relationships'; -import type { Group as BaseGroup } from 'pl-api'; +import type { Group } from 'pl-api'; const useGroups = () => { const client = useClient(); const features = useFeatures(); - const { entities, ...result } = useEntities( + const { entities, ...result } = useEntities( [Entities.GROUPS, 'search', ''], () => client.experimental.groups.getGroups(), - { enabled: features.groups, transform: normalizeGroup }, + { enabled: features.groups }, ); const { relationships } = useGroupRelationships( ['search', ''], diff --git a/packages/pl-fe/src/api/hooks/groups/use-update-group.ts b/packages/pl-fe/src/api/hooks/groups/use-update-group.ts index b838f9c83..54eb9e185 100644 --- a/packages/pl-fe/src/api/hooks/groups/use-update-group.ts +++ b/packages/pl-fe/src/api/hooks/groups/use-update-group.ts @@ -1,7 +1,6 @@ import { Entities } from 'pl-fe/entity-store/entities'; import { useCreateEntity } from 'pl-fe/entity-store/hooks/use-create-entity'; import { useClient } from 'pl-fe/hooks/use-client'; -import { normalizeGroup } from 'pl-fe/normalizers/group'; interface UpdateGroupParams { display_name?: string; @@ -18,7 +17,6 @@ const useUpdateGroup = (groupId: string) => { const { createEntity, ...rest } = useCreateEntity( [Entities.GROUPS], (params: UpdateGroupParams) => client.experimental.groups.updateGroup(groupId, params), - { transform: normalizeGroup }, ); return { diff --git a/packages/pl-fe/src/components/group-card.tsx b/packages/pl-fe/src/components/group-card.tsx index 1a384169a..769d08cce 100644 --- a/packages/pl-fe/src/components/group-card.tsx +++ b/packages/pl-fe/src/components/group-card.tsx @@ -11,10 +11,10 @@ import GroupRelationship from 'pl-fe/features/group/components/group-relationshi import GroupAvatar from './groups/group-avatar'; -import type { Group as GroupEntity } from 'pl-fe/normalizers/group'; +import type { Group } from 'pl-api'; interface IGroupCard { - group: GroupEntity; + group: Group; } const GroupCard: React.FC = ({ group }) => ( diff --git a/packages/pl-fe/src/components/groups/popover/group-popover.tsx b/packages/pl-fe/src/components/groups/popover/group-popover.tsx index 197e40398..5219d2669 100644 --- a/packages/pl-fe/src/components/groups/popover/group-popover.tsx +++ b/packages/pl-fe/src/components/groups/popover/group-popover.tsx @@ -14,7 +14,7 @@ import GroupPrivacy from 'pl-fe/features/group/components/group-privacy'; import GroupAvatar from '../group-avatar'; -import type { Group } from 'pl-fe/normalizers/group'; +import type { Group } from 'pl-api'; interface IGroupPopoverContainer { children: React.ReactElement>; diff --git a/packages/pl-fe/src/components/status-action-bar.tsx b/packages/pl-fe/src/components/status-action-bar.tsx index 6d7afe41d..d69df4681 100644 --- a/packages/pl-fe/src/components/status-action-bar.tsx +++ b/packages/pl-fe/src/components/status-action-bar.tsx @@ -1,4 +1,4 @@ -import { type CustomEmoji, GroupRoles } from 'pl-api'; +import { type CustomEmoji, GroupRoles, Group } from 'pl-api'; import React, { useCallback, useMemo } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { useHistory, useRouteMatch } from 'react-router-dom'; @@ -42,7 +42,6 @@ import type { Menu } from 'pl-fe/components/dropdown-menu'; import type { Emoji as EmojiType } from 'pl-fe/features/emoji'; import type { UnauthorizedModalAction } from 'pl-fe/modals/unauthorized-modal'; import type { Account } from 'pl-fe/normalizers/account'; -import type { Group } from 'pl-fe/normalizers/group'; import type { SelectedStatus } from 'pl-fe/selectors'; import type { Me } from 'pl-fe/types/pl-fe'; diff --git a/packages/pl-fe/src/components/ui/avatar.tsx b/packages/pl-fe/src/components/ui/avatar.tsx index 3f61584c4..72eb5e8b4 100644 --- a/packages/pl-fe/src/components/ui/avatar.tsx +++ b/packages/pl-fe/src/components/ui/avatar.tsx @@ -30,6 +30,7 @@ interface IAvatar extends Pick { const intl = useIntl(); const { disableUserProvidedMedia } = useSettings(); - const { alt, src, size = AVATAR_SIZE, className, isCat } = props; + const { alt, src, size = AVATAR_SIZE, className, isCat, isDefault } = props; const [color, setColor] = useState(undefined); const [isAvatarMissing, setIsAvatarMissing] = useState(false); @@ -73,7 +74,7 @@ const Avatar = (props: IAvatar) => { }, [size, color]); if (disableUserProvidedMedia) { - if (isAvatarMissing || !alt || isDefaultAvatar(src)) return null; + if (isAvatarMissing || !alt || isDefault) return null; return ( { className={clsx('rounded-lg leading-[0]', isCat && 'avatar__cat bg-gray-200 dark:bg-gray-900', className)} innerClassName='rounded-[inherit] text-sm' style={style} - src={src} + src={src || require('pl-fe/assets/images/avatar-missing.png')} alt={altText} onError={handleLoadFailure} /> diff --git a/packages/pl-fe/src/entity-store/entities.ts b/packages/pl-fe/src/entity-store/entities.ts index ad0070285..5ab905746 100644 --- a/packages/pl-fe/src/entity-store/entities.ts +++ b/packages/pl-fe/src/entity-store/entities.ts @@ -1,6 +1,5 @@ -import type { GroupMember, GroupRelationship } from 'pl-api'; +import type { GroupMember, GroupRelationship, Group } from 'pl-api'; import type { Account } from 'pl-fe/normalizers/account'; -import type { Group } from 'pl-fe/normalizers/group'; enum Entities { ACCOUNTS = 'Accounts', diff --git a/packages/pl-fe/src/features/group/components/group-action-button.test.tsx b/packages/pl-fe/src/features/group/components/group-action-button.test.tsx index 63b470e6a..358195a75 100644 --- a/packages/pl-fe/src/features/group/components/group-action-button.test.tsx +++ b/packages/pl-fe/src/features/group/components/group-action-button.test.tsx @@ -6,7 +6,7 @@ import { render, screen } from 'pl-fe/jest/test-helpers'; import GroupActionButton from './group-action-button'; -import type { Group } from 'pl-fe/normalizers/group'; +import type { Group } from 'pl-api'; let group: Group; diff --git a/packages/pl-fe/src/features/group/components/group-header-image.tsx b/packages/pl-fe/src/features/group/components/group-header-image.tsx index a6197d60e..dda445004 100644 --- a/packages/pl-fe/src/features/group/components/group-header-image.tsx +++ b/packages/pl-fe/src/features/group/components/group-header-image.tsx @@ -4,7 +4,7 @@ import { defineMessages, useIntl } from 'react-intl'; import Icon from 'pl-fe/components/ui/icon'; -import type { Group } from 'pl-fe/normalizers/group'; +import type { Group } from 'pl-api'; const messages = defineMessages({ header: { id: 'group.header.alt', defaultMessage: 'Group header' }, diff --git a/packages/pl-fe/src/features/group/components/group-header.test.tsx b/packages/pl-fe/src/features/group/components/group-header.test.tsx index 34132997b..9c1efe2f6 100644 --- a/packages/pl-fe/src/features/group/components/group-header.test.tsx +++ b/packages/pl-fe/src/features/group/components/group-header.test.tsx @@ -5,7 +5,7 @@ import { render, screen } from 'pl-fe/jest/test-helpers'; import GroupHeader from './group-header'; -import type { Group } from 'pl-fe/normalizers/group'; +import type { Group } from 'pl-api'; let group: Group; diff --git a/packages/pl-fe/src/features/group/components/group-header.tsx b/packages/pl-fe/src/features/group/components/group-header.tsx index 846dea437..ebea795ae 100644 --- a/packages/pl-fe/src/features/group/components/group-header.tsx +++ b/packages/pl-fe/src/features/group/components/group-header.tsx @@ -19,7 +19,7 @@ import GroupOptionsButton from './group-options-button'; import GroupPrivacy from './group-privacy'; import GroupRelationship from './group-relationship'; -import type { Group } from 'pl-fe/normalizers/group'; +import type { Group } from 'pl-api'; const messages = defineMessages({ header: { id: 'group.header.alt', defaultMessage: 'Group header' }, diff --git a/packages/pl-fe/src/features/group/components/group-member-count.test.tsx b/packages/pl-fe/src/features/group/components/group-member-count.test.tsx index 071806fc1..6bb2c292e 100644 --- a/packages/pl-fe/src/features/group/components/group-member-count.test.tsx +++ b/packages/pl-fe/src/features/group/components/group-member-count.test.tsx @@ -5,7 +5,7 @@ import { render, screen } from 'pl-fe/jest/test-helpers'; import GroupMemberCount from './group-member-count'; -import type { Group } from 'pl-fe/normalizers/group'; +import type { Group } from 'pl-api'; let group: Group; diff --git a/packages/pl-fe/src/features/group/components/group-member-count.tsx b/packages/pl-fe/src/features/group/components/group-member-count.tsx index 4466949bf..101a692f4 100644 --- a/packages/pl-fe/src/features/group/components/group-member-count.tsx +++ b/packages/pl-fe/src/features/group/components/group-member-count.tsx @@ -5,7 +5,7 @@ import { Link } from 'react-router-dom'; import Text from 'pl-fe/components/ui/text'; import { shortNumberFormat } from 'pl-fe/utils/numbers'; -import type { Group } from 'pl-fe/normalizers/group'; +import type { Group } from 'pl-api'; interface IGroupMemberCount { group: Pick; diff --git a/packages/pl-fe/src/features/group/components/group-member-list-item.tsx b/packages/pl-fe/src/features/group/components/group-member-list-item.tsx index a9dd795f8..3cc44137f 100644 --- a/packages/pl-fe/src/features/group/components/group-member-list-item.tsx +++ b/packages/pl-fe/src/features/group/components/group-member-list-item.tsx @@ -18,8 +18,8 @@ import { useKickGroupMemberMutation, type MinifiedGroupMember } from 'pl-fe/quer import { useModalsActions } from 'pl-fe/stores/modals'; import toast from 'pl-fe/toast'; +import type { Group } from 'pl-api'; import type { Menu as IMenu } from 'pl-fe/components/dropdown-menu'; -import type { Group } from 'pl-fe/normalizers/group'; const messages = defineMessages({ adminLimitTitle: { id: 'group.member.admin.limit.title', defaultMessage: 'Admin limit reached' }, diff --git a/packages/pl-fe/src/features/group/components/group-options-button.test.tsx b/packages/pl-fe/src/features/group/components/group-options-button.test.tsx index 4b10406c7..60e6c2318 100644 --- a/packages/pl-fe/src/features/group/components/group-options-button.test.tsx +++ b/packages/pl-fe/src/features/group/components/group-options-button.test.tsx @@ -6,7 +6,7 @@ import { render, screen } from 'pl-fe/jest/test-helpers'; import GroupOptionsButton from './group-options-button'; -import type { Group } from 'pl-fe/normalizers/group'; +import type { Group } from 'pl-api'; let group: Group; diff --git a/packages/pl-fe/src/features/group/components/group-privacy.test.tsx b/packages/pl-fe/src/features/group/components/group-privacy.test.tsx index 3487a1918..0ee729c1a 100644 --- a/packages/pl-fe/src/features/group/components/group-privacy.test.tsx +++ b/packages/pl-fe/src/features/group/components/group-privacy.test.tsx @@ -5,7 +5,7 @@ import { render, screen } from 'pl-fe/jest/test-helpers'; import GroupPrivacy from './group-privacy'; -import type { Group } from 'pl-fe/normalizers/group'; +import type { Group } from 'pl-api'; let group: Group; diff --git a/packages/pl-fe/src/features/group/components/group-privacy.tsx b/packages/pl-fe/src/features/group/components/group-privacy.tsx index 9d2224f71..47e00f475 100644 --- a/packages/pl-fe/src/features/group/components/group-privacy.tsx +++ b/packages/pl-fe/src/features/group/components/group-privacy.tsx @@ -7,7 +7,7 @@ import Popover from 'pl-fe/components/ui/popover'; import Stack from 'pl-fe/components/ui/stack'; import Text from 'pl-fe/components/ui/text'; -import type { Group } from 'pl-fe/normalizers/group'; +import type { Group } from 'pl-api'; interface IGroupPolicy { group: Pick; diff --git a/packages/pl-fe/src/features/group/components/group-relationship.test.tsx b/packages/pl-fe/src/features/group/components/group-relationship.test.tsx index b11e4929d..fcf4c6ec5 100644 --- a/packages/pl-fe/src/features/group/components/group-relationship.test.tsx +++ b/packages/pl-fe/src/features/group/components/group-relationship.test.tsx @@ -6,7 +6,7 @@ import { render, screen } from 'pl-fe/jest/test-helpers'; import GroupRelationship from './group-relationship'; -import type { Group } from 'pl-fe/normalizers/group'; +import type { Group } from 'pl-api'; let group: Group; diff --git a/packages/pl-fe/src/features/groups/components/discover/group-list-item.tsx b/packages/pl-fe/src/features/groups/components/discover/group-list-item.tsx index 4e1b11223..48004e3f2 100644 --- a/packages/pl-fe/src/features/groups/components/discover/group-list-item.tsx +++ b/packages/pl-fe/src/features/groups/components/discover/group-list-item.tsx @@ -11,7 +11,7 @@ import Emojify from 'pl-fe/features/emoji/emojify'; import GroupActionButton from 'pl-fe/features/group/components/group-action-button'; import { shortNumberFormat } from 'pl-fe/utils/numbers'; -import type { Group } from 'pl-fe/normalizers/group'; +import type { Group } from 'pl-api'; interface IGroupListItem { group: Pick; diff --git a/packages/pl-fe/src/features/ui/components/panels/group-media-panel.tsx b/packages/pl-fe/src/features/ui/components/panels/group-media-panel.tsx index de8ad01f6..b45f1aee3 100644 --- a/packages/pl-fe/src/features/ui/components/panels/group-media-panel.tsx +++ b/packages/pl-fe/src/features/ui/components/panels/group-media-panel.tsx @@ -8,7 +8,7 @@ import { type AccountGalleryAttachment, useGroupGallery } from 'pl-fe/hooks/use- import { MediaItem } from 'pl-fe/pages/accounts/account-gallery'; import { useModalsActions } from 'pl-fe/stores/modals'; -import type { Group } from 'pl-fe/normalizers/group'; +import type { Group } from 'pl-api'; interface IGroupMediaPanel { group: Group; diff --git a/packages/pl-fe/src/modals/manage-group-modal/index.tsx b/packages/pl-fe/src/modals/manage-group-modal/index.tsx index d954c913b..fc788c50e 100644 --- a/packages/pl-fe/src/modals/manage-group-modal/index.tsx +++ b/packages/pl-fe/src/modals/manage-group-modal/index.tsx @@ -10,10 +10,9 @@ import toast from 'pl-fe/toast'; import ConfirmationStep from './steps/confirmation-step'; import DetailsStep from './steps/details-step'; -import type { CreateGroupParams } from 'pl-api'; +import type { CreateGroupParams, Group } from 'pl-api'; import type { PlfeResponse } from 'pl-fe/api'; import type { BaseModalProps } from 'pl-fe/features/ui/components/modal-root'; -import type { Group } from 'pl-fe/normalizers/group'; const messages = defineMessages({ create: { id: 'manage_group.create', defaultMessage: 'Create group' }, diff --git a/packages/pl-fe/src/modals/manage-group-modal/steps/confirmation-step.tsx b/packages/pl-fe/src/modals/manage-group-modal/steps/confirmation-step.tsx index 0251f3bde..cea070ca3 100644 --- a/packages/pl-fe/src/modals/manage-group-modal/steps/confirmation-step.tsx +++ b/packages/pl-fe/src/modals/manage-group-modal/steps/confirmation-step.tsx @@ -11,7 +11,7 @@ import Text from 'pl-fe/components/ui/text'; import toast from 'pl-fe/toast'; import copy from 'pl-fe/utils/copy'; -import type { Group } from 'pl-fe/normalizers/group'; +import type { Group } from 'pl-api'; interface IConfirmationStep { group: Group | null; diff --git a/packages/pl-fe/src/normalizers/group.ts b/packages/pl-fe/src/normalizers/group.ts deleted file mode 100644 index f70952da6..000000000 --- a/packages/pl-fe/src/normalizers/group.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { Group as BaseGroup } from 'pl-api'; - -const normalizeGroup = (group: BaseGroup) => { - const missingAvatar = require('pl-fe/assets/images/avatar-missing.png'); - const missingHeader = require('pl-fe/assets/images/header-missing.png'); - - return { - ...group, - avatar: group.avatar || group.avatar_static || missingAvatar, - header: group.header || group.header_static || missingHeader, - }; -}; - -type Group = ReturnType; - -export { normalizeGroup, type Group }; diff --git a/packages/pl-fe/src/normalizers/status.ts b/packages/pl-fe/src/normalizers/status.ts index 9b1ec728a..5f0bd8fa5 100644 --- a/packages/pl-fe/src/normalizers/status.ts +++ b/packages/pl-fe/src/normalizers/status.ts @@ -9,7 +9,6 @@ import * as v from 'valibot'; import { unescapeHTML } from 'pl-fe/utils/html'; import { normalizeAccount } from './account'; -import { normalizeGroup } from './group'; const domParser = new DOMParser(); @@ -106,7 +105,7 @@ const normalizeStatus = (status: BaseStatus & { } // Normalize group - const group = status.group ? normalizeGroup(status.group) : null; + const group = status.group || null; return { account_id: status.account.id, diff --git a/packages/pl-fe/src/selectors/index.ts b/packages/pl-fe/src/selectors/index.ts index c88af4edd..d57780bb3 100644 --- a/packages/pl-fe/src/selectors/index.ts +++ b/packages/pl-fe/src/selectors/index.ts @@ -7,10 +7,9 @@ import { validId } from 'pl-fe/utils/auth'; import ConfigDB from 'pl-fe/utils/config-db'; import { shouldFilter } from 'pl-fe/utils/timelines'; -import type { Filter, FilterResult, NotificationGroup } from 'pl-api'; +import type { Filter, FilterResult, NotificationGroup, Group } from 'pl-api'; import type { EntityStore } from 'pl-fe/entity-store/types'; import type { Account } from 'pl-fe/normalizers/account'; -import type { Group } from 'pl-fe/normalizers/group'; import type { minifyAdminReport } from 'pl-fe/queries/utils/minify-list'; import type { MinifiedStatus } from 'pl-fe/reducers/statuses'; import type { MRFSimple } from 'pl-fe/schemas/pleroma'; diff --git a/packages/pl-fe/src/utils/accounts.ts b/packages/pl-fe/src/utils/accounts.ts index acd5f1dd4..d3e9a1e43 100644 --- a/packages/pl-fe/src/utils/accounts.ts +++ b/packages/pl-fe/src/utils/accounts.ts @@ -1,5 +1,3 @@ -import range from 'lodash/range'; - import type { Account } from 'pl-fe/normalizers/account'; const getDomainFromURL = (account: Pick): string => {