[dyad] Added image file size sorting - wrote 1 file(s)

This commit is contained in:
[dyad]
2026-01-20 14:25:27 +01:00
parent 92aca8ba3f
commit 4fa32b38cf

View File

@@ -7,6 +7,13 @@ import { Label } from "@/components/ui/label";
import { Badge } from "@/components/ui/badge"; import { Badge } from "@/components/ui/badge";
import { ImageOff } from "lucide-react"; import { ImageOff } from "lucide-react";
import { formatBytes } from "@/lib/utils"; import { formatBytes } from "@/lib/utils";
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from "@/components/ui/select";
interface ImageAltDisplayProps { interface ImageAltDisplayProps {
images: ImageAltData[]; images: ImageAltData[];
@@ -15,6 +22,9 @@ interface ImageAltDisplayProps {
export function ImageAltDisplay({ images }: ImageAltDisplayProps) { export function ImageAltDisplay({ images }: ImageAltDisplayProps) {
const [showMissingOnly, setShowMissingOnly] = useState(false); const [showMissingOnly, setShowMissingOnly] = useState(false);
const [imageErrors, setImageErrors] = useState<Record<string, boolean>>({}); const [imageErrors, setImageErrors] = useState<Record<string, boolean>>({});
const [sortOrder, setSortOrder] = useState<"default" | "asc" | "desc">(
"default"
);
const missingAltCount = images.filter((img) => !img.alt).length; const missingAltCount = images.filter((img) => !img.alt).length;
@@ -22,6 +32,25 @@ export function ImageAltDisplay({ images }: ImageAltDisplayProps) {
? images.filter((img) => !img.alt) ? images.filter((img) => !img.alt)
: images; : images;
const sortedAndFilteredImages = [...filteredImages].sort((a, b) => {
if (sortOrder === "default") {
return 0;
}
const sizeA = a.size;
const sizeB = b.size;
if (sizeA === null && sizeB === null) return 0;
if (sizeA === null) return 1;
if (sizeB === null) return -1;
if (sortOrder === "asc") {
return sizeA - sizeB;
} else {
return sizeB - sizeA;
}
});
const handleImageError = (src: string) => { const handleImageError = (src: string) => {
setImageErrors((prev) => ({ ...prev, [src]: true })); setImageErrors((prev) => ({ ...prev, [src]: true }));
}; };
@@ -36,6 +65,7 @@ export function ImageAltDisplay({ images }: ImageAltDisplayProps) {
return ( return (
<div className="space-y-4"> <div className="space-y-4">
<div className="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 p-4 bg-muted/50 rounded-lg"> <div className="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 p-4 bg-muted/50 rounded-lg">
<div className="flex flex-col sm:flex-row sm:items-center gap-4">
<div className="flex items-center space-x-2"> <div className="flex items-center space-x-2">
<Checkbox <Checkbox
id="missing-alt" id="missing-alt"
@@ -44,6 +74,27 @@ export function ImageAltDisplay({ images }: ImageAltDisplayProps) {
/> />
<Label htmlFor="missing-alt">Show only missing alt text</Label> <Label htmlFor="missing-alt">Show only missing alt text</Label>
</div> </div>
<div className="flex items-center gap-2">
<Label htmlFor="sort-order" className="text-sm flex-shrink-0">
Sort by:
</Label>
<Select
value={sortOrder}
onValueChange={(value) =>
setSortOrder(value as "default" | "asc" | "desc")
}
>
<SelectTrigger className="w-full sm:w-[240px]" id="sort-order">
<SelectValue placeholder="Select sort order" />
</SelectTrigger>
<SelectContent>
<SelectItem value="default">Default Order</SelectItem>
<SelectItem value="desc">Size (Largest to Smallest)</SelectItem>
<SelectItem value="asc">Size (Smallest to Largest)</SelectItem>
</SelectContent>
</Select>
</div>
</div>
<div> <div>
{missingAltCount > 0 ? ( {missingAltCount > 0 ? (
<p className="text-sm font-medium text-destructive"> <p className="text-sm font-medium text-destructive">
@@ -58,7 +109,7 @@ export function ImageAltDisplay({ images }: ImageAltDisplayProps) {
</div> </div>
</div> </div>
<div className="space-y-4"> <div className="space-y-4">
{filteredImages.map((image, index) => ( {sortedAndFilteredImages.map((image, index) => (
<div <div
key={index} key={index}
className="flex items-start gap-4 p-4 border rounded-lg" className="flex items-start gap-4 p-4 border rounded-lg"