-
-
Notifications
You must be signed in to change notification settings - Fork 226
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
generateTrigger在多层shadow元素中使用的异常 #463
Comments
pr: #462 |
This is blocking us very hard as well. This is not only Datepicker but all Dropdowns popovers etc. @zombieJ You attention is needed plz |
popupEle?.contains(composedPathTargetList?.[0] as Node) The inPopupOrChild must also check if there is a composed path in the event and check if the composedTarget (the actual clicked element inside the child shadow) is clicked. const inPopupOrChild = useEvent(
(ele: any, composedPathTargetList: EventTarget[]) => {
//ele in my webcomponent shadowDom case is the re-targeted webcomponent element
//composedPathTargetList?.[0] is the actual element the user clicked
const childDOM = targetEle;
return (
...
popupEle?.contains(composedPathTargetList?.[0] as Node)
);
},
); The e.composedPathTargetList is taken from the implementation in #463 PR useWinClick.ts export default function useWinClick(
//...
inPopupOrChild: (target: EventTarget,composedPathTargetList:EventTarget[]) => boolean,
) {
...
const onTriggerClose = (e: MouseEvent) => {
if (openRef.current && !inPopupOrChild(e.target,e.composedPath())) {
triggerOpen(false);
}
}; I did not want to make a PR here as i think this probably needs some testing and someone with a better overview, but rather use the examples as a mean to find the problem in combination with @gdutzhendong ´s PR |
Fixed in #471 |
在webComponent自定义元素a的shadow dom里面使用TimePicker组件,把这个自定义元素a放到另外一个webComponent自定元素b的shadow dom中,TimePicker组件无法选中时间,打开时间选择弹窗,第一次点击一个时间,弹窗不会关闭,这是正常的第二次点击时间,会自动关闭时间选择框。
排除后发现是依赖的这个项目的问题,useWinClick函数里面,win.addEventListener('mousedown', onTriggerClose, true)这里,在a元素里面的Popup组件打开的时候,点击Popup组件里面的某个元素,onTriggerClose函数执行参数的e.target是最外层的定义元素b,inPopupOrChild函数判断到这个b元素不是元素a或者元素a里面的内容,就把使用的Popup组件给关闭了。
复现链接https://codesandbox.io/p/sandbox/bold-tristan-pf2fhw?file=%2Findex.tsx%3A64%2C24
The text was updated successfully, but these errors were encountered: