UNPKG

@atlaskit/editor-plugin-quick-insert

Version:

Quick insert plugin for @atlaskit/editor-core

158 lines (155 loc) 6.23 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.MODAL_WRAPPER_PADDING = void 0; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = require("react"); var _react2 = require("@emotion/react"); var _reactIntl = require("react-intl"); var _button = _interopRequireDefault(require("@atlaskit/button/button")); var _elementBrowser = require("@atlaskit/editor-common/element-browser"); var _quickInsert = require("@atlaskit/editor-common/quick-insert"); var _questionCircle = _interopRequireDefault(require("@atlaskit/icon/core/question-circle")); var _closeButton = require("@atlaskit/modal-dialog/close-button"); var _hooks = require("@atlaskit/modal-dialog/hooks"); var _modalDialog = _interopRequireDefault(require("@atlaskit/modal-dialog/modal-dialog")); var _modalTransition = _interopRequireDefault(require("@atlaskit/modal-dialog/modal-transition")); var _categories = require("./categories"); /** * @jsxRuntime classic * @jsx jsx */ // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766 var MODAL_WRAPPER_PADDING = exports.MODAL_WRAPPER_PADDING = 16; var actionsStyles = (0, _react2.css)({ display: 'inline-flex', margin: "0 ".concat("var(--ds-space-negative-050, -4px)") }); var actionItemStyles = (0, _react2.css)({ flex: '1 0 auto', margin: "0 ".concat("var(--ds-space-050, 4px)") }); var wrapperStyles = (0, _react2.css)({ display: 'flex', flex: '1 1 auto', boxSizing: 'border-box', padding: "var(--ds-space-200, 16px)".concat(" ", "var(--ds-space-200, 16px)", " 0 10px"), overflow: 'hidden', backgroundColor: "var(--ds-surface-overlay, #FFFFFF)", borderRadius: "var(--ds-radius-small, 3px)" }); var modalFooterStyles = (0, _react2.css)({ display: 'flex', padding: "var(--ds-space-200, 16px)", position: 'relative', alignItems: 'center', justifyContent: 'space-between' }); var modalCloseButtonStyles = (0, _react2.css)({ display: 'flex', justifyContent: 'flex-end', paddingBlockStart: "var(--ds-space-200, 16px)", paddingInline: "var(--ds-space-200, 16px)" }); var ModalElementBrowser = function ModalElementBrowser(props) { var _useState = (0, _react.useState)(), _useState2 = (0, _slicedToArray2.default)(_useState, 2), selectedItem = _useState2[0], setSelectedItem = _useState2[1]; var helpUrl = props.helpUrl, intl = props.intl, onInsertItemFn = props.onInsertItem; var onSelectItem = (0, _react.useCallback)(function (item) { setSelectedItem(item); }, [setSelectedItem]); var onInsertItem = (0, _react.useCallback)(function (item) { onInsertItemFn(item); }, [onInsertItemFn]); var RenderFooter = (0, _react.useCallback)(function () { return (0, _react2.jsx)(Footer // Ignored via go/ees005 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @atlassian/perf-linting/no-unstable-inline-props -- Ignored via go/ees017 (to be fixed) , { onInsert: function onInsert() { return onInsertItem(selectedItem); }, beforeElement: helpUrl ? HelpLink(helpUrl, intl.formatMessage(_quickInsert.messages.help)) : undefined }); }, [onInsertItem, selectedItem, helpUrl, intl]); var RenderBody = (0, _react.useCallback)(function () { return (0, _react2.jsx)("div", { css: wrapperStyles }, (0, _react2.jsx)(_elementBrowser.ElementBrowser, { categories: (0, _categories.getCategories)(props.intl), defaultCategory: props.defaultCategory, getItems: props.getItems, showSearch: true, showCategories: true, mode: "full", onSelectItem: onSelectItem, onInsertItem: onInsertItem, emptyStateHandler: props.emptyStateHandler, autoFocusSearch: false })); }, [props.intl, props.defaultCategory, props.getItems, onSelectItem, onInsertItem, props.emptyStateHandler]); var label = intl.formatMessage(_quickInsert.messages.browse); return (0, _react2.jsx)("div", { "data-editor-popup": true }, (0, _react2.jsx)(_modalTransition.default, null, props.isOpen && // eslint-disable-next-line @atlaskit/design-system/no-modal-label (0, _react2.jsx)(_modalDialog.default, { label: label, testId: "element-browser-modal-dialog", stackIndex: 0, key: "element-browser-modal", onClose: props.onClose, onCloseComplete: props.onCloseComplete, height: "664px", width: "x-large", shouldReturnFocus: props.shouldReturnFocus }, (0, _react2.jsx)("div", { css: modalCloseButtonStyles }, (0, _react2.jsx)(_closeButton.CloseButton, { onClick: props.onClose })), (0, _react2.jsx)(RenderBody, null), (0, _react2.jsx)(RenderFooter, null)))); }; ModalElementBrowser.displayName = 'ModalElementBrowser'; var Footer = function Footer(_ref) { var onInsert = _ref.onInsert, beforeElement = _ref.beforeElement; var intl = (0, _reactIntl.useIntl)(); var _useModal = (0, _hooks.useModal)(), onClose = _useModal.onClose; return (0, _react2.jsx)("div", { css: modalFooterStyles }, beforeElement ? beforeElement : (0, _react2.jsx)("span", null), (0, _react2.jsx)("div", { css: actionsStyles }, (0, _react2.jsx)("div", { css: actionItemStyles }, (0, _react2.jsx)(_button.default, { appearance: "primary", onClick: onInsert, testId: "ModalElementBrowser__insert-button" }, intl.formatMessage(_quickInsert.messages.insert))), (0, _react2.jsx)("div", { css: actionItemStyles }, (0, _react2.jsx)(_button.default, { appearance: "subtle", onClick: onClose, testId: "ModalElementBrowser__close-button" }, intl.formatMessage(_quickInsert.messages.close))))); }; var HelpLink = function HelpLink(url, helpText) { return (0, _react2.jsx)(_button.default, { iconBefore: (0, _react2.jsx)(_questionCircle.default, { label: "" }), appearance: "subtle-link", href: url, target: "_blank", testId: "ModalElementBrowser__help-button" }, helpText); }; var _default_1 = (0, _reactIntl.injectIntl)(ModalElementBrowser); var _default = exports.default = _default_1;