import { KeyboardAwareScrollView } from "react-native-keyboard-controller"; import { type ExternalPathString, useRouter } from "expo-router"; import { styles } from "@/styles/components/largeFileDisplay"; import FileDisplay from "@/components/FileDisplay"; import { MaterialIcons } from "@expo/vector-icons"; import { getTags } from "@/functions/zipline/tags"; import { convertToBytes } from "@/functions/util"; import { isLightColor } from "@/functions/color"; import * as FileSystem from "expo-file-system"; import TextInput from "@/components/TextInput"; import { useEffect, useState } from "react"; import * as Clipboard from "expo-clipboard"; import * as db from "@/functions/database"; import Select from "@/components/Select"; import Button from "@/components/Button"; import Popup from "@/components/Popup"; import React from "react"; import axios from "axios"; import { removeFileFromFolder, addFileToFolder, getFolders, } from "@/functions/zipline/folders"; import { type EditFileOptions, deleteFile, editFile, } from "@/functions/zipline/files"; import type { APIFoldersNoIncl, APIFile, APITags, DashURL, } from "@/types/zipline"; import { type ColorValue, ToastAndroid, Pressable, Text, View, } from "react-native"; interface Props { file: APIFile; hidden: boolean; onClose: (refresh?: boolean) => void | Promise; } export default function LargeFileDisplay({ file, hidden, onClose }: Props) { const router = useRouter(); const dashUrl = db.get("url") as DashURL | null; const [tags, setTags] = useState([]); const [folders, setFolders] = useState([]); const [fileContent, setFileContent] = useState(null); const [filePassword, setFilePassword] = useState(file.password); const [fileMaxViews, setFileMaxViews] = useState( file.maxViews, ); const [fileOriginalName, setFileOriginalName] = useState( file.originalName, ); const [fileType, setFileType] = useState(file.type); const [fileFolderId, setFileFolderId] = useState( file.folderId, ); const [fileFavorite, setFileFavorite] = useState(file.favorite); const [tempHidden, setTempHidden] = useState(false); const [deleteFilePopup, setDeleteFilePopup] = useState(false); const [editFilePopup, setEditFilePopup] = useState(false); const [editFileMaxViews, setEditFileMaxViews] = useState( file.maxViews, ); const [editFileOriginalName, setEditFileOriginalName] = useState< string | null >(file.originalName); const [editFileType, setEditFileType] = useState(file.type); const [editFilePassword, setEditFilePassword] = useState(null); useEffect(() => { (async () => { const tags = await getTags(); const folders = await getFolders(true); setTags(typeof tags === "string" ? [] : tags); setFolders(typeof folders === "string" ? [] : folders); })(); }, []); useEffect(() => { if (fileType.startsWith("text/")) { (async () => { const res = await axios.get(`${dashUrl}/raw/${file.name}`, { responseType: "text", }); setFileContent(res.data as string); })(); } setDeleteFilePopup(false); setTempHidden(false); }, [file, dashUrl, fileType]); return ( <>