014eb27a26
Don't update state if we know items are equal to avoid reselections. Don't pass LastInfoUpdate to frontend to prevent useless updates (the field isn't used)
46 lines
1.0 KiB
JavaScript
46 lines
1.0 KiB
JavaScript
import { createSelector, createSelectorCreator, defaultMemoize } from 'reselect';
|
|
import createClientSideCollectionSelector from './createClientSideCollectionSelector';
|
|
import hasDifferentItemsOrOrder from 'Utilities/Object/hasDifferentItemsOrOrder';
|
|
|
|
function createUnoptimizedSelector(uiSection) {
|
|
return createSelector(
|
|
createClientSideCollectionSelector('artist', uiSection),
|
|
(artist) => {
|
|
const items = artist.items.map((s) => {
|
|
const {
|
|
id,
|
|
sortName
|
|
} = s;
|
|
|
|
return {
|
|
id,
|
|
sortName
|
|
};
|
|
});
|
|
|
|
return {
|
|
...artist,
|
|
items
|
|
};
|
|
}
|
|
);
|
|
}
|
|
|
|
function artistListEqual(a, b) {
|
|
return hasDifferentItemsOrOrder(a, b);
|
|
}
|
|
|
|
const createArtistEqualSelector = createSelectorCreator(
|
|
defaultMemoize,
|
|
artistListEqual
|
|
);
|
|
|
|
function createArtistClientSideCollectionItemsSelector(uiSection) {
|
|
return createArtistEqualSelector(
|
|
createUnoptimizedSelector(uiSection),
|
|
(artist) => artist
|
|
);
|
|
}
|
|
|
|
export default createArtistClientSideCollectionItemsSelector;
|