42 lines
1.1 KiB
JavaScript
42 lines
1.1 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.useProxyImperativeHandle = void 0;
|
|
var _react = require("react");
|
|
// Proxy the dom ref with `{ nativeElement, otherFn }` type
|
|
// ref: https://github.com/ant-design/ant-design/discussions/45242
|
|
|
|
function fillProxy(element, handler) {
|
|
element._antProxy = element._antProxy || {};
|
|
Object.keys(handler).forEach(key => {
|
|
if (!(key in element._antProxy)) {
|
|
const ori = element[key];
|
|
element._antProxy[key] = ori;
|
|
element[key] = handler[key];
|
|
}
|
|
});
|
|
return element;
|
|
}
|
|
const useProxyImperativeHandle = (ref, init) => {
|
|
return (0, _react.useImperativeHandle)(ref, () => {
|
|
const refObj = init();
|
|
const {
|
|
nativeElement
|
|
} = refObj;
|
|
if (typeof Proxy !== 'undefined') {
|
|
return new Proxy(nativeElement, {
|
|
get(obj, prop) {
|
|
if (refObj[prop]) {
|
|
return refObj[prop];
|
|
}
|
|
return Reflect.get(obj, prop);
|
|
}
|
|
});
|
|
}
|
|
// Fallback of IE
|
|
return fillProxy(nativeElement, refObj);
|
|
});
|
|
};
|
|
exports.useProxyImperativeHandle = useProxyImperativeHandle; |