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

mendersoftware / gui / 901187442

pending completion
901187442

Pull #3795

gitlab-ci

mzedel
feat: increased chances of adopting our intended navigation patterns instead of unsupported browser navigation

Ticket: None
Changelog: None
Signed-off-by: Manuel Zedel <manuel.zedel@northern.tech>
Pull Request #3795: feat: increased chances of adopting our intended navigation patterns instead of unsupported browser navigation

4389 of 6365 branches covered (68.96%)

5 of 5 new or added lines in 1 file covered. (100.0%)

1729 existing lines in 165 files now uncovered.

8274 of 10019 relevant lines covered (82.58%)

144.86 hits per line

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

75.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

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

21
export const FileUpload = ({
20✔
22
  enableContentReading = true,
56✔
23
  fileNameSelection,
24
  onFileChange,
25
  onFileSelect = () => undefined,
3✔
26
  placeholder,
27
  setSnackbar,
28
  style = {}
56✔
29
}) => {
30
  const [filename, setFilename] = useState(fileNameSelection);
58✔
31

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

55
  const onClear = () => {
58✔
UNCOV
56
    onFileChange();
×
UNCOV
57
    onFileSelect();
×
UNCOV
58
    setFilename();
×
59
  };
60

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

85
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