61 lines
2.4 KiB
JavaScript
61 lines
2.4 KiB
JavaScript
// 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
|
|
}; |