Advertisement
Guest User

Untitled

a guest
Oct 19th, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.97 KB | None | 0 0
  1. import React, { useState, useEffect } from "react";
  2. import PropTypes from "prop-types";
  3. import { Modal, Button, Grid, Row, Table, Col } from "react-bootstrap";
  4. import axios from "axios";
  5. import Loading from "../../../../layout/Loading";
  6. import { formatNumber } from "../../../../utilities/formatter";
  7.  
  8. function ScreeningScoresModal({ children, entityId }) {
  9. const [modalActive, setModalActive] = useState(false);
  10. const [screeningDetails, setScreeningDetails] = useState(null);
  11.  
  12. useEffect(() => {
  13. axios
  14. .get("/api/company/" + entityId + "/screening_score_details")
  15. .then(res => setScreeningDetails(res.data));
  16. }, []);
  17.  
  18. return (
  19. <>
  20. <Modal
  21. show={modalActive}
  22. onHide={() => setModalActive(false)}
  23. dialogClassName="semi-wide-modal"
  24. >
  25. <Modal.Header closeButton>Screening Scores</Modal.Header>
  26. <Modal.Body>
  27. {screeningDetails ? (
  28. <Grid fluid style={{ fontSize: "13px" }}>
  29. <Row>
  30. <h4>Quality Score</h4>
  31. <Table condensed striped>
  32. <thead>
  33. <tr>
  34. <th> </th> <th className="text-center">Average</th>{" "}
  35. <th className="text-center col-md-1">RoAIC</th>
  36. <th className="text-center col-md-1">RoAIC Tang.</th>{" "}
  37. <th className="text-center col-md-1">GPoA</th>
  38. <th className="text-center col-md-1">RoE</th>{" "}
  39. <th className="text-center col-md-1">CFoA</th>
  40. <th className="text-center col-md-1">Gross Marg.</th>{" "}
  41. <th className="text-center col-md-1">Operating Marg.</th>
  42. </tr>
  43. </thead>
  44. <tbody>
  45. <tr>
  46. <td>Level</td>
  47. <td className="text-center">
  48. {formatNumber(screeningDetails.pct_score["cs70"] * 100, 0)}
  49. </td>
  50. <td className="text-center">
  51. {formatNumber(screeningDetails.pct_score["cs100"] * 100, 0)}
  52. </td>
  53. <td className="text-center">
  54. {formatNumber(screeningDetails.pct_score["cs101"] * 100, 0)}
  55. </td>
  56. <td className="text-center">
  57. {formatNumber(screeningDetails.pct_score["cs102"] * 100, 0)}
  58. </td>
  59. <td className="text-center">
  60. {formatNumber(screeningDetails.pct_score["cs103"] * 100, 0)}
  61. </td>
  62. <td className="text-center">
  63. {formatNumber(screeningDetails.pct_score["cs104"] * 100, 0)}
  64. </td>
  65. <td className="text-center">
  66. {formatNumber(screeningDetails.pct_score["cs105"] * 100, 0)}
  67. </td>
  68. <td className="text-center">
  69. {formatNumber(screeningDetails.pct_score["cs106"] * 100, 0)}
  70. </td>
  71. </tr>
  72. <tr>
  73. <td>Trend</td>
  74. <td className="text-center">
  75. {formatNumber(screeningDetails.pct_score["cs71"] * 100, 0)}
  76. </td>
  77. <td className="text-center">
  78. {formatNumber(screeningDetails.pct_score["cs110"] * 100, 0)}
  79. </td>
  80. <td className="text-center">
  81. {formatNumber(screeningDetails.pct_score["cs111"] * 100, 0)}
  82. </td>
  83. <td className="text-center">
  84. {formatNumber(screeningDetails.pct_score["cs112"] * 100, 0)}
  85. </td>
  86. <td className="text-center">
  87. {formatNumber(screeningDetails.pct_score["cs113"] * 100, 0)}
  88. </td>
  89. <td className="text-center">
  90. {formatNumber(screeningDetails.pct_score["cs114"] * 100, 0)}
  91. </td>
  92. <td className="text-center">
  93. {formatNumber(screeningDetails.pct_score["cs115"] * 100, 0)}
  94. </td>
  95. <td className="text-center">
  96. {formatNumber(screeningDetails.pct_score["cs116"] * 100, 0)}
  97. </td>
  98. </tr>
  99. <tr>
  100. <td>Consistency</td>
  101. <td className="text-center">
  102. {formatNumber(screeningDetails.pct_score["cs72"] * 100, 0)}
  103. </td>
  104. <td className="text-center">
  105. {formatNumber(screeningDetails.pct_score["cs120"] * 100, 0)}
  106. </td>
  107. <td className="text-center">
  108. {formatNumber(screeningDetails.pct_score["cs121"] * 100, 0)}
  109. </td>
  110. <td className="text-center">
  111. {formatNumber(screeningDetails.pct_score["cs122"] * 100, 0)}
  112. </td>
  113. <td className="text-center">
  114. {formatNumber(screeningDetails.pct_score["cs123"] * 100, 0)}
  115. </td>
  116. <td className="text-center">
  117. {formatNumber(screeningDetails.pct_score["cs124"] * 100, 0)}
  118. </td>
  119. <td className="text-center">
  120. {formatNumber(screeningDetails.pct_score["cs125"] * 100, 0)}
  121. </td>
  122. <td className="text-center">
  123. {formatNumber(screeningDetails.pct_score["cs126"] * 100, 0)}
  124. </td>
  125. </tr>
  126. <tr>
  127. <td>
  128. <strong>Quality Score</strong>
  129. </td>
  130. <td className="text-center">
  131. <strong>{formatNumber(screeningDetails.pct_score["cs80"] * 100, 0)}</strong>
  132. </td>
  133. </tr>
  134. </tbody>
  135. </Table>
  136. </Row>
  137. <Row>
  138. <h4>Random Forest score</h4>
  139. <Col lg={6}>
  140. <strong>Top factors</strong>
  141. <Table condensed striped>
  142. <thead>
  143. <tr>
  144. <th>Factor</th>
  145. <th>Contribution</th>
  146. </tr>
  147. </thead>
  148. <tbody>
  149. {screeningDetails.random_forest_scores_top.map(el => (
  150. <tr key={el.description}>
  151. <td>{el.description}</td>
  152. <td>{formatNumber(el.contribution * 100, 0)}</td>
  153. </tr>
  154. ))}
  155. </tbody>
  156. </Table>
  157. </Col>
  158. <Col lg={6}>
  159. <strong>Bottom factors</strong>
  160. <Table condensed striped>
  161. <thead>
  162. <tr>
  163. <th>Factor</th>
  164. <th>Contribution</th>
  165. </tr>
  166. </thead>
  167. <tbody>
  168. {screeningDetails.random_forest_scores_bottom.map(el => (
  169. <tr key={el.description}>
  170. <td>{el.description}</td>
  171. <td>{formatNumber(el.contribution * 100, 0)}</td>
  172. </tr>
  173. ))}
  174. </tbody>
  175. </Table>
  176. </Col>
  177. </Row>
  178. <Row>
  179. <Col lg={6}>
  180. <h4>Peer Score</h4>
  181. <Table condensed striped>
  182. <thead>
  183. <tr>
  184. <th>Portfolio</th>
  185. <th>Comment</th>
  186. </tr>
  187. </thead>
  188. <tbody>
  189. {screeningDetails.investor_scores.map(el => (
  190. <tr key={el.portfolio}>
  191. <td>{el.portfolio}</td>
  192. <td>{el.quartile + " Quartile"}</td>
  193. </tr>
  194. ))}
  195. </tbody>
  196. </Table>
  197. </Col>
  198. </Row>
  199. </Grid>
  200. ) : (
  201. <div style={{ height: "200px" }}>
  202. <Loading />
  203. </div>
  204. )}
  205. </Modal.Body>
  206. <Modal.Footer>
  207. <Button onClick={() => setModalActive(false)}>Close</Button>
  208. </Modal.Footer>
  209. </Modal>
  210. {children(setModalActive)}
  211. </>
  212. );
  213. }
  214.  
  215. ScreeningScoresModal.propTypes = {
  216. entityId: PropTypes.number.isRequired
  217. };
  218.  
  219. export default ScreeningScoresModal;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement