diff options
Diffstat (limited to 'src/client/react/components/presentational')
| -rw-r--r-- | src/client/react/components/presentational/Results.js | 70 | ||||
| -rw-r--r-- | src/client/react/components/presentational/Results.scss | 5 | 
2 files changed, 75 insertions, 0 deletions
diff --git a/src/client/react/components/presentational/Results.js b/src/client/react/components/presentational/Results.js new file mode 100644 index 0000000..173c644 --- /dev/null +++ b/src/client/react/components/presentational/Results.js @@ -0,0 +1,70 @@ +/** + * Copyright (C) 2018 Noah Loomans + * + * This file is part of rooster.hetmml.nl. + * + * rooster.hetmml.nl is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * rooster.hetmml.nl is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with rooster.hetmml.nl.  If not, see <http://www.gnu.org/licenses/>. + * + */ + +import React from 'react'; +import PropTypes from 'prop-types'; +import classnames from 'classnames'; +import Result from './Result'; + +import './Results.scss'; + +class Results extends React.Component { +  static propTypes = { +    results: PropTypes.arrayOf(PropTypes.string).isRequired, +    selectedResult: PropTypes.string, +    isExactMatch: PropTypes.bool.isRequired, +    setUser: PropTypes.func.isRequired, +  }; + +  static defaultProps = { +    selectedResult: null, +  }; + +  render() { +    const { +      results, +      selectedResult, +      isExactMatch, +      setUser, +    } = this.props; + +    return ( +      <div +        className={classnames('Results', { +          hasResults: !isExactMatch && results.length > 0, +        })} +        style={{ +          minHeight: isExactMatch ? 0 : results.length * 54, +        }} +      > +        {!isExactMatch && results.map(userId => ( +          <Result +            key={userId} +            userId={userId} +            isSelected={userId === selectedResult} +            onClick={() => setUser(userId)} +          /> +        ))} +      </div> +    ); +  } +} + +export default Results; diff --git a/src/client/react/components/presentational/Results.scss b/src/client/react/components/presentational/Results.scss new file mode 100644 index 0000000..60379cf --- /dev/null +++ b/src/client/react/components/presentational/Results.scss @@ -0,0 +1,5 @@ +.Results { +  &.hasResults { +    border-top: 1px #BDBDBD solid; +  } +}  | 
