aboutsummaryrefslogtreecommitdiff
path: root/FrontEnd/src/app/views/timeline-common/TimelineLine.tsx
blob: 593250bdbd077bc74a9b58d0da175841b6934d0d (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
import clsx from "clsx";
import React from "react";

export interface TimelineLineProps {
  current?: boolean;
  startSegmentLength?: string | number;
  center: "node" | "loading" | "none";
  className?: string;
  style?: React.CSSProperties;
}

const TimelineLine: React.FC<TimelineLineProps> = ({
  startSegmentLength,
  center,
  current,
  className,
  style,
}) => {
  return (
    <div className={clsx("timeline-line", className)} style={style}>
      <div className="segment start" style={{ height: startSegmentLength }} />
      {center !== "none" ? (
        <div className="node-container">
          <div className="node"></div>
          {center === "loading" ? (
            <svg className="node-loading-edge" viewBox="0 0 100 100">
              <path
                d="M 50,10 A 40 40 45 0 1 78.28,21.72"
                stroke="currentcolor"
                strokeLinecap="square"
                strokeWidth="8"
              />
            </svg>
          ) : null}
        </div>
      ) : null}
      {center !== "loading" ? <div className="segment end"></div> : null}
      {current && <div className="segment current-end" />}
    </div>
  );
};

export default TimelineLine;