Appearance
Rapid Connect Documentation
File: src/components/rapidConnect/index.svelte
Overview
This component facilitates rapid device connection by generating QR codes and join codes for instant authentication and pairing. It's designed for quick setup of Headset devices in a tenant environment.
Module Script (API Operations)
Interfaces
typescript
export interface IRapidConnectData {
authToken: string;
displayName: string;
durationInSeconds: number;
joinCode: string;
qrCode: string;
uniqueId: string;
}
export interface IRapidConnectMeetingResponse {
alias: string;
data: any;
description: string;
displayName: string;
endDate: Date;
meetingId: string;
meetingPin: string;
node: string;
sharedFileId: any;
sharedFileUrl: any;
startDate: Date;
title: string;
}Core Functions
typescript
// Get basic tenant information
export async function getUnauthenticatedTenantInfo() {
// GraphQL query implementation
}
// Initiate rapid connection process
export async function initiateRapidConnect(deviceId: string) {
// Mutation implementation
}Component Script
State Management
typescript
let busy = true; // Loading state
let tenantInfo: { id: number; name: string } | null = null; // Tenant details
let rapidConnectData: IRapidConnectData | null = null; // Connection data
let expirationTimer: ReturnType<typeof setTimeout> | null = null; // Session timer
const deviceId = nanoid(36); // Unique device identifierCore Methods
typescript
// Initialize connection process
async function initializeConnection() {
// Fetches tenant info and generates connection data
// Handles automatic refresh before expiration
}
// Handle successful connection
async function handleRapidConnect(data: IRapidConnectData) {
// Sets auth token and initiates real-time connection
}
// Handle device addition event
function onDeviceAdded(data: any) {
// Routes to appropriate meeting URL with connection data
}Lifecycle Hooks
typescript
onMount(() => {
initializeConnection();
return () => {
if (expirationTimer) {
clearTimeout(expirationTimer);
}
};
});
onDestroy(() => {
unsubscribe("onDeviceAdded", onDeviceAdded);
});UI Structure
Main Layout
svelte
<div class="w-screen h-screen grid justify-center items-center">
{#if busy}
<!-- Loading spinner -->
<Chasing />
{:else if rapidConnectData}
<!-- Connection interface -->
<div class="" in:scale>
<!-- Tenant information -->
<p class="text-3xl text-center pb-5">
<strong>Tenant:</strong> {tenantInfo.name}
</p>
<!-- Device display -->
<p class="flex justify-center items-center gap-2">
<Icon src={DesktopComputer} size="30" />
<span class="text-xl">{rapidConnectData.displayName}</span>
</p>
<!-- QR Code -->
<img
src={rapidConnectData.qrCode}
alt="qrcode"
class="w-[480px] h-[430px]"
/>
<!-- Join code -->
<p class="text-3xl text-center">
<span class="text-black font-semibold">Code:</span>
<span class="tracking-wider"> {rapidConnectData.joinCode}</span>
</p>
</div>
{/if}
</div>Key Features
Quick Connection Setup:
- Generates unique QR codes and join codes
- Automatic token refresh before expiration
- Real-time connection monitoring
Tenant Context:
- Displays tenant information for context
- Maintains tenant-specific authentication
User Experience:
- Clean, centered interface
- Clear visual hierarchy
- Loading states during initialization
- Smooth transitions
Security:
- Short-lived authentication tokens
- Unique session identifiers
- Proper token management
Event Flow
Initialization:
- Generate unique device ID
- Fetch tenant information
- Create rapid connection session
Connection:
- Display QR code and join code
- Monitor for device connections
- Handle successful pairing
Expiration:
- Automatically refresh session before expiration
- Clean up previous session
Dependencies
nanoidfor unique ID generation@steeze-ui/heroiconsfor icons- Custom real-time communication utilities
- Keycloak token management
- Routing utilities
Error Handling
- Catches and displays API errors
- Handles subscription cleanup
- Manages token expiration gracefully
- Provides visual feedback during loading
Usage Notes
Initialization:
- Automatically starts connection process on mount
- Shows loading state until ready
Connection:
- Users can scan QR code or enter join code
- Successful connection redirects to appropriate page
Session Management:
- Automatically refreshes before expiration
- Cleans up resources on unmount
Responsive Design:
- Fits any screen size
- Centered content for optimal viewing
Related Components