From 6808ba26f29e138da67c6591c48e0e767c4e1177 Mon Sep 17 00:00:00 2001 From: Luca Orlandini Date: Fri, 10 Sep 2021 17:34:41 +0200 Subject: [PATCH] Removing a favorite doesn't update the favorites list and the resource cannot be set as favorite again (#496) * fix FavoriteList * update UI with state value * change error chach * fix lint * set favorite with api callback * rm undefined in loading status --- .../ContentsEditable/TextEditable.jsx | 2 +- .../client/js/epics/favorite.js | 18 ++++++++---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/geonode_mapstore_client/client/js/components/ContentsEditable/TextEditable.jsx b/geonode_mapstore_client/client/js/components/ContentsEditable/TextEditable.jsx index 490cf1ee6c..0154cfda7a 100644 --- a/geonode_mapstore_client/client/js/components/ContentsEditable/TextEditable.jsx +++ b/geonode_mapstore_client/client/js/components/ContentsEditable/TextEditable.jsx @@ -10,7 +10,7 @@ import ContentEditable from 'react-contenteditable'; const TextEditable = forwardRef(({ - text, + text = "", className = "gn-text-editable", tagName, disabled, diff --git a/geonode_mapstore_client/client/js/epics/favorite.js b/geonode_mapstore_client/client/js/epics/favorite.js index 950e55d892..cfa7119ffc 100644 --- a/geonode_mapstore_client/client/js/epics/favorite.js +++ b/geonode_mapstore_client/client/js/epics/favorite.js @@ -23,26 +23,25 @@ export const gnSaveFavoriteContent = (action$, store) => action$.ofType(SET_FAVORITE_RESOURCE) .switchMap((action) => { const state = store.getState(); - const pk = state?.gnresource?.data.pk; - const isFavoriteList = (state?.gnsearch?.params?.f === 'favorite') ? true : false; + const pk = state?.gnresource?.data?.pk; + const isFavoriteList = (state?.gnsearch?.params?.f?.includes('favorite')) ? true : false; const resource = state?.gnresource?.data; const favorite = action.favorite; const resources = store.getState().gnsearch?.resources || []; + const newResources = isFavoriteList ? ((resources.some(item => item.pk === resource.pk)) ? + resources.filter((item) => item.pk !== resource.pk) + : [...resources, resource]) : resources; + + return Observable .defer(() => setFavoriteResource(pk, favorite)) .switchMap(() => { - const newResources = (resources.some(item => item.pk === resource.pk)) ? - resources.filter((item) => item.pk !== resource.pk) - : [...resources, resource]; - return Observable.of( updateResourceProperties({ 'favorite': favorite }), - isFavoriteList && updateResources(newResources, true) - + updateResources(newResources, true) ); - }) .catch((error) => { return Observable.of(resourceError(error.data || error.message)); @@ -50,7 +49,6 @@ export const gnSaveFavoriteContent = (action$, store) => }); - export default { gnSaveFavoriteContent };