I'm new to react and want to make search filter for multiple data in the object. I've tried for filtering single data, code is as shown below:
var {Data, search} =this.state;
search = this.state.search.trim().toLowerCase();
if (search.length > 0) {
Data= Data.filter(function(i) {
return i.firstName.toLowerCase().match( search );
});
}
It is working great but only for the firstName. But my objective is to get filter for lastName, Location and Skills also.
Here is the code:
export default class DataView extends React.Component {
constructor() {
super();
this.state = {
Data: [],
search: ""
};
}
componentDidMount() {
this.fetchData();
}
fetchData() {
fetch("api/Profile")
.then(response => response.json())
.then(data => {
this.setState({
Data: data.item1
});
});
}
handleSearch = e => {
this.setState({ search: e.target.value });
};
render() {
var { Data, search } = this.state;
search = this.state.search.trim().toLowerCase();
if (search.length > 0) {
Data = Data.filter(function(i) {
return i.firstName.toLowerCase().match(search);
});
}
return (
<div>
<Segment className="p_segment">
<Input
icon="search"
placeholder="Search..."
className="a_Search"
value={this.state.search}
onChange={this.handleSearch}
/>
</Segment>
<Container className="p_view">
{Data.map(View => {
return (
<Grid key={View.id}>
<Grid.Row className=" p_header">
<Checkbox className="p_checkbox" />
<Header>
{" "}
{View.firstName} {View.lastName}{" "}
</Header>
</Grid.Row>
<Divider className="p_divider" />
<Grid.Row>
<Icon name="marker" /> {View.location}
<Divider className="p_divider" />
</Grid.Row>
<Grid.Row>
<Grid.Column>
<div>
<div className="g_column">
{View.skillset.map(data => {
return (
<Label className="c_label">{data.skill}</Label>
);
})}
</div>
</div>
</Grid.Column>
</Grid.Row>
</Grid>
);
})}
</Container>
</div>
);
}
}
Can anyone help me in this Query?