/* eslint-disable @typescript-eslint/no-shadow, react-native/no-inline-styles */ import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { useRef } from 'react'; import { StyleSheet, View, Text, TextInput, Button, SafeAreaView, } from 'react-native'; import AsyncStorage from '@react-native-async-storage/async-storage'; import { PagecallView, PagecallViewRef } from 'react-native-pagecall'; const styles = StyleSheet.create({ textInput: { borderWidth: 1, marginTop: 4, padding: 8, width: 280, borderRadius: 8, marginBottom: 16, }, messageBox: { position: 'absolute', bottom: 128, left: 0, right: 0, alignItems: 'center', }, loadingBox: { position: 'absolute', top: 0, left: 0, right: 0, bottom: 0, alignItems: 'center', justifyContent: 'center', backgroundColor: '#1361FF', }, }); export default function App() { const viewRef = useRef(null); const [roomId, setRoomId] = useState(''); const [accessToken, setAccessToken] = useState(''); const [query, setQuery] = useState(''); const [value, setValue] = useState<{ [key: string]: unknown }>({}); const [mode, setMode] = useState<'meet' | 'replay' | null>(null); useEffect(() => { const interval = setInterval(() => { setValue({}); const now = String(Date.now()); setValue({ now, arr: [1, 2, now], obj: { a: 1, b: now }, mixed: [1, now, { b: now }], }); }, 3000); return () => clearInterval(interval); }, []); useEffect(() => { Promise.all( ['roomId', 'accessToken', 'query'].map((key) => AsyncStorage.getItem(key)) ).then(([roomId, accessToken, query]) => { if (roomId) setRoomId(roomId); if (accessToken) setAccessToken(accessToken); if (query) setQuery(query); }); }, []); useEffect(() => { if (!mode) return; const remember = (key: string, value: string) => (value ? AsyncStorage.setItem(key, value) : AsyncStorage.removeItem(key) ).catch(console.error); Promise.all([ remember('roomId', roomId), remember('accessToken', accessToken), remember('query', query), ]); }, [mode, roomId, accessToken, query]); const handleButtonClick = useCallback(() => { if (!viewRef.current) return; viewRef.current.sendMessage('Hello from React Native!'); }, [viewRef]); const [latestMessage, setLatestMessage] = useState(null); useEffect(() => { if (!latestMessage) return; const timer = setTimeout(() => { setLatestMessage(null); }, 3000); return () => { clearTimeout(timer); }; }, [latestMessage]); const queryParams = useMemo(() => { const params: { [key: string]: string } = {}; query.split('&').forEach((queryItem) => { const [key, value] = queryItem.split('='); if (!key || !value) return; params[key] = value; }); return params; }, [query]); const [isLoading, setLoading] = useState(false); if (!mode) { return ( Room ID Access Token Query (Only for debug)