diff --git a/src/app/(application)/division/[id]/(fitur-division)/calender/[detail]/add-member/page.tsx b/src/app/(application)/division/[id]/(fitur-division)/calender/[detail]/add-member/page.tsx
new file mode 100644
index 0000000..1f76c6b
--- /dev/null
+++ b/src/app/(application)/division/[id]/(fitur-division)/calender/[detail]/add-member/page.tsx
@@ -0,0 +1,10 @@
+import { CreateUserDetailCalender } from '@/module/calender';
+import React from 'react';
+
+function Page() {
+ return (
+
+ );
+}
+
+export default Page;
diff --git a/src/module/calender/index.ts b/src/module/calender/index.ts
index ed688c7..9ee2ff5 100644
--- a/src/module/calender/index.ts
+++ b/src/module/calender/index.ts
@@ -1,4 +1,5 @@
import CreateCalenderDivisionCaleder from "./ui/create_calender_division_caleder";
+import CreateUserDetailCalender from "./ui/create_user_detail_calender";
import DetailEventDivision from "./ui/detail_event_division";
import HistoryDivisionCalender from "./ui/history_division_calender";
import NavbarCreateDivisionCalender from "./ui/navbar_create_division_calender";
@@ -10,4 +11,5 @@ export { NavbarCreateDivisionCalender }
export { CreateCalenderDivisionCaleder }
export { DetailEventDivision }
export { UpdateDivisionCalender }
-export { HistoryDivisionCalender }
\ No newline at end of file
+export { HistoryDivisionCalender }
+export { CreateUserDetailCalender }
\ No newline at end of file
diff --git a/src/module/calender/ui/create_user_detail_calender.tsx b/src/module/calender/ui/create_user_detail_calender.tsx
new file mode 100644
index 0000000..e749827
--- /dev/null
+++ b/src/module/calender/ui/create_user_detail_calender.tsx
@@ -0,0 +1,269 @@
+"use client"
+import React, { useState } from 'react';
+import { globalCalender } from '../lib/val_calender';
+import { useParams, useRouter } from 'next/navigation';
+import { funGetDivisionById, funGetSearchMemberDivision, IDataMemberDivision } from '@/module/division_new';
+import { useHookstate } from '@hookstate/core';
+import toast from 'react-hot-toast';
+import { useShallowEffect } from '@mantine/hooks';
+import { LayoutNavbarNew, SkeletonSingle, WARNA } from '@/module/_global';
+import { ActionIcon, Avatar, Box, Button, Center, Divider, Flex, Grid, Group, Indicator, rem, Text, TextInput } from '@mantine/core';
+import { FaCheck } from 'react-icons/fa6';
+import { HiMagnifyingGlass } from 'react-icons/hi2';
+import { IoArrowBackOutline, IoClose } from 'react-icons/io5';
+import { Carousel } from '@mantine/carousel';
+
+export default function CreateUserDetailCalender() {
+ const router = useRouter()
+ const param = useParams<{ id: string }>()
+ const [selectedFiles, setSelectedFiles] = useState([])
+ const [isData, setData] = useState([])
+ const member = useHookstate(globalCalender)
+ const [selectAll, setSelectAll] = useState(false)
+ const [loading, setLoading] = useState(true)
+ const [onClickSearch, setOnClickSearch] = useState(false)
+ const [searchQuery, setSearchQuery] = useState('')
+
+ async function getData() {
+ try {
+ setLoading(true)
+ const response = await funGetSearchMemberDivision("?search=", param.id)
+ if (response.success) {
+ setData(response.data)
+ if (member.length > 0) {
+ setSelectedFiles(JSON.parse(JSON.stringify(member.get())))
+ }
+ setLoading(false)
+ } else {
+ toast.error(response.message)
+ }
+
+ } catch (error) {
+ console.error(error)
+ toast.error("Gagal mendapatkan anggota, coba lagi nanti");
+ } finally {
+ setLoading(false)
+ }
+ }
+
+
+ useShallowEffect(() => {
+ getData()
+ }, []);
+
+ const handleFileClick = (index: number) => {
+ if (selectedFiles.some((i: any) => i.idUser == isData[index].idUser)) {
+ setSelectedFiles(selectedFiles.filter((i: any) => i.idUser != isData[index].idUser))
+ } else {
+ setSelectedFiles([...selectedFiles, { idUser: isData[index].idUser, name: isData[index].name, img: isData[index].img }])
+ }
+ };
+
+
+
+ const handleSelectAll = () => {
+ setSelectAll(!selectAll);
+ if (!selectAll) {
+ for (let index = 0; index < isData.length; index++) {
+ if (!selectedFiles.some((i: any) => i.idUser == isData[index].idUser)) {
+ const newArr = {
+ idUser: isData[index].idUser, name: isData[index].name, img: isData[index].img
+ }
+ setSelectedFiles((selectedFiles: any) => [...selectedFiles, newArr])
+ }
+
+ }
+ } else {
+ setSelectedFiles([]);
+ }
+ };
+
+
+ function onSubmit() {
+ if (selectedFiles.length == 0) {
+ return toast.error("Error! silahkan pilih anggota")
+ }
+ member.set(selectedFiles)
+ // onClose(true)
+ }
+
+ const handleSearchClick = () => {
+ setOnClickSearch(true);
+ };
+
+ const handleClose = () => {
+ setOnClickSearch(false);
+ };
+
+ function handleXMember(id: number) {
+ setSelectedFiles(selectedFiles.filter((i: any) => i.idUser != id))
+ }
+
+ async function fetchGetMember(val: string) {
+ setSearchQuery(val)
+ try {
+ const res = await funGetSearchMemberDivision('?search=' + val, param.id);
+ if (res.success) {
+ setData(res.data)
+ } else {
+ toast.error(res.message);
+ }
+ } catch (error) {
+ console.error(error);
+ }
+ }
+
+ return (
+
+
+
+ }
+ />
+
+ {/* SEARCH */}
+ {onClickSearch
+ ? (
+
+
+
+
+
+
+
+
+ fetchGetMember(e.currentTarget.value)}
+ />
+
+
+
+ )
+ : null
+ }
+ {/* Close User */}
+
+ {selectedFiles.length > 0 ? (
+
+ {selectedFiles.map((v: any, i: any) => {
+ return (
+
+ { handleXMember(v.idUser) }}
+ >
+
+ }>
+
+
+
+ {v.name}
+
+
+ )
+ })}
+
+ ) : (
+
+
+ Tidak ada anggota yang dipilih
+
+
+ )}
+
+
+
+
+
+ Pilih Semua Anggota
+
+ {selectAll ? : ""}
+
+ {loading ?
+ Array(8)
+ .fill(null)
+ .map((_, i) => (
+
+
+
+ ))
+ :
+
+ {isData.map((v, i) => {
+ const isSelected = selectedFiles.some((i: any) => i?.idUser == v.idUser);
+ return (
+ handleFileClick(i)}>
+
+
+
+
+
+
+
+ {v.name}
+
+ {isSelected ? : null}
+
+
+
+
+
+
+
+ );
+ })}
+
+ }
+
+
+
+
+
+ );
+}
+
diff --git a/src/module/calender/ui/detail_event_division.tsx b/src/module/calender/ui/detail_event_division.tsx
index 7e5ed61..52acbd1 100644
--- a/src/module/calender/ui/detail_event_division.tsx
+++ b/src/module/calender/ui/detail_event_division.tsx
@@ -1,29 +1,34 @@
'use client'
import { LayoutDrawer, LayoutNavbarNew, SkeletonSingle, WARNA } from '@/module/_global';
-import { ActionIcon, Avatar, Box, CopyButton, Divider, Flex, Grid, Group, Skeleton, Spoiler, Stack, Text, Tooltip } from '@mantine/core';
+import { ActionIcon, Avatar, Box, CopyButton, Divider, Flex, Grid, Group, SimpleGrid, Skeleton, Spoiler, Stack, Text, Tooltip } from '@mantine/core';
import React, { useState } from 'react';
import { BsCalendar2Event, BsCalendarDate } from 'react-icons/bs';
import { MdEventNote, MdOutlineFormatListBulleted } from "react-icons/md";
import { LuClock, LuCopy, LuLink } from "react-icons/lu";
-import { FaCheck } from 'react-icons/fa6';
+import { FaCheck, FaUser } from 'react-icons/fa6';
import { TbCopy } from 'react-icons/tb';
import { HiMenu } from 'react-icons/hi';
import DrawerDetailEvent from './drawer_detail_event';
-import { useParams } from 'next/navigation';
+import { useParams, useRouter } from 'next/navigation';
import { funGetOneCalender } from '../lib/api_calender';
import { useShallowEffect } from '@mantine/hooks';
import moment from "moment";
import "moment/locale/id";
import { IDataDetailByIdCalender, IDataDetailByIdMember } from '../lib/type_calender';
import SkeletonDetailEvent from './skeleton_detail_event';
+import { IoIosCloseCircle } from 'react-icons/io';
+import LayoutModal from '@/module/_global/layout/layout_modal';
export default function DetailEventDivision() {
- const [openDrawer, setOpenDrawer] = useState(false)
const param = useParams<{ id: string, detail: string }>()
const [isDataCalender, setDataCalender] = useState()
const [isDataAnggota, setDataAnggota] = useState([])
const [isLengthMember, setLengthMember] = useState()
const [loading, setLoading] = useState(true)
+ const [openDrawer, setOpenDrawer] = useState(false)
+ const [openDrawerUser, setOpenDrawerUser] = useState(false)
+ const [isOpenModal, setOpenModal] = useState(false)
+ const router = useRouter()
const getData = async () => {
@@ -47,7 +52,7 @@ export default function DetailEventDivision() {
return (
- setOpenDrawer(true)} bg={WARNA.bgIcon} size="lg" radius="lg" aria-label="Settings">
} />
@@ -188,7 +193,7 @@ export default function DetailEventDivision() {
}
- {loading ?
+ {/* {loading ?
- }
+ } */}
+
+
+
+ Total Anggota
+ {isLengthMember} Anggota
+
+
+
+ setOpenDrawerUser(true)}>
+
+
+
+
+
+
+
+
+ Nama
+
+ email.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Menu} onClose={() => setOpenDrawerUser(false)}>
+
+
+
+ { router.push('/member/' + ) }}
+ justify={'center'} align={'center'} direction={'column'} >
+
+
+
+
+ Lihat profil
+
+
+
+ { setOpenModal(true) }} justify={'center'} align={'center'} direction={'column'} >
+
+
+
+
+ Keluarkan anggota
+
+
+
+
+
+
+
+ setOpenModal(false)}
+ description="Apakah Anda yakin ingin mengeluarkan anggota?"
+ onYes={(val) => {
+ if (val) {
+ // onSubmit()
+ }
+ setOpenModal(false)
+ }} />
setOpenDrawer(false)}>
diff --git a/src/module/calender/ui/drawer_detail_event.tsx b/src/module/calender/ui/drawer_detail_event.tsx
index ab8ef45..d5b4903 100644
--- a/src/module/calender/ui/drawer_detail_event.tsx
+++ b/src/module/calender/ui/drawer_detail_event.tsx
@@ -9,6 +9,7 @@ import { AiOutlineFileSearch } from 'react-icons/ai';
import { IoAddCircle } from 'react-icons/io5';
import { MdDelete, MdEdit } from 'react-icons/md';
import { funDeleteCalenderById } from '../lib/api_calender';
+import { FaUsers } from 'react-icons/fa6';
export default function DrawerDetailEvent() {
const router = useRouter()
@@ -56,7 +57,15 @@ export default function DrawerDetailEvent() {
- Edit
+ Edit Kalender
+
+
+ router.push(`/division/${param.id}/calender/${param.detail}/add-member`)} justify={'center'} align={'center'} direction={'column'} >
+
+
+
+
+ Tambah Anggota
diff --git a/src/module/calender/ui/update_division_calender.tsx b/src/module/calender/ui/update_division_calender.tsx
index 850254e..f0015a9 100644
--- a/src/module/calender/ui/update_division_calender.tsx
+++ b/src/module/calender/ui/update_division_calender.tsx
@@ -296,7 +296,7 @@ export default function UpdateDivisionCalender() {
}
}
/>
- setOpenMember(true)}>
+ {/* setOpenMember(true)}>
Tambah Anggota
-
-
+ */}
+ {/*
Anggota Terpilih
Total {memberUser.length} Anggota
@@ -353,7 +353,7 @@ export default function UpdateDivisionCalender() {
-
+ */}
>
}