Skip to content

Instantly share code, notes, and snippets.

@divyanshu013
Last active January 4, 2018 20:07
Show Gist options
  • Save divyanshu013/9b2e9641ea677d837aa534aa2fa8af39 to your computer and use it in GitHub Desktop.
Save divyanshu013/9b2e9641ea677d837aa534aa2fa8af39 to your computer and use it in GitHub Desktop.
Results component for GitXplore app
import React from 'react';
import { SelectedFilters, ReactiveList } from '@appbaseio/reactivesearch';
import PropTypes from 'prop-types';
import Topic from './Topic';
const onResultStats = (results, time) => (
<div className="flex justify-end">
{results} results found in {time}ms
</div>
);
const onData = (data, currentTopics, toggleTopic) => (
<div className="result-item" key={data.fullname}>
<div className="flex justify-center align-center result-card-header">
<img className="avatar" src={data.avatar} alt="User avatar" />
<a className="link" href={data.url} target="_blank" rel="noopener noreferrer">
<div className="flex wrap">
<div>{data.owner}/</div>
<div>{data.name}</div>
</div>
</a>
</div>
<div className="m10-0">{data.description}</div>
<div className="flex wrap justify-center">
{
data.topics.slice(0, 7)
.map(item => (
<Topic
key={item}
active={currentTopics.includes(item)}
toggleTopic={toggleTopic}
>
{item}
</Topic>
))
}
</div>
<div className="flex">
<div><div className="btn card-btn"><i className="card-icon fas fa-star" />{data.stars}</div></div>
<div><div className="btn card-btn"><i className="card-icon fas fa-code-branch" />{data.forks}</div></div>
<div><div className="btn card-btn"><i className="card-icon fas fa-eye" />{data.watchers}</div></div>
</div>
</div>
);
const Results = ({ toggleTopic, currentTopics }) => (
<div className="result-list">
<SelectedFilters className="m1" />
<ReactiveList
componentId="results"
dataField="name"
onData={data => onData(data, currentTopics, toggleTopic)}
onResultStats={onResultStats}
react={{
and: ['language', 'topics', 'pushed', 'created', 'stars', 'forks', 'repo'],
}}
pagination
innerClass={{
list: 'result-list-container',
pagination: 'result-list-pagination',
resultsInfo: 'result-list-info',
poweredBy: 'powered-by',
}}
size={6}
sortOptions={[
{
label: 'Best Match',
dataField: '_score',
sortBy: 'desc',
},
{
label: 'Most Stars',
dataField: 'stars',
sortBy: 'desc',
},
{
label: 'Fewest Stars',
dataField: 'stars',
sortBy: 'asc',
},
{
label: 'Most Forks',
dataField: 'forks',
sortBy: 'desc',
},
{
label: 'Fewest Forks',
dataField: 'forks',
sortBy: 'asc',
},
{
label: 'A to Z',
dataField: 'owner.raw',
sortBy: 'asc',
},
{
label: 'Z to A',
dataField: 'owner.raw',
sortBy: 'desc',
},
{
label: 'Recently Updated',
dataField: 'pushed',
sortBy: 'desc',
},
{
label: 'Least Recently Updated',
dataField: 'pushed',
sortBy: 'asc',
},
]}
/>
</div>
);
Results.propTypes = {
toggleTopic: PropTypes.func,
currentTopics: PropTypes.arrayOf(PropTypes.string),
};
export default Results;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment