From 8b6c5533031d50eec0a87898cbd82cd7d39184f1 Mon Sep 17 00:00:00 2001 From: spaenleh Date: Thu, 23 Oct 2025 08:09:03 +0200 Subject: [PATCH] fix: remove Member usage --- src/components/chatbox/constants.ts | 4 +- src/components/chatbox/types.ts | 3 -- src/components/chatbox/utils.ts | 4 +- .../item/settings/ItemMetadataContent.tsx | 10 ++-- src/modules/builder/utils/member.ts | 6 --- .../player/access/RequestAccessContent.tsx | 11 ++-- src/query/member/api.ts | 7 --- src/query/member/hooks.test.ts | 50 ------------------- src/query/member/hooks.ts | 13 ----- src/ui/items/AppItem.tsx | 4 +- 10 files changed, 17 insertions(+), 95 deletions(-) delete mode 100644 src/components/chatbox/types.ts delete mode 100644 src/modules/builder/utils/member.ts diff --git a/src/components/chatbox/constants.ts b/src/components/chatbox/constants.ts index ed1a889a0..dcd17fd01 100644 --- a/src/components/chatbox/constants.ts +++ b/src/components/chatbox/constants.ts @@ -1,6 +1,6 @@ import { SuggestionDataItem } from 'react-mentions'; -import { PartialMemberDisplay } from './types.js'; +import { Account } from '@graasp/sdk'; export const SCROLL_SAFETY_MARGIN = 64; export const CONTAINER_HEIGHT_SAFETY_MARGIN = 16; @@ -25,7 +25,7 @@ export const ALL_MEMBERS_SUGGESTION: SuggestionDataItem = { id: ALL_MEMBERS_ID, display: ALL_MEMBERS_DISPLAY, }; -export const ALL_MEMBERS_MEMBER: PartialMemberDisplay = { +export const ALL_MEMBERS_MEMBER: Account = { id: ALL_MEMBERS_ID, name: ALL_MEMBERS_DISPLAY, }; diff --git a/src/components/chatbox/types.ts b/src/components/chatbox/types.ts deleted file mode 100644 index c22ad4687..000000000 --- a/src/components/chatbox/types.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Member } from '@graasp/sdk'; - -export type PartialMemberDisplay = Pick; diff --git a/src/components/chatbox/utils.ts b/src/components/chatbox/utils.ts index 4c11e353b..f6c7af90c 100644 --- a/src/components/chatbox/utils.ts +++ b/src/components/chatbox/utils.ts @@ -1,4 +1,4 @@ -import { PartialMemberDisplay } from './types.js'; +import { Account } from '@graasp/sdk'; export const getIdMention = (textContent: string): RegExpMatchArray | null => /[\da-f]{8}-[\da-f]{4}-4[\da-f]{3}-[89ab][\da-f]{3}-[\da-f]{12})>/i.exec( @@ -23,7 +23,7 @@ export const LEGACY_MENTION_MARKUP = '`[__id__]`'; export const MENTION_MARKUP = '`[__display__]`'; export const getMentionMarkupFromMember = ( - member: PartialMemberDisplay, + member: Account, templateMarkup = MENTION_MARKUP, ): string => Object.entries(reactMentionsMarkup).reduce( diff --git a/src/modules/builder/components/item/settings/ItemMetadataContent.tsx b/src/modules/builder/components/item/settings/ItemMetadataContent.tsx index 2ace6ecc6..20b3fe076 100644 --- a/src/modules/builder/components/item/settings/ItemMetadataContent.tsx +++ b/src/modules/builder/components/item/settings/ItemMetadataContent.tsx @@ -16,23 +16,25 @@ import { getFileExtra, } from '@graasp/sdk'; +import { useQuery } from '@tanstack/react-query'; + import { NS } from '@/config/constants'; -import { hooks } from '@/config/queryClient'; import { ITEM_PANEL_NAME_ID, ITEM_PANEL_TABLE_ID } from '@/config/selectors'; +import { getOneMemberOptions } from '@/openapi/client/@tanstack/react-query.gen'; import { useOutletContext } from '~builder/contexts/OutletContext'; import { BUILDER } from '../../../langs'; import LanguageSelect from './LanguageSelect'; -const { useMember } = hooks; - const ItemMetadataContent = (): JSX.Element => { const { t: translateBuilder, i18n } = useTranslation(NS.Builder); const { t: translateCommon } = useTranslation(NS.Common); const { item } = useOutletContext(); - const { data: creator } = useMember(item?.creator?.id); + const { data: creator } = useQuery( + getOneMemberOptions({ path: { id: item.creator?.id ?? '' } }), + ); let size = null; let mimetype = null; diff --git a/src/modules/builder/utils/member.ts b/src/modules/builder/utils/member.ts deleted file mode 100644 index b74f3f555..000000000 --- a/src/modules/builder/utils/member.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Member } from '@graasp/sdk'; - -export const getMemberById = ( - members: Member[], - id: string, -): Member | undefined => members.find(({ id: thisId }) => id === thisId); diff --git a/src/modules/player/access/RequestAccessContent.tsx b/src/modules/player/access/RequestAccessContent.tsx index 2ee09b4cc..3aaafe114 100644 --- a/src/modules/player/access/RequestAccessContent.tsx +++ b/src/modules/player/access/RequestAccessContent.tsx @@ -3,11 +3,7 @@ import { useTranslation } from 'react-i18next'; import { Button, Stack, Typography } from '@mui/material'; -import { - DiscriminatedItem, - Member, - MembershipRequestStatus, -} from '@graasp/sdk'; +import { DiscriminatedItem, MembershipRequestStatus } from '@graasp/sdk'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { Check, Lock } from 'lucide-react'; @@ -17,17 +13,20 @@ import { MEMBERSHIP_REQUEST_PENDING_SCREEN_SELECTOR, REQUEST_MEMBERSHIP_BUTTON_ID, } from '@/config/selectors'; +import { CurrentAccount } from '@/openapi/client'; import { createMembershipRequestMutation, getOwnMembershipRequestByItemIdOptions, getOwnMembershipRequestByItemIdQueryKey, } from '@/openapi/client/@tanstack/react-query.gen'; +type CurrentMember = Exclude; + export function RequestAccessContent({ member, itemId, }: Readonly<{ - member: Member; + member: CurrentMember; itemId: DiscriminatedItem['id']; }>): JSX.Element { const { t: translatePlayer } = useTranslation(NS.Player); diff --git a/src/query/member/api.ts b/src/query/member/api.ts index 4df5eb1a4..85f3ff0fb 100644 --- a/src/query/member/api.ts +++ b/src/query/member/api.ts @@ -1,6 +1,5 @@ import { CurrentAccount, - Member, MemberStorage, MemberStorageItem, Paginated, @@ -22,18 +21,12 @@ import { buildDownloadAvatarRoute, buildExportMemberDataRoute, buildGetCurrentMemberRoute, - buildGetMemberRoute, buildGetMemberStorageFilesRoute, buildGetMemberStorageRoute, buildPostMemberEmailUpdateRoute, buildUploadAvatarRoute, } from './routes.js'; -export const getMember = async ({ id }: { id: UUID }) => - axios - .get(`${API_HOST}/${buildGetMemberRoute(id)}`) - .then(({ data }) => data); - export const getCurrentMember = async () => verifyAuthentication(() => axios diff --git a/src/query/member/hooks.test.ts b/src/query/member/hooks.test.ts index 7d90aa468..36d080ba5 100644 --- a/src/query/member/hooks.test.ts +++ b/src/query/member/hooks.test.ts @@ -21,7 +21,6 @@ import { MEMBER_STORAGE_ITEM_RESPONSE } from './fixtures.js'; import { buildDownloadAvatarRoute, buildGetCurrentMemberRoute, - buildGetMemberRoute, buildGetMemberStorageFilesRoute, buildGetMemberStorageRoute, } from './routes.js'; @@ -71,55 +70,6 @@ describe('Member Hooks', () => { }); }); - describe('useMember', () => { - const id = 'member-id'; - const response = AccountFactory(); - - it(`Receive member id = ${id}`, async () => { - const endpoints = [ - { - route: `/${buildGetMemberRoute(id)}`, - response, - }, - ]; - const hook = () => hooks.useMember(id); - const { data } = await mockHook({ - hook, - wrapper, - endpoints, - }); - - expect(data).toMatchObject(response); - // verify cache keys - expect( - queryClient.getQueryData(memberKeys.single(id).content), - ).toMatchObject(data!); - }); - - it(`Unauthorized`, async () => { - const hook = () => hooks.useMember(id); - const endpoints = [ - { - route: `/${buildGetMemberRoute(id)}`, - response: UNAUTHORIZED_RESPONSE, - statusCode: StatusCodes.UNAUTHORIZED, - }, - ]; - const { data, isError } = await mockHook({ - hook, - wrapper, - endpoints, - }); - - expect(data).toBeFalsy(); - expect(isError).toBeTruthy(); - // verify cache keys - expect( - queryClient.getQueryData(memberKeys.single(id).content), - ).toBeFalsy(); - }); - }); - describe('useAvatarUrl', () => { const member = AccountFactory(); const replyUrl = true; diff --git a/src/query/member/hooks.ts b/src/query/member/hooks.ts index dad1d7a32..502bd7299 100644 --- a/src/query/member/hooks.ts +++ b/src/query/member/hooks.ts @@ -22,19 +22,6 @@ export default (queryConfig: QueryClientConfig) => { ...defaultQueryOptions, }), - useMember: (id?: UUID) => - useQuery({ - queryKey: memberKeys.single(id).content, - queryFn: () => { - if (!id) { - throw new UndefinedArgument(); - } - return Api.getMember({ id }); - }, - enabled: Boolean(id), - ...defaultQueryOptions, - }), - // use another hook because of key content useAvatarUrl: ({ id, diff --git a/src/ui/items/AppItem.tsx b/src/ui/items/AppItem.tsx index ba69abf73..a75f2dc3c 100644 --- a/src/ui/items/AppItem.tsx +++ b/src/ui/items/AppItem.tsx @@ -3,8 +3,8 @@ import { type JSX, memo, useMemo, useRef, useState } from 'react'; import { Skeleton, styled } from '@mui/material'; import { + Account, AppItemType, - Member, appendQueryParamToUrl, getAppExtra, } from '@graasp/sdk'; @@ -75,7 +75,7 @@ type AppItemProps = { /** * id of the member currently signed in */ - memberId?: Member['id']; + memberId?: Account['id']; /** * Whether the caption is shown */