frontend/src/components/projectEdit/customEditorForm.js (118 lines of code) (raw):

import React, { useContext } from 'react'; import { FormattedMessage } from 'react-intl'; import messages from './messages'; import { SwitchToggle } from '../formInputs'; import { StateContext, styleClasses } from '../../views/projectEdit'; import { CustomButton } from '../button'; import { WasteIcon } from '../svgIcons'; const CustomEditorTextInput = ({ name, value, handleChange }) => { return ( <div className={styleClasses.divClass}> <label className={styleClasses.labelClass}> {name === 'name' ? ( <FormattedMessage {...messages.customEditorName} /> ) : ( <FormattedMessage {...messages.customEditorUrl} /> )} </label> <input className={styleClasses.inputClass} onChange={handleChange} name={name} type="text" value={value} /> </div> ); }; export const CustomEditorForm = ({ languages }) => { const { projectInfo, setProjectInfo } = useContext(StateContext); const handleChange = (event) => { var value = (val) => event.target.type === 'checkbox' ? event.target.checked : event.target.value; var customEditor = { ...projectInfo.customEditor, [event.target.name]: value() }; setProjectInfo({ ...projectInfo, customEditor: customEditor }); }; const handleMappingEditors = () => { let editors = projectInfo.mappingEditors; if (editors.includes('CUSTOM')) { editors = editors.filter((item) => item !== 'CUSTOM'); } else { editors.push('CUSTOM'); } setProjectInfo({ ...projectInfo, mappingEditors: editors }); }; const handleValidationEditors = () => { let editors = projectInfo.validationEditors; if (editors.includes('CUSTOM')) { editors = editors.filter((item) => item !== 'CUSTOM'); } else { editors.push('CUSTOM'); } setProjectInfo({ ...projectInfo, validationEditors: editors }); }; const handleRemove = (event) => { setProjectInfo({ ...projectInfo, customEditor: null }); }; return ( <div className="w-100"> <CustomEditorTextInput name="name" value={projectInfo.customEditor ? projectInfo.customEditor.name : ''} handleChange={handleChange} /> <div className={styleClasses.divClass}> <label className={styleClasses.labelClass}> <FormattedMessage {...messages.customEditorDescription} /> </label> <textarea className={styleClasses.inputClass} onChange={handleChange} rows={styleClasses.numRows} name="description" type="text" value={projectInfo.customEditor ? projectInfo.customEditor.description : ''} /> </div> <CustomEditorTextInput name="url" value={projectInfo.customEditor ? projectInfo.customEditor.url : ''} handleChange={handleChange} /> {projectInfo.customEditor && ( <> <div className={styleClasses.divClass}> <label className="db pb3"> <SwitchToggle label={<FormattedMessage {...messages.customEditorEnabledForMapping} />} labelPosition="right" isChecked={projectInfo.mappingEditors.includes('CUSTOM')} onChange={handleMappingEditors} /> </label> <label className="db pt1"> <SwitchToggle label={<FormattedMessage {...messages.customEditorEnabledForValidation} />} labelPosition="right" isChecked={projectInfo.validationEditors.includes('CUSTOM')} onChange={handleValidationEditors} /> </label> </div> <div className={styleClasses.divClass}> <label className={styleClasses.labelClass}> <FormattedMessage {...messages.deleteCustomEditor} /> </label> <p className={styleClasses.pClass}> <FormattedMessage {...messages.confirmDeleteCustomEditor} /> </p> <CustomButton className="primary bg-white pv2 ph3 ba b--primary" onClick={handleRemove}> <WasteIcon className="pr2 v-top" /> <FormattedMessage {...messages.removeCustomEditor} /> </CustomButton> </div> </> )} </div> ); };