song-ui-u
Version:
vue3 + js的PC前端组件库
1 lines • 5.5 kB
Source Map (JSON)
{"version":3,"file":"option.cjs","sources":["../../../../../packages/components/select/src/option.jsx"],"sourcesContent":["import {\r\n defineComponent,\r\n inject,\r\n computed,\r\n onMounted,\r\n onBeforeUnmount,\r\n} from \"vue\";\r\nimport { useNamespace } from \"@ui-library/hook\";\r\nimport { SELECT_KEY, OPTION_KEY } from \"./constant\";\r\nimport { XIcon } from \"@ui-library/components\";\r\nimport { Check } from \"song-ui-pro-icon\";\r\n\r\nexport default defineComponent({\r\n name: \"x-option\",\r\n props: {\r\n value: {\r\n type: [String, Number],\r\n required: true,\r\n },\r\n label: {\r\n type: String,\r\n default: \"\",\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n setup(props, { slots }) {\r\n const ns = useNamespace(\"option\");\r\n const selectCtx = inject(SELECT_KEY);\r\n\r\n // 生成唯一ID\r\n const id = Symbol(\"option\");\r\n\r\n // 计算是否被选中\r\n const isSelected = computed(() => {\r\n return selectCtx.isOptionSelected(props.value);\r\n });\r\n\r\n // 计算是否应该显示(过滤功能)\r\n const isVisible = computed(() => {\r\n if (!selectCtx.props.filterable || !selectCtx.inputValue.value) {\r\n return true;\r\n }\r\n const label = props.label || slots.default?.();\r\n return label\r\n .toLowerCase()\r\n .includes(selectCtx?.inputValue?.value.toLowerCase());\r\n });\r\n\r\n // 处理点击事件\r\n const handleClick = () => {\r\n if (props.disabled) return;\r\n selectCtx.selectOption(props.value, props.label || slots.default?.());\r\n };\r\n\r\n // 组件挂载时注册到Select\r\n onMounted(() => {\r\n selectCtx.registerOption({\r\n id,\r\n value: props.value,\r\n label: props.label || slots.default?.(),\r\n });\r\n });\r\n\r\n // 组件卸载时从Select注销\r\n onBeforeUnmount(() => {\r\n selectCtx.unregisterOption(id);\r\n });\r\n\r\n return () =>\r\n isVisible.value ? (\r\n <li\r\n class={[\r\n ns.b(),\r\n ns.is(\"selected\", isSelected.value),\r\n ns.is(\"disabled\", props.disabled),\r\n ]}\r\n onClick={handleClick}\r\n >\r\n <span class={[ns.e(\"label\")]}>\r\n {props.label || slots.default?.()}\r\n </span>\r\n {isSelected.value && (\r\n <XIcon class={[ns.e(\"check\")]}>\r\n <Check />\r\n </XIcon>\r\n )}\r\n </li>\r\n ) : null;\r\n },\r\n});\r\n"],"names":["defineComponent","name","props","value","type","String","Number","required","label","default","disabled","Boolean","setup","slots","ns","useNamespace","selectCtx","inject","SELECT_KEY","id","Symbol","isSelected","computed","isOptionSelected","isVisible","filterable","inputValue","toLowerCase","includes","handleClick","selectOption","onMounted","registerOption","onBeforeUnmount","unregisterOption","_createVNode","b","is","e","XIcon","Check"],"mappings":"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"}