mirror of https://github.com/lidarr/Lidarr
56 lines
1.4 KiB
JavaScript
56 lines
1.4 KiB
JavaScript
import _ from 'lodash';
|
|
import { connect } from 'react-redux';
|
|
import { createSelector } from 'reselect';
|
|
import sortByName from 'Utilities/Array/sortByName';
|
|
import { filterBuilderTypes } from 'Helpers/Props';
|
|
import FilterBuilderRowValue from './FilterBuilderRowValue';
|
|
|
|
function createTagListSelector() {
|
|
return createSelector(
|
|
(state, { sectionItems }) => sectionItems,
|
|
(state, { selectedFilterBuilderProp }) => selectedFilterBuilderProp,
|
|
(sectionItems, selectedFilterBuilderProp) => {
|
|
if (
|
|
selectedFilterBuilderProp.type === filterBuilderTypes.NUMBER ||
|
|
selectedFilterBuilderProp.type === filterBuilderTypes.STRING
|
|
) {
|
|
return [];
|
|
}
|
|
|
|
let items = [];
|
|
|
|
if (selectedFilterBuilderProp.optionsSelector) {
|
|
items = selectedFilterBuilderProp.optionsSelector(sectionItems);
|
|
} else {
|
|
items = sectionItems.reduce((acc, item) => {
|
|
const name = item[selectedFilterBuilderProp.name];
|
|
|
|
if (name) {
|
|
acc.push({
|
|
id: name,
|
|
name
|
|
});
|
|
}
|
|
|
|
return acc;
|
|
}, []).sort(sortByName);
|
|
}
|
|
|
|
return _.uniqBy(items, 'id');
|
|
}
|
|
);
|
|
}
|
|
|
|
function createMapStateToProps() {
|
|
return createSelector(
|
|
createTagListSelector(),
|
|
(tagList) => {
|
|
return {
|
|
tagList
|
|
};
|
|
}
|
|
);
|
|
}
|
|
|
|
export default connect(createMapStateToProps)(FilterBuilderRowValue);
|