• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

mendersoftware / gui / 1113439055

19 Dec 2023 09:01PM UTC coverage: 82.752% (-17.2%) from 99.964%
1113439055

Pull #4258

gitlab-ci

mender-test-bot
chore: Types update

Signed-off-by: Mender Test Bot <mender@northern.tech>
Pull Request #4258: chore: Types update

4326 of 6319 branches covered (0.0%)

8348 of 10088 relevant lines covered (82.75%)

189.39 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

76.0
/src/js/components/common/forms/fileupload.js
1
// Copyright 2021 Northern.tech AS
2
//
3
//    Licensed under the Apache License, Version 2.0 (the "License");
4
//    you may not use this file except in compliance with the License.
5
//    You may obtain a copy of the License at
6
//
7
//        http://www.apache.org/licenses/LICENSE-2.0
8
//
9
//    Unless required by applicable law or agreed to in writing, software
10
//    distributed under the License is distributed on an "AS IS" BASIS,
11
//    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
//    See the License for the specific language governing permissions and
13
//    limitations under the License.
14
import React, { useState } from 'react';
15
import Dropzone from 'react-dropzone';
16
import { useDispatch } from 'react-redux';
17

18
// material ui
19
import { Clear as ClearIcon, CloudUploadOutlined as FileIcon } from '@mui/icons-material';
20
import { IconButton, TextField } from '@mui/material';
21

22
import { setSnackbar } from '../../../actions/appActions';
23

24
export const FileUpload = ({ enableContentReading = true, fileNameSelection, onFileChange, onFileSelect = () => undefined, placeholder, style = {} }) => {
20✔
25
  const [filename, setFilename] = useState(fileNameSelection);
62✔
26
  const dispatch = useDispatch();
62✔
27

28
  const onDrop = (acceptedFiles, rejectedFiles) => {
62✔
29
    if (acceptedFiles.length) {
4!
30
      if (enableContentReading) {
4!
31
        let reader = new FileReader();
4✔
32
        reader.readAsBinaryString(acceptedFiles[0]);
4✔
33
        reader.fileName = acceptedFiles[0].name;
4✔
34
        reader.onload = () => {
4✔
35
          const str = reader.result.replace(/\n|\r/g, '\n');
3✔
36
          onFileChange(str);
3✔
37
        };
38
        reader.onerror = error => {
4✔
39
          console.log('Error: ', error);
×
40
          setFilename();
×
41
        };
42
      }
43
      setFilename(acceptedFiles[0].name);
4✔
44
      onFileSelect(acceptedFiles[0]);
4✔
45
    }
46
    if (rejectedFiles.length) {
4!
47
      dispatch(setSnackbar(`File '${rejectedFiles[0].name}' was rejected.`));
×
48
    }
49
  };
50

51
  const onClear = () => {
62✔
52
    onFileChange();
×
53
    onFileSelect();
×
54
    setFilename();
×
55
  };
56

57
  return filename ? (
62✔
58
    <div style={style}>
59
      <TextField id="keyfile" value={filename} disabled={true} style={{ color: 'rgba(0, 0, 0, 0.8)', borderBottom: '1px solid rgb(224, 224, 224)' }} />
60
      <IconButton style={{ top: '6px' }} onClick={onClear} size="large">
61
        <ClearIcon />
62
      </IconButton>
63
    </div>
64
  ) : (
65
    <div style={style}>
66
      <Dropzone activeClassName="active" rejectClassName="active" multiple={false} onDrop={onDrop}>
67
        {({ getRootProps, getInputProps }) => (
68
          <div {...getRootProps()} style={{ padding: 15 }} className="dropzone onboard dashboard-placeholder flexbox centered">
33✔
69
            <input {...getInputProps()} />
70
            <FileIcon className="icon" style={{ height: 24, width: 24, verticalAlign: 'middle', marginTop: '-2px' }} />
71
            <div className="margin-left-small" style={{ fontSize: '11pt' }}>
72
              {placeholder}
73
            </div>
74
          </div>
75
        )}
76
      </Dropzone>
77
    </div>
78
  );
79
};
80

81
export default FileUpload;
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc