From 799fe8c9f294923a8c1c17ea3be9f3ba8ae1fdeb Mon Sep 17 00:00:00 2001 From: amel Date: Mon, 23 Dec 2024 14:33:16 +0800 Subject: [PATCH 1/5] fix: drawer detail diskusi --- .../discussion/ui/detail_discussion.tsx | 2 +- .../ui/drawer_detail_discussion.tsx | 25 +++++++++---------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/module/discussion/ui/detail_discussion.tsx b/src/module/discussion/ui/detail_discussion.tsx index 123d376..403e5a0 100644 --- a/src/module/discussion/ui/detail_discussion.tsx +++ b/src/module/discussion/ui/detail_discussion.tsx @@ -107,7 +107,7 @@ export default function DetailDiscussion({ id, idDivision }: { id: string, idDiv return ( {/* */} - setOpenDrawer(true)} bg={tema.get().bgIcon} size="lg" radius="lg" aria-label="Settings"> diff --git a/src/module/discussion/ui/drawer_detail_discussion.tsx b/src/module/discussion/ui/drawer_detail_discussion.tsx index d2fb230..053e9d6 100644 --- a/src/module/discussion/ui/drawer_detail_discussion.tsx +++ b/src/module/discussion/ui/drawer_detail_discussion.tsx @@ -91,18 +91,9 @@ export default function DrawerDetailDiscussion({ onSuccess, id, status, idDivisi - setValModal(true)} justify={'center'} align={'center'} direction={'column'} > - - - - - Hapus - - - window.location.href = `/division/${param.id}/discussion/update/${param.detail}`} justify={'center'} align={'center'} direction={'column'} > @@ -112,8 +103,7 @@ export default function DrawerDetailDiscussion({ onSuccess, id, status, idDivisi - setValModalStatus(true)} > - + setValModalStatus(true)} > {status === 1 ? ( <> @@ -134,8 +124,17 @@ export default function DrawerDetailDiscussion({ onSuccess, id, status, idDivisi )} + + + setValModal(true)} justify={'center'} align={'center'} direction={'column'} > + + + + + Hapus + From 756c2248fe22df08b3c69ea69d27ca27ef170430 Mon Sep 17 00:00:00 2001 From: amel Date: Mon, 23 Dec 2024 16:49:38 +0800 Subject: [PATCH 2/5] upd: pembatasan jika bukan member divisi pada fitur tugas divisi No Issues --- src/module/division_new/index.ts | 4 +- src/module/division_new/lib/val_division.ts | 3 +- src/module/division_new/ui/wrap_division.tsx | 5 ++- src/module/task/ui/detail_list_file_task.tsx | 34 +++++++++------- src/module/task/ui/detail_list_tugas_task.tsx | 40 ++++++++++++++----- .../task/ui/navbar_detail_division_task.tsx | 24 ++++++----- 6 files changed, 72 insertions(+), 38 deletions(-) diff --git a/src/module/division_new/index.ts b/src/module/division_new/index.ts index 90951ea..1aa62bb 100644 --- a/src/module/division_new/index.ts +++ b/src/module/division_new/index.ts @@ -15,7 +15,7 @@ import EditDivision from './ui/edit_division'; import CreateReport from './ui/create_report'; import ReportDivisionId from './ui/report_division_id'; import { funGetDivisionById, funGetListDivisionByIdDivision, funGetSearchMemberDivision } from './lib/api_division'; -import { globalIsAdminDivision } from './lib/val_division'; +import { globalIsAdminDivision, globalIsMemberDivision } from './lib/val_division'; import WrapLayoutDivision from './ui/wrap_division'; import TabListDivision from './ui/tab_list_division'; import NavbarListDivision from './ui/navbar_list_division'; @@ -39,7 +39,7 @@ export { ReportDivisionId } export { funGetDivisionById } export { funGetListDivisionByIdDivision } export { funGetSearchMemberDivision } -export { globalIsAdminDivision } +export { globalIsAdminDivision, globalIsMemberDivision } export { WrapLayoutDivision } export { TabListDivision } export { NavbarListDivision } \ No newline at end of file diff --git a/src/module/division_new/lib/val_division.ts b/src/module/division_new/lib/val_division.ts index e756a7e..8800463 100644 --- a/src/module/division_new/lib/val_division.ts +++ b/src/module/division_new/lib/val_division.ts @@ -2,4 +2,5 @@ import { hookstate } from "@hookstate/core"; import { IFormMemberDivision } from "./type_division"; export const globalMemberDivision = hookstate([]); -export const globalIsAdminDivision = hookstate(false) \ No newline at end of file +export const globalIsAdminDivision = hookstate(false) +export const globalIsMemberDivision = hookstate(false) \ No newline at end of file diff --git a/src/module/division_new/ui/wrap_division.tsx b/src/module/division_new/ui/wrap_division.tsx index 53e5dd2..deb4719 100644 --- a/src/module/division_new/ui/wrap_division.tsx +++ b/src/module/division_new/ui/wrap_division.tsx @@ -1,20 +1,23 @@ 'use client' import { useHookstate } from "@hookstate/core"; import { useShallowEffect } from "@mantine/hooks"; -import { globalIsAdminDivision } from "../lib/val_division"; +import { globalIsAdminDivision, globalIsMemberDivision } from "../lib/val_division"; import { funGetDivisionById } from "../lib/api_division"; import { useParams } from "next/navigation"; import { funGetUserByCookies } from "@/module/auth"; export default function WrapLayoutDivision({ children }: { children: React.ReactNode }) { const isAdmin = useHookstate(globalIsAdminDivision) + const isMember = useHookstate(globalIsMemberDivision) const param = useParams<{ id: string }>() const getData = async () => { const res = await funGetDivisionById(param.id); const login = await funGetUserByCookies() const cek = res.data.member.some((i: any) => i.idUser == login.id && i.isAdmin == true) + const cekMember = res.data.member.some((i: any) => i.idUser == login.id) isAdmin.set(cek) + isMember.set(cekMember) } useShallowEffect(() => { diff --git a/src/module/task/ui/detail_list_file_task.tsx b/src/module/task/ui/detail_list_file_task.tsx index 8182695..50364d4 100644 --- a/src/module/task/ui/detail_list_file_task.tsx +++ b/src/module/task/ui/detail_list_file_task.tsx @@ -1,5 +1,5 @@ 'use client' -import { keyWibu, LayoutDrawer, LayoutModalViewFile, TEMA } from "@/module/_global"; +import { globalRole, keyWibu, LayoutDrawer, LayoutModalViewFile, TEMA } from "@/module/_global"; import LayoutModal from "@/module/_global/layout/layout_modal"; import { useHookstate } from "@hookstate/core"; import { Box, Center, Flex, Grid, Group, SimpleGrid, Skeleton, Stack, Text } from "@mantine/core"; @@ -12,8 +12,11 @@ import { FaTrash } from "react-icons/fa6"; import { useWibuRealtime } from "wibu-realtime"; import { funDeleteFileTask, funGetTaskDivisionById } from "../lib/api_task"; import { IDataFileTaskDivision } from "../lib/type_task"; +import { globalIsMemberDivision } from "@/module/division_new"; export default function ListFileDetailTask() { + const roleLogin = useHookstate(globalRole) + const memberDivision = useHookstate(globalIsMemberDivision) const [isData, setData] = useState([]) const [loading, setLoading] = useState(true) const param = useParams<{ id: string, detail: string }>() @@ -193,19 +196,22 @@ export default function ListFileDetailTask() { Lihat file - - { - reason == null ? - setOpenModal(true) - : setOpenModal(false) - }} justify={'center'} align={'center'} direction={'column'} > - - - - - Hapus file - - + { + (roleLogin.get() == "user" || roleLogin.get() == "coadmin") && !memberDivision.get() ? <> + : + { + reason == null ? + setOpenModal(true) + : setOpenModal(false) + }} justify={'center'} align={'center'} direction={'column'} > + + + + + Hapus file + + + } diff --git a/src/module/task/ui/detail_list_tugas_task.tsx b/src/module/task/ui/detail_list_tugas_task.tsx index 1ea4fef..aff1535 100644 --- a/src/module/task/ui/detail_list_tugas_task.tsx +++ b/src/module/task/ui/detail_list_tugas_task.tsx @@ -1,8 +1,8 @@ 'use client' -import { keyWibu, LayoutDrawer, SkeletonDetailListTugasTask, TEMA } from "@/module/_global" +import { globalRole, keyWibu, LayoutDrawer, SkeletonDetailListTugasTask, TEMA } from "@/module/_global" import LayoutModal from "@/module/_global/layout/layout_modal" import { useHookstate } from "@hookstate/core" -import { Box, Center, Checkbox, Divider, Flex, Grid, Group, SimpleGrid, Stack, Text } from "@mantine/core" +import { Box, Center, Checkbox, Divider, Flex, Grid, Group, SimpleGrid, Stack, Text, Loader } from "@mantine/core" import { useShallowEffect } from "@mantine/hooks" import "moment/locale/id" import { useParams, useRouter } from "next/navigation" @@ -14,8 +14,11 @@ import { useWibuRealtime } from "wibu-realtime" import { funDeleteDetailTask, funGetTaskDivisionById, funUpdateStatusDetailTask } from "../lib/api_task" import { IDataListTaskDivision } from "../lib/type_task" import { globalRefreshTask, valStatusDetailTask } from "../lib/val_task" +import { globalIsMemberDivision } from "@/module/division_new" export default function ListTugasDetailTask() { + const roleLogin = useHookstate(globalRole) + const memberDivision = useHookstate(globalIsMemberDivision) const [openDrawer, setOpenDrawer] = useState(false) const [openDrawerStatus, setOpenDrawerStatus] = useState(false) const [isOpenModal, setOpenModal] = useState(false) @@ -29,6 +32,8 @@ export default function ListTugasDetailTask() { const refresh = useHookstate(globalRefreshTask) const tema = useHookstate(TEMA) const [reason, setReason] = useState("") + const [loadingStatus, setLoadingStatus] = useState(false) + const [pilihStatus, setPilihStatus] = useState(0) const [dataRealTime, setDataRealtime] = useWibuRealtime({ WIBU_REALTIME_TOKEN: keyWibu, project: "sdm" @@ -105,6 +110,8 @@ export default function ListTugasDetailTask() { async function onUpdateStatus(val: number) { try { + setPilihStatus(val) + setLoadingStatus(true) const res = await funUpdateStatusDetailTask(idData, { status: val, idProject: param.detail }); if (res.success) { setDataRealtime([{ @@ -123,6 +130,9 @@ export default function ListTugasDetailTask() { } catch (error) { console.error(error); toast.error("Gagal mengubah status tugas divisi, coba lagi nanti"); + } finally { + setLoadingStatus(false) + setOpenModal(false) } } @@ -162,11 +172,15 @@ export default function ListTugasDetailTask() { return ( { - setIdData(item.id) - setStatusData(item.status) - reason == null ? - setOpenDrawer(true) - : setOpenDrawer(false) + if ((roleLogin.get() == "user" || roleLogin.get() == "coadmin") && !memberDivision.get()) { + setOpenDrawer(false) + } else { + setIdData(item.id) + setStatusData(item.status) + reason == null ? + setOpenDrawer(true) + : setOpenDrawer(false) + } }} my={18}> { return ( - { onUpdateStatus(item.value) }}> + { + if (!loadingStatus) { + onUpdateStatus(item.value) + } + }}> - {statusData === item.value ? : ""} + { + loadingStatus && pilihStatus == item.value ? + : + statusData === item.value ? : "" + } diff --git a/src/module/task/ui/navbar_detail_division_task.tsx b/src/module/task/ui/navbar_detail_division_task.tsx index 021888d..1ca37c6 100644 --- a/src/module/task/ui/navbar_detail_division_task.tsx +++ b/src/module/task/ui/navbar_detail_division_task.tsx @@ -1,6 +1,6 @@ 'use client' import { globalRole, keyWibu, LayoutDrawer, LayoutNavbarNew, TEMA } from "@/module/_global"; -import { globalIsAdminDivision } from "@/module/division_new"; +import { globalIsAdminDivision, globalIsMemberDivision } from "@/module/division_new"; import { useHookstate } from "@hookstate/core"; import { ActionIcon, Box, Flex, SimpleGrid, Stack, Text } from "@mantine/core"; import { useShallowEffect } from "@mantine/hooks"; @@ -21,6 +21,7 @@ export default function NavbarDetailDivisionTask() { const [isOpen, setOpen] = useState(false) const roleLogin = useHookstate(globalRole) const adminLogin = useHookstate(globalIsAdminDivision) + const memberDivision = useHookstate(globalIsMemberDivision) const tema = useHookstate(TEMA) const [reason, setReason] = useState("") const [dataRealTime, setDataRealtime] = useWibuRealtime({ @@ -58,16 +59,17 @@ export default function NavbarDetailDivisionTask() { return ( <> { setOpen(true) }} - > - - + ((roleLogin.get() == "user" || roleLogin.get() == "coadmin") && !memberDivision.get()) ? <> : + { setOpen(true) }} + > + + } /> From 9bf8294a6c4dcd466e420d520a6791774e7bee30 Mon Sep 17 00:00:00 2001 From: amel Date: Mon, 23 Dec 2024 17:16:39 +0800 Subject: [PATCH 3/5] upd: dokumen divisi Deskripsi: - update pembatasan jika user bukan member divisi No Issues --- .../document/ui/navbar_document_division.tsx | 47 +++++++++++-------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/src/module/document/ui/navbar_document_division.tsx b/src/module/document/ui/navbar_document_division.tsx index 9ddbd38..80af889 100644 --- a/src/module/document/ui/navbar_document_division.tsx +++ b/src/module/document/ui/navbar_document_division.tsx @@ -1,7 +1,7 @@ "use client"; -import { keyWibu, LayoutDrawer, LayoutModalViewFile, LayoutNavbarNew, TEMA, } from "@/module/_global"; +import { globalRole, keyWibu, LayoutDrawer, LayoutModalViewFile, LayoutNavbarNew, TEMA, } from "@/module/_global"; import LayoutModal from "@/module/_global/layout/layout_modal"; -import { funGetDivisionById } from "@/module/division_new"; +import { funGetDivisionById, globalIsMemberDivision } from "@/module/division_new"; import { useHookstate } from "@hookstate/core"; import { ActionIcon, Box, Breadcrumbs, Button, Checkbox, Divider, Flex, Grid, Group, Indicator, Menu, Modal, rem, SimpleGrid, Skeleton, Text, TextInput } from "@mantine/core"; import { useMediaQuery, useShallowEffect } from "@mantine/hooks"; @@ -27,6 +27,8 @@ import DrawerMore from "./drawer_more"; import DrawerShareDocument from "./drawer_share_document"; export default function NavbarDocumentDivision() { + const roleLogin = useHookstate(globalRole) + const memberDivision = useHookstate(globalIsMemberDivision) const router = useRouter(); const param = useParams<{ id: string }>(); const [isOpenModalView, setOpenModalView] = useState(false); @@ -497,16 +499,18 @@ export default function NavbarDocumentDivision() { back={`/division/${param.id}/`} title={name} menu={ - setOpen(true)} - variant="light" - bg={tema.get().bgIcon} - size="lg" - radius="lg" - aria-label="Settings" - > - - + (roleLogin.get() == "user" || roleLogin.get() == "coadmin") && !memberDivision.get() ? <> + : + setOpen(true)} + variant="light" + bg={tema.get().bgIcon} + size="lg" + radius="lg" + aria-label="Settings" + > + + } /> @@ -777,13 +781,18 @@ export default function NavbarDocumentDivision() { {v.updatedAt} - handleCheckboxChange(i)} - /> + { + (roleLogin.get() == "user" || roleLogin.get() == "coadmin") && !memberDivision.get() ? <> + : + handleCheckboxChange(i)} + /> + } + From 44b6314c493eb7440d0f260376862b50808cbf66 Mon Sep 17 00:00:00 2001 From: amel Date: Mon, 23 Dec 2024 17:51:30 +0800 Subject: [PATCH 4/5] upd: diskusi divisi Deskripsi: - update pembatasan user jika bukan member No Issues --- src/module/discussion/ui/detail_discussion.tsx | 7 ++++--- src/module/discussion/ui/navbar_list_discussion.tsx | 13 +++++++++---- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/module/discussion/ui/detail_discussion.tsx b/src/module/discussion/ui/detail_discussion.tsx index 403e5a0..5731dfa 100644 --- a/src/module/discussion/ui/detail_discussion.tsx +++ b/src/module/discussion/ui/detail_discussion.tsx @@ -1,6 +1,6 @@ "use client" import { globalRole, keyWibu, LayoutDrawer, LayoutNavbarNew, TEMA } from "@/module/_global"; -import { globalIsAdminDivision } from "@/module/division_new"; +import { globalIsAdminDivision, globalIsMemberDivision } from "@/module/division_new"; import { useHookstate } from "@hookstate/core"; import { ActionIcon, Avatar, Badge, Box, Center, Divider, Flex, Grid, Group, rem, Skeleton, Spoiler, Text, TextInput } from "@mantine/core"; import { useMediaQuery, useShallowEffect } from "@mantine/hooks"; @@ -28,6 +28,7 @@ export default function DetailDiscussion({ id, idDivision }: { id: string, idDiv const [isCreator, setCreator] = useState(false) const [isUser, setUser] = useState('') const adminLogin = useHookstate(globalIsAdminDivision) + const memberDivision = useHookstate(globalIsMemberDivision) const tema = useHookstate(TEMA) const router = useRouter() const isMobile = useMediaQuery('(max-width: 369px)'); @@ -323,7 +324,7 @@ export default function DetailDiscussion({ id, idDivision }: { id: string, idDiv }} size="md" placeholder="Kirim Komentar" - disabled={isData?.status === 2} + disabled={(isData?.status === 2 || (!memberDivision.get() && (roleLogin.get() == "user" || roleLogin.get() == "coadmin")))} onChange={(e) => setIsComent(e.target.value)} value={isComent} maxLength={300} @@ -334,7 +335,7 @@ export default function DetailDiscussion({ id, idDivision }: { id: string, idDiv
+ variant="subtle" aria-label="submit" disabled={(isData?.status === 2 || (!memberDivision.get() && (roleLogin.get() == "user" || roleLogin.get() == "coadmin")))}>
diff --git a/src/module/discussion/ui/navbar_list_discussion.tsx b/src/module/discussion/ui/navbar_list_discussion.tsx index 35d654b..9d5112b 100644 --- a/src/module/discussion/ui/navbar_list_discussion.tsx +++ b/src/module/discussion/ui/navbar_list_discussion.tsx @@ -1,23 +1,28 @@ 'use client' -import { LayoutNavbarNew, LayoutDrawer, TEMA } from "@/module/_global"; +import { LayoutNavbarNew, LayoutDrawer, TEMA, globalRole } from "@/module/_global"; import { ActionIcon } from "@mantine/core"; import { HiMenu } from "react-icons/hi"; import { useState } from "react"; import DrawerListDiscussion from "./drawer_list_discussion"; import { useParams } from "next/navigation"; import { useHookstate } from "@hookstate/core"; +import { globalIsMemberDivision } from "@/module/division_new"; export default function NavbarListDiscussion() { const [openDrawer, setOpenDrawer] = useState(false) + const roleLogin = useHookstate(globalRole) + const memberDivision = useHookstate(globalIsMemberDivision) const param = useParams<{ id: string }>() const tema = useHookstate(TEMA) return ( <> setOpenDrawer(true)} bg={tema.get().bgIcon} size="lg" radius="lg" aria-label="Settings"> - - + (roleLogin.get() == "user" || roleLogin.get() == "coadmin") && !memberDivision.get() ? <> + : + setOpenDrawer(true)} bg={tema.get().bgIcon} size="lg" radius="lg" aria-label="Settings"> + + } /> setOpenDrawer(false)}> From 6993502d6a4cbcc3482ac231f6272ac2ee1cd791 Mon Sep 17 00:00:00 2001 From: amel Date: Mon, 23 Dec 2024 17:54:21 +0800 Subject: [PATCH 5/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 811ea45..68f3c0f 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.7", tahap: "beta" }, { status: 200 }); + return NextResponse.json({ success: true, version: "0.2.8", tahap: "beta" }, { 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 });