Skip to content

Commit f0b356e

Browse files
author
gondzo
committed
mission results upload enhancements
1 parent 2e66ad3 commit f0b356e

File tree

18 files changed

+190
-38
lines changed

18 files changed

+190
-38
lines changed

src/routes/EditData/components/EditDataHeader/EditDataHeader.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import styles from './EditDataHeader.scss';
88

99
export const EditDataHeader = () => (
1010
<div styleName="edit-data-header">
11-
<div styleName="title">Edit Telemetry Data</div>
11+
<div styleName="title">Upload Mission Results</div>
1212
</div>
1313
);
1414

src/routes/EditData/components/EditDataHeader/EditDataHeader.scss

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,8 @@
55
border-bottom: 1px solid rgba(140,140,140,.29);
66
.title {
77
font-size: 24px;
8-
flex: 0 1 255px;
8+
flex: 0 1 310px;
99
align-self: center;
1010
padding: 5px 0;
1111
}
1212
}
13-
14-

src/routes/EditData/components/TelemetryTabs/TelemetryTabs.jsx

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,23 +18,9 @@ export const TelemetryTabs = ({fields, handleSubmit, resetForm, uploadPicture})
1818
<Tabs>
1919

2020
<TabList>
21-
<Tab>Telemetry Data</Tab>
2221
<Tab>Picture from Mission</Tab>
2322
</TabList>
2423

25-
<TabPanel>
26-
<div className="telemetry-form-container">
27-
<form onSubmit={handleSubmit}>
28-
<TelemetryDataForm fields={fields} />
29-
30-
<div styleName="actions">
31-
<Button color="gray" onClick={resetForm} className={styles.btnMargin}>Cancel</Button>
32-
<Button type="submit" color="blue">Save</Button>
33-
</div>
34-
</form>
35-
</div>
36-
</TabPanel>
37-
3824
<TabPanel>
3925
<PictureFromMission uploadPicture={uploadPicture} />
4026
</TabPanel>
@@ -79,4 +65,3 @@ const validate = (values) => {
7965
};
8066

8167
export default reduxForm({form: 'editDataForm', fields, validate})(CSSModules(TelemetryTabs, styles));
82-

src/routes/EditData/components/UploadPicture/UploadPicture.jsx

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import Loader from 'components/Loader';
99
*/
1010

1111
export const UploadPicture = ({picture, removePicture}) => {
12-
const {status, src} = picture;
12+
const {status, src, file} = picture;
1313
const onRemove = (e) => {
1414
if (picture.status === 'deleting') {
1515
return;
@@ -19,15 +19,34 @@ export const UploadPicture = ({picture, removePicture}) => {
1919
};
2020
return (
2121
<li styleName={cn('upload-picture', {loading: status !== 'uploaded'})}>
22-
<img src={src} alt="uploaded" />
22+
{
23+
file != null && file.type === 'image'? (
24+
<img src={src} alt="uploaded" />
25+
): null
26+
}
27+
{
28+
file != null && file.type === 'pdf'? (
29+
<a target="_blank" href={src} styleName='pdf'><span>PDF</span></a>
30+
): null
31+
}
32+
{
33+
file === null || (file.type != 'image' && file.type != 'pdf')? (
34+
<a target="_blank" href={src} styleName='file'><span>{file.type}</span></a>
35+
): null
36+
}
37+
{
38+
file != null ? (
39+
<span>{file.name}</span>
40+
): null
41+
}
2342
<div styleName="loader">
2443
<Loader scale={0.25} />
2544
</div>
2645
<a
2746
href="javascript:"
2847
onClick={onRemove}
2948
>
30-
<i styleName="icon-delete-pic" />{status === 'uploading' ? 'Cancel' : 'Delete Picture'}
49+
<i styleName="icon-delete-pic" />{status === 'uploading' ? 'Cancel' : 'Delete'}
3150
</a>
3251
</li>
3352
);

src/routes/EditData/components/UploadPicture/UploadPicture.scss

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,19 @@
5252
display: block;
5353
}
5454
}
55+
56+
.file, .pdf {
57+
border: 1px solid #888;
58+
height: 180px;
59+
width: 180px;
60+
text-align: center;
61+
margin-bottom: 5px;
62+
cursor: pointer;
63+
display: block;
64+
}
65+
.file span, .pdf span {
66+
display: inline-block;
67+
padding-top: 70px;
68+
font-size: 20px;
69+
text-transform: uppercase;
70+
}

src/routes/EditData/components/UploadPictureForm/UploadPictureForm.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class UploadPictureForm extends React.Component {
4545
};
4646

4747
this.onDrop = (e) => {
48-
const droppedFiles = _.filter(e.dataTransfer.files, (file) => accepts(file, 'image/*'));
48+
const droppedFiles = _.filter(e.dataTransfer.files, (file) => accepts(file, ['image/*', '.log', 'application/pdf', '.kml', '.xml']));
4949
droppedFiles.forEach(props.uploadPicture);
5050
};
5151
}
@@ -93,7 +93,7 @@ class UploadPictureForm extends React.Component {
9393
</div>
9494
</div>}
9595
<form onSubmit={(e) => this.handleSubmit(e)} styleName="row">
96-
<label htmlFor="upload">Upload Picture</label>
96+
<label htmlFor="upload">Upload</label>
9797
<div styleName="upload-input">
9898
<input
9999
key={inputKey}

src/routes/EditData/components/UploadedPictures/UploadedPictures.jsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import CSSModules from 'react-css-modules';
33
import Button from 'components/Button';
44
import styles from './UploadedPictures.scss';
55
import UploadPicture from '../UploadPicture';
6-
6+
import {browserHistory} from 'react-router';
77

88
/*
99
* UploadedPictures
@@ -21,8 +21,12 @@ export const UploadedPictures = ({pictures, removePicture}) => (
2121

2222
{/* uploaded-pictures end */}
2323
<div styleName="actions">
24-
<Button color="black" className={styles.btnMargin}>Cancel</Button>
25-
<Button type="submit" color="blue">Save</Button>
24+
<Button color="black" className={styles.btnMargin} onClick={() => {
25+
browserHistory.push('/my-request');
26+
}}>Cancel</Button>
27+
<Button type="submit" color="blue" onClick={() => {
28+
browserHistory.push('/my-request');
29+
}}>Save</Button>
2630
</div>
2731
{/* actions end */}
2832
</div>

src/routes/EditData/containers/EditDataContainer.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {actions} from '../modules/EditData';
44
import EditDataView from '../components/EditDataView';
55

66
const resolve = [{
7-
promise: ({store: {dispatch}}) => dispatch(actions.load()),
7+
promise: ({params, store: {dispatch}}) => dispatch(actions.load(params.requestId)),
88
}];
99

1010
const mapState = (state) => state.editData;

src/routes/EditData/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import {injectReducer} from '../../store/reducers';
22

33
export default (store) => ({
4-
path: 'edit-data',
5-
name: 'Edit Data', /* Breadcrumb name */
4+
path: 'edit-data(/:requestId)',
5+
name: 'Mission Results', /* Breadcrumb name */
66
staticName: true,
77
getComponent(nextState, cb) {
88
require.ensure([], (require) => {

src/routes/EditData/modules/EditData.js

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,9 @@ export const sendRequest = (values) => new Promise((resolve) => {
2020
});
2121

2222
// load initial data and get federation token
23-
export const load = (requestId = '587981a6878d044ca0c76c40') => async(dispatch) => {
23+
export const load = (requestId) => async(dispatch) => {
2424
// TODO: requestId should be from query string
2525
// mock implementation for demo
26-
2726
const result = await APIService.getFederationToken({
2827
type: 'REQUEST',
2928
requestId,
@@ -44,11 +43,33 @@ export const load = (requestId = '587981a6878d044ca0c76c40') => async(dispatch)
4443
key: item.Key,
4544
status: 'uploaded',
4645
src: s3.getSignedUrl('getObject', {Bucket: result.data.s3Bucket, Key: item.Key}),
46+
file: getFileInfo(item.Key),
4747
}))
4848
.value();
4949
dispatch({type: LOADED, payload: {...result.data, s3, pictures}});
5050
};
5151

52+
// get file info based on file name
53+
const getFileInfo = (key) => {
54+
let fileName = key.split('/').pop();
55+
let fileExtension = fileName.split('.').pop();
56+
57+
let fileInfo = {
58+
'name': fileName
59+
};
60+
61+
if(fileExtension === 'jpeg' || fileExtension === 'jpg' || fileExtension === 'gif' || fileExtension === 'png' || fileExtension === 'bmp') {
62+
fileInfo['type'] = 'image';
63+
} else if(fileExtension === 'pdf') {
64+
fileInfo['type'] = 'pdf';
65+
} else if(fileExtension && fileExtension.length > 0) {
66+
fileInfo['type'] = fileExtension;
67+
} else {
68+
fileInfo['type'] = 'file';
69+
}
70+
return fileInfo;
71+
};
72+
5273
// upload picture to AWS
5374
export const uploadPicture = (file) => async(dispatch, getState) => {
5475
const {s3KeyPrefix, s3Bucket, s3} = getState().editData;
@@ -71,6 +92,7 @@ export const uploadPicture = (file) => async(dispatch, getState) => {
7192
reader.onloadend = () => resolve(reader.result);
7293
reader.readAsDataURL(file);
7394
}),
95+
file: getFileInfo(file.name),
7496
},
7597
});
7698
await request.promise();

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy