fix(repeat method): fix repeat method

test-f
Rakov 2 years ago
parent 8896df9f1f
commit b83bf3c73d
  1. 4
      src/components/Ads/hooks.tsx
  2. 9
      src/features/AuthStore/hooks/useAuth.tsx
  3. 13
      src/features/MatchCard/CardFrontside/hooks.tsx
  4. 71
      src/features/MatchesSlider/index.tsx
  5. 6
      src/features/MatchesTimeline/hooks.tsx
  6. 11
      src/requests/getMatches/getTimelineMatches.tsx

@ -9,9 +9,9 @@ import { isMobileDevice, querieKeys } from 'config'
import { getAds } from 'requests' import { getAds } from 'requests'
import { isMatchPage } from 'helpers/isMatchPage' import { isMatchPage } from 'helpers/isMatchPage'
import { useLang } from 'features/LexicsStore/hooks/useLang'
import { useAuthStore } from 'features/AuthStore' import { useAuthStore } from 'features/AuthStore'
import { useLexicsStore } from 'features/LexicsStore'
import { import {
DeviceType, DeviceType,
PageType, PageType,
@ -31,7 +31,7 @@ export const useAds = ({
tournamentId, tournamentId,
}: Props) => { }: Props) => {
const [ads, setAds] = useRecoilState(adsStore) const [ads, setAds] = useRecoilState(adsStore)
const { lang } = useLang() const { lang } = useLexicsStore()
const { user } = useAuthStore() const { user } = useAuthStore()
useQuery({ useQuery({

@ -111,10 +111,12 @@ export const useAuth = () => {
token && await fetchUserInfo() token && await fetchUserInfo()
return Promise.resolve() return Promise.resolve()
} }
await fetchUserInfo()
return Promise.resolve() return Promise.resolve()
} }
storeUser(loadedUser) storeUser(loadedUser)
await fetchUserInfo()
markUserLoaded() markUserLoaded()
return loadedUser return loadedUser
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
@ -167,8 +169,9 @@ export const useAuth = () => {
setPage(history.location.pathname) setPage(history.location.pathname)
userManager.signinRedirectCallback() userManager.signinRedirectCallback()
.then((loadedUser) => { .then(async (loadedUser) => {
storeUser(loadedUser) storeUser(loadedUser)
await fetchUserInfo()
if (refreshToken) writeRefreshToken(refreshToken) if (refreshToken) writeRefreshToken(refreshToken)
@ -297,10 +300,6 @@ export const useAuth = () => {
} catch (error) {} } catch (error) {}
}, [changeLang]) }, [changeLang])
useEffect(() => {
readToken() && fetchUserInfo()
}, [fetchUserInfo, user])
// временно отрубили возможность смотреть матчи вирт. юзерам // временно отрубили возможность смотреть матчи вирт. юзерам
// в связи с переездом бэка // в связи с переездом бэка
useEffect(() => { useEffect(() => {

@ -21,11 +21,16 @@ export const useCardPreview = ({
), [preview, previewURL]) ), [preview, previewURL])
useEffect(() => { useEffect(() => {
const controller = new AbortController()
const { signal } = controller;
(async () => { (async () => {
if (!currentPreviewURL) return if (!currentPreviewURL) return
try { try {
const image = await fetch(String(currentPreviewURL)) const image = await fetch(String(currentPreviewURL), {
signal,
})
.then(async (result) => ({ .then(async (result) => ({
blob: await result.blob(), blob: await result.blob(),
status: result.status, status: result.status,
@ -40,8 +45,10 @@ export const useCardPreview = ({
} }
})() })()
return () => URL.revokeObjectURL(previewImage) return () => {
URL.revokeObjectURL(previewImage)
controller.abort()
}
// добавление previewImage в зависимость вызывает бесконечный цикл // добавление previewImage в зависимость вызывает бесконечный цикл
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
}, [currentPreviewURL]) }, [currentPreviewURL])

@ -37,45 +37,48 @@ export const MatchesSlider = ({ cardSize, matches }: MatchesSliderProps) => {
} = useMatchesSlider(matches) } = useMatchesSlider(matches)
const scrollToMatchByIndex = (index: number) => { const scrollToMatchByIndex = (index: number) => {
const match = slidesRef.current!.querySelectorAll('li')[index] if (slidesRef.current) {
const offsetLeftCount = match.offsetLeft const match = slidesRef.current.querySelectorAll('li')[index]
const offsetLeftCount = match.offsetLeft
const offsetLeft = offsetLeftCount - PADDING_PARENT
const offsetLeft = offsetLeftCount - PADDING_PARENT
setTimeout(() => {
slidesRef.current!.scrollBy({ setTimeout(() => {
// @ts-ignore slidesRef.current?.scrollBy({
behavior: 'instant', // @ts-ignore
left: offsetLeft, behavior: 'instant',
}) left: offsetLeft,
}, 0) })
}, 0)
}
} }
// скролл к лайв матчам или сегодняшней дате // скролл к лайв матчам или сегодняшней дате
useEffect(() => { useEffect(() => {
const matchIndexLive = matches.findIndex(({ live }) => live) if (slidesRef.current) {
if (matchIndexLive !== -1) { const matchIndexLive = matches.findIndex(({ live }) => live)
scrollToMatchByIndex(matchIndexLive) if (matchIndexLive !== -1) {
return scrollToMatchByIndex(matchIndexLive)
} return
}
const matchIndex = matches.findIndex((item) => new Date() <= item.date)
if (matchIndex !== -1) { const matchIndex = matches.findIndex((item) => new Date() <= item.date)
scrollToMatchByIndex(matchIndex) if (matchIndex !== -1) {
return scrollToMatchByIndex(matchIndex)
return
}
const slidesRefClientWidth = slidesRef.current.clientWidth
const slidesRefScrollWidth = slidesRef.current.scrollWidth
setTimeout(() => {
slidesRef.current?.scrollBy({
// @ts-ignore
behavior: 'instant',
left: slidesRefScrollWidth - slidesRefClientWidth + PADDING_PARENT,
})
}, 0)
} }
const slidesRefClientWidth = slidesRef.current!.clientWidth
const slidesRefScrollWidth = slidesRef.current!.scrollWidth
setTimeout(() => {
slidesRef.current!.scrollBy({
// @ts-ignore
behavior: 'instant',
left: slidesRefScrollWidth - slidesRefClientWidth + PADDING_PARENT,
})
}, 0)
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
}, []) }, [])

@ -54,10 +54,13 @@ export const useTimeline = () => {
), [user]) ), [user])
useEffect(() => { useEffect(() => {
const controller = new AbortController()
const { signal } = controller;
(async () => { (async () => {
setIsTimelineFetching(true) setIsTimelineFetching(true)
try { try {
const timelineFetched = await getTimelineMatches() const timelineFetched = await getTimelineMatches({ signal })
setTimeline(timelineFetched) setTimeline(timelineFetched)
const convertedMatches = timelineFetched.online_upcoming[0].matches const convertedMatches = timelineFetched.online_upcoming[0].matches
const preparedMatches = prepareMatchesDto(convertedMatches) const preparedMatches = prepareMatchesDto(convertedMatches)
@ -81,6 +84,7 @@ export const useTimeline = () => {
setIsTimelineFetching(false) setIsTimelineFetching(false)
} }
})() })()
return () => controller.abort()
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
}, []) }, [])

@ -17,7 +17,15 @@ export type MatchesTimeline = {
promo: Array<TimelineTournamentDto>, promo: Array<TimelineTournamentDto>,
} }
export const getTimelineMatches = (sportId?: number): Promise<MatchesTimeline> => { type getTimelineMatchesProps = {
signal?: AbortSignal,
sportId?: number,
}
export const getTimelineMatches = ({
signal,
sportId,
}: getTimelineMatchesProps): Promise<MatchesTimeline> => {
const getTimezoneOffset = () => { const getTimezoneOffset = () => {
const offset = new Date().getTimezoneOffset() const offset = new Date().getTimezoneOffset()
if (offset === 0) return offset if (offset === 0) return offset
@ -36,6 +44,7 @@ export const getTimelineMatches = (sportId?: number): Promise<MatchesTimeline> =
} }
return callApi({ return callApi({
abortSignal: signal,
config, config,
url: url.href, url: url.href,
}) })

Loading…
Cancel
Save