terriajs
Version:
Geospatial data visualization platform.
72 lines (62 loc) • 1.89 kB
JSX
/**
* <Guidance /> is the (currently unused) "in app tour" where we have the dots,
* whereas <Guide /> is the generic "slider/static tour"
*/
import React, { useState } from "react";
import PropTypes from "prop-types";
import classNames from "classnames";
import { useTranslation } from "react-i18next";
import Styles from "./guidance.scss";
import Text from "../../Styled/Text";
import GuidanceDot from "./GuidanceDot.jsx";
const GuidanceProgress = (props) => {
const countArray = Array.from(Array(props.max).keys()).map((e) => e++);
const countStep = props.step;
return (
<div className={Styles.indicatorWrapper}>
{countArray.map((count) => {
return (
<div
key={count}
className={classNames(Styles.indicator, {
[Styles.indicatorEnabled]: count < countStep
})}
/>
);
})}
</div>
);
};
GuidanceProgress.propTypes = {
max: PropTypes.number.isRequired,
step: PropTypes.number.isRequired,
children: PropTypes.node.isRequired
};
const GuidanceContextModal = ({ children }) => {
const { t } = useTranslation();
return (
<div className={Styles.context}>
<Text tallerHeight>{children}</Text>
<button className={Styles.btn}>{t("general.next")}</button>
{t("general.skip")}
{/* ? */}
<GuidanceProgress step={2} max={4} />
</div>
);
};
GuidanceContextModal.propTypes = {
children: PropTypes.node.isRequired
};
export const Guidance = ({ children }) => {
const [showGuidance, setShowGuidance] = useState(false);
return (
<div className={Styles.guidance}>
<GuidanceDot onClick={() => setShowGuidance(!showGuidance)} />
{showGuidance && <GuidanceContextModal>{children}</GuidanceContextModal>}
</div>
);
};
Guidance.propTypes = {
children: PropTypes.node.isRequired
};
export default Guidance;