import { useQuery } from '@tanstack/react-query';
import { FolderKanban, Layers3, Search } from 'lucide-react-native';
import { useCallback, useMemo, useState } from 'react';
import { FlatList, RefreshControl, Text, TextInput, View } from 'react-native';
import { ListCard } from '@/src/components/list-card';
import { ScreenShell } from '@/src/components/screen-shell';
import { useDebouncedValue } from '@/src/hooks/use-debounced-value';
import { listGroups } from '@/src/services/admin';
export default function GroupsScreen() {
const [searchText, setSearchText] = useState('');
const keyword = useDebouncedValue(searchText.trim(), 300);
const groupsQuery = useQuery({
queryKey: ['groups', keyword],
queryFn: () => listGroups(keyword),
});
const items = groupsQuery.data?.items ?? [];
const errorMessage = groupsQuery.error instanceof Error ? groupsQuery.error.message : '';
const listHeader = useMemo(
() => (
),
[]
);
const renderItem = useCallback(
({ item: group }: { item: (typeof items)[number] }) => (
账号数 {group.account_count ?? 0} · {group.is_exclusive ? '独占分组' : '共享分组'}
),
[]
);
const emptyState = useMemo(
() => ,
[errorMessage]
);
return (
查看分组与调度归属。}
variant="minimal"
scroll={false}
>
`${item.id}`}
showsVerticalScrollIndicator={false}
refreshControl={ void groupsQuery.refetch()} tintColor="#1d5f55" />}
ListHeaderComponent={listHeader}
ListEmptyComponent={emptyState}
ItemSeparatorComponent={() => }
keyboardShouldPersistTaps="handled"
removeClippedSubviews
initialNumToRender={8}
maxToRenderPerBatch={8}
windowSize={5}
/>
);
}