Skip to content

Commit a785fec

Browse files
committed
feat: Now we have added the height, width, color, name everything as customizable before exporting
1 parent 2dbe6c8 commit a785fec

2 files changed

Lines changed: 109 additions & 31 deletions

File tree

components/core/ExportShape.js

Lines changed: 105 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -27,24 +27,56 @@ import { getShapeId } from "../../utils/misc";
2727
// Radios
2828
import { Radios } from "..";
2929

30+
// Component
3031
const ExportShape = ({ show, setShow, shape }) => {
3132
console.log({ shape });
32-
const [exportType, setExportType] = useState();
33+
34+
// state object to hold the export data
35+
const [exportData, setExportData] = useState();
36+
const [loaded, setLoaded] = useState(false);
3337

3438
useEffect(() => {
35-
setExportType('png');
39+
setExportData({
40+
'name': shape.name,
41+
'type': 'png',
42+
'width': '300',
43+
'height': '300',
44+
'backgroundColor': shape.backgroundColor
45+
});
46+
setLoaded(true);
3647
}, [show])
3748

38-
const handleTypeChange = (event) => {
39-
const { value } = event.target;
49+
// Handles the input changes and update
50+
// the state object
51+
const handleChange = (evt) => {
52+
evt.preventDefault();
53+
54+
const name = evt.target.name;
55+
let value =
56+
evt.target.type === "number"
57+
? evt.target.valueAsNumber
58+
: evt.target.value;
4059

41-
console.log(`selected export type ${value}`);
42-
setExportType(value);
60+
if (value < 0) {
61+
return;
62+
}
63+
64+
if (Number.isNaN(value)) {
65+
value = "";
66+
}
67+
68+
setExportData({
69+
...exportData,
70+
[name]: value
71+
});
72+
73+
console.log({exportData});
4374
};
4475

76+
// Export method
4577
const doExport = (id, name) => {
46-
console.log(`Save as ${exportType}`);
47-
switch (exportType) {
78+
console.log(`Save as ${exportData.type}`);
79+
switch (exportData.type) {
4880
case "png":
4981
exportAsPNG(id, name);
5082
break;
@@ -86,7 +118,7 @@ const ExportShape = ({ show, setShow, shape }) => {
86118
};
87119
return (
88120
<>
89-
{shape && (
121+
{loaded && (
90122
<Modal
91123
size="lg"
92124
aria-labelledby="contained-modal-title-vcenter"
@@ -95,37 +127,81 @@ const ExportShape = ({ show, setShow, shape }) => {
95127
centered
96128
>
97129
<Modal.Header closeButton>
98-
<Modal.Title>Export {shape.name} </Modal.Title>
130+
<Modal.Title>Export {exportData.name} </Modal.Title>
99131
</Modal.Header>
100132
<Modal.Body>
101133
<div>
102134
<Shape
103-
name={shape.name}
135+
name={exportData.name}
104136
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}
137+
width={`${exportData.width}px`}
138+
height={`${exportData.height}px`}
139+
backgroundColor={exportData.backgroundColor}
140+
id={getShapeId(exportData.name, true)}
122141
/>
123142
</div>
143+
<form>
144+
<div>
145+
<label htmlFor="export-name">Name</label>
146+
<input
147+
type="text"
148+
name="name"
149+
id="export-name"
150+
value={exportData.name}
151+
onChange={handleChange} />
152+
</div>
153+
154+
<div>
155+
<label htmlFor="export-color">Color</label>
156+
<input
157+
type="color"
158+
name="backgroundColor"
159+
id="export-color"
160+
value={exportData.backgroundColor}
161+
onChange={handleChange} />
162+
</div>
163+
164+
<div>
165+
<label htmlFor="export-width">Set a width(in px)</label>
166+
<input
167+
type="range"
168+
min="100"
169+
max="700"
170+
value={exportData.width}
171+
id="export-width"
172+
name="width"
173+
onChange={handleChange} />
174+
175+
<label htmlFor="export-height">Set a height(in px)</label>
176+
<input
177+
type="range"
178+
min="100"
179+
max="700"
180+
value={exportData.height}
181+
id="export-height"
182+
name="height"
183+
onChange={handleChange} />
184+
</div>
185+
186+
<div>
187+
<Radios
188+
groupName="type"
189+
heading="Export as:"
190+
options={[
191+
{ value: "png", displayValue: "png" },
192+
{ value: "jpeg", displayValue: "jpeg" },
193+
{ value: "svg", displayValue: "svg" },
194+
]}
195+
selectedOption={exportData.type}
196+
onValueChange={handleChange}
197+
/>
198+
</div>
199+
</form>
124200
</Modal.Body>
125201

126202
<Modal.Footer>
127203
<Button
128-
onClick={() => doExport(getShapeId(shape.name, true), shape.name)}
204+
onClick={() => doExport(getShapeId(exportData.name, true), exportData.name)}
129205
>
130206
Export
131207
</Button>

components/utils/ShapeList.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,10 +144,12 @@ const ShapeList = ({ setOpen, user, data }) => {
144144
return (
145145
<ShapePallete>
146146
<ShapeCards>
147-
<ExportShape
147+
148+
{ shapeToExport && <ExportShape
148149
show={ showExportModal }
149150
setShow={ setShowExportModal }
150-
shape = { shapeToExport } />
151+
shape = { shapeToExport } /> }
152+
151153
{shapes.map((shape, index) => (
152154
<React.Fragment key={index}>
153155
<ShapeCard>

0 commit comments

Comments
 (0)