import Banner, { AlertContainer, BannerType, TopBannerContainer, } from "@components/Banner"; import { Level, PrismSession, PrismSessionState, } from "@prismlabs/web-scan-core"; import React, { useState } from "react"; import { useTranslation } from "react-i18next"; import styled from "styled-components"; import { resolveSvg } from "../../assets/assetRegistry"; import { YellowIcon, YellowIconType } from "../components"; import DarkbackgroundBlur from "../components/DarkBackgroundBlur"; import ScreenContainer from "../components/ScreenContainer"; import LevelIndicator from "./LevelIndicator"; const LevelIndicatorContainer = styled.div` position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 1; /* Above the blurred background */ display: flex; justify-content: center; align-items: center; width: 100%; height: auto; `; interface LevelScreenProps { prismSession: PrismSession; } const LevelScreen: React.FC = ({ prismSession }) => { const { t } = useTranslation(); const [isBannerVisible, setIsBannerVisible] = useState(true); const [levelValue, setLevelValue] = useState(null); const handleDismissBanner = () => { // start listening now, since it needs to be in response to a user interaction prismSession.captureSession.levelReadinessDistributor.startListening(); setIsBannerVisible(false); }; const handleLevelChange = (level: Level) => { setLevelValue(level); }; const handleLevelReady = () => { prismSession.continueFrom(PrismSessionState.LEVELING); prismSession.captureSession.levelReadinessDistributor.stopListening(); }; const getLevelTitle = (level: Level | null): string => { switch (level) { case Level.LEVEL: return t("leveling.level.level"); case Level.BACKWARDS: return t("leveling.level.backwards"); case Level.FORWARDS: return t("leveling.level.forwards"); default: return t("leveling.level.unknownLevel"); } }; const getLevelIcon = (level: Level | null): React.ReactNode | undefined => { switch (level) { case Level.BACKWARDS: return ; case Level.FORWARDS: return ; // Replace with actual icon component default: return undefined; // Replace with actual icon component } }; return ( {isBannerVisible && ( Phone Position } onButtonClick={handleDismissBanner} /> )} {!isBannerVisible && levelValue && ( )} ); }; export default LevelScreen;