📦 EqualifyEverything / equalify-v2-dashboard-mocks

📄 utils.ts · 49 lines
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49// if it's in, it goes out; if it's out, it goes in
export function toggleArrayElement(array: any[], element: any) {
  const index = array.indexOf(element)
  if (index > -1) { array.splice(index, 1) } 
  else { array.push(element) }
  return array
}

// sorts numbers numerically and other stuff alphabetically
export function compare(a: any, b: any, order: SortOrder = 'asc') {
  if (typeof a === "number" && typeof b === "number") {
    return order === "asc" ? a - b : b - a
  } else {
    const comparison = String(a).localeCompare(String(b))
    return order === "asc" ? comparison : -comparison
  }
}

export function sortObjects(arr: any[], property: string, order: SortOrder = "asc") {
  return arr.sort((a, b) => compare(a[property], b[property], order))
}

export function groupAndSort(arr: any[], groupKey: string, sortKey: string, sortOrder: SortOrder = 'asc') {
  return arr.sort((a, b) => {
    let comparison = compare(a[groupKey], b[groupKey])
    if (comparison === 0) {
      comparison = compare(a[sortKey], b[sortKey], sortOrder)
    }
    return comparison
  })
}
 

export function intersects(arr1: any[], arr2: any[]) {
  const set2 = new Set(arr2)
  const intersection = arr1.filter(item => set2.has(item))
  return !!intersection.length
}

export function toKebabCase(str: string) {
  return str
    .replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, '$1-$2')
    .toLowerCase()
}

export function capitalize(str: string) {
  if (!str) { return '' }
  return str.charAt(0).toUpperCase() + str.slice(1)
}