Advertisement
Guest User

Untitled

a guest
Oct 27th, 2016
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.54 KB | None | 0 0
  1. import React from 'react';
  2.  
  3. export default class Bill extends React.Component {
  4. constructor(props) {
  5. super(props);
  6. this.state = {
  7. monthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
  8. today: new Date(),
  9. nextWeek: new Date().addDays(7),
  10. };
  11. this.toggleSelected = this.toggleSelected.bind(this);
  12. }
  13.  
  14. getDateSuffix(date) {
  15. if (date >= 11 && date <= 13) {
  16. return "th";
  17. }
  18.  
  19. switch (date % 10) {
  20. case 1: return "st";
  21. case 2: return "nd";
  22. case 3: return "rd";
  23. default: return "th";
  24. }
  25. }
  26.  
  27. toggleSelected(e, value) {
  28. this.props.onBillSelected(e, this);
  29. }
  30.  
  31. render() {
  32. const today = new Date();
  33. const nextWeek = new Date().addDays(6);
  34. const daysUntilDue = this.props.dueDate < today
  35. ? Math.ceil(Math.abs(today.getTime() - this.props.dueDate.getTime()) / (1000 * 3600 * 24))
  36. : -1;
  37.  
  38. const classNames = require('classnames');
  39. const billStatus = classNames({
  40. 'ui card': true,
  41. 'ui raised card': this.props.isSelected,
  42. });
  43.  
  44. const dueDateClass = classNames({
  45. 'ui ribbon label': true,
  46. 'ui red ribbon label': this.props.dueDate < today,
  47. 'ui green ribbon label': this.props.dueDate > today && this.props.dueDate < nextWeek,
  48. });
  49.  
  50. const style = {
  51. width: '350px'
  52. };
  53.  
  54. return (
  55. <div className={billStatus} style={style} onClick={this.toggleSelected}>
  56. <div className="content">
  57. <div className="header">
  58. <div className={dueDateClass}>{this.props.amountDue}</div>
  59. <span>{this.props.billName}</span>
  60. </div>
  61.  
  62. <div className="meta">{daysUntilDue == -1 ? `Overdue` : `Due in ${daysUntilDue}`}</div>
  63. <div className="ui bottom right attached label">{this.state.monthNames[this.props.dueDate.getMonth()]} {this.props.dueDate.getDate()}{this.getDateSuffix(this.props.dueDate.getDate())}</div>
  64. <span className="dueDate">{this.props.billedBy}</span>
  65.  
  66. </div>
  67. </div>
  68. );
  69. }
  70. }
  71.  
  72. "use strict";
  73. import React from 'react';
  74. import {render} from 'react-dom';
  75. import Bill from './components/bill.jsx';
  76.  
  77. export default class App extends React.Component {
  78.  
  79. render() {
  80. return (
  81. <div className="ui stackable five column grid">
  82. <div className="column">
  83. <Bill billName="Internet"
  84. amountDue="64"
  85. dueDate={new Date()}
  86. billedBy="Cox Communications"
  87. billInfo="This bill is overdue by 1 day" /></div>
  88. <div className="column">
  89. <Bill billName="G Drive"
  90. amountDue="5"
  91. dueDate={new Date().addDays(2)}
  92. billedBy="Google"
  93. billInfo="This bill is coming up: due in 2 days." />
  94. </div>
  95. <div className="column">
  96. <Bill billName="Automotive Insurance"
  97. amountDue="64"
  98. dueDate={new Date().addDays(10)}
  99. billedBy="Progress Insurance"
  100. billInfo="This bill is not due for another 10 days." />
  101. </div>
  102. <div className="column">
  103. <Bill billName="G Suite"
  104. amountDue="5"
  105. dueDate={new Date().addDays(15)}
  106. billedBy="Google"
  107. billInfo="This bill is not due for a couple weeks." />
  108. </div>
  109. </div>
  110. );
  111. }
  112. }
  113. render(<App />, document.getElementById('app'));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement