summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--package.json1
-rw-r--r--src/components/settings/services/EditServiceForm.js11
-rw-r--r--src/components/ui/ImageUpload.js113
-rw-r--r--src/containers/settings/EditServiceScreen.js15
-rw-r--r--src/styles/image-upload.scss52
-rw-r--r--src/styles/main.scss1
-rw-r--r--src/styles/settings.scss20
-rw-r--r--yarn.lock11
8 files changed, 217 insertions, 7 deletions
diff --git a/package.json b/package.json
index f9f6ca91c..0cf18bfb1 100644
--- a/package.json
+++ b/package.json
@@ -57,6 +57,7 @@
57 "react": "^15.4.1", 57 "react": "^15.4.1",
58 "react-addons-css-transition-group": "^15.4.2", 58 "react-addons-css-transition-group": "^15.4.2",
59 "react-dom": "^15.4.1", 59 "react-dom": "^15.4.1",
60 "react-dropzone": "^4.2.1",
60 "react-electron-web-view": "^2.0.1", 61 "react-electron-web-view": "^2.0.1",
61 "react-intl": "^2.3.0", 62 "react-intl": "^2.3.0",
62 "react-loader": "^2.4.0", 63 "react-loader": "^2.4.0",
diff --git a/src/components/settings/services/EditServiceForm.js b/src/components/settings/services/EditServiceForm.js
index 753781507..bcbda7773 100644
--- a/src/components/settings/services/EditServiceForm.js
+++ b/src/components/settings/services/EditServiceForm.js
@@ -13,6 +13,7 @@ import Tabs, { TabItem } from '../../ui/Tabs';
13import Input from '../../ui/Input'; 13import Input from '../../ui/Input';
14import Toggle from '../../ui/Toggle'; 14import Toggle from '../../ui/Toggle';
15import Button from '../../ui/Button'; 15import Button from '../../ui/Button';
16import ImageUpload from '../../ui/ImageUpload';
16 17
17const messages = defineMessages({ 18const messages = defineMessages({
18 saveService: { 19 saveService: {
@@ -195,7 +196,15 @@ export default class EditServiceForm extends Component {
195 </div> 196 </div>
196 <div className="settings__body"> 197 <div className="settings__body">
197 <form onSubmit={e => this.submit(e)} id="form"> 198 <form onSubmit={e => this.submit(e)} id="form">
198 <Input field={form.$('name')} focus /> 199 <div className="service-flex-grid">
200 <div className="service-name">
201 <Input field={form.$('name')} focus />
202 </div>
203 <div className="service-icon">
204 {/* <Input field={form.$('name')} focus /> */}
205 <ImageUpload field={form.$('icon')} />
206 </div>
207 </div>
199 {(recipe.hasTeamId || recipe.hasCustomUrl) && ( 208 {(recipe.hasTeamId || recipe.hasCustomUrl) && (
200 <Tabs 209 <Tabs
201 active={service.customUrl ? 1 : 0} 210 active={service.customUrl ? 1 : 0}
diff --git a/src/components/ui/ImageUpload.js b/src/components/ui/ImageUpload.js
new file mode 100644
index 000000000..d07c3649c
--- /dev/null
+++ b/src/components/ui/ImageUpload.js
@@ -0,0 +1,113 @@
1import React, { Component } from 'react';
2import PropTypes from 'prop-types';
3import { observer } from 'mobx-react';
4import { Field } from 'mobx-react-form';
5// import Loader from 'react-loader';
6import classnames from 'classnames';
7import Dropzone from 'react-dropzone';
8
9@observer
10export default class ImageUpload extends Component {
11 static propTypes = {
12 field: PropTypes.instanceOf(Field).isRequired,
13 className: PropTypes.string,
14 multiple: PropTypes.bool,
15 // disabled: PropTypes.bool,
16 // onClick: PropTypes.func,
17 // type: PropTypes.string,
18 // buttonType: PropTypes.string,
19 // loaded: PropTypes.bool,
20 // htmlForm: PropTypes.string,
21 };
22
23 static defaultProps = {
24 className: null,
25 multiple: false,
26 // disabled: false,
27 // onClick: () => {},
28 // type: 'button',
29 // buttonType: '',
30 // loaded: true,
31 // htmlForm: '',
32 };
33
34 dropzoneRef = null;
35
36 state = {
37 path: null,
38 }
39
40 onDrop(acceptedFiles) {
41 // const req = request.post('/upload');
42 acceptedFiles.forEach((file) => {
43 console.log(file);
44 this.setState({
45 path: file.path,
46 });
47 // req.attach(file.name, file);
48 });
49 // req.end(callback);
50 }
51
52 render() {
53 const {
54 field,
55 className,
56 multiple,
57 // disabled,
58 // onClick,
59 // type,
60 // buttonType,
61 // loaded,
62 // htmlForm,
63 } = this.props;
64
65 const cssClasses = classnames({
66 'franz-form__button': true,
67 // [`franz-form__button--${buttonType}`]: buttonType,
68 [`${className}`]: className,
69 });
70
71 return (
72 <div>
73 {field.label}
74 {this.state.path ? (
75 <div
76 className="image-upload"
77 >
78 <div
79 className="image-upload__preview"
80 style={({
81 backgroundImage: `url(${this.state.path})`,
82 })}
83 />
84 <div className="image-upload__action">
85 <button
86 type="button"
87 onClick={() => {
88 this.setState({
89 path: null,
90 });
91 }}
92 >
93 remove icon
94
95 </button>
96 <div className="image-upload__action-background" />
97 </div>
98 </div>
99 ) : (
100 <Dropzone
101 ref={(node) => { this.dropzoneRef = node; }}
102 onDrop={this.onDrop.bind(this)}
103 className={cssClasses}
104 multiple={multiple}
105 accept="image/jpeg, image/png"
106 >
107 <p>Try dropping some files here, or click to select files to upload.</p>
108 </Dropzone>
109 )}
110 </div>
111 );
112 }
113}
diff --git a/src/containers/settings/EditServiceScreen.js b/src/containers/settings/EditServiceScreen.js
index 191ef447b..52a9fa6db 100644
--- a/src/containers/settings/EditServiceScreen.js
+++ b/src/containers/settings/EditServiceScreen.js
@@ -42,6 +42,10 @@ const messages = defineMessages({
42 id: 'settings.service.form.indirectMessages', 42 id: 'settings.service.form.indirectMessages',
43 defaultMessage: '!!!Show message badge for all new messages', 43 defaultMessage: '!!!Show message badge for all new messages',
44 }, 44 },
45 icon: {
46 id: 'settings.service.form.icon',
47 defaultMessage: '!!!Icon',
48 },
45}); 49});
46 50
47@inject('stores', 'actions') @observer 51@inject('stores', 'actions') @observer
@@ -93,6 +97,11 @@ export default class EditServiceScreen extends Component {
93 value: !service.isMuted, 97 value: !service.isMuted,
94 default: true, 98 default: true,
95 }, 99 },
100 icon: {
101 label: intl.formatMessage(messages.icon),
102 value: service.icon,
103 default: true,
104 },
96 }, 105 },
97 }; 106 };
98 107
@@ -179,6 +188,12 @@ export default class EditServiceScreen extends Component {
179 return (<div>Loading...</div>); 188 return (<div>Loading...</div>);
180 } 189 }
181 190
191 if (!recipe) {
192 return (
193 <div>something went wrong</div>
194 );
195 }
196
182 const form = this.prepareForm(recipe, service); 197 const form = this.prepareForm(recipe, service);
183 198
184 return ( 199 return (
diff --git a/src/styles/image-upload.scss b/src/styles/image-upload.scss
new file mode 100644
index 000000000..764bb3158
--- /dev/null
+++ b/src/styles/image-upload.scss
@@ -0,0 +1,52 @@
1.image-upload {
2 position: absolute;
3 width: 100px;
4 height: 100px;
5 border-radius: $theme-border-radius;
6 overflow: hidden;
7
8 &__preview,
9 &__action {
10 position: absolute;
11 top: 0;
12 left: 0;
13 right: 0;
14 }
15
16 &__preview {
17 z-index: 1;
18 background-size: cover;
19 background-size: 100%;
20 background-repeat: no-repeat;
21 background-position: center center;
22 margin: 5px;
23 }
24
25 &__action {
26 position: relative;
27 z-index: 10;
28 opacity: 0;
29 transition: opacity 0.5s;
30
31 &-background {
32 position: absolute;
33 top: 0;
34 left: 0;
35 right: 0;
36 bottom: 0;
37 background: rgba($theme-gray, 0.7);
38 z-index: 10;
39 }
40
41 button {
42 position: relative;
43 z-index: 100;
44 }
45 }
46
47 &:hover {
48 .image-upload__action {
49 opacity: 1;
50 }
51 }
52} \ No newline at end of file
diff --git a/src/styles/main.scss b/src/styles/main.scss
index 0a082729c..261396f6f 100644
--- a/src/styles/main.scss
+++ b/src/styles/main.scss
@@ -35,3 +35,4 @@ $mdi-font-path: '../node_modules/mdi/fonts';
35@import './button.scss'; 35@import './button.scss';
36@import './searchInput.scss'; 36@import './searchInput.scss';
37@import './select.scss'; 37@import './select.scss';
38@import './image-upload.scss';
diff --git a/src/styles/settings.scss b/src/styles/settings.scss
index 48d12a807..556803c46 100644
--- a/src/styles/settings.scss
+++ b/src/styles/settings.scss
@@ -111,6 +111,20 @@
111 &::-webkit-scrollbar-thumb:window-inactive { 111 &::-webkit-scrollbar-thumb:window-inactive {
112 background: none; 112 background: none;
113 } 113 }
114
115 .service-flex-grid {
116 display: flex;
117 }
118
119 .service-name {
120 flex: 1px;
121 }
122
123 .service-icon {
124 width: 30%;
125 min-width: 100px;
126 margin-left: 40px;
127 }
114 } 128 }
115 129
116 .settings__close { 130 .settings__close {
@@ -308,12 +322,6 @@
308 } 322 }
309 } 323 }
310 324
311 // @include element(add-service-teaser) {
312 // height: auto;
313 // margin-top: 20px;
314 // display: block;
315 // text-align: center;
316 // }
317 .emoji { 325 .emoji {
318 display: block; 326 display: block;
319 font-size: 40px; 327 font-size: 40px;
diff --git a/yarn.lock b/yarn.lock
index 6c3f807a4..b077a250e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -337,6 +337,10 @@ asynckit@^0.4.0:
337 version "0.4.0" 337 version "0.4.0"
338 resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 338 resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
339 339
340attr-accept@^1.0.3:
341 version "1.1.0"
342 resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-1.1.0.tgz#b5cd35227f163935a8f1de10ed3eba16941f6be6"
343
340"auto-launch@https://github.com/meetfranz/node-auto-launch.git": 344"auto-launch@https://github.com/meetfranz/node-auto-launch.git":
341 version "5.0.1" 345 version "5.0.1"
342 resolved "https://github.com/meetfranz/node-auto-launch.git#b90a0470467eb84435e6554ae9db1e2c6db79e61" 346 resolved "https://github.com/meetfranz/node-auto-launch.git#b90a0470467eb84435e6554ae9db1e2c6db79e61"
@@ -4940,6 +4944,13 @@ react-dom@^15.4.1:
4940 object-assign "^4.1.0" 4944 object-assign "^4.1.0"
4941 prop-types "^15.5.10" 4945 prop-types "^15.5.10"
4942 4946
4947react-dropzone@^4.2.1:
4948 version "4.2.1"
4949 resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-4.2.1.tgz#695e80bd0b065f1181e69f2d0f6d1d5cc72664c9"
4950 dependencies:
4951 attr-accept "^1.0.3"
4952 prop-types "^15.5.7"
4953
4943react-electron-web-view@^2.0.1: 4954react-electron-web-view@^2.0.1:
4944 version "2.0.1" 4955 version "2.0.1"
4945 resolved "https://registry.yarnpkg.com/react-electron-web-view/-/react-electron-web-view-2.0.1.tgz#984b7bbbeb77e35bcca921dc50120fc8f2b0f27d" 4956 resolved "https://registry.yarnpkg.com/react-electron-web-view/-/react-electron-web-view-2.0.1.tgz#984b7bbbeb77e35bcca921dc50120fc8f2b0f27d"