pl-fe: fix user index page

Signed-off-by: nicole mikołajczyk <git@mkljczk.pl>
This commit is contained in:
nicole mikołajczyk
2026-01-03 18:52:19 +01:00
parent 87e5a9490a
commit c6e93769c1
2 changed files with 25 additions and 18 deletions

View File

@ -3,6 +3,7 @@ import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
import ScrollableList from 'pl-fe/components/scrollable-list';
import Column from 'pl-fe/components/ui/column';
import Stack from 'pl-fe/components/ui/stack';
import AccountContainer from 'pl-fe/containers/account-container';
import { adminUsersRoute } from 'pl-fe/features/ui/router';
import { useAdminAccounts } from 'pl-fe/queries/admin/use-accounts';
@ -26,20 +27,22 @@ const UserIndexPage: React.FC = () => {
return (
<Column label={intl.formatMessage(messages.heading)}>
<SearchInput />
<ScrollableList
scrollKey='userIndex'
hasMore={hasNextPage}
isLoading={isFetching}
showLoading={isPending}
onLoadMore={() => fetchNextPage({ cancelRefetch: false })}
emptyMessageText={<FormattedMessage id='admin.user_index.empty' defaultMessage='No users found.' />}
itemClassName='pb-4'
>
{(accountIds || []).map(id =>
<AccountContainer key={id} id={id} withDate />,
)}
</ScrollableList>
<Stack space={2}>
<SearchInput query={query} />
<ScrollableList
scrollKey='userIndex'
hasMore={hasNextPage}
isLoading={isFetching}
showLoading={isPending}
onLoadMore={() => fetchNextPage({ cancelRefetch: false })}
emptyMessageText={<FormattedMessage id='admin.user_index.empty' defaultMessage='No users found.' />}
itemClassName='pb-4'
>
{(accountIds || []).map(id =>
<AccountContainer key={id} id={id} withDate />,
)}
</ScrollableList>
</Stack>
</Column>
);
};

View File

@ -1,5 +1,6 @@
import { useQueryClient } from '@tanstack/react-query';
import { useNavigate } from '@tanstack/react-router';
import clsx from 'clsx';
import React, { useState } from 'react';
import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
@ -28,11 +29,12 @@ const messages = defineMessages({
});
interface ISearchInput {
className?: string;
placeholder?: string;
query?: string;
}
const SearchInput: React.FC<ISearchInput> = ({ placeholder }) => {
const { q: query } = searchRoute.useSearch();
const SearchInput: React.FC<ISearchInput> = ({ className, placeholder, query }) => {
const navigate = useNavigate({ from: searchRoute.fullPath });
const [value, setValue] = useState(query || '');
@ -73,7 +75,7 @@ const SearchInput: React.FC<ISearchInput> = ({ placeholder }) => {
return (
<div
className='sticky top-[74px] z-10 w-full bg-white/90 backdrop-blur backdrop-saturate-200 black:bg-black/75 dark:bg-primary-900/90'
className={clsx('z-10 w-full bg-white/90 backdrop-blur backdrop-saturate-200 black:bg-black/75 dark:bg-primary-900/90', className)}
>
<label htmlFor='search' className='sr-only'>{placeholder || intl.formatMessage(messages.placeholder)}</label>
@ -190,10 +192,12 @@ const SearchResults = () => {
const SearchPage = () => {
const intl = useIntl();
const { q: query } = searchRoute.useSearch();
return (
<Column label={intl.formatMessage(messages.heading)}>
<div className='space-y-4'>
<SearchInput />
<SearchInput className='sticky top-[74px]' query={query} />
<SearchResults />
</div>
</Column>