import { ElementBase, ElementStatus } from '../../classes/classes' import { capitalize } from '../../utils/string-helpers' import { App } from '../../gogocarto' declare let $ export class ElementFormaterModule { calculateFormatedOpenHours(element: ElementBase) { element.formatedOpenHours = {} let new_key, new_key_translated, newDailySlot for (const key in element.openHours) { new_key_translated = this.translateDayKey(key) newDailySlot = this.formateDailyTimeSlot(element.openHours[key]) if (newDailySlot) element.formatedOpenHours[new_key_translated] = newDailySlot } } getProperty(element: ElementBase, propertyName) { let value = this.getValue(element, propertyName) || '' // in iframe the pending modifications are not displayed, just the old version if ( element.status != ElementStatus.PendingModification || !App.config.isFeatureAvailable('pending') || !element.modifiedElement ) return value if ($.isArray(value) || typeof value == 'object') return value let modifiedValue = this.getValue(element.modifiedElement, propertyName) if (!value && !modifiedValue) return '' value = `${value}` || '' modifiedValue = `${modifiedValue}` || '' // Switch value and modified Value for updatedAt attribute if (propertyName == 'updatedAt') { const tmp_value = value value = modifiedValue modifiedValue = tmp_value } return App.elementDiffModule.getDiffValue(value, modifiedValue) } private translateDayKey(dayKey) { const i18n = App.config.i18n[App.config.language] const daysOfWeek = i18n && i18n['open_hours.days_of_week'] if (!daysOfWeek || !Array.isArray(daysOfWeek)) { // Fallback to default day names if translation is missing const defaultDays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] const dayIndex = { Mo: 0, Tu: 1, We: 2, Th: 3, Fr: 4, Sa: 5, Su: 6 }[dayKey] return dayIndex !== undefined ? defaultDays[dayIndex] : '' } switch (dayKey) { case 'Mo': return daysOfWeek[0] || '' case 'Tu': return daysOfWeek[1] || '' case 'We': return daysOfWeek[2] || '' case 'Th': return daysOfWeek[3] || '' case 'Fr': return daysOfWeek[4] || '' case 'Sa': return daysOfWeek[5] || '' case 'Su': return daysOfWeek[6] || '' } return '' } private formateDailyTimeSlot(dailySlot) { if (dailySlot === null) return null return dailySlot .replace(/-/g, '-') .replace(/,/g, ' ') } private getValue(element: ElementBase, propertyName) { let value if (propertyName == 'address') value = element.address ? element.address.getFormatedAddress() : '' else if (propertyName in element) value = element[propertyName] else value = element.data[propertyName] return value } }