perbaikan upload file maks 2mb dan perbaikan input jumlah anggota keluarga
This commit is contained in:
@@ -2,6 +2,7 @@ import { useId, useMemo, type ChangeEvent } from "react";
|
|||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import { Label } from "@/components/ui/label";
|
import { Label } from "@/components/ui/label";
|
||||||
import { FileUp, FileText, Image as ImageIcon, X } from "lucide-react";
|
import { FileUp, FileText, Image as ImageIcon, X } from "lucide-react";
|
||||||
|
import { toast } from "sonner";
|
||||||
|
|
||||||
type DocumentUploadFieldProps = {
|
type DocumentUploadFieldProps = {
|
||||||
label: string;
|
label: string;
|
||||||
@@ -45,6 +46,13 @@ export function DocumentUploadField({
|
|||||||
const file = event.target.files?.[0];
|
const file = event.target.files?.[0];
|
||||||
event.target.value = "";
|
event.target.value = "";
|
||||||
if (!file || !onChange) return;
|
if (!file || !onChange) return;
|
||||||
|
|
||||||
|
const MAX_SIZE = 2 * 1024 * 1024; // 2MB
|
||||||
|
if (file.size > MAX_SIZE) {
|
||||||
|
toast.error("Pastikan gambar tidak lebih besar dari 2mb");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const dataUrl = await readFileAsDataUrl(file);
|
const dataUrl = await readFileAsDataUrl(file);
|
||||||
onChange(dataUrl);
|
onChange(dataUrl);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ export default function RecipientsPage() {
|
|||||||
gender: "male" as "male" | "female",
|
gender: "male" as "male" | "female",
|
||||||
address: "",
|
address: "",
|
||||||
phone: "",
|
phone: "",
|
||||||
familyMembers: 1,
|
familyMembers: 1 as number | "",
|
||||||
incomePerMonth: 0,
|
incomePerMonth: 0,
|
||||||
placeOfWorshipId: 0,
|
placeOfWorshipId: 0,
|
||||||
notes: "",
|
notes: "",
|
||||||
@@ -228,7 +228,7 @@ export default function RecipientsPage() {
|
|||||||
gender: formData.gender,
|
gender: formData.gender,
|
||||||
address: formData.address || undefined,
|
address: formData.address || undefined,
|
||||||
phone: formData.phone || undefined,
|
phone: formData.phone || undefined,
|
||||||
familyMembers: formData.familyMembers,
|
familyMembers: Number(formData.familyMembers) || 1,
|
||||||
incomePerMonth: formData.incomePerMonth,
|
incomePerMonth: formData.incomePerMonth,
|
||||||
placeOfWorshipId: resolvedPlaceOfWorshipId,
|
placeOfWorshipId: resolvedPlaceOfWorshipId,
|
||||||
notes: formData.notes || undefined,
|
notes: formData.notes || undefined,
|
||||||
@@ -292,7 +292,7 @@ export default function RecipientsPage() {
|
|||||||
gender: formData.gender,
|
gender: formData.gender,
|
||||||
address: formData.address || undefined,
|
address: formData.address || undefined,
|
||||||
phone: formData.phone || undefined,
|
phone: formData.phone || undefined,
|
||||||
familyMembers: formData.familyMembers,
|
familyMembers: Number(formData.familyMembers) || 1,
|
||||||
incomePerMonth: formData.incomePerMonth,
|
incomePerMonth: formData.incomePerMonth,
|
||||||
placeOfWorshipId: resolvedPlaceOfWorshipId,
|
placeOfWorshipId: resolvedPlaceOfWorshipId,
|
||||||
notes: formData.notes || undefined,
|
notes: formData.notes || undefined,
|
||||||
@@ -415,7 +415,7 @@ export default function RecipientsPage() {
|
|||||||
value={formData.ktpDocument}
|
value={formData.ktpDocument}
|
||||||
onChange={(value) => updateFormData({ ktpDocument: value ?? "" })}
|
onChange={(value) => updateFormData({ ktpDocument: value ?? "" })}
|
||||||
required
|
required
|
||||||
helperText="JPG, PNG, PDF - Maks 5MB"
|
helperText="JPG, PNG, PDF - Maks 2MB"
|
||||||
/>
|
/>
|
||||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-3">
|
<div className="grid grid-cols-1 md:grid-cols-2 gap-3">
|
||||||
<DocumentUploadField
|
<DocumentUploadField
|
||||||
@@ -440,7 +440,7 @@ export default function RecipientsPage() {
|
|||||||
</div>
|
</div>
|
||||||
<div className="space-y-1.5">
|
<div className="space-y-1.5">
|
||||||
<Label className="text-xs">Jumlah Anggota Keluarga</Label>
|
<Label className="text-xs">Jumlah Anggota Keluarga</Label>
|
||||||
<Input type="number" min={1} value={formData.familyMembers} onChange={(e) => updateFormData({ familyMembers: parseInt(e.target.value) || 1 })} className="h-9" />
|
<Input type="number" min={1} value={formData.familyMembers} onChange={(e) => updateFormData({ familyMembers: e.target.value === "" ? "" : parseInt(e.target.value) })} className="h-9" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="grid grid-cols-2 gap-3">
|
<div className="grid grid-cols-2 gap-3">
|
||||||
@@ -648,7 +648,7 @@ export default function RecipientsPage() {
|
|||||||
value={formData.ktpDocument}
|
value={formData.ktpDocument}
|
||||||
onChange={(value) => updateFormData({ ktpDocument: value ?? "" })}
|
onChange={(value) => updateFormData({ ktpDocument: value ?? "" })}
|
||||||
required
|
required
|
||||||
helperText="JPG, PNG, PDF - Maks 5MB"
|
helperText="JPG, PNG, PDF - Maks 2MB"
|
||||||
/>
|
/>
|
||||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-3">
|
<div className="grid grid-cols-1 md:grid-cols-2 gap-3">
|
||||||
<DocumentUploadField
|
<DocumentUploadField
|
||||||
@@ -673,7 +673,7 @@ export default function RecipientsPage() {
|
|||||||
</div>
|
</div>
|
||||||
<div className="space-y-1.5">
|
<div className="space-y-1.5">
|
||||||
<Label className="text-xs">Jumlah Anggota Keluarga</Label>
|
<Label className="text-xs">Jumlah Anggota Keluarga</Label>
|
||||||
<Input type="number" value={formData.familyMembers} onChange={(e) => updateFormData({ familyMembers: parseInt(e.target.value) || 1 })} className="h-9" />
|
<Input type="number" min={1} value={formData.familyMembers} onChange={(e) => updateFormData({ familyMembers: e.target.value === "" ? "" : parseInt(e.target.value) })} className="h-9" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="grid grid-cols-1 gap-3">
|
<div className="grid grid-cols-1 gap-3">
|
||||||
|
|||||||
Reference in New Issue
Block a user