diff --git a/apps/app/src/components/shifts/AssignPersonDialog.vue b/apps/app/src/components/shifts/AssignPersonDialog.vue index 36040111..9931f48f 100644 --- a/apps/app/src/components/shifts/AssignPersonDialog.vue +++ b/apps/app/src/components/shifts/AssignPersonDialog.vue @@ -24,7 +24,7 @@ const { mutateAsync: assignPerson, isPending: isAssigning } = useAssignPersonToS // Search and filters const searchQuery = ref('') const showOnlyAvailable = ref(true) -const showRecommendedOnly = ref(false) +const showRecommendedOnly = ref(true) const selectedCrowdType = ref(null) const assignError = ref(null) const showSuccess = ref(false) @@ -77,6 +77,8 @@ watch(() => assignableData.value, (data) => { watch(modelValue, (open) => { if (open) { searchQuery.value = '' + showRecommendedOnly.value = true + showOnlyAvailable.value = true selectedCrowdType.value = null assignError.value = null } @@ -177,6 +179,32 @@ function getPreferenceMatch(person: AssignablePerson) { return person.section_preferences.find(sp => sp.section_name === sectionName) } +function getRecommendationReasons(person: AssignablePerson): string[] { + const reasons: string[] = [] + const sectionName = assignableData.value?.meta?.section_name + + const prefMatch = sectionName + ? person.section_preferences.find(sp => sp.section_name === sectionName) + : null + if (prefMatch) { + reasons.push(`Voorkeur voor ${sectionName} (prioriteit #${prefMatch.priority})`) + } + + if (person.has_availability) { + reasons.push(`Beschikbaar voor tijdslot ${assignableData.value?.meta?.time_slot_name}`) + } + + if (person.tags.length) { + const proficiencyLabel: Record = { beginner: 'beginner', experienced: 'ervaren', expert: 'expert' } + const tagNames = person.tags.map(t => + t.proficiency ? `${t.name} (${proficiencyLabel[t.proficiency]})` : t.name, + ) + reasons.push(`Kenmerken: ${tagNames.join(', ')}`) + } + + return reasons +} + function handleAssign(person: AssignablePerson) { if (!props.shift) return assignError.value = null @@ -315,7 +343,7 @@ async function executeAssign(person: AssignablePerson) { v-model="searchQuery" prepend-inner-icon="tabler-search" placeholder="Zoek op naam of e-mail..." - density="compact" + density="comfortable" hide-details clearable class="mb-3" @@ -390,6 +418,32 @@ async function executeAssign(person: AssignablePerson) { {{ person.name }} + + +
+ Aanbevolen omdat: +
    +
  • + {{ reason }} +
  • +
+
+