pl-fe: refactor, remove unused exports, migrate event participants list to tanstack query

Signed-off-by: mkljczk <git@mkljczk.pl>
This commit is contained in:
mkljczk
2024-12-04 17:31:04 +01:00
parent edf831bed9
commit 90f17de808
12 changed files with 57 additions and 171 deletions

View File

@@ -0,0 +1,21 @@
import { useInfiniteQuery } from '@tanstack/react-query';
import { minifyAccountList } from 'pl-fe/api/normalizers/minify-list';
import { useClient } from 'pl-fe/hooks/use-client';
import type { PaginatedResponse } from 'pl-api';
const useEventParticipations = (statusId: string) => {
const client = useClient();
return useInfiniteQuery({
queryKey: ['accountsLists', 'eventParticipations', statusId],
queryFn: ({ pageParam }) => pageParam.next?.() || client.events.getEventParticipations(statusId).then(minifyAccountList),
initialPageParam: { previous: null, next: null, items: [], partial: false } as PaginatedResponse<string>,
getNextPageParam: (page) => page.next ? page : undefined,
select: (data) => data.pages.map(page => page.items).flat(),
});
};
export { useEventParticipations };

View File

@@ -1,6 +1,6 @@
import { useInfiniteQuery } from '@tanstack/react-query';
import { minifyStatusList } from 'pl-fe/api/normalizers/status-list';
import { minifyStatusList } from 'pl-fe/api/normalizers/minify-list';
import { useClient } from 'pl-fe/hooks/use-client';
import type { PaginatedResponse } from 'pl-api';

View File

@@ -0,0 +1,27 @@
import { Account, PaginatedResponse, Status } from 'pl-api';
import { importEntities } from 'pl-fe/actions/importer';
import { store } from 'pl-fe/store';
const minifyList = <T1, T2>({ previous, next, items, ...response }: PaginatedResponse<T1>, minifier: (value: T1) => T2, importer?: (items: Array<T1>) => void): PaginatedResponse<T2> => {
importer?.(items);
return {
...response,
previous: previous ? () => previous().then((list) => minifyList(list, minifier, importer)) : null,
next: next ? () => next().then((list) => minifyList(list, minifier, importer)) : null,
items: items.map(minifier),
};
};
const minifyStatusList = (response: PaginatedResponse<Status>): PaginatedResponse<string> =>
minifyList(response, (status) => status.id, (statuses) => {
store.dispatch(importEntities({ statuses }) as any);
});
const minifyAccountList = (response: PaginatedResponse<Account>): PaginatedResponse<string> =>
minifyList(response, (account) => account.id, (accounts) => {
store.dispatch(importEntities({ accounts }) as any);
});
export { minifyList, minifyAccountList, minifyStatusList };

View File

@@ -1,17 +0,0 @@
import { PaginatedResponse, Status } from 'pl-api';
import { importEntities } from 'pl-fe/actions/importer';
import { store } from 'pl-fe/store';
const minifyStatusList = ({ previous, next, items, ...response }: PaginatedResponse<Status>): PaginatedResponse<string> => {
store.dispatch(importEntities({ statuses: items }) as any);
return {
...response,
previous: previous ? () => previous().then(minifyStatusList) : null,
next: next ? () => next().then(minifyStatusList) : null,
items: items.map(status => status.id),
};
};
export { minifyStatusList };