From f26d939421779b7ea89a90caaeee245cea2f004b Mon Sep 17 00:00:00 2001 From: amel Date: Mon, 11 Nov 2024 14:52:49 +0800 Subject: [PATCH 1/5] fix: task divisi Deskripsi: - perbaiki tgl input untuk fitur divisi task No Issues --- src/app/api/task/[id]/route.ts | 4 ++-- src/app/api/task/detail/[id]/route.ts | 7 ++----- src/app/api/task/route.ts | 5 ++--- src/module/task/lib/type_task.ts | 8 ++++---- src/module/task/ui/add_detail_task.tsx | 6 +++--- src/module/task/ui/create_date_end_task.tsx | 4 ++-- src/module/task/ui/edit_detail_task.tsx | 4 ++-- 7 files changed, 17 insertions(+), 21 deletions(-) diff --git a/src/app/api/task/[id]/route.ts b/src/app/api/task/[id]/route.ts index b402d56..07e9dc2 100644 --- a/src/app/api/task/[id]/route.ts +++ b/src/app/api/task/[id]/route.ts @@ -193,8 +193,8 @@ export async function POST(request: Request, context: { params: { id: string } } idProject: id, idDivision, title, - dateStart: new Date(moment(dateStart).format('YYYY-MM-DD')), - dateEnd: new Date(moment(dateEnd).format('YYYY-MM-DD')), + dateStart: new Date(dateStart), + dateEnd: new Date(dateEnd), }, select: { id: true diff --git a/src/app/api/task/detail/[id]/route.ts b/src/app/api/task/detail/[id]/route.ts index 2d9f6dc..ddaa1f0 100644 --- a/src/app/api/task/detail/[id]/route.ts +++ b/src/app/api/task/detail/[id]/route.ts @@ -2,7 +2,6 @@ import { prisma } from "@/module/_global"; import { funGetUserByCookies } from "@/module/auth"; import { createLogUser } from "@/module/user"; import _ from "lodash"; -import moment from "moment"; import { NextResponse } from "next/server"; @@ -78,8 +77,6 @@ export async function DELETE(request: Request, context: { params: { id: string } } } - - // EDIT STATUS DETAIL TASK export async function PUT(request: Request, context: { params: { id: string } }) { try { @@ -218,8 +215,8 @@ export async function POST(request: Request, context: { params: { id: string } } }, data: { title, - dateStart: new Date(moment(dateStart).format('YYYY-MM-DD')), - dateEnd: new Date(moment(dateEnd).format('YYYY-MM-DD')), + dateStart: new Date(dateStart), + dateEnd: new Date(dateEnd), }, }); diff --git a/src/app/api/task/route.ts b/src/app/api/task/route.ts index 3cfa33a..b6bdd73 100644 --- a/src/app/api/task/route.ts +++ b/src/app/api/task/route.ts @@ -2,7 +2,6 @@ import { DIR, funUploadFile, prisma } from "@/module/_global"; import { funGetUserByCookies } from "@/module/auth"; import { createLogUser } from "@/module/user"; import _, { ceil } from "lodash"; -import moment from "moment"; import { NextResponse } from "next/server"; @@ -145,8 +144,8 @@ export async function POST(request: Request) { idDivision: idDivision, idProject: data.id, title: v.title, - dateStart: new Date(moment(v.dateStart).format('YYYY-MM-DD')), - dateEnd: new Date(moment(v.dateEnd).format('YYYY-MM-DD')), + dateStart: new Date(v.dateStart), + dateEnd: new Date(v.dateEnd), })) const insertTask = await prisma.divisionProjectTask.createMany({ diff --git a/src/module/task/lib/type_task.ts b/src/module/task/lib/type_task.ts index bcadba5..ed88fb0 100644 --- a/src/module/task/lib/type_task.ts +++ b/src/module/task/lib/type_task.ts @@ -14,14 +14,14 @@ export interface IFormMemberTask { export interface IFormDateTask { - dateStart: Date, - dateEnd: Date, + dateStart: string, + dateEnd: string, title: string } export interface IFormAddDetailTask { - dateStart: Date, - dateEnd: Date, + dateStart: string, + dateEnd: string, title: string idDivision: string } diff --git a/src/module/task/ui/add_detail_task.tsx b/src/module/task/ui/add_detail_task.tsx index dead6ab..7feae9c 100644 --- a/src/module/task/ui/add_detail_task.tsx +++ b/src/module/task/ui/add_detail_task.tsx @@ -4,13 +4,13 @@ import LayoutModal from "@/module/_global/layout/layout_modal"; import { useHookstate } from "@hookstate/core"; import { Box, Button, Flex, Group, rem, SimpleGrid, Stack, Text, TextInput } from "@mantine/core"; import { DatePicker } from "@mantine/dates"; +import { useShallowEffect } from "@mantine/hooks"; import moment from "moment"; import { useParams, useRouter } from "next/navigation"; import { useState } from "react"; import toast from "react-hot-toast"; import { useWibuRealtime } from "wibu-realtime"; import { funCreateDetailTask } from "../lib/api_task"; -import { useShallowEffect } from "@mantine/hooks"; export default function AddDetailTask() { const [value, setValue] = useState<[Date | null, Date | null]>([null, null]); @@ -59,8 +59,8 @@ export default function AddDetailTask() { setLoadingModal(true) const res = await funCreateDetailTask(param.detail, { title, - dateStart: (value[0] != null) ? value[0] : new Date, - dateEnd: (value[1] != null) ? value[1] : new Date, + dateStart: (value[0] != null) ? moment(value[0]).format('YYYY-MM-DD') : moment(new Date).format('YYYY-MM-DD'), + dateEnd: (value[1] != null) ? moment(value[1]).format('YYYY-MM-DD') : moment(new Date).format('YYYY-MM-DD'), idDivision: param.id }) diff --git a/src/module/task/ui/create_date_end_task.tsx b/src/module/task/ui/create_date_end_task.tsx index 613b58c..0b769eb 100644 --- a/src/module/task/ui/create_date_end_task.tsx +++ b/src/module/task/ui/create_date_end_task.tsx @@ -29,8 +29,8 @@ export default function ViewDateEndTask({ onClose, onSet }: { onClose: (val: boo return toast.error("Error! harus memasukkan judul tugas") onSet({ - dateStart: value[0], - dateEnd: value[1], + dateStart: moment(value[0]).format('YYYY-MM-DD'), + dateEnd: moment(value[1]).format('YYYY-MM-DD'), title: title }) diff --git a/src/module/task/ui/edit_detail_task.tsx b/src/module/task/ui/edit_detail_task.tsx index 882100d..13b34a0 100644 --- a/src/module/task/ui/edit_detail_task.tsx +++ b/src/module/task/ui/edit_detail_task.tsx @@ -38,8 +38,8 @@ export default function EditDetailTask() { setLoadingModal(true) const res = await funEditDetailTask(param.detail, { title: title, - dateStart: value[0], - dateEnd: value[1], + dateStart: moment(value[0]).format('YYYY-MM-DD'), + dateEnd: moment(value[1]).format('YYYY-MM-DD'), }) if (res.success) { From 280d78293954bba2ce45eea359bee630f61d5d20 Mon Sep 17 00:00:00 2001 From: amel Date: Mon, 11 Nov 2024 14:55:46 +0800 Subject: [PATCH 2/5] upd: version api --- 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 f3d45bf..ad998ca 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.2.0", mode: "staging" }, { status: 200 }); + return NextResponse.json({ success: true, version: "0.2.1", mode: "staging" }, { status: 200 }); } catch (error) { console.error(error); return NextResponse.json({ success: false, version: "Gagal mendapatkan version, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); From 929f4d1b9bcdcc9ff8f5a1a6540519cbe723a717 Mon Sep 17 00:00:00 2001 From: amel Date: Mon, 11 Nov 2024 17:26:07 +0800 Subject: [PATCH 3/5] fix: diskusi Deskripsi: - realtime No Issues --- src/app/api/discussion/route.ts | 19 +++++++++++++++++++ .../ui/drawer_detail_discussion.tsx | 15 ++++++++++----- src/module/discussion/ui/list_discussion.tsx | 13 ++++++++++++- 3 files changed, 41 insertions(+), 6 deletions(-) diff --git a/src/app/api/discussion/route.ts b/src/app/api/discussion/route.ts index ec3355f..20546dc 100644 --- a/src/app/api/discussion/route.ts +++ b/src/app/api/discussion/route.ts @@ -170,6 +170,25 @@ export async function POST(request: Request) { }) } + if (userRoleLogin != "cosupadmin") { + const ketuaGrup = await prisma.user.findFirst({ + where: { + isActive: true, + idUserRole: "cosupadmin", + idGroup: user.idGroup + } + }) + + dataNotif.push({ + idUserTo: ketuaGrup?.id, + idUserFrom: userId, + category: 'division/' + idDivision + '/discussion', + idContent: data.id, + title: 'Diskusi Baru', + desc: 'Terdapat diskusi baru. Silahkan periksa detailnya.' + }) + } + const insertNotif = await prisma.notifications.createMany({ data: dataNotif }) diff --git a/src/module/discussion/ui/drawer_detail_discussion.tsx b/src/module/discussion/ui/drawer_detail_discussion.tsx index 5474478..d2fb230 100644 --- a/src/module/discussion/ui/drawer_detail_discussion.tsx +++ b/src/module/discussion/ui/drawer_detail_discussion.tsx @@ -59,11 +59,16 @@ export default function DrawerDetailDiscussion({ onSuccess, id, status, idDivisi setLoadingDelete(true) const response = await funDeleteDiscussion(id) if (response.success) { - setDataRealtime([{ - category: "discussion-delete", - id: id, - user: response.user - }]) + setDataRealtime([ + { + category: "discussion-delete", + id: id, + user: response.user + }, + { + category: "division/" + param.id + "/discussion", + } + ]) toast.success(response.message) onSuccess(false) router.push(`/division/${param.id}/discussion`) diff --git a/src/module/discussion/ui/list_discussion.tsx b/src/module/discussion/ui/list_discussion.tsx index bdda9e4..c8fcac5 100644 --- a/src/module/discussion/ui/list_discussion.tsx +++ b/src/module/discussion/ui/list_discussion.tsx @@ -1,5 +1,5 @@ 'use client' -import { currentScroll, globalNotifPage, ReloadButtonTop, TEMA } from "@/module/_global"; +import { currentScroll, globalNotifPage, keyWibu, ReloadButtonTop, TEMA } from "@/module/_global"; import { useHookstate } from "@hookstate/core"; import { Avatar, Badge, Box, Divider, Flex, Grid, Group, Skeleton, Spoiler, Text, TextInput } from "@mantine/core"; import { useShallowEffect } from "@mantine/hooks"; @@ -9,6 +9,7 @@ import { useEffect, useState } from "react"; import toast from "react-hot-toast"; import { GrChatOption } from "react-icons/gr"; import { HiMagnifyingGlass } from "react-icons/hi2"; +import { useWibuRealtime } from "wibu-realtime"; import { funGetAllDiscussion } from "../lib/api_discussion"; import { IDataDiscussion } from "../lib/type_discussion"; @@ -24,6 +25,10 @@ export default function ListDiscussion({ id }: { id: string }) { const [isPage, setPage] = useState(1) const notifLoadPage = useHookstate(globalNotifPage) const [isRefresh, setRefresh] = useState(false) + const [dataRealTime, setDataRealtime] = useWibuRealtime({ + WIBU_REALTIME_TOKEN: keyWibu, + project: "sdm" + }) const getData = async (loading: boolean) => { try { @@ -83,6 +88,12 @@ export default function ListDiscussion({ id }: { id: string }) { } }, [notifLoadPage.get().load]) + useShallowEffect(() => { + if (dataRealTime && dataRealTime.some((i: any) => i.category == 'division/' + param.id + '/discussion')) { + setRefresh(true) + } + }, [dataRealTime]) + function onRefresh() { notifLoadPage.set({ category: '', From 2ca0852d2498192eb373c4a9930657476c1e566e Mon Sep 17 00:00:00 2001 From: amel Date: Tue, 12 Nov 2024 10:44:34 +0800 Subject: [PATCH 4/5] fix: jabatan Deskripsi; - order by name jabatan No Issues' --- src/app/api/position/route.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/app/api/position/route.ts b/src/app/api/position/route.ts index 0b0675d..4d12dfa 100644 --- a/src/app/api/position/route.ts +++ b/src/app/api/position/route.ts @@ -68,11 +68,14 @@ export async function GET(request: Request) { }); const allData = positions.map((v: any) => ({ - ..._.omit(v, ["Group"]), + ..._.omit(v, ["Group", "name"]), + name: v.name, group: v.Group.name })) - return NextResponse.json({ success: true, message: "Berhasil mendapatkan jabatan", data: allData, filter }, { status: 200 }); + const dataFix = _.orderBy(allData, [data => data.name.toLowerCase()], ['asc']); + + return NextResponse.json({ success: true, message: "Berhasil mendapatkan jabatan", data: dataFix, filter }, { status: 200 }); } catch (error) { console.error(error); return NextResponse.json({ success: false, message: "Gagal mendapatkan jabatan, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); From 3b1733922151005cd6ce124e033aed7dc0bd6c3e Mon Sep 17 00:00:00 2001 From: amel Date: Tue, 12 Nov 2024 11:31:00 +0800 Subject: [PATCH 5/5] fix: dokument Deskripsi; - order by dokumen divisi No Issues --- src/app/api/document/route.ts | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/app/api/document/route.ts b/src/app/api/document/route.ts index 8576245..3e9d5c0 100644 --- a/src/app/api/document/route.ts +++ b/src/app/api/document/route.ts @@ -142,8 +142,8 @@ export async function GET(request: Request) { extension: v.DivisionDocumentFolderFile.extension, path: v.DivisionDocumentFolderFile.path, createdBy: v.DivisionDocumentFolderFile.User.name, - createdAt: moment(v.DivisionDocumentFolderFile.createdAt).format("DD-MM-YYYY HH:mm"), - updatedAt: moment(v.DivisionDocumentFolderFile.updatedAt).format("DD-MM-YYYY HH:mm"), + createdAt: v.DivisionDocumentFolderFile.createdAt, + updatedAt: v.DivisionDocumentFolderFile.updatedAt, share: true })) @@ -181,8 +181,8 @@ export async function GET(request: Request) { const allData = data.map((v: any) => ({ ..._.omit(v, ["User", "createdAt", "updatedAt"]), createdBy: v.User.name, - createdAt: moment(v.createdAt).format("DD-MM-YYYY HH:mm"), - updatedAt: moment(v.updatedAt).format("DD-MM-YYYY HH:mm"), + createdAt: v.createdAt, + updatedAt: v.updatedAt, share: false })) @@ -190,7 +190,13 @@ export async function GET(request: Request) { allData.push(...formatDataShare) } - const formatData = _.orderBy(allData, ['category', 'createdAt'], ['desc', 'asc']); + const formatData = _.orderBy(allData, ['category', 'createdAt'], ['desc', 'desc']); + + const fixData = formatData.map((v: any) => ({ + ..._.omit(v, ["createdAt", "updatedAt"]), + createdAt: moment(v.createdAt).format("DD-MM-YYYY HH:mm"), + updatedAt: moment(v.updatedAt).format("DD-MM-YYYY HH:mm"), + })) let pathNow = path let jalur = [] @@ -221,7 +227,7 @@ export async function GET(request: Request) { jalur.push({ id: 'home', name: 'home' }) jalur = [...jalur].reverse() - return NextResponse.json({ success: true, message: "Berhasil mendapatkan item", data: formatData, jalur }, { status: 200 }); + return NextResponse.json({ success: true, message: "Berhasil mendapatkan item", data: fixData, jalur }, { status: 200 }); } catch (error) { console.error(error);