Skip to content

Commit 97c34d4

Browse files
committed
fix(Service): Fix custom service icon upload
1 parent 87c0846 commit 97c34d4

File tree

2 files changed

+46
-21
lines changed

2 files changed

+46
-21
lines changed

src/components/settings/services/EditServiceForm.js

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
1-
import React, { Component, Fragment } from 'react';
2-
import PropTypes from 'prop-types';
31
import { observer } from 'mobx-react';
4-
import { Link } from 'react-router';
5-
import { defineMessages, intlShape } from 'react-intl';
62
import normalizeUrl from 'normalize-url';
3+
import PropTypes from 'prop-types';
4+
import { Component, Fragment } from 'react';
5+
import { defineMessages, intlShape } from 'react-intl';
6+
import { Link } from 'react-router';
77

88
import Form from '../../../lib/Form';
9-
import User from '../../../models/User';
109
import Recipe from '../../../models/Recipe';
1110
import Service from '../../../models/Service';
12-
import Tabs, { TabItem } from '../../ui/Tabs';
13-
import Input from '../../ui/Input';
14-
import Toggle from '../../ui/Toggle';
11+
import User from '../../../models/User';
1512
import Button from '../../ui/Button';
1613
import ImageUpload from '../../ui/ImageUpload';
14+
import Input from '../../ui/Input';
1715
import Select from '../../ui/Select';
16+
import Tabs, { TabItem } from '../../ui/Tabs';
17+
import Toggle from '../../ui/Toggle';
1818

19-
import PremiumFeatureContainer from '../../ui/PremiumFeatureContainer';
20-
import LimitReachedInfobox from '../../../features/serviceLimit/components/LimitReachedInfobox';
21-
import { serviceLimitStore } from '../../../features/serviceLimit';
2219
import { isMac } from '../../../environment';
20+
import { serviceLimitStore } from '../../../features/serviceLimit';
21+
import LimitReachedInfobox from '../../../features/serviceLimit/components/LimitReachedInfobox';
22+
import PremiumFeatureContainer from '../../ui/PremiumFeatureContainer';
2323

2424
const messages = defineMessages({
2525
saveService: {
@@ -160,7 +160,7 @@ export default @observer class EditServiceForm extends Component {
160160
const values = form.values();
161161
let isValid = true;
162162

163-
const files = form.$('customIcon').files;
163+
const { files } = form.$('customIcon');
164164
if (files) {
165165
values.iconFile = files[0];
166166
}

src/components/ui/ImageUpload.js

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import React, { Component, Fragment } from 'react';
2-
import PropTypes from 'prop-types';
1+
import classnames from 'classnames';
32
import { observer } from 'mobx-react';
43
import { Field } from 'mobx-react-form';
5-
import classnames from 'classnames';
4+
import PropTypes from 'prop-types';
5+
import { Component, Fragment } from 'react';
66
import Dropzone from 'react-dropzone';
77

88
export default @observer class ImageUpload extends Component {
@@ -21,17 +21,40 @@ export default @observer class ImageUpload extends Component {
2121

2222
state = {
2323
path: null,
24+
image: null,
2425
}
2526

2627
dropzoneRef = null;
2728

2829
onDrop(acceptedFiles) {
2930
const { field } = this.props;
3031

32+
console.log('acceptedFiles', acceptedFiles);
33+
3134
acceptedFiles.forEach((file) => {
32-
this.setState({
33-
path: file.path,
34-
});
35+
if (file) {
36+
const reader = new FileReader();
37+
38+
// When the file reader is done, this function runs
39+
reader.onloadend = () => {
40+
// `reader.result` is something like: "data:image/png;base64,iVBORw0K..."
41+
const base64Data = reader.result;
42+
43+
// If you need just the base64 portion without the data URL prefix:
44+
// const base64String = base64Data.split(',')[1];
45+
46+
console.log('Base64 Image:', base64Data);
47+
48+
this.setState({
49+
image: base64Data,
50+
});
51+
// Now you can use `base64Data` (or `base64String`) as needed.
52+
};
53+
54+
// Read the file as a Data URL
55+
reader.readAsDataURL(file);
56+
}
57+
3558
this.props.field.onDrop(file);
3659
});
3760

@@ -52,16 +75,18 @@ export default @observer class ImageUpload extends Component {
5275
[`${className}`]: className,
5376
});
5477

78+
console.log('state', this.state);
79+
5580
return (
5681
<div className="image-upload-wrapper">
5782
<label className="franz-form__label" htmlFor="iconUpload">{field.label}</label>
5883
<div className="image-upload">
59-
{(field.value && field.value !== 'delete') || this.state.path ? (
84+
{(field.value && field.value !== 'delete') || this.state.image ? (
6085
<Fragment>
6186
<div
6287
className="image-upload__preview"
6388
style={({
64-
backgroundImage: `url("${this.state.path || field.value}")`,
89+
backgroundImage: `url("${this.state.image || field.value}")`,
6590
})}
6691
/>
6792
<div className="image-upload__action">
@@ -72,7 +97,7 @@ export default @observer class ImageUpload extends Component {
7297
field.set('delete');
7398
} else {
7499
this.setState({
75-
path: null,
100+
image: null,
76101
});
77102
}
78103
}}

0 commit comments

Comments
 (0)