Advertisement
Guest User

Untitled

a guest
Jul 31st, 2015
263
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.40 KB | None | 0 0
  1.  
  2. R = React.DOM
  3.  
  4. # Canvases for charts
  5. PieChartCanvas = React.createClass
  6. render: ->
  7. R.canvas
  8. style: { height: 200, width: 200 }
  9.  
  10. BarChartCanvas = React.createClass
  11. render: ->
  12. R.canvas
  13. style: { height: 200, width: 400 }
  14.  
  15. @MovingRecordsApp = React.createClass
  16.  
  17. getInitialState: ->
  18. records: @props.data
  19. # Remember Chart.js instances so we can delete them later.
  20. barChartInstance: null
  21. pieChartInstance: null
  22.  
  23. getDefaultProps: ->
  24. records: []
  25.  
  26. addRecord: (record) ->
  27. records = React.addons.update(@state.records, { $unshift: [record] })
  28. @setState records: records
  29.  
  30. deleteRecord: (record) ->
  31. index = @state.records.indexOf record
  32. records = React.addons.update(@state.records, { $splice: [[index, 1]] })
  33. @replaceState records: records
  34.  
  35. updateRecord: (record, newRecord) ->
  36. index = @state.records.indexOf record
  37. records = React.addons.update(@state.records, { $splice: [[index, 1, newRecord]] })
  38. @replaceState records: records
  39.  
  40. chartsPanel: ->
  41. R.div
  42. className: "panel panel-blue"
  43. R.div
  44. className: 'panel-heading'
  45. R.div
  46. className: "row"
  47. R.div
  48. className: "col-xs-3"
  49. R.div
  50. className: "fa fa-home fa-5x"
  51. R.div
  52. className: "col-xs-9 text-right"
  53. R.div
  54. className: 'huge'
  55. "Total: #{@totalVolume()}"
  56. R.div null,
  57. "cubic feet"
  58. R.div
  59. className: 'panel-body'
  60. R.div
  61. className: 'row text-center'
  62. R.div
  63. className: 'col-sm-6'
  64. React.createElement BarChartCanvas,
  65. ref: "bar"
  66. R.div
  67. className: 'col-sm-6'
  68. React.createElement PieChartCanvas,
  69. ref: "chart"
  70.  
  71. totalVolume: ->
  72. sum = 0
  73. for obj in @state.records
  74. sum += (obj.volume * obj.quantity)
  75. sum
  76.  
  77. render: ->
  78. R.div
  79. className: "app_wrapper"
  80. @chartsPanel()
  81.  
  82. R.hr null
  83.  
  84. R.h2 null, "Add a new item"
  85. React.createElement NewMovingRecordForm,
  86. handleNewRecord: @addRecord
  87. roomSuggestions: @props.roomSuggestions
  88. categorySuggestions: @props.categorySuggestions
  89. R.hr null
  90.  
  91. React.createElement Records,
  92. records: @state.records,
  93. handleDeleteRecord: @deleteRecord,
  94. handleUpdateRecord: @updateRecord
  95.  
  96. # 部品がDOMに搭載された後に、グラフを書く。
  97. componentDidMount: ->
  98. @drawCharts()
  99.  
  100. # 部品が更新された後に、古いグラフを破壊し新しいグラフを書く。
  101. componentWillUnmount: ->
  102. @state.barChartInstance.destroy()
  103. @state.pieChartInstance.destroy()
  104.  
  105. # DOM上のキャンバスを探し、そこにグラフを描画。
  106. drawCharts: ->
  107. # 棒グラフ
  108. canvas = React.findDOMNode(@refs.bar) # refを手掛かりにキャンバスを探します。
  109. ctx = canvas.getContext("2d") # 絵を書くための場所をゲットします。
  110. # グラフ用データを渡し、グラフのオブジェクトを作ります。
  111. # そのオブジェクトを後ほど破壊するためにポインターを保存しておきます。
  112. @setState.barChartInstance = new Chart(ctx).Bar(@dataForBarChart())
  113.  
  114. # 円グラフ
  115. canvas = React.findDOMNode(@refs.chart)
  116. ctx = canvas.getContext("2d")
  117. @setState.pieChartInstance = new Chart(ctx).Pie(@dataForPieChart())
  118.  
  119. dataForPieChart: ->
  120. [
  121. {
  122. value: 300
  123. color:"#F7464A"
  124. highlight: "#FF5A5E"
  125. label: "Red"
  126. }
  127. {
  128. value: 50
  129. color: "#46BFBD"
  130. highlight: "#5AD3D1"
  131. label: "Green"
  132. }
  133. {
  134. value: 100
  135. color: "#FDB45C"
  136. highlight: "#FFC870"
  137. label: "Yellow"
  138. }
  139. ]
  140.  
  141. dataForBarChart: ->
  142. labels: ["January", "February", "March", "April", "May", "June", "July"]
  143. datasets: [
  144. {
  145. label: "My First dataset"
  146. fillColor: "rgba(220,220,220,0.5)"
  147. strokeColor: "rgba(220,220,220,0.8)"
  148. highlightFill: "rgba(220,220,220,0.75)"
  149. highlightStroke: "rgba(220,220,220,1)"
  150. data: [65, 59, 80, 81, 56, 55, 40]
  151. }
  152. {
  153. label: "My Second dataset"
  154. fillColor: "rgba(151,187,205,0.5)"
  155. strokeColor: "rgba(151,187,205,0.8)"
  156. highlightFill: "rgba(151,187,205,0.75)"
  157. highlightStroke: "rgba(151,187,205,1)"
  158. data: [28, 48, 40, 19, 86, 27, 90]
  159. }
  160. ]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement