From c9723b29209b9aba485caad4ea4b64d7da756923 Mon Sep 17 00:00:00 2001 From: rbisson <remi.bisson@inrae.fr> Date: Fri, 13 Dec 2024 17:15:51 +0100 Subject: [PATCH] [AdvancedSearch] Corrected bug causing save search modal to refresh on input ; added toasts on history creation and creation error --- public/locales/en/search.json | 1 + public/locales/en/validation.json | 2 +- public/locales/fr/search.json | 3 +- public/locales/fr/validation.json | 2 +- src/actions/user.js | 2 +- src/context/InSylvaGatekeeperClient.js | 2 +- .../search/AdvancedSearch/AdvancedSearch.js | 73 ++++++++++--------- 7 files changed, 44 insertions(+), 41 deletions(-) diff --git a/public/locales/en/search.json b/public/locales/en/search.json index ebcd7b4..8453bd3 100644 --- a/public/locales/en/search.json +++ b/public/locales/en/search.json @@ -60,6 +60,7 @@ "addSavedSearchName": "Search name", "addSavedSearchDescription": "Description (optional)", "addSavedSearchDescriptionPlaceholder": "Search description..." + "searchSaved": "Search saved" }, "searchOptions": { "title": "Search option", diff --git a/public/locales/en/validation.json b/public/locales/en/validation.json index dea09f1..189255c 100644 --- a/public/locales/en/validation.json +++ b/public/locales/en/validation.json @@ -1,4 +1,4 @@ { "requestSent": "Your request has been sent to the administrators.", - "error": "Error:" + "error": "Error" } diff --git a/public/locales/fr/search.json b/public/locales/fr/search.json index 57080e8..101410a 100644 --- a/public/locales/fr/search.json +++ b/public/locales/fr/search.json @@ -59,7 +59,8 @@ "saveSearch": "Sauvegarder ma recherche", "addSavedSearchName": "Nom de la recherche", "addSavedSearchDescription": "Description (optionel)", - "addSavedSearchDescriptionPlaceholder": "Description de la recherche..." + "addSavedSearchDescriptionPlaceholder": "Description de la recherche...", + "searchSaved": "Recherche sauvegardée" }, "searchOptions": { "title": "Option de recherche", diff --git a/public/locales/fr/validation.json b/public/locales/fr/validation.json index f762974..ef37775 100644 --- a/public/locales/fr/validation.json +++ b/public/locales/fr/validation.json @@ -1,4 +1,4 @@ { "requestSent": "Votre requête à bien été envoyée.", - "error": "Erreur:" + "error": "Erreur" } diff --git a/src/actions/user.js b/src/actions/user.js index 6cfe2cf..d5cc589 100644 --- a/src/actions/user.js +++ b/src/actions/user.js @@ -133,7 +133,7 @@ export const addUserHistory = async (kcId, query, name, uiStructure, description igClient.token = sessionStorage.getItem('access_token'); try { const jsonUIStructure = JSON.stringify(uiStructure); - await igClient.addUserHistory(kcId, query, name, jsonUIStructure, description); + return await igClient.addUserHistory(kcId, query, name, jsonUIStructure, description); } catch (error) { console.error(error); } diff --git a/src/context/InSylvaGatekeeperClient.js b/src/context/InSylvaGatekeeperClient.js index 7c78df2..26f1078 100644 --- a/src/context/InSylvaGatekeeperClient.js +++ b/src/context/InSylvaGatekeeperClient.js @@ -83,7 +83,7 @@ class InSylvaGatekeeperClient { async addUserHistory(kcId, query, name, uiStructure, description) { const path = `/user/add-history`; - await this.post('POST', `${path}`, { + return await this.post('POST', `${path}`, { kcId, query, name, diff --git a/src/pages/search/AdvancedSearch/AdvancedSearch.js b/src/pages/search/AdvancedSearch/AdvancedSearch.js index 44b14ae..53f5ad4 100644 --- a/src/pages/search/AdvancedSearch/AdvancedSearch.js +++ b/src/pages/search/AdvancedSearch/AdvancedSearch.js @@ -48,6 +48,7 @@ import styles from './styles.js'; import moment from 'moment'; import SearchModeSwitcher from '../SearchModeSwitcher'; import { toast } from 'react-toastify'; +import ToastMessage from '../../../components/ToastMessage/ToastMessage'; const updateSources = ( searchFields, @@ -129,25 +130,6 @@ const fieldValuesToString = (field) => { return strValues; }; -const addHistory = ( - kcID, - search, - searchName, - searchFields, - searchDescription, - setUserHistory -) => { - addUserHistory( - sessionStorage.getItem('kcId'), - search, - searchName, - searchFields, - searchDescription - ).then(() => { - fetchHistory(setUserHistory); - }); -}; - const fetchHistory = (setUserHistory) => { fetchUserHistory(sessionStorage.getItem('kcId')).then((result) => { if (result[0] && result[0].ui_structure) { @@ -279,8 +261,6 @@ const SearchBar = ({ const [isLoading, setIsLoading] = useState(false); const [userHistory, setUserHistory] = useState({}); const [isSaveSearchModalOpen, setIsSaveSearchModalOpen] = useState(false); - const [searchDescription, setSearchDescription] = useState(''); - const [searchName, setSearchName] = useState(''); const [readOnlyQuery, setReadOnlyQuery] = useState(true); const closeSaveSearchModal = () => { @@ -322,23 +302,44 @@ const SearchBar = ({ } }; - const onClickSaveSearch = () => { - if (!!searchName) { - addHistory( - sessionStorage.getItem('kcId'), - search, - searchName, - searchFields, - searchDescription, - setUserHistory - ); - setSearchName(''); - setSearchDescription(''); - closeSaveSearchModal(); - } + const addHistory = ( + search, + searchName, + searchFields, + searchDescription, + setUserHistory + ) => { + addUserHistory( + sessionStorage.getItem('kcId'), + search, + searchName, + searchFields, + searchDescription + ).then((result) => { + if (result.error) { + toast.error( + <ToastMessage title={t('validation:error')} message={result.error} /> + ); + } else { + toast.success(t('search:advancedSearch.searchHistory.searchSaved')); + } + fetchHistory(setUserHistory); + }); }; const SaveSearchModal = () => { + const [searchName, setSearchName] = useState(''); + const [searchDescription, setSearchDescription] = useState(''); + + const onClickSaveSearch = () => { + if (!!searchName) { + addHistory(search, searchName, searchFields, searchDescription, setUserHistory); + setSearchName(''); + setSearchDescription(''); + closeSaveSearchModal(); + } + }; + return ( <EuiOverlayMask> <EuiModal onClose={closeSaveSearchModal} initialFocus="[name=searchName]"> @@ -630,7 +631,7 @@ const PopoverValueContent = ({ availableSources, setAvailableSources, }) => { - const { t } = useTranslation(['search', 'common']); + const { t } = useTranslation(['search', 'common', 'validation']); const [valueError, setValueError] = useState(undefined); const onValueSearchChange = (value, hasMatchingOptions) => { -- GitLab