diff --git a/src/app/api/discussion/[id]/route.ts b/src/app/api/discussion/[id]/route.ts index 9067a37..8e1459a 100644 --- a/src/app/api/discussion/[id]/route.ts +++ b/src/app/api/discussion/[id]/route.ts @@ -66,7 +66,7 @@ export async function GET(request: Request, context: { params: { id: string } }) const { ...userMember } = data const username = data?.User.name const user_img = data?.User.img - const createdAt = moment(data?.createdAt).format("LL") + const createdAt = moment(data?.createdAt).format("ll") diff --git a/src/app/api/discussion/route.ts b/src/app/api/discussion/route.ts index 467d1f8..ad5e378 100644 --- a/src/app/api/discussion/route.ts +++ b/src/app/api/discussion/route.ts @@ -72,7 +72,7 @@ export async function GET(request: Request) { user_name: v.User.name, img: v.User.img, total_komentar: v.DivisionDisscussionComment.length, - createdAt: moment(v.createdAt).format("LL") + createdAt: moment(v.createdAt).format("ll") })) return NextResponse.json({ success: true, message: "Berhasil mendapatkan diskusi", data: fixData, }, { status: 200 }); diff --git a/src/module/calender/ui/create_user_calender.tsx b/src/module/calender/ui/create_user_calender.tsx index ba7f87a..97543e2 100644 --- a/src/module/calender/ui/create_user_calender.tsx +++ b/src/module/calender/ui/create_user_calender.tsx @@ -6,7 +6,7 @@ import { useHookstate } from '@hookstate/core'; import toast from 'react-hot-toast'; import { useShallowEffect } from '@mantine/hooks'; import { LayoutNavbarNew, SkeletonSingle, WARNA } from '@/module/_global'; -import { Avatar, Box, Button, Divider, Flex, Group, rem, Text } from '@mantine/core'; +import { Avatar, Box, Button, Divider, Flex, Grid, Group, rem, Text } from '@mantine/core'; import { FaCheck } from 'react-icons/fa6'; export default function CreateUserCalender({ onClose }: { onClose: (val: any) => void }) { @@ -31,7 +31,7 @@ export default function CreateUserCalender({ onClose }: { onClose: (val: any) => } else { toast.error(response.message) } - + } catch (error) { console.log(error) toast.error("Gagal mendapatkan anggota, coba lagi nanti"); @@ -83,77 +83,73 @@ export default function CreateUserCalender({ onClose }: { onClose: (val: any) => return ( - - - - - Pilih Semua Anggota - - {selectAll ? : ""} + + + + + Pilih Semua Anggota + + {selectAll ? : ""} - {loading ? + {loading ? Array(8) - .fill(null) - .map((_, i) => ( - + .fill(null) + .map((_, i) => ( + - - )) - : - - {isData.map((v, i) => { - const isSelected = selectedFiles.some((i: any) => i?.idUser == v.idUser); - return ( - handleFileClick(i)}> - - - - + )) + : + + {isData.map((v, i) => { + const isSelected = selectedFiles.some((i: any) => i?.idUser == v.idUser); + return ( + handleFileClick(i)}> + - {v.name} - - - - {isSelected ? : ""} - - - - - ); - })} - + + + + + + + {v.name} + + {isSelected ? : null} + + + + + + + + ); + })} + } - + + maxWidth: rem(550), + zIndex: 999, + backgroundColor: `${WARNA.bgWhite}`, + }}> - + ); } diff --git a/src/module/calender/ui/date_event_division.tsx b/src/module/calender/ui/date_event_division.tsx index 716721b..39e193b 100644 --- a/src/module/calender/ui/date_event_division.tsx +++ b/src/module/calender/ui/date_event_division.tsx @@ -1,5 +1,5 @@ import { WARNA } from '@/module/_global'; -import { Box, Divider, Group, Indicator, Skeleton, Text } from '@mantine/core'; +import { Box, Divider, Flex, Group, Indicator, Skeleton, Text } from '@mantine/core'; import { DatePicker, DatePickerProps } from '@mantine/dates'; import { useParams, useRouter } from 'next/navigation'; import React, { useState } from 'react'; @@ -82,7 +82,7 @@ export default function DateEventDivision() { const muncul = isListTgl.includes(coba) return ( - +
{day}
); @@ -136,11 +136,25 @@ export default function DateEventDivision() { }} h={113}> - + {event.timeStart} - {event.timeEnd} - {event.title} - Dibuat oleh : {event.user_name} - + + + {_.startCase(event.title)} + + + + + Dibuat oleh : {event.user_name} + + + diff --git a/src/module/calender/ui/detail_event_division.tsx b/src/module/calender/ui/detail_event_division.tsx index 3ad7b46..00fcabd 100644 --- a/src/module/calender/ui/detail_event_division.tsx +++ b/src/module/calender/ui/detail_event_division.tsx @@ -1,6 +1,6 @@ 'use client' import { LayoutDrawer, LayoutNavbarNew, SkeletonSingle, WARNA } from '@/module/_global'; -import { ActionIcon, Avatar, Box, CopyButton, Flex, Group, Skeleton, Stack, Text, Tooltip } from '@mantine/core'; +import { ActionIcon, Avatar, Box, CopyButton, Divider, Flex, Grid, Group, 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"; @@ -61,63 +61,130 @@ export default function DetailEventDivision() { padding: 20, borderRadius: 10 }}> - - - - {isDataCalender?.title} - - - - {moment(isDataCalender?.dateStart).format('LL')} - - - - {isDataCalender?.timeStart} | {isDataCalender?.timeEnd} - - - - - {isDataCalender?.repeatEventTyper.toString() === '1' ? 'Acara 1 Kali' : - isDataCalender?.repeatEventTyper.toString() === '2' ? 'Hari Kerja (senin - jumat)' : - isDataCalender?.repeatEventTyper.toString() === '3' ? 'Minggu' : - isDataCalender?.repeatEventTyper.toString() === '4' ? 'Bulanan' : - isDataCalender?.repeatEventTyper.toString() === '5' ? 'Tahunan' : - ''} - - - - - {isDataCalender?.linkMeet ? ( - - {isDataCalender?.linkMeet} - - {({ copied, copy }) => ( - - - {copied ? ( - - ) : ( - - )} - - - )} - - - ) : ( - - - ) - } - - - - {isDataCalender?.desc ? ( - {isDataCalender?.desc} - ) : ( - - - ) - } - + + + + + + + {isDataCalender?.title} + + + + + + + + {moment(isDataCalender?.dateStart).format('LL')} + + + + + + + + {isDataCalender?.timeStart} | {isDataCalender?.timeEnd} + + + + + + + + + {isDataCalender?.repeatEventTyper.toString() === '1' ? 'Acara 1 Kali' : + isDataCalender?.repeatEventTyper.toString() === '2' ? 'Hari Kerja (senin - jumat)' : + isDataCalender?.repeatEventTyper.toString() === '3' ? 'Minggu' : + isDataCalender?.repeatEventTyper.toString() === '4' ? 'Bulanan' : + isDataCalender?.repeatEventTyper.toString() === '5' ? 'Tahunan' : + ''} + + + + + + + + + {isDataCalender?.linkMeet ? ( + + + {isDataCalender?.linkMeet} + + + {({ copied, copy }) => ( + + + {copied ? ( + + ) : ( + + )} + + + )} + + + ) : ( + - + ) + } + + + + + + + + {isDataCalender?.desc ? ( + + {isDataCalender?.desc} + + ) : ( + - + ) + } + + } @@ -157,7 +224,7 @@ export default function DetailEventDivision() { px={20} pt={20} > - {isLengthMember == 0? ( + {isLengthMember == 0 ? ( Tidak ada anggota @@ -165,24 +232,32 @@ export default function DetailEventDivision() { {isDataAnggota.map((v, i) => { return ( - - - - - - {v.name} - - - {v.email} - - - - + + + + + + + + + {v.name} + + {v.email} + + + + + + + + + ); })} diff --git a/src/module/calender/ui/history_division_calender.tsx b/src/module/calender/ui/history_division_calender.tsx index 13c1c5b..05c2eff 100644 --- a/src/module/calender/ui/history_division_calender.tsx +++ b/src/module/calender/ui/history_division_calender.tsx @@ -91,20 +91,20 @@ export default function HistoryDivisionCalender() { : isData.map((v, i) => { return ( - - + + {moment(v.dateStart).format('D MMM')} {moment(v.dateStart).format('dddd')} - + {v.data.map((d, x) => { return ( - router.push(`/division/${param.id}/calender/${d.id}`)} > - {d.title} + {d.title} {d.timeStart} | {d.timeEnd} ) diff --git a/src/module/calender/ui/navbar_create_division_calender.tsx b/src/module/calender/ui/navbar_create_division_calender.tsx index b493f26..1f9d1e2 100644 --- a/src/module/calender/ui/navbar_create_division_calender.tsx +++ b/src/module/calender/ui/navbar_create_division_calender.tsx @@ -1,6 +1,6 @@ "use client" import { LayoutNavbarNew, WARNA } from '@/module/_global'; -import { Avatar, Box, Button, Flex, Group, Input, rem, Select, SimpleGrid, Stack, Text, Textarea, TextInput } from '@mantine/core'; +import { Avatar, Box, Button, Divider, Flex, Grid, Group, Input, rem, Select, SimpleGrid, Stack, Text, Textarea, TextInput } from '@mantine/core'; import { DateInput, TimeInput } from '@mantine/dates'; import React, { useState } from 'react'; import { IoIosArrowDropright } from 'react-icons/io'; @@ -85,7 +85,7 @@ export default function NavbarCreateDivisionCalender() { - + { return ( - - - - - - {v.name} + + + + + + + + {v.name} + + + + + + + Anggota - - - - Anggota - - + + + + + + ); })} diff --git a/src/module/calender/ui/update_division_calender.tsx b/src/module/calender/ui/update_division_calender.tsx index 1410f88..e6cc93e 100644 --- a/src/module/calender/ui/update_division_calender.tsx +++ b/src/module/calender/ui/update_division_calender.tsx @@ -1,6 +1,6 @@ "use client" import { LayoutNavbarNew, WARNA } from '@/module/_global'; -import { Avatar, Box, Button, Flex, Group, Input, rem, Select, SimpleGrid, Skeleton, Stack, Text, Textarea, TextInput } from '@mantine/core'; +import { Avatar, Box, Button, Divider, Flex, Grid, Group, Input, rem, Select, SimpleGrid, Skeleton, Stack, Text, Textarea, TextInput } from '@mantine/core'; import { DateInput, TimeInput } from '@mantine/dates'; import React, { useState } from 'react'; import { IoIosArrowDropright } from 'react-icons/io'; @@ -305,7 +305,7 @@ export default function UpdateDivisionCalender() { borderRadius: 10, }} > - Tambah Anggota * + Tambah Anggota @@ -332,24 +332,22 @@ export default function UpdateDivisionCalender() { memberUser.get().map((v: any, i: any) => { return ( - - - - - + + + + + + + {v.name} - - - - Anggota - - + + + + + + ); })} diff --git a/src/module/calender/ui/update_list_users.tsx b/src/module/calender/ui/update_list_users.tsx index ec09107..06df22f 100644 --- a/src/module/calender/ui/update_list_users.tsx +++ b/src/module/calender/ui/update_list_users.tsx @@ -2,7 +2,7 @@ import { LayoutNavbarNew, SkeletonSingle, WARNA } from '@/module/_global'; import { funGetDivisionById, IDataMemberDivision } from '@/module/division_new'; import { useHookstate } from '@hookstate/core'; -import { Avatar, Box, Button, Center, Divider, Flex, Group, rem, SimpleGrid, Skeleton, Stack, Text, TextInput } from '@mantine/core'; +import { Avatar, Box, Button, Center, Divider, Flex, Grid, Group, rem, SimpleGrid, Skeleton, Stack, Text, TextInput } from '@mantine/core'; import { useParams, useRouter } from 'next/navigation'; import React, { useState } from 'react'; import { HiMagnifyingGlass } from 'react-icons/hi2'; @@ -11,38 +11,6 @@ import toast from 'react-hot-toast'; import { useShallowEffect } from '@mantine/hooks'; import { FaCheck } from 'react-icons/fa6'; -const dataUser = [ - { - id: 1, - img: "https://i.pravatar.cc/500?img=3", - name: "Doni Setiawan", - }, - { - id: 2, - img: "https://i.pravatar.cc/500?img=10", - name: "Ilham Udin", - }, - { - id: 3, - img: "https://i.pravatar.cc/500?img=11", - name: "Didin Anang", - }, - { - id: 4, - img: "https://i.pravatar.cc/500?img=1", - name: "Angga Saputra", - }, - { - id: 5, - img: "https://i.pravatar.cc/500?img=2", - name: "Marcel Widianto", - }, - { - id: 6, - img: "https://i.pravatar.cc/500?img=7", - name: "Bagas Nusantara", - }, -]; export default function UpdateListUsers({ onClose }: { onClose: (val: any) => void }) { const router = useRouter() @@ -83,7 +51,7 @@ export default function UpdateListUsers({ onClose }: { onClose: (val: any) => vo 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 }]) + setSelectedFiles([...selectedFiles, { idUser: isData[index].idUser, name: isData[index].name, img: isData[index].img }]) } }; @@ -95,7 +63,7 @@ export default function UpdateListUsers({ onClose }: { onClose: (val: any) => vo 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 + idUser: isData[index].idUser, name: isData[index].name, img: isData[index].img } setSelectedFiles((selectedFiles: any) => [...selectedFiles, newArr]) } @@ -138,34 +106,30 @@ export default function UpdateListUsers({ onClose }: { onClose: (val: any) => vo )) : - + {isData.map((v, i) => { const isSelected = selectedFiles.some((i: any) => i?.idUser == v.idUser); return ( handleFileClick(i)}> - - + + - - {v.name} - - - - {isSelected ? : ""} - - - + + + + + {v.name} + + {isSelected ? : null} + + + + + + ); })} diff --git a/src/module/discussion/ui/detail_discussion.tsx b/src/module/discussion/ui/detail_discussion.tsx index cd44402..1004a42 100644 --- a/src/module/discussion/ui/detail_discussion.tsx +++ b/src/module/discussion/ui/detail_discussion.tsx @@ -71,21 +71,21 @@ export default function DetailDiscussion({ id, idDivision }: { id: string, idDiv Array(1) .fill(null) .map((_, i) => ( - + - + - + @@ -95,7 +95,7 @@ export default function DetailDiscussion({ id, idDivision }: { id: string, idDiv )) : <> {isData?.totalComments == 0 ? - + : - - {isData?.username ? - - - - - {isData?.username} - - {isData?.status === 1 ? "BUKA" : "TUTUP"} - - : "" - } - {isData?.createdAt} - + + + + + + + + {isData?.username} + + {isData?.status === 1 ? "BUKA" : "TUTUP"} + + + + {isData?.createdAt} + + } - + {isLoad ? Array(2) .fill(0) @@ -211,20 +215,21 @@ export default function DetailDiscussion({ id, idDivision }: { id: string, idDiv isData?.DivisionDisscussionComment.map((v, i) => { return ( - - - + + + + + - - {v.username} + + {v.username} - - {moment(v.createdAt).format("LL")} - + + + {moment(v.createdAt).format("ll")} + + - {isLoad ? - - : - - - - {300 - isComent.length} karakter tersisa - - - - - setIsComent(e.target.value)} - value={isComent} - maxLength={300} - /> + {isLoad ? + + : + + + + {300 - isComent.length} karakter tersisa + + + + + setIsComent(e.target.value)} + value={isComent} + maxLength={300} + /> - - -
- - - -
-
-
-
+
+ +
+ + + +
+
+
- } +
+ }
) } diff --git a/src/module/discussion/ui/form_create_discussion.tsx b/src/module/discussion/ui/form_create_discussion.tsx index 0ba359e..dc95c28 100644 --- a/src/module/discussion/ui/form_create_discussion.tsx +++ b/src/module/discussion/ui/form_create_discussion.tsx @@ -4,13 +4,18 @@ import LayoutModal from "@/module/_global/layout/layout_modal"; import { Avatar, Box, Button, Center, Grid, Group, rem, Text, Textarea } from "@mantine/core"; import { useState } from "react"; import toast from "react-hot-toast"; -import { funCreateDiscussion } from "../lib/api_discussion"; +import { funCreateDiscussion, funGetDiscussionById } from "../lib/api_discussion"; import { useParams, useRouter } from "next/navigation"; +import { useShallowEffect } from "@mantine/hooks"; +import { funGetProfileByCookies } from "@/module/user/profile/lib/api_profile"; export default function FormCreateDiscussion({ id }: { id: string }) { const [isValModal, setValModal] = useState(false) const router = useRouter() - const param = useParams<{ id: string }>() + const [isImg, setImg] = useState("") + const param = useParams<{ id: string, detail: string }>() + const [loading, setLoading] = useState(true) + const [img, setIMG] = useState() const [touched, setTouched] = useState({ desc: false, }); @@ -18,6 +23,22 @@ export default function FormCreateDiscussion({ id }: { id: string }) { desc: "", idDivision: id }) + async function getData() { + try { + setLoading(true) + const res = await funGetProfileByCookies() + setIMG(`/api/file/img?jenis=image&cat=user&file=${res.data.img}`) + setLoading(false) + } catch (error) { + console.error(error); + } finally { + setLoading(false) + } + } + + useShallowEffect(() => { + getData() + }, []) async function createDiscussion(val: boolean) { try { @@ -45,13 +66,12 @@ export default function FormCreateDiscussion({ id }: { id: string }) { } - return ( - - + + @@ -61,7 +81,7 @@ export default function FormCreateDiscussion({ id }: { id: string }) { input: { border: 'none', backgroundColor: 'transparent', - height: "60vh" + height: "70vh" } }} value={isData.desc} diff --git a/src/module/discussion/ui/form_edit_discussion.tsx b/src/module/discussion/ui/form_edit_discussion.tsx index d112a69..20fbe9a 100644 --- a/src/module/discussion/ui/form_edit_discussion.tsx +++ b/src/module/discussion/ui/form_edit_discussion.tsx @@ -7,6 +7,7 @@ import { useState } from "react" import toast from "react-hot-toast" import { funEditDiscussion, funGetDiscussionById } from "../lib/api_discussion" import { useShallowEffect } from "@mantine/hooks" +import { funGetProfileByCookies } from "@/module/user/profile/lib/api_profile" export default function FormEditDiscussion() { const [isValModal, setValModal] = useState(false) @@ -14,6 +15,7 @@ export default function FormEditDiscussion() { const param = useParams<{ id: string, detail: string }>() const [isDataOne, setDataOne] = useState("") const [loading, setLoading] = useState(true) + const [img, setIMG] = useState() const [touched, setTouched] = useState({ desc: false, }); @@ -55,19 +57,35 @@ export default function FormEditDiscussion() { } } + async function getData() { + try { + setLoading(true) + const res = await funGetProfileByCookies() + setIMG(`/api/file/img?jenis=image&cat=user&file=${res.data.img}`) + setLoading(false) + } catch (error) { + console.error(error); + } finally { + setLoading(false) + } + } + useShallowEffect(() => { fetchGetOneDiscussion() + getData() }, []) + + return ( - + {loading ? : - + } @@ -87,7 +105,7 @@ export default function FormEditDiscussion() { input: { border: 'none', backgroundColor: 'transparent', - height: "60vh" + height: "70vh" } }} value={isDataOne} diff --git a/src/module/discussion/ui/list_discussion.tsx b/src/module/discussion/ui/list_discussion.tsx index ad15a63..0424119 100644 --- a/src/module/discussion/ui/list_discussion.tsx +++ b/src/module/discussion/ui/list_discussion.tsx @@ -1,6 +1,6 @@ 'use client' import { WARNA } from "@/module/_global"; -import { Avatar, Badge, Box, Divider, Flex, Group, Skeleton, Spoiler, Text, TextInput } from "@mantine/core"; +import { Avatar, Badge, Box, Divider, Flex, Grid, Group, Skeleton, Spoiler, Text, TextInput } from "@mantine/core"; import { useParams, useRouter, useSearchParams } from "next/navigation"; import { useState } from "react"; import { GrChatOption } from "react-icons/gr"; @@ -63,7 +63,7 @@ export default function ListDiscussion({ id }: { id: string }) { .fill(null) .map((_, i) => ( - + { return ( - - { - router.push(`/division/${param.id}/discussion/${v.id}`) - }} - > - + + { + router.push(`/division/${param.id}/discussion/${v.id}`) + }}> + - - + + + + {v.user_name} {v.status === 1 ? "BUKA" : "TUTUP"} - - {v.createdAt} - + + + {v.createdAt} + +