useProxyImperativeHandle.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = useProxyImperativeHandle;
  6. var _react = require("react");
  7. // Proxy the dom ref with `{ nativeElement, otherFn }` type
  8. // ref: https://github.com/ant-design/ant-design/discussions/45242
  9. function fillProxy(element, handler) {
  10. element._antProxy = element._antProxy || {};
  11. Object.keys(handler).forEach(key => {
  12. if (!(key in element._antProxy)) {
  13. const ori = element[key];
  14. element._antProxy[key] = ori;
  15. element[key] = handler[key];
  16. }
  17. });
  18. return element;
  19. }
  20. function useProxyImperativeHandle(ref, init) {
  21. return (0, _react.useImperativeHandle)(ref, () => {
  22. const refObj = init();
  23. const {
  24. nativeElement
  25. } = refObj;
  26. if (typeof Proxy !== 'undefined') {
  27. return new Proxy(nativeElement, {
  28. get(obj, prop) {
  29. if (refObj[prop]) {
  30. return refObj[prop];
  31. }
  32. return Reflect.get(obj, prop);
  33. }
  34. });
  35. }
  36. // Fallback of IE
  37. return fillProxy(nativeElement, refObj);
  38. });
  39. }