From 326d4708397029ddb57a48221b01b76b4bd17586 Mon Sep 17 00:00:00 2001 From: amel Date: Thu, 26 Dec 2024 11:36:16 +0800 Subject: [PATCH 1/8] upd: divisi Deskripsi: - membuat list divisi berdasarkan kategori semua data dan data saya NoIssues --- src/app/api/division/route.ts | 30 +++--- src/module/division_new/ui/list_division.tsx | 5 +- .../division_new/ui/tab_list_division.tsx | 91 +++++++++++++------ 3 files changed, 83 insertions(+), 43 deletions(-) diff --git a/src/app/api/division/route.ts b/src/app/api/division/route.ts index 855b32e..9e4e5d6 100644 --- a/src/app/api/division/route.ts +++ b/src/app/api/division/route.ts @@ -18,6 +18,7 @@ export async function GET(request: Request) { const roleUser = user.idUserRole const { searchParams } = new URL(request.url); const idGroup = searchParams.get("group"); + const kategori = searchParams.get("cat"); const name = searchParams.get('search'); const page = searchParams.get('page'); const active = searchParams.get("active"); @@ -30,6 +31,7 @@ export async function GET(request: Request) { } + // JIKA (ROLE BUKAN USER DAN COADMIN) ATAU SEMUA ROLE DG KATEGORI == SEMUA let kondisi: any = { isActive: active == 'false' ? false : true, idVillage: String(villaId), @@ -40,19 +42,23 @@ export async function GET(request: Request) { } } + + // JIKA ROLE = USER ATAU COADMIN DAN KATEGORI = MINE (DIVISI SAYA) if (roleUser != "supadmin" && roleUser != "cosupadmin" && roleUser != "admin") { - kondisi = { - isActive: active == 'false' ? false : true, - idVillage: String(villaId), - idGroup: grup, - name: { - contains: (name == undefined || name == "null") ? "" : name, - mode: "insensitive" - }, - DivisionMember: { - some: { - isActive: true, - idUser: String(user.id) + if (kategori != "semua") { + kondisi = { + isActive: active == 'false' ? false : true, + idVillage: String(villaId), + idGroup: grup, + name: { + contains: (name == undefined || name == "null") ? "" : name, + mode: "insensitive" + }, + DivisionMember: { + some: { + isActive: true, + idUser: String(user.id) + } } } } diff --git a/src/module/division_new/ui/list_division.tsx b/src/module/division_new/ui/list_division.tsx index ca7882b..67001df 100644 --- a/src/module/division_new/ui/list_division.tsx +++ b/src/module/division_new/ui/list_division.tsx @@ -30,6 +30,7 @@ export default function ListDivision() { const [isRefresh, setRefresh] = useState(false) const notifLoadPage = useHookstate(globalNotifPage) const status = searchParams.get('active') + const kategori = searchParams.get('cat') const handleList = () => { @@ -43,7 +44,7 @@ export default function ListDivision() { if (isPage == 1) { setData([]) } - const response = await funGetAllDivision('?active=' + status + '&search=' + searchQuery + '&group=' + group + '&page=' + isPage) + const response = await funGetAllDivision('?active=' + status + '&search=' + searchQuery + '&group=' + group + '&page=' + isPage + '&cat=' + kategori); if (response.success) { setJumlah(response.total) setNameGroup(response.filter.name) @@ -72,7 +73,7 @@ export default function ListDivision() { useShallowEffect(() => { setPage(1) fetchData(true) - }, [status, searchQuery]) + }, [status, searchQuery, kategori]) diff --git a/src/module/division_new/ui/tab_list_division.tsx b/src/module/division_new/ui/tab_list_division.tsx index 0f7ce8d..656a7a7 100644 --- a/src/module/division_new/ui/tab_list_division.tsx +++ b/src/module/division_new/ui/tab_list_division.tsx @@ -4,7 +4,7 @@ import { useHookstate } from "@hookstate/core"; import { Box, rem, Tabs } from "@mantine/core"; import { useRouter, useSearchParams } from "next/navigation"; import { IoMdCheckmarkCircleOutline } from "react-icons/io"; -import { IoCloseCircleOutline } from "react-icons/io5"; +import { IoCloseCircleOutline, IoFileTrayOutline, IoFileTrayStackedOutline } from "react-icons/io5"; import ListDivision from "./list_division"; export default function TabListDivision() { @@ -13,6 +13,7 @@ export default function TabListDivision() { const searchParams = useSearchParams(); const status = searchParams.get("active"); const group = searchParams.get("group"); + const kategori = searchParams.get("cat"); const tema = useHookstate(TEMA) const roleLogin = useHookstate(globalRole) @@ -22,40 +23,72 @@ export default function TabListDivision() { variant="pills" color={tema.get().bgFiturHome} radius="xl" - defaultValue={status == "false" ? "false" : "true"} + defaultValue={status == "false" || kategori == "semua" ? "false" : "true"} > { - roleLogin.get() != '' ? - (roleLogin.get() != "user" && roleLogin.get() != "coadmin") && - - } - onClick={() => { - router.push("/division?active=true&group=" + group); + roleLogin.get() != '' + ? + (roleLogin.get() != "user" && roleLogin.get() != "coadmin") + ? + - Aktif - - } - onClick={() => { - router.push("/division?active=false&group=" + group); + } + onClick={() => { + router.push("/division?active=true&group=" + group); + }} + > + Aktif + + } + onClick={() => { + router.push("/division?active=false&group=" + group); + }} + > + Tidak Aktif + + + : + - Tidak Aktif - - + } + onClick={() => { + router.push("/division"); + }} + > + Divisi Saya + + } + onClick={() => { + router.push("/division?cat=semua"); + }} + > + Semua Divisi + + : <> } From c20667bbffd8d2aa1bdb9055e87bec3648bbc885 Mon Sep 17 00:00:00 2001 From: amel Date: Thu, 26 Dec 2024 13:55:15 +0800 Subject: [PATCH 2/8] upd: list kegiatan Deskripsi: - update api berdasarkan kategori data - update tampilan untuk role user dan coadmin di kasih filter berdasarkan data - tulisan filter by menjadi filter No Issues --- src/app/(application)/project/page.tsx | 6 +- src/app/api/division/route.ts | 2 +- src/app/api/project/route.ts | 31 ++++--- src/module/_global/index.ts | 2 + .../view/view_filter_kategori_data.tsx | 84 +++++++++++++++++++ src/module/division_new/ui/list_division.tsx | 2 +- .../position/ui/list_position_active.tsx | 2 +- src/module/project/ui/list_project.tsx | 8 +- src/module/project/ui/menu_drawer_project.tsx | 16 +++- src/module/project/ui/tab_project.tsx | 20 ++--- src/module/user/member/ui/tab_list_member.tsx | 2 +- 11 files changed, 142 insertions(+), 33 deletions(-) create mode 100644 src/module/_global/view/view_filter_kategori_data.tsx diff --git a/src/app/(application)/project/page.tsx b/src/app/(application)/project/page.tsx index f4bccb4..7eabf7c 100644 --- a/src/app/(application)/project/page.tsx +++ b/src/app/(application)/project/page.tsx @@ -1,10 +1,14 @@ -import { ViewFilter } from '@/module/_global'; +import { ViewFilter, ViewFilterData } from '@/module/_global'; import { TabProject } from '@/module/project'; import React from 'react'; function Page({ searchParams }: { searchParams: { page: string } }) { if (searchParams.page == 'filter') return + + if (searchParams.page == 'filter-data') + return + return ( ); diff --git a/src/app/api/division/route.ts b/src/app/api/division/route.ts index 9e4e5d6..5bee3c3 100644 --- a/src/app/api/division/route.ts +++ b/src/app/api/division/route.ts @@ -43,7 +43,7 @@ export async function GET(request: Request) { } - // JIKA ROLE = USER ATAU COADMIN DAN KATEGORI = MINE (DIVISI SAYA) + // JIKA ROLE = USER ATAU COADMIN DAN KATEGORI != SEMUA (DIVISI SAYA) if (roleUser != "supadmin" && roleUser != "cosupadmin" && roleUser != "admin") { if (kategori != "semua") { kondisi = { diff --git a/src/app/api/project/route.ts b/src/app/api/project/route.ts index a0632ed..1c7a7dd 100644 --- a/src/app/api/project/route.ts +++ b/src/app/api/project/route.ts @@ -20,6 +20,7 @@ export async function GET(request: Request) { const status = searchParams.get('status'); const idGroup = searchParams.get("group"); const page = searchParams.get('page'); + const kategori = searchParams.get('cat'); const dataSkip = Number(page) * 10 - 10; const villageId = user.idVillage const userId = user.id @@ -41,6 +42,8 @@ export async function GET(request: Request) { return NextResponse.json({ success: false, message: "Gagal mendapatkan data kegiatan, data tidak ditemukan", }, { status: 404 }); } + + // JIKA (ROLE BUKAN USER DAN COADMIN) ATAU SEMUA ROLE DG KATEGORI == SEMUA let kondisi: any = { isActive: true, idVillage: String(villageId), @@ -52,19 +55,23 @@ export async function GET(request: Request) { status: (status == "0" || status == "1" || status == "2" || status == "3") ? Number(status) : 0 } + + // JIKA ROLE = USER ATAU COADMIN DAN KATEGORI != SEMUA (KEGIATAN SAYA) if (roleUser != "supadmin" && roleUser != "cosupadmin" && roleUser != "admin") { - kondisi = { - isActive: true, - idVillage: String(villageId), - idGroup: grup, - title: { - contains: (name == undefined || name == "null") ? "" : name, - mode: "insensitive" - }, - status: (status == "0" || status == "1" || status == "2" || status == "3") ? Number(status) : 0, - ProjectMember: { - some: { - idUser: String(userId) + if (kategori != "semua") { + kondisi = { + isActive: true, + idVillage: String(villageId), + idGroup: grup, + title: { + contains: (name == undefined || name == "null") ? "" : name, + mode: "insensitive" + }, + status: (status == "0" || status == "1" || status == "2" || status == "3") ? Number(status) : 0, + ProjectMember: { + some: { + idUser: String(userId) + } } } } diff --git a/src/module/_global/index.ts b/src/module/_global/index.ts index bedf570..a592424 100644 --- a/src/module/_global/index.ts +++ b/src/module/_global/index.ts @@ -27,6 +27,7 @@ import SkeletonUser from "./components/skeleton_user"; import SkeletonList from "./components/skeleton_list"; import { funViewDir } from "./fun/view_dir"; import { funSendWebPush } from "./fun/send_web_push"; +import ViewFilterData from "./view/view_filter_kategori_data"; export { WARNA }; export { LayoutLogin }; @@ -63,3 +64,4 @@ export { SkeletonList } export { keyWibu } export { funViewDir } export { funSendWebPush } +export { ViewFilterData } diff --git a/src/module/_global/view/view_filter_kategori_data.tsx b/src/module/_global/view/view_filter_kategori_data.tsx new file mode 100644 index 0000000..57923b6 --- /dev/null +++ b/src/module/_global/view/view_filter_kategori_data.tsx @@ -0,0 +1,84 @@ +'use client' +import { useHookstate } from "@hookstate/core"; +import { Box, Button, Divider, Group, rem, Text } from "@mantine/core"; +import { useShallowEffect } from "@mantine/hooks"; +import { useRouter, useSearchParams } from "next/navigation"; +import { useState } from "react"; +import { FaCheck } from "react-icons/fa6"; +import { TEMA } from "../bin/val_global"; +import LayoutNavbarNew from "../layout/layout_navbar_new"; + +export default function ViewFilterData({ linkFilter }: { linkFilter: string }) { + const [selectedFilter, setSelectedFilter] = useState(''); + const data = [ + { + id: 1, + data: "data-saya", + name: "Kegiatan Saya", + }, + { + id: 2, + data: "semua", + name: "Semua Kegiatan", + }, + ] + const searchParams = useSearchParams() + const kategori = searchParams.get('cat') + const tema = useHookstate(TEMA) + + + + useShallowEffect(() => { + if (kategori == "null" || kategori == "undefined" || kategori == '') { + setSelectedFilter("data-saya") + } else { + setSelectedFilter(kategori) + } + }, [kategori]); + + const router = useRouter() + + return ( + + + + { + data.map((filter) => ( + + setSelectedFilter(filter.data)} + > + + {filter.name} + + {selectedFilter === filter.data && } + + + + )) + + } + + + + + + ); +} \ No newline at end of file diff --git a/src/module/division_new/ui/list_division.tsx b/src/module/division_new/ui/list_division.tsx index 67001df..2aa4113 100644 --- a/src/module/division_new/ui/list_division.tsx +++ b/src/module/division_new/ui/list_division.tsx @@ -157,7 +157,7 @@ export default function ListDivision() { - {roleLogin.get() == 'supadmin' && Filter by: {nameGroup}} + {roleLogin.get() == 'supadmin' && Filter : {nameGroup}} Total Divisi diff --git a/src/module/position/ui/list_position_active.tsx b/src/module/position/ui/list_position_active.tsx index cfd2929..7a2523f 100644 --- a/src/module/position/ui/list_position_active.tsx +++ b/src/module/position/ui/list_position_active.tsx @@ -78,7 +78,7 @@ export default function ListPositionActive() { placeholder="Pencarian" onChange={(e) => setSearchQuery(e.target.value)} /> - {roleLogin.get() == 'supadmin' && Filter by: {nameGroup}} + {roleLogin.get() == 'supadmin' && Filter : {nameGroup}} {loading ? Array(6).fill(null).map((_, i) => ( Filter by: {nameGroup}} + {roleLogin.get() == 'supadmin' && Filter : {nameGroup}} + {(roleLogin.get() == 'user' || roleLogin.get() == 'coadmin') && Filter : {(kategori == null || kategori == undefined || kategori == '') ? 'Kegiatan Saya' : 'Semua Kegiatan'}} Total Kegiatan diff --git a/src/module/project/ui/menu_drawer_project.tsx b/src/module/project/ui/menu_drawer_project.tsx index 11c3aaf..f91436e 100644 --- a/src/module/project/ui/menu_drawer_project.tsx +++ b/src/module/project/ui/menu_drawer_project.tsx @@ -1,8 +1,7 @@ -import { globalRole, TEMA, WARNA } from '@/module/_global'; +import { globalRole, TEMA } from '@/module/_global'; import { useHookstate } from '@hookstate/core'; import { Box, Flex, SimpleGrid, Stack, Text } from '@mantine/core'; import { useSearchParams } from 'next/navigation'; -import React, { useState } from 'react'; import { HiOutlineFilter } from 'react-icons/hi'; import { IoAddCircle } from 'react-icons/io5'; @@ -10,6 +9,7 @@ export default function MenuDrawerProject() { const roleLogin = useHookstate(globalRole) const searchParams = useSearchParams() const group = searchParams.get('group') + const kategori = searchParams.get('cat') const tema = useHookstate(TEMA) return ( @@ -37,6 +37,18 @@ export default function MenuDrawerProject() { } + + { + (roleLogin.get() == "user" || roleLogin.get() == "coadmin") && + window.location.href = "/project?page=filter-data&cat=" + kategori} justify={'center'} align={'center'} direction={'column'} > + + + + + Filter + + + } diff --git a/src/module/project/ui/tab_project.tsx b/src/module/project/ui/tab_project.tsx index 503109a..a5b0114 100644 --- a/src/module/project/ui/tab_project.tsx +++ b/src/module/project/ui/tab_project.tsx @@ -1,16 +1,16 @@ "use client" -import { globalRole, LayoutDrawer, LayoutNavbarNew, TEMA } from '@/module/_global'; +import { LayoutDrawer, LayoutNavbarNew, TEMA } from '@/module/_global'; +import { useHookstate } from '@hookstate/core'; import { ActionIcon, Box, Button, Flex, rem } from '@mantine/core'; -import React, { useState } from 'react'; -import { HiMenu } from 'react-icons/hi'; -import { RiProgress3Line } from "react-icons/ri"; import { useRouter, useSearchParams } from 'next/navigation'; -import { TbClockPause } from 'react-icons/tb'; +import { useState } from 'react'; +import { HiMenu } from 'react-icons/hi'; import { IoIosCheckmarkCircleOutline } from 'react-icons/io'; import { IoCloseCircleOutline } from 'react-icons/io5'; +import { RiProgress3Line } from "react-icons/ri"; +import { TbClockPause } from 'react-icons/tb'; import ListProject from './list_project'; import MenuDrawerProject from './menu_drawer_project'; -import { useHookstate } from '@hookstate/core'; export default function TabProject() { const [openDrawer, setOpenDrawer] = useState(false) @@ -18,8 +18,8 @@ export default function TabProject() { const searchParams = useSearchParams() const status = searchParams.get('status') const group = searchParams.get("group"); + const kategori = searchParams.get("cat"); const iconStyle = { width: rem(20), height: rem(20) }; - const roleLogin = useHookstate(globalRole) const tema = useHookstate(TEMA) const dataStatus = [ @@ -48,11 +48,10 @@ export default function TabProject() { return ( setOpenDrawer(true)} bg={tema.get().bgIcon} size="lg" radius="lg" aria-label="Settings"> - : <> } /> @@ -76,7 +75,7 @@ export default function TabProject() { : (status == null && item.id == "0") ? "white" : tema.get().utama } key={index} - onClick={() => { router.push("?status=" + item.id + "&group=" + group) }} + onClick={() => { router.push("?status=" + item.id + "&group=" + group+"&cat="+kategori) }} defaultValue={(status == "1" || status == "2" || status == "3") ? status : "0"} radius={"xl"} bg={ @@ -92,7 +91,6 @@ export default function TabProject() { - setOpenDrawer(false)}> diff --git a/src/module/user/member/ui/tab_list_member.tsx b/src/module/user/member/ui/tab_list_member.tsx index a6b0c47..8d7517b 100644 --- a/src/module/user/member/ui/tab_list_member.tsx +++ b/src/module/user/member/ui/tab_list_member.tsx @@ -128,7 +128,7 @@ export default function TabListMember() { onChange={(e) => setSearchQuery(e.target.value)} my={20} /> - {roleLogin.get() == 'supadmin' && Filter by: {nameGroup}} + {roleLogin.get() == 'supadmin' && Filter : {nameGroup}} {loading ? Array(6) From dd1877544f906c73ad6e3ff344c1cae5210f6561 Mon Sep 17 00:00:00 2001 From: amel Date: Thu, 26 Dec 2024 14:11:43 +0800 Subject: [PATCH 3/8] fix : member Deskripsi: - fix jumlah digit nomor telepon pada halaman tambah dan edit member No Issues --- src/module/user/member/ui/create_member.tsx | 2 +- src/module/user/member/ui/edit_member.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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..c67d99d 100644 --- a/src/module/user/member/ui/edit_member.tsx +++ b/src/module/user/member/ui/edit_member.tsx @@ -155,7 +155,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 }) From 87c90c94c447294c9fe4d26f3a615b831937850b Mon Sep 17 00:00:00 2001 From: amel Date: Thu, 26 Dec 2024 14:35:21 +0800 Subject: [PATCH 4/8] upd: nama user Deskripsi: - fix nama user dari start case = ga keliatan tanda baca menjadi upper first No Issues --- src/module/home/ui/view_search.tsx | 2 +- src/module/user/member/ui/tab_list_member.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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/user/member/ui/tab_list_member.tsx b/src/module/user/member/ui/tab_list_member.tsx index 8d7517b..2f3cf1c 100644 --- a/src/module/user/member/ui/tab_list_member.tsx +++ b/src/module/user/member/ui/tab_list_member.tsx @@ -174,7 +174,7 @@ export default function TabListMember() { xl: 11, }} > - {_.startCase(v.name)} + {_.upperFirst(v.name)} {v.group + ' - ' + v.position} From 96084b22c040b828c1556c81c05194a3faa6d10b Mon Sep 17 00:00:00 2001 From: amel Date: Thu, 26 Dec 2024 15:15:45 +0800 Subject: [PATCH 5/8] upd: user Deskripsi: - tambah input select jabatan pada edit profile - tambah loading pada input select jabatan halaman edit profile - tambah loading pada input select jabatan halaman edit member No Issues --- src/app/api/user/profile/route.ts | 5 +- src/module/user/member/ui/edit_member.tsx | 19 +- src/module/user/member/ui/tab_list_member.tsx | 11 +- src/module/user/profile/lib/type_profile.ts | 1 + src/module/user/profile/ui/edit_profile.tsx | 339 ++++++++++-------- 5 files changed, 214 insertions(+), 161 deletions(-) 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/module/user/member/ui/edit_member.tsx b/src/module/user/member/ui/edit_member.tsx index c67d99d..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) } } @@ -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) + } + /> + + )} Date: Thu, 26 Dec 2024 16:55:42 +0800 Subject: [PATCH 6/8] upd: anggota divisi Deskripsi: - tidak bisa memilih supadmin pada pembuatan divisi dan tambah member divisi No Issues --- .../ui/create_anggota_division.tsx | 5 ++-- .../division_new/ui/navbar_create_users.tsx | 28 +++++++++---------- 2 files changed, 16 insertions(+), 17 deletions(-) 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} From 166b4b18dba43dcc5cc85c4b29f472362b2b9a57 Mon Sep 17 00:00:00 2001 From: amel Date: Thu, 26 Dec 2024 17:40:00 +0800 Subject: [PATCH 7/8] fix: project Deskripsi: - menampilkan semua anggota kecuali supadmin pada tambah kegiatan dan tambah anggota di kegiatan NO Issues --- src/app/api/project/[id]/member/route.ts | 18 +++++++------- .../project/ui/add_member_detail_project.tsx | 5 ++-- .../project/ui/create_users_project.tsx | 6 ++--- src/module/project/ui/menu_drawer_project.tsx | 24 ++++++++++--------- 4 files changed, 29 insertions(+), 24 deletions(-) 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/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'} > From 27e79ada04edb43d0c0066b49b75e0c9abf4a921 Mon Sep 17 00:00:00 2001 From: amel Date: Thu, 26 Dec 2024 17:40:37 +0800 Subject: [PATCH 8/8] upd: update api version --- src/app/api/version-app/route.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 });