Completed
Pull Request — master (#220)
by Alejandro
08:17
created

src/utils/utils.js   A

Complexity

Total Complexity 4
Complexity/F 0

Size

Lines of Code 68
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Test Coverage

Coverage 81.48%

Importance

Changes 0
Metric Value
wmc 4
eloc 58
mnd 4
bc 4
fnc 0
dl 0
loc 68
ccs 22
cts 27
cp 0.8148
rs 10
bpm 0
cpm 0
noi 0
c 0
b 0
f 0
1
import L from 'leaflet';
2
import marker2x from 'leaflet/dist/images/marker-icon-2x.png';
3
import marker from 'leaflet/dist/images/marker-icon.png';
4
import markerShadow from 'leaflet/dist/images/marker-shadow.png';
5
import { range } from 'ramda';
6
import { useState } from 'react';
7
8 15
const TEN_ROUNDING_NUMBER = 10;
9 15
const DEFAULT_TIMEOUT_DELAY = 2000;
10 15
const { ceil } = Math;
11
12 15
export const stateFlagTimeout = (setTimeout) => (
13
  setState,
14
  flagName,
15
  initialValue = true,
16
  delay = DEFAULT_TIMEOUT_DELAY
17
) => {
18 1
  setState({ [flagName]: initialValue });
19 1
  setTimeout(() => setState({ [flagName]: !initialValue }), delay);
20
};
21
22 15
export const useStateFlagTimeout = (setTimeout) => (initialValue = true, delay = DEFAULT_TIMEOUT_DELAY) => {
23
  const [ flag, setFlag ] = useState(initialValue);
24
  const callback = () => {
25
    setFlag(!initialValue);
26
    setTimeout(() => setFlag(initialValue), delay);
27
  };
28
29
  return [ flag, callback ];
30
};
31
32 15
export const determineOrderDir = (clickedField, currentOrderField, currentOrderDir) => {
33 11
  if (currentOrderField !== clickedField) {
34 4
    return 'ASC';
35
  }
36
37 7
  const newOrderMap = {
38
    ASC: 'DESC',
39
    DESC: undefined,
40
  };
41
42 7
  return currentOrderDir ? newOrderMap[currentOrderDir] : 'ASC';
43
};
44
45 15
export const fixLeafletIcons = () => {
46 1
  delete L.Icon.Default.prototype._getIconUrl;
47
48 1
  L.Icon.Default.mergeOptions({
49
    iconRetinaUrl: marker2x,
50
    iconUrl: marker,
51
    shadowUrl: markerShadow,
52
  });
53
};
54
55 15
export const rangeOf = (size, mappingFn, startAt = 1) => range(startAt, size + 1).map(mappingFn);
56
57 15
export const roundTen = (number) => ceil(number / TEN_ROUNDING_NUMBER) * TEN_ROUNDING_NUMBER;
58
59 15
export const useToggle = (initialValue = false) => {
60 2
  const [ flag, setFlag ] = useState(initialValue);
61
62 2
  return [ flag, () => setFlag(!flag) ];
63
};
64
65 26
export const formatDate = (format = 'YYYY-MM-DD') => (date) => date && date.format ? date.format(format) : date;
66
67
export const formatIsoDate = (date) => date && date.format ? date.format() : date;
68