Merge pull request #109 from bipproduction/amalia/13-agustus-24

Amalia/13 agustus 24
This commit is contained in:
Amalia
2024-08-13 13:36:45 +08:00
committed by GitHub
82 changed files with 253 additions and 780 deletions

View File

@@ -1,8 +1,12 @@
import { ViewCreateDiscussion } from "@/module/division_new"; import { LayoutNavbarNew } from "@/module/_global";
import { FormCreateDiscussion } from "@/module/discussion";
function Page() { function Page() {
return ( return (
<ViewCreateDiscussion /> <>
<LayoutNavbarNew back="" title="Tambah Diskusi" menu={<></>} />
<FormCreateDiscussion />
</>
) )
} }

View File

@@ -1,9 +1,12 @@
import { ViewListDiscussion } from '@/module/division_new'; import { ListDiscussion, NavbarListDiscussion } from '@/module/discussion';
import React from 'react'; import React from 'react';
function Page() { function Page() {
return ( return (
<ViewListDiscussion /> <div>
<NavbarListDiscussion />
<ListDiscussion />
</div>
); );
} }

View File

@@ -1,12 +1,12 @@
import { ViewFilter } from '@/module/_global'; import { ViewFilter } from '@/module/_global';
import { ListDivision, ViewCreateReport } from '@/module/division_new'; import { CreateReport, ListDivision } from '@/module/division_new';
import React from 'react'; import React from 'react';
function Page({ searchParams }: { searchParams: { page: string } }) { function Page({ searchParams }: { searchParams: { page: string } }) {
if (searchParams.page == "filter") if (searchParams.page == "filter")
return <ViewFilter linkFilter='division'/> return <ViewFilter linkFilter='division'/>
if (searchParams.page == "report") if (searchParams.page == "report")
return <ViewCreateReport /> return <CreateReport />
return ( return (
<ListDivision/> <ListDivision/>
); );

View File

@@ -1,8 +1,8 @@
import { ViewReportDivision } from "@/module/division_new" import { ReportDivisionId } from "@/module/division_new"
function Page() { function Page() {
return ( return (
<ViewReportDivision/> <ReportDivisionId />
) )
} }

View File

@@ -1,6 +0,0 @@
import { apiDiscussion } from "@/module/division_new";
import { NextRequest } from "next/server";
export async function GET(req: NextRequest) {
return apiDiscussion(req, "GET")
}

View File

@@ -1,6 +0,0 @@
import { apiDiscussion } from "@/module/division_new";
import { NextRequest } from "next/server";
export async function POST(req: NextRequest) {
return apiDiscussion(req, "POST")
}

View File

@@ -0,0 +1,119 @@
import { prisma } from "@/module/_global";
import { funGetUserByCookies } from "@/module/auth";
import _ from "lodash";
import { NextResponse } from "next/server";
// GET ALL DISCUSSION DIVISION ACTIVE = TRUE
export async function GET(request: Request) {
try {
const user = await funGetUserByCookies()
if (user.id == undefined) {
return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 });
}
const { searchParams } = new URL(request.url);
const idDivision = searchParams.get("division");
const title = searchParams.get('search');
if (idDivision != "null" && idDivision != null && idDivision != undefined) {
const cekDivision = await prisma.division.count({
where: {
id: idDivision,
isActive: true
}
})
if (cekDivision == 0) {
return NextResponse.json({ success: false, message: "Gagal mendapatkan divisi, data tidak ditemukan" }, { status: 404 });
}
const data = await prisma.divisionDisscussion.findMany({
where: {
isActive: true,
idDivision: idDivision,
title: {
contains: (title == undefined || title == "null") ? "" : title,
mode: "insensitive"
}
},
orderBy: {
createdAt: 'desc'
},
select: {
id: true,
title: true,
desc: true,
status: true,
createdAt: true,
User: {
select: {
name: true
}
},
DivisionDisscussionComment: {
select: {
id: true,
}
}
}
});
const fixData = data.map((v: any) => ({
..._.omit(v, ["User", "DivisionDisscussionComment"]),
user_name: v.User.name,
total_komentar: v.DivisionDisscussionComment.length
}))
return NextResponse.json({ success: true, message: "Berhasil mendapatkan diskusi", data: fixData, }, { status: 200 });
} else {
return NextResponse.json({ success: false, message: "Gagal mendapatkan divisi, data tidak ditemukan" }, { status: 404 });
}
} catch (error) {
console.log(error);
return NextResponse.json({ success: false, message: "Gagal mendapatkan diskusi, coba lagi nanti", reason: (error as Error).message, }, { status: 500 });
}
}
// CREATE DISCUSSION
export async function POST(request: Request) {
try {
const user = await funGetUserByCookies()
if (user.id == undefined) {
return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 });
}
const { idDivision, desc } = (await request.json());
const cekDivision = await prisma.division.count({
where: {
id: idDivision,
isActive: true
}
})
if (cekDivision == 0) {
return NextResponse.json({ success: false, message: "Gagal mendapatkan divisi, data tidak ditemukan" }, { status: 404 });
}
const data = await prisma.divisionDisscussion.create({
data: {
idDivision,
desc,
createdBy: user.id
},
});
return NextResponse.json({ success: true, message: "Berhasil menambahkan diskusi", data, }, { status: 200 });
} catch (error) {
console.log(error);
return NextResponse.json({ success: false, message: "Gagal menambahkan diskusi, coba lagi nanti", reason: (error as Error).message, }, { status: 500 });
}
};

View File

@@ -1,7 +0,0 @@
import { apiDivision } from "@/module/division_new";
import { NextRequest } from "next/server";
export const dynamic = 'force-dynamic'
export async function GET(req: NextRequest) {
return apiDivision(req, "GET")
}

View File

@@ -1,6 +0,0 @@
import { apiDivision } from "@/module/division_new";
import { NextRequest } from "next/server";
export async function POST(req: NextRequest) {
return apiDivision(req, "POST")
}

View File

@@ -19,7 +19,7 @@ export async function GET(request: Request) {
const idGroup = searchParams.get("group"); const idGroup = searchParams.get("group");
const name = searchParams.get('search'); const name = searchParams.get('search');
if (idGroup == null || idGroup == undefined) { if (idGroup == "null" || idGroup == undefined) {
grup = user.idGroup grup = user.idGroup
} else { } else {
grup = idGroup grup = idGroup
@@ -31,7 +31,7 @@ export async function GET(request: Request) {
idVillage: String(villaId), idVillage: String(villaId),
idGroup: grup, idGroup: grup,
name: { name: {
contains: (name == undefined || name == null) ? "" : name, contains: (name == undefined || name == "null") ? "" : name,
mode: "insensitive" mode: "insensitive"
} }
}, },

View File

@@ -9,13 +9,16 @@ export async function GET(request: Request) {
return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 });
} }
const res = await prisma.userRole.findMany({ const res = await prisma.userRole.findMany({
where: {
isActive: true
},
select: { select: {
id: true, id: true,
name: true, name: true,
}, },
}); });
return NextResponse.json({ success: true, message: "Berhasil role user", data: res, }, { status: 200 }); return NextResponse.json({ success: true, message: "Berhasil mendapatkan role user", data: res, }, { status: 200 });
} catch (error) { } catch (error) {
console.error(error); console.error(error);
return NextResponse.json({ success: false, message: "Gagal mendapatkan role user, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); return NextResponse.json({ success: false, message: "Gagal mendapatkan role user, coba lagi nanti", reason: (error as Error).message, }, { status: 500 });

View File

@@ -1,45 +0,0 @@
export const API_ADDRESS = {
// Group
"apiGetAllGroup": "/api/group/get?path=get-all-group",
"apiGetOneGroup": "/api/group/get?path=get-one-group",
"apiCreateGroup": "/api/group/post?path=create-group",
"apiUpdateGroup": "/api/group/post?path=update-group",
"apiDeleteGroup": "/api/group/post?path=delete-group",
// User
"apiGetAllUser": "/api/user/get?path=get-all-users",
"apiGetOneUser": "/api/user/get?path=get-one-users",
"apiCreateUser": "/api/user/post?path=create-users",
"apiUpdateUser": "/api/user/post?path=update-users",
"apiDeleteUser": "/api/user/post?path=delete-users",
"apiGetRoleUser": "/api/user/get?path=get-role-user",
// Announcement
"apiGetAllAnnouncement": "/api/announcement/get?path=get-all-announcement",
"apiGetOneAnnouncement": "/api/announcement/get?path=get-one-announcement",
"apiGetUserAnnouncement": "/api/announcement/get?path=get-user-announcement",
"apiCreateAnnouncement": "/api/announcement/post?path=create-announcement",
"apiUpdateAnnouncement": "/api/announcement/post?path=update-announcement",
"apiDeleteAnnouncement": "/api/announcement/post?path=delete-announcement",
// Village
"apiGetAllVillage": "/api/village/get?path=get-all-village",
"apiGetOneVillage": "/api/village/get?path=get-one-village",
"apiCreateVillage": "/api/village/post?path=create-village",
"apiUpdateVillage": "/api/village/post?path=update-village",
"apiDeleteVillage": "/api/village/post?path=delete-village",
// Position
"apiGetAllPosition": "/api/position/get?path=get-all-position",
"apiGetOnePosition": "/api/position/get?path=get-one-position",
"apiCreatePosition": "/api/position/post?path=create-position",
"apiUpdatePosition": "/api/position/post?path=update-position",
"apiDeletePosition": "/api/position/post?path=delete-position",
// Division
"apiGetAllDivision": "/api/division/get?path=get-all-division",
"apiGetOneDivision": "/api/division/get?path=get-one-division",
"apiGetOneDetailDivision": "/api/division/get?path=get-one-detail-division",
"apiCreateDivision": "/api/division/post?path=create-division",
}

View File

@@ -1,4 +1,3 @@
import { API_ADDRESS } from "./bin/api_address";
import prisma from "./bin/prisma"; import prisma from "./bin/prisma";
import { pwd_key_config } from "./bin/val_global"; import { pwd_key_config } from "./bin/val_global";
import SkeletonSingle from "./components/skeleton_single"; import SkeletonSingle from "./components/skeleton_single";
@@ -21,5 +20,4 @@ export { LayoutNavbarNew };
export { ViewFilter }; export { ViewFilter };
export { prisma }; export { prisma };
export { pwd_key_config }; export { pwd_key_config };
export { API_ADDRESS };
export {SkeletonSingle} export {SkeletonSingle}

View File

@@ -1,5 +1,4 @@
"use client" "use client"
import { API_ADDRESS } from "@/module/_global";
import { Box, Flex, Grid, Group, Spoiler, Stack, Text } from "@mantine/core"; import { Box, Flex, Grid, Group, Spoiler, Stack, Text } from "@mantine/core";
import { useShallowEffect } from "@mantine/hooks"; import { useShallowEffect } from "@mantine/hooks";
import { useState } from "react"; import { useState } from "react";

View File

@@ -1,5 +1,5 @@
'use client' 'use client'
import { API_ADDRESS, WARNA } from '@/module/_global'; import { WARNA } from '@/module/_global';
import { ActionIcon, Box, Center, Divider, Grid, Group, Spoiler, Text, TextInput } from '@mantine/core'; import { ActionIcon, Box, Center, Divider, Grid, Group, Spoiler, Text, TextInput } from '@mantine/core';
import React, { useState } from 'react'; import React, { useState } from 'react';
import { TfiAnnouncement } from "react-icons/tfi"; import { TfiAnnouncement } from "react-icons/tfi";

View File

@@ -0,0 +1,7 @@
import FormCreateDiscussion from "./ui/form_create_discussion";
import ListDiscussion from "./ui/list_discussion";
import NavbarListDiscussion from "./ui/navbar_list_discussion";
export { ListDiscussion }
export { NavbarListDiscussion }
export { FormCreateDiscussion }

View File

@@ -0,0 +1,20 @@
import { IFormDiscussion } from "./type_discussion";
export const funGetAllDiscussion = async (path?: string) => {
const response = await fetch(`/api/discussion${(path) ? path : ''}`, { next: { tags: ['discussion'] } });
return await response.json().catch(() => null);
}
export const funCreateDiscussion = async (data: IFormDiscussion) => {
if (data.desc == "")
return { success: false, message: 'Diskusi tidak boleh kosong' }
const response = await fetch("/api/discussion", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(data),
});
return await response.json().catch(() => null);
}

View File

@@ -0,0 +1,14 @@
export interface IDataDiscussion {
id: string
title: string
desc: string
status: boolean
createdAt: string
user_name: string
total_komentar: number
}
export interface IFormDiscussion {
desc: string,
idDivision: string
}

View File

@@ -1,15 +1,18 @@
import { WARNA } from "@/module/_global"; import { WARNA } from "@/module/_global";
import { Box, Stack, SimpleGrid, Flex, Text } from "@mantine/core"; import { Box, Stack, SimpleGrid, Flex, Text } from "@mantine/core";
import { useParams } from "next/navigation";
import { IoAddCircle } from "react-icons/io5"; import { IoAddCircle } from "react-icons/io5";
export default function DrawerListDiscussion() { export default function DrawerListDiscussion() {
const param = useParams<{ id: string }>()
return ( return (
<Box> <Box>
<Stack pt={10}> <Stack pt={10}>
<SimpleGrid <SimpleGrid
cols={{ base: 2, sm: 2, lg: 3 }} cols={{ base: 2, sm: 2, lg: 3 }}
> >
<Flex onClick={() => window.location.href = "/discussion/create"} justify={'center'} align={'center'} direction={'column'} > <Flex onClick={() => window.location.href = "/division/" + param.id + "/discussion/create"} justify={'center'} align={'center'} direction={'column'} >
<Box> <Box>
<IoAddCircle size={30} color={WARNA.biruTua} /> <IoAddCircle size={30} color={WARNA.biruTua} />
</Box> </Box>

View File

@@ -1,14 +0,0 @@
import { NextRequest } from "next/server";
import { API_INDEX_DISCUSSION } from "./api_index";
type Method = "GET" | "POST";
export async function apiDiscussion(req: NextRequest, method: Method) {
const { searchParams } = new URL(req.url);
const path = searchParams.get("path");
const act = API_INDEX_DISCUSSION.find((v) => v.path === path && v.method === method);
if (!path)
return Response.json({ message: "page not found" }, { status: 404 });
if (act) return act.bin(req);
return Response.json({ message: "404" });
}

View File

@@ -1,39 +0,0 @@
import getAllDiscussion from "./get/getAllDiscussion";
import getOneDiscussion from "./get/getOneDiscussion";
import createCommentDiscussion from "./post/createCommentDiscussion";
import createDiscussion from "./post/createDiscussion";
import deleteDiscussion from "./post/deleteDiscussion";
import updateDiscussion from "./post/updateDiscussion";
export const API_INDEX_DISCUSSION = [
{
path: "get-all-discussion",
method: "GET",
bin: getAllDiscussion,
},
{
path: "get-one-discussion",
method: "GET",
bin: getOneDiscussion,
},
{
path: "create-discussion",
method: "POST",
bin: createDiscussion,
},
{
path: "create-comment-discussion",
method: "POST",
bin: createCommentDiscussion,
},
{
path: "update-discussion",
method: "POST",
bin: updateDiscussion,
},
{
path: "delete-discussion",
method: "POST",
bin: deleteDiscussion,
},
];

View File

@@ -1,20 +0,0 @@
import { prisma } from "@/module/_global";
import { NextRequest } from "next/server";
export default async function getAllDiscussion(req: NextRequest) {
try {
const searchParams = req.nextUrl.searchParams
const divisionID = searchParams.get('divisionID');
const data = await prisma.divisionDisscussion.findMany({
where: {
isActive: true,
idDivision: String(divisionID)
}
})
return Response.json(data);
} catch (error) {
console.error(error);
return Response.json({ success: false, message: "Internal Server Error" }, { status: 500 });
}
}

View File

@@ -1,34 +0,0 @@
import { prisma } from "@/module/_global";
import { NextRequest } from "next/server";
export default async function getOneDiscussion(req: NextRequest) {
try {
const searchParams = req.nextUrl.searchParams
const id = searchParams.get('id');
const data = await prisma.divisionDisscussion.findUnique({
where: {
id: String(id)
}
})
const comment = await prisma.divisionDisscussionComment.findMany({
where: {
idDisscussion: String(id)
}
})
const allData = {
data: data,
comment: comment
}
return Response.json(allData);
} catch (error) {
console.error(error);
return Response.json(
{ message: "Internal Server Error", success: false },
{ status: 500 }
);
}
}

View File

@@ -1,19 +0,0 @@
import { prisma } from "@/module/_global";
export default async function createCommentDiscussion(req: Request) {
try {
const data = await req.json()
const insert = await prisma.divisionDisscussionComment.create({
data: {
idDisscussion: data.idDiscussion,
comment: data.comment,
createdBy: data.createdBy
}
})
return Response.json(insert, { status: 201 });
} catch (error) {
console.error(error);
return Response.json({ success: false, message: "Internal Server Error" }, { status: 500 });
}
}

View File

@@ -1,23 +0,0 @@
import { prisma } from "@/module/_global";
export default async function createDiscussion(req: Request) {
try {
const data = await req.json();
const insert = await prisma.divisionDisscussion.create({
data: {
idDivision: data.idDivision,
desc: data.desc,
createdBy: data.createdBy
},
select: {
id: true
}
})
return Response.json(insert, { status: 201 });
} catch (error) {
console.error(error);
return Response.json({ success: false, message: "Internal Server Error" }, { status: 500 });
}
}

View File

@@ -1,26 +0,0 @@
import { prisma } from "@/module/_global";
export default async function deleteDiscussion(req: Request) {
try {
const data = await req.json()
const del = await prisma.divisionDisscussion.update({
where: {
id: data.id
},
data: {
isActive: false
}
})
return Response.json(
{ success: true, message: "Sukses Delete Diskusi" },
{ status: 200 }
);
} catch (error) {
console.error(error);
return Response.json(
{ message: "Internal Server Error", success: false },
{ status: 500 }
);
}
}

View File

@@ -1,21 +0,0 @@
import { prisma } from "@/module/_global";
export default async function updateDiscussion(req: Request) {
try {
const data = await req.json()
const update = await prisma.divisionDisscussion.update({
where:{
id: data.id
},
data:{
desc: data.desc,
}
})
return Response.json({ success: true, message: "Sukses Update Diskusi" }, { status: 200 });
} catch (error) {
console.error(error);
return Response.json({ message: "Internal Server Error", success: false }, { status: 500 });
}
}

View File

@@ -1,11 +0,0 @@
import { LayoutNavbarNew } from "@/module/_global";
import FormCreateDiscussion from "../component/form_create_discussion";
export default function ViewCreateDiscussion() {
return (
<>
<LayoutNavbarNew back="" title="Tambah Diskusi" menu={<></>} />
<FormCreateDiscussion />
</>
)
}

View File

@@ -1,6 +1,5 @@
"use client" "use client"
import { Avatar, Badge, Box, Center, Divider, Flex, Grid, Group, Text, TextInput } from "@mantine/core"; import { Avatar, Badge, Box, Center, Divider, Flex, Grid, Group, Text, TextInput } from "@mantine/core";
import NavbarDetailDiscussion from "../component/navbar_detail_discussion";
import { WARNA } from "@/module/_global"; import { WARNA } from "@/module/_global";
import { GrChatOption } from "react-icons/gr"; import { GrChatOption } from "react-icons/gr";
import { LuSendHorizonal } from "react-icons/lu"; import { LuSendHorizonal } from "react-icons/lu";
@@ -52,7 +51,7 @@ export default function ViewDetailDiscussion() {
return ( return (
<> <>
<NavbarDetailDiscussion /> {/* <NavbarDetailDiscussion /> */}
<Box p={20}> <Box p={20}>
<Flex <Flex
justify={"space-between"} justify={"space-between"}

View File

@@ -1,11 +0,0 @@
import ListDiscussion from "../component/list_discussion";
import NavbarListDiscussion from "../component/navbar_list_discussion";
export default function ViewListDiscussion() {
return (
<div>
<NavbarListDiscussion />
<ListDiscussion/>
</div>
);
}

View File

@@ -1,14 +0,0 @@
import { NextRequest } from "next/server";
import { API_INDEX_DIVISION } from "./api_index";
type Method = "GET" | "POST";
export async function apiDivision(req: NextRequest, method: Method) {
const { searchParams } = new URL(req.url);
const path = searchParams.get("path");
const act = API_INDEX_DIVISION.find((v) => v.path === path && v.method === method);
if (!path)
return Response.json({ message: "page not found" }, { status: 404 });
if (act) return act.bin(req);
return Response.json({ message: "404" });
}

View File

@@ -1,39 +0,0 @@
import getAllDivision from "./get/getAllDivision";
import getOneDivision from "./get/getOneDivision";
import getOneDetailDivision from "./get/getOneDetailDivision";
import createDivision from "./post/createDivision";
import deleteDivision from "./post/deleteDivision";
import updateDivision from "./post/updateDivision";
export const API_INDEX_DIVISION = [
{
path: "create-division",
method: "POST",
bin: createDivision,
},
{
path: "update-division",
method: "POST",
bin: updateDivision,
},
{
path: "delete-division",
method: "POST",
bin: deleteDivision,
},
{
path: "get-all-division",
method: "GET",
bin: getAllDivision,
},
{
path: "get-one-division",
method: "GET",
bin: getOneDivision,
},
{
path: "get-one-detail-division",
method: "GET",
bin: getOneDetailDivision,
},
];

View File

@@ -1,30 +0,0 @@
import { prisma } from "@/module/_global";
import { funGetUserByCookies } from "@/module/auth";
import { NextRequest } from "next/server";
export default async function getAllDivision(req: NextRequest) {
try {
let grup
const user = await funGetUserByCookies()
const searchParams = req.nextUrl.searchParams
let groupID = searchParams.get('groupID');
if (groupID == null || groupID == undefined) {
grup = user.idGroup
} else {
grup = groupID
}
const division = await prisma.division.findMany({
where: {
isActive: true,
idGroup: grup
}
})
return Response.json(division);
} catch (error) {
console.error(error);
return Response.json({ success: false, message: "Internal Server Error" }, { status: 500 });
}
}

View File

@@ -1,87 +0,0 @@
import { prisma } from '@/module/_global';
import { NextRequest } from "next/server";
export const dynamic = 'force-dynamic'
export default async function getOneDetailDivision(req: NextRequest) {
try {
const searchParams = req.nextUrl.searchParams
const id = searchParams.get('divisionId');
const division = await prisma.division.findUnique({
where: {
id: String(id),
},
select: {
id: true,
name: true,
},
});
const member = await prisma.divisionMember.findMany({
where: {
idDivision: String(id),
},
select: {
idUser: true,
isLeader: true
}
})
const tugas = await prisma.divisionProject.count({
where: {
idDivision: String(id),
status: {
lte: 1
},
isActive: true
}
})
const dokumen = await prisma.divisionDocumentFolderFile.count({
where: {
idDivision: String(id),
isActive: true,
category: "FILE"
}
})
const diskusi = await prisma.divisionDisscussion.count({
where: {
idDivision: String(id),
isActive: true,
status: 1
}
})
const kalender = await prisma.divisionCalendar.count({
where: {
idDivision: String(id),
isActive: true,
dateStart: {
lte: new Date()
}
}
})
const allData = {
// division: division,
division: { name: name },
jumlah: {
tugas: 1,
dokumen: dokumen,
diskusi: diskusi,
kalender: kalender
},
member: member,
}
return Response.json(allData);
} catch (error) {
console.error(error);
return Response.json(
{ message: "Internal Server Error", success: false },
{ status: 500 }
);
}
}

View File

@@ -1,41 +0,0 @@
import { prisma } from "@/module/_global";
import { NextRequest } from "next/server";
export default async function getOneDivision(req: NextRequest) {
try {
const searchParams = req.nextUrl.searchParams
const id = searchParams.get('divisionID');
const division = await prisma.division.findUnique({
where: {
id: String(id),
},
select: {
id: true,
name: true,
},
});
const member = await prisma.divisionMember.findMany({
where: {
idDivision: String(id),
},
select: {
idUser: true,
isLeader: true
}
})
const allData = {
division: division,
member: member
}
return Response.json(allData);
} catch (error) {
console.error(error);
return Response.json(
{ message: "Internal Server Error", success: false },
{ status: 500 }
);
}
}

View File

@@ -1,43 +0,0 @@
import { prisma } from "@/module/_global";
import { funGetUserByCookies } from "@/module/auth";
import _ from "lodash";
import { revalidatePath } from "next/cache";
export default async function createDivision(req: Request) {
try {
const sent = await req.json();
const user = await funGetUserByCookies();
const insertDivision = await prisma.division.create({
data: {
name: sent.data.name,
idVillage: String(user.idVillage),
idGroup: sent.data.idGroup,
desc: sent.data.desc,
createdBy: String(user.id)
},
select: {
id: true
}
})
const dataMember = sent.member.map((v: any) => ({
..._.omit(v, ["isActive", "nik", "name", "phone", "email", "gender", "group", "position"]),
idUser: v.id,
idDivision: insertDivision.id,
isAdmin: sent.admin.some((i: any) => i == v.id)
}))
const insertMember = await prisma.divisionMember.createMany({
data: dataMember
})
revalidatePath("/division");
return Response.json({ success: true, message: "Sukses menambahkan data divisi" }, { status: 201 });
} catch (error) {
console.error(error);
return Response.json({ success: false, message: "Internal Server Error" }, { status: 500 });
}
}

View File

@@ -1,27 +0,0 @@
import { prisma } from "@/module/_global";
export default async function deleteDivision(req: Request) {
try {
const data = await req.json();
const update = await prisma.division.update({
where: {
id: data.id,
},
data: {
isActive: false,
},
});
return Response.json(
{ success: true, message: "Sukses Delete Division" },
{ status: 200 }
);
} catch (error) {
console.error(error);
return Response.json(
{ message: "Internal Server Error", success: false },
{ status: 500 }
);
}
}

View File

@@ -1,24 +0,0 @@
import { prisma } from "@/module/_global";
export default async function updateDivision(req: Request) {
try {
const data = await req.json()
const update = await prisma.division.update({
where: {
id: data.id
},
data: {
name: data.name,
desc: data.desc
}
})
// belom update member nihhhh
return Response.json({ success: true, message: "Sukses Update Divisi" }, { status: 200 });
} catch (error) {
console.error(error);
return Response.json({ message: "Internal Server Error", success: false }, { status: 500 });
}
}

View File

@@ -8,36 +8,31 @@ import ViewDetailEventDivision from "./_division_fitur/calender/view/view_detail
import ViewDivisionCalender from "./_division_fitur/calender/view/view_division_calender"; import ViewDivisionCalender from "./_division_fitur/calender/view/view_division_calender";
import ViewHistoryDivisionCalender from "./_division_fitur/calender/view/view_history_division_calender"; import ViewHistoryDivisionCalender from "./_division_fitur/calender/view/view_history_division_calender";
import ViewUpdateDivisionCalender from "./_division_fitur/calender/view/view_update_division_calender"; import ViewUpdateDivisionCalender from "./_division_fitur/calender/view/view_update_division_calender";
import { apiDiscussion } from "./_division_fitur/discussion/api/api_discussion";
import ViewCreateDiscussion from "./_division_fitur/discussion/view/view_create_discussion";
import ViewDetailDiscussion from "./_division_fitur/discussion/view/view_detail_discussion"; import ViewDetailDiscussion from "./_division_fitur/discussion/view/view_detail_discussion";
import ViewEditDiscussion from "./_division_fitur/discussion/view/view_edit_discussion"; import ViewEditDiscussion from "./_division_fitur/discussion/view/view_edit_discussion";
import ViewListDiscussion from "./_division_fitur/discussion/view/view_list_discussion";
import ViewDocumentDivision from "./_division_fitur/document/view/view_document_division"; import ViewDocumentDivision from "./_division_fitur/document/view/view_document_division";
import ViewCreateTaskDivision from "./_division_fitur/task/view/view_create_division_task"; import ViewCreateTaskDivision from "./_division_fitur/task/view/view_create_division_task";
import ViewDetailDivisionTask from "./_division_fitur/task/view/view_detail_division_task"; import ViewDetailDivisionTask from "./_division_fitur/task/view/view_detail_division_task";
import ViewDivisionTask from "./_division_fitur/task/view/view_division_task"; import ViewDivisionTask from "./_division_fitur/task/view/view_division_task";
import ViewUpdateProgressDivisionTask from "./_division_fitur/task/view/view_update_progress_division_task"; import ViewUpdateProgressDivisionTask from "./_division_fitur/task/view/view_update_progress_division_task";
import { apiDivision } from "./api/api_division"; import CreateAdminDivision from "./ui/create_admin_division";
import CreateAdminDivision from "./components/create_admin_division"; import CreateUsers from "./ui/create_users";
import CreateUsers from "./components/create_users"; import ListDivision from './ui/list_division';
import ViewCreateReport from "./view/view_create_report"; import CreateDivision from './ui/create_division';
import ViewReportDivision from "./view/view_report_division"; import NavbarDetailDivision from './ui/navbar_detail_division';
import ListDivision from './components/list_division'; import CarouselDivision from './ui/carousel_division';
import CreateDivision from './components/create_division'; import FeatureDetailDivision from './ui/feature_detail_division';
import NavbarDetailDivision from './components/navbar_detail_division'; import ListTaskOnDetailDivision from './ui/list_task';
import CarouselDivision from './components/carousel_division'; import ListDocumentOnDetailDivision from './ui/list_document';
import FeatureDetailDivision from './components/feature_detail_division'; import ListDiscussionOnDetailDivision from './ui/list_discussion';
import ListTaskOnDetailDivision from './components/list_task'; import InformationDivision from './ui/information_division';
import ListDocumentOnDetailDivision from './components/list_document'; import CreateAnggotaDivision from './ui/create_anggota_division';
import ListDiscussionOnDetailDivision from './components/list_discussion'; import EditDivision from './ui/edit_division';
import InformationDivision from './components/information_division'; import CreateReport from './ui/create_report';
import CreateAnggotaDivision from './components/create_anggota_division'; import ReportDivisionId from './ui/report_division_id';
import EditDivision from './components/edit_division';
export { CreateUsers }; export { CreateUsers };
export { CreateAdminDivision }; export { CreateAdminDivision };
export { ViewCreateReport };
export { ViewDivisionTask }; export { ViewDivisionTask };
export { ViewDetailDivisionTask }; export { ViewDetailDivisionTask };
export { ViewUpdateProgressDivisionTask }; export { ViewUpdateProgressDivisionTask };
@@ -51,14 +46,9 @@ export { ViewDetailEventDivision };
export { ViewUpdateDivisionCalender }; export { ViewUpdateDivisionCalender };
export { UpdateUserDivisionCalender }; export { UpdateUserDivisionCalender };
export { UpdateUlangiEvent }; export { UpdateUlangiEvent };
export { ViewListDiscussion };
export { ViewCreateDiscussion };
export { ViewDetailDiscussion }; export { ViewDetailDiscussion };
export { ViewEditDiscussion }; export { ViewEditDiscussion };
export { ViewDocumentDivision }; export { ViewDocumentDivision };
export { ViewReportDivision };
export { apiDivision }
export { apiDiscussion }
export type { IFormDivision, IFormMemberDivision, IFormFixDivision, IDataDivison, IDataMemberDivision } export type { IFormDivision, IFormMemberDivision, IFormFixDivision, IDataDivison, IDataMemberDivision }
export { ListDivision } export { ListDivision }
export { CreateDivision } export { CreateDivision }
@@ -71,3 +61,5 @@ export { ListDiscussionOnDetailDivision }
export { InformationDivision } export { InformationDivision }
export { CreateAnggotaDivision } export { CreateAnggotaDivision }
export { EditDivision } export { EditDivision }
export { CreateReport }
export { ReportDivisionId }

View File

@@ -1,53 +1,18 @@
"use client" "use client"
import { API_ADDRESS, LayoutNavbarNew, WARNA } from '@/module/_global'; import { LayoutNavbarNew, WARNA } from '@/module/_global';
import LayoutModal from '@/module/_global/layout/layout_modal'; import LayoutModal from '@/module/_global/layout/layout_modal';
import { funGetUserByCookies } from '@/module/auth'; import { funGetUserByCookies } from '@/module/auth';
import { TypeUser } from '@/module/user'; import { funGetAllmember, TypeUser } from '@/module/user';
import { useHookstate } from '@hookstate/core';
import { Avatar, Box, Button, Divider, Group, Stack, Text, TextInput } from '@mantine/core'; import { Avatar, Box, Button, Divider, Group, Stack, Text, TextInput } from '@mantine/core';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
import React, { useState } from 'react'; import React, { useState } from 'react';
import toast from 'react-hot-toast'; import toast from 'react-hot-toast';
import { FaCheck } from 'react-icons/fa6'; import { FaCheck } from 'react-icons/fa6';
import { HiMagnifyingGlass } from 'react-icons/hi2'; import { HiMagnifyingGlass } from 'react-icons/hi2';
import { globalMemberDivision } from '../lib/val_division';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { funGetAllmember } from '@/module/user/member/lib/api_member';
import { IDataMemberDivision } from '../lib/type_division'; import { IDataMemberDivision } from '../lib/type_division';
import { funAddDivisionMember, funGetDivisionById } from '../lib/api_division'; import { funAddDivisionMember, funGetDivisionById } from '../lib/api_division';
const dataUser = [
{
id: 1,
img: "https://i.pravatar.cc/1000?img=3",
name: "Doni Setiawan",
},
{
id: 2,
img: "https://i.pravatar.cc/1000?img=10",
name: "Ilham Udin",
},
{
id: 3,
img: "https://i.pravatar.cc/1000?img=11",
name: "Didin Anang",
},
{
id: 4,
img: "https://i.pravatar.cc/1000?img=21",
name: "Angga Saputra",
},
{
id: 5,
img: "https://i.pravatar.cc/1000?img=32",
name: "Marcel Widianto",
},
{
id: 6,
img: "https://i.pravatar.cc/1000?img=37",
name: "Bagas Nusantara",
},
];
export default function CreateAnggotaDivision() { export default function CreateAnggotaDivision() {
const router = useRouter() const router = useRouter()

View File

@@ -1,5 +1,5 @@
"use client"; "use client";
import { API_ADDRESS, LayoutNavbarNew, WARNA } from "@/module/_global"; import { LayoutNavbarNew, WARNA } from "@/module/_global";
import { useHookstate } from "@hookstate/core"; import { useHookstate } from "@hookstate/core";
import { import {
Avatar, Avatar,

View File

@@ -1,7 +1,7 @@
'use client' 'use client'
import { API_ADDRESS, LayoutDrawer, LayoutNavbarNew, WARNA } from '@/module/_global'; import { LayoutDrawer, LayoutNavbarNew, WARNA } from '@/module/_global';
import { ActionIcon, Avatar, Box, Card, Center, Divider, Flex, Grid, Group, Text, TextInput, Title } from '@mantine/core'; import { ActionIcon, Avatar, Box, Card, Center, Divider, Flex, Grid, Group, Text, TextInput, Title } from '@mantine/core';
import { useRouter } from 'next/navigation'; import { useRouter, useSearchParams } from 'next/navigation';
import React, { useState } from 'react'; import React, { useState } from 'react';
import { HiMenu } from 'react-icons/hi'; import { HiMenu } from 'react-icons/hi';
import { HiMagnifyingGlass, HiMiniPresentationChartBar, HiMiniUserGroup, HiOutlineListBullet, HiSquares2X2 } from 'react-icons/hi2'; import { HiMagnifyingGlass, HiMiniPresentationChartBar, HiMiniUserGroup, HiOutlineListBullet, HiSquares2X2 } from 'react-icons/hi2';
@@ -19,6 +19,8 @@ export default function ListDivision() {
const [data, setData] = useState<IDataDivison[]>([]) const [data, setData] = useState<IDataDivison[]>([])
const [jumlah, setJumlah] = useState(0) const [jumlah, setJumlah] = useState(0)
const [searchQuery, setSearchQuery] = useState('') const [searchQuery, setSearchQuery] = useState('')
const searchParams = useSearchParams()
const group = searchParams.get('group')
const handleList = () => { const handleList = () => {
setIsList(!isList) setIsList(!isList)
@@ -27,7 +29,7 @@ export default function ListDivision() {
const fetchData = async (search: string) => { const fetchData = async (search: string) => {
try { try {
setData([]); setData([]);
const response = await funGetAllDivision('?search=' + search) const response = await funGetAllDivision('?search=' + search + '&group=' + group)
if (response.success) { if (response.success) {
setData(response.data) setData(response.data)

View File

@@ -1,5 +1,5 @@
"use client" "use client"
import { API_ADDRESS, LayoutNavbarNew, WARNA } from '@/module/_global'; import { LayoutNavbarNew, WARNA } from '@/module/_global';
import { useHookstate } from '@hookstate/core'; import { useHookstate } from '@hookstate/core';
import { Avatar, Box, Button, Checkbox, Divider, Flex, Group, Stack, Text, TextInput } from '@mantine/core'; import { Avatar, Box, Button, Checkbox, Divider, Flex, Group, Stack, Text, TextInput } from '@mantine/core';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
@@ -35,37 +35,8 @@ export default function NavbarAdminDivision({ data, onSuccess }: { data: any, on
} catch (error) { } catch (error) {
console.log(error); console.log(error);
onSuccess(false) onSuccess(false)
toast.error("Gagal menambahkan grup, coba lagi nanti"); toast.error("Gagal menambahkan divisi, coba lagi nanti");
} }
// try {
// const res = await fetch(API_ADDRESS.apiCreateDivision, {
// method: 'POST',
// headers: {
// 'Content-Type': 'application/json'
// },
// body: JSON.stringify({
// data: data,
// member: member.get(),
// admin: value
// })
// })
// const errorData = await res.json();
// if (res.status == 201) {
// toast.success('Sukses! data tersimpan')
// onSuccess(true)
// } else {
// toast.error(errorData.message);
// onSuccess(false)
// }
// } catch (error) {
// toast.error('Error')
// onSuccess(false)
// }
} }
return ( return (

View File

@@ -1,12 +1,12 @@
"use client" "use client"
import { API_ADDRESS, LayoutNavbarNew, WARNA } from '@/module/_global'; import { LayoutNavbarNew, WARNA } from '@/module/_global';
import { useHookstate } from '@hookstate/core'; import { useHookstate } from '@hookstate/core';
import { Avatar, Box, Button, Center, Input, SimpleGrid, Stack, Text, TextInput } from '@mantine/core'; import { Avatar, Box, Button, Center, Input, SimpleGrid, Stack, Text, TextInput } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
import React, { useState } from 'react'; import React, { useState } from 'react';
import { HiMagnifyingGlass } from 'react-icons/hi2'; import { HiMagnifyingGlass } from 'react-icons/hi2';
import { TypeUser } from '@/module/user'; import { funGetAllmember, TypeUser } from '@/module/user';
import { funGetUserByCookies } from '@/module/auth'; import { funGetUserByCookies } from '@/module/auth';
import toast from 'react-hot-toast'; import toast from 'react-hot-toast';
import { globalMemberDivision } from '../lib/val_division'; import { globalMemberDivision } from '../lib/val_division';
@@ -22,21 +22,26 @@ export default function NavbarCreateUsers({ grup, onClose }: { grup?: string, on
if (selectedFiles.some((i: any) => i.id == dataMember[index].id)) { if (selectedFiles.some((i: any) => i.id == dataMember[index].id)) {
setSelectedFiles(selectedFiles.filter((i: any) => i.id != dataMember[index].id)) setSelectedFiles(selectedFiles.filter((i: any) => i.id != dataMember[index].id))
} else { } else {
setSelectedFiles([...selectedFiles, {idUser: dataMember[index].id, name: dataMember[index].name}]) setSelectedFiles([...selectedFiles, { idUser: dataMember[index].id, name: dataMember[index].name }])
} }
}; };
async function loadData() { async function loadData(search: string) {
const loadMember = await fetch(API_ADDRESS.apiGetAllUser + '&active=true&groupID=' + grup); const res = await funGetAllmember('?active=true&group=' + grup + '&search=' + search);
const user = await funGetUserByCookies(); const user = await funGetUserByCookies();
const hasil = await loadMember.json()
setDataMember(hasil.filter((i: any) => i.id != user.id))
// cek data member sebelumnya if (res.success) {
if (member.length > 0) { setDataMember(res.data.filter((i: any) => i.id != user.id))
setSelectedFiles(JSON.parse(JSON.stringify(member.get())))
// cek data member sebelumnya
if (member.length > 0) {
setSelectedFiles(JSON.parse(JSON.stringify(member.get())))
}
} else {
toast.error(res.message)
} }
} }
@@ -49,7 +54,7 @@ export default function NavbarCreateUsers({ grup, onClose }: { grup?: string, on
} }
useShallowEffect(() => { useShallowEffect(() => {
loadData() loadData("")
}, []); }, []);
return ( return (
@@ -69,6 +74,7 @@ export default function NavbarCreateUsers({ grup, onClose }: { grup?: string, on
radius={30} radius={30}
leftSection={<HiMagnifyingGlass size={20} />} leftSection={<HiMagnifyingGlass size={20} />}
placeholder="Pencarian" placeholder="Pencarian"
onChange={(e) => loadData(e.target.value)}
/> />
<Box pt={10}> <Box pt={10}>
<SimpleGrid <SimpleGrid

View File

@@ -1,9 +0,0 @@
import React from 'react';
import CreateReport from '../components/create_report';
export default function ViewCreateReport() {
return (
<CreateReport/>
);
}

View File

@@ -1,9 +0,0 @@
import React from 'react';
import ReportDivisionId from '../components/report_division_id';
export default function ViewReportDivision() {
return (
<ReportDivisionId/>
);
}

View File

@@ -1,4 +1,4 @@
import { API_ADDRESS, LayoutDrawer, WARNA } from "@/module/_global"; import { LayoutDrawer, WARNA } from "@/module/_global";
import { import {
Box, Box,
Button, Button,

View File

@@ -1,5 +1,5 @@
"use client"; "use client";
import { API_ADDRESS, LayoutDrawer, WARNA } from "@/module/_global"; import { LayoutDrawer, WARNA } from "@/module/_global";
import LayoutModal from "@/module/_global/layout/layout_modal"; import LayoutModal from "@/module/_global/layout/layout_modal";
import { import {
Box, Box,

View File

@@ -1,4 +1,4 @@
import { API_ADDRESS, LayoutDrawer, SkeletonSingle, WARNA } from "@/module/_global"; import { LayoutDrawer, SkeletonSingle, WARNA } from "@/module/_global";
import { import {
ActionIcon, ActionIcon,
Box, Box,

View File

@@ -1,4 +1,4 @@
import { API_ADDRESS, LayoutDrawer, WARNA } from "@/module/_global" import { LayoutDrawer, WARNA } from "@/module/_global"
import LayoutModal from "@/module/_global/layout/layout_modal" import LayoutModal from "@/module/_global/layout/layout_modal"
import { funGetAllGroup, IDataGroup } from "@/module/group" import { funGetAllGroup, IDataGroup } from "@/module/group"
import { Box, Stack, SimpleGrid, Flex, Text, Select, TextInput, Button } from "@mantine/core" import { Box, Stack, SimpleGrid, Flex, Text, Select, TextInput, Button } from "@mantine/core"

View File

@@ -1,4 +1,4 @@
import { WARNA, LayoutDrawer, API_ADDRESS } from "@/module/_global"; import { WARNA, LayoutDrawer } from "@/module/_global";
import { funGetAllGroup, IDataGroup } from "@/module/group"; import { funGetAllGroup, IDataGroup } from "@/module/group";
import { Box, Stack, SimpleGrid, Flex, TextInput, Button, Text, Select } from "@mantine/core"; import { Box, Stack, SimpleGrid, Flex, TextInput, Button, Text, Select } from "@mantine/core";
import { useShallowEffect } from "@mantine/hooks"; import { useShallowEffect } from "@mantine/hooks";
@@ -30,7 +30,7 @@ export default function DrawerListPosition({ onCreated }: { onCreated: (val: boo
} }
} catch (error) { } catch (error) {
console.error(error) console.error(error)
toast.error("Gagal mendapatkan grup, coba lagi nanti"); toast.error("Gagal mendapatkan jabatan, coba lagi nanti");
} }
} }
@@ -41,29 +41,6 @@ export default function DrawerListPosition({ onCreated }: { onCreated: (val: boo
async function onSubmit() { async function onSubmit() {
try { try {
// const res = await fetch(API_ADDRESS.apiCreatePosition, {
// method: 'POST',
// headers: {
// 'Content-Type': 'application/json'
// },
// body: JSON.stringify({
// name: listData.name,
// idGroup: listData.idGroup
// })
// })
// if (!res.ok) {
// const errorData = await res.json();
// if (errorData.message === "Position sudah ada") {
// toast.error('Gagal! Position sudah ada');
// } else {
// toast.error('Error');
// }
// } else {
// setOpenDrawerGroup(false)
// toast.success('Sukses! data tersimpan')
// }
// onCreated(true)
const res = await funCreatePosition({ const res = await funCreatePosition({
name: listData.name, name: listData.name,
idGroup: listData.idGroup idGroup: listData.idGroup
@@ -76,7 +53,7 @@ export default function DrawerListPosition({ onCreated }: { onCreated: (val: boo
} else { } else {
toast.error(res.message) toast.error(res.message)
} }
} catch (error) { } catch (error) {
toast.error('Error') toast.error('Error')
} }

View File

@@ -1,4 +1,4 @@
import { API_ADDRESS, LayoutDrawer, SkeletonSingle, WARNA } from "@/module/_global"; import { LayoutDrawer, SkeletonSingle, WARNA } from "@/module/_global";
import { ActionIcon, Box, Group, Text, TextInput } from "@mantine/core"; import { ActionIcon, Box, Group, Text, TextInput } from "@mantine/core";
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { FaUserTie } from "react-icons/fa6"; import { FaUserTie } from "react-icons/fa6";

View File

@@ -3,9 +3,11 @@ import { apiUser } from "./api/api_user";
import createLogUser from "./log/fun/createLogUser"; import createLogUser from "./log/fun/createLogUser";
import ViewEditProfile from "./profile/view/view_edit_profile"; import ViewEditProfile from "./profile/view/view_edit_profile";
import ViewProfile from "./profile/view/view_profile"; import ViewProfile from "./profile/view/view_profile";
import { funGetAllmember } from './member/lib/api_member';
export { ViewProfile }; export { ViewProfile };
export { ViewEditProfile }; export { ViewEditProfile };
export { apiUser }; export { apiUser };
export { createLogUser }; export { createLogUser };
export type { TypeUser } export type { TypeUser }
export { funGetAllmember }

View File

@@ -8,4 +8,4 @@ export { NavbarListMember }
export { ListMember } export { ListMember }
export { CreateMember } export { CreateMember }
export { NavbarDetailMember } export { NavbarDetailMember }
export {EditMember} export {EditMember}

View File

@@ -1,5 +1,5 @@
"use client"; "use client";
import { API_ADDRESS, WARNA } from "@/module/_global"; import { WARNA } from "@/module/_global";
import LayoutModal from "@/module/_global/layout/layout_modal"; import LayoutModal from "@/module/_global/layout/layout_modal";
import { funGetAllGroup, IDataGroup } from "@/module/group"; import { funGetAllGroup, IDataGroup } from "@/module/group";
import { Box, Button, Select, Stack, TextInput } from "@mantine/core"; import { Box, Button, Select, Stack, TextInput } from "@mantine/core";

View File

@@ -1,5 +1,5 @@
"use client"; "use client";
import { API_ADDRESS, WARNA } from "@/module/_global"; import { WARNA } from "@/module/_global";
import LayoutModal from "@/module/_global/layout/layout_modal"; import LayoutModal from "@/module/_global/layout/layout_modal";
import { Box, Flex, SimpleGrid, Stack, Text } from "@mantine/core"; import { Box, Flex, SimpleGrid, Stack, Text } from "@mantine/core";
import { useShallowEffect } from "@mantine/hooks"; import { useShallowEffect } from "@mantine/hooks";
@@ -28,7 +28,7 @@ export default function DrawerDetailMember({
isActive: status, isActive: status,
}); });
if (res.success) { if (res.success) {
toast.success(res.message); toast.success(res.message);
onDeleted(true); onDeleted(true);
} else { } else {

View File

@@ -1,5 +1,5 @@
'use client' 'use client'
import { API_ADDRESS, WARNA } from "@/module/_global"; import { WARNA } from "@/module/_global";
import LayoutModal from "@/module/_global/layout/layout_modal"; import LayoutModal from "@/module/_global/layout/layout_modal";
import { funGetAllGroup, IDataGroup } from "@/module/group"; import { funGetAllGroup, IDataGroup } from "@/module/group";
import { funGetAllPosition } from "@/module/position/lib/api_position"; import { funGetAllPosition } from "@/module/position/lib/api_position";
@@ -13,7 +13,7 @@ import { IDataPositionMember, IDataROleMember, IEditDataMember, IFormMember } fr
import { funEditMember, funGetOneMember, funGetRoleUser } from "../lib/api_member"; import { funEditMember, funGetOneMember, funGetRoleUser } from "../lib/api_member";
export default function EditMember({ id }: { id: string}) { export default function EditMember({ id }: { id: string }) {
const [isModal, setModal] = useState(false) const [isModal, setModal] = useState(false)
const router = useRouter() const router = useRouter()
const [listGroup, setListGorup] = useState<IDataGroup[]>([]) const [listGroup, setListGorup] = useState<IDataGroup[]>([])
@@ -47,7 +47,7 @@ export default function EditMember({ id }: { id: string}) {
async function getOneData() { async function getOneData() {
try { try {
const res = await funGetOneMember(id) const res = await funGetOneMember(id)
setData(res.data) setData(res.data)
getAllPosition(res.data?.idGroup) getAllPosition(res.data?.idGroup)
} catch (error) { } catch (error) {
@@ -59,8 +59,8 @@ export default function EditMember({ id }: { id: string}) {
try { try {
const res = await funGetAllPosition( const res = await funGetAllPosition(
"?active=true" + "&group=" + `${val}` "?active=true" + "&group=" + `${val}`
); );
setListPosition(res.data); setListPosition(res.data);
} catch (error) { } catch (error) {
console.error(error) console.error(error)
@@ -96,7 +96,7 @@ export default function EditMember({ id }: { id: string}) {
async function onSubmit(val: boolean) { async function onSubmit(val: boolean) {
try { try {
const res = await funEditMember(id,{ const res = await funEditMember(id, {
id: data.id, id: data.id,
nik: data.nik, nik: data.nik,
name: data.name, name: data.name,

View File

@@ -1,5 +1,5 @@
'use client' 'use client'
import { LayoutNavbarHome, LayoutIconBack, WARNA, LayoutDrawer, API_ADDRESS } from "@/module/_global"; import { LayoutNavbarHome, LayoutIconBack, WARNA, LayoutDrawer } from "@/module/_global";
import { Box, Group, ActionIcon, Stack, Text, Center, Avatar } from "@mantine/core"; import { Box, Group, ActionIcon, Stack, Text, Center, Avatar } from "@mantine/core";
import { HiMenu } from "react-icons/hi"; import { HiMenu } from "react-icons/hi";
import { HiUser } from "react-icons/hi2"; import { HiUser } from "react-icons/hi2";

View File

@@ -1,5 +1,5 @@
import { API_ADDRESS, WARNA } from "@/module/_global" import { WARNA } from "@/module/_global"
import { Box, Group, ActionIcon, Text, TextInput } from "@mantine/core" import { Box, Group, ActionIcon, Text, TextInput } from "@mantine/core"
import { useShallowEffect } from "@mantine/hooks" import { useShallowEffect } from "@mantine/hooks"
import { useRouter, useSearchParams } from "next/navigation" import { useRouter, useSearchParams } from "next/navigation"