From 02cf4700f5332a9939372e65ff6c0ab560c35688 Mon Sep 17 00:00:00 2001 From: amel Date: Mon, 21 Oct 2024 13:11:10 +0800 Subject: [PATCH] fix: project Deskripsi: - update loading di semua modal konfirmasi disetiap fitur project - update order by name anggota saat tambah anggota project - update padding saat tidak ada tugas - menambahkan kode 500 di api agar mempermudah maintenance No Issuess --- src/app/api/project/[id]/member/route.ts | 11 +++++++---- src/app/api/project/[id]/route.ts | 14 +++++++------- src/module/project/ui/add_detail_task_project.tsx | 11 ++++++++--- src/module/project/ui/add_file_detail_project.tsx | 10 ++++++++-- .../project/ui/add_member_detail_project.tsx | 12 +++++++++--- .../project/ui/list_anggota_detail_project.tsx | 12 +++++++++--- .../project/ui/list_file_detail_project.tsx | 12 +++++++++--- .../project/ui/list_tugas_detail_project.tsx | 15 ++++++++++----- src/module/project/ui/progress_detail_project.tsx | 2 +- 9 files changed, 68 insertions(+), 31 deletions(-) diff --git a/src/app/api/project/[id]/member/route.ts b/src/app/api/project/[id]/member/route.ts index a99aad7..a50fa59 100644 --- a/src/app/api/project/[id]/member/route.ts +++ b/src/app/api/project/[id]/member/route.ts @@ -49,7 +49,7 @@ export async function POST(request: Request, context: { params: { id: string } } } catch (error) { console.error(error); - return NextResponse.json({ success: false, message: "Gagal menambah anggota kegiatan, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); + return NextResponse.json({ success: false, message: "Gagal menambah anggota kegiatan, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); } } @@ -95,7 +95,7 @@ export async function DELETE(request: Request, context: { params: { id: string } } catch (error) { console.error(error); - return NextResponse.json({ success: false, message: "Gagal mengeluarkan anggota kegiatan, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); + return NextResponse.json({ success: false, message: "Gagal mengeluarkan anggota kegiatan, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); } } @@ -141,13 +141,16 @@ export async function GET(request: Request, context: { params: { id: string } }) contains: (name == undefined || name == "null") ? "" : name, mode: 'insensitive' } - + }, select: { id: true, name: true, email: true, img: true + }, + orderBy: { + name: 'asc' } }) @@ -167,6 +170,6 @@ export async function GET(request: Request, context: { params: { id: string } }) } catch (error) { console.error(error); - return NextResponse.json({ success: false, message: "Gagal mendapatkan project, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); + return NextResponse.json({ success: false, message: "Gagal mendapatkan project, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); } } \ No newline at end of file diff --git a/src/app/api/project/[id]/route.ts b/src/app/api/project/[id]/route.ts index 792bdf2..1c114df 100644 --- a/src/app/api/project/[id]/route.ts +++ b/src/app/api/project/[id]/route.ts @@ -27,7 +27,7 @@ export async function GET(request: Request, context: { params: { id: string } }) }); if (!data) { - return NextResponse.json({ success: false, message: "Gagal mendapatkan project, data tidak ditemukan", }, { status: 404 }); + return NextResponse.json({ success: false, message: "Gagal mendapatkan kegiatan, data tidak ditemukan", }, { status: 404 }); } @@ -133,11 +133,11 @@ export async function GET(request: Request, context: { params: { id: string } }) allData = fix } - return NextResponse.json({ success: true, message: "Berhasil mendapatkan project", data: allData, }, { status: 200 }); + return NextResponse.json({ success: true, message: "Berhasil mendapatkan kegiatan", data: allData, }, { status: 200 }); } catch (error) { console.error(error); - return NextResponse.json({ success: false, message: "Gagal mendapatkan project, coba lagi nantiiiiii", reason: (error as Error).message, }, { status: 500 }); + return NextResponse.json({ success: false, message: "Gagal mendapatkan kegiatan, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); } } @@ -186,7 +186,7 @@ export async function POST(request: Request, context: { params: { id: string } } } catch (error) { console.error(error); - return NextResponse.json({ success: false, message: "Gagal tambah tahapan kegiatan, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); + return NextResponse.json({ success: false, message: "Gagal tambah tahapan kegiatan, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); } } @@ -210,7 +210,7 @@ export async function DELETE(request: Request, context: { params: { id: string } if (data == 0) { return NextResponse.json( { - success: false, message: "Gagal mendapatkan project, data tidak ditemukan", + success: false, message: "Gagal mendapatkan kegiatan, data tidak ditemukan", }, { status: 404 } ); @@ -232,7 +232,7 @@ export async function DELETE(request: Request, context: { params: { id: string } } catch (error) { console.error(error); - return NextResponse.json({ success: false, message: "Gagal membatalkan kegiatan, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); + return NextResponse.json({ success: false, message: "Gagal membatalkan kegiatan, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); } } @@ -278,6 +278,6 @@ export async function PUT(request: Request, context: { params: { id: string } }) } catch (error) { console.error(error); - return NextResponse.json({ success: false, message: "Gagal mengupdate kegiatan, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); + return NextResponse.json({ success: false, message: "Gagal mengupdate kegiatan, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); } } \ No newline at end of file diff --git a/src/module/project/ui/add_detail_task_project.tsx b/src/module/project/ui/add_detail_task_project.tsx index 5d4caf4..3860665 100644 --- a/src/module/project/ui/add_detail_task_project.tsx +++ b/src/module/project/ui/add_detail_task_project.tsx @@ -16,6 +16,7 @@ export default function AddDetailTaskProject() { const router = useRouter() const [name, setName] = useState("") const [openModal, setOpenModal] = useState(false) + const [loadingModal, setLoadingModal] = useState(false) const param = useParams<{ id: string }>() const tema = useHookstate(TEMA) const [touched, setTouched] = useState({ @@ -38,6 +39,7 @@ export default function AddDetailTaskProject() { async function onSubmit() { try { + setLoadingModal(true) const res = await funCreateDetailProject(param.id, { name, dateStart: (value[0] != null) ? value[0] : new Date, @@ -50,7 +52,6 @@ export default function AddDetailTaskProject() { id: param.id, }]) toast.success(res.message) - setOpenModal(false) router.push(`/project/${param.id}`) } else { toast.error(res.message) @@ -58,6 +59,9 @@ export default function AddDetailTaskProject() { } catch (error) { console.error(error) toast.error("Gagal menambahkan tugas, coba lagi nanti") + } finally { + setOpenModal(false) + setLoadingModal(false) } } @@ -148,13 +152,14 @@ export default function AddDetailTaskProject() { - setOpenModal(false)} + setOpenModal(false)} description="Apakah Anda yakin ingin menambahkan tugas?" onYes={(val) => { if (val) { onSubmit() + } else { + setOpenModal(false) } - setOpenModal(false) }} /> ); diff --git a/src/module/project/ui/add_file_detail_project.tsx b/src/module/project/ui/add_file_detail_project.tsx index befa6ea..d4be1a3 100644 --- a/src/module/project/ui/add_file_detail_project.tsx +++ b/src/module/project/ui/add_file_detail_project.tsx @@ -18,6 +18,7 @@ import { useWibuRealtime } from "wibu-realtime"; export default function AddFileDetailProject() { const router = useRouter() + const [loadingModal, setLoadingModal] = useState(false) const [openModal, setOpenModal] = useState(false) const [fileForm, setFileForm] = useState([]) const [listFile, setListFile] = useState([]) @@ -57,6 +58,7 @@ export default function AddFileDetailProject() { async function onSubmit() { try { + setLoadingModal(true) const fd = new FormData(); for (let i = 0; i < fileForm.length; i++) { fd.append(`file${i}`, fileForm[i]); @@ -79,6 +81,9 @@ export default function AddFileDetailProject() { } catch (error) { console.error(error) toast.error("Gagal menambahkan file, coba lagi nanti"); + } finally { + setOpenModal(false) + setLoadingModal(false) } } @@ -183,13 +188,14 @@ export default function AddFileDetailProject() { - setOpenModal(false)} + setOpenModal(false)} description="Apakah Anda yakin ingin menambahkan file?" onYes={(val) => { if (val) { onSubmit() + } else { + setOpenModal(false) } - setOpenModal(false) }} /> diff --git a/src/module/project/ui/add_member_detail_project.tsx b/src/module/project/ui/add_member_detail_project.tsx index 01f1079..1c6d70c 100644 --- a/src/module/project/ui/add_member_detail_project.tsx +++ b/src/module/project/ui/add_member_detail_project.tsx @@ -27,7 +27,8 @@ export default function AddMemberDetailProject() { const [onClickSearch, setOnClickSearch] = useState(false) const [searchQuery, setSearchQuery] = useState('') const tema = useHookstate(TEMA) - const isMobile2 = useMediaQuery("(max-width: 438px)"); + const isMobile2 = useMediaQuery("(max-width: 438px)") + const [loadingModal, setLoadingModal] = useState(false) const [dataRealTime, setDataRealtime] = useWibuRealtime({ WIBU_REALTIME_TOKEN: keyWibu, project: "sdm" @@ -102,6 +103,7 @@ export default function AddMemberDetailProject() { async function onSubmit() { try { + setLoadingModal(true) const res = await funAddMemberProject(param.id, { member: selectedFiles }); if (res.success) { setDataRealtime([{ @@ -116,6 +118,9 @@ export default function AddMemberDetailProject() { } catch (error) { console.error(error) toast.error("Gagal menambahkan anggota, coba lagi nanti"); + } finally { + setOpenModal(false) + setLoadingModal(true) } } @@ -307,13 +312,14 @@ export default function AddMemberDetailProject() { } - setOpenModal(false)} + setOpenModal(false)} description="Apakah Anda yakin ingin menambahkan anggota?" onYes={(val) => { if (val) { onSubmit() + } else { + setOpenModal(false) } - setOpenModal(false) }} /> ); diff --git a/src/module/project/ui/list_anggota_detail_project.tsx b/src/module/project/ui/list_anggota_detail_project.tsx index 9759377..e5b5220 100644 --- a/src/module/project/ui/list_anggota_detail_project.tsx +++ b/src/module/project/ui/list_anggota_detail_project.tsx @@ -18,6 +18,7 @@ export default function ListAnggotaDetailProject() { const [isData, setData] = useState([]) const param = useParams<{ id: string }>() const [loading, setLoading] = useState(true) + const [loadingDelete, setLoadingDelete] = useState(false) const [openDrawer, setOpenDrawer] = useState(false) const [isOpenModal, setOpenModal] = useState(false) const [dataChoose, setDataChoose] = useState({ id: '', name: '' }) @@ -76,6 +77,7 @@ export default function ListAnggotaDetailProject() { async function onSubmit() { try { + setLoadingDelete(true) const res = await funDeleteMemberProject(param.id, { idUser: dataChoose.id }); if (res.success) { setDataRealtime([{ @@ -92,6 +94,9 @@ export default function ListAnggotaDetailProject() { } catch (error) { console.error(error); toast.error("Gagal menghapus anggota Kegiatan, coba lagi nanti"); + } finally { + setOpenModal(false) + setLoadingDelete(false) } } @@ -129,7 +134,7 @@ export default function ListAnggotaDetailProject() { )) : - isData.length === 0 ? Tidak ada anggota : + isData.length === 0 ? Tidak ada anggota : isData.map((v, i) => { return ( @@ -198,13 +203,14 @@ export default function ListAnggotaDetailProject() { - setOpenModal(false)} + setOpenModal(false)} description="Apakah Anda yakin ingin mengeluarkan anggota?" onYes={(val) => { if (val) { onSubmit() + } else { + setOpenModal(false) } - setOpenModal(false) }} /> diff --git a/src/module/project/ui/list_file_detail_project.tsx b/src/module/project/ui/list_file_detail_project.tsx index cc07271..2e0c424 100644 --- a/src/module/project/ui/list_file_detail_project.tsx +++ b/src/module/project/ui/list_file_detail_project.tsx @@ -17,6 +17,7 @@ export default function ListFileDetailProject() { const [isData, setData] = useState([]) const param = useParams<{ id: string }>() const [loading, setLoading] = useState(true) + const [loadingDelete, setLoadingDelete] = useState(false) const [idData, setIdData] = useState('') const [idStorage, setIdStorage] = useState('') const [nameData, setNameData] = useState('') @@ -76,6 +77,7 @@ export default function ListFileDetailProject() { async function onDelete() { try { + setLoadingDelete(true) const res = await funDeleteFileProject(idData); if (res.success) { setDataRealtime([{ @@ -93,6 +95,9 @@ export default function ListFileDetailProject() { } catch (error) { console.error(error); toast.error("Gagal menghapus file, coba lagi nanti"); + } finally { + setOpenModal(false) + setLoadingDelete(false) } } @@ -128,7 +133,7 @@ export default function ListFileDetailProject() { )) : - isData.length === 0 ? Tidak ada file : + isData.length === 0 ? Tidak ada file : isData.map((item, index) => { return ( - setOpenModal(false)} + setOpenModal(false)} description="Apakah Anda yakin ingin menghapus file ini? File yang dihapus tidak dapat dikembalikan" onYes={(val) => { if (val) { onDelete() + } else { + setOpenModal(false) } - setOpenModal(false) }} /> setOpenModalView(false)} file={idStorage} extension={isExtension} fitur='project' /> diff --git a/src/module/project/ui/list_tugas_detail_project.tsx b/src/module/project/ui/list_tugas_detail_project.tsx index e32f21e..2e8fd48 100644 --- a/src/module/project/ui/list_tugas_detail_project.tsx +++ b/src/module/project/ui/list_tugas_detail_project.tsx @@ -24,6 +24,7 @@ export default function ListTugasDetailProject() { const [statusData, setStatusData] = useState(0) const [openDrawerStatus, setOpenDrawerStatus] = useState(false) const [isOpenModal, setOpenModal] = useState(false) + const [loadingDelete, setLoadingDelete] = useState(false) const router = useRouter() const tema = useHookstate(TEMA) const [reason, setReason] = useState("") @@ -75,6 +76,7 @@ export default function ListTugasDetailProject() { async function onDelete() { try { + setLoadingDelete(true) const res = await funDeleteDetailProject(idData, { idProject: param.id }); if (res.success) { setDataRealtime([{ @@ -92,6 +94,9 @@ export default function ListTugasDetailProject() { } catch (error) { console.error(error); toast.error("Gagal hapus tugas Kegiatan, coba lagi nanti"); + } finally { + setOpenModal(false) + setLoadingDelete(false) } } @@ -138,7 +143,6 @@ export default function ListTugasDetailProject() { style={{ borderRadius: 10, border: `1px solid ${"#D6D8F6"}`, - // padding: 10, }} pl={20} pr={20} @@ -149,7 +153,7 @@ export default function ListTugasDetailProject() { : - isData.length === 0 ? Tidak ada tugas : + isData.length === 0 ? Tidak ada tugas : isData.map((item, index) => { return ( @@ -256,13 +260,14 @@ export default function ListTugasDetailProject() { - setOpenModal(false)} - description="Apakah Anda yakin ingin menghapus Tahapan Tugas ini?" + setOpenModal(false)} + description="Apakah Anda yakin ingin menghapus tahapan tugas ini?" onYes={(val) => { if (val) { onDelete() + } else { + setOpenModal(false) } - setOpenModal(false) }} /> setOpenDrawerStatus(false)}> diff --git a/src/module/project/ui/progress_detail_project.tsx b/src/module/project/ui/progress_detail_project.tsx index 180463a..7d3ffce 100644 --- a/src/module/project/ui/progress_detail_project.tsx +++ b/src/module/project/ui/progress_detail_project.tsx @@ -89,7 +89,7 @@ export default function ProgressDetailProject() { <> {loading ? "" : - reason !== null ? + (reason !== null && reason != "") ? (