From c0b476dcf764855c66670195ec4d01eed9eae41b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Thu, 26 Feb 2026 19:50:46 +0100 Subject: [PATCH] nicolium: add the remaining key types MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- packages/pl-fe/src/actions/admin.ts | 4 +- packages/pl-fe/src/actions/importer.ts | 10 +- .../api/hooks/streaming/use-user-stream.ts | 15 +- packages/pl-fe/src/components/scrobble.tsx | 4 +- .../pl-fe/src/components/thumb-navigation.tsx | 4 +- .../editor/plugins/autosuggest-plugin.tsx | 3 +- .../src/queries/accounts/account-scrobble.ts | 14 +- .../pl-fe/src/queries/accounts/selectors.ts | 2 +- .../src/queries/accounts/use-relationship.ts | 2 +- .../announcements/use-announcements.ts | 16 +-- .../conversations/use-conversations.ts | 6 +- .../src/queries/drive/use-drive-folder.ts | 14 +- packages/pl-fe/src/queries/embed.ts | 7 +- .../src/queries/hashtags/use-followed-tags.ts | 2 +- packages/pl-fe/src/queries/keys.ts | 130 ++++++++++++++---- .../notifications/use-notifications.ts | 3 +- .../pl-fe/src/queries/settings/use-filters.ts | 4 +- .../queries/statuses/use-draft-statuses.ts | 6 +- packages/pl-fe/src/utils/chats.ts | 11 +- 19 files changed, 153 insertions(+), 104 deletions(-) diff --git a/packages/pl-fe/src/actions/admin.ts b/packages/pl-fe/src/actions/admin.ts index 92de858d7..7ec55358d 100644 --- a/packages/pl-fe/src/actions/admin.ts +++ b/packages/pl-fe/src/actions/admin.ts @@ -11,7 +11,7 @@ import { STATUS_FETCH_SOURCE_FAIL, type StatusesAction } from './statuses'; import { deleteFromTimelines } from './timelines'; import type { AppDispatch, RootState } from '@/store'; -import type { PleromaConfig, Poll } from 'pl-api'; +import type { PleromaConfig } from 'pl-api'; const ADMIN_CONFIG_FETCH_SUCCESS = 'ADMIN_CONFIG_FETCH_SUCCESS' as const; @@ -140,7 +140,7 @@ const redactStatus = (statusId: string) => (dispatch: AppDispatch, getState: () const status = state.statuses[statusId]; const poll = status.poll_id - ? queryClient.getQueryData(queryKeys.statuses.polls.show(status.poll_id)) + ? queryClient.getQueryData(queryKeys.statuses.polls.show(status.poll_id)) : undefined; return getClient(state) diff --git a/packages/pl-fe/src/actions/importer.ts b/packages/pl-fe/src/actions/importer.ts index 2c57bc9e0..cdf584a85 100644 --- a/packages/pl-fe/src/actions/importer.ts +++ b/packages/pl-fe/src/actions/importer.ts @@ -10,7 +10,6 @@ import type { Poll as BasePoll, Relationship as BaseRelationship, Status as BaseStatus, - GroupRelationship, } from 'pl-api'; const STATUS_IMPORT = 'STATUS_IMPORT' as const; @@ -108,17 +107,14 @@ const importEntities = if (!isEmpty(accounts)) { for (const account of Object.values(accounts)) { - queryClient.setQueryData(queryKeys.accounts.show(account.id), account); + queryClient.setQueryData(queryKeys.accounts.show(account.id), account); } } if (!isEmpty(groups)) for (const group of Object.values(groups)) { - queryClient.setQueryData(queryKeys.groups.show(group.id), group); + queryClient.setQueryData(queryKeys.groups.show(group.id), group); if (group.relationship) { - queryClient.setQueryData( - queryKeys.groupRelationships.show(group.id), - group.relationship, - ); + queryClient.setQueryData(queryKeys.groupRelationships.show(group.id), group.relationship); } } if (!isEmpty(polls)) { diff --git a/packages/pl-fe/src/api/hooks/streaming/use-user-stream.ts b/packages/pl-fe/src/api/hooks/streaming/use-user-stream.ts index 48d1386cd..eaeaf2d9c 100644 --- a/packages/pl-fe/src/api/hooks/streaming/use-user-stream.ts +++ b/packages/pl-fe/src/api/hooks/streaming/use-user-stream.ts @@ -24,13 +24,12 @@ import type { Announcement, AnnouncementReaction, FollowRelationshipUpdate, - Relationship, StreamingEvent, } from 'pl-api'; const updateAnnouncementReactions = (reaction: AnnouncementReaction) => { - queryClient.setQueryData(queryKeys.announcements.all, (prevResult: Announcement[]) => - prevResult.map((value) => { + queryClient.setQueryData(queryKeys.announcements.all, (prevResult) => + prevResult?.map((value) => { if (value.id !== reaction.announcement_id) return value; return { @@ -42,7 +41,9 @@ const updateAnnouncementReactions = (reaction: AnnouncementReaction) => { }; const updateAnnouncement = (announcement: Announcement) => - queryClient.setQueryData(queryKeys.announcements.all, (prevResult: Announcement[]) => { + queryClient.setQueryData(queryKeys.announcements.all, (prevResult) => { + if (!prevResult) return; + let updated = false; const result = prevResult.map((value) => @@ -53,8 +54,8 @@ const updateAnnouncement = (announcement: Announcement) => }); const deleteAnnouncement = (announcementId: string) => - queryClient.setQueryData(queryKeys.announcements.all, (prevResult: Announcement[]) => - prevResult.filter((value) => value.id !== announcementId), + queryClient.setQueryData(queryKeys.announcements.all, (prevResult) => + prevResult?.filter((value) => value.id !== announcementId), ); const followStateToRelationship = (followState: FollowRelationshipUpdate['state']) => { @@ -77,7 +78,7 @@ const updateFollowRelationships = const me = state.me; if (update.follower.id === me) { - queryClient.setQueryData( + queryClient.setQueryData( queryKeys.accountRelationships.show(update.following.id), (relationship) => relationship diff --git a/packages/pl-fe/src/components/scrobble.tsx b/packages/pl-fe/src/components/scrobble.tsx index 529233710..18c923aa6 100644 --- a/packages/pl-fe/src/components/scrobble.tsx +++ b/packages/pl-fe/src/components/scrobble.tsx @@ -6,10 +6,10 @@ import HStack from '@/components/ui/hstack'; import Icon from '@/components/ui/icon'; import Text from '@/components/ui/text'; -import type { Scrobble as ScrobbleEntity } from 'pl-api'; +import type { MinifiedScrobble } from '@/queries/accounts/account-scrobble'; interface IScrobble { - scrobble: ScrobbleEntity; + scrobble: MinifiedScrobble; } const Scrobble: React.FC = ({ scrobble }) => { diff --git a/packages/pl-fe/src/components/thumb-navigation.tsx b/packages/pl-fe/src/components/thumb-navigation.tsx index 59e82b4fc..35b50096b 100644 --- a/packages/pl-fe/src/components/thumb-navigation.tsx +++ b/packages/pl-fe/src/components/thumb-navigation.tsx @@ -17,8 +17,6 @@ import { useModalsActions } from '@/stores/modals'; import { useIsSidebarOpen, useUiStoreActions } from '@/stores/ui'; import { isStandalone } from '@/utils/state'; -import type { Group } from 'pl-api'; - const messages = defineMessages({ home: { id: 'column.home', defaultMessage: 'Home' }, search: { id: 'column.search', defaultMessage: 'Search' }, @@ -48,7 +46,7 @@ const ThumbNavigation: React.FC = React.memo((): React.JSX.Element => { const handleOpenComposeModal = () => { if (match?.params.groupId) { - const group = queryClient.getQueryData(queryKeys.groups.show(match.params.groupId)); + const group = queryClient.getQueryData(queryKeys.groups.show(match.params.groupId)); if (group) groupComposeModal(group); } else { openModal('COMPOSE'); diff --git a/packages/pl-fe/src/features/compose/editor/plugins/autosuggest-plugin.tsx b/packages/pl-fe/src/features/compose/editor/plugins/autosuggest-plugin.tsx index 70cc05954..a601eadcc 100644 --- a/packages/pl-fe/src/features/compose/editor/plugins/autosuggest-plugin.tsx +++ b/packages/pl-fe/src/features/compose/editor/plugins/autosuggest-plugin.tsx @@ -47,7 +47,6 @@ import { $createMentionNode } from '../nodes/mention-node'; import type { AutoSuggestion } from '@/components/autosuggest-input'; import type { Emoji } from '@/features/emoji'; -import type { Account } from 'pl-api'; type QueryMatch = { leadOffset: number; @@ -318,7 +317,7 @@ const AutosuggestPlugin = ({ (node as TextNode).setTextContent(`${suggestion} `); node.select(); } else { - const account = queryClient.getQueryData(queryKeys.accounts.show(suggestion)); + const account = queryClient.getQueryData(queryKeys.accounts.show(suggestion)); if (account) replaceMatch($createMentionNode(account)); } } diff --git a/packages/pl-fe/src/queries/accounts/account-scrobble.ts b/packages/pl-fe/src/queries/accounts/account-scrobble.ts index 308c8b84d..f81291e61 100644 --- a/packages/pl-fe/src/queries/accounts/account-scrobble.ts +++ b/packages/pl-fe/src/queries/accounts/account-scrobble.ts @@ -1,21 +1,29 @@ import { useQuery } from '@tanstack/react-query'; +import { Scrobble } from 'pl-api'; import { useClient } from '@/hooks/use-client'; import { useFeatures } from '@/hooks/use-features'; import { queryKeys } from '@/queries/keys'; +const minifyScrobble = ({ account, ...scrobble }: Scrobble) => scrobble; + +type MinifiedScrobble = ReturnType; + const useAccountScrobbleQuery = (accountId?: string) => { const client = useClient(); const features = useFeatures(); return useQuery({ queryKey: queryKeys.scrobbles.show(accountId!), - queryFn: async () => - (await client.accounts.getScrobbles(accountId!, { limit: 1 })).items[0] || null, + queryFn: async () => { + const scrobbles = await client.accounts.getScrobbles(accountId!, { limit: 1 }); + + return scrobbles.items.length > 0 ? minifyScrobble(scrobbles.items[0]) : null; + }, placeholderData: undefined, enabled: () => !!accountId && features.scrobbles, staleTime: 3 * 60 * 1000, }); }; -export { useAccountScrobbleQuery }; +export { useAccountScrobbleQuery, type MinifiedScrobble }; diff --git a/packages/pl-fe/src/queries/accounts/selectors.ts b/packages/pl-fe/src/queries/accounts/selectors.ts index 318a36aa7..fae26d41c 100644 --- a/packages/pl-fe/src/queries/accounts/selectors.ts +++ b/packages/pl-fe/src/queries/accounts/selectors.ts @@ -11,7 +11,7 @@ const getAccounts = (): Array => .filter((account): account is Account => !!account && typeof account.id === 'string'); const selectAccount = (accountId: string) => - queryClient.getQueryData(queryKeys.accounts.show(accountId)); + queryClient.getQueryData(queryKeys.accounts.show(accountId)); const selectAccounts = (accountIds: Array) => accountIds diff --git a/packages/pl-fe/src/queries/accounts/use-relationship.ts b/packages/pl-fe/src/queries/accounts/use-relationship.ts index cd7c6f809..a187d9474 100644 --- a/packages/pl-fe/src/queries/accounts/use-relationship.ts +++ b/packages/pl-fe/src/queries/accounts/use-relationship.ts @@ -27,7 +27,7 @@ const updateRelationship = ( changes: Partial | ((relationship: Relationship) => Relationship), queryClient: ReturnType, ) => { - const previousRelationship = queryClient.getQueryData( + const previousRelationship = queryClient.getQueryData( queryKeys.accountRelationships.show(accountId), ); if (!previousRelationship) return; diff --git a/packages/pl-fe/src/queries/announcements/use-announcements.ts b/packages/pl-fe/src/queries/announcements/use-announcements.ts index a3f75661c..7c1df5a4d 100644 --- a/packages/pl-fe/src/queries/announcements/use-announcements.ts +++ b/packages/pl-fe/src/queries/announcements/use-announcements.ts @@ -54,8 +54,8 @@ const useAnnouncements = () => { client.announcements.addAnnouncementReaction(announcementId, name), retry: false, onMutate: ({ announcementId: id, name }) => { - queryClient.setQueryData(queryKeys.announcements.all, (prevResult: Announcement[]) => - prevResult.map((value) => + queryClient.setQueryData(queryKeys.announcements.all, (prevResult) => + prevResult?.map((value) => value.id !== id ? value : { @@ -66,8 +66,8 @@ const useAnnouncements = () => { ); }, onError: (_, { announcementId: id, name }) => { - queryClient.setQueryData(queryKeys.announcements.all, (prevResult: Announcement[]) => - prevResult.map((value) => + queryClient.setQueryData(queryKeys.announcements.all, (prevResult) => + prevResult?.map((value) => value.id !== id ? value : { @@ -84,8 +84,8 @@ const useAnnouncements = () => { client.announcements.deleteAnnouncementReaction(announcementId, name), retry: false, onMutate: ({ announcementId: id, name }) => { - queryClient.setQueryData(queryKeys.announcements.all, (prevResult: Announcement[]) => - prevResult.map((value) => + queryClient.setQueryData(queryKeys.announcements.all, (prevResult) => + prevResult?.map((value) => value.id !== id ? value : { @@ -96,8 +96,8 @@ const useAnnouncements = () => { ); }, onError: (_, { announcementId: id, name }) => { - queryClient.setQueryData(queryKeys.announcements.all, (prevResult: Announcement[]) => - prevResult.map((value) => + queryClient.setQueryData(queryKeys.announcements.all, (prevResult) => + prevResult?.map((value) => value.id !== id ? value : { diff --git a/packages/pl-fe/src/queries/conversations/use-conversations.ts b/packages/pl-fe/src/queries/conversations/use-conversations.ts index 9cda4245c..88309e574 100644 --- a/packages/pl-fe/src/queries/conversations/use-conversations.ts +++ b/packages/pl-fe/src/queries/conversations/use-conversations.ts @@ -111,11 +111,9 @@ const useMarkConversationRead = (conversationId: string) => { onMutate: async () => { await queryClient.cancelQueries({ queryKey: queryKeys.conversations.all }); - const previous = queryClient.getQueryData< - InfiniteData> - >(['conversations']); + const previous = queryClient.getQueryData(queryKeys.conversations.all); - updatePaginatedResponse(['conversations'], (items) => + updatePaginatedResponse(queryKeys.conversations.all, (items) => items.map((item) => (item.id === conversationId ? { ...item, unread: false } : item)), ); diff --git a/packages/pl-fe/src/queries/drive/use-drive-folder.ts b/packages/pl-fe/src/queries/drive/use-drive-folder.ts index 120a71be5..45c345b88 100644 --- a/packages/pl-fe/src/queries/drive/use-drive-folder.ts +++ b/packages/pl-fe/src/queries/drive/use-drive-folder.ts @@ -5,8 +5,6 @@ import { useFeatures } from '@/hooks/use-features'; import { queryKeys } from '../keys'; -import type { DriveFolder } from 'pl-api'; - const useDriveFolderQuery = (folderId?: string) => { const client = useClient(); const features = useFeatures(); @@ -45,9 +43,7 @@ const useUpdateDriveFolderMutation = (folderId: string) => { return useMutation({ mutationKey: ['drive', 'folders'], mutationFn: (name: string) => { - const oldFolder = queryClient.getQueryData( - queryKeys.drive.folders.show(folderId), - ); + const oldFolder = queryClient.getQueryData(queryKeys.drive.folders.show(folderId)); if (oldFolder) { previousParentId = oldFolder.parent_id; } else { @@ -76,9 +72,7 @@ const useDeleteDriveFolderMutation = (folderId: string) => { return useMutation({ mutationKey: ['drive', 'folders'], mutationFn: () => { - const oldFolder = queryClient.getQueryData( - queryKeys.drive.folders.show(folderId), - ); + const oldFolder = queryClient.getQueryData(queryKeys.drive.folders.show(folderId)); if (oldFolder) { previousParentId = oldFolder.parent_id; } else { @@ -110,9 +104,7 @@ const useMoveDriveFolderMutation = (folderId: string) => { return useMutation({ mutationKey: ['drive', 'folders'], mutationFn: (targetFolderId?: string) => { - const oldFolder = queryClient.getQueryData( - queryKeys.drive.folders.show(folderId), - ); + const oldFolder = queryClient.getQueryData(queryKeys.drive.folders.show(folderId)); if (oldFolder) { previousParentId = oldFolder.parent_id; } else { diff --git a/packages/pl-fe/src/queries/embed.ts b/packages/pl-fe/src/queries/embed.ts index 5f28d53c4..3e028fb92 100644 --- a/packages/pl-fe/src/queries/embed.ts +++ b/packages/pl-fe/src/queries/embed.ts @@ -22,14 +22,9 @@ type Embed = { const useEmbed = (url: string) => { const client = useClient(); - const getEmbed = async () => { - const data = await client.oembed.getOembed(url); - return data; - }; - return useQuery({ queryKey: queryKeys.embed.show(url), - queryFn: getEmbed, + queryFn: () => client.oembed.getOembed(url), }); }; diff --git a/packages/pl-fe/src/queries/hashtags/use-followed-tags.ts b/packages/pl-fe/src/queries/hashtags/use-followed-tags.ts index 9cb324a09..e8f2cad41 100644 --- a/packages/pl-fe/src/queries/hashtags/use-followed-tags.ts +++ b/packages/pl-fe/src/queries/hashtags/use-followed-tags.ts @@ -6,7 +6,7 @@ import { queryClient } from '../client'; import { queryKeys } from '../keys'; import { makePaginatedResponseQuery } from '../utils/make-paginated-response-query'; -const useFollowedTags = makePaginatedResponseQuery(['followedTags'], (client) => +const useFollowedTags = makePaginatedResponseQuery(queryKeys.followedTags.all, (client) => client.myAccount.getFollowedTags(), ); diff --git a/packages/pl-fe/src/queries/keys.ts b/packages/pl-fe/src/queries/keys.ts index 08865a4f9..46b58ad33 100644 --- a/packages/pl-fe/src/queries/keys.ts +++ b/packages/pl-fe/src/queries/keys.ts @@ -1,8 +1,16 @@ +import { MinifiedInteractionRequest } from './statuses/use-interaction-requests'; + +import type { MinifiedScrobble } from './accounts/account-scrobble'; import type { FilterType } from './notifications/use-notifications'; +import type { DraftStatus } from './statuses/use-draft-statuses'; import type { MinifiedStatusEdit } from './statuses/use-status-history'; import type { MinifiedEmojiReaction } from './statuses/use-status-interactions'; import type { MinifiedSuggestion } from './trends/use-suggested-accounts'; -import type { MinifiedAdminAccount, MinifiedAdminReport } from './utils/minify-list'; +import type { + MinifiedAdminAccount, + MinifiedAdminReport, + MinifiedConversation, +} from './utils/minify-list'; import type { ChatMessage } from '@/normalizers/chat-message'; import type { DataTag, InfiniteData } from '@tanstack/react-query'; import type { @@ -10,16 +18,23 @@ import type { AdminAnnouncement, AdminCohort, AdminDimension, + AdminDimensionKey, AdminDomain, AdminGetAccountsParams, AdminGetDimensionsParams, AdminGetMeasuresParams, AdminGetReportsParams, AdminMeasure, + AdminMeasureKey, AdminModerationLogEntry, AdminRelay, AdminRule, + Announcement, + Antenna, + Backup, + BookmarkFolder, Chat, + Circle, CredentialAccount, CustomEmoji, DriveFile, @@ -28,14 +43,18 @@ import type { Group, GroupRelationship, GroupRole, + InteractionPolicies, + List, Location, Marker, NotificationGroup, OauthToken, PaginatedResponse, + PlApiClient, Poll, Relationship, RssFeed, + ScheduledStatus, Tag, Translation, TrendsLink, @@ -314,11 +333,16 @@ const admin = { ['admin', 'moderation_log'], InfiniteData> >, - dimensions: (keys: string[], params?: AdminGetDimensionsParams) => { + dimensions: (keys: Array, params?: AdminGetDimensionsParams) => { const key = ['admin', 'dimensions', keys, params] as const; return key as TaggedKey>; }, - measures: (keys: string[], startAt: string, endAt: string, params?: AdminGetMeasuresParams) => { + measures: ( + keys: Array, + startAt: string, + endAt: string, + params?: AdminGetMeasuresParams, + ) => { const key = ['admin', 'measures', keys, startAt, endAt, params] as const; return key as TaggedKey>; }, @@ -388,22 +412,36 @@ const timelines = { const timelineIds = { root: ['timelineIds'] as const, - accountMedia: (accountId: string) => - ['timelineIds', `account:${accountId}:with_replies:media`] as const, - groupMedia: (groupId: string) => ['timelineIds', `group:${groupId}:media`] as const, + accountMedia: (accountId: string) => { + const key = ['timelineIds', `account:${accountId}:with_replies:media`] as const; + return key as TaggedKey>>; + }, + groupMedia: (groupId: string) => { + const key = ['timelineIds', `group:${groupId}:media`] as const; + return key as TaggedKey>>; + }, }; const settings = { root: ['settings'] as const, - mfa: ['settings', 'mfa'] as const, - backups: ['settings', 'backups'] as const, - accountAliases: ['settings', 'accountAliases'] as const, - domainBlocks: ['settings', 'domainBlocks'] as const, + mfa: ['settings', 'mfa'] as TaggedKey< + ['settings', 'mfa'], + Awaited['settings']['mfa']['getMfaSettings']>> + >, + backups: ['settings', 'backups'] as TaggedKey<['settings', 'backups'], Array>, + accountAliases: ['settings', 'accountAliases'] as TaggedKey< + ['settings', 'accountAliases'], + Array + >, + domainBlocks: ['settings', 'domainBlocks'] as TaggedKey< + ['settings', 'domainBlocks'], + Array + >, }; const interactionPolicies = { root: ['interactionPolicies'] as const, - all: ['interactionPolicies'] as const, + all: ['interactionPolicies'] as TaggedKey<['interactionPolicies'], InteractionPolicies>, }; const filters = { @@ -443,72 +481,106 @@ const drive = { const hashtags = { root: ['hashtags'] as const, - show: (tag: string) => ['hashtags', tag] as const, + show: (tag: string) => { + const key = ['hashtags', tag] as const; + return key as TaggedKey; + }, }; const followedTags = { root: ['followedTags'] as const, - all: ['followedTags'] as const, + all: ['followedTags'] as TaggedKey<['followedTags'], InfiniteData>>, }; const conversations = { root: ['conversations'] as const, - all: ['conversations'] as const, + all: ['conversations'] as TaggedKey< + ['conversations'], + InfiniteData> + >, }; const announcements = { root: ['announcements'] as const, - all: ['announcements'] as const, + all: ['announcements'] as TaggedKey<['announcements'], Array>, }; const scrobbles = { root: ['scrobbles'] as const, - show: (accountId: string) => ['scrobbles', accountId] as const, + show: (accountId: string) => { + const key = ['scrobbles', accountId] as const; + return key as TaggedKey; + }, }; const lists = { root: ['lists'] as const, - all: ['lists'] as const, - forAccount: (accountId: string) => ['lists', 'forAccount', accountId] as const, + all: ['lists'] as TaggedKey<['lists'], Array>, + forAccount: (accountId: string) => { + const key = ['lists', 'forAccount', accountId] as const; + return key as TaggedKey>; + }, }; const circles = { root: ['circles'] as const, - all: ['circles'] as const, + all: ['circles'] as TaggedKey<['circles'], Array>, }; const antennas = { root: ['antennas'] as const, - all: ['antennas'] as TaggedKey<['antennas'], Array>, - domains: (antennaId: string) => ['antennas', antennaId, 'domains'] as const, - keywords: (antennaId: string) => ['antennas', antennaId, 'keywords'] as const, - tags: (antennaId: string) => ['antennas', antennaId, 'tags'] as const, + all: ['antennas'] as TaggedKey<['antennas'], Array>, + domains: (antennaId: string) => { + const key = ['antennas', antennaId, 'domains'] as const; + return key as TaggedKey; exclude_domains: Array }>; + }, + keywords: (antennaId: string) => { + const key = ['antennas', antennaId, 'keywords'] as const; + return key as TaggedKey< + typeof key, + { keywords: Array; exclude_keywords: Array } + >; + }, + tags: (antennaId: string) => { + const key = ['antennas', antennaId, 'tags'] as const; + return key as TaggedKey; exclude_tags: Array }>; + }, }; const bookmarkFolders = { root: ['bookmarkFolders'] as const, - all: ['bookmarkFolders'] as const, - forStatus: (statusId: string) => ['bookmarkFolders', 'status', statusId] as const, + all: ['bookmarkFolders'] as TaggedKey<['bookmarkFolders'], Array>, + forStatus: (statusId: string) => { + const key = ['bookmarkFolders', 'status', statusId] as const; + return key as TaggedKey>; + }, }; const draftStatuses = { root: ['draftStatuses'] as const, - all: ['draftStatuses'] as const, + all: ['draftStatuses'] as TaggedKey<['draftStatuses'], Record>, }; const scheduledStatuses = { root: ['scheduledStatuses'] as const, - all: ['scheduledStatuses'] as const, + all: ['scheduledStatuses'] as TaggedKey<['scheduledStatuses'], Array>, }; const interactionRequests = { root: ['interactionRequests'] as const, - all: ['interactionRequests'] as const, + all: ['interactionRequests'] as TaggedKey< + ['interactionRequests'], + InfiniteData> + >, }; const embed = { root: ['embed'] as const, - show: (url: string) => ['embed', url] as const, + show: (url: string) => + ['embed', url] as TaggedKey< + ['embed', string], + Awaited> + >, }; const rssFeedSubscriptions = { diff --git a/packages/pl-fe/src/queries/notifications/use-notifications.ts b/packages/pl-fe/src/queries/notifications/use-notifications.ts index 433b45648..3fee5c3c2 100644 --- a/packages/pl-fe/src/queries/notifications/use-notifications.ts +++ b/packages/pl-fe/src/queries/notifications/use-notifications.ts @@ -35,7 +35,6 @@ import { minifyGroupedNotifications } from '../utils/minify-list'; import type { GetGroupedNotificationsParams, - Marker, Notification, NotificationGroup, PaginatedResponse, @@ -233,7 +232,7 @@ const useMarkNotificationsReadMutation = () => { mutationFn: async (lastReadId?: string | null) => { if (!lastReadId) return; - const currentMarker = queryClient.getQueryData(queryKeys.markers.notifications); + const currentMarker = queryClient.getQueryData(queryKeys.markers.notifications); if (currentMarker && compareId(currentMarker.last_read_id, lastReadId) >= 0) { return; } diff --git a/packages/pl-fe/src/queries/settings/use-filters.ts b/packages/pl-fe/src/queries/settings/use-filters.ts index c4da58d64..9cc4db11e 100644 --- a/packages/pl-fe/src/queries/settings/use-filters.ts +++ b/packages/pl-fe/src/queries/settings/use-filters.ts @@ -43,9 +43,7 @@ const useFilter = (filterId?: string) => { }, enabled: !!filterId, placeholderData: () => - queryClient - .getQueryData>(['filters']) - ?.find((filter) => filter.id === filterId), + queryClient.getQueryData(queryKeys.filters.all)?.find((filter) => filter.id === filterId), }); }; diff --git a/packages/pl-fe/src/queries/statuses/use-draft-statuses.ts b/packages/pl-fe/src/queries/statuses/use-draft-statuses.ts index 618e6fab4..5e0fa2bb2 100644 --- a/packages/pl-fe/src/queries/statuses/use-draft-statuses.ts +++ b/packages/pl-fe/src/queries/statuses/use-draft-statuses.ts @@ -95,8 +95,7 @@ const usePersistDraftStatus = () => { draft_id: compose.draftId ?? crypto.randomUUID(), }; - const drafts = - queryClient.getQueryData>(queryKeys.draftStatuses.all) ?? {}; + const drafts = queryClient.getQueryData(queryKeys.draftStatuses.all) ?? {}; const newDrafts: Record = create(drafts, (oldDrafts) => { oldDrafts[draft.draft_id] = v.parse(draftStatusSchema, draft); @@ -108,8 +107,7 @@ const usePersistDraftStatus = () => { }; const cancelDraftStatus = (queryClient: QueryClient, accountUrl: string, draftId: string) => { - const drafts = - queryClient.getQueryData>(queryKeys.draftStatuses.all) ?? {}; + const drafts = queryClient.getQueryData(queryKeys.draftStatuses.all) ?? {}; const newDrafts: Record = create(drafts, (oldDrafts) => { delete oldDrafts[draftId]; diff --git a/packages/pl-fe/src/utils/chats.ts b/packages/pl-fe/src/utils/chats.ts index b46c19ffa..5c81b22a5 100644 --- a/packages/pl-fe/src/utils/chats.ts +++ b/packages/pl-fe/src/utils/chats.ts @@ -8,8 +8,7 @@ import { queryKeys } from '@/queries/keys'; import { compareDate } from './comparators'; import { appendPageItem, flattenPages, sortQueryData, updatePageItem } from './queries'; -import type { InfiniteData } from '@tanstack/react-query'; -import type { Chat, PaginatedResponse } from 'pl-api'; +import type { Chat } from 'pl-api'; /** * Update the Chat entity inside the ChatSearch query. @@ -34,9 +33,7 @@ const reOrderChatListItems = () => { * @returns Boolean */ const checkIfChatExists = (chatId: string) => { - const currentChats = flattenPages( - queryClient.getQueryData>>(queryKeys.chats.search), - ); + const currentChats = flattenPages(queryClient.getQueryData(queryKeys.chats.search)); return currentChats?.find((chat: Chat) => chat.id === chatId); }; @@ -74,9 +71,7 @@ const updateChatListItem = (newChat: Chat) => { /** Get unread chats count. */ const getUnreadChatsCount = (): number => { - const chats = flattenPages( - queryClient.getQueryData>>(queryKeys.chats.search), - ); + const chats = flattenPages(queryClient.getQueryData(queryKeys.chats.search)); return sumBy(chats, (chat) => chat.unread); };