list-item.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import React from 'react';
  2. import { Link } from 'react-router'; // jshint ignore:line
  3. import Avatar from 'misago/components/avatar'; // jshint ignore:line
  4. import Status, { StatusIcon, StatusLabel } from 'misago/components/user-status'; // jshint ignore:line
  5. import misago from 'misago/index'; // jshint ignore:line
  6. export default class extends React.Component {
  7. getClassName() {
  8. if (this.props.rank.css_class) {
  9. return "list-group-item list-group-rank-" + this.props.rank.css_class;
  10. } else {
  11. return "list-group-item";
  12. }
  13. }
  14. getUserStatus() {
  15. if (this.props.user.status) {
  16. /* jshint ignore:start */
  17. return <Status user={this.props.user} status={this.props.user.status}>
  18. <StatusIcon user={this.props.user}
  19. status={this.props.user.status} />
  20. <StatusLabel user={this.props.user}
  21. status={this.props.user.status}
  22. className="status-label hidden-xs hidden-sm" />
  23. </Status>;
  24. /* jshint ignore:end */
  25. } else {
  26. /* jshint ignore:start */
  27. return <span className="user-status">
  28. <span className="status-icon ui-preview">
  29. &nbsp;
  30. </span>
  31. <span className="status-label ui-preview hidden-xs hidden-sm">
  32. &nbsp;
  33. </span>
  34. </span>;
  35. /* jshint ignore:end */
  36. }
  37. }
  38. getRankName() {
  39. if (this.props.rank.is_tab) {
  40. /* jshint ignore:start */
  41. let rankUrl = misago.get('USERS_LIST_URL') + this.props.rank.slug + '/';
  42. return <Link to={rankUrl} className="rank-name">
  43. {this.props.rank.name}
  44. </Link>;
  45. /* jshint ignore:end */
  46. } else {
  47. /* jshint ignore:start */
  48. return <span className="rank-name">
  49. {this.props.rank.name}
  50. </span>;
  51. /* jshint ignore:end */
  52. }
  53. }
  54. getUserTitle() {
  55. if (this.props.user.title) {
  56. /* jshint ignore:start */
  57. return <span className="user-title hidden-xs hidden-sm">
  58. {this.props.user.title}
  59. </span>;
  60. /* jshint ignore:end */
  61. } else {
  62. return null;
  63. }
  64. }
  65. render() {
  66. /* jshint ignore:start */
  67. return <li className={this.getClassName()}>
  68. <div className="rank-user-avatar">
  69. <a href={this.props.user.absolute_url}>
  70. <Avatar user={this.props.user} size="50" />
  71. </a>
  72. </div>
  73. <div className="rank-user">
  74. <div className="user-name">
  75. <a href={this.props.user.absolute_url} className="item-title">
  76. {this.props.user.username}
  77. </a>
  78. </div>
  79. {this.getUserStatus()}
  80. {this.getRankName()}
  81. {this.getUserTitle()}
  82. </div>
  83. <div className="rank-position">
  84. <div className="stat-value">#{this.props.counter}</div>
  85. <div className="text-muted">{gettext("Rank")}</div>
  86. </div>
  87. <div className="rank-posts-counted">
  88. <div className="stat-value">{this.props.user.meta.score}</div>
  89. <div className="text-muted">{gettext("Ranked posts")}</div>
  90. </div>
  91. <div className="rank-posts-total">
  92. <div className="stat-value">{this.props.user.posts}</div>
  93. <div className="text-muted">{gettext("Total posts")}</div>
  94. </div>
  95. </li>;
  96. /* jshint ignore:end */
  97. }
  98. }