@sendbird/uikit-react
Version:
Sendbird UIKit for React: A feature-rich and customizable chat UI kit with messaging, channel management, and user authentication.
66 lines (62 loc) • 5.77 kB
JavaScript
import { c as __spreadArray } from './bundle-CzBQNSmE.js';
import React__default, { useContext, useState, useEffect } from 'react';
import { createPortal } from 'react-dom';
import { c as classnames, n as noop } from './bundle-DO80aKFO.js';
import { L as LocalizationContext } from './bundle-BiqO1upP.js';
import { u as useMediaQueryContext } from './bundle-C_EuInqG.js';
import IconButton from '../ui/IconButton.js';
import Button, { ButtonTypes } from '../ui/Button.js';
import Icon, { IconTypes, IconColors } from '../ui/Icon.js';
import { L as Label, a as LabelTypography, b as LabelColors } from './bundle-LBf6CphS.js';
import { u as uuidv4 } from './bundle-CgQaz0Nj.js';
import { u as useSendbird } from './bundle-DMcf5OHL.js';
// simple component to be used as modal root
var MODAL_ROOT = 'sendbird-modal-root';
var ModalRoot = function () { return (React__default.createElement("div", { id: MODAL_ROOT, className: MODAL_ROOT })); };
var ModalHeader = function (_a) {
var titleText = _a.titleText, onCloseClick = _a.onCloseClick;
return (React__default.createElement("div", { className: "sendbird-modal__header" },
React__default.createElement(Label, { type: LabelTypography.H_1, color: LabelColors.ONBACKGROUND_1 }, titleText),
React__default.createElement("div", { className: "sendbird-modal__close" },
React__default.createElement(IconButton, { width: "32px", height: "32px", onClick: onCloseClick },
React__default.createElement(Icon, { type: IconTypes.CLOSE, fillColor: IconColors.DEFAULT, width: "24px", height: "24px" })))));
};
var ModalBody = function (_a) {
var children = _a.children;
return (React__default.createElement("div", { className: "sendbird-modal__body" },
React__default.createElement(Label, { type: LabelTypography.SUBTITLE_1, color: LabelColors.ONBACKGROUND_2 }, children)));
};
var ModalFooter = function (_a) {
var submitText = _a.submitText, _b = _a.disabled, disabled = _b === void 0 ? false : _b, _c = _a.hideCancelButton, hideCancelButton = _c === void 0 ? false : _c, _d = _a.type, type = _d === void 0 ? ButtonTypes.DANGER : _d, onSubmit = _a.onSubmit, onCancel = _a.onCancel;
var stringSet = useContext(LocalizationContext).stringSet;
return (React__default.createElement("div", { className: "sendbird-modal__footer" },
!hideCancelButton && (React__default.createElement(Button, { type: ButtonTypes.SECONDARY, onClick: onCancel },
React__default.createElement(Label, { type: LabelTypography.BUTTON_1, color: LabelColors.ONBACKGROUND_1 }, stringSet.BUTTON__CANCEL))),
React__default.createElement(Button, { type: type, disabled: disabled, onClick: onSubmit }, submitText)));
};
function Modal(props) {
var _a;
var _b = props.children, children = _b === void 0 ? null : _b, _c = props.className, className = _c === void 0 ? '' : _c, _d = props.contentClassName, contentClassName = _d === void 0 ? '' : _d, _e = props.isCloseOnClickOutside, isCloseOnClickOutside = _e === void 0 ? false : _e, _f = props.isFullScreenOnMobile, isFullScreenOnMobile = _f === void 0 ? false : _f, titleText = props.titleText, submitText = props.submitText, _g = props.disabled, disabled = _g === void 0 ? false : _g, _h = props.hideFooter, hideFooter = _h === void 0 ? false : _h, _j = props.type, type = _j === void 0 ? ButtonTypes.DANGER : _j, renderHeader = props.renderHeader, _k = props.onSubmit, onSubmit = _k === void 0 ? noop : _k, onClose = props.onClose, onCancel = props.onCancel, customFooter = props.customFooter;
var handleClose = (_a = onClose !== null && onClose !== void 0 ? onClose : onCancel) !== null && _a !== void 0 ? _a : noop;
var eventHandlers = useSendbird().state.eventHandlers;
var id = useState(function () { return "sbu-modal-".concat(uuidv4()); })[0];
useEffect(function () {
var _a, _b;
return (_b = (_a = eventHandlers === null || eventHandlers === void 0 ? void 0 : eventHandlers.modal) === null || _a === void 0 ? void 0 : _a.onMounted) === null || _b === void 0 ? void 0 : _b.call(_a, { close: handleClose, id: id });
}, []);
var isMobile = useMediaQueryContext().isMobile;
return createPortal(React__default.createElement("div", { className: classnames('sendbird-modal', className, isFullScreenOnMobile && isMobile && 'sendbird-modal--full-mobile') },
React__default.createElement("div", { className: classnames.apply(void 0, __spreadArray(['sendbird-modal__content'], (Array.isArray(contentClassName) ? contentClassName : [contentClassName]), false)) },
(renderHeader === null || renderHeader === void 0 ? void 0 : renderHeader()) || React__default.createElement(ModalHeader, { titleText: titleText !== null && titleText !== void 0 ? titleText : '', onCloseClick: handleClose }),
React__default.createElement(ModalBody, null, children),
!hideFooter
&& (customFooter !== null && customFooter !== void 0 ? customFooter : (React__default.createElement(ModalFooter, { disabled: disabled, onCancel: handleClose, onSubmit: onSubmit, submitText: submitText !== null && submitText !== void 0 ? submitText : '', type: type })))),
React__default.createElement("div", { className: classnames('sendbird-modal__backdrop', isCloseOnClickOutside && 'sendbird-modal__backdrop--clickoutside'), onClick: function (e) {
e === null || e === void 0 ? void 0 : e.stopPropagation();
if (isCloseOnClickOutside) {
handleClose();
}
} })), document.getElementById(MODAL_ROOT));
}
export { Modal as M, MODAL_ROOT as a, ModalRoot as b, ModalFooter as c, ModalHeader as d, ModalBody as e };
//# sourceMappingURL=bundle-yCvBYPzY.js.map