summaryrefslogtreecommitdiff
path: root/apps/web/src/components/editor/media-panel.tsx
diff options
context:
space:
mode:
authoriza <59828082+izadoesdev@users.noreply.github.com>2025-06-25 19:29:46 +0300
committerGitHub <noreply@github.com>2025-06-25 19:29:46 +0300
commitb94cc121d2d6c9fb42d55d217cb4324e3e41e6c3 (patch)
treeb2ac7aa9e970d2f1eab6e068281d316a29678e9d /apps/web/src/components/editor/media-panel.tsx
parent57bfb7610f25cd73874a09800f07b0edfe85b643 (diff)
parent181d3fca06b49ff2f1252bed387af3f5817bb406 (diff)
downloadopencut-b94cc121d2d6c9fb42d55d217cb4324e3e41e6c3.tar.gz
Merge pull request #107 from DevloperAmanSingh/feature/progress-bar
Feature: Add progress indicator for large file imports
Diffstat (limited to 'apps/web/src/components/editor/media-panel.tsx')
-rw-r--r--apps/web/src/components/editor/media-panel.tsx26
1 files changed, 12 insertions, 14 deletions
diff --git a/apps/web/src/components/editor/media-panel.tsx b/apps/web/src/components/editor/media-panel.tsx
index f2b3f657..cdd67a86 100644
--- a/apps/web/src/components/editor/media-panel.tsx
+++ b/apps/web/src/components/editor/media-panel.tsx
@@ -17,27 +17,28 @@ export function MediaPanel() {
const { mediaItems, addMediaItem, removeMediaItem } = useMediaStore();
const fileInputRef = useRef<HTMLInputElement>(null);
const [isProcessing, setIsProcessing] = useState(false);
+ const [progress, setProgress] = useState(0);
const [searchQuery, setSearchQuery] = useState("");
const [mediaFilter, setMediaFilter] = useState("all");
const processFiles = async (files: FileList | File[]) => {
- // If no files, do nothing
- if (!files?.length) return;
-
+ if (!files || files.length === 0) return;
setIsProcessing(true);
+ setProgress(0);
try {
// Process files (extract metadata, generate thumbnails, etc.)
- const items = await processMediaFiles(files);
+ const processedItems = await processMediaFiles(files, (p) =>
+ setProgress(p)
+ );
// Add each processed media item to the store
- items.forEach((item) => {
- addMediaItem(item);
- });
+ processedItems.forEach((item) => addMediaItem(item));
} catch (error) {
- // Show error if processing fails
- console.error("File processing failed:", error);
+ // Show error toast if processing fails
+ console.error("Error processing files:", error);
toast.error("Failed to process files");
} finally {
setIsProcessing(false);
+ setProgress(0);
}
};
@@ -241,15 +242,12 @@ export function MediaPanel() {
{isProcessing ? (
<>
<Upload className="h-4 w-4 animate-spin" />
- <span className="hidden md:inline ml-2">Processing...</span>
+ <span className="hidden md:inline ml-2">{progress}%</span>
</>
) : (
<>
<Plus className="h-4 w-4" />
- <span
- className="hidden sm:inline ml-2"
- aria-label="Add file"
- >
+ <span className="hidden sm:inline ml-2" aria-label="Add file">
Add
</span>
</>