1- import React , { useState } from "react" ;
1+ import React , { useState , useEffect } from "react" ;
22
33// dynamic from Next.js
44import dynamic from "next/dynamic" ;
@@ -24,97 +24,114 @@ import download from "downloadjs";
2424// misc utilities
2525import { getShapeId } from "../../utils/misc" ;
2626
27+ // Radios
28+ import { Radios } from ".." ;
29+
2730const ExportShape = ( { show, setShow, shape } ) => {
2831 console . log ( { shape } ) ;
29- const [ exportType , setExportType ] = useState ( 'png' ) ;
32+ const [ exportType , setExportType ] = useState ( ) ;
33+
34+ useEffect ( ( ) => {
35+ setExportType ( 'png' ) ;
36+ } , [ show ] )
37+
38+ const handleTypeChange = ( event ) => {
39+ const { value } = event . target ;
40+
41+ console . log ( `selected export type ${ value } ` ) ;
42+ setExportType ( value ) ;
43+ } ;
3044
3145 const doExport = ( id , name ) => {
32- console . log ( "Save as Png" ) ;
33- switch ( exportType ) {
34- case "png" :
35- exportAsPNG ( id , name ) ;
36- break ;
37- case "jpeg" :
38- exportAsJPEG ( id , name ) ;
39- break ;
40- case "svg" :
41- exportAsSVG ( id , name ) ;
42- break ;
43- case "canvas" :
44- exportAsCanvas ( id , name ) ;
45- break ;
46- default :
47- exportAsPNG ( id , name ) ;
48- break ;
46+ console . log ( `Save as ${ exportType } ` ) ;
47+ switch ( exportType ) {
48+ case "png" :
49+ exportAsPNG ( id , name ) ;
50+ break ;
51+ case "jpeg" :
52+ exportAsJPEG ( id , name ) ;
53+ break ;
54+ case "svg" :
55+ exportAsSVG ( id , name ) ;
56+ break ;
57+ default :
58+ exportAsPNG ( id , name ) ;
59+ break ;
4960 }
50-
5161 } ;
5262
5363 const exportAsPNG = ( id , name ) => {
5464 toPng ( document . getElementById ( id ) ) . then ( function ( dataUrl ) {
55- console . log ( dataUrl ) ;
56- download ( dataUrl , `${ name } .png` ) ;
57- toast . success ( `${ name } .png has been exported sucessfully!` ) ;
58- } ) ;
59- }
60- const exportAsCanvas = ( id , name ) => {
61- toCanvas ( document . getElementById ( id ) ) . then ( function ( dataUrl ) {
62- console . log ( dataUrl ) ;
63- download ( dataUrl , `${ name } .png` ) ;
64- toast . success ( `${ name } .png has been exported sucessfully!` ) ;
65+ console . log ( dataUrl ) ;
66+ download ( dataUrl , `${ name } .png` ) ;
67+ toast . success ( `${ name } .png has been exported sucessfully!` ) ;
6568 } ) ;
66- }
69+ } ;
70+
6771 const exportAsJPEG = ( id , name ) => {
68- toJpeg ( document . getElementById ( id ) ) . then ( function ( dataUrl ) {
69- console . log ( dataUrl ) ;
70- download ( dataUrl , `${ name } .png` ) ;
71- toast . success ( `${ name } .png has been exported sucessfully!` ) ;
72+ toJpeg ( document . getElementById ( id ) , { quality : 0.95 } ) . then ( function (
73+ dataUrl
74+ ) {
75+ console . log ( dataUrl ) ;
76+ download ( dataUrl , `${ name } .jpeg` ) ;
77+ toast . success ( `${ name } .jpeg has been exported sucessfully!` ) ;
7278 } ) ;
73- }
79+ } ;
7480 const exportAsSVG = ( id , name ) => {
7581 toSvg ( document . getElementById ( id ) ) . then ( function ( dataUrl ) {
76- console . log ( dataUrl ) ;
77- download ( dataUrl , `${ name } .png ` ) ;
78- toast . success ( `${ name } .png has been exported sucessfully!` ) ;
82+ console . log ( dataUrl ) ;
83+ download ( dataUrl , `${ name } .svg ` ) ;
84+ toast . success ( `${ name } .svg has been exported sucessfully!` ) ;
7985 } ) ;
80- }
86+ } ;
8187 return (
82- < >
83- { shape &&
84- < Modal
85- size = "lg"
86- aria-labelledby = "contained-modal-title-vcenter"
87- show = { show }
88- onHide = { ( ) => setShow ( false ) }
89- centered
90- >
91- < Modal . Header closeButton >
92- < Modal . Title > Export { shape . name } </ Modal . Title >
93- </ Modal . Header >
94- < Modal . Body >
95- < div >
96- < Shape
97- name = { shape . name }
98- formula = { shape . formula }
99- width = "300px"
100- height = "300px"
101- backgroundColor = { shape . backgroundColor }
102- id = { getShapeId ( shape . name , true ) }
103- />
104- </ div >
105- < div >
106-
107- </ div >
108- </ Modal . Body >
109-
110- < Modal . Footer >
111- < Button
112- onClick = { ( ) => doExport ( getShapeId ( shape . name , true ) , shape . name ) }
88+ < >
89+ { shape && (
90+ < Modal
91+ size = "lg"
92+ aria-labelledby = "contained-modal-title-vcenter"
93+ show = { show }
94+ onHide = { ( ) => setShow ( false ) }
95+ centered
11396 >
114- Export
115- </ Button >
116- </ Modal . Footer >
117- </ Modal > }
97+ < Modal . Header closeButton >
98+ < Modal . Title > Export { shape . name } </ Modal . Title >
99+ </ Modal . Header >
100+ < Modal . Body >
101+ < div >
102+ < Shape
103+ name = { shape . name }
104+ formula = { shape . formula }
105+ width = "300px"
106+ height = "300px"
107+ backgroundColor = { shape . backgroundColor }
108+ id = { getShapeId ( shape . name , true ) }
109+ />
110+ </ div >
111+ < div >
112+ < Radios
113+ groupName = "export-type"
114+ heading = "Export as:"
115+ options = { [
116+ { value : "png" , displayValue : "png" } ,
117+ { value : "jpeg" , displayValue : "jpeg" } ,
118+ { value : "svg" , displayValue : "svg" } ,
119+ ] }
120+ selectedOption = { exportType }
121+ onValueChange = { handleTypeChange }
122+ />
123+ </ div >
124+ </ Modal . Body >
125+
126+ < Modal . Footer >
127+ < Button
128+ onClick = { ( ) => doExport ( getShapeId ( shape . name , true ) , shape . name ) }
129+ >
130+ Export
131+ </ Button >
132+ </ Modal . Footer >
133+ </ Modal >
134+ ) }
118135 </ >
119136 ) ;
120137} ;
0 commit comments