refactor(2114): date formatting and timezone offset in matches request

keep-around/544eb030b8d2730e2010fcdd26a2fcb76c45827f
Mirlan 4 years ago
parent 133bdd6423
commit 544eb030b8
  1. 6
      src/features/HeaderFilters/store/helpers/getMoscowDate/index.tsx
  2. 2
      src/features/HeaderFilters/store/hooks/index.tsx
  3. 24
      src/features/HomePage/hooks.tsx
  4. 2
      src/helpers/parseDate/index.tsx
  5. 3
      src/requests/getMatches/getHomeMatches.tsx
  6. 3
      src/requests/getMatches/types.tsx

@ -1,6 +0,0 @@
import startOfDay from 'date-fns/startOfDay'
export const getMoscowDate = (date: Date) => startOfDay(date).toLocaleString(
'en-GB',
{ timeZone: 'Europe/Moscow' },
)

@ -9,7 +9,6 @@ import { isToday } from 'date-fns'
import { useQueryParamStore } from 'hooks'
import { filterKeys } from '../config'
import { getMoscowDate } from '../helpers/getMoscowDate'
import { serializeDate } from '../helpers/dateSerializers'
import { isValidDate } from '../helpers/isValidDate'
@ -42,7 +41,6 @@ export const useFilters = () => {
const store = useMemo(() => ({
isTodaySelected,
selectedDate,
selectedDateFormatted: getMoscowDate(selectedDate),
setSelectedDate,
}), [
isTodaySelected,

@ -1,19 +1,35 @@
import { useCallback } from 'react'
import format from 'date-fns/format'
import { getHomeMatches } from 'requests'
import { getHomeMatches } from 'requests/getMatches'
import { useHeaderFiltersStore } from 'features/HeaderFilters'
/**
* возвращает смещение в минутах относительно UTC
*
* Date.getTimezoneOffset() для UTC+3 возвращает -180
* но api ожидает 180 поэтому инвертируем смещение
*/
const getTimezoneOffset = (date: Date) => {
const offset = date.getTimezoneOffset()
if (offset === 0) return offset
return -(offset)
}
const getDate = (date: Date) => format(date, 'yyyy-MM-dd')
export const useHomePage = () => {
const { selectedDateFormatted } = useHeaderFiltersStore()
const { selectedDate } = useHeaderFiltersStore()
const fetchMatches = useCallback(
(limit: number, offset: number) => getHomeMatches({
date: selectedDateFormatted,
date: getDate(selectedDate),
limit,
offset,
timezoneOffset: getTimezoneOffset(selectedDate),
}),
[selectedDateFormatted],
[selectedDate],
)
return { fetchMatches }
}

@ -1,6 +1,6 @@
import parse from 'date-fns/parse'
export const parseDate = (dateString: string, format = 'yyyy-MM-dd HH:mm:ssx') => (
export const parseDate = (dateString: string, format = 'yyyy-MM-dd HH:mm:ss') => (
parse(
dateString,
format,

@ -12,17 +12,20 @@ type Args = {
date: string,
limit: number,
offset: number,
timezoneOffset: number,
}
export const getHomeMatches = async ({
date,
limit,
offset,
timezoneOffset,
}: Args): Promise<MatchesBySection> => {
const config = {
body: {
params: {
_p_date: date,
_p_gmt: timezoneOffset,
_p_limit: limit,
_p_offset: offset,
...client.requests?.[proc],

@ -10,7 +10,7 @@ type Team = {
id: number,
name_eng: string,
name_rus: string,
score: number,
score?: number,
}
export type Match = {
@ -24,7 +24,6 @@ export type Match = {
/** наличие hls стрима */
live: boolean,
preview?: string,
round_id: number | null,
sport: SportTypes,
/** наличие завершенного hls стрима */
storage: boolean,

Loading…
Cancel
Save