/* Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ import React, { HTMLProps } from "react"; import classNames from "classnames"; import { Beacon } from "matrix-js-sdk/src/matrix"; import StyledLiveBeaconIcon from "./StyledLiveBeaconIcon"; import { _t } from "../../../languageHandler"; import LiveTimeRemaining from "./LiveTimeRemaining"; import { BeaconDisplayStatus } from "./displayStatus"; import { getBeaconExpiryTimestamp } from "../../../utils/beacon"; import { formatTime } from "../../../DateUtils"; interface Props { displayStatus: BeaconDisplayStatus; displayLiveTimeRemaining?: boolean; withIcon?: boolean; beacon?: Beacon; label?: string; } const BeaconExpiryTime: React.FC<{ beacon: Beacon }> = ({ beacon }) => { const expiryTime = formatTime(new Date(getBeaconExpiryTimestamp(beacon))); return {_t("location_sharing|live_until", { expiryTime })}; }; const BeaconStatus: React.FC> = ({ beacon, displayStatus, displayLiveTimeRemaining, label, className, children, withIcon, ...rest }) => { const isIdle = displayStatus === BeaconDisplayStatus.Loading || displayStatus === BeaconDisplayStatus.Stopped; return (
{withIcon && ( )}
{displayStatus === BeaconDisplayStatus.Loading && ( {_t("location_sharing|loading_live_location")} )} {displayStatus === BeaconDisplayStatus.Stopped && ( {_t("location_sharing|live_location_ended")} )} {displayStatus === BeaconDisplayStatus.Error && ( {_t("location_sharing|live_location_error")} )} {displayStatus === BeaconDisplayStatus.Active && beacon && ( <> <> {label} {displayLiveTimeRemaining ? ( ) : ( )} )}
{children}
); }; export default BeaconStatus;