Skip to content

Enhanced UI with advanced features and improved upload system - #33

Open
NasroelLah wants to merge 22 commits into
longern:mainfrom
NasroelLah:main
Open

Enhanced UI with advanced features and improved upload system#33
NasroelLah wants to merge 22 commits into
longern:mainfrom
NasroelLah:main

Conversation

@NasroelLah

Copy link
Copy Markdown

New Features

  • ✨ Dual view modes: Grid and List view with toggle
  • 🔍 Advanced fuzzy search with exact match option
  • 📊 Flexible sorting: by name, size, or date modified
  • 🎯 Floating upload progress with real-time tracking
  • 🖱️ Enhanced drag & drop with visual feedback
  • 🚫 Upload cancellation and queue management
  • 📱 Responsive toolbar design

UI/UX Improvements

  • 🎨 Modern toolbar with intuitive controls
  • 📋 Detailed list view with file metadata
  • 🔄 Auto-show floating progress for new uploads
  • 🎭 Improved visual feedback for drag operations
  • 📊 Real-time search statistics display
  • 🧹 Auto-cleanup completed uploads

Technical Enhancements

  • 🧠 Smart fuzzy search algorithms
  • 🗂️ Robust XML parsing with fallbacks
  • 🔧 Comprehensive upload manager system
  • 📝 Enhanced logging and debugging
  • ⚡ Optimized performance and error handling
  • 🏗️ Modular component architecture

Bug Fixes

  • 🐛 Fixed floating progress visibility issues
  • 🔧 Resolved upload state management
  • 📡 Improved XHR error handling
  • 🧹 Memory leak prevention in uploads

Closes multiple UI/UX improvement requests and enhances overall user experience.

NasroelLah and others added 22 commits September 19, 2024 00:39
## New Features
- ✨ Dual view modes: Grid and List view with toggle
- 🔍 Advanced fuzzy search with exact match option
- 📊 Flexible sorting: by name, size, or date modified
- 🎯 Floating upload progress with real-time tracking
- 🖱️ Enhanced drag & drop with visual feedback
- 🚫 Upload cancellation and queue management
- 📱 Responsive toolbar design

## UI/UX Improvements
- 🎨 Modern toolbar with intuitive controls
- 📋 Detailed list view with file metadata
- 🔄 Auto-show floating progress for new uploads
- 🎭 Improved visual feedback for drag operations
- 📊 Real-time search statistics display
- 🧹 Auto-cleanup completed uploads

## Technical Enhancements
- 🧠 Smart fuzzy search algorithms
- 🗂️ Robust XML parsing with fallbacks
- 🔧 Comprehensive upload manager system
- 📝 Enhanced logging and debugging
- ⚡ Optimized performance and error handling
- 🏗️ Modular component architecture

## Bug Fixes
- 🐛 Fixed floating progress visibility issues
- 🔧 Resolved upload state management
- 📡 Improved XHR error handling
- 🧹 Memory leak prevention in uploads

Closes multiple UI/UX improvement requests and enhances overall user experience.
- Cache PROPFIND listings in-memory (30s TTL) + invalidate on writes
  - propfind.ts: Cache-Control max-age=5, ETag, If-None-Match 304
  - get.ts: thumbnail immutable 1yr, general files private max-age=60
- Dedupe getAuthHeaders into src/utils/auth.ts; Unicode-safe btoa
- Fix filteredFiles sort() mutating `files` in place
- xhrFetch: clean up abort listener
- Remove debug console spam, localhost Test Upload button, dead code

Co-Authored-By: Claude <noreply@anthropic.com>
- Grid: card list with explicit Copy-link + Download actions per file
- List: keyboard-navigable rows (Enter opens/downloads, Space selects),
  per-row copy/download buttons, no accidental new-tab on click
- Shared FileThumb with onError fallback to MIME icon
- Replace window.prompt/confirm with MUI dialogs (rename, folder, delete)
- Dedupe copy logic into copyText()/shareUrl(); snackbar feedback
- Skip loading spinner when listing served from cache

Co-Authored-By: Claude <noreply@anthropic.com>
- hmacSHA256/arrayBufferToHex accept BufferSource; string secrets encoded
- Query uses raw url.search (workers-types lacks iterable URLSearchParams)
- Header scan via forEach instead of Headers.keys()

Co-Authored-By: Claude <noreply@anthropic.com>
Uninstall runtime and dev deps with zero consumers:
- web-vitals (reportWebVitals long gone from index)
- @testing-library/* (no test suite exists)
- @types/node (no Node APIs in src)

Delete src/ProgressDialog.tsx (imported nowhere).

Kept: @mui/*, @emotion/*, p-limit — all actively used.

Co-Authored-By: Claude <noreply@anthropic.com>
…fault view

Uploaded files never appeared until manual refresh because neither the upload
drawer nor drag-drop fired the listing refresh after the queue drained. Add an
onDrained callback to processUploadQueue and fire it from both entry points to
invalidate + refetch immediately on completion.

Grid: thumbnail media box now 1:1 (aspect-ratio) instead of fixed 96px height.
Default view switched from grid to list.

Co-Authored-By: Claude <noreply@anthropic.com>
Revert grid to the original compact layout: small thumbnail left, name+size
right, one row per item. Drop copy/download IconButtons from grid mode — they
live on the right-click context menu (multi-select).

onCopyLink/onDownload kept optional in FileGrid signature for Main compat.

Co-Authored-By: Claude <noreply@anthropic.com>
react-scripts 5.0.1 pulls a chain of deprecated transitive deps
(rollup-plugin-terser, workbox-*, abab, q, glob@7) that surfaced as npm
warnings on every Cloudflare Pages deploy. CRA 5 also does not support
React 19. Replace the bundler with Vite 7 and bump React to 19.2.

- package.json: drop react-scripts + overrides; react/react-dom ^19.2;
  add vite, @vitejs/plugin-react, @types/node; build = tsc --noEmit && vite build
- index.html: move public/ → root, strip %PUBLIC_URL%, fix apple-touch-icon
  (logo192 → logo144), module entry /src/index.jsx
- src/index.js → src/index.jsx (JSX entry)
- tsconfig: jsx react-jsx, module ESNext, moduleResolution bundler,
  noEmit, isolatedModules
- vite.config.ts: react plugin, @/proxy note
- .gitignore: /build → /dist
- utils/s3.ts: dead (imported nowhere), removed
- commit package-lock.json (Pages builds with npm; bun.lock stays for local dev)

Output dir is now dist/ (was build) — set in Cloudflare Pages dashboard, along
with Node >= 20.19 for Vite 7.

Co-Authored-By: Claude <noreply@anthropic.com>
manualChunks splits MUI + emotion out of the app bundle. App chunk 224 kB,
mui 281 kB, emotion 36 kB (gzipped ~70/85/14 kB). No chunk exceeds the
size warning, so page load no longer blocks on one big main bundle.

Note: react is bundled into the mui chunk (peer dep, deduped by rollup).

Co-Authored-By: Claude <noreply@anthropic.com>
MUI 9 is the current major (latest 9.3.1); v5 is two years old. Peer
deps stay compatible with React 19 + emotion v11, so only source changes
are prop migrations:

- Grid container/item + xs= — deleted API since v6; replaced with the
  new Grid2-style API (container / size={{ xs, sm, md, lg, xl }}) in
  FileGrid + UploadDrawer (Grid is exported from @mui/material in v9,
  Grid2 subpath no longer exists)
- primaryTypographyProps → slotProps.primary
- Typography fontWeight prop → sx.fontWeight
- TextField InputProps → slotProps.input
- Drawer PaperProps → slotProps.paper

Keep manualChunks split (mui/emotion/index all < 340 kB).

Co-Authored-By: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant