@@ -13,6 +13,7 @@
|
||||
"@emotion/server": "^11.11.0",
|
||||
"@mantine/carousel": "^7.1.5",
|
||||
"@mantine/core": "^6.0.17",
|
||||
"@mantine/dates": "^6.0.17",
|
||||
"@mantine/dropzone": "^7.1.3",
|
||||
"@mantine/hooks": "^6.0.17",
|
||||
"@mantine/next": "^6.0.17",
|
||||
@@ -25,6 +26,7 @@
|
||||
"@types/react-dom": "18.2.7",
|
||||
"@types/uuid": "^9.0.4",
|
||||
"autoprefixer": "10.4.14",
|
||||
"dayjs": "^1.11.10",
|
||||
"echarts": "^5.4.3",
|
||||
"echarts-for-react": "^3.0.2",
|
||||
"embla-carousel-react": "^8.0.0-rc14",
|
||||
|
||||
@@ -26,6 +26,10 @@ model User {
|
||||
Donasi Donasi[]
|
||||
Donasi_Invoice Donasi_Invoice[]
|
||||
Donasi_Notif Donasi_Notif[]
|
||||
Event Event[]
|
||||
Event_Peserta Event_Peserta[]
|
||||
Voting Voting[]
|
||||
Voting_Kontributor Voting_Kontributor[]
|
||||
}
|
||||
|
||||
model MasterUserRole {
|
||||
@@ -478,3 +482,114 @@ model Donasi_PencairanDana {
|
||||
Images Images? @relation(fields: [imagesId], references: [id])
|
||||
imagesId String?
|
||||
}
|
||||
|
||||
// ========================================= EVENT ========================================= //
|
||||
|
||||
model Event {
|
||||
id String @id @default(cuid())
|
||||
title String
|
||||
lokasi String
|
||||
tanggal DateTime
|
||||
deskripsi String
|
||||
active Boolean @default(true)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
catatan String?
|
||||
|
||||
Author User? @relation(fields: [authorId], references: [id])
|
||||
authorId String?
|
||||
EventMaster_Status EventMaster_Status? @relation(fields: [eventMaster_StatusId], references: [id])
|
||||
eventMaster_StatusId String? @default("2")
|
||||
Event_Peserta Event_Peserta[]
|
||||
EventMaster_TipeAcara EventMaster_TipeAcara? @relation(fields: [eventMaster_TipeAcaraId], references: [id])
|
||||
eventMaster_TipeAcaraId Int?
|
||||
}
|
||||
|
||||
model EventMaster_TipeAcara {
|
||||
id Int @id @default(autoincrement())
|
||||
name String
|
||||
active Boolean @default(true)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
Event Event[]
|
||||
}
|
||||
|
||||
model EventMaster_Status {
|
||||
id String @id @default(cuid())
|
||||
name String
|
||||
active Boolean @default(true)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
Event Event[]
|
||||
}
|
||||
|
||||
model Event_Peserta {
|
||||
id String @id @default(cuid())
|
||||
active Boolean @default(true)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
Event Event? @relation(fields: [eventId], references: [id])
|
||||
eventId String?
|
||||
User User? @relation(fields: [userId], references: [id])
|
||||
userId String?
|
||||
}
|
||||
|
||||
// ========================================= VOTING ========================================= //
|
||||
|
||||
model Voting {
|
||||
id String @id @default(cuid())
|
||||
isActive Boolean @default(true)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
title String
|
||||
deskripsi String
|
||||
awalVote DateTime
|
||||
akhirVote DateTime
|
||||
catatan String?
|
||||
|
||||
Author User @relation(fields: [authorId], references: [id])
|
||||
authorId String
|
||||
Voting_Status Voting_Status? @relation(fields: [voting_StatusId], references: [id])
|
||||
voting_StatusId String? @default("2")
|
||||
Voting_DaftarNamaVote Voting_DaftarNamaVote[]
|
||||
Voting_Kontributor Voting_Kontributor[]
|
||||
}
|
||||
|
||||
model Voting_Status {
|
||||
id String @id @default(cuid())
|
||||
name String
|
||||
isActive Boolean @default(true)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
Voting Voting[]
|
||||
}
|
||||
|
||||
model Voting_DaftarNamaVote {
|
||||
id String @id @default(cuid())
|
||||
value String
|
||||
jumlah Int @default(0)
|
||||
isActive Boolean @default(true)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
Voting Voting? @relation(fields: [votingId], references: [id])
|
||||
votingId String?
|
||||
Voting_Kontributor Voting_Kontributor[]
|
||||
}
|
||||
|
||||
model Voting_Kontributor {
|
||||
id String @id @default(cuid())
|
||||
isActive Boolean @default(true)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
Voting Voting? @relation(fields: [votingId], references: [id])
|
||||
votingId String?
|
||||
Author User? @relation(fields: [authorId], references: [id])
|
||||
authorId String?
|
||||
Voting_DaftarNamaVote Voting_DaftarNamaVote? @relation(fields: [voting_DaftarNamaVoteId], references: [id])
|
||||
voting_DaftarNamaVoteId String?
|
||||
|
||||
}
|
||||
|
||||
BIN
public/aset/Hipmi Business Map.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
public/aset/Hipmi Job Vacancy Logo.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
public/aset/Hipmi Project Collaboration.png
Normal file
|
After Width: | Height: | Size: 49 KiB |
BIN
public/aset/event/splash-event.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
public/aset/global/upload_icon.png
Normal file
|
After Width: | Height: | Size: 4.4 KiB |
BIN
public/aset/vote/logo.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
public/portofolio/logo/6fec9ab1-6989-4bb8-8050-ab46ba431d11.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
public/portofolio/logo/e6be54b3-b536-408d-afcb-da38415cfec1.jpg
Normal file
|
After Width: | Height: | Size: 37 KiB |
@@ -13,8 +13,11 @@ import userSeeder from "../../../bin/seeder/user_seeder.json";
|
||||
import donasi_status from "../../../bin/seeder/donasi/master_status.json";
|
||||
import donasi_kategori from "../../../bin/seeder/donasi/master_kategori.json";
|
||||
import donasi_durasi from "../../../bin/seeder/donasi/master_durasi.json";
|
||||
import donasi_namaBank from "../../../bin/seeder/donasi/master_bank.json"
|
||||
import donasi_status_invoice from "../../../bin/seeder/donasi/master_status_invoice.json"
|
||||
import donasi_namaBank from "../../../bin/seeder/donasi/master_bank.json";
|
||||
import donasi_status_invoice from "../../../bin/seeder/donasi/master_status_invoice.json";
|
||||
import event_status from "../../../bin/seeder/event/master_status.json";
|
||||
import event_tipe_acara from "../../../bin/seeder/event/master_tipe_acara.json";
|
||||
import voting_status from "../../../bin/seeder/voting/master_status.json";
|
||||
|
||||
export async function GET(req: Request) {
|
||||
const dev = new URL(req.url).searchParams.get("dev");
|
||||
@@ -264,6 +267,51 @@ export async function GET(req: Request) {
|
||||
});
|
||||
}
|
||||
|
||||
for (let e of event_status) {
|
||||
await prisma.eventMaster_Status.upsert({
|
||||
where: {
|
||||
id: e.id,
|
||||
},
|
||||
create: {
|
||||
id: e.id,
|
||||
name: e.name,
|
||||
},
|
||||
update: {
|
||||
name: e.name,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
for (let e of event_tipe_acara) {
|
||||
await prisma.eventMaster_TipeAcara.upsert({
|
||||
where: {
|
||||
id: e.id,
|
||||
},
|
||||
create: {
|
||||
id: e.id,
|
||||
name: e.name,
|
||||
},
|
||||
update: {
|
||||
name: e.name,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
for (let v of voting_status) {
|
||||
await prisma.voting_Status.upsert({
|
||||
where: {
|
||||
id: v.id,
|
||||
},
|
||||
create: {
|
||||
id: v.id,
|
||||
name: v.name,
|
||||
},
|
||||
update: {
|
||||
name: v.name,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
return NextResponse.json({ success: true });
|
||||
}
|
||||
|
||||
|
||||
13
src/app/dev/admin/event/child/riwayat/page.tsx
Normal file
@@ -0,0 +1,13 @@
|
||||
import { AdminEvent_Riwayat } from "@/app_modules/admin/event";
|
||||
import { AdminEvent_getListAllRiwayat } from "@/app_modules/admin/event/fun/get/get_list_all_riwayat";
|
||||
|
||||
export default async function Page() {
|
||||
const listRiwayat = await AdminEvent_getListAllRiwayat()
|
||||
|
||||
|
||||
return (
|
||||
<>
|
||||
<AdminEvent_Riwayat listRiwayat={listRiwayat} />
|
||||
</>
|
||||
);
|
||||
}
|
||||
12
src/app/dev/admin/event/child/tipe_acara/page.tsx
Normal file
@@ -0,0 +1,12 @@
|
||||
import { AdminEvent_DetailTipeAcara } from "@/app_modules/admin/event";
|
||||
import { AdminEvent_getListTipeAcara } from "@/app_modules/admin/event/fun/get/get_list_tipe_acara";
|
||||
|
||||
export default async function Page() {
|
||||
const listTipe = await AdminEvent_getListTipeAcara()
|
||||
|
||||
return (
|
||||
<>
|
||||
<AdminEvent_DetailTipeAcara listTipe={listTipe}/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
28
src/app/dev/admin/event/main/page.tsx
Normal file
@@ -0,0 +1,28 @@
|
||||
import { AdminEvent_Main } from "@/app_modules/admin/event";
|
||||
import AdminEvent_funCountByStatusId from "@/app_modules/admin/event/fun/count/fun_count_event_by_status_id";
|
||||
import { AdminEvent_funCountRiwayat } from "@/app_modules/admin/event/fun/count/fun_count_riwayat";
|
||||
import { AdminEvent_funCountTipeAcara } from "@/app_modules/admin/event/fun/count/fun_count_tipe_acara";
|
||||
|
||||
export default async function Page() {
|
||||
const countPublish = await AdminEvent_funCountByStatusId("1");
|
||||
const countReview = await AdminEvent_funCountByStatusId("2");
|
||||
const countDraft = await AdminEvent_funCountByStatusId("3");
|
||||
const countReject = await AdminEvent_funCountByStatusId("4");
|
||||
const countTipeAcara = await AdminEvent_funCountTipeAcara()
|
||||
const countRiwayat = await AdminEvent_funCountRiwayat()
|
||||
|
||||
|
||||
|
||||
return (
|
||||
<>
|
||||
<AdminEvent_Main
|
||||
countPublish={countPublish as number}
|
||||
countReview={countReview as number}
|
||||
countDraft={countDraft as number}
|
||||
countReject={countReject as number}
|
||||
countTipeAcara={countTipeAcara as number}
|
||||
countRiwayat={countRiwayat}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
12
src/app/dev/admin/event/table/publish/page.tsx
Normal file
@@ -0,0 +1,12 @@
|
||||
import { AdminEvent_TablePublish } from "@/app_modules/admin/event";
|
||||
import { AdminEvent_getListTableByStatusId } from "@/app_modules/admin/event/fun/get/get_list_table_by_status_id";
|
||||
|
||||
export default async function Page() {
|
||||
const listPublish = await AdminEvent_getListTableByStatusId("1");
|
||||
|
||||
return (
|
||||
<>
|
||||
<AdminEvent_TablePublish listPublish={listPublish as any} />
|
||||
</>
|
||||
);
|
||||
}
|
||||
10
src/app/dev/admin/event/table/reject/page.tsx
Normal file
@@ -0,0 +1,10 @@
|
||||
import { AdminEvent_TableReject } from "@/app_modules/admin/event";
|
||||
import { AdminEvent_getListTableByStatusId } from "@/app_modules/admin/event/fun/get/get_list_table_by_status_id";
|
||||
|
||||
export default async function Page() {
|
||||
const listReject = await AdminEvent_getListTableByStatusId("4")
|
||||
|
||||
return <>
|
||||
<AdminEvent_TableReject listReject={listReject as any}/>
|
||||
</>
|
||||
}
|
||||
10
src/app/dev/admin/event/table/review/page.tsx
Normal file
@@ -0,0 +1,10 @@
|
||||
import { AdminEvent_TableReview } from "@/app_modules/admin/event";
|
||||
import { AdminEvent_getListTableByStatusId } from "@/app_modules/admin/event/fun/get/get_list_table_by_status_id";
|
||||
|
||||
export default async function Page() {
|
||||
const listReview = await AdminEvent_getListTableByStatusId("2")
|
||||
|
||||
return <>
|
||||
<AdminEvent_TableReview listReview={listReview as any}/>
|
||||
</>
|
||||
}
|
||||
12
src/app/dev/admin/vote/child/riwayat/page.tsx
Normal file
@@ -0,0 +1,12 @@
|
||||
import { AdminVote_Riwayat } from "@/app_modules/admin/vote";
|
||||
import { AdminVote_getListTableByStatusId } from "@/app_modules/admin/vote/fun/get/get_list_table_by_status_id";
|
||||
|
||||
export default async function Page() {
|
||||
const dataVote = await AdminVote_getListTableByStatusId("0");
|
||||
|
||||
return (
|
||||
<>
|
||||
<AdminVote_Riwayat dataVote={dataVote as any} />
|
||||
</>
|
||||
);
|
||||
}
|
||||
12
src/app/dev/admin/vote/child/table_publish/page.tsx
Normal file
@@ -0,0 +1,12 @@
|
||||
import { AdminVote_TablePublish } from "@/app_modules/admin/vote";
|
||||
import { AdminVote_getListTableByStatusId } from "@/app_modules/admin/vote/fun/get/get_list_table_by_status_id";
|
||||
|
||||
export default async function Page() {
|
||||
const dataVote = await AdminVote_getListTableByStatusId("1")
|
||||
|
||||
return (
|
||||
<>
|
||||
<AdminVote_TablePublish dataVote={dataVote} />
|
||||
</>
|
||||
);
|
||||
}
|
||||
11
src/app/dev/admin/vote/child/table_reject/page.tsx
Normal file
@@ -0,0 +1,11 @@
|
||||
import { AdminVote_TableReject } from "@/app_modules/admin/vote";
|
||||
import { AdminVote_getListTableByStatusId } from "@/app_modules/admin/vote/fun/get/get_list_table_by_status_id";
|
||||
|
||||
export default async function Page() {
|
||||
const dataVote = await AdminVote_getListTableByStatusId("4");
|
||||
return (
|
||||
<>
|
||||
<AdminVote_TableReject dataVote={dataVote as any}/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
13
src/app/dev/admin/vote/child/table_review/page.tsx
Normal file
@@ -0,0 +1,13 @@
|
||||
import { AdminVote_TableReview } from "@/app_modules/admin/vote";
|
||||
import { AdminVote_getListTableByStatusId } from "@/app_modules/admin/vote/fun/get/get_list_table_by_status_id";
|
||||
|
||||
|
||||
export default async function Page() {
|
||||
const listVote = await AdminVote_getListTableByStatusId("2")
|
||||
|
||||
return (
|
||||
<>
|
||||
<AdminVote_TableReview listVote={listVote as any} />
|
||||
</>
|
||||
);
|
||||
}
|
||||
20
src/app/dev/admin/vote/main/page.tsx
Normal file
@@ -0,0 +1,20 @@
|
||||
import { AdminVote_Main } from "@/app_modules/admin/vote";
|
||||
import AdminVote_funCountByStatusId from "@/app_modules/admin/vote/fun/count/fun_count_vote_by_status_id";
|
||||
|
||||
export default async function Page() {
|
||||
const countPublish = await AdminVote_funCountByStatusId("1");
|
||||
const countReview = await AdminVote_funCountByStatusId("2");
|
||||
const countDraft = await AdminVote_funCountByStatusId("0");
|
||||
const countReject = await AdminVote_funCountByStatusId("4");
|
||||
|
||||
return (
|
||||
<>
|
||||
<AdminVote_Main
|
||||
countPublish={countPublish as number}
|
||||
countReview={countReview as number}
|
||||
countDraft={countDraft as number}
|
||||
countReject={countReject as number}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -9,9 +9,9 @@ export default async function Layout({
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
const userId = await User_getUserId();
|
||||
// const dataDonasi = await DOnasi_getList
|
||||
const isRead = await Donasi_getNotifByUserId(userId).then((res) =>
|
||||
res.map((val: any) => val.isRead)
|
||||
// console.log(userId)
|
||||
const isRead = await Donasi_getNotifByUserId(userId).then((res: any) =>
|
||||
res.map((val: any) => val.isRead)
|
||||
);
|
||||
// console.log(isRead)
|
||||
|
||||
|
||||
13
src/app/dev/event/create/layout.tsx
Normal file
@@ -0,0 +1,13 @@
|
||||
import { LayoutEvent_Create } from "@/app_modules/event";
|
||||
|
||||
export default async function Layout({
|
||||
children,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
return (
|
||||
<>
|
||||
<LayoutEvent_Create>{children}</LayoutEvent_Create>
|
||||
</>
|
||||
);
|
||||
}
|
||||
11
src/app/dev/event/create/page.tsx
Normal file
@@ -0,0 +1,11 @@
|
||||
import { Event_Create } from "@/app_modules/event";
|
||||
import { Event_getMasterTipeAcara } from "@/app_modules/event/fun/master/get_tipe_acara";
|
||||
import { User_getUserId } from "@/app_modules/fun_global/get_user_token";
|
||||
import _ from "lodash";
|
||||
|
||||
export default async function Page() {
|
||||
const userId = await User_getUserId()
|
||||
const listTipeAcara = await Event_getMasterTipeAcara();
|
||||
|
||||
return <Event_Create listTipeAcara={listTipeAcara as any} authorId={userId}/>;
|
||||
}
|
||||
16
src/app/dev/event/detail/draft/[id]/layout.tsx
Normal file
@@ -0,0 +1,16 @@
|
||||
import { LayoutEvent_DetailDraft } from "@/app_modules/event";
|
||||
import React from "react";
|
||||
|
||||
export default async function Page({
|
||||
children,
|
||||
params,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
params: { id: string };
|
||||
}) {
|
||||
let eventId = params.id
|
||||
|
||||
return <>
|
||||
<LayoutEvent_DetailDraft eventId={eventId}>{children}</LayoutEvent_DetailDraft>;
|
||||
</>
|
||||
}
|
||||
8
src/app/dev/event/detail/draft/[id]/page.tsx
Normal file
@@ -0,0 +1,8 @@
|
||||
import { Event_DetailDraft } from "@/app_modules/event";
|
||||
import { Event_getOneById } from "@/app_modules/event/fun/get/get_one_by_id";
|
||||
|
||||
export default async function Page({params}: {params: {id: string}}) {
|
||||
let eventId = params.id
|
||||
const dataEvent = await Event_getOneById(eventId)
|
||||
return <Event_DetailDraft dataEvent={dataEvent as any} />;
|
||||
}
|
||||
14
src/app/dev/event/detail/kontribusi/[id]/layout.tsx
Normal file
@@ -0,0 +1,14 @@
|
||||
import { LayoutEvent_DetailKontribusi } from "@/app_modules/event";
|
||||
import React from "react";
|
||||
|
||||
export default async function Layout({
|
||||
children,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
return (
|
||||
<>
|
||||
<LayoutEvent_DetailKontribusi>{children}</LayoutEvent_DetailKontribusi>
|
||||
</>
|
||||
);
|
||||
}
|
||||
20
src/app/dev/event/detail/kontribusi/[id]/page.tsx
Normal file
@@ -0,0 +1,20 @@
|
||||
import { Event_DetailKontribusi } from "@/app_modules/event";
|
||||
import { Event_countTotalPesertaById } from "@/app_modules/event/fun/count/count_total_peserta_by_id";
|
||||
import { Event_getListPesertaById } from "@/app_modules/event/fun/get/get_list_peserta_by_id";
|
||||
import { Event_getOneById } from "@/app_modules/event/fun/get/get_one_by_id";
|
||||
|
||||
export default async function Page({ params }: { params: { id: string } }) {
|
||||
let eventId = params.id;
|
||||
const dataEvent = await Event_getOneById(eventId);
|
||||
const listKontributor = await Event_getListPesertaById(eventId);
|
||||
const totalPeserta = await Event_countTotalPesertaById(eventId)
|
||||
return (
|
||||
<>
|
||||
<Event_DetailKontribusi
|
||||
dataEvent={dataEvent as any}
|
||||
listKontributor={listKontributor as any}
|
||||
totalPeserta={totalPeserta}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
15
src/app/dev/event/detail/main/[id]/layout.tsx
Normal file
@@ -0,0 +1,15 @@
|
||||
import { LayoutEvent_DetailMain } from "@/app_modules/event";
|
||||
import { AppShell } from "@mantine/core";
|
||||
import React from "react";
|
||||
|
||||
export default async function Layout({
|
||||
children,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
return (
|
||||
<>
|
||||
<LayoutEvent_DetailMain>{children}</LayoutEvent_DetailMain>
|
||||
</>
|
||||
);
|
||||
}
|
||||
27
src/app/dev/event/detail/main/[id]/page.tsx
Normal file
@@ -0,0 +1,27 @@
|
||||
import { Event_DetailMain } from "@/app_modules/event";
|
||||
import { Event_countTotalPesertaById } from "@/app_modules/event/fun/count/count_total_peserta_by_id";
|
||||
import { Event_CekUserJoinById } from "@/app_modules/event/fun/get/cek_user_join_by_id";
|
||||
import { Event_getListPesertaById } from "@/app_modules/event/fun/get/get_list_peserta_by_id";
|
||||
import { Event_getOneById } from "@/app_modules/event/fun/get/get_one_by_id";
|
||||
import { User_getUserId } from "@/app_modules/fun_global/get_user_token";
|
||||
|
||||
export default async function Page({ params }: { params: { id: string } }) {
|
||||
let eventId = params.id;
|
||||
const dataEvent = await Event_getOneById(eventId);
|
||||
const listPeserta = await Event_getListPesertaById(eventId);
|
||||
const userLoginId = await User_getUserId();
|
||||
const isJoin = await Event_CekUserJoinById(eventId, userLoginId);
|
||||
const totalPeserta = await Event_countTotalPesertaById(eventId)
|
||||
|
||||
return (
|
||||
<>
|
||||
<Event_DetailMain
|
||||
dataEvent={dataEvent as any}
|
||||
listPeserta={listPeserta as any}
|
||||
userLoginId={userLoginId}
|
||||
isJoin={isJoin}
|
||||
totalPeserta={totalPeserta as any}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
11
src/app/dev/event/detail/publish/[id]/layout.tsx
Normal file
@@ -0,0 +1,11 @@
|
||||
|
||||
import { LayoutEvent_DetailPublish } from "@/app_modules/event";
|
||||
import React from "react";
|
||||
|
||||
export default async function Page({
|
||||
children,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
return <LayoutEvent_DetailPublish>{children}</LayoutEvent_DetailPublish>;
|
||||
}
|
||||
9
src/app/dev/event/detail/publish/[id]/page.tsx
Normal file
@@ -0,0 +1,9 @@
|
||||
import { Event_DetailPublish } from "@/app_modules/event";
|
||||
import { Event_getOneById } from "@/app_modules/event/fun/get/get_one_by_id";
|
||||
|
||||
export default async function Page({ params }: { params: { id: string } }) {
|
||||
let eventId = params.id;
|
||||
const dataEvent = await Event_getOneById(eventId);
|
||||
|
||||
return <Event_DetailPublish dataEvent={dataEvent as any} />;
|
||||
}
|
||||
11
src/app/dev/event/detail/reject/[id]/layout.tsx
Normal file
@@ -0,0 +1,11 @@
|
||||
|
||||
import { LayoutEvent_DetailReject } from "@/app_modules/event";
|
||||
import React from "react";
|
||||
|
||||
export default async function Page({
|
||||
children,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
return <LayoutEvent_DetailReject>{children}</LayoutEvent_DetailReject>;
|
||||
}
|
||||
9
src/app/dev/event/detail/reject/[id]/page.tsx
Normal file
@@ -0,0 +1,9 @@
|
||||
import { Event_DetailReject } from "@/app_modules/event";
|
||||
import { Event_getOneById } from "@/app_modules/event/fun/get/get_one_by_id";
|
||||
|
||||
export default async function Page({params}: {params: {id: string}}) {
|
||||
let eventId = params.id
|
||||
const dataEvent = await Event_getOneById(eventId)
|
||||
|
||||
return <Event_DetailReject dataEvent={dataEvent as any}/>;
|
||||
}
|
||||
11
src/app/dev/event/detail/review/[id]/layout.tsx
Normal file
@@ -0,0 +1,11 @@
|
||||
|
||||
import { LayoutEvent_DetailReview } from "@/app_modules/event";
|
||||
import React from "react";
|
||||
|
||||
export default async function Page({
|
||||
children,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
return <LayoutEvent_DetailReview>{children}</LayoutEvent_DetailReview>
|
||||
}
|
||||
10
src/app/dev/event/detail/review/[id]/page.tsx
Normal file
@@ -0,0 +1,10 @@
|
||||
import { Event_DetailReview } from "@/app_modules/event";
|
||||
import { Event_getOneById } from "@/app_modules/event/fun/get/get_one_by_id";
|
||||
|
||||
|
||||
export default async function Page({params}: {params: {id: string}}) {
|
||||
let eventId = params.id
|
||||
const dataEvent = await Event_getOneById(eventId)
|
||||
|
||||
return <Event_DetailReview dataEvent={dataEvent as any}/>;
|
||||
}
|
||||
14
src/app/dev/event/detail/riwayat/[id]/layout.tsx
Normal file
@@ -0,0 +1,14 @@
|
||||
import { LayoutEvent_DetailRiwayat } from "@/app_modules/event";
|
||||
import React from "react";
|
||||
|
||||
export default async function Layout({
|
||||
children,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
return (
|
||||
<>
|
||||
<LayoutEvent_DetailRiwayat>{children}</LayoutEvent_DetailRiwayat>
|
||||
</>
|
||||
);
|
||||
}
|
||||
24
src/app/dev/event/detail/riwayat/[id]/page.tsx
Normal file
@@ -0,0 +1,24 @@
|
||||
|
||||
import { Event_DetailRiwayat } from "@/app_modules/event";
|
||||
import { Event_countTotalPesertaById } from "@/app_modules/event/fun/count/count_total_peserta_by_id";
|
||||
import { Event_CekUserJoinById } from "@/app_modules/event/fun/get/cek_user_join_by_id";
|
||||
import { Event_getListPesertaById } from "@/app_modules/event/fun/get/get_list_peserta_by_id";
|
||||
import { Event_getOneById } from "@/app_modules/event/fun/get/get_one_by_id";
|
||||
import { User_getUserId } from "@/app_modules/fun_global/get_user_token";
|
||||
|
||||
export default async function Page({ params }: { params: { id: string } }) {
|
||||
let eventId = params.id;
|
||||
const dataEvent = await Event_getOneById(eventId);
|
||||
const listPeserta = await Event_getListPesertaById(eventId);
|
||||
const totalPeserta = await Event_countTotalPesertaById(eventId);
|
||||
|
||||
return (
|
||||
<>
|
||||
<Event_DetailRiwayat
|
||||
dataEvent={dataEvent as any}
|
||||
listPeserta={listPeserta as any}
|
||||
totalPeserta={totalPeserta as any}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
8
src/app/dev/event/edit/[id]/layout.tsx
Normal file
@@ -0,0 +1,8 @@
|
||||
import { LayoutEvent_Edit } from "@/app_modules/event";
|
||||
import React from "react";
|
||||
|
||||
export default async function Layout({children}: {children: React.ReactNode}) {
|
||||
return <>
|
||||
<LayoutEvent_Edit>{children}</LayoutEvent_Edit>
|
||||
</>
|
||||
}
|
||||
27
src/app/dev/event/edit/[id]/page.tsx
Normal file
@@ -0,0 +1,27 @@
|
||||
import { Event_Edit } from "@/app_modules/event";
|
||||
import { Event_getOneById } from "@/app_modules/event/fun/get/get_one_by_id";
|
||||
import { Event_getMasterTipeAcara } from "@/app_modules/event/fun/master/get_tipe_acara";
|
||||
import { MODEL_EVENT } from "@/app_modules/event/model/interface";
|
||||
import _ from "lodash";
|
||||
|
||||
export default async function Page({ params }: { params: { id: string } }) {
|
||||
let eventId = params.id;
|
||||
const data = await Event_getOneById(eventId);
|
||||
const dataEvent = _.omit(data, [
|
||||
"Author",
|
||||
"EventMaster_Status",
|
||||
"Event_Peserta",
|
||||
"createdAt",
|
||||
"updatedAt",
|
||||
"active",
|
||||
]);
|
||||
// console.log(dataEvent)
|
||||
|
||||
const listTipeAcara = await Event_getMasterTipeAcara()
|
||||
|
||||
return (
|
||||
<>
|
||||
<Event_Edit dataEvent={dataEvent as any} listTipeAcara={listTipeAcara as any}/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
12
src/app/dev/event/main/beranda/page.tsx
Normal file
@@ -0,0 +1,12 @@
|
||||
import { Event_Beranda } from "@/app_modules/event";
|
||||
import { Event_getListAllPublish } from "@/app_modules/event/fun/get/get_list_all_publish";
|
||||
|
||||
export default async function Page() {
|
||||
const dataEvent = await Event_getListAllPublish()
|
||||
|
||||
return (
|
||||
<>
|
||||
<Event_Beranda dataEvent={dataEvent as any}/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
14
src/app/dev/event/main/kontribusi/page.tsx
Normal file
@@ -0,0 +1,14 @@
|
||||
import { Event_Kontribusi } from "@/app_modules/event";
|
||||
import { Event_getListKontibusiByUserId } from "@/app_modules/event/fun/get/get_list_kontribusi_by_user_id";
|
||||
import { User_getUserId } from "@/app_modules/fun_global/get_user_token";
|
||||
|
||||
export default async function Page() {
|
||||
const userLoginId = await User_getUserId();
|
||||
const listKontribusi = await Event_getListKontibusiByUserId(userLoginId)
|
||||
|
||||
return (
|
||||
<>
|
||||
<Event_Kontribusi listKontribusi={listKontribusi as any}/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
8
src/app/dev/event/main/layout.tsx
Normal file
@@ -0,0 +1,8 @@
|
||||
import { LayoutEvent_Main } from "@/app_modules/event";
|
||||
import React from "react";
|
||||
|
||||
export default async function Layout({children}:{children: React.ReactNode}) {
|
||||
return<>
|
||||
<LayoutEvent_Main>{children}</LayoutEvent_Main>
|
||||
</>
|
||||
}
|
||||
19
src/app/dev/event/main/riwayat/page.tsx
Normal file
@@ -0,0 +1,19 @@
|
||||
import { Event_Riwayat } from "@/app_modules/event";
|
||||
import { Event_getListRiwayatSaya } from "@/app_modules/event/fun/get/get_list_riwayat_saya";
|
||||
import { Event_getListSemuaRiwayat } from "@/app_modules/event/fun/get/get_list_semua_riwayat";
|
||||
import { Event_getOneById } from "@/app_modules/event/fun/get/get_one_by_id";
|
||||
import { User_getUserId } from "@/app_modules/fun_global/get_user_token";
|
||||
|
||||
export default async function Page({ params }: { params: { id: string } }) {
|
||||
let eventId = params.id;
|
||||
const authorId = await User_getUserId();
|
||||
const dataSemuaRiwayat = await Event_getListSemuaRiwayat();
|
||||
const dataRiwayatSaya = await Event_getListRiwayatSaya(authorId);
|
||||
|
||||
return (
|
||||
<Event_Riwayat
|
||||
dataSemuaRiwayat={dataSemuaRiwayat as any}
|
||||
dataRiwayatSaya={dataRiwayatSaya as any}
|
||||
/>
|
||||
);
|
||||
}
|
||||
21
src/app/dev/event/main/status_page/page.tsx
Normal file
@@ -0,0 +1,21 @@
|
||||
import { Event_StatusPage } from "@/app_modules/event";
|
||||
import { Event_getByStatusId } from "@/app_modules/event/fun/get/get_event_by_status_id";
|
||||
import { User_getUserId } from "@/app_modules/fun_global/get_user_token";
|
||||
|
||||
export default async function Page() {
|
||||
const authorId = await User_getUserId();
|
||||
const listPublish = await Event_getByStatusId("1", authorId);
|
||||
const listReview = await Event_getByStatusId("2", authorId);
|
||||
const listDraft = await Event_getByStatusId("3", authorId);
|
||||
const listReject = await Event_getByStatusId("4", authorId);
|
||||
|
||||
return (
|
||||
<Event_StatusPage
|
||||
authorId={authorId}
|
||||
listPublish={listPublish}
|
||||
listReview={listReview}
|
||||
listDraft={listDraft}
|
||||
listReject={listReject}
|
||||
/>
|
||||
);
|
||||
}
|
||||
5
src/app/dev/event/splash/page.tsx
Normal file
@@ -0,0 +1,5 @@
|
||||
import { Event_SplashScreen } from "@/app_modules/event";
|
||||
|
||||
export default async function Page() {
|
||||
return <Event_SplashScreen />;
|
||||
}
|
||||
14
src/app/dev/vote/create/layout.tsx
Normal file
@@ -0,0 +1,14 @@
|
||||
import { LayoutVote_Create } from "@/app_modules/vote";
|
||||
import React from "react";
|
||||
|
||||
export default async function Layout({
|
||||
children,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
return (
|
||||
<>
|
||||
<LayoutVote_Create>{children}</LayoutVote_Create>
|
||||
</>
|
||||
);
|
||||
}
|
||||
9
src/app/dev/vote/create/page.tsx
Normal file
@@ -0,0 +1,9 @@
|
||||
import { Vote_Create } from "@/app_modules/vote";
|
||||
|
||||
export default async function Page() {
|
||||
return (
|
||||
<>
|
||||
<Vote_Create />
|
||||
</>
|
||||
);
|
||||
}
|
||||
19
src/app/dev/vote/detail/draft/[id]/layout.tsx
Normal file
@@ -0,0 +1,19 @@
|
||||
import { LayoutVote_DetailDraft } from "@/app_modules/vote";
|
||||
import React from "react";
|
||||
|
||||
export default function Layout({
|
||||
children,
|
||||
params,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
params: { id: string };
|
||||
}) {
|
||||
let voteId = params.id;
|
||||
return (
|
||||
<>
|
||||
<LayoutVote_DetailDraft voteId={voteId}>
|
||||
{children}
|
||||
</LayoutVote_DetailDraft>
|
||||
</>
|
||||
);
|
||||
}
|
||||
13
src/app/dev/vote/detail/draft/[id]/page.tsx
Normal file
@@ -0,0 +1,13 @@
|
||||
import { Vote_DetailDraft } from "@/app_modules/vote";
|
||||
import { Vote_getOnebyId } from "@/app_modules/vote/fun/get/get_one_by_id";
|
||||
|
||||
export default async function Page({ params }: { params: { id: string } }) {
|
||||
const voteId = params.id;
|
||||
const dataVote = await Vote_getOnebyId(voteId);
|
||||
|
||||
return (
|
||||
<>
|
||||
<Vote_DetailDraft dataVote={dataVote as any} />
|
||||
</>
|
||||
);
|
||||
}
|
||||
14
src/app/dev/vote/detail/kontribusi/[id]/layout.tsx
Normal file
@@ -0,0 +1,14 @@
|
||||
import { LayoutVote_DetailKontribusi } from "@/app_modules/vote";
|
||||
import React from "react";
|
||||
|
||||
export default async function Layout({
|
||||
children,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
return (
|
||||
<>
|
||||
<LayoutVote_DetailKontribusi>{children}</LayoutVote_DetailKontribusi>
|
||||
</>
|
||||
);
|
||||
}
|
||||
19
src/app/dev/vote/detail/kontribusi/[id]/page.tsx
Normal file
@@ -0,0 +1,19 @@
|
||||
import { Vote_DetailKontribusi } from "@/app_modules/vote";
|
||||
import { Vote_getListKontributorById } from "@/app_modules/vote/fun/get/get_list_kontributor_by_id";
|
||||
import { Vote_getOnebyId } from "@/app_modules/vote/fun/get/get_one_by_id";
|
||||
|
||||
export default async function Page({ params }: { params: { id: string } }) {
|
||||
let voteId = params.id;
|
||||
const dataVote = await Vote_getOnebyId(voteId)
|
||||
const listKontributor = await Vote_getListKontributorById(voteId)
|
||||
|
||||
|
||||
return (
|
||||
<>
|
||||
<Vote_DetailKontribusi
|
||||
dataVote={dataVote as any}
|
||||
listKontributor={listKontributor as any}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
14
src/app/dev/vote/detail/main/[id]/layout.tsx
Normal file
@@ -0,0 +1,14 @@
|
||||
import { LayoutVote_MainDetail } from "@/app_modules/vote";
|
||||
import React from "react";
|
||||
|
||||
export default async function Layout({
|
||||
children,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
return (
|
||||
<>
|
||||
<LayoutVote_MainDetail>{children}</LayoutVote_MainDetail>
|
||||
</>
|
||||
);
|
||||
}
|
||||
29
src/app/dev/vote/detail/main/[id]/page.tsx
Normal file
@@ -0,0 +1,29 @@
|
||||
import prisma from "@/app/lib/prisma";
|
||||
import { Vote_MainDetail } from "@/app_modules/vote";
|
||||
import { Vote_getHasilVoteById } from "@/app_modules/vote/fun/get/get_list_hasil_by_id";
|
||||
import { Vote_cekKontributorById } from "@/app_modules/vote/fun/get/cek_kontributor_by_id";
|
||||
import { Vote_getOnebyId } from "@/app_modules/vote/fun/get/get_one_by_id";
|
||||
import { Vote_getOnePilihanVotingByUserId } from "@/app_modules/vote/fun/get/get_one_pilihan_voting_by_user_id";
|
||||
import { Vote_getListKontributorById } from "@/app_modules/vote/fun/get/get_list_kontributor_by_id";
|
||||
|
||||
export default async function Page({ params }: { params: { id: string } }) {
|
||||
const voteId = params.id;
|
||||
const dataVote = await Vote_getOnebyId(voteId);
|
||||
const hasilVoting = await Vote_getHasilVoteById(voteId as any);
|
||||
const isKontributor = await Vote_cekKontributorById(voteId);
|
||||
const pilihanKontributor = await Vote_getOnePilihanVotingByUserId(voteId);
|
||||
const listKontributor = await Vote_getListKontributorById(voteId);
|
||||
|
||||
|
||||
return (
|
||||
<>
|
||||
<Vote_MainDetail
|
||||
dataVote={dataVote as any}
|
||||
hasilVoting={hasilVoting}
|
||||
isKontributor={isKontributor}
|
||||
pilihanKontributor={pilihanKontributor as any}
|
||||
listKontributor={listKontributor as any}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
10
src/app/dev/vote/detail/publish/[id]/layout.tsx
Normal file
@@ -0,0 +1,10 @@
|
||||
import { LayoutVote_DetailPublish } from "@/app_modules/vote";
|
||||
import React from "react";
|
||||
|
||||
export default function Layout({ children }: { children: React.ReactNode }) {
|
||||
return (
|
||||
<>
|
||||
<LayoutVote_DetailPublish>{children}</LayoutVote_DetailPublish>
|
||||
</>
|
||||
);
|
||||
}
|
||||
18
src/app/dev/vote/detail/publish/[id]/page.tsx
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Vote_DetailPublish } from "@/app_modules/vote";
|
||||
import { Vote_getListKontributorById } from "@/app_modules/vote/fun/get/get_list_kontributor_by_id";
|
||||
import { Vote_getOnebyId } from "@/app_modules/vote/fun/get/get_one_by_id";
|
||||
|
||||
export default async function Page({ params }: { params: { id: string } }) {
|
||||
let voteId = params.id;
|
||||
const dataVote = await Vote_getOnebyId(voteId);
|
||||
const listKontributor = await Vote_getListKontributorById(voteId);
|
||||
|
||||
return (
|
||||
<>
|
||||
<Vote_DetailPublish
|
||||
dataVote={dataVote as any}
|
||||
listKontributor={listKontributor as any}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
8
src/app/dev/vote/detail/reject/[id]/layout.tsx
Normal file
@@ -0,0 +1,8 @@
|
||||
import { LayoutVote_DetailReject } from "@/app_modules/vote";
|
||||
import React from "react";
|
||||
|
||||
export default async function Layout({children}: {children: React.ReactNode}) {
|
||||
return<>
|
||||
<LayoutVote_DetailReject>{children}</LayoutVote_DetailReject>
|
||||
</>
|
||||
}
|
||||
13
src/app/dev/vote/detail/reject/[id]/page.tsx
Normal file
@@ -0,0 +1,13 @@
|
||||
import { Vote_DetailReject } from "@/app_modules/vote";
|
||||
import { Vote_getOnebyId } from "@/app_modules/vote/fun/get/get_one_by_id";
|
||||
|
||||
export default async function Page({ params }: { params: { id: string } }) {
|
||||
let voteId = params.id;
|
||||
const dataVote = await Vote_getOnebyId(voteId);
|
||||
|
||||
return (
|
||||
<>
|
||||
<Vote_DetailReject dataVote={dataVote as any} />
|
||||
</>
|
||||
);
|
||||
}
|
||||
10
src/app/dev/vote/detail/review/[id]/layout.tsx
Normal file
@@ -0,0 +1,10 @@
|
||||
import { LayoutVote_DetailReview } from "@/app_modules/vote";
|
||||
import React from "react";
|
||||
|
||||
export default function Layout({ children }: { children: React.ReactNode }) {
|
||||
return (
|
||||
<>
|
||||
<LayoutVote_DetailReview>{children}</LayoutVote_DetailReview>
|
||||
</>
|
||||
);
|
||||
}
|
||||
13
src/app/dev/vote/detail/review/[id]/page.tsx
Normal file
@@ -0,0 +1,13 @@
|
||||
import { Vote_DetailReview } from "@/app_modules/vote";
|
||||
import { Vote_getOnebyId } from "@/app_modules/vote/fun/get/get_one_by_id";
|
||||
|
||||
export default async function Page({ params }: { params: { id: string } }) {
|
||||
let voteId = params.id;
|
||||
const dataVote = await Vote_getOnebyId(voteId);
|
||||
|
||||
return (
|
||||
<>
|
||||
<Vote_DetailReview dataVote={dataVote as any} />
|
||||
</>
|
||||
);
|
||||
}
|
||||
14
src/app/dev/vote/detail/riwayat_saya/[id]/layout.tsx
Normal file
@@ -0,0 +1,14 @@
|
||||
import { LayoutVote_DetailRiwayatSaya } from "@/app_modules/vote";
|
||||
import React from "react";
|
||||
|
||||
export default async function Layout({
|
||||
children,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
return (
|
||||
<>
|
||||
<LayoutVote_DetailRiwayatSaya>{children}</LayoutVote_DetailRiwayatSaya>
|
||||
</>
|
||||
);
|
||||
}
|
||||
19
src/app/dev/vote/detail/riwayat_saya/[id]/page.tsx
Normal file
@@ -0,0 +1,19 @@
|
||||
import { Vote_DetailRiwayatSaya } from "@/app_modules/vote";
|
||||
import { Vote_getListKontributorById } from "@/app_modules/vote/fun/get/get_list_kontributor_by_id";
|
||||
import { Vote_getOnePublishbyId } from "@/app_modules/vote/fun/get/get_one_publish_by_id";
|
||||
|
||||
export default async function Page({params}: {params: {id: string}}) {
|
||||
let voteId = params.id;
|
||||
const dataVote = await Vote_getOnePublishbyId(voteId);
|
||||
const listKontributor = await Vote_getListKontributorById(voteId);
|
||||
|
||||
|
||||
return (
|
||||
<>
|
||||
<Vote_DetailRiwayatSaya
|
||||
dataVote={dataVote as any}
|
||||
listKontributor={listKontributor}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
14
src/app/dev/vote/detail/semua_riwayat/[id]/layout.tsx
Normal file
@@ -0,0 +1,14 @@
|
||||
import { LayoutVote_DetailSemuaRiwayat } from "@/app_modules/vote";
|
||||
import React from "react";
|
||||
|
||||
export default async function Layout({
|
||||
children,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
return (
|
||||
<>
|
||||
<LayoutVote_DetailSemuaRiwayat>{children}</LayoutVote_DetailSemuaRiwayat>
|
||||
</>
|
||||
);
|
||||
}
|
||||
19
src/app/dev/vote/detail/semua_riwayat/[id]/page.tsx
Normal file
@@ -0,0 +1,19 @@
|
||||
import { Vote_DetailSemuaRiwayat } from "@/app_modules/vote";
|
||||
import { Vote_getListKontributorById } from "@/app_modules/vote/fun/get/get_list_kontributor_by_id";
|
||||
import { Vote_getOnePublishbyId } from "@/app_modules/vote/fun/get/get_one_publish_by_id";
|
||||
|
||||
|
||||
export default async function Page({params}: {params: {id: string}}) {
|
||||
let voteId = params.id
|
||||
const dataVote = await Vote_getOnePublishbyId(voteId)
|
||||
const listKontributor = await Vote_getListKontributorById(voteId)
|
||||
|
||||
return (
|
||||
<>
|
||||
<Vote_DetailSemuaRiwayat
|
||||
dataVote={dataVote as any}
|
||||
listKontributor={listKontributor as any}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
14
src/app/dev/vote/edit/[id]/layout.tsx
Normal file
@@ -0,0 +1,14 @@
|
||||
import { LayoutVote_Edit } from "@/app_modules/vote";
|
||||
import React from "react";
|
||||
|
||||
export default async function Layout({
|
||||
children,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
return (
|
||||
<>
|
||||
<LayoutVote_Edit>{children}</LayoutVote_Edit>
|
||||
</>
|
||||
);
|
||||
}
|
||||
20
src/app/dev/vote/edit/[id]/page.tsx
Normal file
@@ -0,0 +1,20 @@
|
||||
import { Vote_Edit } from "@/app_modules/vote";
|
||||
import { Vote_getListDaftarNamaById } from "@/app_modules/vote/fun/get/get_list_daftar_vote_by_id";
|
||||
import { Vote_getOnebyId } from "@/app_modules/vote/fun/get/get_one_by_id";
|
||||
import _ from "lodash";
|
||||
|
||||
export default async function Page({ params }: { params: { id: string } }) {
|
||||
let voteId = params.id;
|
||||
const dataVote = await Vote_getOnebyId(voteId);
|
||||
const data = _.omit(dataVote, ["Voting_DaftarNamaVote"]);
|
||||
const listDaftarVote = await Vote_getListDaftarNamaById(voteId);
|
||||
|
||||
return (
|
||||
<>
|
||||
<Vote_Edit
|
||||
dataVote={data as any}
|
||||
listDaftarVote={listDaftarVote as any}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
12
src/app/dev/vote/main/beranda/page.tsx
Normal file
@@ -0,0 +1,12 @@
|
||||
import { Vote_Beranda } from "@/app_modules/vote";
|
||||
import { Vote_getAllListPublish } from "@/app_modules/vote/fun/get/get_all_list_publish";
|
||||
|
||||
export default async function Page() {
|
||||
const dataVote = await Vote_getAllListPublish()
|
||||
|
||||
return (
|
||||
<>
|
||||
<Vote_Beranda dataVote={dataVote as any} />
|
||||
</>
|
||||
);
|
||||
}
|
||||
12
src/app/dev/vote/main/kontribusi/page.tsx
Normal file
@@ -0,0 +1,12 @@
|
||||
import { Vote_Kontribusi } from "@/app_modules/vote";
|
||||
import { Vote_getAllListKontribusiByAuthorId } from "@/app_modules/vote/fun/get/get_list_kontribusi_by_author_id";
|
||||
|
||||
|
||||
export default async function Page() {
|
||||
const dataKontribusi = await Vote_getAllListKontribusiByAuthorId()
|
||||
return (
|
||||
<>
|
||||
<Vote_Kontribusi dataKontribusi={dataKontribusi as any} />
|
||||
</>
|
||||
);
|
||||
}
|
||||
14
src/app/dev/vote/main/layout.tsx
Normal file
@@ -0,0 +1,14 @@
|
||||
import { LayoutVote_Main } from "@/app_modules/vote";
|
||||
import React from "react";
|
||||
|
||||
export default async function Layout({
|
||||
children,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
return (
|
||||
<>
|
||||
<LayoutVote_Main>{children}</LayoutVote_Main>
|
||||
</>
|
||||
);
|
||||
}
|
||||
17
src/app/dev/vote/main/riwayat/page.tsx
Normal file
@@ -0,0 +1,17 @@
|
||||
import { Vote_Riwayat } from "@/app_modules/vote";
|
||||
import { Vote_getAllListRiwayat } from "@/app_modules/vote/fun/get/get_all_list_riwayat";
|
||||
import { Vote_getAllListRiwayatSaya } from "@/app_modules/vote/fun/get/get_all_list_riwayat_saya";
|
||||
|
||||
export default async function Page() {
|
||||
const listRiwayat = await Vote_getAllListRiwayat();
|
||||
const listRiwayatSaya = await Vote_getAllListRiwayatSaya()
|
||||
|
||||
return (
|
||||
<>
|
||||
<Vote_Riwayat
|
||||
listRiwayat={listRiwayat as any}
|
||||
listRiwayatSaya={listRiwayatSaya as any}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
21
src/app/dev/vote/main/status/page.tsx
Normal file
@@ -0,0 +1,21 @@
|
||||
import { Vote_Status } from "@/app_modules/vote";
|
||||
import { Vote_getListByStatusId } from "@/app_modules/vote/fun/get/get_list_status_by_status_id";
|
||||
|
||||
export default async function Page() {
|
||||
const listPublish = await Vote_getListByStatusId("1");
|
||||
const listReview = await Vote_getListByStatusId("2");
|
||||
const listDraft = await Vote_getListByStatusId("3");
|
||||
const listReject = await Vote_getListByStatusId("4");
|
||||
|
||||
|
||||
return (
|
||||
<>
|
||||
<Vote_Status
|
||||
listPublish={listPublish as any}
|
||||
listReview={listReview as any}
|
||||
listDraft={listDraft as any}
|
||||
listReject={listReject as any}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
9
src/app/dev/vote/splash/page.tsx
Normal file
@@ -0,0 +1,9 @@
|
||||
import { Vote_Splash } from "@/app_modules/vote";
|
||||
|
||||
export default async function Page() {
|
||||
return (
|
||||
<>
|
||||
<Vote_Splash />
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
import AppNotif from "@/app_modules/notif";
|
||||
// import './globals.css'
|
||||
import { CacheProvider } from "@emotion/react";
|
||||
import { MantineProvider, useEmotionCache } from "@mantine/core";
|
||||
import { Image, MantineProvider, useEmotionCache } from "@mantine/core";
|
||||
import { Notifications } from "@mantine/notifications";
|
||||
import { useServerInsertedHTML } from "next/navigation";
|
||||
import { ToastContainer, toast } from "react-toastify";
|
||||
@@ -27,10 +27,13 @@ export default function RootStyleRegistry({
|
||||
|
||||
return (
|
||||
<html lang="en" data-theme="light">
|
||||
<head>
|
||||
<title>HIPMI</title>
|
||||
</head>
|
||||
<body suppressHydrationWarning={true}>
|
||||
<CacheProvider value={cache}>
|
||||
<MantineProvider withGlobalStyles withNormalizeCSS>
|
||||
<Notifications position="top-center" containerWidth="250px" />
|
||||
<Notifications position="top-center" containerWidth="250px" />
|
||||
{children}
|
||||
{/* <ToastContainer position="bottom-center" />
|
||||
<AppNotif /> */}
|
||||
|
||||
12
src/app/lib/router_admin/router_admin_event.ts
Normal file
@@ -0,0 +1,12 @@
|
||||
export const RouterAdminEvent = {
|
||||
main_event: "/dev/admin/event/main",
|
||||
|
||||
// detail
|
||||
detail_tipe_acara: "/dev/admin/event/child/tipe_acara",
|
||||
detail_riwayat: "/dev/admin/event/child/riwayat",
|
||||
|
||||
// table
|
||||
table_review: "/dev/admin/event/table/review",
|
||||
table_publish: "/dev/admin/event/table/publish",
|
||||
table_reject: "/dev/admin/event/table/reject",
|
||||
};
|
||||
8
src/app/lib/router_admin/router_admin_vote.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
export const RouterAdminVote = {
|
||||
// main
|
||||
main: "/dev/admin/vote/main",
|
||||
table_publish: "/dev/admin/vote/child/table_publish",
|
||||
table_review: "/dev/admin/vote/child/table_review",
|
||||
table_reject: "/dev/admin/vote/child/table_reject",
|
||||
riwayat: "/dev/admin/vote/child/riwayat",
|
||||
};
|
||||
@@ -15,17 +15,14 @@ export const RouterAdminInvestasi = {
|
||||
};
|
||||
|
||||
export const RouterAdminDonasi = {
|
||||
|
||||
api_gambar_bukti_transfer: "/api/donasi/gambar_bukti_transfer/",
|
||||
|
||||
|
||||
main_donasi: "/dev/admin/donasi/main",
|
||||
// table
|
||||
table_publish: "/dev/admin/donasi/table/publish",
|
||||
table_review: "/dev/admin/donasi/table/review",
|
||||
table_reject: "/dev/admin/donasi/table/reject",
|
||||
|
||||
|
||||
// detail
|
||||
detail_publish: "/dev/admin/donasi/detail/publish/",
|
||||
detail_review: "/dev/admin/donasi/detail/review/",
|
||||
@@ -33,14 +30,11 @@ export const RouterAdminDonasi = {
|
||||
|
||||
// proses
|
||||
proses_transaksi: "/dev/admin/donasi/proses_transaksi/",
|
||||
pencairan_dana :"/dev/admin/donasi/pencairan_dana/",
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
pencairan_dana: "/dev/admin/donasi/pencairan_dana/",
|
||||
};
|
||||
|
||||
|
||||
|
||||
export const RouterAdminAward = {
|
||||
main_award: "/dev/admin/award/main",
|
||||
};
|
||||
|
||||
29
src/app/lib/router_hipmi/router_event.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
export const RouterEvent = {
|
||||
//main
|
||||
splash: "/dev/event/splash",
|
||||
beranda: "/dev/event/main/beranda",
|
||||
status_page: "/dev/event/main/status_page",
|
||||
kontribusi: "/dev/event/main/kontribusi",
|
||||
riwayat: "/dev/event/main/riwayat",
|
||||
|
||||
// status
|
||||
status_publish: "/dev/event/main/status_page/publish",
|
||||
status_review: "/dev/event/main/status_page/review",
|
||||
status_draft: "/dev/event/main/status_page/draft",
|
||||
status_reject: "/dev/event/main/status_page/reject",
|
||||
|
||||
//create
|
||||
create: "/dev/event/create",
|
||||
|
||||
// edit
|
||||
edit: "/dev/event/edit/",
|
||||
|
||||
// detail
|
||||
detail_main: "/dev/event/detail/main/",
|
||||
detail_kontribusi: "/dev/event/detail/kontribusi/",
|
||||
detail_publish: "/dev/event/detail/publish/",
|
||||
detail_review: "/dev/event/detail/review/",
|
||||
detail_draft: "/dev/event/detail/draft/",
|
||||
detail_reject: "/dev/event/detail/reject/",
|
||||
detail_riwayat: "/dev/event/detail/riwayat/",
|
||||
};
|
||||
24
src/app/lib/router_hipmi/router_vote.ts
Normal file
@@ -0,0 +1,24 @@
|
||||
export const RouterVote = {
|
||||
// main
|
||||
splash: "/dev/vote/splash",
|
||||
beranda: "/dev/vote/main/beranda",
|
||||
status: "/dev/vote/main/status",
|
||||
kontribusi: "/dev/vote/main/kontribusi",
|
||||
riwayat: "/dev/vote/main/riwayat",
|
||||
|
||||
// create
|
||||
create: "/dev/vote/create",
|
||||
|
||||
//
|
||||
edit: "/dev/vote/edit/",
|
||||
|
||||
//detail
|
||||
main_detail: "/dev/vote/detail/main/",
|
||||
detail_publish: "/dev/vote/detail/publish/",
|
||||
detail_review: "/dev/vote/detail/review/",
|
||||
detail_draft: "/dev/vote/detail/draft/",
|
||||
detail_reject: "/dev/vote/detail/reject/",
|
||||
detail_kontribusi: "/dev/vote/detail/kontribusi/",
|
||||
detail_semua_riwayat: "/dev/vote/detail/semua_riwayat/",
|
||||
detail_riwayat_saya: "/dev/vote/detail/riwayat_saya/",
|
||||
};
|
||||
@@ -1,13 +1,54 @@
|
||||
'use client'
|
||||
"use client";
|
||||
|
||||
import { Button } from "@mantine/core";
|
||||
import { Box, Button, Stack, TextInput } from "@mantine/core";
|
||||
import makuro_test from "./makuro_test";
|
||||
import { useState } from "react";
|
||||
import _, { forIn } from "lodash";
|
||||
|
||||
export default function ViewMakuro() {
|
||||
const [listnya, setListnya] = useState<any[]>([
|
||||
{
|
||||
name: "Voting",
|
||||
value: "",
|
||||
},
|
||||
{ name: "Voting", value: "" },
|
||||
]);
|
||||
|
||||
return <>
|
||||
return (
|
||||
<>
|
||||
<Stack p={24}>
|
||||
{listnya.map((e, k) => (
|
||||
<Box key={k}>
|
||||
<TextInput
|
||||
onChange={(v) => {
|
||||
const val = _.clone(listnya);
|
||||
val[k].value = v.currentTarget.value;
|
||||
setListnya([...val]);
|
||||
}}
|
||||
label={e.name}
|
||||
/>
|
||||
</Box>
|
||||
))}
|
||||
<Button
|
||||
onClick={() => makuro_test()}
|
||||
>Tekan Aja</Button>
|
||||
onClick={() => {
|
||||
// const cek = listnya[listnya.length - 1]
|
||||
// console.log(cek.id + 1);
|
||||
|
||||
if (listnya.length > 4) return console.log("ga bisa lebih");
|
||||
setListnya([...listnya, { name: "Voting", value: "" }]);
|
||||
}}
|
||||
>
|
||||
{" "}
|
||||
Tambah
|
||||
</Button>
|
||||
<Button
|
||||
onClick={() => {
|
||||
console.log(JSON.stringify(listnya, null, 4));
|
||||
}}
|
||||
>
|
||||
Hasilnya
|
||||
</Button>
|
||||
</Stack>
|
||||
</>
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
14
src/app_modules/admin/component/header_tamplate.tsx
Normal file
@@ -0,0 +1,14 @@
|
||||
"use client";
|
||||
|
||||
import { Box, Title, Divider, Stack } from "@mantine/core";
|
||||
|
||||
export default function ComponentAdminGlobal_HeaderTamplate({name}: {name: string}) {
|
||||
return (
|
||||
<>
|
||||
<Stack spacing={"xs"}>
|
||||
<Title>{name ? name : null}</Title>
|
||||
<Divider/>
|
||||
</Stack>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
import { atomWithStorage } from "jotai/utils";
|
||||
|
||||
export const gs_adminDonasi_hotMenu = atomWithStorage("gs_adminDonasi_hotMenu", 0)
|
||||
195
src/app_modules/admin/event/child/riwayat.tsx
Normal file
@@ -0,0 +1,195 @@
|
||||
"use client";
|
||||
|
||||
import {
|
||||
Avatar,
|
||||
Box,
|
||||
Button,
|
||||
Center,
|
||||
Divider,
|
||||
Grid,
|
||||
Group,
|
||||
Loader,
|
||||
Modal,
|
||||
Paper,
|
||||
SimpleGrid,
|
||||
Spoiler,
|
||||
Stack,
|
||||
Table,
|
||||
Text,
|
||||
Title,
|
||||
} from "@mantine/core";
|
||||
import ComponentAdminGlobal_HeaderTamplate from "../../component/header_tamplate";
|
||||
import {
|
||||
MODEL_EVENT,
|
||||
MODEL_EVENT_PESERTA,
|
||||
} from "@/app_modules/event/model/interface";
|
||||
import { data } from "autoprefixer";
|
||||
import _ from "lodash";
|
||||
import moment from "moment";
|
||||
import { IconEyeShare } from "@tabler/icons-react";
|
||||
import { useDisclosure, useShallowEffect } from "@mantine/hooks";
|
||||
import { useState } from "react";
|
||||
import { AdminEvent_getListPesertaById } from "../fun/get/get_list_peserta_by_id";
|
||||
import { RouterProfile } from "@/app/lib/router_hipmi/router_katalog";
|
||||
|
||||
export default function AdminEvent_Riwayat({
|
||||
listRiwayat,
|
||||
}: {
|
||||
listRiwayat: any;
|
||||
}) {
|
||||
return (
|
||||
<>
|
||||
<Stack>
|
||||
<ComponentAdminGlobal_HeaderTamplate name="Event: Riwayat" />
|
||||
<DetailRiwayat listRiwayat={listRiwayat} />
|
||||
</Stack>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
function DetailRiwayat({ listRiwayat }: { listRiwayat: MODEL_EVENT[] }) {
|
||||
const [opened, setOpen] = useState(false);
|
||||
const [peserta, setPeserta] = useState<MODEL_EVENT_PESERTA[]>();
|
||||
const [eventId, setEventId] = useState("");
|
||||
const [loading, setLoading] = useState(false);
|
||||
|
||||
const TableRows = listRiwayat.map((e, i) => (
|
||||
<tr key={e.id}>
|
||||
<td>
|
||||
<Button
|
||||
loading={e.id === eventId ? (loading === true ? true : false) : false}
|
||||
color={"green"}
|
||||
leftIcon={<IconEyeShare />}
|
||||
radius={"xl"}
|
||||
onClick={async () => {
|
||||
setEventId(e.id);
|
||||
setLoading(true);
|
||||
await new Promise((r) => setTimeout(r, 500));
|
||||
await AdminEvent_getListPesertaById(e.id).then((res: any) => {
|
||||
setLoading(false);
|
||||
setPeserta(res);
|
||||
});
|
||||
setOpen(true);
|
||||
}}
|
||||
>
|
||||
Peserta
|
||||
</Button>
|
||||
</td>
|
||||
<td>{e.title}</td>
|
||||
<td>{e.lokasi}</td>
|
||||
<td>{e.EventMaster_TipeAcara.name}</td>
|
||||
<td>{e.tanggal.toLocaleString("id-ID", { dateStyle: "full" })}</td>
|
||||
<td>
|
||||
{e.tanggal.toLocaleTimeString([], {
|
||||
hour: "2-digit",
|
||||
minute: "2-digit",
|
||||
hour12: false,
|
||||
})}
|
||||
</td>
|
||||
<td>
|
||||
<Spoiler hideLabel="sembunyikan" maxHeight={50} showLabel="tampilkan">
|
||||
{e.deskripsi}
|
||||
</Spoiler>
|
||||
</td>
|
||||
</tr>
|
||||
));
|
||||
|
||||
useShallowEffect(() => {
|
||||
getAllPeserta(eventId);
|
||||
}, [eventId]);
|
||||
|
||||
async function getAllPeserta(eventId: string) {
|
||||
await AdminEvent_getListPesertaById(eventId).then((res: any) =>
|
||||
setPeserta(res)
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<Modal
|
||||
opened={opened}
|
||||
onClose={() => setOpen(false)}
|
||||
size={"md"}
|
||||
// closeOnClickOutside={false}
|
||||
withCloseButton={false}
|
||||
>
|
||||
<Paper>
|
||||
<Stack>
|
||||
<Center>
|
||||
<Title order={3}>Daftar Peserta</Title>
|
||||
</Center>
|
||||
<Stack>
|
||||
{peserta?.map((e) => (
|
||||
<Stack key={e.id} spacing={"xs"}>
|
||||
<Grid >
|
||||
<Grid.Col span={"content"}>
|
||||
<Avatar
|
||||
sx={{ borderStyle: "solid", borderWidth: "0.5px" }}
|
||||
radius={"xl"}
|
||||
src={
|
||||
RouterProfile.api_foto_profile + e.User.Profile.imagesId
|
||||
}
|
||||
/>
|
||||
</Grid.Col>
|
||||
<Grid.Col span={"auto"}>
|
||||
<Group align="center" h={"100%"}>
|
||||
<Text>{e.User.Profile.name}</Text>
|
||||
</Group>
|
||||
</Grid.Col>
|
||||
</Grid>
|
||||
<Divider/>
|
||||
</Stack>
|
||||
))}
|
||||
</Stack>
|
||||
</Stack>
|
||||
</Paper>
|
||||
</Modal>
|
||||
|
||||
<Box>
|
||||
<Box bg={"gray.1"} p={"xs"}>
|
||||
<Title order={6} c={"gray"}>
|
||||
RIWAYAT
|
||||
</Title>
|
||||
</Box>
|
||||
<Table
|
||||
withBorder
|
||||
verticalSpacing={"md"}
|
||||
horizontalSpacing={"xl"}
|
||||
p={"md"}
|
||||
striped
|
||||
highlightOnHover
|
||||
>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
<Center>Aksi</Center>
|
||||
</th>
|
||||
<th>
|
||||
<Center>Judul</Center>
|
||||
</th>
|
||||
<th>
|
||||
<Center>Lokasi</Center>
|
||||
</th>
|
||||
<th>Tipe Acara</th>
|
||||
<th>Tanggal</th>
|
||||
<th>Jam</th>
|
||||
<th>
|
||||
<Center>Deskripsi</Center>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>{TableRows}</tbody>
|
||||
</Table>
|
||||
<Center>
|
||||
{_.isEmpty(TableRows) ? (
|
||||
<Center h={"50vh"}>
|
||||
<Title order={6}>Tidak Ada Data</Title>
|
||||
</Center>
|
||||
) : (
|
||||
""
|
||||
)}
|
||||
</Center>
|
||||
</Box>
|
||||
</>
|
||||
);
|
||||
}
|
||||
238
src/app_modules/admin/event/child/tipe_acara.tsx
Normal file
@@ -0,0 +1,238 @@
|
||||
"use client";
|
||||
|
||||
import {
|
||||
ActionIcon,
|
||||
Box,
|
||||
Button,
|
||||
Divider,
|
||||
Group,
|
||||
List,
|
||||
Modal,
|
||||
Paper,
|
||||
SimpleGrid,
|
||||
Stack,
|
||||
Text,
|
||||
TextInput,
|
||||
Title,
|
||||
} from "@mantine/core";
|
||||
import ComponentAdminDonasi_TombolKembali from "../../donasi/component/tombol_kembali";
|
||||
import ComponentAdminGlobal_HeaderTamplate from "../../component/header_tamplate";
|
||||
import { MODEL_DEFAULT_MASTER } from "@/app_modules/model_global/interface";
|
||||
import { useState } from "react";
|
||||
import { AdminEvent_funCreateTipeAcara } from "../fun/create/fun_create_tipe_acara";
|
||||
import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/component_global/notif_global/notifikasi_peringatan";
|
||||
import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil";
|
||||
import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal";
|
||||
import { AdminEvent_getListTipeAcara } from "../fun/get/get_list_tipe_acara";
|
||||
import { IconEditCircle, IconTrash } from "@tabler/icons-react";
|
||||
import { AdminEvent_funEditTipeAcara } from "../fun/edit/fun_edit_tipe_acara";
|
||||
import { useDisclosure } from "@mantine/hooks";
|
||||
import { AdminEvent_funEditActivationTipeAcaraById } from "../fun/edit/fun_edit_activation_tipe_acara";
|
||||
import { number } from "echarts";
|
||||
|
||||
export default function AdminEvent_DetailTipeAcara({
|
||||
listTipe,
|
||||
}: {
|
||||
listTipe: any;
|
||||
}) {
|
||||
return (
|
||||
<>
|
||||
<Stack>
|
||||
<ComponentAdminGlobal_HeaderTamplate name="Event: Tipe Acara" />
|
||||
<DetailTipeAcara listTipe={listTipe} />
|
||||
</Stack>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
function DetailTipeAcara({ listTipe }: { listTipe: MODEL_DEFAULT_MASTER[] }) {
|
||||
const [tipe, setTipe] = useState(listTipe);
|
||||
const [name, setName] = useState("");
|
||||
const [openEditor, setOpenEditor] = useState(false);
|
||||
const [edit, setEdit] = useState<MODEL_DEFAULT_MASTER | null>(null);
|
||||
const [opened, { open, close }] = useDisclosure(false);
|
||||
const [hapusTipe, setHapusTipe] = useState({
|
||||
id: "",
|
||||
name: "",
|
||||
});
|
||||
|
||||
return (
|
||||
<>
|
||||
<Modal opened={opened} onClose={close} centered withCloseButton={false}>
|
||||
<Stack>
|
||||
<Title order={6}>
|
||||
Anda yakin akan menghapus{" "}
|
||||
<Text span c={"red"} inherit>
|
||||
{hapusTipe.name}
|
||||
</Text>{" "}
|
||||
?
|
||||
</Title>
|
||||
<Group position="center">
|
||||
<Button onClick={() => close()}>Batal</Button>
|
||||
<Button
|
||||
onClick={() => onDelete(hapusTipe as any, close, setTipe)}
|
||||
color="red"
|
||||
>
|
||||
Hapus
|
||||
</Button>
|
||||
</Group>
|
||||
</Stack>
|
||||
</Modal>
|
||||
|
||||
<SimpleGrid
|
||||
cols={3}
|
||||
spacing="lg"
|
||||
breakpoints={[
|
||||
{ maxWidth: "62rem", cols: 4, spacing: "lg" },
|
||||
{ maxWidth: "48rem", cols: 2, spacing: "sm" },
|
||||
{ maxWidth: "36rem", cols: 1, spacing: "sm" },
|
||||
]}
|
||||
>
|
||||
<div>
|
||||
<Paper p={"sm"} shadow="lg" withBorder>
|
||||
<Stack>
|
||||
<TextInput
|
||||
value={name ? name : ""}
|
||||
label="Masukan Tipe"
|
||||
placeholder="Contoh: Seminar, Workshop, dll."
|
||||
onChange={(val) => {
|
||||
setName(val.target.value);
|
||||
}}
|
||||
/>
|
||||
<Group position="right">
|
||||
<Button onClick={() => onSave(name, setName, setTipe)}>
|
||||
Tambah
|
||||
</Button>
|
||||
</Group>
|
||||
</Stack>
|
||||
</Paper>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<Paper p={"md"} shadow="lg" withBorder>
|
||||
<Stack>
|
||||
<Title order={3}>Tipe Acara Yang Tersedia </Title>
|
||||
<Stack px={"md"}>
|
||||
{tipe.map((e, i) => (
|
||||
<Stack key={e.id} spacing={"xs"}>
|
||||
<Group position="apart">
|
||||
<Text>{e.name}</Text>
|
||||
<Group>
|
||||
<ActionIcon
|
||||
variant="transparent"
|
||||
onClick={() => {
|
||||
setOpenEditor(true);
|
||||
setEdit(e);
|
||||
}}
|
||||
>
|
||||
<IconEditCircle color="green" />
|
||||
</ActionIcon>{" "}
|
||||
<ActionIcon
|
||||
variant="transparent"
|
||||
onClick={() => {
|
||||
open();
|
||||
setHapusTipe({
|
||||
...hapusTipe,
|
||||
id: e.id,
|
||||
name: e.name,
|
||||
});
|
||||
}}
|
||||
>
|
||||
<IconTrash color="red" />
|
||||
</ActionIcon>
|
||||
</Group>
|
||||
</Group>
|
||||
<Divider />
|
||||
</Stack>
|
||||
))}
|
||||
</Stack>
|
||||
</Stack>
|
||||
</Paper>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
{openEditor ? (
|
||||
<Paper p={"sm"} shadow="lg" withBorder>
|
||||
<Stack>
|
||||
<TextInput
|
||||
value={edit?.name ? edit?.name : ""}
|
||||
label="Edit Tipe Event"
|
||||
placeholder="Contoh: Ramah Tamah, dll"
|
||||
onChange={(val) => {
|
||||
setEdit({
|
||||
...(edit as any),
|
||||
name: val.target.value,
|
||||
});
|
||||
}}
|
||||
/>
|
||||
<Group position="right">
|
||||
<Group position="apart">
|
||||
<Button color="red" onClick={() => setOpenEditor(false)}>
|
||||
Batal
|
||||
</Button>
|
||||
<Button
|
||||
color="green"
|
||||
onClick={() =>
|
||||
onUpdate(edit?.id, edit?.name, setTipe, setOpenEditor)
|
||||
}
|
||||
>
|
||||
Update
|
||||
</Button>
|
||||
</Group>
|
||||
</Group>
|
||||
</Stack>
|
||||
</Paper>
|
||||
) : (
|
||||
""
|
||||
)}
|
||||
</div>
|
||||
</SimpleGrid>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
async function onSave(name: string, setName: any, setTipe: any) {
|
||||
if (name === "")
|
||||
return ComponentGlobal_NotifikasiPeringatan("Isi Tipe Acara");
|
||||
|
||||
await AdminEvent_funCreateTipeAcara(name).then(async (res) => {
|
||||
if (res.status === 201) {
|
||||
await AdminEvent_getListTipeAcara().then((val) => {
|
||||
setTipe(val);
|
||||
setName("");
|
||||
ComponentGlobal_NotifikasiBerhasil("Berhasil Menyimpan Data");
|
||||
});
|
||||
} else {
|
||||
ComponentGlobal_NotifikasiGagal("Gagal Menyimpan Data");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async function onUpdate(id: any, edit: any, setTipe: any, setOpenEditor: any) {
|
||||
await AdminEvent_funEditTipeAcara(id, edit).then(async (res) => {
|
||||
if (res.status === 200) {
|
||||
await AdminEvent_getListTipeAcara().then((val) => {
|
||||
setTipe(val);
|
||||
ComponentGlobal_NotifikasiBerhasil(res.message);
|
||||
setOpenEditor(false);
|
||||
});
|
||||
} else {
|
||||
ComponentGlobal_NotifikasiGagal(res.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async function onDelete(data: MODEL_DEFAULT_MASTER, close: any, setTipe: any) {
|
||||
await AdminEvent_funEditActivationTipeAcaraById(data.id as any).then(
|
||||
async (res) => {
|
||||
if (res.status === 200) {
|
||||
const data = await AdminEvent_getListTipeAcara();
|
||||
setTipe(data);
|
||||
ComponentGlobal_NotifikasiBerhasil(res.message);
|
||||
close();
|
||||
} else {
|
||||
ComponentGlobal_NotifikasiGagal(res.message);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
"use server";
|
||||
|
||||
import prisma from "@/app/lib/prisma";
|
||||
|
||||
/**
|
||||
*
|
||||
* @param statusId | string > 1 - 4
|
||||
* @returns jumlah dari donasi per status
|
||||
*/
|
||||
export default async function AdminEvent_funCountByStatusId(statusId: string) {
|
||||
if (statusId === "1") {
|
||||
const count = await prisma.event.count({
|
||||
where: {
|
||||
eventMaster_StatusId: "1",
|
||||
tanggal: {
|
||||
gte: new Date
|
||||
}
|
||||
},
|
||||
});
|
||||
return count;
|
||||
}
|
||||
if (statusId === "2") {
|
||||
const count = await prisma.event.count({
|
||||
where: {
|
||||
eventMaster_StatusId: "2",
|
||||
},
|
||||
});
|
||||
return count;
|
||||
}
|
||||
if (statusId === "3") {
|
||||
const count = await prisma.event.count({
|
||||
where: {
|
||||
eventMaster_StatusId: "3",
|
||||
},
|
||||
});
|
||||
return count;
|
||||
}
|
||||
if (statusId === "4") {
|
||||
const count = await prisma.event.count({
|
||||
where: {
|
||||
eventMaster_StatusId: "4",
|
||||
},
|
||||
});
|
||||
return count;
|
||||
}
|
||||
if (statusId === undefined || statusId === null) {
|
||||
|
||||
return {
|
||||
status: 400,
|
||||
message: "Parameter tidak sesuai"
|
||||
}
|
||||
}
|
||||
}
|
||||
16
src/app_modules/admin/event/fun/count/fun_count_riwayat.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
"use server";
|
||||
|
||||
import prisma from "@/app/lib/prisma";
|
||||
|
||||
export async function AdminEvent_funCountRiwayat() {
|
||||
const data = await prisma.event.count({
|
||||
where: {
|
||||
eventMaster_StatusId: "1",
|
||||
tanggal: {
|
||||
lte: new Date(),
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
return data;
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
"use server"
|
||||
|
||||
import prisma from "@/app/lib/prisma"
|
||||
|
||||
export async function AdminEvent_funCountTipeAcara() {
|
||||
const data = await prisma.eventMaster_TipeAcara.count({})
|
||||
return data
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
"use server";
|
||||
|
||||
import prisma from "@/app/lib/prisma";
|
||||
import { revalidatePath } from "next/cache";
|
||||
|
||||
export async function AdminEvent_funCreateTipeAcara(name: string) {
|
||||
const dataAwal = await prisma.eventMaster_TipeAcara.findFirst({
|
||||
orderBy: {
|
||||
id: "desc",
|
||||
},
|
||||
});
|
||||
|
||||
const res = await prisma.eventMaster_TipeAcara.create({
|
||||
data: {
|
||||
id: Number(dataAwal?.id) + 1,
|
||||
name: name,
|
||||
},
|
||||
});
|
||||
|
||||
if (!res) return { status: 400, message: "Gagal Menambahkan" };
|
||||
revalidatePath("/dev/admin/event/detail/tipe_acara");
|
||||
return {
|
||||
status: 201,
|
||||
message: "Berhasil Menambahkan",
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
"use server";
|
||||
|
||||
import prisma from "@/app/lib/prisma";
|
||||
import { revalidatePath } from "next/cache";
|
||||
|
||||
export async function AdminEvent_funEditActivationTipeAcaraById(id: number) {
|
||||
const updt = await prisma.eventMaster_TipeAcara.update({
|
||||
where: {
|
||||
id: id,
|
||||
},
|
||||
data: {
|
||||
active: false,
|
||||
},
|
||||
});
|
||||
|
||||
if(!updt) return {status: 400, message: "Gagal Update"}
|
||||
revalidatePath("/dev/admin/event/child/tipe_acara");
|
||||
return {
|
||||
status: 200,
|
||||
message: "Update Berhasil"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
"use server";
|
||||
|
||||
import prisma from "@/app/lib/prisma";
|
||||
import { revalidatePath } from "next/cache";
|
||||
|
||||
export async function AdminEvent_funEditStatusPublishById(
|
||||
eventId: string,
|
||||
statusId: string
|
||||
) {
|
||||
console.log(eventId);
|
||||
const updt = await prisma.event.update({
|
||||
where: {
|
||||
id: eventId,
|
||||
},
|
||||
data: {
|
||||
eventMaster_StatusId: statusId,
|
||||
},
|
||||
});
|
||||
|
||||
if (!updt) return { status: 400, message: "Update Gagal" };
|
||||
revalidatePath("/dev/admin/event/main");
|
||||
return {
|
||||
status: 200,
|
||||
message: "Berhasil Update Status",
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
"use server";
|
||||
|
||||
import prisma from "@/app/lib/prisma";
|
||||
import { MODEL_EVENT } from "@/app_modules/event/model/interface";
|
||||
import { revalidatePath } from "next/cache";
|
||||
|
||||
export async function AdminEvent_funEditCatatanById(
|
||||
data: MODEL_EVENT,
|
||||
statudId: string
|
||||
) {
|
||||
const updt = await prisma.event.update({
|
||||
where: {
|
||||
id: data.id,
|
||||
},
|
||||
data: {
|
||||
eventMaster_StatusId: statudId,
|
||||
catatan: data.catatan
|
||||
},
|
||||
});
|
||||
|
||||
if (!updt) return { status: 400, message: "Update Gagal" };
|
||||
revalidatePath("/dev/admin/event/main");
|
||||
return {
|
||||
status: 200,
|
||||
message: "Berhasil Update Status",
|
||||
};
|
||||
}
|
||||
22
src/app_modules/admin/event/fun/edit/fun_edit_tipe_acara.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
"use server";
|
||||
|
||||
import prisma from "@/app/lib/prisma";
|
||||
import { revalidatePath } from "next/cache";
|
||||
|
||||
export async function AdminEvent_funEditTipeAcara(id: number, name: string) {
|
||||
const updt = await prisma.eventMaster_TipeAcara.update({
|
||||
where: {
|
||||
id: id,
|
||||
},
|
||||
data: {
|
||||
name: name,
|
||||
},
|
||||
});
|
||||
|
||||
if(!updt) return {status: 400, message: "Gagal Update"}
|
||||
revalidatePath("/dev/admin/event/detail/tipe_acara")
|
||||
return {
|
||||
status: 200,
|
||||
message: "Update Berhasil"
|
||||
}
|
||||
}
|
||||
45
src/app_modules/admin/event/fun/get/get_list_all_riwayat.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
"use server";
|
||||
|
||||
import prisma from "@/app/lib/prisma";
|
||||
import _ from "lodash";
|
||||
|
||||
export async function AdminEvent_getListAllRiwayat() {
|
||||
const data = await prisma.event.findMany({
|
||||
orderBy: {
|
||||
tanggal: "desc",
|
||||
},
|
||||
where: {
|
||||
eventMaster_StatusId: "1",
|
||||
tanggal: {
|
||||
lte: new Date(),
|
||||
},
|
||||
},
|
||||
select: {
|
||||
id: true,
|
||||
title: true,
|
||||
lokasi: true,
|
||||
tanggal: true,
|
||||
deskripsi: true,
|
||||
Author: {
|
||||
select: {
|
||||
id: true,
|
||||
username: true,
|
||||
Profile: {
|
||||
select: {
|
||||
name: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
EventMaster_TipeAcara: {
|
||||
select: {
|
||||
id: true,
|
||||
name: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
return data;
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
"use server";
|
||||
|
||||
import prisma from "@/app/lib/prisma";
|
||||
|
||||
export async function AdminEvent_getListPesertaById(eventId: string) {
|
||||
const data = await prisma.event_Peserta.findMany({
|
||||
where: {
|
||||
eventId: eventId,
|
||||
},
|
||||
select: {
|
||||
id: true,
|
||||
User: {
|
||||
select: {
|
||||
Profile: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
return data;
|
||||
}
|
||||
@@ -0,0 +1,146 @@
|
||||
"use server";
|
||||
|
||||
import prisma from "@/app/lib/prisma";
|
||||
|
||||
export async function AdminEvent_getListTableByStatusId(statudId: string) {
|
||||
if (statudId === "1") {
|
||||
const getPublish = await prisma.event.findMany({
|
||||
orderBy: {
|
||||
tanggal: "desc",
|
||||
},
|
||||
where: {
|
||||
eventMaster_StatusId: "1",
|
||||
tanggal: {
|
||||
gte: new Date
|
||||
}
|
||||
|
||||
},
|
||||
select: {
|
||||
id: true,
|
||||
title: true,
|
||||
lokasi: true,
|
||||
tanggal: true,
|
||||
deskripsi: true,
|
||||
Author: {
|
||||
select: {
|
||||
id: true,
|
||||
username: true,
|
||||
Profile: {
|
||||
select: {
|
||||
name: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
EventMaster_Status: {
|
||||
select: {
|
||||
id: true,
|
||||
name: true,
|
||||
},
|
||||
},
|
||||
EventMaster_TipeAcara: {
|
||||
select: {
|
||||
id: true,
|
||||
name: true,
|
||||
},
|
||||
},
|
||||
Event_Peserta: true,
|
||||
},
|
||||
});
|
||||
return getPublish;
|
||||
}
|
||||
if (statudId === "2") {
|
||||
const getReview = await prisma.event.findMany({
|
||||
orderBy: {
|
||||
createdAt: "desc",
|
||||
},
|
||||
where: {
|
||||
eventMaster_StatusId: "2",
|
||||
},
|
||||
select: {
|
||||
id: true,
|
||||
title: true,
|
||||
lokasi: true,
|
||||
tanggal: true,
|
||||
deskripsi: true,
|
||||
Author: {
|
||||
select: {
|
||||
id: true,
|
||||
username: true,
|
||||
Profile: {
|
||||
select: {
|
||||
name: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
EventMaster_Status: {
|
||||
select: {
|
||||
id: true,
|
||||
name: true,
|
||||
},
|
||||
},
|
||||
EventMaster_TipeAcara: {
|
||||
select: {
|
||||
id: true,
|
||||
name: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
return getReview;
|
||||
}
|
||||
if (statudId === "3") {
|
||||
const getDraft = await prisma.event.findMany({
|
||||
orderBy: {
|
||||
updatedAt: "desc",
|
||||
},
|
||||
where: {
|
||||
eventMaster_StatusId: "3",
|
||||
},
|
||||
});
|
||||
return getDraft;
|
||||
}
|
||||
if (statudId === "4") {
|
||||
const getReject = await prisma.event.findMany({
|
||||
orderBy: {
|
||||
updatedAt: "desc",
|
||||
},
|
||||
where: {
|
||||
eventMaster_StatusId: "4",
|
||||
},
|
||||
select: {
|
||||
id: true,
|
||||
title: true,
|
||||
lokasi: true,
|
||||
tanggal: true,
|
||||
deskripsi: true,
|
||||
Author: {
|
||||
select: {
|
||||
id: true,
|
||||
username: true,
|
||||
Profile: {
|
||||
select: {
|
||||
name: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
EventMaster_Status: {
|
||||
select: {
|
||||
id: true,
|
||||
name: true,
|
||||
},
|
||||
},
|
||||
EventMaster_TipeAcara: {
|
||||
select: {
|
||||
id: true,
|
||||
name: true,
|
||||
},
|
||||
},
|
||||
catatan: true,
|
||||
},
|
||||
});
|
||||
return getReject;
|
||||
}
|
||||
}
|
||||
15
src/app_modules/admin/event/fun/get/get_list_tipe_acara.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
"use server"
|
||||
|
||||
import prisma from "@/app/lib/prisma"
|
||||
|
||||
export async function AdminEvent_getListTipeAcara(){
|
||||
const data = await prisma.eventMaster_TipeAcara.findMany({
|
||||
orderBy:{
|
||||
id: "asc"
|
||||
},
|
||||
where: {
|
||||
active: true
|
||||
}
|
||||
})
|
||||
return data
|
||||
}
|
||||
15
src/app_modules/admin/event/index.tsx
Normal file
@@ -0,0 +1,15 @@
|
||||
import AdminEvent_Main from "./main";
|
||||
import AdminEvent_TableReview from "./table_status/table_review";
|
||||
import AdminEvent_TablePublish from "./table_status/table_publish";
|
||||
import AdminEvent_TableReject from "./table_status/table_reject";
|
||||
import AdminEvent_DetailTipeAcara from "./child/tipe_acara";
|
||||
import AdminEvent_Riwayat from "./child/riwayat";
|
||||
|
||||
export {
|
||||
AdminEvent_Main,
|
||||
AdminEvent_TableReview,
|
||||
AdminEvent_TablePublish,
|
||||
AdminEvent_TableReject,
|
||||
AdminEvent_DetailTipeAcara,
|
||||
AdminEvent_Riwayat,
|
||||
};
|
||||
148
src/app_modules/admin/event/main/index.tsx
Normal file
@@ -0,0 +1,148 @@
|
||||
"use client";
|
||||
|
||||
import { RouterAdminEvent } from "@/app/lib/router_admin/router_admin_event";
|
||||
|
||||
import {
|
||||
Stack,
|
||||
Title,
|
||||
Divider,
|
||||
SimpleGrid,
|
||||
Paper,
|
||||
Center,
|
||||
Text,
|
||||
Box,
|
||||
Group,
|
||||
ActionIcon,
|
||||
} from "@mantine/core";
|
||||
import { IconChevronsRight } from "@tabler/icons-react";
|
||||
import { useRouter } from "next/navigation";
|
||||
import ComponentAdminGlobal_HeaderTamplate from "../../component/header_tamplate";
|
||||
|
||||
export default function AdminEvent_Main({
|
||||
countPublish,
|
||||
countReview,
|
||||
countDraft,
|
||||
countReject,
|
||||
countTipeAcara,
|
||||
countRiwayat,
|
||||
}: {
|
||||
countPublish: number;
|
||||
countReview: number;
|
||||
countDraft: number;
|
||||
countReject: number;
|
||||
countTipeAcara: number;
|
||||
countRiwayat: number
|
||||
}) {
|
||||
const router = useRouter();
|
||||
|
||||
const listStatus = [
|
||||
{
|
||||
id: 1,
|
||||
name: "Publish",
|
||||
jumlah: countPublish,
|
||||
path: RouterAdminEvent.table_publish,
|
||||
color: "green",
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: "Review",
|
||||
jumlah: countReview,
|
||||
path: RouterAdminEvent.table_review,
|
||||
color: "orange",
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
name: "Draft",
|
||||
jumlah: countDraft,
|
||||
path: "",
|
||||
color: "yellow",
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
name: "Reject",
|
||||
jumlah: countReject,
|
||||
path: RouterAdminEvent.table_reject,
|
||||
color: "red",
|
||||
},
|
||||
];
|
||||
|
||||
const listBox2 = [
|
||||
{
|
||||
id: 1,
|
||||
name: "Riwayat Event",
|
||||
jumlah: countRiwayat,
|
||||
path: RouterAdminEvent.table_publish,
|
||||
color: "gray",
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: "Tipe Acara",
|
||||
jumlah: countTipeAcara,
|
||||
path: RouterAdminEvent.table_publish,
|
||||
color: "gray",
|
||||
},
|
||||
];
|
||||
|
||||
return (
|
||||
<>
|
||||
<Stack spacing={"xl"}>
|
||||
<ComponentAdminGlobal_HeaderTamplate name="Event" />
|
||||
|
||||
<SimpleGrid
|
||||
cols={4}
|
||||
spacing="lg"
|
||||
breakpoints={[
|
||||
{ maxWidth: "62rem", cols: 4, spacing: "lg" },
|
||||
{ maxWidth: "48rem", cols: 2, spacing: "sm" },
|
||||
{ maxWidth: "36rem", cols: 1, spacing: "sm" },
|
||||
]}
|
||||
>
|
||||
{listStatus.map((e, i) => (
|
||||
<Paper
|
||||
key={i}
|
||||
bg={`${e.color}.2`}
|
||||
shadow="md"
|
||||
radius="md"
|
||||
p="md"
|
||||
// sx={{ borderColor: e.color, borderStyle: "solid" }}
|
||||
>
|
||||
<Group position="center">
|
||||
<Stack align="center" spacing={0}>
|
||||
<Text>{e.name}</Text>
|
||||
<Title>{e.jumlah}</Title>
|
||||
</Stack>
|
||||
</Group>
|
||||
</Paper>
|
||||
))}
|
||||
</SimpleGrid>
|
||||
<SimpleGrid
|
||||
cols={4}
|
||||
spacing="lg"
|
||||
breakpoints={[
|
||||
{ maxWidth: "62rem", cols: 4, spacing: "lg" },
|
||||
{ maxWidth: "48rem", cols: 2, spacing: "sm" },
|
||||
{ maxWidth: "36rem", cols: 1, spacing: "sm" },
|
||||
]}
|
||||
>
|
||||
{listBox2.map((e, i) => (
|
||||
<Paper
|
||||
key={i}
|
||||
bg={`${e.color}.2`}
|
||||
shadow="md"
|
||||
radius="md"
|
||||
p="md"
|
||||
// sx={{ borderColor: e.color, borderStyle: "solid" }}
|
||||
>
|
||||
<Group position="center">
|
||||
<Stack align="center" spacing={0}>
|
||||
<Text>{e.name}</Text>
|
||||
<Title>{e.jumlah}</Title>
|
||||
</Stack>
|
||||
</Group>
|
||||
</Paper>
|
||||
))}
|
||||
</SimpleGrid>
|
||||
</Stack>
|
||||
</>
|
||||
);
|
||||
}
|
||||
194
src/app_modules/admin/event/table_status/table_publish.tsx
Normal file
@@ -0,0 +1,194 @@
|
||||
"use client";
|
||||
|
||||
import { RouterAdminDonasi } from "@/app/lib/router_hipmi/router_admin";
|
||||
import {
|
||||
ActionIcon,
|
||||
Avatar,
|
||||
Box,
|
||||
Button,
|
||||
Center,
|
||||
Divider,
|
||||
Grid,
|
||||
Group,
|
||||
Modal,
|
||||
Paper,
|
||||
Spoiler,
|
||||
Stack,
|
||||
Table,
|
||||
Text,
|
||||
Title,
|
||||
} from "@mantine/core";
|
||||
import {
|
||||
IconBan,
|
||||
IconChevronLeft,
|
||||
IconEyeCheck,
|
||||
IconEyeShare,
|
||||
IconShare,
|
||||
} from "@tabler/icons-react";
|
||||
import { useRouter } from "next/navigation";
|
||||
|
||||
import { useDisclosure } from "@mantine/hooks";
|
||||
|
||||
import { useState } from "react";
|
||||
import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah";
|
||||
import ComponentAdminDonasi_TombolKembali from "../../donasi/component/tombol_kembali";
|
||||
import {
|
||||
MODEL_EVENT,
|
||||
MODEL_EVENT_PESERTA,
|
||||
} from "@/app_modules/event/model/interface";
|
||||
import ComponentAdminGlobal_HeaderTamplate from "../../component/header_tamplate";
|
||||
import moment from "moment";
|
||||
import _ from "lodash";
|
||||
import { AdminEvent_funEditStatusPublishById } from "../fun/edit/fun_edit_status_publish_by_id";
|
||||
import { AppRouterInstance } from "next/dist/shared/lib/app-router-context.shared-runtime";
|
||||
import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil";
|
||||
import { AdminEvent_getListTableByStatusId } from "../fun/get/get_list_table_by_status_id";
|
||||
import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal";
|
||||
import { RouterProfile } from "@/app/lib/router_hipmi/router_katalog";
|
||||
import { AdminEvent_getListPesertaById } from "../fun/get/get_list_peserta_by_id";
|
||||
|
||||
export default function AdminEvent_TablePublish({
|
||||
listPublish,
|
||||
}: {
|
||||
listPublish: MODEL_EVENT[];
|
||||
}) {
|
||||
return (
|
||||
<>
|
||||
<Stack>
|
||||
<ComponentAdminGlobal_HeaderTamplate name="Event: Table Publish" />
|
||||
<TableStatus listPublish={listPublish} />
|
||||
</Stack>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
function TableStatus({ listPublish }: { listPublish: MODEL_EVENT[] }) {
|
||||
const router = useRouter();
|
||||
const [opened, { open, close }] = useDisclosure(false);
|
||||
const [data, setData] = useState(listPublish);
|
||||
const [peserta, setPeserta] = useState<MODEL_EVENT_PESERTA[]>();
|
||||
const [eventId, setEventId] = useState("");
|
||||
const [loading, setLoading] = useState(false);
|
||||
|
||||
const TableRows = data.map((e, i) => (
|
||||
<tr key={i}>
|
||||
<td>{e.title}</td>
|
||||
<td>{e.lokasi}</td>
|
||||
<td>{e.EventMaster_TipeAcara.name}</td>
|
||||
<td>{e.tanggal.toLocaleString("id-ID", { dateStyle: "full" })}</td>
|
||||
<td>
|
||||
{e.tanggal.toLocaleTimeString([], {
|
||||
hour: "2-digit",
|
||||
minute: "2-digit",
|
||||
hour12: false,
|
||||
})}
|
||||
</td>
|
||||
<td>
|
||||
<Spoiler hideLabel="sembunyikan" maxHeight={50} showLabel="tampilkan">
|
||||
{e.deskripsi}
|
||||
</Spoiler>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<Button
|
||||
loading={e.id === eventId ? (loading === true ? true : false) : false}
|
||||
color={"green"}
|
||||
leftIcon={<IconEyeShare />}
|
||||
radius={"xl"}
|
||||
onClick={async () => {
|
||||
setEventId(e.id);
|
||||
setLoading(true);
|
||||
await new Promise((v) => setTimeout(v, 500));
|
||||
await AdminEvent_getListPesertaById(e.id).then((res: any) => {
|
||||
setPeserta(res);
|
||||
setLoading(false);
|
||||
});
|
||||
open();
|
||||
}}
|
||||
>
|
||||
Lihat Peserta
|
||||
</Button>
|
||||
</td>
|
||||
</tr>
|
||||
));
|
||||
|
||||
return (
|
||||
<>
|
||||
<Modal opened={opened} onClose={close}>
|
||||
<Paper>
|
||||
<Stack>
|
||||
<Center>
|
||||
<Title order={3}>Daftar Peserta</Title>
|
||||
</Center>
|
||||
<Stack>
|
||||
{peserta?.map((e) => (
|
||||
<Stack key={e.id} spacing={"xs"}>
|
||||
<Grid>
|
||||
<Grid.Col span={"content"}>
|
||||
<Avatar
|
||||
sx={{ borderStyle: "solid", borderWidth: "0.5px" }}
|
||||
radius={"xl"}
|
||||
src={
|
||||
RouterProfile.api_foto_profile +
|
||||
e.User.Profile.imagesId
|
||||
}
|
||||
/>
|
||||
</Grid.Col>
|
||||
<Grid.Col span={"auto"}>
|
||||
<Group align="center" h={"100%"}>
|
||||
<Text>{e.User.Profile.name}</Text>
|
||||
</Group>
|
||||
</Grid.Col>
|
||||
</Grid>
|
||||
<Divider />
|
||||
</Stack>
|
||||
))}
|
||||
</Stack>
|
||||
</Stack>
|
||||
</Paper>
|
||||
</Modal>
|
||||
<Box>
|
||||
<Box bg={"green.1"} p={"xs"}>
|
||||
<Title order={6} c={"green"}>
|
||||
PUBLISH
|
||||
</Title>
|
||||
</Box>
|
||||
<Table
|
||||
withBorder
|
||||
verticalSpacing={"md"}
|
||||
horizontalSpacing={"xl"}
|
||||
p={"md"}
|
||||
striped
|
||||
highlightOnHover
|
||||
>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Judul</th>
|
||||
<th>Lokasi</th>
|
||||
<th>Tipe Acara</th>
|
||||
<th>Tanggal</th>
|
||||
<th>Jam</th>
|
||||
<th>
|
||||
<Center>Deskripsi</Center>
|
||||
</th>
|
||||
|
||||
<th>
|
||||
<Center>Aksi</Center>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>{TableRows}</tbody>
|
||||
</Table>
|
||||
<Center>
|
||||
{_.isEmpty(TableRows) ? (
|
||||
<Center h={"50vh"}>
|
||||
<Title order={6}>Tidak Ada Data</Title>
|
||||
</Center>
|
||||
) : (
|
||||
""
|
||||
)}
|
||||
</Center>
|
||||
</Box>
|
||||
</>
|
||||
);
|
||||
}
|
||||
239
src/app_modules/admin/event/table_status/table_reject.tsx
Normal file
@@ -0,0 +1,239 @@
|
||||
"use client";
|
||||
|
||||
import { RouterAdminDonasi } from "@/app/lib/router_hipmi/router_admin";
|
||||
import {
|
||||
ActionIcon,
|
||||
Box,
|
||||
Button,
|
||||
Center,
|
||||
Flex,
|
||||
Group,
|
||||
Modal,
|
||||
ScrollArea,
|
||||
Spoiler,
|
||||
Stack,
|
||||
Table,
|
||||
Text,
|
||||
Textarea,
|
||||
Title,
|
||||
} from "@mantine/core";
|
||||
import {
|
||||
IconBan,
|
||||
IconChevronLeft,
|
||||
IconEyeCheck,
|
||||
IconEyeShare,
|
||||
IconPencilPlus,
|
||||
IconShare,
|
||||
} from "@tabler/icons-react";
|
||||
import { useRouter } from "next/navigation";
|
||||
|
||||
import { useDisclosure } from "@mantine/hooks";
|
||||
|
||||
import { useState } from "react";
|
||||
import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah";
|
||||
import ComponentAdminDonasi_TombolKembali from "../../donasi/component/tombol_kembali";
|
||||
import { MODEL_EVENT } from "@/app_modules/event/model/interface";
|
||||
import ComponentAdminGlobal_HeaderTamplate from "../../component/header_tamplate";
|
||||
import moment from "moment";
|
||||
import _ from "lodash";
|
||||
import { AdminEvent_funEditStatusPublishById } from "../fun/edit/fun_edit_status_publish_by_id";
|
||||
import { AppRouterInstance } from "next/dist/shared/lib/app-router-context.shared-runtime";
|
||||
import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil";
|
||||
import { AdminEvent_getListTableByStatusId } from "../fun/get/get_list_table_by_status_id";
|
||||
import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal";
|
||||
import { AdminEvent_funEditCatatanById } from "../fun/edit/fun_edit_status_reject_by_id";
|
||||
import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/component_global/notif_global/notifikasi_peringatan";
|
||||
|
||||
export default function AdminEvent_TableReject({
|
||||
listReject,
|
||||
}: {
|
||||
listReject: MODEL_EVENT[];
|
||||
}) {
|
||||
return (
|
||||
<>
|
||||
<Stack>
|
||||
<ComponentAdminGlobal_HeaderTamplate name="Event: Table Reject" />
|
||||
<TableStatus listReject={listReject} />
|
||||
</Stack>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
function TableStatus({ listReject }: { listReject: MODEL_EVENT[] }) {
|
||||
const router = useRouter();
|
||||
const [opened, { open, close }] = useDisclosure(false);
|
||||
const [data, setData] = useState(listReject);
|
||||
const [eventId, setEventId] = useState("");
|
||||
const [catatan, setCatatan] = useState("");
|
||||
|
||||
const TableRows = data.map((e, i) => (
|
||||
<tr key={i}>
|
||||
<td>
|
||||
<Box w={200}>{e.Author.Profile.name}</Box>
|
||||
</td>
|
||||
<td>
|
||||
<Box w={200}>{e.title}</Box>
|
||||
</td>
|
||||
<td>
|
||||
<Box w={200}>{e.lokasi}</Box>
|
||||
</td>
|
||||
<td>
|
||||
<Box w={200}>{e.EventMaster_TipeAcara.name}</Box>
|
||||
</td>
|
||||
<td>
|
||||
<Box w={200}>
|
||||
{e.tanggal.toLocaleString("id-ID", { dateStyle: "full" })}
|
||||
</Box>
|
||||
</td>
|
||||
<td>
|
||||
<Box w={100}>
|
||||
{e.tanggal.toLocaleTimeString([], {
|
||||
hour: "2-digit",
|
||||
minute: "2-digit",
|
||||
hour12: false,
|
||||
})}
|
||||
</Box>
|
||||
</td>
|
||||
<td>
|
||||
<Box w={500}>
|
||||
<Spoiler hideLabel="sembunyikan" maxHeight={50} showLabel="tampilkan">
|
||||
{e.deskripsi}
|
||||
</Spoiler>
|
||||
</Box>
|
||||
</td>
|
||||
<td>
|
||||
{" "}
|
||||
<Box w={400}>
|
||||
<Spoiler hideLabel="sembunyikan" maxHeight={50} showLabel="tampilkan">
|
||||
{e.catatan}
|
||||
</Spoiler>
|
||||
</Box>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<Button
|
||||
color={"red"}
|
||||
leftIcon={<IconPencilPlus />}
|
||||
radius={"xl"}
|
||||
onClick={() => {
|
||||
setEventId(e.id);
|
||||
setCatatan(e.catatan);
|
||||
open();
|
||||
}}
|
||||
>
|
||||
Tambah Catatan
|
||||
</Button>
|
||||
</td>
|
||||
</tr>
|
||||
));
|
||||
|
||||
return (
|
||||
<>
|
||||
<Modal
|
||||
opened={opened}
|
||||
onClose={close}
|
||||
centered
|
||||
withCloseButton={false}
|
||||
size={"lg"}
|
||||
>
|
||||
<Stack>
|
||||
<Textarea
|
||||
minRows={2}
|
||||
maxRows={5}
|
||||
maxLength={300}
|
||||
value={catatan}
|
||||
autosize
|
||||
label="Masukan Alasan Penolakan"
|
||||
placeholder="Contoh: Karena deskripsi kurang lengkap, dll"
|
||||
onChange={(val) => {
|
||||
setCatatan(val.target.value);
|
||||
}}
|
||||
/>
|
||||
<Group position="right">
|
||||
<Button
|
||||
radius={"xl"}
|
||||
onClick={() => {
|
||||
onUpdate(eventId, catatan, close as any, setData);
|
||||
}}
|
||||
>
|
||||
Simpan
|
||||
</Button>
|
||||
</Group>
|
||||
</Stack>
|
||||
</Modal>
|
||||
|
||||
<Box>
|
||||
<Box bg={"red.1"} p={"xs"}>
|
||||
<Title order={6} c={"red"}>
|
||||
REJECT
|
||||
</Title>
|
||||
</Box>
|
||||
<ScrollArea w={"100%"}>
|
||||
<Table
|
||||
w={2000}
|
||||
withBorder
|
||||
verticalSpacing={"md"}
|
||||
horizontalSpacing={"xl"}
|
||||
p={"md"}
|
||||
striped
|
||||
highlightOnHover
|
||||
>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Author</th>
|
||||
<th>Judul</th>
|
||||
<th>Lokasi</th>
|
||||
<th>Tipe Acara</th>
|
||||
<th>Tanggal</th>
|
||||
<th>Jam</th>
|
||||
<th>
|
||||
<Center>Deskripsi</Center>
|
||||
</th>
|
||||
<th>
|
||||
<Center>Catatan</Center>
|
||||
</th>
|
||||
|
||||
<th>
|
||||
<Center>Aksi</Center>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>{TableRows}</tbody>
|
||||
</Table>
|
||||
</ScrollArea>
|
||||
<Center>
|
||||
{_.isEmpty(TableRows) ? (
|
||||
<Center h={"50vh"}>
|
||||
<Title order={6}>Tidak Ada Data</Title>
|
||||
</Center>
|
||||
) : (
|
||||
""
|
||||
)}
|
||||
</Center>
|
||||
</Box>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
async function onUpdate(
|
||||
eventId: string,
|
||||
catatan: string,
|
||||
close: any,
|
||||
setData: any
|
||||
) {
|
||||
const body = {
|
||||
id: eventId,
|
||||
catatan: catatan,
|
||||
};
|
||||
await AdminEvent_funEditCatatanById(body as any, "4").then(async (res) => {
|
||||
if (res.status === 200) {
|
||||
await AdminEvent_getListTableByStatusId("4").then((val) => {
|
||||
setData(val);
|
||||
ComponentGlobal_NotifikasiBerhasil(res.message);
|
||||
close();
|
||||
});
|
||||
} else {
|
||||
ComponentGlobal_NotifikasiGagal(res.message);
|
||||
}
|
||||
});
|
||||
}
|
||||