Pārlūkot izejas kodu

Download canvas option

Tatiana Inama 6 gadi atpakaļ
vecāks
revīzija
491e77ab59
3 mainītis faili ar 23 papildinājumiem un 1 dzēšanām
  1. 10 0
      package-lock.json
  2. 2 0
      package.json
  3. 11 1
      src/Heatmap.tsx

+ 10 - 0
package-lock.json

@@ -1610,6 +1610,11 @@
       "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
       "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g=="
     },
+    "@types/file-saver": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.1.tgz",
+      "integrity": "sha512-g1QUuhYVVAamfCifK7oB7G3aIl4BbOyzDOqVyUfEr4tfBKrXfeH+M+Tg7HKCXSrbzxYdhyCP7z9WbKo0R2hBCw=="
+    },
     "@types/glob": {
       "version": "7.1.1",
       "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz",
@@ -5737,6 +5742,11 @@
         "schema-utils": "^2.5.0"
       }
     },
+    "file-saver": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.2.tgz",
+      "integrity": "sha512-Wz3c3XQ5xroCxd1G8b7yL0Ehkf0TC9oYC6buPFkNnU9EnaPlifeAFCyCh+iewXTyFRcg0a6j3J7FmJsIhlhBdw=="
+    },
     "file-uri-to-path": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",

+ 2 - 0
package.json

@@ -9,6 +9,7 @@
     "@testing-library/jest-dom": "^4.2.4",
     "@testing-library/react": "^9.5.0",
     "@testing-library/user-event": "^7.2.1",
+    "@types/file-saver": "^2.0.1",
     "@types/jest": "^25.1.4",
     "@types/node": "^13.9.2",
     "@types/ramda": "^0.27.0",
@@ -18,6 +19,7 @@
     "@types/reactstrap": "^8.4.2",
     "axios": "^0.19.2",
     "bootstrap": "^4.4.1",
+    "file-saver": "^2.0.2",
     "heatmap.js": "^2.0.5",
     "js-file-download": "^0.4.12",
     "paper": "^0.12.4",

+ 11 - 1
src/Heatmap.tsx

@@ -1,6 +1,7 @@
 import React, { Component } from 'react';
 import { Path, PaperScope, Point, Size, Rectangle, Color, Layer, Raster, PointText } from 'paper';
-import { Container, CustomInput, FormGroup, Row, Col } from 'reactstrap';
+import { Container, CustomInput, FormGroup, Row, Col, Button } from 'reactstrap';
+import FileSaver from 'file-saver';
 import map from './merseyside-nobg-white.png';
 
 import './Heatmap.css';
@@ -162,6 +163,14 @@ class Heatmap extends Component<HeatmapProps, HeatmapState> {
     })
   }
 
+  saveAsImage = () => {
+    const canvas = document.getElementById("vom-heatmap-canvas");
+    //@ts-ignore
+    canvas.toBlob((blob) => {
+      FileSaver.saveAs(blob, `vom-${this.state.heatmapType}.png`);
+    })
+  }
+
   componentDidMount = () => {
     const canvas = new PaperScope();
     canvas.setup('vom-heatmap-canvas');
@@ -205,6 +214,7 @@ class Heatmap extends Component<HeatmapProps, HeatmapState> {
         <Col>
           <div className="vom-heatmap-actions">
             <FormGroup>
+              <Button size="sm" onClick={() => {this.saveAsImage()} }>download current map</Button>
               <h4>Heatmap type</h4> 
               <div>
                 <CustomInput type="radio" id="heatmap-by-amount" name="by-amount"