aboutsummaryrefslogtreecommitdiffstats
path: root/frontend/components/Marquees/Marquees.tsx
blob: 04747fbbe1fe7eb5bb4d9bc205b7c1ed24ec735d (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
import React, { ReactElement } from "react";
import styles from "./Marquee.module.css";
import Marquee from "./Marquee";

export interface MarqueeLink {
  title: string;
  url: string;
}

interface Props {
    links: MarqueeLink[]
}

const getRandomDelayBetween = (start: number, end: number) => `${Math.random() * (end - start) + start}s`;
const getTopFromIndex = (index: number, n: number) => `calc((100% - 50px) * (${index} / ${n - 1}))`;
const getRandomAnimationName = () => Math.random() > 0.5 ? "right" : "left";

const Marquees = ({ links }: Props): ReactElement => {
    return (
        <div className={styles.marqueeContainer}>
            { links.map((link, idx) => (
                <Marquee
                    key={idx}
                    url={link.url}
                    text={link.title}
                    delayShorthand={getRandomDelayBetween(0, 9)}
                    topShorthand={getTopFromIndex(idx, links.length)}
                    direction={getRandomAnimationName()}
                />
            ))}
        </div>
    );
};

export default Marquees;