From 85558daba7f452c3ce80662eb3f701c5475863ee Mon Sep 17 00:00:00 2001 From: Dlurak <84224239+Dlurak@users.noreply.github.com> Date: Wed, 15 May 2024 21:58:59 +0200 Subject: [PATCH 1/5] Implement a new library for opening hours --- package.json | 1 + .../renderers/OpeningHoursRenderer.tsx | 23 +------- .../renderers/openingHours/complex.ts | 53 +++++++++++++++++++ .../renderers/openingHours/index.ts | 10 ++++ .../renderers/openingHours/simple.ts | 10 ++++ .../renderers/openingHours/utils.ts | 3 ++ yarn.lock | 40 ++++++++++++++ 7 files changed, 119 insertions(+), 21 deletions(-) create mode 100644 src/components/FeaturePanel/renderers/openingHours/complex.ts create mode 100644 src/components/FeaturePanel/renderers/openingHours/index.ts create mode 100644 src/components/FeaturePanel/renderers/openingHours/simple.ts create mode 100644 src/components/FeaturePanel/renderers/openingHours/utils.ts diff --git a/package.json b/package.json index b9565d9a..7ac71c19 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,7 @@ "next-codegrid": "^1.0.2", "next-cookies": "^2.0.3", "next-pwa": "^5.2.21", + "opening_hours": "^3.8.0", "osm-auth": "^2.4.0", "react": "^18.2.0", "react-custom-scrollbars": "^4.2.1", diff --git a/src/components/FeaturePanel/renderers/OpeningHoursRenderer.tsx b/src/components/FeaturePanel/renderers/OpeningHoursRenderer.tsx index 677e6f2d..bb7f8323 100644 --- a/src/components/FeaturePanel/renderers/OpeningHoursRenderer.tsx +++ b/src/components/FeaturePanel/renderers/OpeningHoursRenderer.tsx @@ -1,29 +1,10 @@ import React from 'react'; -import { SimpleOpeningHours } from 'simple-opening-hours'; import styled from 'styled-components'; import AccessTime from '@material-ui/icons/AccessTime'; import { useToggleState } from '../../helpers'; import { t } from '../../../services/intl'; import { ToggleButton } from '../helpers/ToggleButton'; - -interface SimpleOpeningHoursTable { - su: string[]; - mo: string[]; - tu: string[]; - we: string[]; - th: string[]; - fr: string[]; - sa: string[]; - ph: string[]; -} - -const parseOpeningHours = (value) => { - const sanitized = value.match(/^[0-9:]+-[0-9:]+$/) ? `Mo-Su ${value}` : value; - const opening = new SimpleOpeningHours(sanitized); - const daysTable = opening.getTable() as SimpleOpeningHoursTable; - const isOpen = opening.isOpenNow(); - return { daysTable, isOpen }; -}; +import { SimpleOpeningHoursTable, parseOpeningHours } from './openingHours'; const Table = styled.table` margin: 1em; @@ -39,7 +20,7 @@ const Table = styled.table` // const weekDays = ['su', 'mo', 'tu', 'we', 'th', 'fr', 'sa']; const weekDays = t('opening_hours.days_su_mo_tu_we_th_fr_sa').split('|'); -const formatTimes = (times) => +const formatTimes = (times: string[]) => times.length ? times.map((x) => x.replace(/:00/g, '')).join(', ') : '-'; const formatDescription = (isOpen: boolean, days: SimpleOpeningHoursTable) => { diff --git a/src/components/FeaturePanel/renderers/openingHours/complex.ts b/src/components/FeaturePanel/renderers/openingHours/complex.ts new file mode 100644 index 00000000..b28ea5e5 --- /dev/null +++ b/src/components/FeaturePanel/renderers/openingHours/complex.ts @@ -0,0 +1,53 @@ +import OpeningHours from 'opening_hours'; +import { isInRange } from './utils'; +import { SimpleOpeningHoursTable } from './types'; + +type Weekday = keyof SimpleOpeningHoursTable; +const weekdays: Weekday[] = ['su', 'mo', 'tu', 'we', 'th', 'fr', 'sa', 'ph']; +const weekdayMappings: Record = { + Sun: 'su', + Mon: 'mo', + Tue: 'tu', + Wed: 'we', + Thu: 'th', + Fri: 'fr', + Sat: 'sa', +}; + +const fmtDate = (d: Date) => + d.toLocaleTimeString(undefined, { hour: 'numeric', minute: 'numeric' }); + +export const parseComplexOpeningHours = (value: string) => { + const oh = new OpeningHours(value); + + const today = new Date(); + today.setHours(0, 0, 0, 0); + + const oneWeekLater = new Date(today); + oneWeekLater.setDate(oneWeekLater.getDate() + 7); + + const intervals = oh.getOpenIntervals(today, oneWeekLater); + const grouped = weekdays.map((w) => { + const daysIntervals = intervals.filter( + ([from]) => + w === weekdayMappings[from.toLocaleString('en', { weekday: 'short' })], + ); + + return [w, daysIntervals] as const; + }); + + const daysTable = Object.fromEntries( + grouped.map((entry) => { + const strings = entry[1].map( + ([from, due]) => `${fmtDate(from)}-${fmtDate(due)}`, + ); + + return [entry[0], strings] as const; + }), + ) as unknown as SimpleOpeningHoursTable; + + return { + daysTable, + isOpen: intervals.some(([from, due]) => isInRange([from, due], new Date())), + }; +}; diff --git a/src/components/FeaturePanel/renderers/openingHours/index.ts b/src/components/FeaturePanel/renderers/openingHours/index.ts new file mode 100644 index 00000000..aaff9cf7 --- /dev/null +++ b/src/components/FeaturePanel/renderers/openingHours/index.ts @@ -0,0 +1,10 @@ +import { parseComplexOpeningHours } from './complex'; +import { parseSimpleOpeningHours } from './simple'; + +export const parseOpeningHours = (value: string) => { + try { + return parseComplexOpeningHours(value); + } catch { + return parseSimpleOpeningHours(value); + } +}; diff --git a/src/components/FeaturePanel/renderers/openingHours/simple.ts b/src/components/FeaturePanel/renderers/openingHours/simple.ts new file mode 100644 index 00000000..cd422463 --- /dev/null +++ b/src/components/FeaturePanel/renderers/openingHours/simple.ts @@ -0,0 +1,10 @@ +import { SimpleOpeningHours } from 'simple-opening-hours'; +import { SimpleOpeningHoursTable } from './types'; + +export const parseSimpleOpeningHours = (value: string) => { + const sanitized = value.match(/^[0-9:]+-[0-9:]+$/) ? `Mo-Su ${value}` : value; + const opening = new SimpleOpeningHours(sanitized); + const daysTable = opening.getTable() as SimpleOpeningHoursTable; + const isOpen = opening.isOpenNow(); + return { daysTable, isOpen }; +}; diff --git a/src/components/FeaturePanel/renderers/openingHours/utils.ts b/src/components/FeaturePanel/renderers/openingHours/utils.ts new file mode 100644 index 00000000..811f9f72 --- /dev/null +++ b/src/components/FeaturePanel/renderers/openingHours/utils.ts @@ -0,0 +1,3 @@ +export const isInRange = ([startDate, endDate]: [Date, Date], date: Date) => ( + date.getTime() >= startDate.getTime() && date.getTime() <= endDate.getTime() + ); diff --git a/yarn.lock b/yarn.lock index eacf1782..63261337 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1194,6 +1194,13 @@ dependencies: regenerator-runtime "^0.13.11" +"@babel/runtime@^7.17.2", "@babel/runtime@^7.19.0": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.5.tgz#230946857c053a36ccc66e1dd03b17dd0c4ed02c" + integrity sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.12.13", "@babel/template@^7.18.10", "@babel/template@^7.20.7": version "7.20.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" @@ -4203,6 +4210,20 @@ hyphenate-style-name@^1.0.3: resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== +i18next-browser-languagedetector@^6.1.4: + version "6.1.8" + resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-6.1.8.tgz#8e9c61b32a4dfe9b959b38bc9d2a8b95f799b27c" + integrity sha512-Svm+MduCElO0Meqpj1kJAriTC6OhI41VhlT/A0UPjGoPZBhAHIaGE5EfsHlTpgdH09UVX7rcc72pSDDBeKSQQA== + dependencies: + "@babel/runtime" "^7.19.0" + +i18next@^21.8.3: + version "21.10.0" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-21.10.0.tgz#85429af55fdca4858345d0e16b584ec29520197d" + integrity sha512-YeuIBmFsGjUfO3qBmMOc0rQaun4mIpGKET5WDwvu8lU7gvwpcariZLNtL0Fzj+zazcHUrlXHiptcFhBMFaxzfg== + dependencies: + "@babel/runtime" "^7.17.2" + iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -5938,6 +5959,15 @@ opencollective-postinstall@^2.0.2: resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== +opening_hours@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/opening_hours/-/opening_hours-3.8.0.tgz#e6d0a0bfd4e0f2cb8f62321e468dcaa8a798bd79" + integrity sha512-bRJroECQSe/itVcNmC3j9PPicxn/LBowdd1Hi+4Aa7hCswdt7w81WHfUwrEMbtk1BBYmGJEbSepl8oYYPviSuA== + dependencies: + i18next "^21.8.3" + i18next-browser-languagedetector "^6.1.4" + suncalc "^1.9.0" + optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" @@ -6475,6 +6505,11 @@ regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.4: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + regenerator-transform@^0.15.1: version "0.15.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" @@ -7134,6 +7169,11 @@ stylis@3.5.4: resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.4.tgz#f665f25f5e299cf3d64654ab949a57c768b73fbe" integrity sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q== +suncalc@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/suncalc/-/suncalc-1.9.0.tgz#26212353fae61edb287c2d558fc4932ecf0e1532" + integrity sha512-vMJ8Byp1uIPoj+wb9c1AdK4jpkSKVAywgHX0lqY7zt6+EWRRC3Z+0Ucfjy/0yxTVO1hwwchZe4uoFNqrIC24+A== + supercluster@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-8.0.1.tgz#9946ba123538e9e9ab15de472531f604e7372df5" From 8cb53a71482f5cf395eac5a95573d8b808e9ab5c Mon Sep 17 00:00:00 2001 From: Dlurak <84224239+Dlurak@users.noreply.github.com> Date: Wed, 15 May 2024 22:14:41 +0200 Subject: [PATCH 2/5] Run prettier --- .../FeaturePanel/renderers/openingHours/types.ts | 10 ++++++++++ .../FeaturePanel/renderers/openingHours/utils.ts | 5 ++--- 2 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 src/components/FeaturePanel/renderers/openingHours/types.ts diff --git a/src/components/FeaturePanel/renderers/openingHours/types.ts b/src/components/FeaturePanel/renderers/openingHours/types.ts new file mode 100644 index 00000000..3c28dc72 --- /dev/null +++ b/src/components/FeaturePanel/renderers/openingHours/types.ts @@ -0,0 +1,10 @@ +export interface SimpleOpeningHoursTable { + su: string[]; + mo: string[]; + tu: string[]; + we: string[]; + th: string[]; + fr: string[]; + sa: string[]; + ph: string[]; +} diff --git a/src/components/FeaturePanel/renderers/openingHours/utils.ts b/src/components/FeaturePanel/renderers/openingHours/utils.ts index 811f9f72..7b6faacd 100644 --- a/src/components/FeaturePanel/renderers/openingHours/utils.ts +++ b/src/components/FeaturePanel/renderers/openingHours/utils.ts @@ -1,3 +1,2 @@ -export const isInRange = ([startDate, endDate]: [Date, Date], date: Date) => ( - date.getTime() >= startDate.getTime() && date.getTime() <= endDate.getTime() - ); +export const isInRange = ([startDate, endDate]: [Date, Date], date: Date) => + date.getTime() >= startDate.getTime() && date.getTime() <= endDate.getTime(); From e0c51cf3d1ab5a6f195676acfdacfbdd6f0c706b Mon Sep 17 00:00:00 2001 From: Dlurak <84224239+Dlurak@users.noreply.github.com> Date: Wed, 15 May 2024 22:21:34 +0200 Subject: [PATCH 3/5] Fix a problem with a file path --- src/components/FeaturePanel/renderers/OpeningHoursRenderer.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/FeaturePanel/renderers/OpeningHoursRenderer.tsx b/src/components/FeaturePanel/renderers/OpeningHoursRenderer.tsx index bb7f8323..b9c3885a 100644 --- a/src/components/FeaturePanel/renderers/OpeningHoursRenderer.tsx +++ b/src/components/FeaturePanel/renderers/OpeningHoursRenderer.tsx @@ -4,7 +4,8 @@ import AccessTime from '@material-ui/icons/AccessTime'; import { useToggleState } from '../../helpers'; import { t } from '../../../services/intl'; import { ToggleButton } from '../helpers/ToggleButton'; -import { SimpleOpeningHoursTable, parseOpeningHours } from './openingHours'; +import { parseOpeningHours } from './openingHours'; +import { SimpleOpeningHoursTable } from './openingHours/types'; const Table = styled.table` margin: 1em; From dee4808d18359d8f22d374cf732c91cd2e023af6 Mon Sep 17 00:00:00 2001 From: Dlurak <84224239+Dlurak@users.noreply.github.com> Date: Tue, 21 May 2024 18:34:55 +0200 Subject: [PATCH 4/5] Address some reviews --- package.json | 1 - .../renderers/OpeningHoursRenderer.tsx | 12 +++++++++++- .../renderers/openingHours/complex.ts | 15 ++++++++++++--- .../FeaturePanel/renderers/openingHours/index.ts | 13 +++++++++---- .../FeaturePanel/renderers/openingHours/simple.ts | 10 ---------- .../FeaturePanel/renderers/openingHours/types.ts | 5 +++++ yarn.lock | 5 ----- 7 files changed, 37 insertions(+), 24 deletions(-) delete mode 100644 src/components/FeaturePanel/renderers/openingHours/simple.ts diff --git a/package.json b/package.json index 7ac71c19..617763ec 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,6 @@ "react-jss": "^10.6.0", "react-split-pane": "^0.1.92", "react-zoom-pan-pinch": "^3.3.0", - "simple-opening-hours": "^0.1.1", "styled-components": "^5.3.0", "styled-jsx": "^3.4.4" }, diff --git a/src/components/FeaturePanel/renderers/OpeningHoursRenderer.tsx b/src/components/FeaturePanel/renderers/OpeningHoursRenderer.tsx index b9c3885a..d0ac8389 100644 --- a/src/components/FeaturePanel/renderers/OpeningHoursRenderer.tsx +++ b/src/components/FeaturePanel/renderers/OpeningHoursRenderer.tsx @@ -6,6 +6,7 @@ import { t } from '../../../services/intl'; import { ToggleButton } from '../helpers/ToggleButton'; import { parseOpeningHours } from './openingHours'; import { SimpleOpeningHoursTable } from './openingHours/types'; +import { useFeatureContext } from '../../utils/FeatureContext'; const Table = styled.table` margin: 1em; @@ -42,7 +43,16 @@ const formatDescription = (isOpen: boolean, days: SimpleOpeningHoursTable) => { const OpeningHoursRenderer = ({ v }) => { const [isExpanded, toggle] = useToggleState(false); - const { daysTable, isOpen } = parseOpeningHours(v); + + const { countryCode, center } = useFeatureContext().feature; + + const openingHours = parseOpeningHours(v, center[0], center[0], { + country_code: countryCode, + state: '', + }); + if (!openingHours) return null; + const { daysTable, isOpen } = openingHours; + const { ph, ...days } = daysTable; const timesByDay = Object.values(days).map((times, idx) => ({ times, diff --git a/src/components/FeaturePanel/renderers/openingHours/complex.ts b/src/components/FeaturePanel/renderers/openingHours/complex.ts index b28ea5e5..f02cca63 100644 --- a/src/components/FeaturePanel/renderers/openingHours/complex.ts +++ b/src/components/FeaturePanel/renderers/openingHours/complex.ts @@ -1,6 +1,6 @@ import OpeningHours from 'opening_hours'; import { isInRange } from './utils'; -import { SimpleOpeningHoursTable } from './types'; +import { Address, SimpleOpeningHoursTable } from './types'; type Weekday = keyof SimpleOpeningHoursTable; const weekdays: Weekday[] = ['su', 'mo', 'tu', 'we', 'th', 'fr', 'sa', 'ph']; @@ -17,8 +17,17 @@ const weekdayMappings: Record = { const fmtDate = (d: Date) => d.toLocaleTimeString(undefined, { hour: 'numeric', minute: 'numeric' }); -export const parseComplexOpeningHours = (value: string) => { - const oh = new OpeningHours(value); +export const parseComplexOpeningHours = ( + value: string, + lat: number, + lon: number, + address: Address, +) => { + const oh = new OpeningHours(value, { + lat, + lon, + address, + }); const today = new Date(); today.setHours(0, 0, 0, 0); diff --git a/src/components/FeaturePanel/renderers/openingHours/index.ts b/src/components/FeaturePanel/renderers/openingHours/index.ts index aaff9cf7..b8f65df5 100644 --- a/src/components/FeaturePanel/renderers/openingHours/index.ts +++ b/src/components/FeaturePanel/renderers/openingHours/index.ts @@ -1,10 +1,15 @@ import { parseComplexOpeningHours } from './complex'; -import { parseSimpleOpeningHours } from './simple'; +import { Address } from './types'; -export const parseOpeningHours = (value: string) => { +export const parseOpeningHours = ( + value: string, + lat: number, + lon: number, + address: Address, +): ReturnType | null => { try { - return parseComplexOpeningHours(value); + return parseComplexOpeningHours(value, lat, lon, address); } catch { - return parseSimpleOpeningHours(value); + return null; } }; diff --git a/src/components/FeaturePanel/renderers/openingHours/simple.ts b/src/components/FeaturePanel/renderers/openingHours/simple.ts deleted file mode 100644 index cd422463..00000000 --- a/src/components/FeaturePanel/renderers/openingHours/simple.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { SimpleOpeningHours } from 'simple-opening-hours'; -import { SimpleOpeningHoursTable } from './types'; - -export const parseSimpleOpeningHours = (value: string) => { - const sanitized = value.match(/^[0-9:]+-[0-9:]+$/) ? `Mo-Su ${value}` : value; - const opening = new SimpleOpeningHours(sanitized); - const daysTable = opening.getTable() as SimpleOpeningHoursTable; - const isOpen = opening.isOpenNow(); - return { daysTable, isOpen }; -}; diff --git a/src/components/FeaturePanel/renderers/openingHours/types.ts b/src/components/FeaturePanel/renderers/openingHours/types.ts index 3c28dc72..a3c68818 100644 --- a/src/components/FeaturePanel/renderers/openingHours/types.ts +++ b/src/components/FeaturePanel/renderers/openingHours/types.ts @@ -8,3 +8,8 @@ export interface SimpleOpeningHoursTable { sa: string[]; ph: string[]; } + +export type Address = { + country_code: string; + state: string; +}; diff --git a/yarn.lock b/yarn.lock index 63261337..481f0594 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6835,11 +6835,6 @@ signal-exit@^3.0.2, signal-exit@^3.0.3: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== -simple-opening-hours@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/simple-opening-hours/-/simple-opening-hours-0.1.1.tgz#f6059d8aaae63953bbcb4705ffe3250b5bee4d30" - integrity sha512-IbHhKCeh0AMUIdgTTGA6R3ZJIfvnDm/jml7+OCygoH3ZQTmxwTnq2ZwBc1dr9VK0XQbAAeBUBVfIRwGKRzdXhQ== - sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" From 32c10fe67407ec03b34fe9c42c9375961b3d6d0a Mon Sep 17 00:00:00 2001 From: Dlurak <84224239+Dlurak@users.noreply.github.com> Date: Wed, 22 May 2024 10:06:33 +0000 Subject: [PATCH 5/5] Address the latest review --- .../FeaturePanel/renderers/OpeningHoursRenderer.tsx | 2 +- .../FeaturePanel/renderers/openingHours/complex.ts | 4 ++-- src/components/FeaturePanel/renderers/openingHours/index.ts | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/FeaturePanel/renderers/OpeningHoursRenderer.tsx b/src/components/FeaturePanel/renderers/OpeningHoursRenderer.tsx index d0ac8389..852b25e3 100644 --- a/src/components/FeaturePanel/renderers/OpeningHoursRenderer.tsx +++ b/src/components/FeaturePanel/renderers/OpeningHoursRenderer.tsx @@ -46,7 +46,7 @@ const OpeningHoursRenderer = ({ v }) => { const { countryCode, center } = useFeatureContext().feature; - const openingHours = parseOpeningHours(v, center[0], center[0], { + const openingHours = parseOpeningHours(v, center, { country_code: countryCode, state: '', }); diff --git a/src/components/FeaturePanel/renderers/openingHours/complex.ts b/src/components/FeaturePanel/renderers/openingHours/complex.ts index f02cca63..021e9e08 100644 --- a/src/components/FeaturePanel/renderers/openingHours/complex.ts +++ b/src/components/FeaturePanel/renderers/openingHours/complex.ts @@ -1,6 +1,7 @@ import OpeningHours from 'opening_hours'; import { isInRange } from './utils'; import { Address, SimpleOpeningHoursTable } from './types'; +import { LonLat } from '../../../../services/types'; type Weekday = keyof SimpleOpeningHoursTable; const weekdays: Weekday[] = ['su', 'mo', 'tu', 'we', 'th', 'fr', 'sa', 'ph']; @@ -19,8 +20,7 @@ const fmtDate = (d: Date) => export const parseComplexOpeningHours = ( value: string, - lat: number, - lon: number, + [lon, lat]: LonLat, address: Address, ) => { const oh = new OpeningHours(value, { diff --git a/src/components/FeaturePanel/renderers/openingHours/index.ts b/src/components/FeaturePanel/renderers/openingHours/index.ts index b8f65df5..7880abb5 100644 --- a/src/components/FeaturePanel/renderers/openingHours/index.ts +++ b/src/components/FeaturePanel/renderers/openingHours/index.ts @@ -1,14 +1,14 @@ +import { LonLat } from '../../../../services/types'; import { parseComplexOpeningHours } from './complex'; import { Address } from './types'; export const parseOpeningHours = ( value: string, - lat: number, - lon: number, + coords: LonLat, address: Address, ): ReturnType | null => { try { - return parseComplexOpeningHours(value, lat, lon, address); + return parseComplexOpeningHours(value, coords, address); } catch { return null; }