Skip to content

Commit bd08153

Browse files
author
Sergei Aksiutin
committed
[NEP-12629] WIP
1 parent 54c646c commit bd08153

File tree

6 files changed

+2632
-3982
lines changed

6 files changed

+2632
-3982
lines changed

docs/react-components-structure.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
React Components Structure
2+
--------------------------
3+
4+
FilterBar
5+
-> FilterList
6+
-> FilterListOption
7+
-> ApplyFiltersButton
8+
-> ClearFiltersButton
9+
-> SaveFiltersButton
10+
-> SavedSearchesList
11+
-> ConfigurationButton *
12+
-> ExportResultsButton *
13+
-> BatchActionsList
14+
-> FilterDisplay
15+
-> FilterGroup
16+
-> FilterItem
17+
-> FilterButton
18+
-> FilterButton

example/public/js/react-filterbar.js

Lines changed: 2482 additions & 3965 deletions
Large diffs are not rendered by default.

src/components/FilterBar/FilterBar.react.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,6 @@ export class FilterBar extends React.Component {
1818
<div>
1919
<div>
2020
<div className="btn-group margin-bottom-sm">
21-
<FilterList
22-
disabledFilters={this.context.filterBarStore.getDisabled()}
23-
/>
24-
2521
<ApplyFiltersButton
2622
filterBarActor={this.context.filterBarActor}
2723
/>
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import { FilterListOption } from "../FilterList/FilterListOption.react";
2+
export class FilterButton extends React.Component {
3+
constructor(props) {
4+
super(props);
5+
6+
this.state = { filters: props.disabledFilters };
7+
}
8+
9+
componentDidMount() {
10+
this.context.filterBarStore.addChangeListener(this.onChange.bind(this));
11+
}
12+
13+
onChange() {
14+
this.setState(this.getStateFromStores());
15+
}
16+
17+
getStateFromStores() {
18+
return {
19+
filters: this.context.filterBarStore.getDisabled()
20+
};
21+
}
22+
23+
render() {
24+
var optionKey = "";
25+
var filterOptions = Object.keys(this.state.filters).map(function(filterUid) {
26+
optionKey = "option-" + filterUid;
27+
return (
28+
<FilterListOption
29+
filterUid={filterUid}
30+
key={optionKey}
31+
label={this.state.filters[filterUid].label}
32+
/>
33+
);
34+
}, this);
35+
return (
36+
<div className='btn-group'>
37+
<button className='btn btn-default dropdown-toggle' data-toggle='dropdown' type='button'>
38+
<span>{ this.props.title }</span>
39+
<i className='icon icon-add'></i>
40+
</button>
41+
<div className='dropdown-menu' role='menu'>
42+
<ul className='filter-options'>
43+
{filterOptions}
44+
</ul>
45+
</div>
46+
</div>
47+
)
48+
}
49+
}
50+
51+
FilterButton.contextTypes = {
52+
filterBarActor: React.PropTypes.object,
53+
filterBarStore: React.PropTypes.object
54+
};
55+
56+
FilterButton.propTypes = {
57+
disabledFilters: React.PropTypes.object.isRequired
58+
};

src/components/FilterBar/FilterDisplay/FilterDisplay.react.js

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import {FilterInput} from "./FilterInput.react";
2-
2+
import {FilterButton} from "./FilterButton.react";
3+
import {FilterGroup} from "./FilterGroup.react";
4+
import { FilterList } from "../FilterList/FilterList.react";
35
export class FilterDisplay extends React.Component {
46
constructor(props) {
57
super(props);
@@ -41,29 +43,35 @@ export class FilterDisplay extends React.Component {
4143
}
4244

4345
render() {
44-
var filters = Object.keys(this.state.filters).map(function(filterUid) {
45-
var filter = this.state.filters[filterUid];
46-
46+
var button = (
47+
<FilterButton
48+
disabledFilters={this.context.filterBarStore.getDisabled()}
49+
title="OR"
50+
/>
51+
)
52+
var filters = Object.keys(this.state.filters).map(function(filterUID) {
4753
return (
48-
<FilterInput
49-
filterUid={filterUid}
50-
key={filterUid}
51-
label={filter.label}
52-
type={filter.type}
53-
value={filter.value}
54-
operator={filter.operator}
54+
<FilterGroup
55+
filters={this.state.filters}
5556
/>
5657
);
5758
}, this);
5859

5960
if (filters.length === 0) {
60-
filters = (<div>No Filters Enabled!</div>);
61+
filters = (
62+
<FilterButton
63+
disabledFilters={this.context.filterBarStore.getDisabled()}
64+
title="ADD FILTER"
65+
/>
66+
);
67+
button = "";
6168
}
6269

6370
return (
6471
<div className="navbar filterbar">
6572
<div className="panel panel-default">
66-
{filters}
73+
<div>{filters}</div>
74+
<div>{button}</div>
6775
</div>
6876
</div>
6977
);
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import { FilterInput } from "./FilterInput.react"
2+
import { FilterButton } from "./FilterButton.react"
3+
4+
export class FilterGroup extends React.Component {
5+
constructor(props) {
6+
super(props);
7+
8+
this.state = { filters: props.filters };
9+
}
10+
11+
addFilter() {
12+
alert("Add Filter");
13+
}
14+
15+
render() {
16+
var button = (
17+
<FilterButton
18+
disabledFilters={this.context.filterBarStore.getDisabled()}
19+
title="ADD"
20+
/>
21+
)
22+
var filters = Object.keys(this.state.filters).map(function(filterUid) {
23+
var filter = this.state.filters[filterUid];
24+
25+
return (
26+
<div>
27+
<FilterInput
28+
filterUid={filterUid}
29+
key={filterUid}
30+
label={filter.label}
31+
type={filter.type}
32+
value={filter.value}
33+
operator={filter.operator}
34+
/>
35+
</div>
36+
);
37+
}, this);
38+
39+
return (
40+
<div>
41+
{filters}
42+
<div>
43+
{button}
44+
</div>
45+
</div>
46+
)
47+
}
48+
}
49+
50+
FilterGroup.contextTypes = {
51+
filterBarActor: React.PropTypes.object,
52+
filterBarStore: React.PropTypes.object
53+
};

0 commit comments

Comments
 (0)