Improved useFetch

Related to #19
This commit is contained in:
2023-07-14 20:32:52 +03:00
parent 7ef4194bbd
commit 48a48f9364
15 changed files with 272 additions and 148 deletions

View File

@ -9,6 +9,7 @@ import { isObject } from '../utils/types'
import { handleHTTPErrors } from '../utils'
import { categories, categoryNames } from '../assets/category'
import { stations, lines, lineNames } from '../assets/metro'
import { gotError } from '../hooks/api/useFetch'
function AddPage() {
const [addressPosition, setAddressPosition] = useState(latLng(59.972, 30.3227))
@ -165,7 +166,7 @@ function AddPage() {
<p>Загрузка...</p>
</div>
) : (
trashboxes.error ? (
gotError(trashboxes) ? (
<p
style={{ height: 400 }}
className='text-danger'
@ -191,7 +192,7 @@ function AddPage() {
)
}
</div>
{selectedTrashbox.index > -1 ? (
{!gotError(trashboxes) && selectedTrashbox.index > -1 ? (
<p>Выбран пункт сбора мусора на {
trashboxes.data[selectedTrashbox.index].Address
} с категорией {selectedTrashbox.category}</p>

View File

@ -4,12 +4,14 @@ import { Story } from 'react-insta-stories/dist/interfaces'
import { BottomNavBar, AnnouncementDetails, Filters } from '../components'
import { useStoryDimensions } from '../hooks'
import { useHomeAnnouncementList } from '../hooks/api'
import { useAnnouncements } from '../hooks/api'
import { defaultFilters } from '../utils/filters'
import { Announcement } from '../hooks/api/useHomeAnnouncementList'
import puffSpinner from '../assets/puff.svg'
import { Announcement } from '../api/announcement/types'
import { categoryGraphics } from '../assets/category'
import puffSpinner from '../assets/puff.svg'
import { gotError } from '../hooks/api/useFetch'
function generateStories(announcements: Announcement[]): Story[] {
return announcements.map(announcement => {
return ({
@ -21,15 +23,15 @@ function generateStories(announcements: Announcement[]): Story[] {
})
}
function fallbackGenerateStories(announcementsFetch: ReturnType<typeof useHomeAnnouncementList>) {
const stories = generateStories(announcementsFetch.data)
function fallbackGenerateStories(announcementsFetch: ReturnType<typeof useAnnouncements>) {
if (announcementsFetch.loading)
return fallbackStory()
if (announcementsFetch.error)
if (gotError(announcementsFetch))
return fallbackStory(announcementsFetch.error, true)
const stories = generateStories(announcementsFetch.data)
if (stories.length === 0)
return fallbackStory('Здесь пока пусто')
@ -49,19 +51,25 @@ const fallbackStory = (text = '', isError = false): Story[] => [{
},
}]
const storiesContainerCSS = {
display: 'flex',
justifyContent: 'center',
backgroundColor: 'rgb(17, 17, 17)'
}
function HomePage() {
const { height, width } = useStoryDimensions(16 / 10)
const [filterShown, setFilterShown] = useState(false)
const [filter, setFilter] = useState(defaultFilters)
const announcementsFetch = useHomeAnnouncementList(filter)
const announcementsFetch = useAnnouncements(filter)
const stories = fallbackGenerateStories(announcementsFetch)
return (<>
<Filters filter={filter} setFilter={setFilter} filterShown={filterShown} setFilterShown={setFilterShown} />
<div style={{ display: 'flex', justifyContent: 'center', backgroundColor: 'rgb(17, 17, 17)' }}>
<div style={storiesContainerCSS}>
<Stories
stories={stories}
defaultInterval={11000}