Merge pull request #214 from bipproduction/amalia/10-september-24

Amalia/10 september 24
This commit is contained in:
Amalia
2024-09-10 17:26:54 +08:00
committed by GitHub
23 changed files with 271 additions and 179 deletions

View File

@@ -0,0 +1,12 @@
import { WrapLayoutDivision } from "@/module/division_new";
import _ from "lodash"
export default async function Layout({ children }: { children: React.ReactNode }) {
return (
<>
<WrapLayoutDivision>
{children}
</WrapLayoutDivision>
</>
);
}

View File

@@ -1,8 +1,9 @@
import { prisma } from "@/module/_global";
import { funGetUserByCookies } from "@/module/auth";
import { createLogUser } from "@/module/user";
import { NextResponse } from "next/server";
// CREATE COMENT BY ID
// CREATE COMENT BY ID KOMENTAR
export async function POST(request: Request, context: { params: { id: string } }) {
try {
const user = await funGetUserByCookies()
@@ -34,9 +35,15 @@ export async function POST(request: Request, context: { params: { id: string } }
comment: comment,
idDisscussion: id,
createdBy: user.id
},
select: {
id: true
}
})
// create log user
const log = await createLogUser({ act: 'CREATE', desc: 'User menambah komentar pada diskusi', table: 'divisionDisscussionComment', data: data.id })
return NextResponse.json({ success: true, message: "Berhasil menambah komentar", data: data, }, { status: 200 });
} catch (error) {

View File

@@ -1,6 +1,6 @@
import { prisma } from "@/module/_global";
import { funGetUserByCookies } from "@/module/auth";
import { stat } from "fs";
import { createLogUser } from "@/module/user";
import _ from "lodash";
import moment from "moment";
import "moment/locale/id";
@@ -68,10 +68,11 @@ export async function GET(request: Request, context: { params: { id: string } })
const username = data?.User.name
const user_img = data?.User.img
const createdAt = moment(data?.createdAt).format("ll")
const isCreator = data?.createdBy == user.id
const result = { ...userMember, username, createdAt, user_img }
const result = { ...userMember, username, createdAt, user_img, isCreator }
const omitData = _.omit(result, ["User"])
@@ -95,7 +96,7 @@ export async function GET(request: Request, context: { params: { id: string } })
}
// ONE OR CLOSE DISCUSSION
// OPEN OR CLOSE DISCUSSION
export async function DELETE(request: Request, context: { params: { id: string } }) {
try {
const user = await funGetUserByCookies()
@@ -131,6 +132,10 @@ export async function DELETE(request: Request, context: { params: { id: string }
status: newStatus
}
});
// create log user
const log = await createLogUser({ act: 'UPDATE', desc: 'User mengupdate status diskusi', table: 'divisionDisscussion', data: id })
return NextResponse.json({ success: true, message: "Berhasil mengedit diskusi" }, { status: 200 });
} catch (error) {
@@ -167,6 +172,9 @@ export async function PUT(request: Request, context: { params: { id: string } })
isActive: false
}
});
// create log user
const log = await createLogUser({ act: 'DELETE', desc: 'User menghapus data diskusi', table: 'divisionDisscussion', data: id })
return NextResponse.json({ success: true, message: "Berhasil menghapus diskusi" }, { status: 200 });
} catch (error) {
console.error(error);
@@ -203,6 +211,9 @@ export async function POST(request: Request, context: { params: { id: string } }
desc: desc
}
});
// create log user
const log = await createLogUser({ act: 'UPDATE', desc: 'User mengupdate data diskusi', table: 'divisionDisscussion', data: id })
return NextResponse.json({ success: true, message: "Berhasil mengedit diskusi" }, { status: 200 });
} catch (error) {

View File

@@ -4,6 +4,7 @@ import _ from "lodash";
import moment from "moment";
import { NextResponse } from "next/server";
import "moment/locale/id";
import { createLogUser } from "@/module/user";
// GET ALL DISCUSSION DIVISION ACTIVE = TRUE
@@ -116,8 +117,14 @@ export async function POST(request: Request) {
desc,
createdBy: user.id
},
select: {
id: true
}
});
// create log user
const log = await createLogUser({ act: 'CREATE', desc: 'User membuat data diskusi', table: 'divisionDisscussion', data: data.id })
return NextResponse.json({ success: true, message: "Berhasil menambahkan diskusi", data, }, { status: 200 });
} catch (error) {
console.error(error);

View File

@@ -1,5 +1,6 @@
import { prisma } from "@/module/_global";
import { funGetUserByCookies } from "@/module/auth";
import { createLogUser } from "@/module/user";
import _ from "lodash";
import { NextResponse } from "next/server";
@@ -65,6 +66,9 @@ export async function POST(request: Request) {
})
}
// create log user
const log = await createLogUser({ act: 'UPDATE', desc: 'User memindahkan file atau folder', table: 'divisionDocumentFolderFile', data: '' })
return NextResponse.json({ success: true, message: "Berhasil memindahkan item" }, { status: 200 });
} catch (error) {

View File

@@ -1,5 +1,6 @@
import { prisma } from "@/module/_global";
import { funGetUserByCookies } from "@/module/auth";
import { createLogUser } from "@/module/user";
import _ from "lodash";
import moment from "moment";
import { NextResponse } from "next/server";
@@ -281,8 +282,14 @@ export async function POST(request: Request) {
extension: "folder",
createdBy: user.id,
},
select: {
id: true
}
});
// create log user
const log = await createLogUser({ act: 'CREATE', desc: 'User membuat folder baru', table: 'divisionDocumentFolderFile', data: data.id })
return NextResponse.json({ success: true, message: "Berhasil membuat folder baru" }, { status: 200 });
} catch (error) {
console.error(error);
@@ -339,6 +346,9 @@ export async function PUT(request: Request) {
})
// create log user
const log = await createLogUser({ act: 'UPDATE', desc: 'User mengubah nama file atau folder', table: 'divisionDocumentFolderFile', data: id })
return NextResponse.json({ success: true, message: "Berhasil mengubah nama item" }, { status: 200 });
} catch (error) {
@@ -370,6 +380,9 @@ export async function DELETE(request: Request) {
})
}
// create log user
const log = await createLogUser({ act: 'DELETE', desc: 'User menghapus file atau folder', table: 'divisionDocumentFolderFile', data: '' })
return NextResponse.json({ success: true, message: "Berhasil menghapus item" }, { status: 200 });
} catch (error) {

View File

@@ -4,6 +4,7 @@ import _ from "lodash";
import { NextResponse } from "next/server";
import fs from "fs";
import path from "path";
import { createLogUser } from "@/module/user";
// UPLOAD FILE
@@ -92,6 +93,9 @@ export async function POST(request: Request) {
// Tulis file ke sistem
fs.writeFileSync(filePath, buffer);
// create log user
const log = await createLogUser({ act: 'CREATE', desc: 'User mengupload file baru', table: 'divisionDocumentFolderFile', data: dataInsert.id })
return NextResponse.json({ success: true, message: "Berhasil upload file" }, { status: 200 });
} catch (error) {
console.error(error);

View File

@@ -1,5 +1,6 @@
import { prisma } from "@/module/_global";
import { funGetUserByCookies } from "@/module/auth";
import { createLogUser } from "@/module/user";
import { NextResponse } from "next/server";
export const dynamic = 'force-dynamic'
@@ -75,14 +76,11 @@ export async function DELETE(request: Request, context: { params: { id: string }
},
});
return NextResponse.json(
{
success: true,
message: "Grup berhasil diedit",
data,
},
{ status: 200 }
);
// create log user
const log = await createLogUser({ act: 'UPDATE', desc: 'User mengedit status data grup', table: 'group', data: id })
return NextResponse.json( { success: true, message: "Grup berhasil diedit", data, }, { status: 200 } );
} catch (error) {
console.error(error);
return NextResponse.json({ success: false, message: "Gagal mengedit grup, coba lagi nanti", reason: (error as Error).message, }, { status: 500 });
@@ -123,14 +121,11 @@ export async function PUT(request: Request, context: { params: { id: string } })
},
});
return NextResponse.json(
{
success: true,
message: "Grup berhasil diedit",
data,
},
{ status: 200 }
);
// create log user
const log = await createLogUser({ act: 'UPDATE', desc: 'User mengedit data grup', table: 'group', data: id })
return NextResponse.json( { success: true, message: "Grup berhasil diedit", data, }, { status: 200 } );
} catch (error) {
console.error(error);
return NextResponse.json({ success: false, message: "Gagal mengedit grup, coba lagi nanti", reason: (error as Error).message, }, { status: 500 });

View File

@@ -1,5 +1,6 @@
import { prisma } from "@/module/_global";
import { funGetUserByCookies } from "@/module/auth";
import { createLogUser } from "@/module/user";
import { revalidatePath, revalidateTag } from "next/cache";
import { NextResponse } from "next/server";
@@ -56,6 +57,9 @@ export async function POST(request: Request) {
name,
idVillage: String(villaId)
},
select: {
id: true
}
});
revalidatePath('/api/group?active=true', "page")
@@ -63,6 +67,10 @@ export async function POST(request: Request) {
revalidatePath('/group?active=true', 'page')
revalidateTag('group')
// create log user
const log = await createLogUser({ act: 'CREATE', desc: 'User membuat data grup', table: 'group', data: data.id })
return NextResponse.json({ success: true, message: "Berhasil menambahkan grup", data, }, { status: 200 });
} catch (error) {
console.error(error);

View File

@@ -1,5 +1,6 @@
import { prisma } from "@/module/_global";
import { funGetUserByCookies } from "@/module/auth";
import { createLogUser } from "@/module/user";
import _ from "lodash";
import { NextResponse } from "next/server";
@@ -43,14 +44,11 @@ export async function POST(request: Request, context: { params: { id: string } }
})
}
// create log user
const log = await createLogUser({ act: 'CREATE', desc: 'User menambahkan anggota tugas divisi', table: 'divisionProject', data: id })
return NextResponse.json(
{
success: true,
message: "Berhasil menambahkan anggota tugas",
},
{ status: 200 }
);
return NextResponse.json( { success: true, message: "Berhasil menambahkan anggota tugas", }, { status: 200 } );
} catch (error) {
console.error(error);
return NextResponse.json({ success: false, message: "Gagal menambah anggota tugas, coba lagi nanti", reason: (error as Error).message, }, { status: 500 });
@@ -92,14 +90,10 @@ export async function DELETE(request: Request, context: { params: { id: string }
}
})
// create log user
const log = await createLogUser({ act: 'DELETE', desc: 'User mengeluarkan anggota dari tugas divisi', table: 'divisionProject', data: id })
return NextResponse.json(
{
success: true,
message: "Berhasil mengeluarkan anggota",
},
{ status: 200 }
);
return NextResponse.json( { success: true, message: "Berhasil mengeluarkan anggota", }, { status: 200 } );
} catch (error) {
console.error(error);
return NextResponse.json({ success: false, message: "Gagal mengeluarkan anggota, coba lagi nanti", reason: (error as Error).message, }, { status: 500 });

View File

@@ -1,5 +1,6 @@
import { prisma } from "@/module/_global";
import { funGetUserByCookies } from "@/module/auth";
import { createLogUser } from "@/module/user";
import _ from "lodash";
import moment from "moment";
import "moment/locale/id"
@@ -184,16 +185,15 @@ export async function POST(request: Request, context: { params: { id: string } }
dateStart: new Date(moment(dateStart).format('YYYY-MM-DD')),
dateEnd: new Date(moment(dateEnd).format('YYYY-MM-DD')),
},
select: {
id: true
}
});
return NextResponse.json(
{
success: true,
message: "Detail tugas berhasil ditambahkan",
data,
},
{ status: 200 }
);
// create log user
const log = await createLogUser({ act: 'CREATE', desc: 'User menambahkan detail tugas divisi', table: 'divisionProjectTask', data: create.id })
return NextResponse.json({ success: true, message: "Detail tugas berhasil ditambahkan", data, }, { status: 200 });
} catch (error) {
console.error(error);
return NextResponse.json({ success: false, message: "Gagal mengedit detail tugas, coba lagi nanti", reason: (error as Error).message, }, { status: 500 });
@@ -238,13 +238,10 @@ export async function DELETE(request: Request, context: { params: { id: string }
}
});
return NextResponse.json(
{
success: true,
message: "Tugas berhasil dibatalkan",
},
{ status: 200 }
);
// create log user
const log = await createLogUser({ act: 'UPDATE', desc: 'User membatalkan tugas divisi', table: 'divisionProject', data: id })
return NextResponse.json({ success: true, message: "Tugas berhasil dibatalkan", }, { status: 200 });
} catch (error) {
console.error(error);
return NextResponse.json({ success: false, message: "Gagal membatalkan tugas, coba lagi nanti", reason: (error as Error).message, }, { status: 500 });
@@ -287,13 +284,10 @@ export async function PUT(request: Request, context: { params: { id: string } })
}
});
return NextResponse.json(
{
success: true,
message: "Tugas berhasil diedit",
},
{ status: 200 }
);
// create log user
const log = await createLogUser({ act: 'UPDATE', desc: 'User mengupdate data tugas divisi', table: 'divisionProject', data: id })
return NextResponse.json( { success: true, message: "Tugas berhasil diedit", }, { status: 200 } );
} catch (error) {
console.error(error);
return NextResponse.json({ success: false, message: "Gagal mengedit tugas, coba lagi nanti", reason: (error as Error).message, }, { status: 500 });

View File

@@ -1,5 +1,6 @@
import { prisma } from "@/module/_global";
import { funGetUserByCookies } from "@/module/auth";
import { createLogUser } from "@/module/user";
import _ from "lodash";
import moment from "moment";
import { NextResponse } from "next/server";
@@ -67,14 +68,10 @@ export async function DELETE(request: Request, context: { params: { id: string }
}
})
return NextResponse.json(
{
success: true,
message: "Tugas berhasil dihapus",
data,
},
{ status: 200 }
);
// create log user
const log = await createLogUser({ act: 'DELETE', desc: 'User menghapus detail task divisi', table: 'divisionProjectTask', data: id })
return NextResponse.json({ success: true, message: "Tugas berhasil dihapus", data, }, { status: 200 });
} catch (error) {
console.error(error);
return NextResponse.json({ success: false, message: "Gagal menghapus tugas divisi, coba lagi nanti", reason: (error as Error).message, }, { status: 500 });
@@ -146,14 +143,10 @@ export async function PUT(request: Request, context: { params: { id: string } })
}
})
return NextResponse.json(
{
success: true,
message: "Status detail tugas berhasil diupdate",
data,
},
{ status: 200 }
);
// create log user
const log = await createLogUser({ act: 'UPDATE', desc: 'User mengupdate status detail task divisi', table: 'divisionProjectTask', data: id })
return NextResponse.json({ success: true, message: "Status detail tugas berhasil diupdate", data, }, { status: 200 });
} catch (error) {
console.error(error);
return NextResponse.json({ success: false, message: "Gagal mengupdate status detail tugas, coba lagi nanti", reason: (error as Error).message, }, { status: 500 });
@@ -230,14 +223,10 @@ export async function POST(request: Request, context: { params: { id: string } }
},
});
return NextResponse.json(
{
success: true,
message: "Detail tugas berhasil diedit",
data,
},
{ status: 200 }
);
// create log user
const log = await createLogUser({ act: 'UPDATE', desc: 'User mengupdate data detail task divisi', table: 'divisionProjectTask', data: id })
return NextResponse.json({ success: true, message: "Detail tugas berhasil diedit", data, }, { status: 200 });
} catch (error) {
console.error(error);
return NextResponse.json({ success: false, message: "Gagal mengedit detail tugas, coba lagi nanti", reason: (error as Error).message, }, { status: 500 });

View File

@@ -4,6 +4,7 @@ import _ from "lodash";
import { NextResponse } from "next/server";
import fs from "fs";
import path from "path";
import { createLogUser } from "@/module/user";
// HAPUS DETAIL FILE, HAPUS FILE DI ASSETS DAN DATABASE (BUKAN PAKE ISACTIVE)
export async function DELETE(request: Request, context: { params: { id: string } }) {
@@ -55,15 +56,10 @@ export async function DELETE(request: Request, context: { params: { id: string }
},
});
// create log user
const log = await createLogUser({ act: 'DELETE', desc: 'User menghpus file divisi', table: 'divisionProject', data: String(dataRelasi?.idProject) })
return NextResponse.json(
{
success: true,
message: "File berhasil dihapus",
data,
},
{ status: 200 }
);
return NextResponse.json({ success: true, message: "File berhasil dihapus", data, }, { status: 200 });
} catch (error) {
console.error(error);
@@ -155,7 +151,8 @@ export async function POST(request: Request, context: { params: { id: string } }
})
}
// create log user
const log = await createLogUser({ act: 'CREATE', desc: 'User meambahkan file tugas divisi baru', table: 'divisionProject', data: id })
return NextResponse.json({ success: true, message: "Berhasil membuat tugas divisi" }, { status: 200 });
} catch (error) {

View File

@@ -5,6 +5,7 @@ import { NextResponse } from "next/server";
import path from "path";
import fs from "fs";
import moment from "moment";
import { createLogUser } from "@/module/user";
// GET ALL DATA TUGAS DIVISI
@@ -196,6 +197,9 @@ export async function POST(request: Request) {
})
}
// create log user
const log = await createLogUser({ act: 'CREATE', desc: 'User membuat tugas divisi baru', table: 'divisionProject', data: data.id })
return NextResponse.json({ success: true, message: "Berhasil membuat tugas divisi" }, { status: 200 });

View File

@@ -3,7 +3,6 @@ import { ActionIcon, Avatar, Badge, Box, Center, Divider, Flex, Grid, Group, Inp
import { globalRole, LayoutDrawer, LayoutNavbarNew, SkeletonDetailDiscussionComment, SkeletonDetailDiscussionMember, SkeletonSingle, WARNA } from "@/module/_global";
import { GrChatOption } from "react-icons/gr";
import { LuSendHorizonal } from "react-icons/lu";
import NavbarDetailDiscussion from "@/module/discussion/ui/navbar_detail_discussion";
import { useState } from "react";
import { funCreateComent, funGetAllDiscussion, funGetDiscussionById } from "../lib/api_discussion";
import { useShallowEffect } from "@mantine/hooks";
@@ -16,8 +15,7 @@ import { useHookstate } from "@hookstate/core";
import { globalRefreshDiscussion } from "../lib/val_discussion";
import { HiMenu } from "react-icons/hi";
import DrawerDetailDiscussion from "./drawer_detail_discussion";
import { funGetUserByCookies } from "@/module/auth";
import { funGetDivisionById } from "@/module/division_new";
import {globalIsAdminDivision } from "@/module/division_new";
export default function DetailDiscussion({ id, idDivision }: { id: string, idDivision: string }) {
const [isData, setData] = useState<IDetailDiscussion>()
@@ -27,20 +25,16 @@ export default function DetailDiscussion({ id, idDivision }: { id: string, idDiv
const router = useRouter()
const refresh = useHookstate(globalRefreshDiscussion)
const roleLogin = useHookstate(globalRole)
const [isAdmin, setAdmin] = useState(false)
const [isCreator, setCreator] = useState(false)
const adminLogin = useHookstate(globalIsAdminDivision)
const getData = async () => {
try {
setIsLoad(true)
const response = await funGetDiscussionById(id)
const res = await funGetDivisionById(param.id);
const login = await funGetUserByCookies()
const cek = res.data.member.some((i: any) => i.idUser == login.id && i.isAdmin == true)
setAdmin(cek)
setData(response.data)
setIsLoad(false)
setCreator(response.data.createdBy == login.id)
setCreator(response.data.isCreator)
} catch (error) {
console.error(error)
} finally {
@@ -52,19 +46,25 @@ export default function DetailDiscussion({ id, idDivision }: { id: string, idDiv
getData()
}, [refresh.get()])
async function reloadData() {
try {
const response = await funGetDiscussionById(id)
setData(response.data)
} catch (error) {
console.error(error)
}
}
const sendComent = async () => {
try {
if (isComent.trim() == "") {
return toast.error("Masukkan Komentar Anda")
}
const response = await funCreateComent(id, {
comment: isComent,
idDiscussion: param.detail
})
const response = await funCreateComent(id, { comment: isComent, idDiscussion: param.detail })
if (response.success) {
setIsComent("")
getData()
reloadData()
} else {
toast.error(response.message)
}
@@ -82,7 +82,7 @@ export default function DetailDiscussion({ id, idDivision }: { id: string, idDiv
{/* <NavbarDetailDiscussion id={id} status={Number(isData?.status)} idDivision={idDivision} /> */}
<LayoutNavbarNew back={`/division/${param.id}/discussion/`} title="Diskusi "
menu={
((roleLogin.get() != 'user' && roleLogin.get() != 'coadmin') || isAdmin || isCreator) ?
((roleLogin.get() != 'user' && roleLogin.get() != 'coadmin') || adminLogin.get() || isCreator) ?
<ActionIcon variant="light" onClick={() => setOpenDrawer(true)} bg={WARNA.bgIcon} size="lg" radius="lg" aria-label="Settings">
<HiMenu size={20} color='white' />
</ActionIcon>

View File

@@ -15,6 +15,8 @@ import EditDivision from './ui/edit_division';
import CreateReport from './ui/create_report';
import ReportDivisionId from './ui/report_division_id';
import { funGetDivisionById, funGetListDivisionByIdDivision, funGetSearchMemberDivision } from './lib/api_division';
import { globalIsAdminDivision } from './lib/val_division';
import WrapLayoutDivision from './ui/wrap_division';
export { CreateUsers };
export { CreateAdminDivision };
@@ -34,4 +36,6 @@ export { CreateReport }
export { ReportDivisionId }
export { funGetDivisionById }
export { funGetListDivisionByIdDivision }
export { funGetSearchMemberDivision }
export { funGetSearchMemberDivision }
export { globalIsAdminDivision }
export { WrapLayoutDivision }

View File

@@ -1,4 +1,5 @@
import { hookstate } from "@hookstate/core";
import { IFormMemberDivision } from "./type_division";
export const globalMemberDivision = hookstate<IFormMemberDivision[]>([]);
export const globalMemberDivision = hookstate<IFormMemberDivision[]>([]);
export const globalIsAdminDivision = hookstate<boolean>(false)

View File

@@ -0,0 +1,28 @@
'use client'
import { useHookstate } from "@hookstate/core";
import { useShallowEffect } from "@mantine/hooks";
import { globalIsAdminDivision } from "../lib/val_division";
import { funGetDivisionById } from "../lib/api_division";
import { useParams } from "next/navigation";
import { funGetUserByCookies } from "@/module/auth";
export default function WrapLayoutDivision({ children }: { children: React.ReactNode }) {
const isAdmin = useHookstate(globalIsAdminDivision)
const param = useParams<{ id: string }>()
const getData = async () => {
const res = await funGetDivisionById(param.id);
const login = await funGetUserByCookies()
const cek = res.data.member.some((i: any) => i.idUser == login.id && i.isAdmin == true)
isAdmin.set(cek)
}
useShallowEffect(() => {
getData()
}, [])
return (
<>
{children}
</>
);
}

View File

@@ -1,5 +1,5 @@
'use client'
import { LayoutDrawer, SkeletonSingle, WARNA } from "@/module/_global";
import { globalRole, LayoutDrawer, SkeletonSingle, WARNA } from "@/module/_global";
import { Box, Group, Flex, Avatar, Text, SimpleGrid, Stack, Grid } from "@mantine/core";
import { useShallowEffect } from "@mantine/hooks";
import { useParams, useRouter } from "next/navigation";
@@ -10,6 +10,8 @@ import { IDataMemberTaskDivision } from "../lib/type_task";
import { FaUser } from "react-icons/fa6";
import { IoIosCloseCircle } from "react-icons/io";
import LayoutModal from "@/module/_global/layout/layout_modal";
import { useHookstate } from "@hookstate/core";
import { globalIsAdminDivision } from "@/module/division_new";
export default function ListAnggotaDetailTask() {
@@ -20,6 +22,8 @@ export default function ListAnggotaDetailTask() {
const [isOpenModal, setOpenModal] = useState(false)
const [dataChoose, setDataChoose] = useState({ id: '', name: '' })
const router = useRouter()
const roleLogin = useHookstate(globalRole)
const adminLogin = useHookstate(globalIsAdminDivision)
async function getOneData() {
try {
@@ -140,15 +144,18 @@ export default function ListAnggotaDetailTask() {
<Text c={WARNA.biruTua}>Lihat profil</Text>
</Box>
</Flex>
<Flex onClick={() => { setOpenModal(true) }} justify={'center'} align={'center'} direction={'column'} >
<Box>
<IoIosCloseCircle size={30} color={WARNA.biruTua} />
</Box>
<Box>
<Text c={WARNA.biruTua}>Keluarkan anggota</Text>
</Box>
</Flex>
{
(roleLogin.get() != "user" && roleLogin.get() != "coadmin") || adminLogin.get() ?
<Flex onClick={() => { setOpenModal(true) }} justify={'center'} align={'center'} direction={'column'} >
<Box>
<IoIosCloseCircle size={30} color={WARNA.biruTua} />
</Box>
<Box>
<Text c={WARNA.biruTua}>Keluarkan anggota</Text>
</Box>
</Flex>
: <></>
}
</SimpleGrid>
</Stack>
</Box>

View File

@@ -1,5 +1,5 @@
import { WARNA } from "@/module/_global";
import { ActionIcon, Avatar, Badge, Box, Card, Center, Divider, Flex, Grid, Group, Progress, Skeleton, Text, TextInput, Title } from "@mantine/core";
import { ActionIcon, Avatar, Box, Card, Center, Divider, Flex, Grid, Group, Progress, Skeleton, Text, TextInput, Title } from "@mantine/core";
import { useParams, useRouter, useSearchParams } from "next/navigation";
import { useState } from "react";
import { HiMagnifyingGlass, HiMiniPresentationChartBar, HiOutlineListBullet, HiSquares2X2 } from "react-icons/hi2";
@@ -67,6 +67,7 @@ export default function ListDivisionTask() {
radius={30}
leftSection={<HiMagnifyingGlass size={20} />}
placeholder="Pencarian"
onChange={(val) => setSearchQuery(val.target.value)}
/>
</Grid.Col>
<Grid.Col span={'auto'}>
@@ -181,7 +182,7 @@ export default function ListDivisionTask() {
<Avatar>
<MdAccountCircle size={32} color={WARNA.biruTua} />
</Avatar>
<Avatar>+{v.member - 1}</Avatar>
<Avatar>{(v.member == 0) ? "0" : "+" + (v.member - 1)}</Avatar>
</Avatar.Group>
</Group>
</Box>

View File

@@ -1,5 +1,5 @@
'use client'
import { LayoutDrawer, LayoutNavbarNew, WARNA } from "@/module/_global";
import { globalRole, LayoutDrawer, LayoutNavbarNew, WARNA } from "@/module/_global";
import { ActionIcon, Box, Flex, SimpleGrid, Stack, Text } from "@mantine/core";
import { useParams, useRouter } from "next/navigation";
import { useState } from "react";
@@ -10,12 +10,16 @@ import { HiMenu } from "react-icons/hi";
import { IoAddCircle } from "react-icons/io5";
import { FaFileCirclePlus, FaPencil, FaUsers } from "react-icons/fa6";
import { MdCancel } from "react-icons/md";
import { globalIsAdminDivision } from "@/module/division_new";
import { useHookstate } from "@hookstate/core";
export default function NavbarDetailDivisionTask() {
const router = useRouter()
const param = useParams<{ id: string, detail: string }>()
const [name, setName] = useState('')
const [isOpen, setOpen] = useState(false)
const roleLogin = useHookstate(globalRole)
const adminLogin = useHookstate(globalIsAdminDivision)
async function getOneData() {
try {
@@ -75,22 +79,6 @@ export default function NavbarDetailDivisionTask() {
</Box>
</Flex>
<Flex justify={'center'} align={'center'} direction={'column'}
style={{
cursor: 'pointer'
}}
onClick={() => {
router.push(param.detail + '/add-member')
}}
>
<Box>
<FaUsers size={30} color={WARNA.biruTua} />
</Box>
<Box>
<Text c={WARNA.biruTua} ta='center'>Tambah anggota</Text>
</Box>
</Flex>
<Flex justify={'center'} align={'center'} direction={'column'}
style={{
cursor: 'pointer'
@@ -107,33 +95,51 @@ export default function NavbarDetailDivisionTask() {
</Box>
</Flex>
<Flex justify={'center'} align={'center'} direction={'column'}
style={{
cursor: 'pointer'
}}
onClick={() => { router.push(param.detail + '/edit') }}
>
<Box>
<FaPencil size={30} color={WARNA.biruTua} />
</Box>
<Box>
<Text c={WARNA.biruTua} ta='center'>Edit</Text>
</Box>
</Flex>
{
(roleLogin.get() != "user" && roleLogin.get() != "coadmin") || adminLogin.get() ?
<>
<Flex justify={'center'} align={'center'} direction={'column'}
style={{
cursor: 'pointer'
}}
onClick={() => { router.push(param.detail + '/add-member') }} >
<Box>
<FaUsers size={30} color={WARNA.biruTua} />
</Box>
<Box>
<Text c={WARNA.biruTua} ta='center'>Tambah anggota</Text>
</Box>
</Flex>
<Flex justify={'center'} align={'center'} direction={'column'}
style={{
cursor: 'pointer'
}}
onClick={() => { router.push(param.detail + '/edit') }} >
<Box>
<FaPencil size={30} color={WARNA.biruTua} />
</Box>
<Box>
<Text c={WARNA.biruTua} ta='center'>Edit</Text>
</Box>
</Flex>
<Flex justify={'center'} align={'center'} direction={'column'}
style={{
cursor: 'pointer'
}}
onClick={() => { router.push(param.detail + '/cancel') }} >
<Box>
<MdCancel size={30} color={WARNA.biruTua} />
</Box>
<Box>
<Text c={WARNA.biruTua} ta='center'>Batal</Text>
</Box>
</Flex>
</> : <></>
}
<Flex justify={'center'} align={'center'} direction={'column'}
style={{
cursor: 'pointer'
}}
onClick={() => { router.push(param.detail + '/cancel') }}
>
<Box>
<MdCancel size={30} color={WARNA.biruTua} />
</Box>
<Box>
<Text c={WARNA.biruTua} ta='center'>Batal</Text>
</Box>
</Flex>
</SimpleGrid>
</Stack>

View File

@@ -1,21 +1,27 @@
'use client'
import { LayoutDrawer, LayoutNavbarNew, WARNA } from "@/module/_global";
import { globalRole, LayoutDrawer, LayoutNavbarNew, WARNA } from "@/module/_global";
import { ActionIcon } from "@mantine/core";
import { useState } from "react";
import { HiMenu } from "react-icons/hi";
import DrawerDivisionTask from "./drawer_division_task";
import { useParams } from "next/navigation";
import { useHookstate } from "@hookstate/core";
import { globalIsAdminDivision } from "@/module/division_new";
export default function NavbarDivisionTask() {
const [openDrawer, setOpenDrawer] = useState(false)
const param = useParams<{ id: string}>()
const param = useParams<{ id: string }>()
const roleLogin = useHookstate(globalRole)
const adminLogin = useHookstate(globalIsAdminDivision)
return (
<>
<LayoutNavbarNew back={`/division/${param.id}`} title="Divisi - Tugas"
menu={
menu={((roleLogin.get() != "user" && roleLogin.get() != "coadmin") || adminLogin.get()) ?
<ActionIcon variant="light" onClick={() => setOpenDrawer(true)} bg={WARNA.bgIcon} size="lg" radius="lg" aria-label="Settings">
<HiMenu size={20} color='white' />
</ActionIcon>
: <></>
}
/>
<LayoutDrawer opened={openDrawer} title={'Menu'} onClose={() => setOpenDrawer(false)}>

View File

@@ -17,26 +17,26 @@ export default function TabsDivisionTask() {
const dataStatus = [
{
id: "0",
title: "Segera",
icon: <RiProgress3Line style={iconStyle} />
id: "0",
title: "Segera",
icon: <TbClockPause style={iconStyle} />
},
{
id: "1",
title: "Dikerjakan",
icon: <TbClockPause style={iconStyle} />
id: "1",
title: "Dikerjakan",
icon: <RiProgress3Line style={iconStyle} />
},
{
id: "2",
title: "Selesai",
icon: <IoIosCheckmarkCircleOutline style={iconStyle} />
id: "2",
title: "Selesai",
icon: <IoIosCheckmarkCircleOutline style={iconStyle} />
},
{
id: "3",
title: "Batal",
icon: <IoCloseCircleOutline style={iconStyle} />
id: "3",
title: "Batal",
icon: <IoCloseCircleOutline style={iconStyle} />
}
]
]
return (
<Box p={20}>
@@ -77,7 +77,7 @@ export default function TabsDivisionTask() {
color={
status == item.id
? "white"
: WARNA.biruTua
: (status == null && item.id == "0") ? "white" : WARNA.biruTua
}
onClick={() => { router.push("?status=" + item.id) }}
defaultValue={(status == "1" || status == "2" || status == "3") ? status : "0"}
@@ -85,7 +85,7 @@ export default function TabsDivisionTask() {
bg={
status == item.id
? "#FF9861"
: "transparent"
: (status == null && item.id == "0") ? "#FF9861" : "transparent"
}
>
{item.icon}