feat(FE show_form)
This commit is contained in:
parent
a5439b1c96
commit
ce4c2ff25b
1 changed files with 149 additions and 0 deletions
149
resources/js/composables/content/show/show_form.ts
Normal file
149
resources/js/composables/content/show/show_form.ts
Normal file
|
@ -0,0 +1,149 @@
|
|||
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.autoplaylistId,
|
||||
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;
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue