fix: pelayanan surat

Deskripsi:
- pelayanan surat

No Issues
This commit is contained in:
2026-01-14 17:41:27 +08:00
parent 727984a076
commit 3348cbe8e3
2 changed files with 30 additions and 10 deletions

View File

@@ -1,5 +1,5 @@
import apiFetch from "@/lib/apiFetch"; import apiFetch from "@/lib/apiFetch";
import { Flex, Loader, Modal, Text } from "@mantine/core"; import { Flex, Modal, Progress, Stack, Text } from "@mantine/core";
import { useShallowEffect } from "@mantine/hooks"; import { useShallowEffect } from "@mantine/hooks";
import html2canvas from "html2canvas"; import html2canvas from "html2canvas";
import jsPDF from "jspdf"; import jsPDF from "jspdf";
@@ -35,7 +35,7 @@ export default function ModalSurat({
fontSize: "14px", fontSize: "14px",
fontFamily: "Times New Roman", fontFamily: "Times New Roman",
}; };
const [uploading, setUploading] = useState<"Menyiapkan" | "Mengupload" | "Selesai">("Menyiapkan") const [uploading, setUploading] = useState<{ text: "Menyiapkan" | "Mengupload" | "Selesai", value: number }>({ text: "Menyiapkan", value: 10 })
const hiddenRef = useRef<any>(null); const hiddenRef = useRef<any>(null);
const { data, mutate, isLoading } = useSWR("surat", () => const { data, mutate, isLoading } = useSWR("surat", () =>
apiFetch.api.surat.detail.get({ apiFetch.api.surat.detail.get({
@@ -52,7 +52,7 @@ export default function ModalSurat({
const uploadPdf = async () => { const uploadPdf = async () => {
try { try {
if (data && data.data && data.data.surat && (data.data.surat.file == "" || data.data.surat.file == null)) { if (data && data.data && data.data.surat && (data.data.surat.file == "" || data.data.surat.file == null)) {
setUploading("Mengupload"); setUploading({ text: "Mengupload", value: 75 });
const element = hiddenRef.current; const element = hiddenRef.current;
const canvas = await html2canvas(element, { const canvas = await html2canvas(element, {
scale: 2, scale: 2,
@@ -95,7 +95,7 @@ export default function ModalSurat({
filename: resImg.data?.filename!, filename: resImg.data?.filename!,
}); });
setUploading("Selesai"); setUploading({ text: "Selesai", value: 100 });
setTimeout(() => { setTimeout(() => {
onClose(resUpdate.data?.link); onClose(resUpdate.data?.link);
}, 1000) }, 1000)
@@ -136,14 +136,24 @@ export default function ModalSurat({
}, },
}} }}
title={ title={
<>
<Flex justify="space-between" align="center" w="100%"> <Flex justify="space-between" align="center" w="100%">
<div style={{ fontSize: 18, fontWeight: 600 }}>Preview Surat</div> <div style={{ fontSize: 18, fontWeight: 600 }}>Preview Surat</div>
<Flex gap={8} align="center"> {/* <Flex gap={8} align="center">
<Loader color="blue" size="xs" /> <Loader color="blue" size="xs" />
<Text size="sm">{uploading}</Text> <Text size="sm">{uploading.text}</Text>
</Flex> </Flex> */}
</Flex> </Flex>
<Stack
align="stretch"
justify="center"
gap="xs"
>
<Text size="sm" ta="center">{uploading.text} - Harap menunggu sampai selesai</Text>
<Progress radius="md" value={uploading.value} animated size="lg" />
</Stack>
</>
} }
> >
<div ref={hiddenRef} style={A4Style}> <div ref={hiddenRef} style={A4Style}>

View File

@@ -1,4 +1,5 @@
import BreadCrumbs from "@/components/BreadCrumbs"; import BreadCrumbs from "@/components/BreadCrumbs";
import FullScreenLoading from "@/components/FullScreenLoading";
import ModalFile from "@/components/ModalFile"; import ModalFile from "@/components/ModalFile";
import ModalSurat from "@/components/ModalSurat"; import ModalSurat from "@/components/ModalSurat";
import notification from "@/components/notificationGlobal"; import notification from "@/components/notificationGlobal";
@@ -125,6 +126,7 @@ function DetailDataPengajuan({
const [editValue, setEditValue] = useState({ id: "", jenis: "", val: "", option: null as any, type: "", key: "" }) const [editValue, setEditValue] = useState({ id: "", jenis: "", val: "", option: null as any, type: "", key: "" })
const [openEdit, setOpenEdit] = useState(false) const [openEdit, setOpenEdit] = useState(false)
const [loadingUpdate, setLoadingUpdate] = useState(false) const [loadingUpdate, setLoadingUpdate] = useState(false)
const [loadingFS, setLoadingFS] = useState({ value: false, text: "" })
useEffect(() => { useEffect(() => {
async function fetchHost() { async function fetchHost() {
@@ -143,6 +145,7 @@ function DetailDataPengajuan({
async function sendWA({ status, linkSurat, linkUpdate }: { status: string, linkSurat: string, linkUpdate: string }) { async function sendWA({ status, linkSurat, linkUpdate }: { status: string, linkSurat: string, linkUpdate: string }) {
try { try {
setLoadingFS({ value: true, text: "Sending message to warga" })
const resWA = await apiFetch.api["send-wa"]["pengajuan-surat"].post({ const resWA = await apiFetch.api["send-wa"]["pengajuan-surat"].post({
noPengajuan: data?.noPengajuan ?? "", noPengajuan: data?.noPengajuan ?? "",
jenisSurat: data?.category ?? "", jenisSurat: data?.category ?? "",
@@ -181,10 +184,14 @@ function DetailDataPengajuan({
type: "error", type: "error",
}); });
} }
finally {
setLoadingFS({ value: false, text: "" })
}
} }
const handleKonfirmasi = async (cat: "terima" | "tolak") => { const handleKonfirmasi = async (cat: "terima" | "tolak") => {
try { try {
setLoadingFS({ value: true, text: "Updating status" })
const statusFix = cat == "tolak" const statusFix = cat == "tolak"
? "ditolak" ? "ditolak"
: data.status == "antrian" : data.status == "antrian"
@@ -234,6 +241,8 @@ function DetailDataPengajuan({
message: "Failed to update pengajuan surat", message: "Failed to update pengajuan surat",
type: "error", type: "error",
}); });
} finally {
setLoadingFS({ value: false, text: "" })
} }
}; };
@@ -275,7 +284,6 @@ function DetailDataPengajuan({
} }
useShallowEffect(() => { useShallowEffect(() => {
console.log('jalan', viewImg)
if (viewImg) { if (viewImg) {
setOpenedPreviewFile(true); setOpenedPreviewFile(true);
} }
@@ -308,6 +316,8 @@ function DetailDataPengajuan({
return ( return (
<> <>
<FullScreenLoading visible={loadingFS.value} text={loadingFS.text} />
{/* MODAL EDIT DATA PELENGKAP */} {/* MODAL EDIT DATA PELENGKAP */}
<Modal <Modal
opened={openEdit} opened={openEdit}