import yaml from 'js-yaml' import { validateSettings } from './settings-validator.mjs' import { useEffect, useState, useRef, useMemo } from 'react' import { useTranslation } from 'next-i18next' import { useToast } from 'shared/hooks/use-toast.mjs' import { CloseIcon } from 'shared/components/icons.mjs' import { capitalize } from 'shared/utils.mjs' export const ns = ['wbedit'] /** a view for editing the gist as yaml */ export const EditView = ({ settings, setSettings, design, Design }) => { const inputRef = useRef(null) const [error, setError] = useState(false) const [success, setSuccess] = useState(false) const { t } = useTranslation(ns) const patternConfig = useMemo(() => new Design().getConfig(), [Design]) const toast = useToast() // parse the settings to yaml and set them as the value on the textArea useEffect(() => { inputRef.current.value = yaml.dump(settings) }, [settings]) /** user-initiated save */ const onSave = () => { setError(false) setSuccess(false) try { // parse back to json const editedAsJson = yaml.load(inputRef.current.value) // validate it const validation = validateSettings(editedAsJson, patternConfig) // if it's not valid, show a warning about errors if (!validation.valid) { const newError = JSON.stringify(validation.errors, null, 2) setError(newError) } // save regardless setSettings(editedAsJson) setSuccess(true) if (validation.valid) toast.success(t('success')) } catch (e) { console.log(e) setError(e.message) } } return (
{t('yamlEditViewErrorDesc')}:
}