import { Ionicons } from '@expo/vector-icons' import { Block, ConfirmModal, ListEmpty, Text, Toast, VideoBox } from '@share/components' import { FlashList } from '@shopify/flash-list' import { router, Stack, useFocusEffect } from 'expo-router' import { observer } from 'mobx-react-lite' import React, { useCallback, useEffect } from 'react' import { bleManager } from '@/ble/managers/bleManager' import BannerSection from '@/components/BannerSection' import { bleStore, userStore } from '@/stores' import { screenWidth } from '@/utils' import { buildCdnUrl } from '@/utils/getCDNKey' // ============ 主组件 ============ const Device = observer(() => { const { user, isAuthenticated } = userStore const { isConnected } = bleStore.state const { galleryList } = bleStore const itemWidth = Math.floor((screenWidth - 12 * 2 - 12 * 2) / 3) useFocusEffect(() => { if (!isAuthenticated) { router.replace('/') router.push('/auth') } }) useEffect(() => { if (!isConnected) { Toast.show({ title: `设备已断开连接` }) router.back() } }, [isConnected]) const renderGridItem = useCallback( ({ item }: { item: any }) => { const handleDeleteConfirm = async () => { try { await bleManager.deleteFile(item) bleStore.removeGalleryItem(item) Toast.hideModal() } catch (error: any) { // console.error('Error deleting file:', error) // Toast.show({ title: `删除失败: ${error?.message || error}` }) } } const handleDelete = async () => { if (!isConnected) { Toast.show({ title: `请先连接设备` }) return } if (galleryList.length <= 1) { Toast.show({ title: `至少保留一个文件` }) return } Toast.showModal( 确定要删除这个文件吗? } onCancel={() => Toast.hideModal()} onConfirm={handleDeleteConfirm} />, ) } const url = buildCdnUrl(item) if (!url) return null return ( {/* 删除按钮 */} { handleDelete() }} > ) }, [itemWidth], ) const renderHeader = () => ( router.back()}> 吧唧管理 ) return ( {renderHeader()} 'row'} ItemSeparatorComponent={() => } keyExtractor={(item) => item} ListEmptyComponent={} numColumns={3} renderItem={renderGridItem} /> ) }) export default Device