From 59fedb67576a18563e1f40169f69adc07f304cd6 Mon Sep 17 00:00:00 2001 From: kolaente Date: Sat, 22 Nov 2025 16:03:18 +0100 Subject: [PATCH] fix(components): add type guards and null checks in Multiselect - Add null check for multiselectRoot before passing to closeWhenClickedOutside - Add early return for null object in select function - Add type guards for string vs object in setSelectedObject - Add type guards for focus method in preSelect function - Remove invalid length check on Element type --- frontend/src/components/input/Multiselect.vue | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/frontend/src/components/input/Multiselect.vue b/frontend/src/components/input/Multiselect.vue index e1e35167d..187cb23d1 100644 --- a/frontend/src/components/input/Multiselect.vue +++ b/frontend/src/components/input/Multiselect.vue @@ -302,7 +302,9 @@ function search() { const multiselectRoot = ref(null) function hideSearchResultsHandler(e: MouseEvent) { - closeWhenClickedOutside(e, multiselectRoot.value, closeSearchResults) + if (multiselectRoot.value) { + closeWhenClickedOutside(e, multiselectRoot.value, closeSearchResults) + } } function closeSearchResults() { @@ -318,6 +320,10 @@ function handleFocus() { } function select(object: T | null) { + if (object === null) { + return + } + if (props.multiple) { if (internalValue.value === null) { internalValue.value = [] @@ -355,7 +361,13 @@ function setSelectedObject(object: string | T | null | undefined, resetOnly = fa return } - query.value = props.label !== '' ? object[props.label] : object + if (typeof object === 'string') { + query.value = object + } else if (props.label !== '') { + query.value = object[props.label] as string + } else { + query.value = String(object) + } } const results = ref<(Element | ComponentPublicInstance)[]>([]) @@ -375,16 +387,20 @@ function preSelect(index: number) { } const elems = results.value[index] - if (typeof elems === 'undefined' || elems.length === 0) { + if (typeof elems === 'undefined') { return } if (Array.isArray(elems)) { - elems[0].focus() + if (elems.length > 0 && 'focus' in elems[0]) { + (elems[0] as HTMLElement).focus() + } return } - elems.focus() + if ('focus' in elems) { + (elems as HTMLElement).focus() + } } function create() {