import { logger } from '@scandic-hotels/common/logger' import type { IntlShape } from 'react-intl' import { OpeningHours } from './openingHoursTypes' export function getGroupedOpeningHours( openingHours: OpeningHours, intl: IntlShape ): string[] { const closedMsg = intl.formatMessage({ defaultMessage: 'Closed', }) const alwaysOpenMsg = intl.formatMessage({ defaultMessage: 'Always open', }) // In order const weekdayDefinitions = [ { key: 'monday', label: intl.formatMessage({ defaultMessage: 'Monday', }), }, { key: 'tuesday', label: intl.formatMessage({ defaultMessage: 'Tuesday', }), }, { key: 'wednesday', label: intl.formatMessage({ defaultMessage: 'Wednesday', }), }, { key: 'thursday', label: intl.formatMessage({ defaultMessage: 'Thursday', }), }, { key: 'friday', label: intl.formatMessage({ defaultMessage: 'Friday', }), }, { key: 'saturday', label: intl.formatMessage({ defaultMessage: 'Saturday', }), }, { key: 'sunday', label: intl.formatMessage({ defaultMessage: 'Sunday', }), }, ] as const const groupedOpeningHours: string[] = [] let rangeWeekdays: string[] = [] let rangeValue = '' for (let i = 0, n = weekdayDefinitions.length; i < n; ++i) { const weekdayDefinition = weekdayDefinitions[i] const weekday = openingHours[weekdayDefinition.key] const label = weekdayDefinition.label if (weekday) { let newValue = null if (weekday.alwaysOpen) { newValue = alwaysOpenMsg } else if (weekday.isClosed) { newValue = closedMsg } else if (weekday.openingTime && weekday.closingTime) { newValue = `${weekday.openingTime}-${weekday.closingTime}` } if (newValue !== null) { if (rangeValue === newValue) { if (rangeWeekdays.length > 1) { rangeWeekdays.splice(-1, 1, label) // Replace last element } else { rangeWeekdays.push(label) } } else { if (rangeValue) { groupedOpeningHours.push( `${rangeWeekdays.join('-')}: ${rangeValue}` ) } rangeValue = newValue rangeWeekdays = [label] } } if (rangeValue && i === n - 1) { // Flush everything at the end groupedOpeningHours.push(`${rangeWeekdays.join('-')}: ${rangeValue}`) } } else if (rangeValue) { groupedOpeningHours.push(`${rangeWeekdays.join('-')}: ${rangeValue}`) rangeValue = '' rangeWeekdays = [] } } return groupedOpeningHours } export function getTranslatedName(name: string, intl: IntlShape) { switch (name) { case 'Breakfast': return intl.formatMessage({ defaultMessage: 'Breakfast', }) case 'Brunch': return intl.formatMessage({ defaultMessage: 'Brunch', }) case 'After Work': return intl.formatMessage({ defaultMessage: 'After Work', }) case 'Cafe': return intl.formatMessage({ defaultMessage: 'Cafe', }) case 'Lunch': return intl.formatMessage({ defaultMessage: 'Lunch', }) case 'Dinner': return intl.formatMessage({ defaultMessage: 'Dinner', }) case 'Bar': return intl.formatMessage({ defaultMessage: 'Bar', }) case 'Snacks & drinks': return intl.formatMessage({ defaultMessage: 'Snacks & drinks', }) case 'Takeaway': return intl.formatMessage({ defaultMessage: 'Takeaway', }) case 'Changes': return intl.formatMessage({ defaultMessage: 'Changes', }) case 'Live events': return intl.formatMessage({ defaultMessage: 'Live events', }) case 'Terrace': return intl.formatMessage({ defaultMessage: 'Terrace', }) default: logger.warn(`Unsupported name given: ${name}`) return intl.formatMessage({ defaultMessage: 'N/A', }) } }