diff --git a/webpack/assets/javascripts/react_app/components/Editor/Editor.js b/webpack/assets/javascripts/react_app/components/Editor/Editor.js index 62268efa96..a183d65289 100644 --- a/webpack/assets/javascripts/react_app/components/Editor/Editor.js +++ b/webpack/assets/javascripts/react_app/components/Editor/Editor.js @@ -1,8 +1,10 @@ -import React from 'react'; +/* eslint-disable max-lines */ +import React, { useEffect, useState } from 'react'; import PropTypes from 'prop-types'; -import { Alert, AlertActionCloseButton } from '@patternfly/react-core'; +import { Alert, AlertActionCloseButton, Button } from '@patternfly/react-core'; import { noop } from '../../common/helpers'; +import { translate as __ } from '../../common/I18n'; import DiffView from '../DiffView/DiffView'; import EditorView from './components/EditorView'; import EditorNavbar from './components/EditorNavbar'; @@ -14,20 +16,65 @@ import { } 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 = ({ + data: { + name, + hosts, + isSafemodeEnabled, + locked, + renderPath, + safemodeRenderPath, + showImport, + showPreview, + showHostSelector, + template, + templateClass, + title, + type, + dslCache, + }, + changeDiffViewType, + changeEditorValue, + changeSetting, + changeTab, + diffViewType, + dismissErrorToast, + editorName, + errorText, + fetchAndPreview, + filteredHosts, + hosts: componentHosts, + importFile, + initializeEditor, + isFetchingHosts, + isLoading, + isMasked, + isMaximized, + isRendering, + isSearchingHosts, + keyBinding, + mode, + onHostSearch, + previewResult, + previewTemplate, + readOnly, + renderedEditorValue, + revertChanges, + selectedHost, + selectedView, + showError, + theme, + autocompletion, + liveAutocompletion, + toggleModal, + toggleRenderView, + value, + templateKindId, +}) => { + const [safemode, setSafemode] = useState(isSafemodeEnabled); - const initializeData = { + useEffect(() => { + initializeEditor({ hosts, isMasked, templateClass, @@ -40,195 +87,170 @@ class Editor extends React.Component { template, type, dslCache, - }; - initializeEditor(initializeData); - } + }); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); - render() { - const { - data: { - name, - isSafemodeEnabled, - renderPath, - safemodeRenderPath, - 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, - toggleModal, - toggleRenderView, - value, + const handleSafeModeChange = ({ currentTarget: { checked } }) => { + const newRenderPath = checked ? safemodeRenderPath : renderPath; + + setSafemode(checked); + previewTemplate({ + host: selectedHost, + renderPath: newRenderPath, 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 selectedRenderPath = safemode ? safemodeRenderPath : renderPath; - return ( -
- dismissErrorToast()} - /> - } - title={errorText} - /> - - - -
- + dismissErrorToast()} + /> + } + title={errorText} + /> + {selectedView === 'preview' && + previewResult !== '' && + renderedEditorValue !== value && ( + + {__('Preview is outdated.')} + + + } /> -
- - {!readOnly && ( -