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:
@@ -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 };
|
||||
@@ -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';
|
||||
|
||||
27
packages/pl-fe/src/api/normalizers/minify-list.ts
Normal file
27
packages/pl-fe/src/api/normalizers/minify-list.ts
Normal 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 };
|
||||
@@ -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 };
|
||||
Reference in New Issue
Block a user