diff --git a/src/components/TurkHit/index.js b/src/components/TurkHit/index.js index c2f8e720eba8bf24e1860fb7ff5e66f307863a00..6a236d5d124a83ac24f97d488a21fe0a260b5146 100644 --- a/src/components/TurkHit/index.js +++ b/src/components/TurkHit/index.js @@ -6,7 +6,6 @@ import defaultForm from './defaultForm'; import './styles.css'; import featuresDict from './features'; import turkHitPropTypes from '../../containers/Dimensions/propTypes'; -import documentsPropType from '../../containers/Documents/propTypes'; import turkStatus from './turkStatus'; // Need to call this to load the 3D highcharts module @@ -33,7 +32,7 @@ class TurkHit extends Component { componentDidUpdate() { // Create the chart when the component updates with turk data const { hit } = this.props; - if (hit == null) { + if (hit === null || hit.status === null) { return; } const status = hit.status; @@ -356,6 +355,190 @@ class TurkHit extends Component { this.setState({ displayChart: !this.state.displayChart }); } + // Generate the href to download mech turk data + generateBillDownload = (dimensions) => { + const FEATURE_DICT = { + 1: 'Door', + 2: 'Window', + 3: 'Building Point', + 4: 'Roof Point', + 5: 'Adjacent Building 1 Point', + 6: 'Adjacent Building 2 Point', + 7: 'Adjacent Building 3 Point', + }; + + const DIRECTION_DICT = { + 1: 'SOUTH', + 2: 'EAST', + 3: 'WEST', + 4: 'NORTH', + }; + // The building dimensions Data + let csvString = '' + + 'building_id,' + + 'hit_id,' + + 'number of floors,' + + 'perimeter,' + + 'area,' + + ''; + csvString += '\n'; + csvString += `${dimensions.building_dimensions.building_id},`; + csvString += `${dimensions.building_dimensions.hit_id},`; + csvString += `${dimensions.building_dimensions.num_floors},`; + csvString += `${dimensions.building_dimensions.perimeter},`; + csvString += `${dimensions.building_dimensions.area},`; + + const pointLines = { + buildingPoint: '', + roofPoint: '', + adjacentPoint1: '', + adjacentPoint2: '', + adjacentPoint3: '', + }; + dimensions.points.map((val) => { + let line = ''; + line += `${val.latitude},`; + line += `${val.longitude},`; + line += `${val.elevation},`; + switch (FEATURE_DICT[val.feature]) { + case 'Building Point': + line += `${val.wall_num_first},`; + line += `${val.wall_num_second},`; + pointLines.buildingPoint += `${line}\n`; + break; + case 'Roof Point': + pointLines.roofPoints += `${line}\n`; + break; + case 'Adjacent Building 1 Point': + pointLines.adjacentPoint1 += `${line}\n`; + break; + case 'Adjacent Building 2 Point': + pointLines.adjacentPoint2 += `${line}\n`; + break; + case 'Adjacent Building 3 Point': + pointLines.adjacentPoint3 += `${line}\n`; + break; + default: + break; + } + return val; + }); + + csvString += '\n'; + csvString += '\n'; + csvString += 'Building Points,'; + csvString += '\n'; + csvString += '' + + 'latitude,' + + 'longitude,' + + 'elevation,' + + 'first wall,' + + 'second wall,' + + ''; + csvString += '\n'; + csvString += pointLines.buildingPoint; + csvString += '\n'; + csvString += '\n'; + csvString += 'Roof Points,'; + csvString += '\n'; + csvString += '' + + 'latitude,' + + 'longitude,' + + 'elevation,' + + ''; + csvString += '\n'; + csvString += pointLines.roofPoint; + csvString += '\n'; + csvString += '\n'; + csvString += 'Adjacent Building 1 Points,'; + csvString += '\n'; + csvString += '' + + 'latitude,' + + 'longitude,' + + 'elevation,' + + ''; + csvString += '\n'; + csvString += pointLines.adjacentPoint1; + csvString += '\n'; + csvString += '\n'; + csvString += 'Adjacent Building 2 Points,'; + csvString += '\n'; + csvString += '' + + 'latitude,' + + 'longitude,' + + 'elevation,' + + ''; + csvString += '\n'; + csvString += pointLines.adjacentPoint2; + csvString += '\n'; + csvString += '\n'; + csvString += 'Adjacent Building 3 Points,'; + csvString += '\n'; + csvString += '' + + 'latitude,' + + 'longitude,' + + 'elevation,' + + ''; + csvString += '\n'; + csvString += pointLines.adjacentPoint3; + + const windowDoorLines = { + doorLines: '', + windowLines: '', + }; + dimensions.windows_doors.map((val) => { + let line = ''; + line += `${val.height},`; + line += `${val.width},`; + line += `${val.quantity},`; + line += `${DIRECTION_DICT[val.orientation]},`; + line += `${val.wall_num},`; + switch (FEATURE_DICT[val.feature]) { + case 'Window': + windowDoorLines.windowLines += `${line}\n`; + break; + case 'Door': + windowDoorLines.doorLines += `${line}\n`; + break; + default: + break; + } + return val; + }); + csvString += '\n'; + csvString += '\n'; + csvString += 'Windows,'; + csvString += '\n'; + csvString += '' + + 'height,' + + 'width,' + + 'quantity,' + + 'direction,' + + 'wall number,' + + ''; + csvString += '\n'; + csvString += windowDoorLines.windowLines; + csvString += '\n'; + csvString += '\n'; + csvString += 'Doors,'; + csvString += '\n'; + csvString += '' + + 'height,' + + 'width,' + + 'quantity,' + + 'direction,' + + 'wall number,' + + ''; + csvString += '\n'; + csvString += windowDoorLines.doorLines; + + const mimeType = 'text/csv;encoding:utf-8'; + const href = URL.createObjectURL(new Blob([csvString], { + type: mimeType, + })); + return href; + } + renderDefinitions = () => (