src/ui/StartScreen/RecentlyFiles/RecentlyFiles.jsx (53 lines of code) (raw):

import React, { useState, useEffect } from 'react'; import css from './RecentlyFiles.module.css'; const RECENT_FILES_KEY = 'recentFiles'; const MINUTE = 60; const HOUR = 3600; const DAY = 86400; const formatRelativeTime = (timestamp) => { const now = Date.now(); const seconds = Math.floor((now - timestamp) / 1000); if (seconds < MINUTE) { return `${seconds} seconds ago`; } else if (seconds < HOUR) { const minutes = Math.floor(seconds / MINUTE); return `${minutes} minutes ago`; } else if (seconds < DAY) { const hours = Math.floor(seconds / HOUR); return `${hours} hours ago`; } else { const date = new Date(timestamp); const options = { month: 'short', day: 'numeric', year: 'numeric', hour: '2-digit', minute: '2-digit' }; return date.toLocaleString('en-US', options); } }; const RecentlyFiles = () => { const [files, setFiles] = useState([]); useEffect(() => { setFiles(JSON.parse(localStorage.getItem(RECENT_FILES_KEY)) || []); }, []); const timestamps = files.map((file) => file.timestamp); const fileNames = files.map((file) => file.fileName); return files.length ? ( <div className={css.files_container}> <div className={css.header}>Recently opened files:</div> <div className={css.files}> <div className={css.left}> {timestamps.map((timestamp, idx) => ( <div key={timestamp + `_${idx}`} className={css.element}> {formatRelativeTime(timestamp)} </div> ))} </div> <div className={css.right}> {fileNames.map((fileName, idx) => ( <div key={fileName + `_${idx}`} className={css.element}> {fileName} </div> ))} </div> </div> </div> ) : null; }; export default RecentlyFiles;