// Shared timetable group form view-model builder. function buildDefaultTimetableGroup() { return { id: null, name: '', shortDescription: '' }; } function formatDateTimeLocalValue(value) { if (!value) { return ''; } const date = new Date(value); if (Number.isNaN(date.getTime())) { return ''; } const year = String(date.getFullYear()).padStart(4, '0'); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); const hours = String(date.getHours()).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, '0'); return `${year}-${month}-${day}T${hours}:${minutes}`; } function buildTimetableGroupFormViewModel(timetableGroup, timetableEntries, message, currentUser, isEdit) { const viewTimetableGroup = Object.assign(buildDefaultTimetableGroup(), timetableGroup || {}); const viewTimetableEntries = Array.isArray(timetableEntries) && timetableEntries.length ? timetableEntries.map(function (entry) { return Object.assign({}, entry, { startValue: formatDateTimeLocalValue(entry.start_datetime), endValue: formatDateTimeLocalValue(entry.end_datetime) }); }) : [{ id: null, title: '', short_description: '', startValue: '', endValue: '', sort_order: 0 }]; return { title: isEdit ? 'Edit timetable group' : 'Add timetable group', active: 'timetables', message: message, currentUser: currentUser || null, isEdit: Boolean(isEdit), timetableGroup: viewTimetableGroup, timetableEntries: viewTimetableEntries, inUse: Boolean(viewTimetableGroup.inUse), showSaveSecondaryActions: Boolean(isEdit), deleteDisabled: !isEdit || Boolean(viewTimetableGroup.inUse), formAction: isEdit && viewTimetableGroup.id ? '/data-sources/timetables/' + viewTimetableGroup.id : '/data-sources/timetables', formAttrs: 'data-async-save' + (isEdit ? ' data-async-save-close-url="/data-sources/timetables"' : ' data-async-save-new-redirect="response-url"') + ' data-async-save-new-url="/data-sources/timetables/new"', cancelUrl: '/data-sources/timetables', deleteUrl: isEdit && viewTimetableGroup.id ? '/data-sources/timetables/' + viewTimetableGroup.id + '/delete' : '', assetVersion: Date.now().toString(36) }; } module.exports = { buildTimetableGroupFormViewModel: buildTimetableGroupFormViewModel };