diff --git a/src/module/announcement/ui/create_announcement.tsx b/src/module/announcement/ui/create_announcement.tsx index 0265326..3424fa0 100644 --- a/src/module/announcement/ui/create_announcement.tsx +++ b/src/module/announcement/ui/create_announcement.tsx @@ -75,7 +75,7 @@ export default function CreateAnnouncement() { return ( - } /> + } /> diff --git a/src/module/announcement/ui/create_users_announcement.tsx b/src/module/announcement/ui/create_users_announcement.tsx index bb2f4e0..23c1060 100644 --- a/src/module/announcement/ui/create_users_announcement.tsx +++ b/src/module/announcement/ui/create_users_announcement.tsx @@ -1,7 +1,7 @@ "use client"; import { LayoutNavbarNew, WARNA } from '@/module/_global'; import { funGetGroupDivision } from '@/module/group/lib/api_group'; -import { Box, Button, Divider, Flex, Group, Stack, Text } from '@mantine/core'; +import { Box, Button, Divider, Flex, Group, rem, Skeleton, Stack, Text } from '@mantine/core'; import { useShallowEffect } from '@mantine/hooks'; import React, { useState } from 'react'; import { FaCheck } from 'react-icons/fa'; @@ -22,6 +22,7 @@ export default function CreateUsersAnnouncement({ onClose }: { onClose: (val: an const [selectAll, setSelectAll] = useState(false); const [isData, setIsData] = useState([]) const memberGroup = useHookstate(globalMemberAnnouncement) + const [loading, setLoading] = useState(false) const handleCheck = (groupId: string, divisionId: string) => { const newChecked = { ...checked }; @@ -70,6 +71,7 @@ export default function CreateUsersAnnouncement({ onClose }: { onClose: (val: an }; async function getData() { + setLoading(true) const response = await funGetGroupDivision() setIsData(response.data) @@ -81,6 +83,8 @@ export default function CreateUsersAnnouncement({ onClose }: { onClose: (val: an setChecked(formatArray) } + + setLoading(false) } const handleSubmit = () => { @@ -121,75 +125,89 @@ export default function CreateUsersAnnouncement({ onClose }: { onClose: (val: an Pilih Semua - {isData.map((item) => ( - - handleGroupCheck(item.id)} justify='space-between' align='center'> - - {item.name} - - - {checked[item.id] && checked[item.id].length === item.Division.length ? - : (checked[item.id] && checked[item.id].length > 0 && checked[item.id].length < item.Division.length) ? : ""} - - - - {item.Division.map((division) => ( - - handleCheck(item.id, division.id)} justify='space-between' align='center'> - - {division.name} - - - {checked[item.id] && checked[item.id].includes(division.id) ? : ""} - - - - + {loading ? + Array(6) + .fill(null) + .map((_, i) => ( + + + + + + + )) + : + isData.map((item) => ( + + handleGroupCheck(item.id)} justify='space-between' align='center'> + + {item.name} + + + {checked[item.id] && checked[item.id].length === item.Division.length ? + : (checked[item.id] && checked[item.id].length > 0 && checked[item.id].length < item.Division.length) ? : ""} + + + + {item.Division.map((division) => ( + + handleCheck(item.id, division.id)} justify='space-between' align='center'> + + + {division.name} + + + + {checked[item.id] && checked[item.id].includes(division.id) ? : ""} + + + + + - - ))} - - ))} - - - - + ))} + + )) + } + + + ); diff --git a/src/module/announcement/ui/detail_announcement.tsx b/src/module/announcement/ui/detail_announcement.tsx index 19d6dff..4d8c9e4 100644 --- a/src/module/announcement/ui/detail_announcement.tsx +++ b/src/module/announcement/ui/detail_announcement.tsx @@ -1,5 +1,5 @@ "use client" -import { ActionIcon, Box, Flex, Grid, Group, List, Skeleton, Spoiler, Stack, Text } from "@mantine/core"; +import { ActionIcon, Box, Center, Flex, Grid, Group, List, Skeleton, Spoiler, Stack, Text } from "@mantine/core"; import { useShallowEffect } from "@mantine/hooks"; import { useState } from "react"; import { BsCardText } from "react-icons/bs"; @@ -78,15 +78,25 @@ export default function DetailAnnouncement({ id }: { id: string }) { : - - - {isData?.title} - - - + +
+ +
- + + + {isData?.title} + + +
+ + +
+ +
+
+ {isData?.desc} @@ -108,10 +118,12 @@ export default function DetailAnnouncement({ id }: { id: string }) { return ( {isMember[v]?.[0].group} - + { isMember[v].map((item: any, x: any) => { - return {item.division} + return + {item.division} + }) } diff --git a/src/module/announcement/ui/edit_announcement.tsx b/src/module/announcement/ui/edit_announcement.tsx index 4e601b9..9b6a625 100644 --- a/src/module/announcement/ui/edit_announcement.tsx +++ b/src/module/announcement/ui/edit_announcement.tsx @@ -1,23 +1,25 @@ 'use client' import { LayoutNavbarNew, WARNA } from "@/module/_global"; import LayoutModal from "@/module/_global/layout/layout_modal"; -import { Box, Button, Flex, List, rem, Skeleton, Stack, Text, Textarea, TextInput } from "@mantine/core"; +import { Box, Button, Flex, Group, List, rem, Skeleton, Stack, Text, Textarea, TextInput } from "@mantine/core"; import { useShallowEffect } from "@mantine/hooks"; import { useState } from "react"; import toast from "react-hot-toast"; import { HiOutlineChevronRight } from "react-icons/hi2"; import { funEditAnnouncement, funGetAnnouncementById } from "../lib/api_announcement"; -import { useParams } from "next/navigation"; +import { useParams, useRouter } from "next/navigation"; import { useHookstate } from "@hookstate/core"; import { globalMemberEditAnnouncement } from "../lib/val_announcement"; import { GroupData, GroupDataEditAnnouncement } from "../lib/type_announcement"; import EditChooseMember from "./edit_choose_member"; +import { IoIosArrowForward } from "react-icons/io"; export default function EditAnnouncement() { const [isOpen, setOpen] = useState(false) const [isChooseDivisi, setChooseDivisi] = useState(false) const param = useParams<{ id: string }>() const [loading, setLoading] = useState(true) + const router = useRouter() const [touched, setTouched] = useState({ title: false, desc: false @@ -89,6 +91,7 @@ export default function EditAnnouncement() { if (response.success) { toast.success(response.message) + router.push(`/announcement/${param.id}`) } else { toast.error(response.message) } @@ -121,7 +124,7 @@ export default function EditAnnouncement() { <> - + : <> @@ -173,9 +176,22 @@ export default function EditAnnouncement() { } /> - + + { setChooseDivisi(true) }} + > + + Tambah divisi penerima pengumuman + + + + } @@ -197,11 +213,17 @@ export default function EditAnnouncement() { return ( {v.name} - + - {v.Division.map((division: any) => ( -
  • {division.name}
  • - ))} + + { + v.Division.map((division: any) => { + return + {division.name} + + }) + } +
    diff --git a/src/module/announcement/ui/edit_choose_member.tsx b/src/module/announcement/ui/edit_choose_member.tsx index 32af0fa..8708057 100644 --- a/src/module/announcement/ui/edit_choose_member.tsx +++ b/src/module/announcement/ui/edit_choose_member.tsx @@ -145,6 +145,7 @@ export default function EditChooseMember({ onClose }: { onClose: (val: any) => v alignItems: 'center', }} fw={checked[item.id] && checked[item.id].length === item.Division.length ? 'bold' : 'normal'} + lineClamp={1} > {item.name} @@ -158,16 +159,14 @@ export default function EditChooseMember({ onClose }: { onClose: (val: any) => v {item.Division.map((division) => ( handleCheck(item.id, division.id)} justify='space-between' align='center'> - - {division.name} - + + + {division.name} + +
    - { + { router.push(`/announcement/${v.id}`) - }}> - {v.title} - {v.createdAt} - + }} mb={10}> + + {v.title} + + + {v.createdAt} + +
    {/* {v.desc} */} { diff --git a/src/module/announcement/ui/navbar_detail_announcement.tsx b/src/module/announcement/ui/navbar_detail_announcement.tsx index 3133ec0..22c538b 100644 --- a/src/module/announcement/ui/navbar_detail_announcement.tsx +++ b/src/module/announcement/ui/navbar_detail_announcement.tsx @@ -11,7 +11,7 @@ export default function NavbarDetailAnnouncement() { const router = useRouter() return ( - setOpenDrawer(true)} variant="light" bg={WARNA.bgIcon} size="lg" radius="lg" aria-label="Settings"> diff --git a/src/module/division_new/ui/create_anggota_division.tsx b/src/module/division_new/ui/create_anggota_division.tsx index aaa10d3..62e9e9c 100644 --- a/src/module/division_new/ui/create_anggota_division.tsx +++ b/src/module/division_new/ui/create_anggota_division.tsx @@ -3,7 +3,7 @@ import { LayoutNavbarNew, SkeletonSingle, WARNA } from '@/module/_global'; import LayoutModal from '@/module/_global/layout/layout_modal'; import { funGetUserByCookies } from '@/module/auth'; import { funGetAllmember, TypeUser } from '@/module/user'; -import { Avatar, Box, Button, Divider, Group, rem, Stack, Text, TextInput } from '@mantine/core'; +import { Avatar, Box, Button, Divider, Flex, Grid, Group, rem, Stack, Text, TextInput } from '@mantine/core'; import { useParams, useRouter } from 'next/navigation'; import React, { useState } from 'react'; import toast from 'react-hot-toast'; @@ -103,56 +103,63 @@ export default function CreateAnggotaDivision() { />
    - {loading ? - Array(8) - .fill(null) - .map((_, i) => ( + {loading ? + Array(8) + .fill(null) + .map((_, i) => ( - + - )) + )) : - {dataMember.map((v: any, index: any) => { - const isSelected = selectedFiles.some((i: any) => i.idUser == dataMember[index].id) - const found = memberDb.some((i: any) => i.idUser == v.id) - return ( - (!found) ? handleFileClick(index) : null}> - - - - - {v.name} - {(found) ? "sudah menjadi anggota divisi" : ""} - - - {isSelected ? : null} - - - + {dataMember.map((v: any, index: any) => { + const isSelected = selectedFiles.some((i: any) => i.idUser == dataMember[index].id) + const found = memberDb.some((i: any) => i.idUser == v.id) + return ( + (!found) ? handleFileClick(index) : null}> + + + + + + + + {v.name} + {(found) ? "sudah menjadi anggota divisi" : ""} + + {isSelected ? : null} + + + + + + - - ) - })} - + ) + })} + } - - - + + + setOpen(false)} description="Apakah Anda yakin ingin menambahkan anggota divisi?" onYes={(val) => { diff --git a/src/module/division_new/ui/information_division.tsx b/src/module/division_new/ui/information_division.tsx index 0aca711..87419da 100644 --- a/src/module/division_new/ui/information_division.tsx +++ b/src/module/division_new/ui/information_division.tsx @@ -1,6 +1,6 @@ "use client" import { LayoutDrawer, LayoutNavbarNew, SkeletonSingle, WARNA } from '@/module/_global'; -import { ActionIcon, Avatar, Box, Button, Divider, Flex, Group, Skeleton, Stack, Text } from '@mantine/core'; +import { ActionIcon, Avatar, Box, Button, Divider, Flex, Grid, Group, Skeleton, Stack, Text } from '@mantine/core'; import { useShallowEffect } from '@mantine/hooks'; import { useParams, useRouter } from 'next/navigation'; import React, { useState } from 'react'; @@ -184,24 +184,28 @@ export default function InformationDivision() { : member.map((v, i) => { return ( - { onClickMember(v.id, (v.isAdmin) ? true : false), setChooseMemberName(v.name) }} > - - - - - {v.name} - - - - - {(v.isAdmin) ? 'Admin' : 'Anggota'} - - + + + + + + {v.name} + + + + + + + {(v.isAdmin) ? 'Admin' : 'Anggota'} + + + diff --git a/src/module/division_new/ui/list_division.tsx b/src/module/division_new/ui/list_division.tsx index 355865c..1312068 100644 --- a/src/module/division_new/ui/list_division.tsx +++ b/src/module/division_new/ui/list_division.tsx @@ -150,26 +150,45 @@ export default function ListDivision() { data?.map((v: any, i: any) => { return ( - router.push(`/division/${v.id}`)}> - -
    - - - -
    - {v.name} -
    -
    + + + router.push(`/division/${v.id}`)}> +
    + + + +
    +
    +
    + + + + + {v.name} + + + + +
    ); @@ -193,8 +212,8 @@ export default function ListDivision() { router.push(`/division/${v.id}`)}> - - {v.name} + + {v.name} diff --git a/src/module/home/ui/list_divisi.tsx b/src/module/home/ui/list_divisi.tsx index 4788aa5..60cd98d 100644 --- a/src/module/home/ui/list_divisi.tsx +++ b/src/module/home/ui/list_divisi.tsx @@ -63,8 +63,8 @@ export default function ListDivisi() { router.push(`/division/${v.id}`)}> - - {v.name} + + {v.name} diff --git a/src/module/home/ui/list_project.tsx b/src/module/home/ui/list_project.tsx index c705869..458261b 100644 --- a/src/module/home/ui/list_project.tsx +++ b/src/module/home/ui/list_project.tsx @@ -62,8 +62,8 @@ export default function ListProjects() { router.push(`/project/${v.id}`)}> - - {v.title} + + {v.title} diff --git a/src/module/project/ui/list_project.tsx b/src/module/project/ui/list_project.tsx index 38d442c..476583a 100644 --- a/src/module/project/ui/list_project.tsx +++ b/src/module/project/ui/list_project.tsx @@ -121,35 +121,50 @@ export default function ListProject() { {isData.map((v, i) => { return ( - router.push(`/project/${v.id}`)}> - -
    - - - -
    - {v.title} -
    - - - -
    + + + router.push(`/project/${v.id}`)}> +
    + + + +
    +
    +
    + + + + + + {v.title} + + + {/* */} + + + + + +
    ); @@ -163,8 +178,8 @@ export default function ListProject() { router.push(`/project/${v.id}`)}> - - {v.title} + + {v.title} diff --git a/src/module/user/member/ui/tab_list_member.tsx b/src/module/user/member/ui/tab_list_member.tsx index 5f1681f..1e57554 100644 --- a/src/module/user/member/ui/tab_list_member.tsx +++ b/src/module/user/member/ui/tab_list_member.tsx @@ -1,6 +1,6 @@ import { SkeletonSingle, WARNA } from "@/module/_global" -import { Box, Group, ActionIcon, Text, TextInput, Divider, Avatar } from "@mantine/core" +import { Box, Group, ActionIcon, Text, TextInput, Divider, Avatar, Grid } from "@mantine/core" import { useShallowEffect } from "@mantine/hooks" import { useRouter, useSearchParams } from "next/navigation" import { useEffect, useState } from "react" @@ -104,17 +104,18 @@ export default function TabListMember() { { router.push(`/member/${v.id}`) }}> - - + + - - + + {_.startCase(v.name)} {v.group + ' - ' + v.position} - - + +