summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMiqdad <ahmadmiqdad27@gmail.com>2025-08-11 16:32:03 +0700
committerMiqdad <ahmadmiqdad27@gmail.com>2025-08-11 16:32:03 +0700
commitfc837f851c89614f392e5a17cd6a2ceda3f706f3 (patch)
treebb8c893c86a0d3b35689c349eb9cb9f5d8d455a0 /src
parent7ec561888b3123a8d9a0b062727c562c9dbec2db (diff)
<miqdad> more vals in confirm page
Diffstat (limited to 'src')
-rw-r--r--src/lib/pengajuan-tempo/component/PengajuanTempo.jsx250
1 files changed, 161 insertions, 89 deletions
diff --git a/src/lib/pengajuan-tempo/component/PengajuanTempo.jsx b/src/lib/pengajuan-tempo/component/PengajuanTempo.jsx
index d59bfd75..5f3dd08c 100644
--- a/src/lib/pengajuan-tempo/component/PengajuanTempo.jsx
+++ b/src/lib/pengajuan-tempo/component/PengajuanTempo.jsx
@@ -38,7 +38,7 @@ const PengajuanTempo = () => {
const [bigData, setBigData] = useState();
const [idTempo, setIdTempo] = useState(0);
const { form, errors, validate, updateForm } = usePengajuanTempoStore();
- const { control, watch, setValue } = useForm();
+ const { control, watch, setValue, setError } = useForm();
const auth = useAuth();
const router = useRouter();
const [BannerTempo, setBannerTempo] = useState();
@@ -426,111 +426,185 @@ const PengajuanTempo = () => {
}
};
- const handleDaftarTempo = async () => {
- for (const error of stepDivsError) {
- if (error.length > 0) {
- return;
+const handleDaftarTempo = async () => {
+ const phones = [
+ { key: 'mobile', label: 'No. HP Perusahaan', value: form.mobile },
+ {
+ key: 'direkturMobile',
+ label: 'No. HP Direktur',
+ value: formKontakPerson.direkturMobile,
+ },
+ {
+ key: 'purchasingMobile',
+ label: 'No. HP Purchasing',
+ value: formKontakPerson.purchasingMobile,
+ },
+ {
+ key: 'financeMobile',
+ label: 'No. HP Finance',
+ value: formKontakPerson.financeMobile,
+ },
+ {
+ key: 'PICBarangMobile',
+ label: 'No. HP PIC Barang',
+ value: formKontakPerson.PICBarangMobile,
+ },
+ {
+ key: 'invoicePicMobile',
+ label: 'No. HP PIC Invoice',
+ value: formKontakPerson.invoicePicMobile,
+ },
+ ].filter((p) => p.value);
+
+ const seen = new Map();
+ let firstErrorField = null;
+
+ // 🔹 Reset error manual sebelum cek ulang
+ phones.forEach((p) => setError(p.key, { type: 'manual', message: '' }));
+
+ for (const phone of phones) {
+ if (!seen.has(phone.value)) {
+ seen.set(phone.value, phone);
+ } else {
+ const first = seen.get(phone.value);
+
+ // 🔹 Tampilkan toast
+ toast.error(`${phone.label} tidak boleh sama dengan ${first.label}`);
+
+ // 🔹 Tampilkan error merah di bawah input
+ setError(phone.key, {
+ type: 'manual',
+ message: `${phone.label} tidak boleh sama dengan ${first.label}`,
+ });
+
+ // 🔹 Juga beri error untuk pasangan duplikat pertama
+ setError(first.key, {
+ type: 'manual',
+ message: `${first.label} tidak boleh sama dengan ${phone.label}`,
+ });
+
+ // 🔹 Simpan field pertama yang salah untuk scroll
+ if (!firstErrorField) {
+ firstErrorField = phone.key;
}
}
+ }
+
+ if (firstErrorField) {
+ setTimeout(() => {
+ const el = document.querySelector(`[name="${firstErrorField}"]`);
+ if (el) {
+ el.scrollIntoView({ behavior: 'smooth', block: 'center' });
+ el.focus();
+ }
+ }, 100);
+ return; // â›” hentikan proses submit
+ }
- // Filter hanya dokumen dengan `format` yang tidak undefined
- const formattedDokumen = Object.entries(formDokumen)
- .filter(([_, doc]) => doc.format !== undefined) // Hanya dokumen dengan `format` tidak undefined
- .map(([key, doc]) => ({
- documentName: key,
- details: {
- name: doc.name,
- format: doc.format,
- base64: doc.base64,
- },
- }));
+ for (const error of stepDivsError) {
+ if (error.length > 0) {
+ return;
+ }
+ }
+
+ const formattedDokumen = Object.entries(formDokumen)
+ .filter(([_, doc]) => doc.format !== undefined)
+ .map(([key, doc]) => ({
+ documentName: key,
+ details: {
+ name: doc.name,
+ format: doc.format,
+ base64: doc.base64,
+ },
+ }));
- const toastId = toast.loading('Mengirimkan formulir pengajuan tempo...');
- setIsLoading(true);
- try {
- let address4;
- let address3;
- const address = await createPengajuanTempoApi({
- id: 0,
+ const toastId = toast.loading('Mengirimkan formulir pengajuan tempo...');
+ setIsLoading(true);
+
+ try {
+ let address4;
+ let address3;
+ const address = await createPengajuanTempoApi({
+ id: 0,
+ partner_id: auth.partnerId,
+ user_id: auth.parentId ? auth.parentId : auth.partnerId,
+ tempo_request: false,
+ ...form,
+ });
+
+ if (address.id) {
+ const address2 = await createPengajuanTempoApi({
+ id: address.id,
partner_id: auth.partnerId,
- user_id: auth.parentId ? auth.parentId : auth.partnerId,
+ user_id: address.userId,
tempo_request: false,
- ...form,
+ ...formKontakPerson,
});
- if (address.id) {
- const address2 = await createPengajuanTempoApi({
- id: address.id,
+
+ if (address2.id) {
+ address3 = await createPengajuanTempoApi({
+ id: address2.id,
partner_id: auth.partnerId,
- user_id: address.userId,
+ user_id: address2.userId,
tempo_request: false,
- ...formKontakPerson,
- });
- if (address2.id) {
- address3 = await createPengajuanTempoApi({
- id: address2.id,
- partner_id: auth.partnerId,
- user_id: address2.userId,
- tempo_request: false,
- ...formPengiriman,
- formDokumenProsedur: formPengiriman.dokumenProsedur
+ ...formPengiriman,
+ formDokumenProsedur: formPengiriman.dokumenProsedur
? JSON.stringify(formPengiriman.dokumenProsedur)
: false,
+ });
+
+ if (address3.id && formattedDokumen.length > 0) {
+ address4 = await createPengajuanTempoApi({
+ id: address3.id,
+ partner_id: auth.partnerId,
+ user_id: address3.userId,
+ tempo_request: true,
+ formDocs: JSON.stringify(formattedDokumen),
+ });
+ } else {
+ address4 = await createPengajuanTempoApi({
+ id: address3.id,
+ partner_id: auth.partnerId,
+ user_id: address3.userId,
+ tempo_request: true,
});
- if (address3.id && formattedDokumen.length > 0) {
- // Kirim dokumen yang sudah difilter
- address4 = await createPengajuanTempoApi({
- id: address3.id,
- partner_id: auth.partnerId,
- user_id: address3.userId,
- tempo_request: true,
- formDocs: JSON.stringify(formattedDokumen),
- });
- } else {
- address4 = await createPengajuanTempoApi({
- id: address3.id,
- partner_id: auth.partnerId,
- user_id: address3.userId,
- tempo_request: true,
- });
- }
}
}
+ }
- if (address4?.id) {
- toast.success('Pengajuan tempo berhasil dilakukan');
- const toastId = toast.loading('Mengubah status akun...');
- const isUpdated = await editAuthTempo();
- if (isUpdated?.user) {
- const update = await setAuth(isUpdated.user);
- if (update) {
- toast.dismiss(toastId);
- setIsLoading(false);
- toast.success('Berhasil mengubah status akun', { duration: 1000 });
- router.push('/pengajuan-tempo/finish');
- } else {
- toast.dismiss(toastId);
- setIsLoading(false);
- toast.success('Pengajuan tempo berhasil dilakukan');
- toast.error('Gagal mengubah status akun', { duration: 1000 });
- router.push('/pengajuan-tempo');
- }
- removeFromLocalStorage();
- return;
+ if (address4?.id) {
+ toast.success('Pengajuan tempo berhasil dilakukan');
+ const toastId2 = toast.loading('Mengubah status akun...');
+ const isUpdated = await editAuthTempo();
+ if (isUpdated?.user) {
+ const update = await setAuth(isUpdated.user);
+ if (update) {
+ toast.dismiss(toastId2);
+ setIsLoading(false);
+ toast.success('Berhasil mengubah status akun', { duration: 1000 });
+ router.push('/pengajuan-tempo/finish');
+ } else {
+ toast.dismiss(toastId2);
+ setIsLoading(false);
+ toast.success('Pengajuan tempo berhasil dilakukan');
+ toast.error('Gagal mengubah status akun', { duration: 1000 });
+ router.push('/pengajuan-tempo');
}
- } else {
- toast.dismiss(toastId);
- setIsLoading(false);
-
- toast.error('Terjadi kesalahan dalam pengiriman formulir');
+ removeFromLocalStorage();
+ return;
}
- } catch (error) {
+ } else {
toast.dismiss(toastId);
setIsLoading(false);
-
toast.error('Terjadi kesalahan dalam pengiriman formulir');
- console.error(error);
}
- };
+ } catch (error) {
+ toast.dismiss(toastId);
+ setIsLoading(false);
+ toast.error('Terjadi kesalahan dalam pengiriman formulir');
+ console.error(error);
+ }
+};
const removeFromLocalStorage = () => {
for (const key of stepLabels) {
@@ -660,10 +734,8 @@ const PengajuanTempo = () => {
isDisabled={!isCheckedTNC || isLoading}
onClick={handleDaftarTempo}
>
- {isLoading
- ? 'Loading...'
- : 'Daftar Tempo'}
- {!isLoading && <ChevronRightIcon className='w-5' />}
+ {isLoading ? 'Loading...' : 'Daftar Tempo'}
+ {!isLoading && <ChevronRightIcon className='w-5' />}
</Button>
</div>
)}