import { Meta } from '@solidjs/meta' import { clsx } from 'clsx' import { For, Show, createMemo, createSignal, onMount } from 'solid-js' import { type SortFunction, useAuthors } from '../../../context/authors' import { useLocalize } from '../../../context/localize' import type { Author } from '../../../graphql/schema/core.gen' import { getImageUrl } from '../../../utils/getImageUrl' import { scrollHandler } from '../../../utils/scroll' import { authorLetterReduce, translateAuthor } from '../../../utils/translate' import { AuthorsList } from '../../AuthorsList' import { Loading } from '../../_shared/Loading' import { SearchField } from '../../_shared/SearchField' import { useSearchParams } from '@solidjs/router' import { byFirstChar, byStat } from '~/utils/sortby' import styles from './AllAuthors.module.scss' type Props = { authors: Author[] topFollowedAuthors?: Author[] topWritingAuthors?: Author[] isLoaded: boolean } export const AUTHORS_PER_PAGE = 20 export const ABC = { ru: 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ#', en: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ#' } export const AllAuthors = (props: Props) => { const { t, lang } = useLocalize() const [searchQuery, setSearchQuery] = createSignal('') const alphabet = createMemo(() => ABC[lang()] || ABC['ru']) const [searchParams] = useSearchParams<{ by?: string }>() const { authorsSorted, addAuthors, setSortBy } = useAuthors() onMount(() => { addAuthors([...props.authors]) const sortStat: string = searchParams?.by || 'name' const sortfn = sortStat ? (byStat(sortStat) as SortFunction) : (byFirstChar as SortFunction) setSortBy(sortfn) }) const filteredAuthors = createMemo(() => { const query = searchQuery().toLowerCase() return authorsSorted?.().filter((a: Author) => a?.name?.toLowerCase().includes(query)) }) const byLetterFiltered = createMemo<{ [letter: string]: Author[] }>(() => { return filteredAuthors().reduce( (acc, author: Author) => authorLetterReduce(acc, author, lang()), {} as { [letter: string]: Author[] } ) }) const sortedKeys = createMemo(() => { const keys = Object.keys(byLetterFiltered()) keys.sort() const fk = keys.shift() || '' fk && keys.push(fk) return keys }) const ogImage = createMemo(() => getImageUrl('production/image/logo_image.png')) const ogTitle = createMemo(() => t('Authors')) const description = createMemo(() => t('List of authors of the open editorial community')) return (
}>

{t('Authors')}

{t('Subscribe who you like to tune your personal feed')}

{(letter) => (

{letter}

{(author) => (
{translateAuthor(author, lang())} {author.stat?.shouts || 0}
)}
)}
) }