payload
Version:
Node, React and MongoDB Headless CMS and Application Framework
111 lines (110 loc) • 12.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "usePopupWindow", {
enumerable: true,
get: function() {
return usePopupWindow;
}
});
const _react = require("react");
const _Config = require("../../utilities/Config");
const usePopupWindow = (props)=>{
const { eventType, onMessage, url } = props;
const isReceivingMessage = (0, _react.useRef)(false);
const [isOpen, setIsOpen] = (0, _react.useState)(false);
const { serverURL } = (0, _Config.useConfig)();
const popupRef = (0, _react.useRef)(null);
// Optionally broadcast messages back out to the parent component
(0, _react.useEffect)(()=>{
const receiveMessage = async (event)=>{
if (event.origin !== window.location.origin || event.origin !== url || event.origin !== serverURL) {
// console.warn(`Message received by ${event.origin}; IGNORED.`) // eslint-disable-line no-console
return;
}
if (typeof onMessage === 'function' && event.data?.type === eventType && !isReceivingMessage.current) {
isReceivingMessage.current = true;
await onMessage(event.data?.searchParams);
isReceivingMessage.current = false;
}
};
if (isOpen && popupRef.current) {
window.addEventListener('message', receiveMessage, false);
}
return ()=>{
window.removeEventListener('message', receiveMessage);
};
}, [
onMessage,
eventType,
url,
serverURL,
isOpen
]);
// Customize the size, position, and style of the popup window
const openPopupWindow = (0, _react.useCallback)((e)=>{
if (e) {
e.preventDefault();
}
const features = {
height: 700,
left: 'auto',
menubar: 'no',
popup: 'yes',
toolbar: 'no',
top: 'auto',
width: 800
};
const popupOptions = Object.entries(features).reduce((str, [key, value])=>{
let strCopy = str;
if (value === 'auto') {
if (key === 'top') {
const v = Math.round(window.innerHeight / 2 - features.height / 2);
strCopy += `top=${v},`;
} else if (key === 'left') {
const v = Math.round(window.innerWidth / 2 - features.width / 2);
strCopy += `left=${v},`;
}
return strCopy;
}
strCopy += `${key}=${value},`;
return strCopy;
}, '').slice(0, -1) // remove last ',' (comma)
;
const newWindow = window.open(url, '_blank', popupOptions);
popupRef.current = newWindow;
setIsOpen(true);
}, [
url
]);
// this is the most stable and widely supported way to check if a popup window is no longer open
// we poll its ref every x ms and use the popup window's `closed` property
(0, _react.useEffect)(()=>{
let timer;
if (isOpen) {
timer = setInterval(function() {
if (popupRef.current.closed) {
clearInterval(timer);
setIsOpen(false);
}
}, 1000);
} else {
clearInterval(timer);
}
return ()=>{
if (timer) {
clearInterval(timer);
}
};
}, [
isOpen,
popupRef
]);
return {
isPopupOpen: isOpen,
openPopupWindow,
popupRef
};
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hZG1pbi9jb21wb25lbnRzL3ZpZXdzL0xpdmVQcmV2aWV3L3VzZVBvcHVwV2luZG93LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL0NvbmZpZydcblxuZXhwb3J0IGludGVyZmFjZSBQb3B1cE1lc3NhZ2Uge1xuICBzZWFyY2hQYXJhbXM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgICBjb2RlOiBzdHJpbmdcbiAgICBpbnN0YWxsYXRpb25faWQ6IHN0cmluZ1xuICAgIHN0YXRlOiBzdHJpbmdcbiAgfVxuICB0eXBlOiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IHVzZVBvcHVwV2luZG93ID0gKHByb3BzOiB7XG4gIGV2ZW50VHlwZT86IHN0cmluZ1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBvbk1lc3NhZ2U/OiAoc2VhcmNoUGFyYW1zOiBQb3B1cE1lc3NhZ2VbJ3NlYXJjaFBhcmFtcyddKSA9PiBQcm9taXNlPHZvaWQ+XG4gIHVybDogc3RyaW5nXG59KToge1xuICBpc1BvcHVwT3BlbjogYm9vbGVhblxuICBvcGVuUG9wdXBXaW5kb3c6ICgpID0+IHZvaWRcbiAgcG9wdXBSZWY/OiBSZWFjdC5NdXRhYmxlUmVmT2JqZWN0PFdpbmRvdyB8IG51bGw+XG59ID0+IHtcbiAgY29uc3QgeyBldmVudFR5cGUsIG9uTWVzc2FnZSwgdXJsIH0gPSBwcm9wc1xuICBjb25zdCBpc1JlY2VpdmluZ01lc3NhZ2UgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgeyBzZXJ2ZXJVUkwgfSA9IHVzZUNvbmZpZygpXG4gIGNvbnN0IHBvcHVwUmVmID0gdXNlUmVmPFdpbmRvdyB8IG51bGw+KG51bGwpXG5cbiAgLy8gT3B0aW9uYWxseSBicm9hZGNhc3QgbWVzc2FnZXMgYmFjayBvdXQgdG8gdGhlIHBhcmVudCBjb21wb25lbnRcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCByZWNlaXZlTWVzc2FnZSA9IGFzeW5jIChldmVudDogTWVzc2FnZUV2ZW50KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGV2ZW50Lm9yaWdpbiAhPT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiB8fFxuICAgICAgICBldmVudC5vcmlnaW4gIT09IHVybCB8fFxuICAgICAgICBldmVudC5vcmlnaW4gIT09IHNlcnZlclVSTFxuICAgICAgKSB7XG4gICAgICAgIC8vIGNvbnNvbGUud2FybihgTWVzc2FnZSByZWNlaXZlZCBieSAke2V2ZW50Lm9yaWdpbn07IElHTk9SRUQuYCkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBvbk1lc3NhZ2UgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgZXZlbnQuZGF0YT8udHlwZSA9PT0gZXZlbnRUeXBlICYmXG4gICAgICAgICFpc1JlY2VpdmluZ01lc3NhZ2UuY3VycmVudFxuICAgICAgKSB7XG4gICAgICAgIGlzUmVjZWl2aW5nTWVzc2FnZS5jdXJyZW50ID0gdHJ1ZVxuICAgICAgICBhd2FpdCBvbk1lc3NhZ2UoZXZlbnQuZGF0YT8uc2VhcmNoUGFyYW1zKVxuICAgICAgICBpc1JlY2VpdmluZ01lc3NhZ2UuY3VycmVudCA9IGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzT3BlbiAmJiBwb3B1cFJlZi5jdXJyZW50KSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHJlY2VpdmVNZXNzYWdlLCBmYWxzZSlcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCByZWNlaXZlTWVzc2FnZSlcbiAgICB9XG4gIH0sIFtvbk1lc3NhZ2UsIGV2ZW50VHlwZSwgdXJsLCBzZXJ2ZXJVUkwsIGlzT3Blbl0pXG5cbiAgLy8gQ3VzdG9taXplIHRoZSBzaXplLCBwb3NpdGlvbiwgYW5kIHN0eWxlIG9mIHRoZSBwb3B1cCB3aW5kb3dcbiAgY29uc3Qgb3BlblBvcHVwV2luZG93ID0gdXNlQ2FsbGJhY2soXG4gICAgKGU/OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBpZiAoZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmVhdHVyZXMgPSB7XG4gICAgICAgIGhlaWdodDogNzAwLFxuICAgICAgICBsZWZ0OiAnYXV0bycsXG4gICAgICAgIG1lbnViYXI6ICdubycsXG4gICAgICAgIHBvcHVwOiAneWVzJyxcbiAgICAgICAgdG9vbGJhcjogJ25vJyxcbiAgICAgICAgdG9wOiAnYXV0bycsXG4gICAgICAgIHdpZHRoOiA4MDAsXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBvcHVwT3B0aW9ucyA9IE9iamVjdC5lbnRyaWVzKGZlYXR1cmVzKVxuICAgICAgICAucmVkdWNlKChzdHIsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIGxldCBzdHJDb3B5ID0gc3RyXG4gICAgICAgICAgaWYgKHZhbHVlID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICd0b3AnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHYgPSBNYXRoLnJvdW5kKHdpbmRvdy5pbm5lckhlaWdodCAvIDIgLSBmZWF0dXJlcy5oZWlnaHQgLyAyKVxuICAgICAgICAgICAgICBzdHJDb3B5ICs9IGB0b3A9JHt2fSxgXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHYgPSBNYXRoLnJvdW5kKHdpbmRvdy5pbm5lcldpZHRoIC8gMiAtIGZlYXR1cmVzLndpZHRoIC8gMilcbiAgICAgICAgICAgICAgc3RyQ29weSArPSBgbGVmdD0ke3Z9LGBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdHJDb3B5XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3RyQ29weSArPSBgJHtrZXl9PSR7dmFsdWV9LGBcbiAgICAgICAgICByZXR1cm4gc3RyQ29weVxuICAgICAgICB9LCAnJylcbiAgICAgICAgLnNsaWNlKDAsIC0xKSAvLyByZW1vdmUgbGFzdCAnLCcgKGNvbW1hKVxuXG4gICAgICBjb25zdCBuZXdXaW5kb3cgPSB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnLCBwb3B1cE9wdGlvbnMpXG5cbiAgICAgIHBvcHVwUmVmLmN1cnJlbnQgPSBuZXdXaW5kb3dcblxuICAgICAgc2V0SXNPcGVuKHRydWUpXG4gICAgfSxcbiAgICBbdXJsXSxcbiAgKVxuXG4gIC8vIHRoaXMgaXMgdGhlIG1vc3Qgc3RhYmxlIGFuZCB3aWRlbHkgc3VwcG9ydGVkIHdheSB0byBjaGVjayBpZiBhIHBvcHVwIHdpbmRvdyBpcyBubyBsb25nZXIgb3BlblxuICAvLyB3ZSBwb2xsIGl0cyByZWYgZXZlcnkgeCBtcyBhbmQgdXNlIHRoZSBwb3B1cCB3aW5kb3cncyBgY2xvc2VkYCBwcm9wZXJ0eVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCB0aW1lcjogTm9kZUpTLlRpbWVvdXRcblxuICAgIGlmIChpc09wZW4pIHtcbiAgICAgIHRpbWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAocG9wdXBSZWYuY3VycmVudC5jbG9zZWQpIHtcbiAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVyKVxuICAgICAgICAgIHNldElzT3BlbihmYWxzZSlcbiAgICAgICAgfVxuICAgICAgfSwgMTAwMClcbiAgICB9IGVsc2Uge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcilcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHRpbWVyKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpXG4gICAgICB9XG4gICAgfVxuICB9LCBbaXNPcGVuLCBwb3B1cFJlZl0pXG5cbiAgcmV0dXJuIHtcbiAgICBpc1BvcHVwT3BlbjogaXNPcGVuLFxuICAgIG9wZW5Qb3B1cFdpbmRvdyxcbiAgICBwb3B1cFJlZixcbiAgfVxufVxuIl0sIm5hbWVzIjpbInVzZVBvcHVwV2luZG93IiwicHJvcHMiLCJldmVudFR5cGUiLCJvbk1lc3NhZ2UiLCJ1cmwiLCJpc1JlY2VpdmluZ01lc3NhZ2UiLCJ1c2VSZWYiLCJpc09wZW4iLCJzZXRJc09wZW4iLCJ1c2VTdGF0ZSIsInNlcnZlclVSTCIsInVzZUNvbmZpZyIsInBvcHVwUmVmIiwidXNlRWZmZWN0IiwicmVjZWl2ZU1lc3NhZ2UiLCJldmVudCIsIm9yaWdpbiIsIndpbmRvdyIsImxvY2F0aW9uIiwiZGF0YSIsInR5cGUiLCJjdXJyZW50Iiwic2VhcmNoUGFyYW1zIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJvcGVuUG9wdXBXaW5kb3ciLCJ1c2VDYWxsYmFjayIsImUiLCJwcmV2ZW50RGVmYXVsdCIsImZlYXR1cmVzIiwiaGVpZ2h0IiwibGVmdCIsIm1lbnViYXIiLCJwb3B1cCIsInRvb2xiYXIiLCJ0b3AiLCJ3aWR0aCIsInBvcHVwT3B0aW9ucyIsIk9iamVjdCIsImVudHJpZXMiLCJyZWR1Y2UiLCJzdHIiLCJrZXkiLCJ2YWx1ZSIsInN0ckNvcHkiLCJ2IiwiTWF0aCIsInJvdW5kIiwiaW5uZXJIZWlnaHQiLCJpbm5lcldpZHRoIiwic2xpY2UiLCJuZXdXaW5kb3ciLCJvcGVuIiwidGltZXIiLCJzZXRJbnRlcnZhbCIsImNsb3NlZCIsImNsZWFySW50ZXJ2YWwiLCJpc1BvcHVwT3BlbiJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFjYUE7OztlQUFBQTs7O3VCQWQ0Qzt3QkFFL0I7QUFZbkIsTUFBTUEsaUJBQWlCLENBQUNDO0lBVTdCLE1BQU0sRUFBRUMsU0FBUyxFQUFFQyxTQUFTLEVBQUVDLEdBQUcsRUFBRSxHQUFHSDtJQUN0QyxNQUFNSSxxQkFBcUJDLElBQUFBLGFBQU0sRUFBQztJQUNsQyxNQUFNLENBQUNDLFFBQVFDLFVBQVUsR0FBR0MsSUFBQUEsZUFBUSxFQUFDO0lBQ3JDLE1BQU0sRUFBRUMsU0FBUyxFQUFFLEdBQUdDLElBQUFBLGlCQUFTO0lBQy9CLE1BQU1DLFdBQVdOLElBQUFBLGFBQU0sRUFBZ0I7SUFFdkMsaUVBQWlFO0lBQ2pFTyxJQUFBQSxnQkFBUyxFQUFDO1FBQ1IsTUFBTUMsaUJBQWlCLE9BQU9DO1lBQzVCLElBQ0VBLE1BQU1DLE1BQU0sS0FBS0MsT0FBT0MsUUFBUSxDQUFDRixNQUFNLElBQ3ZDRCxNQUFNQyxNQUFNLEtBQUtaLE9BQ2pCVyxNQUFNQyxNQUFNLEtBQUtOLFdBQ2pCO2dCQUNBLGtHQUFrRztnQkFDbEc7WUFDRjtZQUVBLElBQ0UsT0FBT1AsY0FBYyxjQUNyQlksTUFBTUksSUFBSSxFQUFFQyxTQUFTbEIsYUFDckIsQ0FBQ0csbUJBQW1CZ0IsT0FBTyxFQUMzQjtnQkFDQWhCLG1CQUFtQmdCLE9BQU8sR0FBRztnQkFDN0IsTUFBTWxCLFVBQVVZLE1BQU1JLElBQUksRUFBRUc7Z0JBQzVCakIsbUJBQW1CZ0IsT0FBTyxHQUFHO1lBQy9CO1FBQ0Y7UUFFQSxJQUFJZCxVQUFVSyxTQUFTUyxPQUFPLEVBQUU7WUFDOUJKLE9BQU9NLGdCQUFnQixDQUFDLFdBQVdULGdCQUFnQjtRQUNyRDtRQUVBLE9BQU87WUFDTEcsT0FBT08sbUJBQW1CLENBQUMsV0FBV1Y7UUFDeEM7SUFDRixHQUFHO1FBQUNYO1FBQVdEO1FBQVdFO1FBQUtNO1FBQVdIO0tBQU87SUFFakQsOERBQThEO0lBQzlELE1BQU1rQixrQkFBa0JDLElBQUFBLGtCQUFXLEVBQ2pDLENBQUNDO1FBQ0MsSUFBSUEsR0FBRztZQUNMQSxFQUFFQyxjQUFjO1FBQ2xCO1FBRUEsTUFBTUMsV0FBVztZQUNmQyxRQUFRO1lBQ1JDLE1BQU07WUFDTkMsU0FBUztZQUNUQyxPQUFPO1lBQ1BDLFNBQVM7WUFDVEMsS0FBSztZQUNMQyxPQUFPO1FBQ1Q7UUFFQSxNQUFNQyxlQUFlQyxPQUFPQyxPQUFPLENBQUNWLFVBQ2pDVyxNQUFNLENBQUMsQ0FBQ0MsS0FBSyxDQUFDQyxLQUFLQyxNQUFNO1lBQ3hCLElBQUlDLFVBQVVIO1lBQ2QsSUFBSUUsVUFBVSxRQUFRO2dCQUNwQixJQUFJRCxRQUFRLE9BQU87b0JBQ2pCLE1BQU1HLElBQUlDLEtBQUtDLEtBQUssQ0FBQzlCLE9BQU8rQixXQUFXLEdBQUcsSUFBSW5CLFNBQVNDLE1BQU0sR0FBRztvQkFDaEVjLFdBQVcsQ0FBQyxJQUFJLEVBQUVDLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QixPQUFPLElBQUlILFFBQVEsUUFBUTtvQkFDekIsTUFBTUcsSUFBSUMsS0FBS0MsS0FBSyxDQUFDOUIsT0FBT2dDLFVBQVUsR0FBRyxJQUFJcEIsU0FBU08sS0FBSyxHQUFHO29CQUM5RFEsV0FBVyxDQUFDLEtBQUssRUFBRUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3pCO2dCQUNBLE9BQU9EO1lBQ1Q7WUFFQUEsV0FBVyxDQUFDLEVBQUVGLElBQUksQ0FBQyxFQUFFQyxNQUFNLENBQUMsQ0FBQztZQUM3QixPQUFPQztRQUNULEdBQUcsSUFDRk0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLDBCQUEwQjs7UUFFMUMsTUFBTUMsWUFBWWxDLE9BQU9tQyxJQUFJLENBQUNoRCxLQUFLLFVBQVVpQztRQUU3Q3pCLFNBQVNTLE9BQU8sR0FBRzhCO1FBRW5CM0MsVUFBVTtJQUNaLEdBQ0E7UUFBQ0o7S0FBSTtJQUdQLGdHQUFnRztJQUNoRywwRUFBMEU7SUFDMUVTLElBQUFBLGdCQUFTLEVBQUM7UUFDUixJQUFJd0M7UUFFSixJQUFJOUMsUUFBUTtZQUNWOEMsUUFBUUMsWUFBWTtnQkFDbEIsSUFBSTFDLFNBQVNTLE9BQU8sQ0FBQ2tDLE1BQU0sRUFBRTtvQkFDM0JDLGNBQWNIO29CQUNkN0MsVUFBVTtnQkFDWjtZQUNGLEdBQUc7UUFDTCxPQUFPO1lBQ0xnRCxjQUFjSDtRQUNoQjtRQUVBLE9BQU87WUFDTCxJQUFJQSxPQUFPO2dCQUNURyxjQUFjSDtZQUNoQjtRQUNGO0lBQ0YsR0FBRztRQUFDOUM7UUFBUUs7S0FBUztJQUVyQixPQUFPO1FBQ0w2QyxhQUFhbEQ7UUFDYmtCO1FBQ0FiO0lBQ0Y7QUFDRiJ9