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

149 lines
No EOL
5.2 KiB
TypeScript

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