>(obj: T, key: string) {
+ return get(obj, key)
+ }
+
function onQueryChange(event: any) {
query.value = event.target.value
}
@@ -475,6 +479,7 @@ export default defineComponent({
filteredOptions,
// eslint-disable-next-line vue/no-dupe-keys
query,
+ accessor,
onUpdate,
onQueryChange
}
diff --git a/src/runtime/components/forms/SelectMenu.vue b/src/runtime/components/forms/SelectMenu.vue
index 761cfcf9..cdd829e3 100644
--- a/src/runtime/components/forms/SelectMenu.vue
+++ b/src/runtime/components/forms/SelectMenu.vue
@@ -86,7 +86,7 @@
/>
- {{ ['string', 'number'].includes(typeof option) ? option : option[optionAttribute] }}
+ {{ ['string', 'number'].includes(typeof option) ? option : accessor(option, optionAttribute) }}
@@ -100,7 +100,7 @@
- Create "{{ createOption[optionAttribute] }}"
+ Create "{{ typeof createOption === 'string' ? createOption : accessor(createOption, optionAttribute) }}"
@@ -390,9 +390,9 @@ export default defineComponent({
}
} else if (props.modelValue !== undefined && props.modelValue !== null) {
if (props.valueAttribute) {
- return selected.value?.[props.optionAttribute] ?? null
+ return accessor(selected.value, props.optionAttribute) ?? null
} else {
- return ['string', 'number'].includes(typeof props.modelValue) ? props.modelValue : props.modelValue[props.optionAttribute]
+ return ['string', 'number'].includes(typeof props.modelValue) ? props.modelValue : accessor(props.modelValue as Record, props.optionAttribute)
}
}
@@ -489,6 +489,10 @@ export default defineComponent({
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
}
+ function accessor>(obj: T, key: string) {
+ return get(obj, key)
+ }
+
const filteredOptions = computed(() => {
if (!query.value || debouncedSearch) {
return options.value
@@ -517,7 +521,7 @@ export default defineComponent({
return null
}
if (props.showCreateOptionWhen === 'always') {
- const existingOption = filteredOptions.value.find(option => ['string', 'number'].includes(typeof option) ? option === query.value : option[props.optionAttribute] === query.value)
+ const existingOption = filteredOptions.value.find(option => ['string', 'number'].includes(typeof option) ? option === query.value : accessor(option, props.optionAttribute) === query.value)
if (existingOption) {
return null
}
@@ -573,6 +577,7 @@ export default defineComponent({
container,
selected,
label,
+ accessor,
isLeading,
isTrailing,
// eslint-disable-next-line vue/no-dupe-keys