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

mendersoftware / gui / 913068613

pending completion
913068613

Pull #3803

gitlab-ci

web-flow
Merge pull request #3801 from mzedel/men-6383

MEN-6383 - device check in time
Pull Request #3803: staging alignment

4418 of 6435 branches covered (68.66%)

178 of 246 new or added lines in 27 files covered. (72.36%)

8352 of 10138 relevant lines covered (82.38%)

160.95 hits per line

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

90.63
/src/js/components/common/search.js
1
// Copyright 2022 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, { useEffect, useState } from 'react';
15

16
import { Search as SearchIcon } from '@mui/icons-material';
17
import { InputAdornment, TextField } from '@mui/material';
18
import { makeStyles } from 'tss-react/mui';
19

20
import { TIMEOUTS } from '../../constants/appConstants';
21
import { useDebounce } from '../../utils/debouncehook';
22
import Loader from './loader';
23

24
const useStyles = makeStyles()(() => ({
58✔
25
  root: {
26
    input: {
27
      fontSize: '13px'
28
    }
29
  }
30
}));
31

32
const endAdornment = (
33
  <InputAdornment position="end">
6✔
34
    <Loader show small style={{ marginTop: -10 }} />
35
  </InputAdornment>
36
);
37

38
// due to search not working reliably for single letter searches, only start at 2
39
const MINIMUM_SEARCH_LENGTH = 2;
6✔
40

41
const Search = ({ isSearching, onSearch, placeholder = 'Search devices', searchTerm, style = {} }) => {
6✔
42
  const [searchValue, setSearchValue] = useState('');
603✔
43
  const { classes } = useStyles();
603✔
44

45
  const debouncedSearchTerm = useDebounce(searchValue, TIMEOUTS.debounceDefault);
603✔
46

47
  useEffect(() => {
603✔
48
    if (debouncedSearchTerm.length < MINIMUM_SEARCH_LENGTH) {
12✔
49
      return;
11✔
50
    }
51
    onSearch(debouncedSearchTerm);
1✔
52
  }, [debouncedSearchTerm]);
53

54
  useEffect(() => {
603✔
55
    if (!searchTerm) {
12✔
56
      setSearchValue(searchTerm);
10✔
57
    }
58
  }, [searchTerm]);
59

60
  const onSearchUpdated = ({ target: { value } }) => setSearchValue(value);
603✔
61

62
  const onTriggerSearch = ({ key }) => {
603✔
63
    if (key === 'Enter' && searchValue >= MINIMUM_SEARCH_LENGTH) {
2!
NEW
64
      onSearch(searchValue);
×
65
    }
66
  };
67

68
  const adornment = isSearching ? { endAdornment } : {};
603✔
69
  return (
603✔
70
    <TextField
71
      className={classes.root}
72
      InputProps={{
73
        startAdornment: (
74
          <InputAdornment position="start">
75
            <SearchIcon color="disabled" fontSize="size" />
76
          </InputAdornment>
77
        ),
78
        ...adornment
79
      }}
80
      onChange={onSearchUpdated}
81
      onKeyPress={onTriggerSearch}
82
      placeholder={placeholder}
83
      size="small"
84
      style={style}
85
      value={searchValue}
86
    />
87
  );
88
};
89

90
export default Search;
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