UNPKG

@atlaskit/editor-plugin-find-replace

Version:

find replace plugin for @atlaskit/editor-core

203 lines (201 loc) 9.08 kB
import _extends from "@babel/runtime/helpers/extends"; import _classCallCheck from "@babel/runtime/helpers/classCallCheck"; import _createClass from "@babel/runtime/helpers/createClass"; import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn"; import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf"; import _inherits from "@babel/runtime/helpers/inherits"; import _defineProperty from "@babel/runtime/helpers/defineProperty"; import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral"; var _templateObject; function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } /* eslint-disable @atlaskit/design-system/consistent-css-prop-usage */ /** * @jsxRuntime classic * @jsx jsx */ import React from 'react'; // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766 import { css, jsx } from '@emotion/react'; import { injectIntl } from 'react-intl'; import { TRIGGER_METHOD } from '@atlaskit/editor-common/analytics'; import { findKeymapByDescription, getAriaKeyshortcuts, tooltip, ToolTipContent } from '@atlaskit/editor-common/keymaps'; import { findReplaceMessages as messages } from '@atlaskit/editor-common/messages'; import { ArrowKeyNavigationType, Dropdown, TOOLBAR_BUTTON, ToolbarButton } from '@atlaskit/editor-common/ui-menu'; import { akEditorFloatingPanelZIndex, akEditorMobileMaxWidth } from '@atlaskit/editor-shared-styles'; import SearchIcon from '@atlaskit/icon/core/search'; import { fg } from '@atlaskit/platform-feature-flags'; import FindReplace from './FindReplace'; // eslint-disable-next-line @atlaskit/design-system/no-css-tagged-template-expression -- needs manual remediation var toolbarButtonWrapper = css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n\tdisplay: flex;\n\tflex: 1 1 auto;\n\tflex-grow: 0;\n\tjustify-content: flex-end;\n\talign-items: center;\n\tpadding: 0 ", ";\n\t@media (max-width: ", "px) {\n\t\tjustify-content: center;\n\t\tpadding: 0;\n\t}\n"])), "var(--ds-space-100, 8px)", akEditorMobileMaxWidth); var TriggerButtonWrapper = function TriggerButtonWrapper(_ref) { var isButtonHidden = _ref.isButtonHidden, children = _ref.children; return jsx("div", { css: { display: isButtonHidden ? 'none' : 'block' } }, children); }; var toolbarButtonWrapperFullWidth = css({ flexGrow: 1 }); var toolbarButtonWrapperHidden = css({ flexGrow: 0, padding: 0 }); var wrapper = css({ display: 'flex', flexDirection: 'column' }); var dropdownWidthNewDesign = 382; // eslint-disable-next-line @repo/internal/react/no-class-components var FindReplaceToolbarButton = /*#__PURE__*/function (_React$PureComponent) { function FindReplaceToolbarButton() { var _this; _classCallCheck(this, FindReplaceToolbarButton); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _callSuper(this, FindReplaceToolbarButton, [].concat(args)); _defineProperty(_this, "state", { openedByClick: false }); _defineProperty(_this, "toggleOpen", function () { if (_this.props.isActive) { _this.props.onCancel({ triggerMethod: TRIGGER_METHOD.TOOLBAR }); } else { _this.setState({ openedByClick: true }); _this.props.onActivate(); } }); _defineProperty(_this, "focusToolbarButton", function () { if (_this.state.openedByClick && _this.toolbarButtonRef.current) { _this.toolbarButtonRef.current.focus(); } _this.setState({ openedByClick: false }); }); _defineProperty(_this, "toolbarButtonRef", /*#__PURE__*/React.createRef()); return _this; } _inherits(FindReplaceToolbarButton, _React$PureComponent); return _createClass(FindReplaceToolbarButton, [{ key: "render", value: function render() { var _this2 = this; var _this$props = this.props, popupsMountPoint = _this$props.popupsMountPoint, popupsBoundariesElement = _this$props.popupsBoundariesElement, popupsScrollableElement = _this$props.popupsScrollableElement, isReducedSpacing = _this$props.isReducedSpacing, findText = _this$props.findText, replaceText = _this$props.replaceText, isActive = _this$props.isActive, index = _this$props.index, numMatches = _this$props.numMatches, numReplaceable = _this$props.numReplaceable, formatMessage = _this$props.intl.formatMessage, takeFullWidth = _this$props.takeFullWidth, _this$props$isButtonH = _this$props.isButtonHidden, isButtonHidden = _this$props$isButtonH === void 0 ? false : _this$props$isButtonH; var title = formatMessage(messages.findReplaceToolbarButton); var stackBelowOtherEditorFloatingPanels = akEditorFloatingPanelZIndex - 1; var keymap = findKeymapByDescription('Find'); return jsx("div", { css: [toolbarButtonWrapper, takeFullWidth && toolbarButtonWrapperFullWidth, isButtonHidden && fg('platform_editor_toolbar_responsive_fixes') && toolbarButtonWrapperHidden] }, jsx(Dropdown, { mountTo: popupsMountPoint, boundariesElement: popupsBoundariesElement, scrollableElement: popupsScrollableElement, isOpen: isActive // eslint-disable-next-line @atlassian/perf-linting/no-unstable-inline-props -- Ignored via go/ees017 (to be fixed) , handleEscapeKeydown: function handleEscapeKeydown() { if (isActive) { _this2.props.onCancel({ triggerMethod: TRIGGER_METHOD.KEYBOARD }); if (_this2.state.openedByClick && _this2.toolbarButtonRef.current) { _this2.toolbarButtonRef.current.focus(); } _this2.setState({ openedByClick: false }); } }, fitWidth: dropdownWidthNewDesign, zIndex: stackBelowOtherEditorFloatingPanels // eslint-disable-next-line @atlassian/perf-linting/no-unstable-inline-props -- Ignored via go/ees017 (to be fixed) , arrowKeyNavigationProviderOptions: { type: ArrowKeyNavigationType.MENU, disableArrowKeyNavigation: true }, trigger: fg('platform_editor_toolbar_responsive_fixes') ? jsx(TriggerButtonWrapper, { isButtonHidden: isButtonHidden }, jsx(ToolbarButton, { buttonId: TOOLBAR_BUTTON.FIND_REPLACE, testId: "editor-toolbar__".concat(TOOLBAR_BUTTON.FIND_REPLACE), spacing: isReducedSpacing ? 'none' : 'default', selected: isActive, title: jsx(ToolTipContent, { description: title, keymap: keymap }), iconBefore: jsx(SearchIcon, { label: title, spacing: "spacious" }), onClick: this.toggleOpen, "aria-expanded": isActive, "aria-haspopup": true, "aria-label": keymap ? tooltip(keymap, title) : title, "aria-keyshortcuts": getAriaKeyshortcuts(keymap), ref: this.toolbarButtonRef })) : jsx(ToolbarButton, { buttonId: TOOLBAR_BUTTON.FIND_REPLACE, testId: "editor-toolbar__".concat(TOOLBAR_BUTTON.FIND_REPLACE), spacing: isReducedSpacing ? 'none' : 'default', selected: isActive, title: jsx(ToolTipContent, { description: title, keymap: keymap }), iconBefore: jsx(SearchIcon, { label: title, spacing: "spacious" }), onClick: this.toggleOpen, "aria-expanded": isActive, "aria-haspopup": true, "aria-label": keymap ? tooltip(keymap, title) : title, "aria-keyshortcuts": getAriaKeyshortcuts(keymap), ref: this.toolbarButtonRef }) }, jsx("div", { css: wrapper }, jsx(FindReplace, _extends({ findText: findText, replaceText: replaceText // eslint-disable-next-line @atlassian/perf-linting/no-unstable-inline-props -- Ignored via go/ees017 (to be fixed) , count: { index: index, total: numMatches, totalReplaceable: numReplaceable }, focusToolbarButton: this.focusToolbarButton // Ignored via go/ees005 // eslint-disable-next-line react/jsx-props-no-spreading }, this.props))))); } }]); }(React.PureComponent); // eslint-disable-next-line @typescript-eslint/ban-types var _default_1 = injectIntl(FindReplaceToolbarButton); export default _default_1;