// Copyright 2021 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only import type { ComponentProps, ReactElement } from 'react'; import React from 'react'; import { missingCaseError } from '../util/missingCaseError'; import { InstallScreenErrorStep } from './installScreen/InstallScreenErrorStep'; import { InstallScreenChoosingDeviceNameStep } from './installScreen/InstallScreenChoosingDeviceNameStep'; import { InstallScreenLinkInProgressStep } from './installScreen/InstallScreenLinkInProgressStep'; import { InstallScreenQrCodeNotScannedStep } from './installScreen/InstallScreenQrCodeNotScannedStep'; export enum InstallScreenStep { Error, QrCodeNotScanned, ChoosingDeviceName, LinkInProgress, } // We can't always use destructuring assignment because of the complexity of this props // type. /* eslint-disable react/destructuring-assignment */ type PropsType = | { step: InstallScreenStep.Error; screenSpecificProps: ComponentProps; } | { step: InstallScreenStep.QrCodeNotScanned; screenSpecificProps: ComponentProps< typeof InstallScreenQrCodeNotScannedStep >; } | { step: InstallScreenStep.ChoosingDeviceName; screenSpecificProps: ComponentProps< typeof InstallScreenChoosingDeviceNameStep >; } | { step: InstallScreenStep.LinkInProgress; screenSpecificProps: ComponentProps< typeof InstallScreenLinkInProgressStep >; }; export function InstallScreen(props: Readonly): ReactElement { switch (props.step) { case InstallScreenStep.Error: return ; case InstallScreenStep.QrCodeNotScanned: return ( ); case InstallScreenStep.ChoosingDeviceName: return ( ); case InstallScreenStep.LinkInProgress: return ; default: throw missingCaseError(props); } }