From 0c302c42bf76c5f7293c66d4be6817f6b6639c70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Thu, 10 Jul 2025 13:42:22 +0200 Subject: [PATCH] pl-fe: migrate user index to tanstack query MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- .../pl-fe/src/pages/dashboard/user-index.tsx | 60 +++++++------------ packages/pl-fe/src/pages/search/search.tsx | 13 ++-- 2 files changed, 28 insertions(+), 45 deletions(-) diff --git a/packages/pl-fe/src/pages/dashboard/user-index.tsx b/packages/pl-fe/src/pages/dashboard/user-index.tsx index ae6631fcd..ead6f00cf 100644 --- a/packages/pl-fe/src/pages/dashboard/user-index.tsx +++ b/packages/pl-fe/src/pages/dashboard/user-index.tsx @@ -1,14 +1,13 @@ -import debounce from 'lodash/debounce'; -import React, { useCallback, useEffect } from 'react'; +import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; +import { useSearchParams } from 'react-router-dom-v5-compat'; -import { expandUserIndex, fetchUserIndex, setUserIndexQuery } from 'pl-fe/actions/admin'; import ScrollableList from 'pl-fe/components/scrollable-list'; import Column from 'pl-fe/components/ui/column'; -import Input from 'pl-fe/components/ui/input'; import AccountContainer from 'pl-fe/containers/account-container'; -import { useAppDispatch } from 'pl-fe/hooks/use-app-dispatch'; -import { useAppSelector } from 'pl-fe/hooks/use-app-selector'; +import { useAdminAccounts } from 'pl-fe/queries/admin/use-accounts'; + +import { SearchInput } from '../search/search'; const messages = defineMessages({ heading: { id: 'column.admin.users', defaultMessage: 'Users' }, @@ -16,51 +15,32 @@ const messages = defineMessages({ searchPlaceholder: { id: 'admin.user_index.search_input_placeholder', defaultMessage: 'Who are you looking for?' }, }); + const UserIndexPage: React.FC = () => { - const dispatch = useAppDispatch(); + const [params] = useSearchParams(); + const query = params.get('q') || ''; + const intl = useIntl(); - const { isLoading, items, total, query, next } = useAppSelector((state) => state.admin_user_index); - - const handleLoadMore = () => { - if (!isLoading) dispatch(expandUserIndex()); - }; - - const updateQuery = useCallback(debounce(() => { - dispatch(fetchUserIndex()); - }, 900, { leading: true }), []); - - const handleQueryChange: React.ChangeEventHandler = e => { - dispatch(setUserIndexQuery(e.target.value)); - updateQuery(); - }; - - useEffect(() => { - updateQuery(); - }, []); - - const hasMore = (total === undefined || items.length < total) && !!next; - - const showLoading = isLoading && !items.length; + const { data: accountIds, isPending, isFetching, hasNextPage, fetchNextPage } = useAdminAccounts({ + origin: 'local', + status: 'active', + username: query, + }); return ( - + fetchNextPage({ cancelRefetch: false })} emptyMessage={intl.formatMessage(messages.empty)} - className='mt-4' itemClassName='pb-4' > - {items.map(id => + {(accountIds || []).map(id => , )} diff --git a/packages/pl-fe/src/pages/search/search.tsx b/packages/pl-fe/src/pages/search/search.tsx index f73160cf0..a516bc924 100644 --- a/packages/pl-fe/src/pages/search/search.tsx +++ b/packages/pl-fe/src/pages/search/search.tsx @@ -39,7 +39,11 @@ const messages = defineMessages({ links: { id: 'search_results.links', defaultMessage: 'News' }, }); -const SearchInput = () => { +interface ISearchInput { + placeholder?: string; +} + +const SearchInput: React.FC = ({ placeholder }) => { const [params, setParams] = useSearchParams(); const [value, setValue] = useState(params.get('q') || ''); @@ -82,13 +86,13 @@ const SearchInput = () => {
- +
{ className='size-4 text-gray-600' /> )} -
@@ -375,4 +378,4 @@ const SearchPage = () => { ); }; -export { SearchPage as default }; +export { SearchInput, SearchPage as default };