mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-03-05 05:00:03 +00:00
Backport of #6999 to `core/1.32` Automatically created by backport workflow. ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-7001-backport-core-1-32-fix-add-filter-for-combo-widgets-2b86d73d3650812e9a32c5990ebb9a81) by [Unito](https://www.unito.io) --------- Co-authored-by: Johnpaul Chiwetelu <49923152+Myestery@users.noreply.github.com> Co-authored-by: github-actions <github-actions@github.com>
73 lines
1.9 KiB
Vue
73 lines
1.9 KiB
Vue
<template>
|
|
<WidgetLayoutField :widget>
|
|
<Select
|
|
v-model="modelValue"
|
|
:invalid
|
|
:filter="selectOptions.length > 4"
|
|
:options="selectOptions"
|
|
v-bind="combinedProps"
|
|
:class="cn(WidgetInputBaseClass, 'w-full text-xs')"
|
|
:aria-label="widget.name"
|
|
size="small"
|
|
:pt="{
|
|
option: 'text-xs',
|
|
dropdown: 'w-8',
|
|
label: 'truncate min-w-[4ch]',
|
|
overlay: 'w-fit min-w-full'
|
|
}"
|
|
data-capture-wheel="true"
|
|
/>
|
|
</WidgetLayoutField>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import Select from 'primevue/select'
|
|
import { computed } from 'vue'
|
|
|
|
import { useTransformCompatOverlayProps } from '@/composables/useTransformCompatOverlayProps'
|
|
import type { SimplifiedWidget } from '@/types/simplifiedWidget'
|
|
import { cn } from '@/utils/tailwindUtil'
|
|
import {
|
|
PANEL_EXCLUDED_PROPS,
|
|
filterWidgetProps
|
|
} from '@/utils/widgetPropFilter'
|
|
|
|
import { WidgetInputBaseClass } from './layout'
|
|
import WidgetLayoutField from './layout/WidgetLayoutField.vue'
|
|
|
|
interface Props {
|
|
widget: SimplifiedWidget<string | undefined>
|
|
}
|
|
|
|
const props = defineProps<Props>()
|
|
|
|
const modelValue = defineModel<string | undefined>({
|
|
default(props: Props) {
|
|
return props.widget.options?.values?.[0] || ''
|
|
}
|
|
})
|
|
|
|
// Transform compatibility props for overlay positioning
|
|
const transformCompatProps = useTransformCompatOverlayProps()
|
|
|
|
// Extract select options from widget options
|
|
const selectOptions = computed(() => {
|
|
const options = props.widget.options
|
|
|
|
if (options?.values && Array.isArray(options.values)) {
|
|
return options.values
|
|
}
|
|
|
|
return []
|
|
})
|
|
const invalid = computed(
|
|
() => !!modelValue.value && !selectOptions.value.includes(modelValue.value)
|
|
)
|
|
|
|
const combinedProps = computed(() => ({
|
|
...filterWidgetProps(props.widget.options, PANEL_EXCLUDED_PROPS),
|
|
...transformCompatProps.value,
|
|
...(invalid.value ? { placeholder: `${modelValue.value}` } : {})
|
|
}))
|
|
</script>
|