diff --git a/src/components/Views/AllAuthors/AllAuthors.tsx b/src/components/Views/AllAuthors/AllAuthors.tsx index 996811a4..a22c33a8 100644 --- a/src/components/Views/AllAuthors/AllAuthors.tsx +++ b/src/components/Views/AllAuthors/AllAuthors.tsx @@ -21,44 +21,55 @@ type Props = { authorsByShouts?: Author[] isLoaded: boolean } + export const AUTHORS_PER_PAGE = 20 export const ABC = { ru: 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ#', en: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ#' } -// useAuthors sorted from context, set filter/sort - export const AllAuthors = (props: Props) => { const { t, lang } = useLocalize() const alphabet = createMemo(() => ABC[lang()] || ABC['ru']) const [searchParams, changeSearchParams] = useSearchParams<{ by?: string }>() const { authorsSorted, setAuthorsSort, loadAuthors } = useAuthors() - const authors = createMemo(() => props.authors || authorsSorted()) const [loading, setLoading] = createSignal(false) + const authors = createMemo(() => { + let sortedAuthors = [...(props.authors || authorsSorted())] // Clone the array to avoid mutating the original + console.log('Before Sorting:', sortedAuthors) + if (searchParams.by === 'name') { + sortedAuthors = sortedAuthors.sort((a, b) => a.name.localeCompare(b.name)) + console.log('Sorted by Name:', sortedAuthors) + } else if (searchParams.by === 'shouts') { + sortedAuthors = sortedAuthors.sort((a, b) => (b.stat?.shouts || 0) - (a.stat?.shouts || 0)) + console.log('Sorted by Shouts:', sortedAuthors) + } + console.log('After Sorting:', sortedAuthors) + return sortedAuthors + }) + + // Log authors data and searchParams for debugging + createEffect(() => { + console.log('Authors:', props.authors) + console.log('Sorted Authors:', authors()) + console.log('Search Params "by":', searchParams.by) + }) + // filter const [searchQuery, setSearchQuery] = createSignal('') const [filteredAuthors, setFilteredAuthors] = createSignal([]) - createEffect( - () => - authors() && - setFilteredAuthors((_prev: Author[]) => dummyFilter(authors(), searchQuery(), lang()) as Author[]) + createEffect(() => + authors() && setFilteredAuthors(dummyFilter(authors(), searchQuery(), lang()) as Author[]) ) - // sort by - onMount(() => !searchParams?.by && changeSearchParams({ by: 'name' })) - createEffect(on(() => searchParams?.by || 'name', setAuthorsSort || ((_) => null), {})) - // store by first char const byLetterFiltered = createMemo<{ [letter: string]: Author[] }>(() => { if (!(filteredAuthors()?.length > 0)) return {} console.debug('[components.AllAuthors] update byLetterFiltered', filteredAuthors()?.length) - return ( - filteredAuthors()?.reduce( - (acc, author: Author) => authorLetterReduce(acc, author, lang()), - {} as { [letter: string]: Author[] } - ) || {} + return filteredAuthors().reduce( + (acc, author: Author) => authorLetterReduce(acc, author, lang()), + {} as { [letter: string]: Author[] } ) }) @@ -91,6 +102,7 @@ export const AllAuthors = (props: Props) => { followers: 0, shouts: 0 }) + const loadMoreAuthors = () => { const by = searchParams?.by as 'followers' | 'shouts' | undefined if (!by) return @@ -116,14 +128,14 @@ export const AllAuthors = (props: Props) => { ['view-switcher__item--selected']: searchParams?.by === 'followers' })} > - {t('By popularity')} + changeSearchParams({ by: 'followers' })}>{t('By popularity')}
  • - {t('By name')} + changeSearchParams({ by: 'name' })}>{t('By name')}