diff --git a/src/app/api/project/[id]/member/route.ts b/src/app/api/project/[id]/member/route.ts index ca9630c..0af5250 100644 --- a/src/app/api/project/[id]/member/route.ts +++ b/src/app/api/project/[id]/member/route.ts @@ -133,13 +133,13 @@ export async function GET(request: Request, context: { params: { id: string } }) const member = await prisma.user.findMany({ where: { idGroup: String(groupId), - id: { - not: String(userId) - }, - OR: [ - { idUserRole: 'coadmin', }, - { idUserRole: 'user', } - ], + // id: { + // not: String(userId) + // }, + // OR: [ + // { idUserRole: 'coadmin', }, + // { idUserRole: 'user', } + // ], isActive: true, name: { contains: (name == undefined || name == "null") ? "" : name, @@ -149,6 +149,7 @@ export async function GET(request: Request, context: { params: { id: string } }) }, select: { id: true, + idUserRole: true, name: true, email: true, img: true, @@ -172,7 +173,8 @@ export async function GET(request: Request, context: { params: { id: string } }) idUser: v.id, name: v.name, email: v.email, - img: v.img + img: v.img, + idUserRole: v.idUserRole })) const dataFix = { diff --git a/src/app/api/user/profile/route.ts b/src/app/api/user/profile/route.ts index 96d8d85..4676f6e 100644 --- a/src/app/api/user/profile/route.ts +++ b/src/app/api/user/profile/route.ts @@ -66,7 +66,7 @@ export async function PUT(request: Request) { const file = body.get("file") as File; const data = body.get("data"); - const { name, email, phone, nik, gender } = JSON.parse(data as string) + const { name, email, phone, nik, gender, idPosition } = JSON.parse(data as string) const cekNIK = await prisma.user.count({ where: { @@ -108,7 +108,8 @@ export async function PUT(request: Request) { email: email, phone: "62" + phone, nik: nik, - gender: gender + gender: gender, + idPosition: idPosition }, select: { img: true diff --git a/src/app/api/version-app/route.ts b/src/app/api/version-app/route.ts index 68f3c0f..2343ad3 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.8", tahap: "beta" }, { status: 200 }); + return NextResponse.json({ success: true, version: "0.2.9", 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 }); diff --git a/src/module/division_new/ui/create_anggota_division.tsx b/src/module/division_new/ui/create_anggota_division.tsx index 6275e5f..91ba45b 100644 --- a/src/module/division_new/ui/create_anggota_division.tsx +++ b/src/module/division_new/ui/create_anggota_division.tsx @@ -51,8 +51,9 @@ export default function CreateAnggotaDivision() { const user = await funGetUserByCookies(); if (res.success) { - const dariUserLogin = res.data.filter((i: any) => i.id != user.id) - const fixListUser = dariUserLogin.filter((i: any) => i.idUserRole == 'coadmin' || i.idUserRole == 'user') + // const dariUserLogin = res.data.filter((i: any) => i.id != user.id) + // const fixListUser = dariUserLogin.filter((i: any) => i.idUserRole == 'coadmin' || i.idUserRole == 'user') + const fixListUser = res.data.filter((i: any) => i.idUserRole != 'supadmin') setDataMember(fixListUser) } else { toast.error(res.message) diff --git a/src/module/division_new/ui/navbar_create_users.tsx b/src/module/division_new/ui/navbar_create_users.tsx index d5fa916..83e61de 100644 --- a/src/module/division_new/ui/navbar_create_users.tsx +++ b/src/module/division_new/ui/navbar_create_users.tsx @@ -1,22 +1,19 @@ "use client" -import { LayoutNavbarNew, SkeletonList, SkeletonSingle, TEMA } from '@/module/_global'; -import { useHookstate } from '@hookstate/core'; -import { ActionIcon, Avatar, Box, Button, Center, Divider, Flex, Grid, Indicator, Input, rem, SimpleGrid, Skeleton, Stack, Text, TextInput } from '@mantine/core'; -import { useMediaQuery, useShallowEffect } from '@mantine/hooks'; -import { useRouter } from 'next/navigation'; -import React, { useState } from 'react'; -import { HiChevronLeft, HiMagnifyingGlass } from 'react-icons/hi2'; +import { LayoutNavbarNew, SkeletonList, TEMA } from '@/module/_global'; import { funGetAllmember, TypeUser } from '@/module/user'; -import { funGetUserByCookies } from '@/module/auth'; -import toast from 'react-hot-toast'; -import { globalMemberDivision } from '../lib/val_division'; -import { IoArrowBackOutline, IoClose } from 'react-icons/io5'; +import { useHookstate } from '@hookstate/core'; import { Carousel } from '@mantine/carousel'; +import { ActionIcon, Avatar, Box, Button, Center, Divider, Flex, Grid, Indicator, rem, Stack, Text, TextInput } from '@mantine/core'; +import { useMediaQuery, useShallowEffect } from '@mantine/hooks'; +import { useState } from 'react'; +import toast from 'react-hot-toast'; import { FaCheck } from 'react-icons/fa6'; +import { HiChevronLeft, HiMagnifyingGlass } from 'react-icons/hi2'; +import { IoArrowBackOutline, IoClose } from 'react-icons/io5'; +import { globalMemberDivision } from '../lib/val_division'; export default function NavbarCreateUsers({ grup, onClose }: { grup?: string, onClose: (val: any) => void }) { - const router = useRouter() const member = useHookstate(globalMemberDivision) const [selectedFiles, setSelectedFiles] = useState([]); const [dataMember, setDataMember] = useState([]) @@ -37,10 +34,11 @@ export default function NavbarCreateUsers({ grup, onClose }: { grup?: string, on async function loadData(search: string) { setLoading(true) const res = await funGetAllmember('?active=true&group=' + grup + '&search=' + search); - const user = await funGetUserByCookies(); + // const user = await funGetUserByCookies(); if (res.success) { - setDataMember(res.data.filter((i: any) => i.id != user.id)) + // setDataMember(res.data.filter((i: any) => i.id != user.id)) + setDataMember(res.data.filter((i: any) => i.idUserRole != "supadmin")) // cek data member sebelumnya if (member.length > 0) { @@ -212,7 +210,7 @@ export default function NavbarCreateUsers({ grup, onClose }: { grup?: string, on > - {v.name} + {v.name} {isSelected ? : null} diff --git a/src/module/home/ui/view_search.tsx b/src/module/home/ui/view_search.tsx index bd9bb47..a29af78 100644 --- a/src/module/home/ui/view_search.tsx +++ b/src/module/home/ui/view_search.tsx @@ -139,7 +139,7 @@ export default function ViewSearch() { c={tema.get().utama} truncate="end" > - {_.startCase(v.name)} + {_.upperFirst(v.name)} {v.group + " - " + v.position} diff --git a/src/module/project/ui/add_member_detail_project.tsx b/src/module/project/ui/add_member_detail_project.tsx index 927f94e..0f50504 100644 --- a/src/module/project/ui/add_member_detail_project.tsx +++ b/src/module/project/ui/add_member_detail_project.tsx @@ -40,7 +40,8 @@ export default function AddMemberDetailProject() { setLoading(true) const response = await funGetAllMemberById('?search=' + searchQuery, param.id) if (response.success) { - setData(response.data.member) + // setData(response.data.member) + setData(response.data.member.filter((i: any) => i.idUserRole != 'supadmin')) } else { toast.error(response.message) } @@ -243,7 +244,7 @@ export default function AddMemberDetailProject() { Tidak ada anggota : - + {isData.map((v, i) => { const isSelected = selectedFiles.some((i: any) => i?.idUser == v.idUser); const found = isDataMember.some((i: any) => i.idUser == v.idUser) diff --git a/src/module/project/ui/create_users_project.tsx b/src/module/project/ui/create_users_project.tsx index ee93619..ced2c48 100644 --- a/src/module/project/ui/create_users_project.tsx +++ b/src/module/project/ui/create_users_project.tsx @@ -1,6 +1,5 @@ "use client" import { LayoutNavbarNew, SkeletonList, TEMA } from '@/module/_global'; -import { funGetUserByCookies } from '@/module/auth'; import { funGetAllmember, TypeUser } from '@/module/user'; import { useHookstate } from '@hookstate/core'; import { Carousel } from '@mantine/carousel'; @@ -36,9 +35,10 @@ export default function CreateUsersProject({ grup, onClose }: { grup?: string, o try { setLoading(true) const res = await funGetAllmember('?active=true&group=' + grup + '&search=' + search); - const user = await funGetUserByCookies(); + // const user = await funGetUserByCookies(); if (res.success) { - setDataMember(res.data.filter((i: any) => i.id != user.id && i.idUserRole != 'supadmin' && i.idUserRole != 'cosupadmin')) + // setDataMember(res.data.filter((i: any) => i.id != user.id && i.idUserRole != 'supadmin' && i.idUserRole != 'cosupadmin')) + setDataMember(res.data.filter((i: any) => i.idUserRole != 'supadmin')) // cek data member sebelumnya if (member.length > 0) { setSelectedFiles(JSON.parse(JSON.stringify(member.get()))) diff --git a/src/module/project/ui/menu_drawer_project.tsx b/src/module/project/ui/menu_drawer_project.tsx index f91436e..4408b27 100644 --- a/src/module/project/ui/menu_drawer_project.tsx +++ b/src/module/project/ui/menu_drawer_project.tsx @@ -15,17 +15,19 @@ export default function MenuDrawerProject() { return ( - - window.location.href = "/project/create"} justify={'center'} align={'center'} direction={'column'} > - - - - - Tambah Kegiatan - - + + { + (roleLogin.get() != "user" && roleLogin.get() != "coadmin") && + window.location.href = "/project/create"} justify={'center'} align={'center'} direction={'column'} > + + + + + Tambah Kegiatan + + + } + { roleLogin.get() == "supadmin" && window.location.href = "/project?page=filter&group=" + group} justify={'center'} align={'center'} direction={'column'} > diff --git a/src/module/user/member/ui/create_member.tsx b/src/module/user/member/ui/create_member.tsx index 022cd00..c306312 100644 --- a/src/module/user/member/ui/create_member.tsx +++ b/src/module/user/member/ui/create_member.tsx @@ -167,7 +167,7 @@ export default function CreateMember() { nilai = false } - if (listData.phone == "" || !(listData.phone.length >= 10 && listData.phone.length <= 15)) { + if (listData.phone == "" || !(listData.phone.length >= 9 && listData.phone.length <= 15)) { setTouched(touched => ({ ...touched, phone: true })) nilai = false } diff --git a/src/module/user/member/ui/edit_member.tsx b/src/module/user/member/ui/edit_member.tsx index 4690ada..f9acc2e 100644 --- a/src/module/user/member/ui/edit_member.tsx +++ b/src/module/user/member/ui/edit_member.tsx @@ -30,6 +30,7 @@ export default function EditMember({ id }: { id: string }) { const [loading, setLoading] = useState(true) const roleLogin = useHookstate(globalRole) const tema = useHookstate(TEMA) + const [loadingPosition, setLoadingPosition] = useState(true) const [touched, setTouched] = useState({ nik: false, name: false, @@ -83,6 +84,7 @@ export default function EditMember({ id }: { id: string }) { async function getAllPosition(val: any) { try { + setLoadingPosition(true) const res = await funGetAllPosition( "?active=true" + "&group=" + `${val}` ); @@ -90,6 +92,8 @@ export default function EditMember({ id }: { id: string }) { } catch (error) { console.error(error) + } finally { + setLoadingPosition(false) } } @@ -155,7 +159,7 @@ export default function EditMember({ id }: { id: string }) { } } else if (kategori == 'phone') { setData({ ...data, phone: val }) - if (val == "" || !(val.length >= 10 && val.length <= 15)) { + if (val == "" || !(val.length >= 9 && val.length <= 15)) { setTouched({ ...touched, phone: true }) } else { setTouched({ ...touched, phone: false }) @@ -233,19 +237,14 @@ export default function EditMember({ id }: { id: string }) { } {loading ? - <> - - - - - - - - + [...Array(6)].map((_, index) => ( + + )) : <> ({ + value: data.id, + label: data.name, + })) + : [] + } + onChange={(val: any) => { onValidation('idPosition', val) }} + value={(data?.idPosition == "") ? null : data.idPosition} + error={ + touched.idPosition && ( + data.idPosition == "" || String(data.idPosition) == "null" ? "Jabatan Tidak Boleh Kosong" : null ) - ? "Email tidak valid" - : null) - } - /> - +62} - onChange={(e) => { onValidation('phone', e.target.value); }} - value={data.phone} - error={ - touched.phone && - (data.phone == "" ? "Nomor Telepon Tidak Boleh Kosong" - : !(data.phone.length >= 10 && data.phone.length <= 15) ? "Nomor Telepon Tidak Valid" : null) - } - /> - { onValidation('gender', val) }} + value={data.gender} + error={ + touched.gender && + (data.gender == "" || data.gender == null ? "Jenis Kelamin Tidak Boleh Kosong" : null) + } + /> + + )}