import { logger } from "@scandic-hotels/common/logger" import type { IntlShape } from "react-intl" import type { AlternateOpeningHours, OpeningHours } from "./openingHoursTypes" export function getGroupedOpeningHours( openingHours: OpeningHours | AlternateOpeningHours, intl: IntlShape ): string[] { const closedMsg = intl.formatMessage({ id: "openingHours.closed", defaultMessage: "Closed", }) const alwaysOpenMsg = intl.formatMessage({ id: "openingHours.alwaysOpen", defaultMessage: "Always open", }) // In order const weekdayDefinitions = [ { key: "monday", label: intl.formatMessage({ id: "common.monday", defaultMessage: "Monday", }), }, { key: "tuesday", label: intl.formatMessage({ id: "common.tuesday", defaultMessage: "Tuesday", }), }, { key: "wednesday", label: intl.formatMessage({ id: "common.wednesday", defaultMessage: "Wednesday", }), }, { key: "thursday", label: intl.formatMessage({ id: "common.thursday", defaultMessage: "Thursday", }), }, { key: "friday", label: intl.formatMessage({ id: "common.friday", defaultMessage: "Friday", }), }, { key: "saturday", label: intl.formatMessage({ id: "common.saturday", defaultMessage: "Saturday", }), }, { key: "sunday", label: intl.formatMessage({ id: "common.sunday", 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) { const lowercaseName = name.toLowerCase() switch (lowercaseName) { case "breakfast": return intl.formatMessage({ id: "common.breakfast", defaultMessage: "Breakfast", }) case "brunch": return intl.formatMessage({ id: "common.brunch", defaultMessage: "Brunch", }) case "after work": return intl.formatMessage({ id: "common.afterwork", defaultMessage: "After Work", }) case "cafe": return intl.formatMessage({ id: "common.cafe", defaultMessage: "Café", }) case "lunch": return intl.formatMessage({ id: "common.lunch", defaultMessage: "Lunch", }) case "dinner": return intl.formatMessage({ id: "common.dinner", defaultMessage: "Dinner", }) case "bar": return intl.formatMessage({ id: "common.bar", defaultMessage: "Bar", }) case "snacks & drinks": return intl.formatMessage({ id: "common.snacks&drinks", defaultMessage: "Snacks & drinks", }) case "takeaway": return intl.formatMessage({ id: "common.takeaway", defaultMessage: "Takeaway", }) case "changes": return intl.formatMessage({ id: "common.changes", defaultMessage: "Changes", }) case "live events": return intl.formatMessage({ id: "common.liveEvents", defaultMessage: "Live events", }) case "terrace": return intl.formatMessage({ id: "common.terrace", defaultMessage: "Terrace", }) default: logger.warn(`Unsupported name given: ${name}`) return intl.formatMessage({ id: "common.NA", defaultMessage: "N/A", }) } }