ATlast — you'll never need to find your favorites on another platform again. Find your favs in the ATmosphere.
atproto
17
fork

Configure Feed

Select the types of activity you want to include in your feed.

at 6a2bfa021b6221894d7d7b2b5b193aea7c106ca6 62 lines 1.7 kB view raw
1import { parseDataFile } from "../lib/parsers/fileExtractor"; 2import type { SearchResult, UserSettings } from "../types"; 3 4export function useFileUpload( 5 onSearchStart: (results: SearchResult[], platform: string) => void, 6 onStatusUpdate: (message: string) => void, 7 userSettings: UserSettings, 8) { 9 async function handleFileUpload( 10 e: React.ChangeEvent<HTMLInputElement>, 11 platform: string = "tiktok", 12 ) { 13 const file = e.target.files?.[0]; 14 if (!file) return; 15 16 onStatusUpdate(`Processing ${file.name}...`); 17 let usernames: string[] = []; 18 19 try { 20 usernames = await parseDataFile(file, platform); 21 22 console.log(`Loaded ${usernames.length} users from ${platform} data`); 23 onStatusUpdate(`Loaded ${usernames.length} users from ${platform} data`); 24 } catch (error) { 25 console.error("Error processing file:", error); 26 27 const errorMsg = 28 error instanceof Error 29 ? error.message 30 : "There was a problem processing the file. Please check that it's a valid data export."; 31 32 onStatusUpdate(errorMsg); 33 alert(errorMsg); 34 return; 35 } 36 37 if (usernames.length === 0) { 38 const errorMsg = "No users found in the file."; 39 onStatusUpdate(errorMsg); 40 alert(errorMsg); 41 return; 42 } 43 44 const initialResults: SearchResult[] = usernames.map((username) => ({ 45 sourceUser: { 46 username: username, 47 date: "", 48 }, 49 atprotoMatches: [], 50 isSearching: false, 51 selectedMatches: new Set<string>(), 52 sourcePlatform: platform, 53 })); 54 55 onStatusUpdate(`Starting search for ${usernames.length} users...`); 56 onSearchStart(initialResults, platform); 57 } 58 59 return { 60 handleFileUpload, 61 }; 62}