diff --git a/blueocean-personalization/src/main/js/components/DashboardCards.jsx b/blueocean-personalization/src/main/js/components/DashboardCards.jsx index 9a752cb3..7ca96b9a 100644 --- a/blueocean-personalization/src/main/js/components/DashboardCards.jsx +++ b/blueocean-personalization/src/main/js/components/DashboardCards.jsx @@ -92,7 +92,7 @@ const extractPath = (path, begin, end) => { export class DashboardCards extends Component { _onFavoriteToggle(isFavorite, favorite) { - this.props.toggleFavorite(isFavorite, favorite.item); + this.props.toggleFavorite(isFavorite, favorite.item, favorite); } _renderCardStack() { diff --git a/blueocean-personalization/src/main/js/components/FavoritePipeline.jsx b/blueocean-personalization/src/main/js/components/FavoritePipeline.jsx index 18d87fd4..a6b12d90 100644 --- a/blueocean-personalization/src/main/js/components/FavoritePipeline.jsx +++ b/blueocean-personalization/src/main/js/components/FavoritePipeline.jsx @@ -38,18 +38,21 @@ export class FavoritePipeline extends Component { } } + _findMatchingFavorite(pipeline, favorites) { + if (!pipeline || !favorites) { + return null; + } + + return favorites.find((fav) => { + const favUrl = fav.item._links.self.href; + const pipelineUrl = pipeline._links.self.href; + return checkMatchingFavoriteUrls(favUrl, pipelineUrl); + }); + } + _updateState(props) { const { pipeline } = props; - let favorite = null; - - if (props.favorites) { - favorite = props.favorites.find((fav) => { - const favUrl = fav.item._links.self.href; - const pipelineUrl = pipeline._links.self.href; - - return checkMatchingFavoriteUrls(favUrl, pipelineUrl); - }); - } + const favorite = this._findMatchingFavorite(pipeline, props.favorites); this.setState({ favorite: !!favorite, @@ -62,8 +65,10 @@ export class FavoritePipeline extends Component { favorite: isFavorite, }); + const favorite = this._findMatchingFavorite(this.props.pipeline, this.props.favorites); + if (this.props.toggleFavorite) { - this.props.toggleFavorite(isFavorite, this.props.pipeline); + this.props.toggleFavorite(isFavorite, this.props.pipeline, favorite); } } diff --git a/blueocean-personalization/src/main/js/redux/FavoritesActions.jsx b/blueocean-personalization/src/main/js/redux/FavoritesActions.jsx index 0343d011..109768f5 100644 --- a/blueocean-personalization/src/main/js/redux/FavoritesActions.jsx +++ b/blueocean-personalization/src/main/js/redux/FavoritesActions.jsx @@ -78,10 +78,14 @@ export const actions = { }; }, - toggleFavorite(addFavorite, branch) { + toggleFavorite(addFavorite, branch, favoriteToRemove) { return (dispatch) => { const baseUrl = urlConfig.jenkinsRootURL; - const url = `${baseUrl}${branch._links.self.href}/favorite`; + + const url = addFavorite ? + `${baseUrl}${branch._links.self.href}/favorite` : + `${baseUrl}${favoriteToRemove._links.self.href}`; + const fetchOptions = { ...defaultFetchOptions, method: 'PUT',