Added an object diff check to search_results_updated reducer

This commit is contained in:
2021-09-25 08:52:29 -07:00
parent ca082b8220
commit 8db52e0407
3 changed files with 32 additions and 3 deletions

View File

@@ -117,7 +117,7 @@ export const AcquisitionPanel = (
{/* AirDC++ results */}
<div className="columns">
{!isNil(airDCPPSearchResults) && !isEmpty(airDCPPSearchResults) ? (
<table className="table is-striped">
<table className="table">
<thead>
<tr>
<th>Name</th>

View File

@@ -8,6 +8,7 @@ import {
AIRDCPP_BUNDLES_FETCHED,
} from "../constants/action-types";
import { LOCATION_CHANGE } from "connected-react-router";
import { difference } from "../shared/utils/object.utils";
const initialState = {
searchResults: [],
@@ -29,10 +30,16 @@ function airdcppReducer(state = initialState, action) {
};
case AIRDCPP_SEARCH_RESULTS_UPDATED:
const bundleToUpdateIndex = state.searchResults.findIndex(
(bundle) => bundle.id === action.groupedResult.result.id,
(bundle) => bundle.result.id === action.groupedResult.result.id,
);
const updatedState = [...state.searchResults];
updatedState[bundleToUpdateIndex] = action.groupedResult;
if (
difference(updatedState[bundleToUpdateIndex], action.groupedResult) !==
{}
) {
updatedState[bundleToUpdateIndex] = action.groupedResult;
}
return {
...state,

View File

@@ -0,0 +1,22 @@
import { transform, isEqual, isObject } from "lodash";
/**
* Deep diff between two object, using lodash
* @param {Object} object Object compared
* @param {Object} base Object to compare with
* @return {Object} Return a new object who represent the diff
*/
export const difference = (object, base) => {
return changes(object, base);
};
const changes = (object, base) => {
return transform(object, (result, value, key) => {
if (!isEqual(value, base[key])) {
result[key] =
isObject(value) && isObject(base[key])
? changes(value, base[key])
: value;
}
});
};