From cf0ab5797ec3ab9ed2b2458af7ddf3f604f5cba2 Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 17:56:57 -0300 Subject: [PATCH 01/30] fix: imports order and path --- .../routes/data/CustomData/VulnerabilityTypes.tsx | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx index d82ec647..be8253b8 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx @@ -2,18 +2,17 @@ import { t } from 'i18next'; import { useCallback, useEffect, useState } from 'react'; import { toast } from 'sonner'; -import PrimaryButton from '@/components/button/PrimaryButton'; -import EditCard from '@/components/card/EditCard'; -import SelectDropdown from '@/components/dropdown/SelectDropdown'; -import SimpleInput from '@/components/input/SimpleInput'; -import type { Language } from '@/services/audits'; -import { getLanguages } from '@/services/audits'; +import PrimaryButton from '../../../components/button/PrimaryButton'; +import EditCard from '../../../components/card/EditCard'; +import SelectDropdown from '../../../components/dropdown/SelectDropdown'; +import SimpleInput from '../../../components/input/SimpleInput'; +import type { Language } from '../../../services/audits'; +import { getLanguages } from '../../../services/audits'; import { createVulnerabilityType, getVulnerabilityTypes, updateVulnerabilityTypes, -} from '@/services/data'; - +} from '../../../services/data'; import VulnerabilityTypeList from './VulnerabilityTypeList'; type ListItem = { From 075bc01bb18b0dab8256daf52edd6f0d26506a1f Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 17:57:47 -0300 Subject: [PATCH 02/30] chore: refactor fetch languages and vuln types --- .../data/CustomData/VulnerabilityTypes.tsx | 82 +++++++++++-------- 1 file changed, 46 insertions(+), 36 deletions(-) diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx index be8253b8..108a495e 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx @@ -41,45 +41,55 @@ export const VulnerabilityTypes = () => { useState(true); const [error, setError] = useState(null); - useEffect(() => { - const fetchData = async () => { - setLoadingLanguages(true); - setLoadingVulnerabilityTypes(true); - - try { - const dataLanguage = await getLanguages(); - const languages = dataLanguage.datas.map( - (item: Language, index: number) => ({ - id: index, - value: item.locale, - label: item.language, - }), - ); - setLanguages(languages); - - if (!currentLanguage && languages.length > 0) { - setCurrentLanguage(languages[0]); - } - - const dataVulnerabilityType = await getVulnerabilityTypes(); - setVulnerabilityTypes(dataVulnerabilityType.datas); - - setFilteredVulnerabilityTypes( - dataVulnerabilityType.datas.filter( - (type: { locale: string }) => - type.locale === currentLanguage?.value, - ), - ); - } catch (err) { - setError('Error fetching data'); - } finally { - setLoadingLanguages(false); - setLoadingVulnerabilityTypes(false); + const fetchLanguages = useCallback(async () => { + setLoadingLanguages(true); + + try { + const dataLanguage = await getLanguages(); + const languages = dataLanguage.datas.map( + (item: Language, index: number) => ({ + id: index, + value: item.locale, + label: item.language, + }), + ); + setLanguages(languages); + + if (!currentLanguage && languages.length > 0) { + setCurrentLanguage(languages[0]); } - }; - void fetchData(); + } catch (err) { + setError('Error fetching Languages'); + } finally { + setLoadingLanguages(false); + } }, [currentLanguage]); + const fetchVulnerabilityTypes = useCallback(async () => { + setLoadingVulnerabilityTypes(true); + + try { + const dataVulnerabilityType = await getVulnerabilityTypes(); + setVulnerabilityTypes(dataVulnerabilityType.datas); + + setFilteredVulnerabilityTypes( + dataVulnerabilityType.datas.filter( + (type: { locale: string }) => type.locale === currentLanguage?.value, + ), + ); + } catch (err) { + setError('Error fetching Vulnerability Types'); + } finally { + setLoadingVulnerabilityTypes(false); + } + }, [currentLanguage?.value]); + + useEffect(() => { + void fetchLanguages(); + void fetchVulnerabilityTypes(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + const handleAddVulnerabilityType = async () => { if (!newVulnerabilityType.trim()) { setError(`${t('err.createEmptyField')}: ${t('name')}`); From 4233abfca897c0ee11bfea8150ed7067995f60ac Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 18:24:22 -0300 Subject: [PATCH 03/30] chore: refactor fetch languages and vuln types, again --- .../data/CustomData/VulnerabilityTypes.tsx | 59 +++++++++++-------- 1 file changed, 36 insertions(+), 23 deletions(-) diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx index 108a495e..2c241526 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx @@ -55,40 +55,53 @@ export const VulnerabilityTypes = () => { ); setLanguages(languages); - if (!currentLanguage && languages.length > 0) { + if (languages.length > 0) { setCurrentLanguage(languages[0]); + setLoadingLanguages(false); + return languages[0]; } } catch (err) { setError('Error fetching Languages'); - } finally { - setLoadingLanguages(false); } - }, [currentLanguage]); + setLoadingLanguages(false); + return null; + }, []); - const fetchVulnerabilityTypes = useCallback(async () => { - setLoadingVulnerabilityTypes(true); + const fetchVulnerabilityTypes = useCallback( + async (languageSelected: ListItem | null) => { + setLoadingVulnerabilityTypes(true); + + try { + const dataVulnerabilityType = await getVulnerabilityTypes(); + setVulnerabilityTypes(dataVulnerabilityType.datas); + + setFilteredVulnerabilityTypes( + dataVulnerabilityType.datas.filter( + (type: { locale: string }) => + type.locale === languageSelected?.value, + ), + ); + } catch (err) { + setError('Error fetching Vulnerability Types'); + } finally { + setLoadingVulnerabilityTypes(false); + } + }, + [], + ); + const fetchVulnTypesAndLanguages = useCallback(async () => { try { - const dataVulnerabilityType = await getVulnerabilityTypes(); - setVulnerabilityTypes(dataVulnerabilityType.datas); - - setFilteredVulnerabilityTypes( - dataVulnerabilityType.datas.filter( - (type: { locale: string }) => type.locale === currentLanguage?.value, - ), - ); - } catch (err) { - setError('Error fetching Vulnerability Types'); - } finally { - setLoadingVulnerabilityTypes(false); + const languageSelected = await fetchLanguages(); + await fetchVulnerabilityTypes(languageSelected); + } catch (error) { + console.error('Error:', error); } - }, [currentLanguage?.value]); + }, [fetchLanguages, fetchVulnerabilityTypes]); useEffect(() => { - void fetchLanguages(); - void fetchVulnerabilityTypes(); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); + void fetchVulnTypesAndLanguages(); + }, [fetchVulnTypesAndLanguages]); const handleAddVulnerabilityType = async () => { if (!newVulnerabilityType.trim()) { From a057ef2e3f6f72d4f0bea68c1b0a1e8d12637c14 Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 18:42:04 -0300 Subject: [PATCH 04/30] fix: update vulnerability type list at language onChange --- .../src/routes/data/CustomData/VulnerabilityTypes.tsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx index 2c241526..4c944a00 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx @@ -144,6 +144,13 @@ export const VulnerabilityTypes = () => { [setVulnerabilityTypes], ); + const onChangeLanguage = (value: ListItem) => { + setFilteredVulnerabilityTypes( + vulnerabilityTypes.filter(type => type.locale === value.value), + ); + setCurrentLanguage(value); + }; + return (
@@ -151,7 +158,7 @@ export const VulnerabilityTypes = () => { {!loadingLanguages ? ( onChangeLanguage(value)} selected={currentLanguage} title={t('language')} /> From b3f4ade0967c3aba9d18c1a7373405236a01424e Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 19:02:34 -0300 Subject: [PATCH 05/30] feat: update vuln type list at add new type --- .../routes/data/CustomData/VulnerabilityTypes.tsx | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx index 4c944a00..3ffcc3d2 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx @@ -111,10 +111,23 @@ export const VulnerabilityTypes = () => { } try { - await createVulnerabilityType({ + const addVulnType = await createVulnerabilityType({ locale: currentLanguage.value, name: newVulnerabilityType, }); + if (addVulnType.status === 'success') { + const newVulnType = [ + ...vulnerabilityTypes, + { + locale: addVulnType.datas.locale, + name: addVulnType.datas.name, + }, + ]; + setVulnerabilityTypes(newVulnType); + setFilteredVulnerabilityTypes( + newVulnType.filter(type => type.locale === currentLanguage?.value), + ); + } } catch (error) { setError('Error creating vulnerability type'); toast.error('Error creating vulnerability type'); From 3cacb33f51b29d06a437d63e339dce3283a4e0a4 Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 19:04:32 -0300 Subject: [PATCH 06/30] fix: add fallback to fix eslint error --- frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx index 3ffcc3d2..fa87605a 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx @@ -112,7 +112,7 @@ export const VulnerabilityTypes = () => { try { const addVulnType = await createVulnerabilityType({ - locale: currentLanguage.value, + locale: currentLanguage?.value ?? '', name: newVulnerabilityType, }); if (addVulnType.status === 'success') { From ba17ba284597f03718af191e908f364a025de79b Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 19:11:03 -0300 Subject: [PATCH 07/30] fix: update success toast message upon successful vuln type addition --- frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx index fa87605a..5728d26e 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx @@ -127,14 +127,15 @@ export const VulnerabilityTypes = () => { setFilteredVulnerabilityTypes( newVulnType.filter(type => type.locale === currentLanguage?.value), ); + toast.success('Vulnerability Type Created Successfully!'); + setNewVulnerabilityType(''); } } catch (error) { setError('Error creating vulnerability type'); toast.error('Error creating vulnerability type'); return; } - toast.success('Vulnerability Type Created Successfully!'); - setNewVulnerabilityType(''); + toast.success('There was an error'); }; const onClickSave = async () => { From 618ccb301d1a259be30b4eb889efdf6e22bb0bcf Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 19:11:50 -0300 Subject: [PATCH 08/30] chore: add TODO item --- frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx index 5728d26e..caf98721 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx @@ -21,6 +21,7 @@ type ListItem = { label?: string; }; +//TODO: change texts to i18n translations export const VulnerabilityTypes = () => { const [languages, setLanguages] = useState([]); const [currentLanguage, setCurrentLanguage] = useState(null); From c2cd8edf3e8287ad1cbaae5f9d42dc203ec18c0f Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 19:15:01 -0300 Subject: [PATCH 09/30] feature: add loading icon while fetching vulnTypes --- frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx index caf98721..fa05e6f4 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx @@ -1,3 +1,4 @@ +import { ArrowPathIcon } from '@heroicons/react/24/outline'; import { t } from 'i18next'; import { useCallback, useEffect, useState } from 'react'; import { toast } from 'sonner'; @@ -203,7 +204,11 @@ export const VulnerabilityTypes = () => { title={t('editVulnerabilityTypes')} > {loadingVulnerabilityTypes ? ( -

{t('loading')}

+
+ + + +
) : ( Date: Tue, 12 Nov 2024 19:19:29 -0300 Subject: [PATCH 10/30] fix: remove useless error state - fix eslint issue --- .../routes/data/CustomData/VulnerabilityTypes.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx index fa05e6f4..f13773a5 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx @@ -41,7 +41,6 @@ export const VulnerabilityTypes = () => { const [isEditing, setIsEditing] = useState(false); const [loadingVulnerabilityTypes, setLoadingVulnerabilityTypes] = useState(true); - const [error, setError] = useState(null); const fetchLanguages = useCallback(async () => { setLoadingLanguages(true); @@ -63,7 +62,7 @@ export const VulnerabilityTypes = () => { return languages[0]; } } catch (err) { - setError('Error fetching Languages'); + console.error('Error:', err); } setLoadingLanguages(false); return null; @@ -84,7 +83,7 @@ export const VulnerabilityTypes = () => { ), ); } catch (err) { - setError('Error fetching Vulnerability Types'); + console.error('Error:', err); } finally { setLoadingVulnerabilityTypes(false); } @@ -107,7 +106,6 @@ export const VulnerabilityTypes = () => { const handleAddVulnerabilityType = async () => { if (!newVulnerabilityType.trim()) { - setError(`${t('err.createEmptyField')}: ${t('name')}`); toast.error(`${t('err.createEmptyField')}: ${t('name')}`); return; } @@ -133,7 +131,8 @@ export const VulnerabilityTypes = () => { setNewVulnerabilityType(''); } } catch (error) { - setError('Error creating vulnerability type'); + console.error('Error:', error); + toast.error('Error creating vulnerability type'); return; } @@ -146,7 +145,8 @@ export const VulnerabilityTypes = () => { toast.success('Vulnerability Type Updated Successfully!'); setIsEditing(false); } catch (error) { - setError('Error updating vulnerability types'); + console.error('Error:', error); + toast.error('Error updating vulnerability types'); setIsEditing(false); return; From 6f6c418956f6f9f90b33819f9154b3bd8738f3f3 Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 19:29:31 -0300 Subject: [PATCH 11/30] feat: refetch vulnType list after adding a new item --- frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx index f13773a5..d9ca4c56 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx @@ -124,9 +124,8 @@ export const VulnerabilityTypes = () => { }, ]; setVulnerabilityTypes(newVulnType); - setFilteredVulnerabilityTypes( - newVulnType.filter(type => type.locale === currentLanguage?.value), - ); + await fetchVulnerabilityTypes(currentLanguage); + toast.success('Vulnerability Type Created Successfully!'); setNewVulnerabilityType(''); } From a3eb0c910bbc0cafd2b8313ef57d6b779894bf95 Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 19:31:18 -0300 Subject: [PATCH 12/30] feat: execute Language loading logic only on page load --- frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx index d9ca4c56..35d930a5 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx @@ -70,8 +70,6 @@ export const VulnerabilityTypes = () => { const fetchVulnerabilityTypes = useCallback( async (languageSelected: ListItem | null) => { - setLoadingVulnerabilityTypes(true); - try { const dataVulnerabilityType = await getVulnerabilityTypes(); setVulnerabilityTypes(dataVulnerabilityType.datas); @@ -84,8 +82,6 @@ export const VulnerabilityTypes = () => { ); } catch (err) { console.error('Error:', err); - } finally { - setLoadingVulnerabilityTypes(false); } }, [], @@ -94,7 +90,9 @@ export const VulnerabilityTypes = () => { const fetchVulnTypesAndLanguages = useCallback(async () => { try { const languageSelected = await fetchLanguages(); + setLoadingVulnerabilityTypes(true); await fetchVulnerabilityTypes(languageSelected); + setLoadingVulnerabilityTypes(false); } catch (error) { console.error('Error:', error); } From 92815f62a585dd6c36eb6a6b50486cedcc9b0f47 Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 20:15:27 -0300 Subject: [PATCH 13/30] fix: language selected issues --- .../data/CustomData/VulnerabilityTypes.tsx | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx index 35d930a5..fe6e238d 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx @@ -47,19 +47,19 @@ export const VulnerabilityTypes = () => { try { const dataLanguage = await getLanguages(); - const languages = dataLanguage.datas.map( + const languagesConverted = dataLanguage.datas.map( (item: Language, index: number) => ({ id: index, value: item.locale, label: item.language, }), ); - setLanguages(languages); + setLanguages(languagesConverted); - if (languages.length > 0) { - setCurrentLanguage(languages[0]); + if (languagesConverted.length > 0) { + setCurrentLanguage(languagesConverted[0]); setLoadingLanguages(false); - return languages[0]; + return languagesConverted[0]; } } catch (err) { console.error('Error:', err); @@ -114,14 +114,6 @@ export const VulnerabilityTypes = () => { name: newVulnerabilityType, }); if (addVulnType.status === 'success') { - const newVulnType = [ - ...vulnerabilityTypes, - { - locale: addVulnType.datas.locale, - name: addVulnType.datas.name, - }, - ]; - setVulnerabilityTypes(newVulnType); await fetchVulnerabilityTypes(currentLanguage); toast.success('Vulnerability Type Created Successfully!'); From c5976c1cacebf56032a0b4f711411adda86f604d Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 20:37:27 -0300 Subject: [PATCH 14/30] fix: issue at change language after add new vuln type --- .../data/CustomData/VulnerabilityTypes.tsx | 49 ++++++++++++------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx index fe6e238d..9482de06 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx @@ -22,6 +22,11 @@ type ListItem = { label?: string; }; +type VulnerabilityType = { + name: string; + locale: string; +}; + //TODO: change texts to i18n translations export const VulnerabilityTypes = () => { const [languages, setLanguages] = useState([]); @@ -72,10 +77,16 @@ export const VulnerabilityTypes = () => { async (languageSelected: ListItem | null) => { try { const dataVulnerabilityType = await getVulnerabilityTypes(); - setVulnerabilityTypes(dataVulnerabilityType.datas); + const types = dataVulnerabilityType.datas.map( + (item: VulnerabilityType) => ({ + name: item.name, + locale: item.locale, + }), + ); + setVulnerabilityTypes(types); setFilteredVulnerabilityTypes( - dataVulnerabilityType.datas.filter( + types.filter( (type: { locale: string }) => type.locale === languageSelected?.value, ), @@ -128,9 +139,27 @@ export const VulnerabilityTypes = () => { toast.success('There was an error'); }; + const onChangeLanguage = (value: ListItem) => { + setFilteredVulnerabilityTypes( + vulnerabilityTypes.filter(type => type.locale === value.value), + ); + setCurrentLanguage(value); + }; + + const [newVulnerabilityTypeList, setNewVulnerabilityTypeList] = useState< + { name: string; locale: string }[] + >([]); + + const handleUpdateVulnerabilityType = useCallback( + (data: { name: string; locale: string }[]) => { + setNewVulnerabilityTypeList(data); + }, + [setNewVulnerabilityTypeList], + ); + const onClickSave = async () => { try { - await updateVulnerabilityTypes(vulnerabilityTypes); + await updateVulnerabilityTypes(newVulnerabilityTypeList); toast.success('Vulnerability Type Updated Successfully!'); setIsEditing(false); } catch (error) { @@ -142,20 +171,6 @@ export const VulnerabilityTypes = () => { } }; - const handleUpdateVulnerabilityType = useCallback( - (data: { name: string; locale: string }[]) => { - setVulnerabilityTypes(data); - }, - [setVulnerabilityTypes], - ); - - const onChangeLanguage = (value: ListItem) => { - setFilteredVulnerabilityTypes( - vulnerabilityTypes.filter(type => type.locale === value.value), - ); - setCurrentLanguage(value); - }; - return (
From d223ced3ac392ccf0631417093a99ac877cab43d Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 21:08:08 -0300 Subject: [PATCH 15/30] fix: issue with language dropdown after add new vuln type --- .../routes/data/CustomData/VulnerabilityTypes.tsx | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx index 9482de06..49f66598 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx @@ -157,9 +157,19 @@ export const VulnerabilityTypes = () => { [setNewVulnerabilityTypeList], ); + //TODO: fix issue with the last item added being removed const onClickSave = async () => { try { - await updateVulnerabilityTypes(newVulnerabilityTypeList); + const differentLanguageTypes = vulnerabilityTypes.filter( + type => type.locale !== currentLanguage?.value, + ); + + const vulnTypeMerged = [ + ...newVulnerabilityTypeList, + ...differentLanguageTypes, + ]; + + await updateVulnerabilityTypes(vulnTypeMerged); toast.success('Vulnerability Type Updated Successfully!'); setIsEditing(false); } catch (error) { From d8f60be9ac899b9e173005c223bc3a6f1040e8c3 Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 21:12:56 -0300 Subject: [PATCH 16/30] feat: back DraggableList to the initial state on click cancel --- .../src/routes/data/CustomData/VulnerabilityTypes.tsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx index 49f66598..6695587e 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx @@ -181,6 +181,13 @@ export const VulnerabilityTypes = () => { } }; + const onClickCancel = () => { + setFilteredVulnerabilityTypes( + vulnerabilityTypes.filter(type => type.locale === currentLanguage?.value), + ); + setIsEditing(false); + }; + return (
@@ -212,7 +219,7 @@ export const VulnerabilityTypes = () => { setIsEditing(false)} + onClickCancel={onClickCancel} onClickEdit={() => setIsEditing(true)} onClickSave={onClickSave} title={t('editVulnerabilityTypes')} From 8cc9a0b7b7094f93f9e5e86df207bfb0a77b6703 Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 21:16:22 -0300 Subject: [PATCH 17/30] feat: update draggable list items after on save click --- frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx index 6695587e..21b5cc60 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx @@ -170,6 +170,7 @@ export const VulnerabilityTypes = () => { ]; await updateVulnerabilityTypes(vulnTypeMerged); + await fetchVulnerabilityTypes(currentLanguage); toast.success('Vulnerability Type Updated Successfully!'); setIsEditing(false); } catch (error) { From f31f24568991c331f94a1fade9cf94dcd893d586 Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 21:28:55 -0300 Subject: [PATCH 18/30] fix: TODO resolved: issue with the last item added being removed --- .../src/routes/data/CustomData/VulnerabilityTypeList.tsx | 6 +----- frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx | 1 - 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypeList.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypeList.tsx index 3a371b0c..daa71190 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypeList.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypeList.tsx @@ -79,11 +79,7 @@ const VulnerabilityTypeList: React.FC = ({ useEffect(() => { const updatedData = rows.map(({ id, ...rest }) => rest); - const dataHasChanged = JSON.stringify(data) !== JSON.stringify(updatedData); - - if (dataHasChanged) { - onUpdateList(updatedData); - } + onUpdateList(updatedData); }, [onUpdateList, rows, data]); return ( diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx index 21b5cc60..6bd39d0b 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx @@ -157,7 +157,6 @@ export const VulnerabilityTypes = () => { [setNewVulnerabilityTypeList], ); - //TODO: fix issue with the last item added being removed const onClickSave = async () => { try { const differentLanguageTypes = vulnerabilityTypes.filter( From 35466dd2d4e7e787ea85ad3b45d4fdf8a9546788 Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 21:53:12 -0300 Subject: [PATCH 19/30] feat: add i18n translations for vulnerability types --- frontend/src/i18n/en-US/index.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/frontend/src/i18n/en-US/index.ts b/frontend/src/i18n/en-US/index.ts index 63e799e8..d19e1896 100644 --- a/frontend/src/i18n/en-US/index.ts +++ b/frontend/src/i18n/en-US/index.ts @@ -162,6 +162,8 @@ export default { passwordsDoNotMatch: 'Passwords do not match', auditCustomSectionsSaveSuccess: 'The custom sections have been saved successfully', + vulnerabilityTypeCreatedOk: 'Vulnerability Type Created Successfully!', + vulnerabilityTypesUpdatedOk: 'Vulnerability Types Updated Successfully!', }, err: { notDefinedLanguage: 'Not defined for this language', @@ -202,6 +204,8 @@ export default { passwordsDontMatch: 'Passwords do not match', errorGeneratingPdf: 'Failed exporting audit to pdf', errorSavingAuditCustomSections: 'Failed saving the audit custom sections', + failedCreatingVulnerabilityType: 'Failed to create vulnerability type', + failedUpdatingVulnerabilityTypes: 'Failed to update vulnerability types', }, cvss: { title: 'CVSS v3.1 Base Score', @@ -733,4 +737,5 @@ export default { recommendCVSS: 'Recommend CVSS', cleanRecommendations: 'Clean Recommendations', errorRecommendingCVSS: 'Error generating recommendation', + vulnerabilityType: 'Vulnerability Type', }; From d8aae7f2b705a3a1c85495cee96af2cb5035e814 Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 21:53:52 -0300 Subject: [PATCH 20/30] feat: add i18n translations to fields --- .../data/CustomData/VulnerabilityTypeList.tsx | 3 ++- .../data/CustomData/VulnerabilityTypes.tsx | 20 +++++++++---------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypeList.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypeList.tsx index daa71190..231d1bfa 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypeList.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypeList.tsx @@ -1,4 +1,5 @@ import { Bars2Icon } from '@heroicons/react/24/outline'; +import { t } from 'i18next'; import React, { useEffect, useState } from 'react'; import PrimaryButton from '../../../components/button/PrimaryButton'; @@ -58,7 +59,7 @@ const VulnerabilityTypeList: React.FC = ({ id="name" name="name" onChange={e => handleInputChange(row.id, e)} - placeholder="Vulnerability Type" + placeholder={t('vulnerabilityType')} type="text" value={row.name} /> diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx index 6bd39d0b..9a01a217 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx @@ -67,7 +67,7 @@ export const VulnerabilityTypes = () => { return languagesConverted[0]; } } catch (err) { - console.error('Error:', err); + console.error(err); } setLoadingLanguages(false); return null; @@ -92,7 +92,7 @@ export const VulnerabilityTypes = () => { ), ); } catch (err) { - console.error('Error:', err); + console.error(err); } }, [], @@ -105,7 +105,7 @@ export const VulnerabilityTypes = () => { await fetchVulnerabilityTypes(languageSelected); setLoadingVulnerabilityTypes(false); } catch (error) { - console.error('Error:', error); + console.error(error); } }, [fetchLanguages, fetchVulnerabilityTypes]); @@ -127,16 +127,16 @@ export const VulnerabilityTypes = () => { if (addVulnType.status === 'success') { await fetchVulnerabilityTypes(currentLanguage); - toast.success('Vulnerability Type Created Successfully!'); + toast.success(t('msg.vulnerabilityTypeCreatedOk')); setNewVulnerabilityType(''); } } catch (error) { - console.error('Error:', error); + console.error(error); - toast.error('Error creating vulnerability type'); + //TODO: change translation to title already exists + toast.error(t('err.failedCreatingVulnerabilityType')); return; } - toast.success('There was an error'); }; const onChangeLanguage = (value: ListItem) => { @@ -170,12 +170,12 @@ export const VulnerabilityTypes = () => { await updateVulnerabilityTypes(vulnTypeMerged); await fetchVulnerabilityTypes(currentLanguage); - toast.success('Vulnerability Type Updated Successfully!'); + toast.success(t('msg.vulnerabilityTypesUpdatedOk')); setIsEditing(false); } catch (error) { - console.error('Error:', error); + console.error(error); - toast.error('Error updating vulnerability types'); + toast.error(t('err.failedUpdatingVulnerabilityTypes')); setIsEditing(false); return; } From 80a8c056bd438da83c2580ae91e2d9112b797811 Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 21:56:12 -0300 Subject: [PATCH 21/30] fix: eslint alert --- frontend/src/routes/data/CustomData/VulnerabilityTypeList.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypeList.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypeList.tsx index 231d1bfa..b04277a2 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypeList.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypeList.tsx @@ -79,6 +79,7 @@ const VulnerabilityTypeList: React.FC = ({ }, [data]); useEffect(() => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars const updatedData = rows.map(({ id, ...rest }) => rest); onUpdateList(updatedData); }, [onUpdateList, rows, data]); From f08d76d8b28ba64e729fc948490f1112efb9a98f Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 22:10:10 -0300 Subject: [PATCH 22/30] feat: add i18n translations for vulnerability types errors --- frontend/src/i18n/en-US/index.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/frontend/src/i18n/en-US/index.ts b/frontend/src/i18n/en-US/index.ts index d19e1896..722ed7ad 100644 --- a/frontend/src/i18n/en-US/index.ts +++ b/frontend/src/i18n/en-US/index.ts @@ -1,3 +1,5 @@ +import { VulnerabilityTypes } from '@/routes/data/CustomData/VulnerabilityTypes'; + /* eslint-disable sonarjs/no-duplicate-string */ export default { aria: { @@ -206,6 +208,7 @@ export default { errorSavingAuditCustomSections: 'Failed saving the audit custom sections', failedCreatingVulnerabilityType: 'Failed to create vulnerability type', failedUpdatingVulnerabilityTypes: 'Failed to update vulnerability types', + vulnerabilityTypeAlreadyExists: 'Vulnerability Type already exists', }, cvss: { title: 'CVSS v3.1 Base Score', From 29b907cefa562188ca9aee0f5e6d0fc823e48d22 Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 22:11:10 -0300 Subject: [PATCH 23/30] fix: remove import introduced in last commit --- frontend/src/i18n/en-US/index.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/frontend/src/i18n/en-US/index.ts b/frontend/src/i18n/en-US/index.ts index 722ed7ad..5b205af7 100644 --- a/frontend/src/i18n/en-US/index.ts +++ b/frontend/src/i18n/en-US/index.ts @@ -1,5 +1,3 @@ -import { VulnerabilityTypes } from '@/routes/data/CustomData/VulnerabilityTypes'; - /* eslint-disable sonarjs/no-duplicate-string */ export default { aria: { From fad3e248272abb9c68235aea3ba33ec2692ac272 Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 22:11:36 -0300 Subject: [PATCH 24/30] feat: add vuln type already exists error --- frontend/src/services/data.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/frontend/src/services/data.ts b/frontend/src/services/data.ts index 5c38ba5b..25e2809a 100644 --- a/frontend/src/services/data.ts +++ b/frontend/src/services/data.ts @@ -716,9 +716,15 @@ export const createVulnerabilityType = async ( credentials: 'include', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(vulnerabilityType), - }); // Incluir token + }); if (!response.ok) { - throw new Error(networkErrorMsg); + const errorText = await response.text(); + const errorData = JSON.parse(errorText).datas; + if (errorData === 'Vulnerability Type already exists') { + throw new Error(errorData); + } else { + throw new Error(networkErrorMsg); + } } return await response.json(); } catch (error) { @@ -740,7 +746,7 @@ export const updateVulnerabilityTypes = async ( credentials: 'include', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(vulnerabilityType), - }); // Incluir token + }); if (!response.ok) { throw new Error(networkErrorMsg); } From ff63eee308876073e2b19ec6580769d17c2c1138 Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 22:12:07 -0300 Subject: [PATCH 25/30] feat: add toast message if vuln Type already exists --- .../routes/data/CustomData/VulnerabilityTypes.tsx | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx index 9a01a217..6ad356d4 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx @@ -132,9 +132,15 @@ export const VulnerabilityTypes = () => { } } catch (error) { console.error(error); - - //TODO: change translation to title already exists - toast.error(t('err.failedCreatingVulnerabilityType')); + if ( + error instanceof Error && + error.message === 'Vulnerability Type already exists' + ) { + toast.error(t('err.vulnerabilityTypeAlreadyExists')); + } else { + toast.error(t('err.failedCreatingVulnerabilityType')); + } + console.error('Error:', error); return; } }; From de0fb37c31d10c70fde42fe2f8445a8af536b7a5 Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 22:41:53 -0300 Subject: [PATCH 26/30] fix: remove useless dependency in useEffect --- frontend/src/routes/data/CustomData/VulnerabilityTypeList.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypeList.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypeList.tsx index b04277a2..f67eb486 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypeList.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypeList.tsx @@ -82,7 +82,7 @@ const VulnerabilityTypeList: React.FC = ({ // eslint-disable-next-line @typescript-eslint/no-unused-vars const updatedData = rows.map(({ id, ...rest }) => rest); onUpdateList(updatedData); - }, [onUpdateList, rows, data]); + }, [onUpdateList, rows]); return (
From 0105d2276c1886652e799f7d7253753e6b79f5e3 Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 22:43:30 -0300 Subject: [PATCH 27/30] chore: remove TODO already implemented --- frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx index 6ad356d4..f8bd0c94 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx @@ -27,7 +27,6 @@ type VulnerabilityType = { locale: string; }; -//TODO: change texts to i18n translations export const VulnerabilityTypes = () => { const [languages, setLanguages] = useState([]); const [currentLanguage, setCurrentLanguage] = useState(null); From 50f3c7479847d2a52ec401a9cc17c107abd9181f Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 22:53:59 -0300 Subject: [PATCH 28/30] fix: replace inline prop types with VulnerabilityType --- .../src/routes/data/CustomData/VulnerabilityTypes.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx index f8bd0c94..9b4743bf 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx @@ -33,11 +33,11 @@ export const VulnerabilityTypes = () => { const [loadingLanguages, setLoadingLanguages] = useState(true); const [vulnerabilityTypes, setVulnerabilityTypes] = useState< - { name: string; locale: string }[] + VulnerabilityType[] >([]); const [filteredVulnerabilityTypes, setFilteredVulnerabilityTypes] = useState< - { name: string; locale: string }[] + VulnerabilityType[] >([]); const [newVulnerabilityType, setNewVulnerabilityType] = useState(''); @@ -152,11 +152,11 @@ export const VulnerabilityTypes = () => { }; const [newVulnerabilityTypeList, setNewVulnerabilityTypeList] = useState< - { name: string; locale: string }[] + VulnerabilityType[] >([]); const handleUpdateVulnerabilityType = useCallback( - (data: { name: string; locale: string }[]) => { + (data: VulnerabilityType[]) => { setNewVulnerabilityTypeList(data); }, [setNewVulnerabilityTypeList], From c2b1d4e72ee515a845902d640293268fd1ab71bd Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Tue, 12 Nov 2024 23:25:21 -0300 Subject: [PATCH 29/30] fix: revert relative path to absolute path --- .../routes/data/CustomData/VulnerabilityTypes.tsx | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx index 9b4743bf..7178bd82 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx @@ -3,17 +3,18 @@ import { t } from 'i18next'; import { useCallback, useEffect, useState } from 'react'; import { toast } from 'sonner'; -import PrimaryButton from '../../../components/button/PrimaryButton'; -import EditCard from '../../../components/card/EditCard'; -import SelectDropdown from '../../../components/dropdown/SelectDropdown'; -import SimpleInput from '../../../components/input/SimpleInput'; -import type { Language } from '../../../services/audits'; -import { getLanguages } from '../../../services/audits'; +import PrimaryButton from '@/components/button/PrimaryButton'; +import EditCard from '@/components/card/EditCard'; +import SelectDropdown from '@/components/dropdown/SelectDropdown'; +import SimpleInput from '@/components/input/SimpleInput'; +import type { Language } from '@/services/audits'; +import { getLanguages } from '@/services/audits'; import { createVulnerabilityType, getVulnerabilityTypes, updateVulnerabilityTypes, -} from '../../../services/data'; +} from '@/services/data'; + import VulnerabilityTypeList from './VulnerabilityTypeList'; type ListItem = { From de10ecc0ff7e3b51b977ca4d36bf6faafaba4a8d Mon Sep 17 00:00:00 2001 From: Julio Amaru Cerda Villablanca Date: Wed, 13 Nov 2024 11:27:55 -0300 Subject: [PATCH 30/30] fix: remove dupe console error --- frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx index 7178bd82..7fa8f09d 100644 --- a/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx +++ b/frontend/src/routes/data/CustomData/VulnerabilityTypes.tsx @@ -131,7 +131,6 @@ export const VulnerabilityTypes = () => { setNewVulnerabilityType(''); } } catch (error) { - console.error(error); if ( error instanceof Error && error.message === 'Vulnerability Type already exists'