summaryrefslogtreecommitdiff
path: root/util/getLinkColor.ts
blob: 33f709417bfcf95166e8f0343d6e0400511b79b2 (about) (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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import { initialColoring, initialVisuals } from '../components/config'
import { LinksByNodeId } from '../pages'
import { getLinkNodeColor } from './getLinkNodeColor'
import { getThemeColor } from './getThemeColor'

export const getLinkColor = ({
  sourceId,
  targetId,
  needsHighlighting,
  theme,
  visuals,
  highlightColors,
  opacity,
  linksByNodeId,
  coloring,
  cluster,
}: {
  sourceId: string
  targetId: string
  needsHighlighting: boolean
  theme: any
  visuals: typeof initialVisuals
  highlightColors: Record<string, any>
  opacity: number
  linksByNodeId: LinksByNodeId
  coloring: typeof initialColoring
  cluster: any
}) => {
  if (!visuals.linkHighlight && !visuals.linkColorScheme && !needsHighlighting) {
    const nodeColor = getLinkNodeColor({
      sourceId,
      targetId,
      linksByNodeId,
      visuals,
      coloring,
      cluster,
    })
    return getThemeColor(nodeColor, theme)
  }

  if (!needsHighlighting && !visuals.linkColorScheme) {
    const nodeColor = getLinkNodeColor({
      sourceId,
      targetId,
      linksByNodeId,
      visuals,
      coloring,
      cluster,
    })
    return highlightColors[nodeColor][visuals.backgroundColor](visuals.highlightFade * opacity)
  }

  if (!needsHighlighting) {
    return highlightColors[visuals.linkColorScheme][visuals.backgroundColor](
      visuals.highlightFade * opacity,
    )
  }

  if (!visuals.linkHighlight && !visuals.linkColorScheme) {
    const nodeColor = getLinkNodeColor({
      sourceId,
      targetId,
      linksByNodeId,
      visuals,
      coloring,
      cluster,
    })
    return getThemeColor(nodeColor, theme)
  }

  if (!visuals.linkHighlight) {
    return getThemeColor(visuals.linkColorScheme, theme)
  }

  if (!visuals.linkColorScheme) {
    return highlightColors[
      getLinkNodeColor({ sourceId, targetId, linksByNodeId, visuals, coloring, cluster })
    ][visuals.linkHighlight](opacity)
  }

  return highlightColors[visuals.linkColorScheme][visuals.linkHighlight](opacity)
}