From 544eb030b8d2730e2010fcdd26a2fcb76c45827f Mon Sep 17 00:00:00 2001 From: Mirlan Date: Wed, 22 Dec 2021 17:05:15 +0600 Subject: [PATCH] refactor(2114): date formatting and timezone offset in matches request --- .../store/helpers/getMoscowDate/index.tsx | 6 ----- .../HeaderFilters/store/hooks/index.tsx | 2 -- src/features/HomePage/hooks.tsx | 24 +++++++++++++++---- src/helpers/parseDate/index.tsx | 2 +- src/requests/getMatches/getHomeMatches.tsx | 3 +++ src/requests/getMatches/types.tsx | 3 +-- 6 files changed, 25 insertions(+), 15 deletions(-) delete mode 100644 src/features/HeaderFilters/store/helpers/getMoscowDate/index.tsx diff --git a/src/features/HeaderFilters/store/helpers/getMoscowDate/index.tsx b/src/features/HeaderFilters/store/helpers/getMoscowDate/index.tsx deleted file mode 100644 index a6bda60b..00000000 --- a/src/features/HeaderFilters/store/helpers/getMoscowDate/index.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import startOfDay from 'date-fns/startOfDay' - -export const getMoscowDate = (date: Date) => startOfDay(date).toLocaleString( - 'en-GB', - { timeZone: 'Europe/Moscow' }, -) diff --git a/src/features/HeaderFilters/store/hooks/index.tsx b/src/features/HeaderFilters/store/hooks/index.tsx index 4139afd5..47106b00 100644 --- a/src/features/HeaderFilters/store/hooks/index.tsx +++ b/src/features/HeaderFilters/store/hooks/index.tsx @@ -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, diff --git a/src/features/HomePage/hooks.tsx b/src/features/HomePage/hooks.tsx index 861dce73..4f050776 100644 --- a/src/features/HomePage/hooks.tsx +++ b/src/features/HomePage/hooks.tsx @@ -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 } } diff --git a/src/helpers/parseDate/index.tsx b/src/helpers/parseDate/index.tsx index 94e381b4..e2e2f72c 100644 --- a/src/helpers/parseDate/index.tsx +++ b/src/helpers/parseDate/index.tsx @@ -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, diff --git a/src/requests/getMatches/getHomeMatches.tsx b/src/requests/getMatches/getHomeMatches.tsx index df7af011..e7d91870 100644 --- a/src/requests/getMatches/getHomeMatches.tsx +++ b/src/requests/getMatches/getHomeMatches.tsx @@ -12,17 +12,20 @@ type Args = { date: string, limit: number, offset: number, + timezoneOffset: number, } export const getHomeMatches = async ({ date, limit, offset, + timezoneOffset, }: Args): Promise => { const config = { body: { params: { _p_date: date, + _p_gmt: timezoneOffset, _p_limit: limit, _p_offset: offset, ...client.requests?.[proc], diff --git a/src/requests/getMatches/types.tsx b/src/requests/getMatches/types.tsx index 42a1efb1..a3154034 100644 --- a/src/requests/getMatches/types.tsx +++ b/src/requests/getMatches/types.tsx @@ -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,