// 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.js'; import { InstallScreenStep } from '../types/InstallScreen.js'; import { InstallScreenErrorStep } from './installScreen/InstallScreenErrorStep.js'; import { InstallScreenLinkInProgressStep } from './installScreen/InstallScreenLinkInProgressStep.js'; import { InstallScreenQrCodeNotScannedStep } from './installScreen/InstallScreenQrCodeNotScannedStep.js'; import { InstallScreenBackupImportStep } from './installScreen/InstallScreenBackupImportStep.js'; // We can't always use destructuring assignment because of the complexity of this props // type. type PropsType = | { step: InstallScreenStep.QrCodeNotScanned; screenSpecificProps: ComponentProps< typeof InstallScreenQrCodeNotScannedStep >; } | { step: InstallScreenStep.LinkInProgress; screenSpecificProps: ComponentProps< typeof InstallScreenLinkInProgressStep >; } | { step: InstallScreenStep.BackupImport; screenSpecificProps: ComponentProps; } | { step: InstallScreenStep.Error; screenSpecificProps: ComponentProps; }; export function InstallScreen(props: Readonly): ReactElement { switch (props.step) { case InstallScreenStep.Error: return ; case InstallScreenStep.QrCodeNotScanned: return ( ); case InstallScreenStep.LinkInProgress: return ; case InstallScreenStep.BackupImport: return ; default: throw missingCaseError(props); } }