sintonia_webapp/resources/js/composables/content/show/show_schedule_page.ts

125 lines
No EOL
4.7 KiB
TypeScript

import {VCheckbox, VDatePicker, VFileInput, VSelect, VTextarea, VTextField} from "vuetify/components";
import CheckBoxConditional from "@partials/fields/misc/CheckBoxConditional.vue";
import type {Show} from "@models/show/show.ts";
import {getShowDays} from "@models/show/showDays.ts";
import type {ShowDays} from "@models/show/showDays";
import CustomTimePicker from "@partials/fields/misc/CustomTimePicker.vue";
import {showRepetitionData} from "@models/show/ShowRepetition.ts";
import DaysCheckbox from "@partials/fields/show/DaysCheckbox.vue";
import ShowStartEndTime from "@partials/fields/show/ShowStartEndTime.vue";
const fieldDefinitions = {
firstShow: {
label: 'Data inizio',
required: true,
},
lastShow: {
label: 'Data fine',
title: 'Data fine',
required: true,
},
startTime: {
label: 'Ora inizio show',
required: true,
},
duration: {
label: 'Durata',
required: false,
},
repeatOption: {
label: 'Regole di repitizione',
repeatType: {
label: 'Ripetizione',
required: false,
},
day: {
label: 'Giorni',
required: false,
},
},
};
export const showDaysForm = (item: ShowDays) => {
const fields = {};
const dateMin = new Date().toISOString().substring(0, 10);
Object.keys(fieldDefinitions).forEach((key) => {
fields[key] = {
label: fieldDefinitions[key].label,
value: item !== null ? item[key as keyof ShowDays] : '',
required: fieldDefinitions[key].required,
component: null
};
switch (key) {
case 'firstShow':
fields[key].component = VDatePicker;
fields[key].min = dateMin,
fields[key].title = fieldDefinitions[key].label;
break;
case 'lastShow':
fields[key].component = CheckBoxConditional;
fields[key].props = {
checkBoxForm: {
checkBoxField: { label: 'Impostare una fine per lo show?' },
fields: {
lastShow: {
label: fields[key].label,
title: fields[key].label,
min: dateMin,
component: VDatePicker,
value: item !== null ? item.lastShow : null,
disabled: true
},
}
}
};
break;
// Includes duration
case 'startTime':
fields[key].component = ShowStartEndTime;
fields[key].props = {
startTime: item !== null ? item.startTime : null,
startTimeLabel: fieldDefinitions.startTime.label,
duration: item !== null ? item.duration : null,
durationLabel: fieldDefinitions.duration.label,
endTimeLabel: 'Orario di fine della trasmissione',
}
break;
case 'repeatType':
fields[key].component = CheckBoxConditional;
fields[key].value = null;
fields[key].props = {
checkBoxForm: {
checkBoxField: { label: 'Ripetere lo show?' },
fields: {
repeatType: {
label: fields[key].label,
component: VSelect,
value: item !== null ? item.repeatType : null,
props: {
items: showRepetitionData,
"item-title": 'repeatName',
"item-value": 'type'
},
disabled: true
},
day: {
label: 'Giorno',
component: DaysCheckbox,
value: item !== null ? item.day : null,
props: {
items: showRepetitionData,
"item-title": 'repeatName',
"item-value": 'type'
},
disabled: true
}
}
}
};
break;
}
});
return fields;
};