From a049b534a28fe87baf293f7129adf41a376ee25f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Thu, 23 Oct 2025 19:55:23 +0200 Subject: [PATCH] pl-fe: support batch translations on supported backends 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/api/batcher.ts | 8 ++++++++ .../pl-fe/src/queries/statuses/use-status-translation.ts | 9 +++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/pl-fe/src/api/batcher.ts b/packages/pl-fe/src/api/batcher.ts index bff59a4ba..e7dcb0743 100644 --- a/packages/pl-fe/src/api/batcher.ts +++ b/packages/pl-fe/src/api/batcher.ts @@ -9,8 +9,16 @@ const relationships = memoize((client: PlApiClient) => create({ scheduler: bufferScheduler(200), })); +// TODO: proper multi-client support +const translations = memoize((lang: string, client: PlApiClient) => create({ + fetcher: (ids: string[]) => client.statuses.translateStatuses(ids, lang), + resolver: keyResolver('id'), + scheduler: bufferScheduler(200), +})); + const batcher = { relationships, + translations, }; export { batcher }; diff --git a/packages/pl-fe/src/queries/statuses/use-status-translation.ts b/packages/pl-fe/src/queries/statuses/use-status-translation.ts index 8f1ace4d4..6cc0897de 100644 --- a/packages/pl-fe/src/queries/statuses/use-status-translation.ts +++ b/packages/pl-fe/src/queries/statuses/use-status-translation.ts @@ -1,16 +1,21 @@ import { useQuery } from '@tanstack/react-query'; +import { batcher } from 'pl-fe/api/batcher'; import { useClient } from 'pl-fe/hooks/use-client'; +import { useFeatures } from 'pl-fe/hooks/use-features'; import type { Translation } from 'pl-api'; const useStatusTranslation = (statusId: string, targetLanguage?: string) => { const client = useClient(); + const features = useFeatures(); return useQuery({ queryKey: ['statuses', 'translations', statusId, targetLanguage], - queryFn: () => client.statuses.translateStatus(statusId, targetLanguage) - .then(translation => translation).catch(() => false), + queryFn: () => (features.lazyTranslations && targetLanguage + ? batcher.translations(targetLanguage, client).fetch(statusId) + : client.statuses.translateStatus(statusId, targetLanguage)) + .then(translation => translation || false).catch(() => false), enabled: !!targetLanguage, }); };