diff --git a/app/assets/stylesheets/base.scss b/app/assets/stylesheets/base.scss index dd27b33c3aa..3f6e0d03025 100644 --- a/app/assets/stylesheets/base.scss +++ b/app/assets/stylesheets/base.scss @@ -491,21 +491,6 @@ table { line-height: 2; } -.navbar-editor - > span - > .select2-container - .select2-choices - .select2-search-field - input, -.select2-container .select2-choice, -.select2-container .select2-choices .select2-chosen { - height: 24px; - - .select2-search-choice-close { - top: 6px; - } -} - .select2-chosen, .select2-choice > span:first-child, .select2-container .select2-choices .select2-search-field input { diff --git a/webpack/assets/javascripts/react_app/components/DiffView/DiffToggle.js b/webpack/assets/javascripts/react_app/components/DiffView/DiffToggle.js index 25ec31db26a..20ff5907ac7 100644 --- a/webpack/assets/javascripts/react_app/components/DiffView/DiffToggle.js +++ b/webpack/assets/javascripts/react_app/components/DiffView/DiffToggle.js @@ -9,7 +9,11 @@ const DiffToggle = ({ stateView, changeState }) => { isSelected && changeState(viewType); return ( - + ', + isMaximized: true, + changeDiffViewType: noop, +}; + +// EditorSettings fixtures: +export const editorSettingsFixtures = { + ...dropdowns, + mode: 'Ruby', + theme: 'Github', + autocompletion: true, + liveAutocompletion: false, + keyBinding: 'Vim', + changeSetting: noop, +}; diff --git a/webpack/assets/javascripts/react_app/components/Editor/Editor.js b/webpack/assets/javascripts/react_app/components/Editor/Editor.js index 7f7f907eb6c..f926cc77e80 100644 --- a/webpack/assets/javascripts/react_app/components/Editor/Editor.js +++ b/webpack/assets/javascripts/react_app/components/Editor/Editor.js @@ -1,32 +1,85 @@ -import React from 'react'; +import React, { useState, useEffect } from 'react'; import PropTypes from 'prop-types'; import { ToastNotification } from 'patternfly-react'; +import { Divider } from '@patternfly/react-core'; import { noop } from '../../common/helpers'; import DiffView from '../DiffView/DiffView'; import EditorView from './components/EditorView'; -import EditorNavbar from './components/EditorNavbar'; +import EditorToolbar from './components/EditorToolbar'; import EditorModal from './components/EditorModal'; +import { EditorContext } from './EditorContext'; import { EDITOR_THEMES, EDITOR_KEYBINDINGS, EDITOR_MODES, + INPUT, + DIFF, + PREVIEW, } from './EditorConstants'; import './editor.scss'; -class Editor extends React.Component { - componentDidMount() { - const { - data: { hosts, templateClass, locked, template, type, dslCache }, - initializeEditor, - isMasked, - isRendering, - readOnly, - previewResult, - selectedView, - showError, - } = this.props; +const Editor = props => { + const { + data: { + templateClass, + locked, + type, + dslCache, + name, + isSafemodeEnabled, + renderPath, + safemodeRenderPath, + showHide, + showImport, + showPreview, + showHostSelector, + template, + title, + }, + initializeEditor, + changeDiffViewType, + changeEditorValue, + changeSetting, + diffViewType, + dismissErrorToast, + editorName, + errorText, + fetchAndPreview, + filteredHosts, + hosts, + importFile, + isFetchingHosts, + isLoading, + isMasked, + isMaximized, + isRendering, + isSearchingHosts, + isSelectOpen, + keyBinding, + mode, + onHostSearch, + onHostSelectToggle, + onSearchClear, + previewResult, + previewTemplate, + readOnly, + renderedEditorValue, + revertChanges, + searchQuery, + selectedHost, + showError, + theme, + autocompletion, + liveAutocompletion, + toggleMaskValue, + toggleModal, + toggleRenderView, + value, + templateKindId, + } = props; + useEffect(() => { const initializeData = { hosts, isMasked, @@ -35,90 +88,40 @@ class Editor extends React.Component { locked, readOnly, previewResult, - selectedView, showError, template, type, dslCache, }; initializeEditor(initializeData); - } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); - render() { - const { - data: { - name, - isSafemodeEnabled, - renderPath, - safemodeRenderPath, - showHide, - showImport, - showPreview, - showHostSelector, - template, - title, - }, - changeDiffViewType, - changeEditorValue, - changeSetting, - changeTab, - diffViewType, - dismissErrorToast, - editorName, - errorText, - fetchAndPreview, - filteredHosts, - hosts, - importFile, - isFetchingHosts, - isLoading, - isMasked, - isMaximized, - isRendering, - isSearchingHosts, - isSelectOpen, - keyBinding, - mode, - onHostSearch, - onHostSelectToggle, - onSearchClear, - previewResult, - previewTemplate, - readOnly, - renderedEditorValue, - revertChanges, - searchQuery, - selectedHost, - selectedView, - showError, - theme, - autocompletion, - liveAutocompletion, - toggleMaskValue, - toggleModal, - toggleRenderView, - value, - templateKindId, - } = this.props; + const editorViewProps = { + value: isRendering ? previewResult : value, + mode: isRendering ? 'Text' : mode, + theme, + autocompletion, + liveAutocompletion, + keyBinding, + onChange: isRendering ? noop : changeEditorValue, + readOnly: readOnly || isRendering, + isMasked, + }; + const editorNameTab = { + input: `${editorName}Code`, + preview: `${editorName}Preview`, + }; - const editorViewProps = { - value: isRendering ? previewResult : value, - mode: isRendering ? 'Text' : mode, - theme, - autocompletion, - liveAutocompletion, - keyBinding, - onChange: isRendering ? noop : changeEditorValue, - readOnly: readOnly || isRendering, - isMasked, - }; - const editorNameTab = { - input: `${editorName}Code`, - preview: `${editorName}Preview`, - }; + const [selectedView, setSelectedView] = useState(INPUT); + const editorContextValue = { + selectedView, + setSelectedView, + }; - return ( -
+ return ( +
+ {errorText} - + -
+
{!readOnly && (