From ac47970cacf9fc73097fd9fafb77f949cad00c06 Mon Sep 17 00:00:00 2001 From: Davor <davor.ivankovic@init.hr> Date: Sat, 6 Aug 2022 11:19:29 +0200 Subject: [PATCH] configuration validation part with validation messages --- .../components/AdvancedTab/AdvancedTab.tsx | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/src/modules/apps/components/AdvancedTab/AdvancedTab.tsx b/src/modules/apps/components/AdvancedTab/AdvancedTab.tsx index c46b13a7..20ae4ab1 100644 --- a/src/modules/apps/components/AdvancedTab/AdvancedTab.tsx +++ b/src/modules/apps/components/AdvancedTab/AdvancedTab.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useState } from 'react'; import _ from 'lodash'; import Editor from 'react-simple-code-editor'; // import { Menu, Transition } from '@headlessui/react'; @@ -14,6 +14,7 @@ import { initialEditorYaml } from '../../consts'; export const AdvancedTab = () => { const [code, setCode] = React.useState(initialEditorYaml); + const [configurationValidation, setConfigurationValidation] = useState<string | null>(null); const { app, editApp } = useApps(); const resetCode = () => { @@ -21,17 +22,30 @@ export const AdvancedTab = () => { showToast('Code was reset.'); }; + const isConfigurationValid = () => { + try { + yaml.load(code); + return true; + } catch (e: any) { + return false; + } + }; + const vertifyCode = () => { try { yaml.load(code); - showToast('Configuration is valid!', ToastType.Success); + setConfigurationValidation('Configuration is valid!'); } catch (e: any) { - showToast(`Configuration is not valid: ${e.message}`, ToastType.Error, Infinity); + setConfigurationValidation(`Configuration is not valid: ${e.message}`); } }; const saveChanges = () => { - editApp({ ...app, configuration: code }); + if (isConfigurationValid()) { + editApp({ ...app, configuration: code }); + return; + } + showToast('Configuration is not valid! Please fix configuration issues and try again.', ToastType.Error, Infinity); }; return ( @@ -138,6 +152,14 @@ export const AdvancedTab = () => { </div> </div> </div> + {configurationValidation && ( + <> + <div className="pb-5 border-b border-gray-200 sm:flex sm:items-center sm:justify-between mt-8 mb-5 cursor-pointer"> + <h3 className="leading-6 font-medium text-gray-900">Configuration validation</h3> + </div> + <div className="bg-white shadow rounded-sm p-4">{configurationValidation}</div> + </> + )} <div className="flex justify-end mt-10"> <button type="button" @@ -163,8 +185,6 @@ export const AdvancedTab = () => { Save changes </button> </div> - - {/* <Secrets /> */} </> ); }; -- GitLab