@jbrowse/core
Version:
JBrowse 2 core libraries used by plugins
186 lines (185 loc) • 6.16 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.usePopupState = usePopupState;
exports.bindTrigger = bindTrigger;
exports.bindToggle = bindToggle;
exports.bindHover = bindHover;
exports.bindFocus = bindFocus;
exports.bindPopover = bindPopover;
exports.bindMenu = bindMenu;
exports.bindPopper = bindPopper;
const react_1 = require("react");
const React = __importStar(require("react"));
function usePopupState(arg) {
const { parentPopupState } = arg || {};
const popupId = React.useId();
const [isOpen, setIsOpen] = (0, react_1.useState)(false);
const [setAnchorElUsed, setSetAnchorElUsed] = (0, react_1.useState)(false);
const [anchorEl, _setAnchorEl] = (0, react_1.useState)();
const [hovered, setHovered] = (0, react_1.useState)(false);
const [focused, setFocused] = (0, react_1.useState)(false);
const [openEventType, setOpenEventType] = (0, react_1.useState)();
const [childHandle, setChildHandle] = (0, react_1.useState)();
const setAnchorEl = (0, react_1.useCallback)((el) => {
setSetAnchorElUsed(true);
_setAnchorEl(el);
}, []);
const toggle = (eventOrAnchorEl) => {
if (isOpen) {
close(eventOrAnchorEl);
}
else {
open(eventOrAnchorEl);
}
};
const open = (eventOrAnchorEl) => {
const event = eventOrAnchorEl instanceof Element ? undefined : eventOrAnchorEl;
const element = eventOrAnchorEl instanceof Element
? eventOrAnchorEl
: (eventOrAnchorEl === null || eventOrAnchorEl === void 0 ? void 0 : eventOrAnchorEl.currentTarget) instanceof Element
? eventOrAnchorEl.currentTarget
: undefined;
if ((event === null || event === void 0 ? void 0 : event.type) === 'touchstart') {
return;
}
if (parentPopupState) {
if (!parentPopupState.isOpen) {
return;
}
if (parentPopupState.childHandle) {
parentPopupState.childHandle.close();
}
parentPopupState.setChildHandle({
popupId,
close,
});
}
setIsOpen(true);
setHovered(prev => (event === null || event === void 0 ? void 0 : event.type) === 'mouseover' || prev);
setFocused(prev => (event === null || event === void 0 ? void 0 : event.type) === 'focus' || prev);
setOpenEventType(event === null || event === void 0 ? void 0 : event.type);
if (!setAnchorElUsed) {
if (event === null || event === void 0 ? void 0 : event.currentTarget) {
_setAnchorEl(event.currentTarget);
}
else if (element) {
_setAnchorEl(element);
}
}
};
const close = (eventOrAnchorEl) => {
const event = eventOrAnchorEl instanceof Element ? undefined : eventOrAnchorEl;
if ((event === null || event === void 0 ? void 0 : event.type) === 'touchstart') {
return;
}
childHandle === null || childHandle === void 0 ? void 0 : childHandle.close();
parentPopupState === null || parentPopupState === void 0 ? void 0 : parentPopupState.setChildHandle(undefined);
setIsOpen(false);
setHovered(false);
setFocused(false);
};
const setOpen = (nextOpen, eventOrAnchorEl) => {
if (nextOpen) {
open(eventOrAnchorEl);
}
else {
close(eventOrAnchorEl);
}
};
return {
isOpen,
anchorEl,
setAnchorElUsed,
setAnchorEl,
popupId,
open,
close,
toggle,
setOpen,
hovered,
focused,
_openEventType: openEventType,
childHandle,
setChildHandle,
};
}
function bindTrigger(popupState) {
return {
onClick: popupState.open,
};
}
function bindToggle(popupState) {
return {
onClick: popupState.toggle,
};
}
function bindHover(popupState) {
const { open } = popupState;
return {
onMouseOver: open,
};
}
function bindFocus(popupState) {
const { open } = popupState;
return {
onFocus: open,
};
}
function bindPopover({ isOpen, anchorEl, close, popupId }) {
return {
id: popupId,
anchorEl,
anchorReference: 'anchorEl',
open: isOpen,
onClose: close,
};
}
function bindMenu({ isOpen, anchorEl, close, popupId }) {
return {
id: popupId,
anchorEl,
anchorReference: 'anchorEl',
open: isOpen,
onClose: close,
};
}
function bindPopper({ isOpen, anchorEl, popupId }) {
return {
id: popupId,
anchorEl,
open: isOpen,
};
}