"use client"; import { formatDistanceToNow } from "date-fns"; import React, { useEffect, useState, useRef } from "react"; import DocumentIcon from "@/components/Icons/Document"; import FolderIcon from "@/components/Icons/Folder"; import MenuIcon from "@/components/Icons/Menu"; import ContextMenuContainer from "./ContextMenu/container"; import RenamePopup from "./ContextMenu/rename"; const initialContextMenu = { show: false, x: 0, y: 0, file: null, }; const renamePopupProps = { show: false, }; interface FileProps { attributes: { name: string; modified_at: string; size: number; is_file: boolean; }; } const Index = () => { const [apiKey, setApiKey] = useState(""); const [fileList, setFileList] = useState([]); const [contextMenu, setContextMenu] = useState(initialContextMenu); const [renamePopup, setRenamePopup] = useState(renamePopupProps); const [file, setFile] = useState(null); const showRenamePopup = () => { console.log("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); setContextMenu(initialContextMenu); setRenamePopup({ show: true }); }; const closeRenamePopup = () => { setRenamePopup(renamePopupProps); }; const handleClickContextMenu = ( e: React.MouseEvent, file: any ) => { e.preventDefault(); const { pageX, pageY } = e; setContextMenu({ show: true, x: pageX, y: pageY, file }); }; const handleContextMenuClose = () => { setContextMenu(initialContextMenu); }; const setCredentials = async () => { setApiKey("ptlc_aDGU4VHNQuN5t6dyxNzVon3UZLR5ehuySmdR7xsUbMm"); }; const formateDate = (isoDate: string) => { const date = new Date(isoDate); return formatDistanceToNow(date, { addSuffix: true }); }; const fetchFiles = async (apiKey: string) => { try { const response = await fetch( "https://ptero.przeqpiciel.com/api/client/servers/0bf192ab/files/list", { method: "GET", headers: { Authorization: `Bearer ${apiKey.toString()}`, "Content-Type": "application/json", }, } ); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); setFileList(data.data); } catch (error) { console.error("Error fetching data:", error); } }; useEffect(() => { const fetchData = async () => { await setCredentials(); while (apiKey === "") { await new Promise((r) => setTimeout(r, 200)); } await fetchFiles(apiKey); }; fetchData(); }, [apiKey]); return ( <> {renamePopup.show && ( )} {contextMenu.show && ( )} {fileList.map((file: FileProps) => (
{file.attributes.is_file ? : }
{file.attributes.name}
{file.attributes.is_file ? file.attributes.size + " bytes" : ""}
{formateDate(file.attributes.modified_at)}
handleClickContextMenu(e, file)}>
))} ); }; export default Index;