src/views/Home/Why.jsx (146 lines of code) (raw):

import { useState, useEffect, useRef } from "react"; import { Carousel, Space, Button, Image } from "antd"; import { PlayCircleOutlined } from "@ant-design/icons"; import { useNavigate } from "react-router-dom"; import { useTranslation, useVersions } from "../../hooks"; import "./why.scss"; export const Why = () => { const { locale, t } = useTranslation(); const [time, setTime] = useState(7000); const navigate = useNavigate(); const timerRef = useRef(); const carouselRef = useRef(); const { currentVersion } = useVersions(); useEffect(() => { clearInterval(timerRef.current); timerRef.current = setInterval(() => { carouselRef.current.next(); }, time); return () => { clearInterval(timerRef.current); }; // eslint-disable-next-line }, [time]); return ( <div className="home-why"> <div className="home-why-title"> <div>Why</div> <div className="gradient-text">DolphinScheduler</div> </div> <Carousel ref={carouselRef} className="home-why-content" dots={{ className: "home-why-dots" }} afterChange={() => { setTime(30000); }} > {ITEMS.map((item, index) => ( <div className="home-why-item" key={index}> <div className="home-why-item-desc"> <div className="home-why-item-title">{t(item.title)}</div> <ul className="home-why-item-slip"> {item.subs.map((sub, j) => ( <li className="home-why-item-text" key={j}> {t(sub.text)} </li> ))} </ul> <Space size={28}> <Button type="primary" shape="round" size={window.innerWidth > 640 ? "large" : "medium"} onClick={() => { navigate(`/${locale}/docs/${currentVersion}`); }} > {t("read_the_documentation")} </Button> <Button icon={<PlayCircleOutlined />} shape="round" size={window.innerWidth > 640 ? "large" : "medium"} onClick={() => { window.open( "https://www.youtube.com/watch?v=0B9qzn3eMGc", "_blank" ); }} > {t("quick_start")} </Button> </Space> </div> <Image src={item.img} preview={false} /> </div> ))} </Carousel> </div> ); }; const ITEMS = [ { title: "why_1_title", img: "/images/home/home-3-1.png", subs: [ { text: "why_1_tips1", }, { text: "why_1_tips2", }, { text: "why_1_tips3", }, ], }, { title: "why_2_title", img: "/images/home/home-3-2.png", subs: [ { text: "why_2_tips1", }, { text: "why_2_tips2", }, { text: "why_2_tips3", }, ], }, { title: "why_3_title", img: "/images/home/home-3-3.png", subs: [ { text: "why_3_tips1", }, { text: "why_3_tips2", }, { text: "why_3_tips3", }, ], }, { title: "why_4_title", img: "/images/home/home-3-4.png", subs: [ { text: "why_4_tips1", }, { text: "why_4_tips2", }, { text: "why_4_tips3", }, { text: "why_4_tips4", }, ], }, ];