DataSetDetails.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. //© 2019 Dublin City University, Trinity College Dublin. All rights reserved. This material may not be reproduced, displayed, modified or distributed without the express prior written permission of the copyright holder.
  2. import React, { Component } from 'react';
  3. import {
  4. Card,
  5. CardBody,
  6. CardHeader,
  7. Row,
  8. CardSubtitle
  9. } from 'reactstrap';
  10. import { connect } from 'react-redux';
  11. import { Redirect } from 'react-router-dom';
  12. import DataQualityOverTime from './DataQualityOverTime';
  13. import DimensionsQualityDetails from './DimensionsQualityDetails';
  14. import PerformAnalysis from './AnalyticsWidget/PerformAnalysis';
  15. import CircularProgressbar from 'react-circular-progressbar';
  16. import 'react-circular-progressbar/dist/styles.css';
  17. const noteReadyToPublish = "rgba(255,0,0,0.6)";
  18. const readyToPublish = "rgba(34,139,34,0.8)";
  19. class DataSetAssessmentDetails extends Component {
  20. constructor(props) {
  21. super(props);
  22. this.state = {
  23. analysisDropdownOpen: false,
  24. radioSelected: 2,
  25. }
  26. }
  27. analysisToggle = () => {
  28. this.setState({
  29. analysisDropdownOpen: !this.state.analysisDropdownOpen,
  30. });
  31. }
  32. loading = () => <div className="animated fadeIn pt-1 text-center">Loading...</div>
  33. render() {
  34. let datasetDetails = this.props.datasetDetailsCache;
  35. let percentageValue = 0;
  36. let display = null;
  37. if(datasetDetails.length>0){
  38. percentageValue = Number.parseFloat(datasetDetails[0].lastAssessmentQuality * 100).toFixed(2);
  39. let canPublish = "Not Ready to Publish";
  40. let displayColour = noteReadyToPublish;
  41. let canPublishClass = "text-left font-weight-bold";
  42. if (datasetDetails[0].lastAssessmentQuality >= datasetDetails[0].expectedProgress) {
  43. canPublish = "Ready to Publish";
  44. displayColour = readyToPublish;
  45. canPublishClass = "text-left font-weight-bold";
  46. }
  47. display = ( <div className="animated fadeIn">
  48. <Row >
  49. <Card className="w-100" >
  50. <CardHeader>
  51. <span className="h3">{datasetDetails[0].datasetName}</span>
  52. </CardHeader>
  53. </Card>
  54. </Row>
  55. <Row >
  56. <Card className="w-25" >
  57. <CardHeader>
  58. Current Data Quality
  59. </CardHeader>
  60. <CardBody className="pb-0">
  61. <CardSubtitle className={canPublishClass} style={{ color: displayColour }}>{canPublish}</CardSubtitle>
  62. <p/>
  63. <div style={{ width: '150px', margin: 'auto' }}>
  64. <CircularProgressbar percentage={percentageValue} text={`${percentageValue}%`} styles={{ text: { fill: displayColour }, path: { stroke: displayColour } }} />
  65. </div>
  66. <div style={{ height: '20px' }} />
  67. </CardBody>
  68. </Card>
  69. <DataQualityOverTime datasetID={datasetDetails[0].datasetID} is1Spatial={false} />
  70. </Row>
  71. <Row>
  72. <Card className="w-100">
  73. <CardHeader>
  74. Dimensions Measured
  75. </CardHeader>
  76. <CardBody>
  77. <Row>
  78. <DimensionsQualityDetails lastAssessmentMetrics={datasetDetails[0].lastAssessmentMetrics} assessmentMetrics={datasetDetails[0].assessmentMetrics}/>
  79. </Row>
  80. </CardBody>
  81. </Card>
  82. </Row>
  83. <Row>
  84. <Card className="w-100">
  85. <CardHeader>
  86. Analysis
  87. </CardHeader>
  88. <CardBody>
  89. <PerformAnalysis datasetID={this.props.match.params.datasetID}/>
  90. </CardBody>
  91. </Card>
  92. </Row>
  93. </div>);
  94. }
  95. else {
  96. display =(<Redirect to="/dashboard" />);
  97. }
  98. return (
  99. <React.Fragment>{display}</React.Fragment>
  100. );
  101. }
  102. }
  103. const mapStateToProps = (state,ownProps) => {
  104. let datasetID = Number(ownProps.match.params.datasetID);
  105. let datasetDetails = state.datasetDetailsCache.filter((dataset)=>{if(dataset.datasetID===datasetID){return dataset;} return null; });
  106. return (
  107. {
  108. datasetDetailsCache: datasetDetails
  109. }
  110. );
  111. }
  112. export default connect(mapStateToProps)(DataSetAssessmentDetails);