2018-03-15 01:28:46 +00:00
|
|
|
import _ from 'lodash';
|
|
|
|
import { connect } from 'react-redux';
|
|
|
|
import { createSelector } from 'reselect';
|
|
|
|
import { filterBuilderTypes } from 'Helpers/Props';
|
2019-08-05 02:57:30 +00:00
|
|
|
import * as filterTypes from 'Helpers/Props/filterTypes';
|
2020-09-07 01:33:10 +00:00
|
|
|
import sortByName from 'Utilities/Array/sortByName';
|
2018-03-15 01:28:46 +00:00
|
|
|
import FilterBuilderRowValue from './FilterBuilderRowValue';
|
|
|
|
|
|
|
|
function createTagListSelector() {
|
|
|
|
return createSelector(
|
2019-08-05 02:57:30 +00:00
|
|
|
(state, { filterType }) => filterType,
|
2018-08-08 00:57:15 +00:00
|
|
|
(state, { sectionItems }) => sectionItems,
|
2018-03-15 01:28:46 +00:00
|
|
|
(state, { selectedFilterBuilderProp }) => selectedFilterBuilderProp,
|
2019-08-05 02:57:30 +00:00
|
|
|
(filterType, sectionItems, selectedFilterBuilderProp) => {
|
2018-03-15 01:28:46 +00:00
|
|
|
if (
|
2019-08-05 02:57:30 +00:00
|
|
|
(selectedFilterBuilderProp.type === filterBuilderTypes.NUMBER ||
|
|
|
|
selectedFilterBuilderProp.type === filterBuilderTypes.STRING) &&
|
|
|
|
filterType !== filterTypes.EQUAL &&
|
2021-06-27 04:05:34 +00:00
|
|
|
filterType !== filterTypes.NOT_EQUAL ||
|
2019-08-05 02:57:30 +00:00
|
|
|
!selectedFilterBuilderProp.optionsSelector
|
2018-03-15 01:28:46 +00:00
|
|
|
) {
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
|
|
|
|
let items = [];
|
|
|
|
|
|
|
|
if (selectedFilterBuilderProp.optionsSelector) {
|
2018-08-08 00:57:15 +00:00
|
|
|
items = selectedFilterBuilderProp.optionsSelector(sectionItems);
|
2018-03-15 01:28:46 +00:00
|
|
|
} else {
|
2018-08-08 00:57:15 +00:00
|
|
|
items = sectionItems.reduce((acc, item) => {
|
2018-03-15 01:28:46 +00:00
|
|
|
const name = item[selectedFilterBuilderProp.name];
|
|
|
|
|
2018-08-08 00:57:15 +00:00
|
|
|
if (name) {
|
|
|
|
acc.push({
|
|
|
|
id: name,
|
|
|
|
name
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
return acc;
|
|
|
|
}, []).sort(sortByName);
|
2018-03-15 01:28:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return _.uniqBy(items, 'id');
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
function createMapStateToProps() {
|
|
|
|
return createSelector(
|
|
|
|
createTagListSelector(),
|
|
|
|
(tagList) => {
|
|
|
|
return {
|
|
|
|
tagList
|
|
|
|
};
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
export default connect(createMapStateToProps)(FilterBuilderRowValue);
|