diff --git a/src/app/(application)/announcement/[id]/page.tsx b/src/app/(application)/announcement/[id]/page.tsx
index 872826e..8bd5211 100644
--- a/src/app/(application)/announcement/[id]/page.tsx
+++ b/src/app/(application)/announcement/[id]/page.tsx
@@ -1,8 +1,12 @@
-import { ViewDetailAnnouncement } from "@/module/announcement";
+import { DetailAnnouncement, NavbarDetailAnnouncement } from "@/module/announcement";
+import { Box } from "@mantine/core";
function Page({ params }: { params: { id: string } }) {
return (
-
+
+
+
+
)
}
diff --git a/src/app/(application)/announcement/edit/[id]/page.tsx b/src/app/(application)/announcement/edit/[id]/page.tsx
index 11a0820..31ddb52 100644
--- a/src/app/(application)/announcement/edit/[id]/page.tsx
+++ b/src/app/(application)/announcement/edit/[id]/page.tsx
@@ -1,9 +1,11 @@
-// import { ViewEditAnnouncement } from "@/module/announcement";
+import { EditAnnouncement } from "@/module/announcement";
+import { Box } from "@mantine/core";
function Page({ params }: { params: { id: any } }) {
return (
- //
- ""
+
+
+
)
}
diff --git a/src/app/api/announcement/[id]/route.ts b/src/app/api/announcement/[id]/route.ts
index 6f86b70..95535bd 100644
--- a/src/app/api/announcement/[id]/route.ts
+++ b/src/app/api/announcement/[id]/route.ts
@@ -3,15 +3,19 @@ import { funGetUserByCookies } from "@/module/auth";
import _ from "lodash";
import { NextResponse } from "next/server";
+
+
+// GET ONE PENGUMUMAN, UNTUK TAMPIL DETAIL PENGUMUMAN
export async function GET(request: Request, context: { params: { id: string } }) {
try {
const { id } = context.params;
+ const { searchParams } = new URL(request.url);
+ const kategori = searchParams.get('category');
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 announcementId = searchParams.get("announcement");
+
const announcement = await prisma.announcement.findUnique({
where: {
id: id,
@@ -22,12 +26,12 @@ export async function GET(request: Request, context: { params: { id: string } })
desc: true,
},
});
+
const announcementMember = await prisma.announcementMember.findMany({
where: {
idAnnouncement: id,
},
select: {
- idAnnouncement: true,
idGroup: true,
idDivision: true,
Group: {
@@ -35,24 +39,162 @@ export async function GET(request: Request, context: { params: { id: string } })
name: true,
},
},
+ Division: {
+ select: {
+ name: true,
+ },
+ },
},
});
- const allAnnouncementMember = announcementMember.map((v: any) => ({
- ..._.omit(v, ["Group"]),
+ const formatMember = announcementMember.map((v: any) => ({
+ ..._.omit(v, ["Group", "Division"]),
+ idGroup: v.idGroup,
+ idDivision: v.idDivision,
group: v.Group.name,
+ division: v.Division.name
}))
+ const fixMember = Object.groupBy(formatMember, ({ group }) => group);
+
return NextResponse.json(
{
success: true,
message: "Berhasil mendapatkan announcement",
- announcement, allAnnouncementMember
+ data: announcement,
+ member: fixMember
},
{ status: 200 }
);
+
+
+
} catch (error) {
console.error(error);
return NextResponse.json({ success: false, message: "Gagal mendapatkan announcement, coba lagi nanti", reason: (error as Error).message, }, { status: 500 });
}
-}
\ No newline at end of file
+}
+
+
+
+// HAPUS PENGUMUMAN
+export async function DELETE(request: Request, context: { params: { id: string } }) {
+ try {
+ const user = await funGetUserByCookies()
+ if (user.id == undefined) {
+ return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 });
+ }
+ const { id } = context.params;
+ const data = await prisma.announcement.count({
+ where: {
+ id: id,
+ },
+ });
+
+ if (data == 0) {
+ return NextResponse.json(
+ {
+ success: false,
+ message: "Hapus pengumuman gagal, data tidak ditemukan",
+ },
+ { status: 404 }
+ );
+ }
+
+ const update = await prisma.announcement.update({
+ where: {
+ id: id,
+ },
+ data: {
+ isActive: false,
+ },
+ });
+
+ return NextResponse.json(
+ {
+ success: true,
+ message: "Pengumuman berhasil dihapus",
+ data,
+ },
+ { status: 200 }
+ );
+ } catch (error) {
+ console.log(error);
+ return NextResponse.json({ success: false, message: "Gagal mendapatkan pengumuman, coba lagi nanti", reason: (error as Error).message, }, { status: 500 });
+ }
+}
+
+
+
+// EDIT PENGUMUMAN
+export async function PUT(request: Request, context: { params: { id: string } }) {
+ try {
+ const user = await funGetUserByCookies();
+ if (user.id == undefined) {
+ return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 });
+ }
+
+
+ const { title, desc, groups } = (await request.json());
+ const { id } = context.params;
+
+ const data = await prisma.announcement.count({
+ where: {
+ id: id,
+ },
+ });
+
+ if (data == 0) {
+ return NextResponse.json(
+ {
+ success: false,
+ message: "Hapus pengumuman gagal, data tidak ditemukan",
+ },
+ { status: 404 }
+ );
+ }
+
+ const update = await prisma.announcement.update({
+ where: {
+ id: id
+ },
+ data: {
+ title,
+ desc,
+ },
+ });
+
+ // hapus semua member divisi pengumuman
+ const hapus = await prisma.announcementMember.deleteMany({
+ where: {
+ idAnnouncement: id
+ }
+ })
+
+ let memberDivision = []
+
+ for (var i = 0, l = groups.length; i < l; i++) {
+ var obj = groups[i].Division;
+ for (let index = 0; index < obj.length; index++) {
+ const element = obj[index];
+ const fix = {
+ idAnnouncement: id,
+ idGroup: groups[i].id,
+ idDivision: element.id
+ }
+ memberDivision.push(fix)
+ }
+ }
+
+ const announcementMember = await prisma.announcementMember.createMany({
+ data: memberDivision,
+ });
+
+ return NextResponse.json({ success: true, message: "Berhasil mengedit pengumuman" }, { status: 200 });
+
+ } catch (error) {
+ console.error(error);
+ return NextResponse.json({ success: false, message: "Gagal mengedit pengumuman, coba lagi nanti", reason: (error as Error).message, }, { status: 500 });
+ }
+}
+
diff --git a/src/app/api/announcement/get/route.ts b/src/app/api/announcement/get/route.ts
deleted file mode 100644
index baf9e82..0000000
--- a/src/app/api/announcement/get/route.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { apiAnnouncement } from "@/module/announcement";
-import { NextRequest } from "next/server";
-
-export async function GET(req: NextRequest) {
- return apiAnnouncement(req, "GET")
-}
\ No newline at end of file
diff --git a/src/app/api/announcement/post/route.ts b/src/app/api/announcement/post/route.ts
deleted file mode 100644
index 138ee81..0000000
--- a/src/app/api/announcement/post/route.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { apiAnnouncement } from "@/module/announcement";
-import { NextRequest } from "next/server";
-
-export async function POST(req: NextRequest) {
- return apiAnnouncement(req, "POST");
-}
diff --git a/src/app/api/announcement/route.ts b/src/app/api/announcement/route.ts
index c3c2af1..90cfd9c 100644
--- a/src/app/api/announcement/route.ts
+++ b/src/app/api/announcement/route.ts
@@ -7,6 +7,10 @@ import "moment/locale/id";
import { NextResponse } from "next/server";
export const dynamic = 'force-dynamic'
+
+
+
+// GET ALL PENGUMUMAN
export async function GET(request: Request) {
try {
const user = await funGetUserByCookies();
@@ -32,6 +36,9 @@ export async function GET(request: Request) {
desc: true,
createdAt: true,
},
+ orderBy: {
+ createdAt: 'desc'
+ }
});
const allData = announcements.map((v: any) => ({
@@ -47,6 +54,8 @@ export async function GET(request: Request) {
}
+
+// CREATE PENGUMUMAN
export async function POST(request: Request) {
try {
const user = await funGetUserByCookies();
@@ -54,40 +63,45 @@ export async function POST(request: Request) {
return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 });
}
- const { title, desc, createBy, groups } = (await request.json());
+ const { title, desc, groups } = (await request.json());
const villaId = user.idVillage
- const roleId = user.idUserRole
+ const userId = user.id
const data = await prisma.announcement.create({
data: {
title,
desc,
idVillage: String(villaId),
- createdBy: String(roleId),
+ createdBy: String(userId),
},
select: {
id: true,
- title: true,
- desc: true,
- createdAt: true,
}
});
- const dataMember = groups.map((group: any) => ({
- idAnnouncement: data.id,
- idGroup: group.idGroup,
- idDivision: group.idDivision,
- isActive: true,
- }));
+ let memberDivision = []
+
+ for (var i = 0, l = groups.length; i < l; i++) {
+ var obj = groups[i].Division;
+ for (let index = 0; index < obj.length; index++) {
+ const element = obj[index];
+ const fix = {
+ idAnnouncement: data.id,
+ idGroup: groups[i].id,
+ idDivision: element.id
+ }
+ memberDivision.push(fix)
+ }
+ }
const announcementMember = await prisma.announcementMember.createMany({
- data: dataMember,
+ data: memberDivision,
});
- return NextResponse.json({data, groups: announcementMember, success: true, message: "Berhasil mendapatkan pengumuman"}, { status: 200 });
+ return NextResponse.json({ success: true, message: "Berhasil membuat pengumuman" }, { status: 200 });
} catch (error) {
console.error(error);
- return NextResponse.json({ success: false, message: "Gagal mendapatkan pengumuman, coba lagi nanti", reason: (error as Error).message, }, { status: 500 });
+ return NextResponse.json({ success: false, message: "Gagal membuat pengumuman, coba lagi nanti", reason: (error as Error).message, }, { status: 500 });
}
}
\ No newline at end of file
diff --git a/src/app/api/user/route.ts b/src/app/api/user/route.ts
index 37d587d..1d7f3b0 100644
--- a/src/app/api/user/route.ts
+++ b/src/app/api/user/route.ts
@@ -25,7 +25,7 @@ export async function GET(request: Request) {
const users = await prisma.user.findMany({
where: {
- isActive: active == "true" ? true : false,
+ isActive: active == 'false' ? false : true,
idGroup: String(fixGroup),
name: {
contains: (name == undefined || name == null) ? "" : name,
diff --git a/src/module/announcement/api/api_announcement.ts b/src/module/announcement/api/api_announcement.ts
deleted file mode 100644
index 91a75cb..0000000
--- a/src/module/announcement/api/api_announcement.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { NextRequest } from "next/server";
-import { API_INDEX_ANNOUNCEMENT } from "./api_index";
-
-type Method = "GET" | "POST";
-export async function apiAnnouncement(req: NextRequest, method: Method) {
- const { searchParams } = new URL(req.url);
- const path = searchParams.get("path");
- const act = API_INDEX_ANNOUNCEMENT.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" });
-}
diff --git a/src/module/announcement/api/api_index.ts b/src/module/announcement/api/api_index.ts
deleted file mode 100644
index deed158..0000000
--- a/src/module/announcement/api/api_index.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import { getAllAnnouncement } from "./get/getAllAnnouncement";
-import { getOneAnnouncement } from "./get/getOneAnnouncement";
-import { getUserAnnouncement } from "./get/getUserAnnouncement";
-import { createAnnouncement } from "./post/createAnnouncement";
-import { deleteAnnouncement } from "./post/deleteAnnouncement";
-import { updateAnnouncement } from "./post/updateAnnouncement";
-
-export const API_INDEX_ANNOUNCEMENT = [
- {
- path: "get-all-announcement",
- method: "GET",
- bin: getAllAnnouncement,
- },
- {
- path: "get-one-announcement",
- method: "GET",
- bin: getOneAnnouncement,
- },
- {
- path: "get-user-announcement",
- method: "GET",
- bin: getUserAnnouncement,
- },
- {
- path: "create-announcement",
- method: "POST",
- bin: createAnnouncement,
- },
- {
- path: "update-announcement",
- method: "POST",
- bin: updateAnnouncement,
- },
- {
- path: "delete-announcement",
- method: "POST",
- bin: deleteAnnouncement,
- },
- ];
-
\ No newline at end of file
diff --git a/src/module/announcement/api/get/getAllAnnouncement.ts b/src/module/announcement/api/get/getAllAnnouncement.ts
deleted file mode 100644
index c4042b0..0000000
--- a/src/module/announcement/api/get/getAllAnnouncement.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-import { prisma } from "@/module/_global";
-import { funGetUserByCookies } from "@/module/auth";
-import _ from "lodash";
-import moment from "moment";
-import "moment/locale/id";
-import { NextRequest } from "next/server";
-
-export async function getAllAnnouncement(req: NextRequest) {
- try {
- const user = await funGetUserByCookies();
- const villageId = user.idVillage
- const announcements = await prisma.announcement.findMany({
- where: {
- idVillage: String(villageId),
- isActive: true,
- },
- select: {
- id: true,
- title: true,
- desc: true,
- createdAt: true,
- },
- });
-
- const allData = announcements.map((v: any) => ({
- ..._.omit(v, ["createdAt"]),
- createdAt: moment(v.createdAt).format("LL")
- }))
-
- return Response.json(allData);
- } catch (error) {
- console.error(error);
- return Response.json(
- { message: "Internal Server Error", success: false },
- { status: 500 }
- );
- }
-}
diff --git a/src/module/announcement/api/get/getOneAnnouncement.ts b/src/module/announcement/api/get/getOneAnnouncement.ts
deleted file mode 100644
index 2d9e164..0000000
--- a/src/module/announcement/api/get/getOneAnnouncement.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-import { prisma } from "@/module/_global";
-import _ from "lodash";
-import { NextRequest } from "next/server";
-
-export async function getOneAnnouncement(req: NextRequest) {
- try {
- const searchParams = req.nextUrl.searchParams;
- const announcementId = searchParams.get("announcementId");
- const announcement = await prisma.announcement.findUnique({
- where: {
- id: String(announcementId),
- },
- select: {
- id: true,
- title: true,
- desc: true,
- },
- });
- const announcementMember = await prisma.announcementMember.findMany({
- where: {
- idAnnouncement: String(announcementId),
- },
- select: {
- idAnnouncement: true,
- idGroup: true,
- idDivision: true,
- Group: {
- select: {
- name: true,
- },
- },
- },
- });
-
- const allAnnouncementMember = announcementMember.map((v: any) => ({
- ..._.omit(v, ["Group"]),
- group: v.Group.name,
- }))
-
-
- return Response.json({ announcement, allAnnouncementMember });
- } catch (error) {
- console.error(error);
- return Response.json(
- { message: "Internal Server Error", success: false },
- { status: 500 }
- );
- }
-}
diff --git a/src/module/announcement/api/get/getUserAnnouncement.ts b/src/module/announcement/api/get/getUserAnnouncement.ts
deleted file mode 100644
index c667173..0000000
--- a/src/module/announcement/api/get/getUserAnnouncement.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-import { prisma } from "@/module/_global";
-import { funGetUserByCookies } from "@/module/auth";
-import { revalidatePath, revalidateTag } from "next/cache";
-import { NextRequest, NextResponse } from "next/server";
-
-export const dynamic = 'force-dynamic'
-export const revalidate = true
-export async function getUserAnnouncement(req: NextRequest) {
- try {
- const user = await funGetUserByCookies()
- if (user.id == undefined) {
- return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 });
- }
-
- const villaId = user.idVillage
- const data = await prisma.group.findMany({
- where: {
- isActive: true,
- idVillage: String(villaId)
- },
- select: {
- id: true,
- name: true,
- Division: {
- select: {
- id: true,
- name: true
- }
- }
- }
- });
-
- return NextResponse.json({ success: true, message: "Berhasil mendapatkan grup", data, }, { status: 200 });
-
- } catch (error) {
- console.log(error);
- return NextResponse.json({ success: false, message: "Gagal mendapatkan grup, coba lagi nanti", reason: (error as Error).message, }, { status: 500 });
- }
-}
diff --git a/src/module/announcement/api/post/createAnnouncement.ts b/src/module/announcement/api/post/createAnnouncement.ts
deleted file mode 100644
index 039986b..0000000
--- a/src/module/announcement/api/post/createAnnouncement.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-import { prisma } from "@/module/_global";
-import { NextRequest } from "next/server";
-
-export async function createAnnouncement(req: NextRequest) {
- try {
- const data = await req.json();
- const announcement = await prisma.announcement.create({
- data: {
- title: data.title,
- desc: data.desc,
- idVillage: data.idVillage,
- createdBy: data.createBy,
- isActive: true,
- },
- select: {
- id: true,
- title: true,
- desc: true,
- },
- });
-
- const dataMember = data.groups.map((group: any) => ({
- idAnnoucement: announcement.id,
- idGroup: group.idGroup,
- idDivision: group.idDivision,
- isActive: true,
- }));
-
- const announcementMember = await prisma.announcementMember.createMany({
- data: dataMember,
- });
-
- return Response.json({
- announcement: announcement,
- announcementMember: announcementMember,
- });
- } catch (error) {
- console.error(error);
- return Response.json(
- { message: "Internal Server Error", success: false },
- { status: 500 }
- );
- }
-}
diff --git a/src/module/announcement/api/post/deleteAnnouncement.ts b/src/module/announcement/api/post/deleteAnnouncement.ts
deleted file mode 100644
index a0a6044..0000000
--- a/src/module/announcement/api/post/deleteAnnouncement.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import { prisma } from "@/module/_global";
-import { NextRequest } from "next/server";
-
-export async function deleteAnnouncement(req: NextRequest) {
- try {
- const data = await req.json();
- const update = await prisma.announcement.update({
- where: {
- id: data.id,
- },
- data: {
- isActive: false,
- },
- });
-
- return Response.json(
- { success: true, message: "Sukses Delete Announcement" },
- { status: 200 }
- );
- } catch (error) {
- console.error(error);
- return Response.json(
- { message: "Internal Server Error", success: false },
- { status: 500 }
- );
- }
-}
diff --git a/src/module/announcement/api/post/updateAnnouncement.ts b/src/module/announcement/api/post/updateAnnouncement.ts
deleted file mode 100644
index 0f5059b..0000000
--- a/src/module/announcement/api/post/updateAnnouncement.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-import { prisma } from "@/module/_global";
-import { NextRequest } from "next/server";
-
-export async function updateAnnouncement(req: NextRequest) {
- try {
- const data = await req.json();
- const udpate = await prisma.announcement.update({
- where: {
- id: data.id,
- },
- data: {
- title: data.title,
- desc: data.desc,
- idVillage: data.idVillage,
- createdBy: data.createBy,
- isActive: true,
- },
- });
-
- const deleteAnnouncement = await prisma.announcementMember.deleteMany({
- where: {
- idAnnouncement: data.id,
- },
- });
-
- const dataMember = data.groups.map((group: any) => ({
- idAnnoucement: data.id,
- idGroup: group.idGroup,
- idDivision: group.idDivision,
- isActive: true,
- }));
-
- const announcementMember = await prisma.announcementMember.createMany({
- data: dataMember,
- });
-
- return Response.json({
- success: true,
- message: "Sukses Update Announcement",
- });
- } catch (error) {
- console.error(error);
- return Response.json(
- { message: "Internal Server Error", success: false },
- { status: 500 }
- );
- }
-}
diff --git a/src/module/announcement/index.ts b/src/module/announcement/index.ts
index 9ae4abe..bae423b 100644
--- a/src/module/announcement/index.ts
+++ b/src/module/announcement/index.ts
@@ -1,12 +1,14 @@
-import { apiAnnouncement } from "./api/api_announcement";
import CreateAnnouncement from "./ui/create_announcement";
+import DetailAnnouncement from "./ui/detail_announcement";
+import EditAnnouncement from "./ui/edit_announcement";
import ListAnnouncement from "./ui/list_announcement";
import NavbarAnnouncement from "./ui/navbar_announcement";
-import ViewDetailAnnouncement from "./ui/view_detail_anouncement"
+import NavbarDetailAnnouncement from "./ui/navbar_detail_announcement";
-export { ViewDetailAnnouncement };
-export { apiAnnouncement };
export { ListAnnouncement }
export { NavbarAnnouncement }
-export { CreateAnnouncement }
\ No newline at end of file
+export { CreateAnnouncement }
+export { NavbarDetailAnnouncement }
+export { DetailAnnouncement }
+export { EditAnnouncement }
\ No newline at end of file
diff --git a/src/module/announcement/lib/api_announcement.ts b/src/module/announcement/lib/api_announcement.ts
index 0b36a4a..58e95f5 100644
--- a/src/module/announcement/lib/api_announcement.ts
+++ b/src/module/announcement/lib/api_announcement.ts
@@ -1,16 +1,22 @@
-import { ICreateData } from "./type_announcement";
+import { ICreateData, IFormCreateAnnouncement } from "./type_announcement";
export const funGetAllAnnouncement = async (path?: string) => {
const response = await fetch(`/api/announcement${(path) ? path : ''}`, { next: { tags: ['announcement'] } });
return await response.json().catch(() => null);
-}
+}
export const funGetAnnouncementById = async (path: string) => {
const response = await fetch(`/api/announcement/${path}`);
return await response.json().catch(() => null);
}
-export const funCreateAnnouncement = async (data: ICreateData) => {
+export const funCreateAnnouncement = async (data: IFormCreateAnnouncement) => {
+ if (data.title == "" || data.desc == "")
+ return { success: false, message: 'Silahkan lengkapi form tambah pengumuman' }
+
+ if (data.groups.length == 0)
+ return { success: false, message: 'Silahkan pilih divisi penerima pengumuman' }
+
const response = await fetch("/api/announcement", {
method: "POST",
headers: {
@@ -19,4 +25,31 @@ export const funCreateAnnouncement = async (data: ICreateData) => {
body: JSON.stringify(data),
});
return await response.json().catch(() => null);
+}
+
+export const funDeleteAnnouncement = async (path: string) => {
+ const response = await fetch(`/api/announcement/${path}`, {
+ method: "DELETE",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ });
+ return await response.json().catch(() => null);
+};
+
+export const funEditAnnouncement = async (path: string, data: IFormCreateAnnouncement) => {
+ if (data.title == "" || data.desc == "")
+ return { success: false, message: 'Silahkan lengkapi form edit pengumuman' }
+
+ if (data.groups.length == 0)
+ return { success: false, message: 'Silahkan pilih divisi penerima pengumuman' }
+
+ const response = await fetch(`/api/announcement/${path}`, {
+ method: "PUT",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(data),
+ });
+ return await response.json().catch(() => null);
}
\ No newline at end of file
diff --git a/src/module/announcement/lib/type_announcement.ts b/src/module/announcement/lib/type_announcement.ts
index 6b19299..0e96345 100644
--- a/src/module/announcement/lib/type_announcement.ts
+++ b/src/module/announcement/lib/type_announcement.ts
@@ -6,8 +6,8 @@ export interface IListDataAnnouncement {
}
export interface IRootAllAnnouncement {
- announcement: IAnnouncement
- allAnnouncementMember: IAllAnnouncementMember[]
+ data: IAnnouncement
+ member: IAllAnnouncementMember
}
export interface IAnnouncement {
@@ -17,10 +17,12 @@ export interface IAnnouncement {
}
export interface IAllAnnouncementMember {
- idAnnouncement: string
- idGroup: string
- idDivision: string
- group: string
+ group: {
+ idGroup: string
+ idDivision: string
+ group: string
+ division: string
+ }[]
}
export interface GroupData {
@@ -32,10 +34,26 @@ export interface GroupData {
}[];
}
+export interface GroupDataEditAnnouncement {
+ id: string;
+ name: string;
+ Division: {
+ idGroup: string;
+ idDivision: string;
+ group: string;
+ division: string;
+ }[];
+}
+
export interface ICreateData {
title: string
desc: string
+}
+export interface IFormCreateAnnouncement {
+ title: string
+ desc: string
+ groups: GroupData[]
}
export interface IGroupData {
diff --git a/src/module/announcement/lib/val_announcement.ts b/src/module/announcement/lib/val_announcement.ts
index 806fcf2..912ac66 100644
--- a/src/module/announcement/lib/val_announcement.ts
+++ b/src/module/announcement/lib/val_announcement.ts
@@ -1,5 +1,6 @@
import { hookstate } from "@hookstate/core";
-import { GroupData } from "./type_announcement";
+import { GroupData, GroupDataEditAnnouncement } from "./type_announcement";
-export const globalMemberAnnouncement = hookstate([])
\ No newline at end of file
+export const globalMemberAnnouncement = hookstate([])
+export const globalMemberEditAnnouncement = hookstate([])
\ No newline at end of file
diff --git a/src/module/announcement/ui/create_announcement.tsx b/src/module/announcement/ui/create_announcement.tsx
index f4b89f7..b95ca24 100644
--- a/src/module/announcement/ui/create_announcement.tsx
+++ b/src/module/announcement/ui/create_announcement.tsx
@@ -1,40 +1,25 @@
'use client'
import { LayoutNavbarNew, WARNA } from "@/module/_global";
import LayoutModal from "@/module/_global/layout/layout_modal";
-import { globalMemberDivision } from "@/module/division_new/lib/val_division";
import { useHookstate } from "@hookstate/core";
import { Avatar, Box, Button, Flex, Group, Stack, Text, Textarea, TextInput } from "@mantine/core";
import { useShallowEffect } from "@mantine/hooks";
-import { useRouter } from "next/navigation";
import { useState } from "react";
import toast from "react-hot-toast";
-import { HiOutlineChevronRight } from "react-icons/hi2";
import { IoIosArrowForward } from "react-icons/io";
import CreateUsersAnnouncement from "./create_users_announcement";
import { globalMemberAnnouncement } from "../lib/val_announcement";
import { funCreateAnnouncement } from "../lib/api_announcement";
-import { group } from "console";
import { GroupData, ICreateData, IGroupData } from "../lib/type_announcement";
-export type DataMember = DataGroup[]
-
-export interface DataGroup {
- id: string
- name: string
- Division: Division[]
-}
-
-export interface Division {
- id: string
- name: string
-}
export default function CreateAnnouncement() {
const [isOpen, setOpen] = useState(false)
const memberGroup = useHookstate(globalMemberAnnouncement)
const memberValue = memberGroup.get() as GroupData[]
- const [selectedFiles, setSelectedFiles] = useState([]);
+ const [selectedFiles, setSelectedFiles] = useState([])
+
const [isChooseMember, setIsChooseMember] = useState(false)
const [isData, setisData] = useState({
@@ -43,27 +28,31 @@ export default function CreateAnnouncement() {
})
+ async function onSubmit() {
+ try {
+ const response = await funCreateAnnouncement({
+ title: isData.title,
+ desc: isData.desc,
+ groups: memberValue
+ })
- function onTrue(val: boolean) {
- if (val) {
- toast.success("Sukses! Data tersimpan");
+ if (response.success) {
+ toast.success(response.message)
+ setisData({
+ ...isData,
+ title: "",
+ desc: "",
+ })
+ memberGroup.set([])
+ } else {
+ toast.error(response.message)
+ }
+ } catch (error) {
+ console.log(error)
+ toast.error("Gagal menambahkan pengumuman, coba lagi nanti");
}
- setOpen(false)
- }
- async function onSubmit(val: boolean) {
- // const response = await funCreateAnnouncement(
- // {
- // title: isData.title,
- // desc: isData.desc,
- // groups: memberValue
- // },
-
- // )
setOpen(false)
- console.log(isData)
- console.log(memberValue)
-
}
async function loadData() {
@@ -78,7 +67,7 @@ export default function CreateAnnouncement() {
setIsChooseMember(true)
}
- if (isChooseMember) return { setIsChooseMember(false) }} />
+ if (isChooseMember) return { setIsChooseMember(false) }} />
return (
@@ -95,6 +84,7 @@ export default function CreateAnnouncement() {
borderColor: WARNA.biruTua,
},
}}
+ value={isData.title}
onChange={(e) => { setisData({ ...isData, title: e.target.value }) }}
/>