diff --git a/public/locales/en/search.json b/public/locales/en/search.json index ebcd7b4102e0c80ddeb92556af3089cf82850a7c..8453bd3ef5396080f0e592fd2adbf8e49d70f6b1 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 dea09f16ff3aa559a68845ab477cbf6eeb90714c..189255c0ebc3161c416e51d9a258761c17a89c47 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 57080e8fe4b914f8fda724accbdc18efa7de42f3..101410a07c2b32d4c86c6f9c2a6ae67164d311f8 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 f762974d8206504c5d5abf465c6c085c19b8ff04..ef37775a31fe3a2b973b8e94905c82caee607281 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 6cfe2cf9362f84228d315ab5f204128d529fa378..d5cc589c313b89b63005dedefc395326a0b95d25 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 7c78df2d94949e182287d8846c518eeafa19bdc4..26f10787d4e09845938d541d741098a20cbafea1 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 44b14aea72cf1289a624cd662b684e3da8b3fb26..53f5ad4fe2db2bf1753770e92b0778dbe031618a 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) => {