UNPKG

vue-admin-core

Version:
1 lines 11.6 kB
{"version":3,"file":"Popper.mjs","sources":["../../../../../../package/components/msg-editor/src/Popper.tsx"],"sourcesContent":["import { defineComponent, ref, watch, PropType, onMounted, onUnmounted, nextTick } from \"vue\";\nimport { getPrefixCls } from \"@vue-admin-core/utils/const\";\nimport emitter from \"./mitt\";\nimport type { IDomEditor } from \"@wangeditor/core\";\nimport { VariableElement } from \"./types\";\nimport { useElementHover, useScroll } from \"@vueuse/core\";\n\nconst prefixCls = getPrefixCls(\"msg-editor\");\n\nexport default defineComponent({\n name: \"MsgEditorPopper\",\n props: {\n visible: {\n type: Boolean\n },\n position: {\n type: Object\n },\n options: {\n type: Array as PropType<{ label: string; value: string }[]>,\n default: () => []\n },\n editor: {\n type: Object as PropType<IDomEditor>\n },\n value: {\n type: String\n }\n },\n setup(props, { attrs, expose }) {\n // const virtualEl = ref();\n const floating = ref();\n const arrowElement = ref();\n const hoverItem = ref();\n const selectValue = ref();\n const popperList = ref<HTMLElement | null>(null);\n\n const { y } = useScroll(popperList);\n const isHovered = useElementHover(popperList);\n\n watch(\n () => [props.position, props.visible],\n () => {\n if (!floating.value) return;\n if (props.visible && props.position) {\n Object.assign(floating.value.style, {\n left: `${props.position.value.left - (props.position.value.isRight ? 10 : 20)}px`,\n top: `${props.position.value.top}px`,\n display: \"block\"\n });\n hoverItem.value = props.options[0];\n } else {\n Object.assign(floating.value.style, {\n display: \"none\"\n });\n }\n },\n { deep: true, immediate: true }\n );\n\n watch(\n () => props.value,\n (value) => {\n selectValue.value = value;\n }\n );\n\n const select = () => {\n if (!props.editor || !hoverItem.value) return;\n props.editor.restoreSelection();\n props.editor.deleteBackward(\"character\");\n // 插入 variable 节点\n const variableNode: VariableElement = {\n type: \"variable\",\n value: hoverItem.value.value,\n label: hoverItem.value.label,\n children: [{ text: \"\" }]\n };\n props.editor.insertNode(variableNode);\n // 光标移动一位\n props.editor.move(1);\n };\n\n const handleClick = (e: MouseEvent, item: any) => {\n hoverItem.value = item;\n nextTick(() => {\n select();\n });\n };\n\n onMounted(() => {\n emitter.on(\"ArrowDown\", () => {\n if (hoverItem.value) {\n let index = props.options.findIndex((item) => item.value === hoverItem.value.value);\n if (index === props.options.length - 1) {\n index = -1;\n }\n hoverItem.value = props.options[index + 1];\n }\n });\n emitter.on(\"ArrowUp\", () => {\n if (hoverItem.value) {\n let index = props.options.findIndex((item) => item.value === hoverItem.value.value);\n if (index === 0) {\n index = props.options.length;\n }\n hoverItem.value = props.options[index - 1];\n }\n });\n emitter.on(\"Enter\", () => {\n select();\n });\n });\n\n onUnmounted(() => {\n emitter.all.clear();\n });\n\n expose({\n setValue: (value: any) => {\n if (value) {\n hoverItem.value = value;\n }\n },\n target: floating\n });\n\n watch(\n () => hoverItem.value,\n async () => {\n if (isHovered.value) return;\n await nextTick();\n const el = popperList.value?.querySelector(\".is-hovering\") as any;\n y.value = el?.offsetTop;\n }\n );\n\n watch(\n () => selectValue.value,\n async (value) => {\n if (isHovered.value || !value) return;\n await nextTick();\n const el = popperList.value?.querySelector(\".is-selected\") as any;\n y.value = el?.offsetTop;\n }\n );\n\n return () => {\n return (\n <div {...attrs} ref={floating}>\n <div ref={popperList} class={`${prefixCls}__popper__list`}>\n {props.options.map((item) => (\n <div\n class={[\n `${prefixCls}__popper__item`,\n { \"is-hovering\": hoverItem.value?.value === item.value },\n { \"is-selected\": selectValue.value === item.value }\n ]}\n onMouseenter={() => (hoverItem.value = item)}\n onClick={(e: any) => handleClick(e, item)}\n >\n {item.label}\n </div>\n ))}\n </div>\n <div class={`${prefixCls}__arrow`} ref={arrowElement}></div>\n </div>\n );\n };\n }\n});\n"],"names":["prefixCls","getPrefixCls","defineComponent","name","props","visible","type","Boolean","position","Object","options","Array","default","editor","value","String","setup","attrs","expose","floating","ref","arrowElement","hoverItem","selectValue","popperList","y","useScroll","isHovered","useElementHover","watch","assign","style","left","isRight","top","display","deep","immediate","select","restoreSelection","deleteBackward","variableNode","label","children","text","insertNode","move","handleClick","e","item","nextTick","onMounted","emitter","on","index","findIndex","length","onUnmounted","all","clear","setValue","target","el","querySelector","offsetTop","_createVNode","_mergeProps","map","onMouseenter"],"mappings":"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"}