fix(fe smartblock): fixed showing smart block criteria on edit

This commit is contained in:
Marco Cavalli 2025-03-27 10:32:32 +01:00
parent 5daec331f8
commit c2b1ebee80
2 changed files with 60 additions and 15 deletions

View file

@ -1,33 +1,57 @@
<script setup lang="ts"> <script setup lang="ts">
import {smartblockCriteria} from "@models/smartblock/smartblockCriteria.ts"; import {smartblockCriteria} from "@models/smartblock/smartblockCriteria.ts";
import {ref, watch} from "vue"; import {onMounted, ref, watch} from "vue";
import {trackType} from "@/composables/content/track_type.ts"; import {trackType} from "@/composables/content/track_type.ts";
const emit = defineEmits(['updateProperty']) const emit = defineEmits(['updateProperty'])
const props = defineProps({
criteria: Array
})
const { criteria, modifiers } = smartblockCriteria() const { criteria, modifiers } = smartblockCriteria()
const trackTypes = trackType(false) const trackTypes = trackType(false)
console.log(trackTypes)
const activeCriteria = ref([]) const activeCriteria = ref([])
const firstCriteria = activeCriteria.value.push({
criteria: '',
modifier: '',
value: ''
})
watch(activeCriteria.value, (newVal, oldVal) => {
console.log(newVal)
emit('updateProperty', newVal, 'criteria')
})
const addCriteria = () => { const addCriteria = () => {
activeCriteria.value.push({ activeCriteria.value.push({
criteria: '', criteria: '',
modifier: '', modifier: '',
value: '' value: '',
extra: ''
}) })
} }
const checkModifier = (index) => {
if (activeCriteria.value[index].modifier !== 'is in the range') {
activeCriteria.value[index].extra = ''
}
}
onMounted(() => {
if (props.criteria.length > 0) {
props.criteria.forEach(criteria => {
if (criteria.criteria !== 'sort' &&
criteria.criteria !== 'limit' &&
criteria.criteria !== 'repeat_tracks' &&
criteria.criteria !== 'overflow_tracks') {
activeCriteria.value.push(criteria)
}
})
} else {
activeCriteria.value.push({
criteria: '',
modifier: '',
value: '',
extra: ''
})
}
})
watch(activeCriteria.value, (newVal, oldVal) => {
emit('updateProperty', newVal, 'criteria')
})
</script> </script>
<template> <template>
@ -54,6 +78,7 @@ const addCriteria = () => {
label="Seleziona il modificatore" label="Seleziona il modificatore"
:items="modifiers :items="modifiers
.filter(mod => mod.type === criteria.find(cri => cri.value === activeCriteria[index].criteria)?.type || mod.type === 'all')" .filter(mod => mod.type === criteria.find(cri => cri.value === activeCriteria[index].criteria)?.type || mod.type === 'all')"
@update:modelValue="checkModifier(index)"
item-title="title" item-title="title"
item-value="value" item-value="value"
></v-select> ></v-select>
@ -61,7 +86,7 @@ const addCriteria = () => {
<v-col> <v-col>
<v-text-field <v-text-field
v-if="activeCriteria[index].criteria != 'track_type_id'" v-if="activeCriteria[index].criteria != 'track_type_id'"
label="Valore scelto" :label="activeCriteria[index].modifier === 'is in the range' ? 'Valore iniziale' : 'Valore scelto'"
v-model="activeCriteria[index].value" v-model="activeCriteria[index].value"
:type="criteria.find(cri => cri.value === activeCriteria[index].criteria)?.type === 'number' ? 'number' : 'text'" :type="criteria.find(cri => cri.value === activeCriteria[index].criteria)?.type === 'number' ? 'number' : 'text'"
></v-text-field> ></v-text-field>
@ -72,6 +97,12 @@ const addCriteria = () => {
item-title="type_name" item-title="type_name"
item-value="id" item-value="id"
></v-select> ></v-select>
<v-text-field
v-if="activeCriteria[index].modifier !== '' && activeCriteria[index].modifier === 'is in the range'"
label="Valore finale"
type="number"
v-model="activeCriteria[index].extra"
></v-text-field>
</v-col> </v-col>
<v-col <v-col
v-if="index > 0" v-if="index > 0"

View file

@ -65,5 +65,19 @@ export function blocks_page() {
}) })
} }
return { items, listData, headers, selected, loading, search, getItems, editItem, deleteItem } const getTracklist = async (item) => {
let params = null;
if (item.id === 0) {
params = item
}
return await axios.get(`/smartblock/${item.id}/tracks`, {
params: params
}).then((response) => {
return response.data
}).catch((error) => {
console.log("Error: "+error);
})
}
return { items, listData, headers, selected, loading, search, getItems, editItem, deleteItem, getTracklist }
} }