import {VCheckbox, VFileInput, VSelect, VTextarea, VTextField} from "vuetify/components"; import ColorPickerButton from "@partials/fields/misc/ColorPickerButton.vue"; import CheckBoxConditional from "@partials/fields/misc/CheckBoxConditional.vue"; import PlaylistSelect from "@partials/fields/playlist/PlaylistSelect.vue"; import type {Show} from "@models/show/show.ts"; import {getUser} from "@models/User.ts"; import {getPlaylist} from "@models/playlist.ts"; const fieldDefinitions = { name: { label: 'Nome', required: true, }, url: { label: 'URL', required: true, }, genre: { label: 'Genere', required: true, }, description: { label: 'Descrizione', required: false, }, backgroundColor: { label: 'Colore di sfondo', required: false, }, liveStreamUsingAirtimeAuth: { label: 'Autenticazione Airtime', required: false, }, imagePath: { label: 'Percorso immagine', required: false, }, hasAutoplaylist: { label: 'Ha playlist automatica', required: false, }, autoplaylistRepeat: { label: 'Ripeti playlist automatica', required: false, }, showDjs: { label: 'DJs', required: false } }; export const showForm = async (item: Show) => { const usersDJs = await getUser({role: 'dj'}); const playlists = await getPlaylist({}); const fields = {}; Object.keys(fieldDefinitions).forEach((key) => { fields[key] = { label: fieldDefinitions[key].label, value: item !== null ? item[key as keyof Show] : '', required: fieldDefinitions[key].required, component: null // Placeholder, will be set in the switch case }; switch (key) { case 'name': case 'url': case 'genre': fields[key].component = VTextField; break; case 'description': fields[key].component = VTextarea; break; case 'backgroundColor': fields[key].component = ColorPickerButton; break; // case 'liveStreamUsingAirtimeAuth': // fields[key].component = CheckBoxConditional; // fields[key].value = { // value: item !== null ? item.liveStreamUsingAirtimeAuth : false, // }; // fields[key].props = { // checkBoxForm: { // checkBoxField: { label: fields[key].label }, // fields: { // liveStreamUser: { // label: 'Utente streaming', // component: VTextField, // value: item !== null ? item.liveStreamUser : '', // disabled: true // }, // liveStreamPass: { // label: 'Password di streaming', // component: VTextField, // value: item !== null ? item.liveStreamPass : '', // disabled: true // }, // } // } // }; // break; case 'imagePath': fields[key].component = VFileInput; fields[key].props = { type: 'file' }; break; case 'hasAutoplaylist': fields[key].component = CheckBoxConditional; fields[key].value = { value: item !== null ? item.hasAutoplaylist : false, }; fields[key].props = { checkBoxForm: { checkBoxField: { label: fields[key].label }, fields: { autoplaylistRepeat: { label: 'Ripetere playlist?', component: VCheckbox, value: item.autoplaylistRepeat, disabled: true }, autoplaylistId: { label: 'Playlist', component: VSelect, value: item.autoplaylist_id, props: { items: playlists, "item-title": 'name', "item-value": 'id' }, disabled: true, }, } } }; break; case 'showDjs': fields[key].component = VSelect; fields[key].value = { value: item.showDjs }; fields[key].props = { items: usersDJs, "item-title": 'login', "item-value": 'id' } break; } }); return fields; };