29 lines
899 B
TypeScript
29 lines
899 B
TypeScript
import { createSelector, EntityId } from '@reduxjs/toolkit';
|
|
import { intersection } from 'lodash';
|
|
import { AppState } from 'store';
|
|
|
|
export const selectAllDownloads = (state: AppState) => state.downloads;
|
|
export const selectDownloadedEntities = (state: AppState) => state.downloads.entities;
|
|
|
|
/**
|
|
* Only retain the supplied trackIds that have successfully been downloaded
|
|
*/
|
|
export const selectDownloadedTracks = (trackIds: EntityId[]) => (
|
|
createSelector(
|
|
selectAllDownloads,
|
|
({ entities, ids }) => {
|
|
return intersection(trackIds, ids)
|
|
.filter((id) => entities[id]?.isComplete);
|
|
}
|
|
)
|
|
);
|
|
|
|
/**
|
|
* Select a boolean that indicates whether the track is downloaded
|
|
*/
|
|
export const selectIsDownloaded = (trackId: string) => (
|
|
createSelector(
|
|
selectDownloadedEntities,
|
|
(entities) => entities[trackId]?.isComplete,
|
|
)
|
|
); |