summaryrefslogtreecommitdiff
path: root/src/app/utils/data_utils.js
blob: 327e594d6cf4bc571ac7176e5d777c1ca09153b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * Data manipulation utilities.
 * @module app/utils/data_utils
 */

/**
 * Convert an enum to a lookup
 * @param  {Object}  dictionary: number -> string
 * @return {Object}  dictionary: string -> number
 */
export const enumLookup = (dict) =>
  Object.entries(dict).reduce((lookup, pair) => {
    lookup[pair[1]] = parseInt(pair[0]);
    return lookup;
  }, {});

/**
 * Divide an array into N-item chunks
 * @param  {Array}        arr   array to be chunked
 * @param  {number}       size  items per chunk
 * @return {Array} array of array chunks
 */
export const chunk = (arr, size) =>
  arr.length > size
    ? [arr.slice(0, size), ...chunk(arr.slice(size), size)]
    : [arr];

/**
 * Delay during async operation
 * @param  {number}  delay time to delay
 * @return {Promise}       promise that resolves after a delay
 */
export const delay = (delay = 1) =>
  new Promise((resolve) => setTimeout(resolve, delay));