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
}
}