2024-07-21 02:17:42 +00:00
|
|
|
import { A, useMatch } from '@solidjs/router'
|
2023-10-10 15:38:02 +00:00
|
|
|
import { clsx } from 'clsx'
|
2024-07-21 02:17:42 +00:00
|
|
|
import { For, Show, createEffect, createSignal, on, onMount } from 'solid-js'
|
2024-07-04 07:51:15 +00:00
|
|
|
import { Icon } from '~/components/_shared/Icon'
|
|
|
|
import { useLocalize } from '~/context/localize'
|
2024-07-21 02:17:42 +00:00
|
|
|
import { useTopics } from '~/context/topics'
|
|
|
|
import type { Topic } from '~/graphql/schema/core.gen'
|
|
|
|
import { getRandomTopicsFromArray } from '~/lib/getRandomTopicsFromArray'
|
2024-07-09 09:13:13 +00:00
|
|
|
import styles from './TopicsNav.module.scss'
|
2023-10-10 15:38:02 +00:00
|
|
|
|
2024-07-21 02:17:42 +00:00
|
|
|
export const RandomTopics = () => {
|
|
|
|
const { sortedTopics } = useTopics()
|
|
|
|
const { lang, t } = useLocalize()
|
|
|
|
const tag = (topic: Topic) =>
|
|
|
|
/[ЁА-яё]/.test(topic.title || '') && lang() !== 'ru' ? topic.slug : topic.title
|
|
|
|
const [randomTopics, setRandomTopics] = createSignal<Topic[]>([])
|
|
|
|
createEffect(
|
|
|
|
on(sortedTopics, (ttt: Topic[]) => {
|
|
|
|
if (ttt?.length) {
|
|
|
|
setRandomTopics(getRandomTopicsFromArray(ttt))
|
|
|
|
}
|
|
|
|
})
|
|
|
|
)
|
|
|
|
onMount(() => sortedTopics() && getRandomTopicsFromArray(sortedTopics()))
|
|
|
|
return (
|
|
|
|
<ul class="nodash">
|
|
|
|
<Show when={randomTopics().length > 0}>
|
|
|
|
<For each={randomTopics()}>
|
|
|
|
{(topic: Topic) => (
|
|
|
|
<li class="item">
|
|
|
|
<A href={`/topic/${topic.slug}`}>
|
|
|
|
<span>#{tag(topic)}</span>
|
|
|
|
</A>
|
|
|
|
</li>
|
|
|
|
)}
|
|
|
|
</For>
|
|
|
|
<li class={styles.rightItem}>
|
|
|
|
<A href="/topic">
|
|
|
|
{t('All topics')}
|
|
|
|
<Icon name="arrow-right-black" class={clsx(styles.icon, styles.rightItemIcon)} />
|
|
|
|
</A>
|
|
|
|
</li>
|
|
|
|
</Show>
|
|
|
|
</ul>
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2024-07-09 09:13:13 +00:00
|
|
|
export const TopicsNav = () => {
|
2023-10-10 15:38:02 +00:00
|
|
|
const { t } = useLocalize()
|
2024-06-24 17:50:27 +00:00
|
|
|
const matchExpo = useMatch(() => '/expo')
|
2023-10-10 15:38:02 +00:00
|
|
|
return (
|
|
|
|
<nav class={clsx('wide-container text-2xl', styles.Topics)}>
|
|
|
|
<ul class={styles.list}>
|
|
|
|
<li class={styles.item}>
|
2024-06-24 17:50:27 +00:00
|
|
|
<A class={clsx({ [styles.selected]: matchExpo() })} href="/expo">
|
2023-10-10 15:38:02 +00:00
|
|
|
{t('Art')}
|
2024-06-24 17:50:27 +00:00
|
|
|
</A>
|
2023-10-10 15:38:02 +00:00
|
|
|
</li>
|
|
|
|
<li class={styles.item}>
|
2024-06-24 17:50:27 +00:00
|
|
|
<A href="/podcasts">{t('Podcasts')}</A>
|
2023-10-10 15:38:02 +00:00
|
|
|
</li>
|
|
|
|
<li class={styles.item}>
|
2024-07-05 21:40:33 +00:00
|
|
|
<A href="/projects">{t('Special projects')}</A>
|
2023-10-10 15:38:02 +00:00
|
|
|
</li>
|
|
|
|
<li class={styles.item}>
|
2024-06-24 17:50:27 +00:00
|
|
|
<A href="/topic/interview">#{t('Interview')}</A>
|
2023-10-10 15:38:02 +00:00
|
|
|
</li>
|
|
|
|
<li class={styles.item}>
|
2024-06-24 17:50:27 +00:00
|
|
|
<A href="/topic/reportage">#{t('Reports')}</A>
|
2023-10-10 15:38:02 +00:00
|
|
|
</li>
|
|
|
|
<li class={styles.item}>
|
2024-06-24 17:50:27 +00:00
|
|
|
<A href="/topic/empiric">#{t('Experience')}</A>
|
2023-10-10 15:38:02 +00:00
|
|
|
</li>
|
|
|
|
<li class={styles.item}>
|
2024-06-24 17:50:27 +00:00
|
|
|
<A href="/topic/society">#{t('Society')}</A>
|
2023-10-10 15:38:02 +00:00
|
|
|
</li>
|
|
|
|
<li class={styles.item}>
|
2024-06-24 17:50:27 +00:00
|
|
|
<A href="/topic/culture">#{t('Culture')}</A>
|
2023-10-10 15:38:02 +00:00
|
|
|
</li>
|
|
|
|
<li class={styles.item}>
|
2024-06-24 17:50:27 +00:00
|
|
|
<A href="/topic/theory">#{t('Theory')}</A>
|
2023-10-10 15:38:02 +00:00
|
|
|
</li>
|
|
|
|
<li class={styles.item}>
|
2024-06-24 17:50:27 +00:00
|
|
|
<A href="/topic/poetry">#{t('Poetry')}</A>
|
2023-10-10 15:38:02 +00:00
|
|
|
</li>
|
|
|
|
<li class={clsx(styles.item, styles.right)}>
|
2024-07-13 16:29:17 +00:00
|
|
|
<A href={'/topic'}>
|
2023-10-10 15:38:02 +00:00
|
|
|
<span>
|
|
|
|
{t('All topics')}
|
|
|
|
<Icon name="arrow-right-black" class={'icon'} />
|
|
|
|
</span>
|
2024-06-24 17:50:27 +00:00
|
|
|
</A>
|
2023-10-10 15:38:02 +00:00
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</nav>
|
|
|
|
)
|
|
|
|
}
|