diff --git a/package.json b/package.json index 3a485a08..d97367f1 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "devDependencies": { "autoprefixer": "^7.1.0", "babel-core": "^6.24.1", + "babel-eslint": "^10.0.3", "babel-jest": "^20.0.3", "babel-loader": "^7.0.0", "babel-plugin-transform-class-properties": "^6.19.0", diff --git a/src/.eslintrc b/src/.eslintrc index a24d701e..ae42e644 100644 --- a/src/.eslintrc +++ b/src/.eslintrc @@ -1,6 +1,6 @@ { "rules": { - "react/prop-types": [0, {customValidators: ["skipUndeclared"]}], + "react/prop-types": [0, { "customValidators": ["skipUndeclared"] }], "jsx-a11y/media-has-caption": [0], "jsx-a11y/anchor-has-content": [0], "jsx-a11y/no-static-element-interactions": [0], @@ -11,13 +11,14 @@ "no-mixed-operators": [0], "max-len": [0], "react/no-unused-prop-types": [0], - "react/no-did-mount-set-state": [0], + "react/no-did-mount-set-state": [0] }, + "parser": "babel-eslint", "extends": "airbnb", "globals": { - XMLHttpRequest: true, - XDomainRequest: true, - document: true, - window: true + "XMLHttpRequest": true, + "XDomainRequest": true, + "document": true, + "window": true } } diff --git a/src/components/drivers/docx-viewer.jsx b/src/components/drivers/docx-viewer.jsx index 54490a21..c73a4df2 100644 --- a/src/components/drivers/docx-viewer.jsx +++ b/src/components/drivers/docx-viewer.jsx @@ -7,6 +7,7 @@ import 'styles/docx.scss'; import Loading from '../loading'; export default class extends Component { + divRef = React.createRef(); componentDidMount() { const jsonFile = new XMLHttpRequest(); jsonFile.open('GET', this.props.filePath, true); @@ -14,28 +15,31 @@ export default class extends Component { jsonFile.responseType = 'arraybuffer'; jsonFile.onreadystatechange = () => { if (jsonFile.readyState === 4 && jsonFile.status === 200) { - mammoth.convertToHtml( - { arrayBuffer: jsonFile.response }, - { includeDefaultStyleMap: true }, - ) - .then((result) => { - const docEl = document.createElement('div'); - docEl.className = 'document-container'; - docEl.innerHTML = result.value; - document.getElementById('docx').innerHTML = docEl.outerHTML; - }) - .catch((a) => { - console.log('alexei: something went wrong', a); - }) - .done(); + mammoth + .convertToHtml( + { arrayBuffer: jsonFile.response }, + { includeDefaultStyleMap: true }, + ) + .then(result => { + const docEl = document.createElement('div'); + docEl.className = 'document-container'; + docEl.innerHTML = result.value; + if (this.divRef.current) + this.divRef.current.innerHTML = docEl.outerHTML; + }) + .catch(a => { + console.log('alexei: something went wrong', a); + }) + .done(); } }; } render() { return ( -
+
-
); +
+ ); } } diff --git a/src/components/drivers/photo-viewer.jsx b/src/components/drivers/photo-viewer.jsx index e82456a0..8a513228 100644 --- a/src/components/drivers/photo-viewer.jsx +++ b/src/components/drivers/photo-viewer.jsx @@ -5,14 +5,21 @@ import React, { Component } from 'react'; import 'styles/photo-viewer.scss'; export default class PhotoViewer extends Component { + divRef = React.createRef(); + componentDidMount() { const { originalWidth, originalHeight } = this.props; - const imageDimensions = this.getImageDimensions.call(this, originalWidth, originalHeight); + const imageDimensions = this.getImageDimensions.call( + this, + originalWidth, + originalHeight, + ); this.props.texture.image.style.width = `${imageDimensions.width}px`; this.props.texture.image.style.height = `${imageDimensions.height}px`; this.props.texture.image.setAttribute('class', 'photo'); - document.getElementById('pg-photo-container').appendChild(this.props.texture.image); + if (this.divRef.current) + this.divRef.current.appendChild(this.props.texture.image); } getImageDimensions(originalWidth, originalHeight) { @@ -46,7 +53,11 @@ export default class PhotoViewer extends Component { }; return ( -
+
); } } diff --git a/src/components/drivers/photo360-viewer.jsx b/src/components/drivers/photo360-viewer.jsx index ded8705c..5d9fb157 100644 --- a/src/components/drivers/photo360-viewer.jsx +++ b/src/components/drivers/photo360-viewer.jsx @@ -5,6 +5,7 @@ import * as THREE from 'three'; import 'styles/photo360.scss'; export default class extends Component { + divRef = React.createRef(); constructor(props) { super(props); let savedX; @@ -28,8 +29,7 @@ export default class extends Component { } componentDidMount() { - const el = document.getElementById('360-photo'); - const positionInfo = el.getBoundingClientRect(); + const positionInfo = this.divRef.current.getBoundingClientRect(); const height = positionInfo.height; const width = positionInfo.width; @@ -89,15 +89,20 @@ export default class extends Component { }); } - updateView() { const latitude = Math.max(-85, Math.min(85, this.state.latitude)); // moving the camera according to current latitude (vertical movement) // and longitude (horizontal movement) - this.camera.target.x = 500 * Math.sin(THREE.Math.degToRad(90 - latitude)) * Math.cos(THREE.Math.degToRad(this.state.longitude)); + this.camera.target.x = + 500 * + Math.sin(THREE.Math.degToRad(90 - latitude)) * + Math.cos(THREE.Math.degToRad(this.state.longitude)); this.camera.target.y = 500 * Math.cos(THREE.Math.degToRad(90 - latitude)); - this.camera.target.z = 500 * Math.sin(THREE.Math.degToRad(90 - latitude)) * Math.sin(THREE.Math.degToRad(this.state.longitude)); + this.camera.target.z = + 500 * + Math.sin(THREE.Math.degToRad(90 - latitude)) * + Math.sin(THREE.Math.degToRad(this.state.longitude)); this.camera.lookAt(this.camera.target); this.renderer.render(this.scene, this.camera); @@ -106,7 +111,7 @@ export default class extends Component { render() { return (
-
- +
+
);