From 583f75490308c724c9ddaafa6223ebf86125eca7 Mon Sep 17 00:00:00 2001 From: lukman Date: Thu, 8 Aug 2024 13:38:56 +0800 Subject: [PATCH 1/2] feat : ammouncement --- .../announcement/create-user/page.tsx | 10 ++ src/app/api/division/get/route.ts | 1 + .../api/get/getOneAnnouncement.ts | 2 + .../api/post/createAnnouncement.ts | 1 + .../component/create_announcement.tsx | 6 +- .../component/create_users_announcement.tsx | 149 ++++++++++++++++++ .../api/get/getOneDetailDivision.ts | 6 +- .../view/view_detail_division.tsx | 10 +- src/module/group/api/get/listGroup.ts | 2 +- src/module/position/api/get/getAllPosition.ts | 2 +- src/module/user/api/get/getAllUser.ts | 2 +- 11 files changed, 177 insertions(+), 14 deletions(-) create mode 100644 src/app/(application)/announcement/create-user/page.tsx create mode 100644 src/module/announcement/component/create_users_announcement.tsx diff --git a/src/app/(application)/announcement/create-user/page.tsx b/src/app/(application)/announcement/create-user/page.tsx new file mode 100644 index 0000000..74e004b --- /dev/null +++ b/src/app/(application)/announcement/create-user/page.tsx @@ -0,0 +1,10 @@ +import CreateUsersAnnouncement from '@/module/announcement/component/create_users_announcement'; +import React from 'react'; + +function Page() { + return ( + + ); +} + +export default Page; diff --git a/src/app/api/division/get/route.ts b/src/app/api/division/get/route.ts index 47e2177..59135f9 100644 --- a/src/app/api/division/get/route.ts +++ b/src/app/api/division/get/route.ts @@ -1,6 +1,7 @@ import { apiDivision } from "@/module/division_new"; import { NextRequest } from "next/server"; +export const dynamic = 'force-dynamic' export async function GET(req: NextRequest) { return apiDivision(req, "GET") } \ No newline at end of file diff --git a/src/module/announcement/api/get/getOneAnnouncement.ts b/src/module/announcement/api/get/getOneAnnouncement.ts index 9fe1346..98ea66c 100644 --- a/src/module/announcement/api/get/getOneAnnouncement.ts +++ b/src/module/announcement/api/get/getOneAnnouncement.ts @@ -37,6 +37,8 @@ export async function getOneAnnouncement(req: NextRequest) { group: v.Group.name, })) + console.log(allAnnouncementMember) + return Response.json({ announcement, allAnnouncementMember }); } catch (error) { console.error(error); diff --git a/src/module/announcement/api/post/createAnnouncement.ts b/src/module/announcement/api/post/createAnnouncement.ts index 039986b..222ec31 100644 --- a/src/module/announcement/api/post/createAnnouncement.ts +++ b/src/module/announcement/api/post/createAnnouncement.ts @@ -29,6 +29,7 @@ export async function createAnnouncement(req: NextRequest) { const announcementMember = await prisma.announcementMember.createMany({ data: dataMember, }); + console.log(announcementMember) return Response.json({ announcement: announcement, diff --git a/src/module/announcement/component/create_announcement.tsx b/src/module/announcement/component/create_announcement.tsx index 9f7eb6e..e28c4f4 100644 --- a/src/module/announcement/component/create_announcement.tsx +++ b/src/module/announcement/component/create_announcement.tsx @@ -2,6 +2,7 @@ import { WARNA } from "@/module/_global"; import LayoutModal from "@/module/_global/layout/layout_modal"; import { Box, Button, Group, Stack, Text, Textarea, TextInput } from "@mantine/core"; +import { useRouter } from "next/navigation"; import { useState } from "react"; import toast from "react-hot-toast"; import { HiOutlineChevronRight } from "react-icons/hi2"; @@ -9,6 +10,7 @@ import { IoIosArrowForward } from "react-icons/io"; export default function CreateAnnouncement() { const [isOpen, setOpen] = useState(false) + const router = useRouter() function onTrue(val: boolean) { if (val) { @@ -52,7 +54,9 @@ export default function CreateAnnouncement() { border: `1px solid ${WARNA.biruTua}`, padding: 10, borderRadius: 10 - }}> + }} + onClick={() => router.push("/announcement/create-user")} + > Tambah Anggota diff --git a/src/module/announcement/component/create_users_announcement.tsx b/src/module/announcement/component/create_users_announcement.tsx new file mode 100644 index 0000000..8233ba3 --- /dev/null +++ b/src/module/announcement/component/create_users_announcement.tsx @@ -0,0 +1,149 @@ +"use client" +import { LayoutNavbarNew, WARNA } from '@/module/_global'; +import { Box, Button, Divider, Flex, Group, Stack, Text } from '@mantine/core'; +import React, { useState } from 'react'; +import { FaCheck } from 'react-icons/fa'; + +interface GroupData { + group: string; + divisions: string[]; +} + +const groupData: GroupData[] = [ + { + group: "Group 1", + divisions: ["Division 1", "Division 2", "Division 3"] + }, + { + group: "Group 2", + divisions: ["Division 4", "Division 5"] + } +]; + +interface CheckedState { + [key: string]: string[]; +} + +export default function CreateUsersAnnouncement() { + const [checked, setChecked] = useState({}); + const [selectAll, setSelectAll] = useState(false); + + const handleCheck = (group: string, division: string) => { + const newChecked = { ...checked }; + if (newChecked[group]) { + if (newChecked[group].includes(division)) { + newChecked[group] = newChecked[group].filter(item => item !== division); + } else { + newChecked[group].push(division); + } + } else { + newChecked[group] = [division]; + } + setChecked(newChecked); + console.log(newChecked) + }; + + const handleGroupCheck = (group: string) => { + const newChecked = { ...checked }; + if (newChecked[group]) { + delete newChecked[group]; + } else { + newChecked[group] = groupData.find(item => item.group === group)?.divisions || []; + } + setChecked(newChecked); + console.log(newChecked) + }; + + const handleSelectAll = () => { + setSelectAll(!selectAll); + if (!selectAll) { + const newChecked: CheckedState = {}; + groupData.forEach(item => { + newChecked[item.group] = item.divisions; + }); + setChecked(newChecked); + console.log(newChecked) + } else { + setChecked({}); + } + }; + + return ( +
+ } /> + + + + Pilih Semua + + + {groupData.map((item) => ( + + handleGroupCheck(item.group)} justify='space-between' align='center'> + + {item.group} + + + {checked[item.group] && checked[item.group].length === item.divisions.length ? : ""} + + + + {item.divisions.map((division) => ( + + handleCheck(item.group, division)} + style={{ + cursor: 'pointer', + display: 'flex', + alignItems: 'center', + paddingLeft: 20, + }} + > + {checked[item.group] && checked[item.group].includes(division) ? : ""} + {division} + + + + + + + ))} + + ))} + + + + + + +
+ ); +} \ No newline at end of file diff --git a/src/module/division_new/api/get/getOneDetailDivision.ts b/src/module/division_new/api/get/getOneDetailDivision.ts index af8d72a..806a901 100644 --- a/src/module/division_new/api/get/getOneDetailDivision.ts +++ b/src/module/division_new/api/get/getOneDetailDivision.ts @@ -1,12 +1,12 @@ import { prisma } from '@/module/_global'; import { NextRequest } from "next/server"; +export const dynamic = 'force-dynamic' export default async function getOneDetailDivision(req: NextRequest) { try { const searchParams = req.nextUrl.searchParams const id = searchParams.get('divisionId'); - console.log('aaaaa',id) const division = await prisma.division.findUnique({ where: { id: String(id), @@ -65,8 +65,8 @@ export default async function getOneDetailDivision(req: NextRequest) { const allData = { // division: division, - division:{name:id}, - jumlah:{ + division: { name: name }, + jumlah: { tugas: 1, dokumen: dokumen, diskusi: diskusi, diff --git a/src/module/division_new/view/view_detail_division.tsx b/src/module/division_new/view/view_detail_division.tsx index dc7fb30..5b8e3cf 100644 --- a/src/module/division_new/view/view_detail_division.tsx +++ b/src/module/division_new/view/view_detail_division.tsx @@ -12,22 +12,18 @@ import { API_ADDRESS } from '@/module/_global'; export default async function ViewDetailDivision({ id }: { id: string }) { const res = await fetch(`${process.env.URL + API_ADDRESS.apiGetOneDetailDivision}&divisionId=${id}`); - console.log(process.env.URL + API_ADDRESS.apiGetOneDetailDivision+"&divisionId="+id) const data = await res.json(); - console.log('amalia', data); + console.log(data) return ( // - + - + diff --git a/src/module/group/api/get/listGroup.ts b/src/module/group/api/get/listGroup.ts index 36a9beb..29fa3ca 100644 --- a/src/module/group/api/get/listGroup.ts +++ b/src/module/group/api/get/listGroup.ts @@ -14,7 +14,7 @@ export async function listGroups(req: NextRequest): Promise { isActive: (active == "true" ? true : false), idVillage: String(villaId), name: { - contains: String(name), + contains: (name == undefined || name == null) ? "" : name, mode: "insensitive" } }, diff --git a/src/module/position/api/get/getAllPosition.ts b/src/module/position/api/get/getAllPosition.ts index ac44b50..06f3ad3 100644 --- a/src/module/position/api/get/getAllPosition.ts +++ b/src/module/position/api/get/getAllPosition.ts @@ -24,7 +24,7 @@ export async function getAllPosition(req: NextRequest) { idGroup: String(grupFix), isActive: (active == "true" ? true : false), name: { - contains: String(name), + contains: (name == undefined || name == null) ? "" : name, mode: "insensitive" } }, diff --git a/src/module/user/api/get/getAllUser.ts b/src/module/user/api/get/getAllUser.ts index f6f5d2e..9b9588c 100644 --- a/src/module/user/api/get/getAllUser.ts +++ b/src/module/user/api/get/getAllUser.ts @@ -23,7 +23,7 @@ export async function getAllUser(req: NextRequest) { isActive: active == "true" ? true : false, idGroup: String(fixGroup), name: { - contains: String(name), + contains: (name == undefined || name == null) ? "" : name, mode: "insensitive", } }, From ca019d532b43045e033be2b94584ab3f48e7a009 Mon Sep 17 00:00:00 2001 From: lukman Date: Thu, 8 Aug 2024 13:40:51 +0800 Subject: [PATCH 2/2] feat : ammouncement --- .../announcement/component/create_users_announcement.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/module/announcement/component/create_users_announcement.tsx b/src/module/announcement/component/create_users_announcement.tsx index 8233ba3..0b8d8fa 100644 --- a/src/module/announcement/component/create_users_announcement.tsx +++ b/src/module/announcement/component/create_users_announcement.tsx @@ -105,9 +105,8 @@ export default function CreateUsersAnnouncement() { {item.divisions.map((division) => ( - + handleCheck(item.group, division)} style={{ cursor: 'pointer',