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

@ -1,19 +1,35 @@
import { useCallback } from 'react' import { useCallback } from 'react'
import format from 'date-fns/format'
import { getHomeMatches } from 'requests' import { getHomeMatches } from 'requests/getMatches'
import { useHeaderFiltersStore } from 'features/HeaderFilters' 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 = () => { export const useHomePage = () => {
const { selectedDateFormatted } = useHeaderFiltersStore() const { selectedDate } = useHeaderFiltersStore()
const fetchMatches = useCallback( const fetchMatches = useCallback(
(limit: number, offset: number) => getHomeMatches({ (limit: number, offset: number) => getHomeMatches({
date: selectedDateFormatted, date: getDate(selectedDate),
limit, limit,
offset, offset,
timezoneOffset: getTimezoneOffset(selectedDate),
}), }),
[selectedDateFormatted], [selectedDate],
) )
return { fetchMatches } return { fetchMatches }
} }

@ -1,6 +1,6 @@
import parse from 'date-fns/parse' 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( parse(
dateString, dateString,
format, format,

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

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

Loading…
Cancel
Save