@smart-react-components/ui
Version:
SRC UI includes React and Styled components.
64 lines (63 loc) • 4.98 kB
JavaScript
"use strict";
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 (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.TriggerInteraction = exports.Position = void 0;
const CSSTransition_1 = __importDefault(require("@smart-react-components/transition/CSSTransition"));
const react_1 = __importDefault(require("react"));
const react_dom_1 = require("react-dom");
const styled_components_1 = require("styled-components");
const PopoverArrow_1 = __importDefault(require("../components/Popover/PopoverArrow"));
const useFixedBoxMethods_1 = __importDefault(require("../hooks/useFixedBoxMethods"));
const types_1 = require("../types");
const dom_1 = require("../util/dom");
const popover_1 = require("../util/popover");
const PopoverElement_1 = __importStar(require("../components/Popover/PopoverElement"));
var types_2 = require("../types");
Object.defineProperty(exports, "Position", { enumerable: true, get: function () { return types_2.Position; } });
Object.defineProperty(exports, "TriggerInteraction", { enumerable: true, get: function () { return types_2.TriggerInteraction; } });
const Popover = ({ afterHide, afterShow, beforeHide, beforeShow, children, hasHideAnimation = true, hasShowAnimation = true, isDismissible = true, isSoft, palette = 'dynamic', position = types_1.Position.RIGHT, setStatus, size = 'medium', sizeSm, sizeMd, sizeLg, sizeXl, space = 0, status, transitionClassName, transitionDuration, triggerInteraction = types_1.TriggerInteraction.CLICK, }) => {
var _a, _b;
const theme = react_1.default.useContext(styled_components_1.ThemeContext);
const triggerEl = react_1.default.useRef(null);
const boxEl = react_1.default.useRef(null);
const headerEl = react_1.default.useRef(null);
const arrowEl = react_1.default.useRef(null);
const getTriggerEl = () => { var _a; return ((_a = children[0].ref) !== null && _a !== void 0 ? _a : triggerEl).current; };
const getTransitionDuration = () => transitionDuration !== null && transitionDuration !== void 0 ? transitionDuration : theme.$.transition.popoverDuration;
const handlePosition = () => (0, popover_1.calculatePosition)(triggerEl.current, boxEl.current, headerEl.current, arrowEl.current, position, space);
const { getStatus, handleBeforeShow, } = (0, useFixedBoxMethods_1.default)({ beforeShow, boxEl, getTriggerEl, handlePosition, isDismissible, key: 'popover', setStatus, status, triggerInteraction });
const content = (react_1.default.createElement(CSSTransition_1.default, { afterHide: afterHide, afterShow: afterShow, beforeHide: beforeHide, beforeShow: handleBeforeShow, className: transitionClassName !== null && transitionClassName !== void 0 ? transitionClassName : 'src-popover', duration: getTransitionDuration(), hasHideAnimation: hasHideAnimation, hasShowAnimation: hasShowAnimation, status: getStatus() },
react_1.default.createElement(PopoverElement_1.default, { duration: getTransitionDuration(), hasTransition: !transitionClassName, isSoft: isSoft, palette: palette, popoverSize: size, popoverSizeSm: sizeSm, popoverSizeMd: sizeMd, popoverSizeLg: sizeLg, popoverSizeXl: sizeXl, ref: boxEl },
children.length === 3 && react_1.default.createElement(PopoverElement_1.PopoverHeader, { ref: headerEl }, children[1]),
react_1.default.createElement(PopoverElement_1.PopoverContent, null, (_a = children[2]) !== null && _a !== void 0 ? _a : children[1]),
react_1.default.createElement(PopoverArrow_1.default, { ref: arrowEl }))));
return (react_1.default.createElement(react_1.default.Fragment, null,
react_1.default.cloneElement(children[0], { ref: (_b = children[0].ref) !== null && _b !== void 0 ? _b : triggerEl }),
(0, dom_1.canBeRenderedInPortal)() ? (0, react_dom_1.createPortal)(content, document.body) : content));
};
exports.default = Popover;