i forgot what i did

This commit is contained in:
chark1es 2025-02-13 00:26:26 -08:00
parent b0cb20d0f4
commit 4e1f3f6720
2 changed files with 60 additions and 13 deletions

View file

@ -1106,19 +1106,11 @@ import JSZip from "jszip";
};
// Add downloadAllFiles function
declare global {
interface Window {
downloadAllFiles: () => Promise<void>;
[key: string]: any;
}
}
window.downloadAllFiles = async function () {
const downloadBtn = document.getElementById(
"downloadAllBtn"
) as HTMLButtonElement;
if (!downloadBtn) return;
const originalBtnContent = downloadBtn.innerHTML;
try {
@ -1146,6 +1138,9 @@ import JSZip from "jszip";
const filePromises = event.files.map(async (filename: string) => {
const fileUrl = `${baseUrl}/api/files/${collectionId}/${recordId}/${filename}`;
const response = await fetch(fileUrl);
if (!response.ok) {
throw new Error(`Failed to download ${filename}`);
}
const blob = await response.blob();
zip.file(filename, blob);
});
@ -1163,14 +1158,26 @@ import JSZip from "jszip";
document.body.removeChild(link);
URL.revokeObjectURL(downloadUrl);
// Reset button state
downloadBtn.innerHTML = originalBtnContent;
downloadBtn.disabled = false;
} catch (error) {
// Show success message
createToast("Files downloaded successfully!", "success");
} catch (error: any) {
console.error("Failed to download files:", error);
createToast("Failed to download files. Please try again.", "error");
createToast(
error?.message || "Failed to download files. Please try again.",
"error"
);
} finally {
// Reset button state
downloadBtn.innerHTML = originalBtnContent;
downloadBtn.disabled = false;
}
};
// Add TypeScript interface for Window
declare global {
interface Window {
downloadAllFiles: () => Promise<void>;
[key: string]: any;
}
}
</script>

View file

@ -227,4 +227,44 @@ export class FileManager {
this.auth.setUpdating(false);
}
}
/**
* Get multiple files from a record
* @param collectionName The name of the collection
* @param recordId The ID of the record containing the files
* @param field The field name containing the files
* @returns Array of file URLs
*/
public async getFiles(
collectionName: string,
recordId: string,
field: string
): Promise<string[]> {
if (!this.auth.isAuthenticated()) {
throw new Error("User must be authenticated to get files");
}
try {
this.auth.setUpdating(true);
const pb = this.auth.getPocketBase();
// Get the record to retrieve the filenames
const record = await pb.collection(collectionName).getOne(recordId);
// Get the filenames from the specified field
const filenames = record[field] || [];
// Convert filenames to URLs
const fileUrls = filenames.map((filename: string) =>
this.getFileUrl(collectionName, recordId, filename)
);
return fileUrls;
} catch (err) {
console.error(`Failed to get files from ${collectionName}:`, err);
throw err;
} finally {
this.auth.setUpdating(false);
}
}
}