import { useEffect, useState } from 'react' import Stories from 'react-insta-stories' import { BottomNavBar, AnnouncementDetails, Filters } from '../components' import { useStoryDimensions } from '../hooks' import { useHomeAnnouncementList } from '../hooks/api' import { defaultFilters } from '../utils/filters' import puffSpinner from '../assets/puff.svg' import { categoryGraphics } from '../assets/category' import { Announcement } from '../hooks/api/useHomeAnnouncementList' import { Story } from 'react-insta-stories/dist/interfaces' function generateStories(announcements: Announcement[]): Story[] { return announcements.map(announcement => { return ({ id: announcement.id, url: announcement.src || categoryGraphics.get(announcement.category), type: announcement.src?.endsWith("mp4") ? "video" : undefined, seeMore: ({ close }: { close: () => void }) => }) }) } function fallbackGenerateStories(announcementsFetch: ReturnType) { const stories = generateStories(announcementsFetch.data) if (announcementsFetch.loading) return fallbackStory() if (announcementsFetch.error) return fallbackStory(announcementsFetch.error, true) if (stories.length === 0) return fallbackStory("Здесь пока пусто") return stories } const fallbackStory = (text = '', isError = false): Story[] => [{ content: ({ action }) => { // eslint-disable-next-line react-hooks/rules-of-hooks useEffect(() => { action('pause') }, [action]) return (
{text || }
) }, }] function HomePage() { const { height, width } = useStoryDimensions(16 / 10) const [filterShown, setFilterShown] = useState(false) const [filter, setFilter] = useState(defaultFilters) const announcementsFetch = useHomeAnnouncementList(filter) const stories = fallbackGenerateStories(announcementsFetch) return (<>
) } export default HomePage