diff --git a/src/app/(application)/division/[id]/layout.tsx b/src/app/(application)/division/[id]/layout.tsx
new file mode 100644
index 0000000..f6b429c
--- /dev/null
+++ b/src/app/(application)/division/[id]/layout.tsx
@@ -0,0 +1,12 @@
+import { WrapLayoutDivision } from "@/module/division_new";
+import _ from "lodash"
+
+export default async function Layout({ children }: { children: React.ReactNode }) {
+ return (
+ <>
+
+ {children}
+
+ >
+ );
+}
\ No newline at end of file
diff --git a/src/app/api/discussion/[id]/comment/route.ts b/src/app/api/discussion/[id]/comment/route.ts
index 13089aa..338ef78 100644
--- a/src/app/api/discussion/[id]/comment/route.ts
+++ b/src/app/api/discussion/[id]/comment/route.ts
@@ -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) {
diff --git a/src/app/api/discussion/[id]/route.ts b/src/app/api/discussion/[id]/route.ts
index 00d0936..a87bcd3 100644
--- a/src/app/api/discussion/[id]/route.ts
+++ b/src/app/api/discussion/[id]/route.ts
@@ -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) {
diff --git a/src/app/api/discussion/route.ts b/src/app/api/discussion/route.ts
index 46e9be1..c00992d 100644
--- a/src/app/api/discussion/route.ts
+++ b/src/app/api/discussion/route.ts
@@ -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);
diff --git a/src/app/api/document/more/route.ts b/src/app/api/document/more/route.ts
index 032ce71..89b5bfc 100644
--- a/src/app/api/document/more/route.ts
+++ b/src/app/api/document/more/route.ts
@@ -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) {
diff --git a/src/app/api/document/route.ts b/src/app/api/document/route.ts
index 64123de..c34cd03 100644
--- a/src/app/api/document/route.ts
+++ b/src/app/api/document/route.ts
@@ -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) {
diff --git a/src/app/api/document/upload/route.ts b/src/app/api/document/upload/route.ts
index 1739032..eb9095b 100644
--- a/src/app/api/document/upload/route.ts
+++ b/src/app/api/document/upload/route.ts
@@ -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);
diff --git a/src/app/api/group/[id]/route.ts b/src/app/api/group/[id]/route.ts
index a3a23ec..2c9652f 100644
--- a/src/app/api/group/[id]/route.ts
+++ b/src/app/api/group/[id]/route.ts
@@ -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 });
diff --git a/src/app/api/group/route.ts b/src/app/api/group/route.ts
index 4987ff4..7a6c886 100644
--- a/src/app/api/group/route.ts
+++ b/src/app/api/group/route.ts
@@ -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);
diff --git a/src/app/api/task/[id]/member/route.ts b/src/app/api/task/[id]/member/route.ts
index 5792e65..caf5f77 100644
--- a/src/app/api/task/[id]/member/route.ts
+++ b/src/app/api/task/[id]/member/route.ts
@@ -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 });
diff --git a/src/app/api/task/[id]/route.ts b/src/app/api/task/[id]/route.ts
index b489e7f..1b613c4 100644
--- a/src/app/api/task/[id]/route.ts
+++ b/src/app/api/task/[id]/route.ts
@@ -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 });
diff --git a/src/app/api/task/detail/[id]/route.ts b/src/app/api/task/detail/[id]/route.ts
index 461c0ae..4989183 100644
--- a/src/app/api/task/detail/[id]/route.ts
+++ b/src/app/api/task/detail/[id]/route.ts
@@ -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 });
diff --git a/src/app/api/task/file/[id]/route.ts b/src/app/api/task/file/[id]/route.ts
index e0d8c1f..429e74a 100644
--- a/src/app/api/task/file/[id]/route.ts
+++ b/src/app/api/task/file/[id]/route.ts
@@ -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) {
diff --git a/src/app/api/task/route.ts b/src/app/api/task/route.ts
index d49eafd..76d524a 100644
--- a/src/app/api/task/route.ts
+++ b/src/app/api/task/route.ts
@@ -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 });
diff --git a/src/module/discussion/ui/detail_discussion.tsx b/src/module/discussion/ui/detail_discussion.tsx
index ee87f58..4215192 100644
--- a/src/module/discussion/ui/detail_discussion.tsx
+++ b/src/module/discussion/ui/detail_discussion.tsx
@@ -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()
@@ -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
{/* */}
setOpenDrawer(true)} bg={WARNA.bgIcon} size="lg" radius="lg" aria-label="Settings">
diff --git a/src/module/division_new/index.ts b/src/module/division_new/index.ts
index 033e9b5..d9724fc 100644
--- a/src/module/division_new/index.ts
+++ b/src/module/division_new/index.ts
@@ -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 }
\ No newline at end of file
+export { funGetSearchMemberDivision }
+export { globalIsAdminDivision }
+export { WrapLayoutDivision }
\ No newline at end of file
diff --git a/src/module/division_new/lib/val_division.ts b/src/module/division_new/lib/val_division.ts
index 2d769e0..e756a7e 100644
--- a/src/module/division_new/lib/val_division.ts
+++ b/src/module/division_new/lib/val_division.ts
@@ -1,4 +1,5 @@
import { hookstate } from "@hookstate/core";
import { IFormMemberDivision } from "./type_division";
-export const globalMemberDivision = hookstate([]);
\ No newline at end of file
+export const globalMemberDivision = hookstate([]);
+export const globalIsAdminDivision = hookstate(false)
\ No newline at end of file
diff --git a/src/module/division_new/ui/wrap_division.tsx b/src/module/division_new/ui/wrap_division.tsx
new file mode 100644
index 0000000..53e5dd2
--- /dev/null
+++ b/src/module/division_new/ui/wrap_division.tsx
@@ -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}
+ >
+ );
+}
\ No newline at end of file
diff --git a/src/module/task/ui/detail_list_anggota_task.tsx b/src/module/task/ui/detail_list_anggota_task.tsx
index 1f303e4..b1fc81b 100644
--- a/src/module/task/ui/detail_list_anggota_task.tsx
+++ b/src/module/task/ui/detail_list_anggota_task.tsx
@@ -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() {
Lihat profil
-
- { setOpenModal(true) }} justify={'center'} align={'center'} direction={'column'} >
-
-
-
-
- Keluarkan anggota
-
-
+ {
+ (roleLogin.get() != "user" && roleLogin.get() != "coadmin") || adminLogin.get() ?
+ { setOpenModal(true) }} justify={'center'} align={'center'} direction={'column'} >
+
+
+
+
+ Keluarkan anggota
+
+
+ : <>>
+ }
diff --git a/src/module/task/ui/list_division_task.tsx b/src/module/task/ui/list_division_task.tsx
index 76130c1..02bbea4 100644
--- a/src/module/task/ui/list_division_task.tsx
+++ b/src/module/task/ui/list_division_task.tsx
@@ -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={}
placeholder="Pencarian"
+ onChange={(val) => setSearchQuery(val.target.value)}
/>
@@ -181,7 +182,7 @@ export default function ListDivisionTask() {
- +{v.member - 1}
+ {(v.member == 0) ? "0" : "+" + (v.member - 1)}
diff --git a/src/module/task/ui/navbar_detail_division_task.tsx b/src/module/task/ui/navbar_detail_division_task.tsx
index f7f2356..3159ec9 100644
--- a/src/module/task/ui/navbar_detail_division_task.tsx
+++ b/src/module/task/ui/navbar_detail_division_task.tsx
@@ -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() {
- {
- router.push(param.detail + '/add-member')
- }}
- >
-
-
-
-
- Tambah anggota
-
-
-
- { router.push(param.detail + '/edit') }}
- >
-
-
-
-
- Edit
-
-
+ {
+ (roleLogin.get() != "user" && roleLogin.get() != "coadmin") || adminLogin.get() ?
+ <>
+ { router.push(param.detail + '/add-member') }} >
+
+
+
+
+ Tambah anggota
+
+
+
+ { router.push(param.detail + '/edit') }} >
+
+
+
+
+ Edit
+
+
+
+ { router.push(param.detail + '/cancel') }} >
+
+
+
+
+ Batal
+
+
+ > : <>>
+
+ }
- { router.push(param.detail + '/cancel') }}
- >
-
-
-
-
- Batal
-
-
diff --git a/src/module/task/ui/navbar_division_task.tsx b/src/module/task/ui/navbar_division_task.tsx
index 1fbcbe4..dee616f 100644
--- a/src/module/task/ui/navbar_division_task.tsx
+++ b/src/module/task/ui/navbar_division_task.tsx
@@ -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 (
<>
setOpenDrawer(true)} bg={WARNA.bgIcon} size="lg" radius="lg" aria-label="Settings">
+ : <>>
}
/>
setOpenDrawer(false)}>
diff --git a/src/module/task/ui/tabs_division_task.tsx b/src/module/task/ui/tabs_division_task.tsx
index 1519ae6..69b2c48 100644
--- a/src/module/task/ui/tabs_division_task.tsx
+++ b/src/module/task/ui/tabs_division_task.tsx
@@ -17,26 +17,26 @@ export default function TabsDivisionTask() {
const dataStatus = [
{
- id: "0",
- title: "Segera",
- icon:
+ id: "0",
+ title: "Segera",
+ icon:
},
{
- id: "1",
- title: "Dikerjakan",
- icon:
+ id: "1",
+ title: "Dikerjakan",
+ icon:
},
{
- id: "2",
- title: "Selesai",
- icon:
+ id: "2",
+ title: "Selesai",
+ icon:
},
{
- id: "3",
- title: "Batal",
- icon:
+ id: "3",
+ title: "Batal",
+ icon:
}
- ]
+ ]
return (
@@ -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}