UNPKG

@uiw/react-md-editor

Version:

A markdown editor with preview, implemented with React.js and TypeScript.

144 lines (123 loc) 5.37 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.ToolbarItems = ToolbarItems; exports.default = Toolbar; var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var _react = _interopRequireWildcard(require("react")); var _Context = require("../../Context"); var _Child = _interopRequireDefault(require("./Child")); var _jsxRuntime = require("react/jsx-runtime"); function ToolbarItems(props) { var prefixCls = props.prefixCls; var _useContext = (0, _react.useContext)(_Context.EditorContext), fullscreen = _useContext.fullscreen, preview = _useContext.preview, _useContext$barPopup = _useContext.barPopup, barPopup = _useContext$barPopup === void 0 ? {} : _useContext$barPopup, commandOrchestrator = _useContext.commandOrchestrator, dispatch = _useContext.dispatch; function handleClick(command, name) { if (!dispatch) return; var state = { barPopup: (0, _objectSpread2.default)({}, barPopup) }; if (command.keyCommand === 'preview') { state.preview = command.value; } if (command.keyCommand === 'fullscreen') { state.fullscreen = !fullscreen; } if (props.commands && command.keyCommand === 'group') { props.commands.forEach(function (item) { if (name === item.groupName) { state.barPopup[name] = true; } else if (item.keyCommand) { state.barPopup[item.groupName] = false; } }); } else if (name || command.parent) { Object.keys(state.barPopup || {}).forEach(function (keyName) { state.barPopup[keyName] = false; }); } if (Object.keys(state).length) { dispatch((0, _objectSpread2.default)({}, state)); } commandOrchestrator && commandOrchestrator.executeCommand(command); } (0, _react.useEffect)(function () { if (document) { document.body.style.overflow = !fullscreen ? 'initial' : 'hidden'; } }, [fullscreen]); return /*#__PURE__*/(0, _jsxRuntime.jsx)("ul", { children: (props.commands || []).map(function (item, idx) { if (item.keyCommand === 'divider') { return /*#__PURE__*/(0, _jsxRuntime.jsx)("li", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, item.liProps), {}, { className: "".concat(prefixCls, "-toolbar-divider") }), idx); } if (!item.keyCommand) return /*#__PURE__*/(0, _jsxRuntime.jsx)(_react.Fragment, {}); var activeBtn = fullscreen && item.keyCommand === 'fullscreen' || item.keyCommand === 'preview' && preview === item.value; var childNode = item.children && typeof item.children === 'function' ? item.children({ getState: function getState() { return commandOrchestrator.getState(); }, textApi: commandOrchestrator ? commandOrchestrator.textApi : undefined, close: function close() { return handleClick({}, item.groupName); }, execute: function execute() { return handleClick({ execute: item.execute }); } }) : undefined; var disabled = barPopup && preview && preview === 'preview' && !/(preview|fullscreen)/.test(item.keyCommand); return /*#__PURE__*/(0, _jsxRuntime.jsxs)("li", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, item.liProps), {}, { className: activeBtn ? "active" : '', children: [!item.buttonProps && item.icon, item.buttonProps && /*#__PURE__*/_react.default.createElement('button', (0, _objectSpread2.default)((0, _objectSpread2.default)({ type: 'button', disabled: disabled, 'data-name': item.name }, item.buttonProps), {}, { onClick: function onClick(evn) { evn.stopPropagation(); handleClick(item, item.groupName); } }), item.icon), item.children && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Child.default, { groupName: item.groupName, prefixCls: prefixCls, children: childNode, commands: Array.isArray(item.children) ? item.children : undefined })] }), idx); }) }); } function Toolbar() { var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var prefixCls = props.prefixCls, _props$height = props.height, height = _props$height === void 0 ? 29 : _props$height, isChild = props.isChild; var _useContext2 = (0, _react.useContext)(_Context.EditorContext), commands = _useContext2.commands, extraCommands = _useContext2.extraCommands; return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", { className: "".concat(prefixCls, "-toolbar"), style: { height: height }, children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(ToolbarItems, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, { commands: props.commands || commands || [] })), !isChild && /*#__PURE__*/(0, _jsxRuntime.jsx)(ToolbarItems, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, { commands: extraCommands || [] }))] }); } //# sourceMappingURL=index.js.map