From 02cf4700f5332a9939372e65ff6c0ab560c35688 Mon Sep 17 00:00:00 2001 From: amel Date: Mon, 21 Oct 2024 13:11:10 +0800 Subject: [PATCH 1/5] 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 != "") ? ( Date: Mon, 21 Oct 2024 15:42:59 +0800 Subject: [PATCH 2/5] fix : user Deskripsi: - fix validasi jenis kelamin No Issues --- src/module/user/member/ui/edit_member.tsx | 2 +- src/module/user/profile/ui/edit_profile.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/module/user/member/ui/edit_member.tsx b/src/module/user/member/ui/edit_member.tsx index 1d69a5a..e7cdd38 100644 --- a/src/module/user/member/ui/edit_member.tsx +++ b/src/module/user/member/ui/edit_member.tsx @@ -392,7 +392,7 @@ export default function EditMember({ id }: { id: string }) { value={data.gender} error={ touched.gender && ( - data.gender == "" || String(data.gender) == "null" ? "Gender Tidak Boleh Kosong" : null + data.gender == "" || String(data.gender) == "null" ? "Jenis Kelamin Tidak Boleh Kosong" : null ) } /> diff --git a/src/module/user/profile/ui/edit_profile.tsx b/src/module/user/profile/ui/edit_profile.tsx index 9421ed3..37d68e8 100644 --- a/src/module/user/profile/ui/edit_profile.tsx +++ b/src/module/user/profile/ui/edit_profile.tsx @@ -125,7 +125,7 @@ export default function EditProfile() { } } else if (kategori == 'gender') { setData({ ...data, gender: val }) - if (val == "" || val == "null") { + if (val == "" || String(val) == "null") { setTouched({ ...touched, gender: true }) } else { setTouched({ ...touched, gender: false }) From 3715157ddfdbfa80ac49cdd9b273bd45d8accfac Mon Sep 17 00:00:00 2001 From: amel Date: Mon, 21 Oct 2024 15:57:58 +0800 Subject: [PATCH 3/5] fix : pengumuman Deskripsi: - api detail pengumuman == Object.groupby ga kebaca di staging No Issues --- src/app/api/announcement/[id]/route.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/app/api/announcement/[id]/route.ts b/src/app/api/announcement/[id]/route.ts index 50cde58..c8fa7d2 100644 --- a/src/app/api/announcement/[id]/route.ts +++ b/src/app/api/announcement/[id]/route.ts @@ -5,7 +5,6 @@ import _ from "lodash"; import { NextResponse } from "next/server"; - // GET ONE PENGUMUMAN, UNTUK TAMPIL DETAIL PENGUMUMAN export async function GET(request: Request, context: { params: { id: string } }) { try { @@ -72,7 +71,9 @@ export async function GET(request: Request, context: { params: { id: string } }) division: v.Division.name })) - const fixMember = Object.groupBy(formatMember, ({ group }) => group); + // const fixMember = Object.groupBy(formatMember, ({ group }) => group); + const fixMember = _.groupBy(formatMember, ({ group }) => group); + return NextResponse.json( { @@ -88,7 +89,7 @@ export async function GET(request: Request, context: { params: { id: string } }) } catch (error) { console.error(error); - return NextResponse.json({ success: false, message: "Gagal mendapatkan pengumuman, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); + return NextResponse.json({ success: false, message: "Gagal mendapatkan pengumuman, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); } } @@ -140,7 +141,7 @@ export async function DELETE(request: Request, context: { params: { id: string } ); } catch (error) { console.error(error); - return NextResponse.json({ success: false, message: "Gagal mendapatkan pengumuman, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); + return NextResponse.json({ success: false, message: "Gagal mendapatkan pengumuman, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); } } @@ -217,7 +218,7 @@ export async function PUT(request: Request, context: { params: { id: string } }) } catch (error) { console.error(error); - return NextResponse.json({ success: false, message: "Gagal mengeupdate pengumuman, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); + return NextResponse.json({ success: false, message: "Gagal mengeupdate pengumuman, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); } } From 09253a494cde7e498f6078e30ae1e23d81a6b748 Mon Sep 17 00:00:00 2001 From: amel Date: Mon, 21 Oct 2024 17:41:19 +0800 Subject: [PATCH 4/5] fix: divisi Deskripsi; - kondisi active divisi pada beberapa api No Issues --- src/app/api/group/get-division/route.ts | 8 ++++++-- src/app/api/home/route.ts | 2 ++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/app/api/group/get-division/route.ts b/src/app/api/group/get-division/route.ts index ec52351..c11a98b 100644 --- a/src/app/api/group/get-division/route.ts +++ b/src/app/api/group/get-division/route.ts @@ -1,9 +1,10 @@ import { prisma } from "@/module/_global"; import { funGetUserByCookies } from "@/module/auth"; import { NextResponse } from "next/server"; - export const dynamic = 'force-dynamic' export const revalidate = true + + export async function GET(request: Request) { try { const user = await funGetUserByCookies() @@ -32,6 +33,9 @@ export async function GET(request: Request) { id: true, name: true, Division: { + where: { + isActive: true + }, select: { id: true, name: true @@ -44,6 +48,6 @@ export async function GET(request: Request) { } catch (error) { console.error(error); - return NextResponse.json({ success: false, message: "Gagal mendapatkan grup, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); + return NextResponse.json({ success: false, message: "Gagal mendapatkan grup, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); } } \ No newline at end of file diff --git a/src/app/api/home/route.ts b/src/app/api/home/route.ts index 95342f9..0e1d147 100644 --- a/src/app/api/home/route.ts +++ b/src/app/api/home/route.ts @@ -287,6 +287,7 @@ export async function GET(request: Request) { isActive: true, dateStart: new Date(), Division: { + isActive: true, idVillage: idVillage, Group: { isActive: true, @@ -301,6 +302,7 @@ export async function GET(request: Request) { isActive: true, dateStart: new Date(), Division: { + isActive: true, idGroup: idGroup }, DivisionCalendar: { From abae62899c5ba6853a761c40657485163b306637 Mon Sep 17 00:00:00 2001 From: amel Date: Mon, 21 Oct 2024 17:42:13 +0800 Subject: [PATCH 5/5] upd: api version --- src/app/api/version-app/route.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/api/version-app/route.ts b/src/app/api/version-app/route.ts index a8fa37d..e9404ea 100644 --- a/src/app/api/version-app/route.ts +++ b/src/app/api/version-app/route.ts @@ -2,7 +2,7 @@ import { NextResponse } from "next/server"; export async function GET(request: Request) { try { - return NextResponse.json({ success: true, version: "0.1.4", mode: "staging" }, { status: 200 }); + return NextResponse.json({ success: true, version: "0.1.5", mode: "staging" }, { status: 200 }); } catch (error) { console.error(error); return NextResponse.json({ success: false, version: "Gagal mendapatkan version, coba lagi nanti", reason: (error as Error).message, }, { status: 500 });