149 lines
No EOL
5.2 KiB
TypeScript
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;
|
|
}; |