Skip to content
This repository has been archived by the owner on Dec 13, 2020. It is now read-only.

Implement composite filter support for DocumentList #1021 #1155

Merged
merged 1 commit into from
Aug 23, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 36 additions & 13 deletions src/components/filters/Filters.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@ class Filters extends Component {
componentWillReceiveProps(props) {
const {filtersActive} = props;

this.init(filtersActive ? filtersActive[0] : null);
this.init(filtersActive ? filtersActive : null);
}

componentDidMount() {
const {filtersActive} = this.props;
filtersActive && this.init(filtersActive[0]);
filtersActive && this.init(filtersActive);
}

init = (filter) => {
Expand All @@ -44,24 +44,36 @@ class Filters extends Component {
this.setState({
notValidFields: !valid
}, () => {
if (valid){
if (valid) {
const parsedFilter = filter.parameters ?
Object.assign({}, filter, {
parameters: this.parseToPatch(filter.parameters)
}) : filter;
this.setFilterActive([parsedFilter]);

this.setFilterActive(parsedFilter);

cb && cb();
}
});
}

setFilterActive = (filter) => {
const {updateDocList} = this.props;
setFilterActive = (filterToAdd) => {
const { updateDocList } = this.props;
const { filter } = this.state;

let newFilter;
if (filter) {
newFilter = filter.filter( (item) => item.filterId !== filterToAdd.filterId );
newFilter.push(filterToAdd);
}
else {
newFilter = [filterToAdd];
}

this.setState({
filter: filter
filter: newFilter
}, () => {
updateDocList(filter);
updateDocList(newFilter);
})
}

Expand All @@ -75,8 +87,19 @@ class Filters extends Component {
})
}

clearFilters = () => {
this.setFilterActive(null)
clearFilters = (filterToClear) => {
const { updateDocList } = this.props;
const { filter } = this.state;

if (filter) {
let newFilter = filter.filter( (item) => item.filterId !== filterToClear.filterId );

this.setState({
filter: newFilter
}, () => {
updateDocList(newFilter);
})
}
}

dropdownToggled = () => {
Expand All @@ -97,13 +120,13 @@ class Filters extends Component {
}

isFilterValid = (filters) => {
if(filters.parameters){
if (filters.parameters) {
return !(filters.parameters.filter(
item => item.mandatory && !item.value
).length);
}else{
return true;
}

return true;
}

parseToPatch = (params) => {
Expand Down
18 changes: 15 additions & 3 deletions src/components/filters/FiltersFrequent.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,19 +30,31 @@ class FiltersFrequent extends Component {
dropdownToggled();
}

isActive(filterId) {
const { active } = this.props;
let result = false;

if (active) {
let activeFilter = active.find( (item) => item.filterId === filterId );
result = (typeof activeFilter !== 'undefined') && activeFilter;
}

return result;
}

render() {
const {
data, windowType, notValidFields, viewId, handleShow,
applyFilters, clearFilters, active
} = this.props;

const {openFilterId} = this.state;
const { openFilterId } = this.state;

return (
<div className="filter-wrapper">
{data.map((item, index) => {
const isActive =
active && (active.filterId == item.filterId);
const isActive = this.isActive(item.filterId);

return (
<div className="filter-wrapper" key={index}>
<button
Expand Down
21 changes: 14 additions & 7 deletions src/components/filters/FiltersItem.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ class FiltersItem extends Component {
filter: props.data,
isTooltipShow: false
}

}

componentWillMount() {
Expand All @@ -36,14 +35,19 @@ class FiltersItem extends Component {
}

init = () => {
const {active} = this.props;
const {filter} = this.state;
const { active, data } = this.props;
const { filter } = this.state;
let activeFilter;

if (active) {
activeFilter = active.find( (item) => item.filterId === data.filterId );
}

if(
filter.parameters && active && active.parameters &&
(active.filterId === filter.filterId)
filter.parameters && activeFilter && activeFilter.parameters &&
(activeFilter.filterId === filter.filterId)
){
active.parameters.map(item => {
activeFilter.parameters.map(item => {
this.mergeData(
item.parameterName,
item.value != null ? item.value : '',
Expand Down Expand Up @@ -120,8 +124,11 @@ class FiltersItem extends Component {
const {
clearFilters, closeFilterMenu, returnBackToDropdown
} = this.props;
const {
filter
} = this.state;

clearFilters();
clearFilters(filter);
closeFilterMenu();
returnBackToDropdown && returnBackToDropdown();
}
Expand Down
23 changes: 18 additions & 5 deletions src/components/filters/FiltersNotFrequent.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,25 @@ class FiltersNotFrequent extends Component {
applyFilters, clearFilters, active
} = this.props;

const {isOpenDropdown, openFilterId} = this.state;
const { isOpenDropdown, openFilterId } = this.state;

const openFilter =
getItemsByProperty(data, 'filterId', openFilterId)[0];
const activeFilter = active &&
getItemsByProperty(data, 'filterId', active.filterId)[0];

let activeFilter, activeFilterModel;
let activeFilterCaption = openFilter && openFilter.caption;
if (active && data) {
activeFilter = active.find( (item) => {
return data.find( (dataItem) => {
if (dataItem.filterId === item.filterId) {
activeFilterModel = dataItem;
activeFilterCaption = dataItem.caption;
}

return (dataItem.filterId === item.filterId);
});
});
}
const isActive = !!activeFilter;

return (
Expand All @@ -69,7 +82,7 @@ class FiltersNotFrequent extends Component {
}
>
<i className="meta-icon-preview" />
{ isActive ? 'Filter: ' + activeFilter.caption : 'Filter'}
{ activeFilter ? 'Filter: ' + activeFilterCaption : 'Filter'}
</button>

{ isOpenDropdown &&
Expand All @@ -90,7 +103,7 @@ class FiltersNotFrequent extends Component {
:
<FiltersItem
windowType={windowType}
data={openFilter || activeFilter}
data={activeFilterModel || openFilter}
closeFilterMenu={() =>
this.toggleDropdown(false)
}
Expand Down