revisi ini
This commit is contained in:
@@ -3,11 +3,11 @@
|
||||
import { useState } from "react";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { Input } from "@/components/ui/input";
|
||||
import {
|
||||
Dialog,
|
||||
DialogContent,
|
||||
DialogHeader,
|
||||
DialogTitle,
|
||||
import {
|
||||
Dialog,
|
||||
DialogContent,
|
||||
DialogHeader,
|
||||
DialogTitle,
|
||||
DialogFooter,
|
||||
DialogClose
|
||||
} from "@/components/ui/dialog";
|
||||
@@ -34,12 +34,12 @@ export default function UploadFileNilaiMahasiswa({ onUploadSuccess }: UploadFile
|
||||
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
||||
'text/csv'
|
||||
];
|
||||
|
||||
|
||||
if (!validTypes.includes(file.type)) {
|
||||
showError("Error!", "File harus berformat Excel (.xlsx, .xls) atau CSV (.csv)");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
setSelectedFile(file);
|
||||
}
|
||||
};
|
||||
@@ -53,17 +53,17 @@ export default function UploadFileNilaiMahasiswa({ onUploadSuccess }: UploadFile
|
||||
|
||||
try {
|
||||
setIsUploading(true);
|
||||
|
||||
|
||||
const formData = new FormData();
|
||||
formData.append('file', selectedFile);
|
||||
|
||||
|
||||
const response = await fetch('/api/keloladata/data-nilai-mahasiswa/upload', {
|
||||
method: 'POST',
|
||||
body: formData,
|
||||
});
|
||||
|
||||
|
||||
const result = await response.json();
|
||||
|
||||
|
||||
if (!response.ok) {
|
||||
let errorMessage = result.message || 'Upload failed';
|
||||
if (result.errors && result.errors.length > 0) {
|
||||
@@ -71,12 +71,26 @@ export default function UploadFileNilaiMahasiswa({ onUploadSuccess }: UploadFile
|
||||
}
|
||||
throw new Error(errorMessage);
|
||||
}
|
||||
|
||||
showSuccess("Berhasil!", `${result.successCount} nilai mahasiswa berhasil diimport`);
|
||||
|
||||
// Create success message based on insert and update counts
|
||||
const inserted = result.inserted || 0;
|
||||
const updated = result.updated || 0;
|
||||
const total = inserted + updated;
|
||||
|
||||
let successMessage = `${total} nilai mahasiswa berhasil diproses`;
|
||||
if (inserted > 0 && updated > 0) {
|
||||
successMessage += ` (${inserted} ditambahkan, ${updated} diperbarui)`;
|
||||
} else if (inserted > 0) {
|
||||
successMessage += ` (${inserted} ditambahkan)`;
|
||||
} else if (updated > 0) {
|
||||
successMessage += ` (${updated} diperbarui)`;
|
||||
}
|
||||
|
||||
showSuccess("Berhasil!", successMessage);
|
||||
onUploadSuccess();
|
||||
setIsDialogOpen(false);
|
||||
setSelectedFile(null);
|
||||
|
||||
|
||||
// Reset file input
|
||||
const fileInput = document.getElementById('file-upload-nilai') as HTMLInputElement;
|
||||
if (fileInput) {
|
||||
@@ -105,7 +119,7 @@ export default function UploadFileNilaiMahasiswa({ onUploadSuccess }: UploadFile
|
||||
Import Data Nilai Mahasiswa
|
||||
</DialogTitle>
|
||||
</DialogHeader>
|
||||
|
||||
|
||||
<div className="space-y-4 py-4">
|
||||
<div className="space-y-2">
|
||||
<label htmlFor="file-upload-nilai" className="text-sm font-medium">
|
||||
@@ -122,7 +136,7 @@ export default function UploadFileNilaiMahasiswa({ onUploadSuccess }: UploadFile
|
||||
Format yang didukung: .xlsx, .xls, .csv (Max: 10MB)
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
{selectedFile && (
|
||||
<div className="p-3 bg-muted rounded-md">
|
||||
<p className="text-sm font-medium">File terpilih:</p>
|
||||
@@ -132,7 +146,7 @@ export default function UploadFileNilaiMahasiswa({ onUploadSuccess }: UploadFile
|
||||
</p>
|
||||
</div>
|
||||
)}
|
||||
|
||||
|
||||
<div className="border-t pt-4">
|
||||
<h4 className="text-sm font-medium mb-2">Format File:</h4>
|
||||
<div className="text-xs text-muted-foreground space-y-1">
|
||||
@@ -145,15 +159,15 @@ export default function UploadFileNilaiMahasiswa({ onUploadSuccess }: UploadFile
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<DialogFooter>
|
||||
<DialogClose asChild>
|
||||
<Button variant="outline">
|
||||
Batal
|
||||
</Button>
|
||||
</DialogClose>
|
||||
<Button
|
||||
onClick={handleUpload}
|
||||
<Button
|
||||
onClick={handleUpload}
|
||||
disabled={!selectedFile || isUploading}
|
||||
>
|
||||
{isUploading && <Loader2 className="mr-2 h-4 w-4 animate-spin" />}
|
||||
|
||||
Reference in New Issue
Block a user