UNPKG

wix-storybook-utils

Version:

Utilities for automated component documentation within Storybook

79 lines 3.21 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var react_1 = tslib_1.__importDefault(require("react")); var debounce_1 = tslib_1.__importDefault(require("lodash/debounce")); var react_codemirror2_1 = require("react-codemirror2"); require("codemirror/mode/jsx/jsx"); require("codemirror/addon/edit/closetag"); require("codemirror/addon/edit/closebrackets"); require("codemirror/addon/hint/show-hint"); require("codemirror/addon/hint/xml-hint"); var doctor_code_1 = require("./doctor-code"); var autocomplete_utils_1 = require("./autocomplete-utils"); require("./styles.global.scss"); var autoCompleteHotkeysMap = { "'<'": autocomplete_utils_1.completeAfter, 'Cmd-I': autocomplete_utils_1.completeIfInTag, 'Ctrl-I': autocomplete_utils_1.completeIfInTag, "'='": autocomplete_utils_1.completeIfInTag, Space: autocomplete_utils_1.completeIfInTagNewAttribute, Enter: autocomplete_utils_1.completeIfInTagNewAttribute, Tab: autocomplete_utils_1.handleIndentation, }; var Editor = function (_a) { var initialFormattedCode = _a.initialFormattedCode, hints = _a.hints, editorCodeUpdater = _a.editorCodeUpdater, onChange = _a.onChange; var editorDidMount = function (editor) { editor.setValue(initialFormattedCode); editorCodeUpdater(function (code) { return editor.setValue(code); }); }; var onCodeChange = function (_editor, _data, newCode) { onChange(newCode); }; var debouncedOnCodeChange = (0, debounce_1.default)(onCodeChange, 100, { trailing: true, }); var prettifyCode = function (editor) { try { var formattedValue = (0, doctor_code_1.formatCode)(editor.getValue()); editor.setValue(formattedValue); onChange(formattedValue); } catch (e) { console.error('Unable to prettify code', e); } }; var liveEditorOnKeyDown = function (editor, e) { var shouldPrettify = [ /* windows & unix: ctrl + s */ e.ctrlKey && e.key === 's', /* osx: command + s */ e.metaKey && e.key === 's', ].some(Boolean); if (shouldPrettify) { e.stopPropagation(); e.preventDefault(); var _a = editor.getCursor(), ch = _a.ch, line = _a.line; prettifyCode(editor); editor.setCursor({ ch: ch, line: line }); } }; return (react_1.default.createElement(react_codemirror2_1.UnControlled, { onChange: debouncedOnCodeChange, editorDidMount: editorDidMount, onKeyDown: liveEditorOnKeyDown, options: { mode: 'jsx', autoCloseTags: true, autoCloseBrackets: true, theme: 'wsr', viewportMargin: 50, lineNumbers: true, /** * Need to cast the type here, because xml-hint * plugin enhances hintOptions parameter with additional properties */ hintOptions: { schemaInfo: hints, }, extraKeys: autoCompleteHotkeysMap, } })); }; exports.default = Editor; //# sourceMappingURL=Editor.js.map