deskripsi:
- pindah lib di dalam app ke src ( lib setara app dan app_modules )
This commit is contained in:
2025-02-12 10:57:10 +08:00
parent 8651357a3d
commit f419559379
904 changed files with 1129 additions and 1072 deletions

20
src/lib/APIs.ts Normal file
View File

@@ -0,0 +1,20 @@
const APIs = {
/**
*
* @param fileId | file id from wibu storage , atau bisa disimpan di DB
* @param size | file size 10 - 1000 , tergantung ukuran file dan kebutuhan saar di tampilkan
* @type {string}
*/
GET: ({ fileId, size }: { fileId: string; size?: string }) =>
size
? `https://wibu-storage.wibudev.com/api/files/${fileId}-size-${size}`
: `https://wibu-storage.wibudev.com/api/files/${fileId}`,
/**
* @type {string}
* @returns alamat API dari wibu storage
*/
GET_NO_PARAMS: "https://wibu-storage.wibudev.com/api/files/"
};
export default APIs;

View File

@@ -0,0 +1,10 @@
export const API_RouteEvent = {
get_all: ({ page }: { page: number }) => `/api/event/get-all?page=${page}`,
get_one_by_id: ({ eventId }: { eventId: string }) =>
`/api/event/get-one-by-id?eventId=${eventId}`,
check_kehadiran: ({ eventId, userId }: { eventId: string; userId: string }) =>
`/api/event/check-kehadiran?eventId=${eventId}&userId=${userId}`,
check_peserta: ({ eventId, userId }: { eventId: string; userId: string }) =>
`/api/event/check-peserta?eventId=${eventId}&userId=${userId}`,
list_peserta: ({ eventId, page }: { eventId: string, page: number }) => `/api/event/list-peserta?eventId=${eventId}&page=${page}`,
};

View File

@@ -0,0 +1,4 @@
export const API_RouteJob = {
get_all: ({ page, search }: { page: number; search?: string }) =>
`/api/job/get-all?page=${page}&search=${search || ""}`,
};

View File

@@ -0,0 +1,15 @@
import { ICategoryapp } from "@/app_modules/notifikasi/model/interface";
export const API_RouteNotifikasi = {
get_all_by_category: ({
category,
page,
}: {
category: ICategoryapp;
page: number;
}) => `/api/notifikasi/get-all-by-category?category=${category}&page=${page}`,
get_master_kategori: () => `/api/notifikasi/master`,
get_count_by_id: () => `/api/notifikasi/count`,
};

69
src/lib/global_state.ts Normal file
View File

@@ -0,0 +1,69 @@
import { atom } from "jotai";
/**
* @param status | status jika perlu acc admin > "Publish", "Review", "Draft", "Reject"
* @param status | khusus kategori | EVENT > "Peserta Event" | VOTING > "Voting Masuk" | DONASI > "Berhasil", "Proses", "Menunggu", "Gagal"
*/
export type ITypeStatusNotifikasi =
| "Publish"
| "Review"
| "Draft"
| "Reject"
// EVENT
| "Peserta Event"
// VOTING
| "Voting Masuk"
// DONASI & INVESTASI
| "Berhasil"
| "Proses"
| "Menunggu"
| "Gagal";
/**
* @param kategoriApp | "JOB", "VOTING", "EVENT", "DONASI", "INVESTASI", "COLLABORATION", "FORUM"
* @type string
*/
export type IRealtimeData = {
status?: ITypeStatusNotifikasi;
appId?: string;
userId: string;
pesan?: string;
title?: string;
kategoriApp?:
| "JOB"
| "VOTING"
| "EVENT"
| "DONASI"
| "INVESTASI"
| "COLLABORATION"
| "FORUM"
| "ACCESS"; // Untuk trigger akses user
};
// Access User
export const gs_access_user = atom<boolean>(false);
export const gs_realtimeData = atom<IRealtimeData | null>(null);
export const gs_admin_ntf = atom<number>(0);
export const gs_user_ntf = atom<number>(0);
export const gs_count_ntf = atom<number | null>(null);
// job
export const gs_adminJob_triggerReview = atom<boolean>(false);
export const gs_jobTiggerBeranda = atom<boolean>(false);
// event
export const gs_adminEvent_triggerReview = atom<boolean>(false);
export const gs_eventTriggerBeranda = atom<boolean>(false);
// voting
export const gs_adminVoting_triggerReview = atom<boolean>(false);
export const gs_votingTiggerBeranda = atom<boolean>(false);
// donasi
export const gs_adminDonasi_triggerReview = atom<boolean>(false);
export const gs_donasiTriggerBeranda = atom<boolean>(false);
// investasi
export const gs_adminInvestasi_triggerReview = atom<boolean>(false);
export const gs_investasiTriggerBeranda = atom<boolean>(false);

30
src/lib/id-derectory.ts Normal file
View File

@@ -0,0 +1,30 @@
const DIRECTORY_ID = {
profile_foto: "cm0x93rgo000jbp5tj8baoaus",
profile_background: "cm0x93ze8000lbp5t1a8uc9wl",
portofolio_logo: "cm0yjl6ug000310njwmk6j0tx",
map_pin: "cm0yjq8up000710njv5klra32",
map_image: "cm0yjqnxl000910njplqho07w",
// Investasi
investasi_image: "cm0yjs35h000b10njb35o12h1",
investasi_bukti_transfer: "cm0yjsflu000d10njrc3lnqho",
investasi_prospektus: "cm1soio74003p38bjyciwf1oy",
investasi_dokumen: "cm21g2hxw004d10dpx8j16tt7",
investasi_berita: "cm21g2yzc004f10dpbtqdfcjb",
// Donasi
donasi_image: "cm0yk1coh000f10nj597a99kv",
donasi_cerita_image: "cm2dvy9bi007v10dpmatb5yiy",
donasi_kabar: "cm2dvxo48007t10dpmmustxa2",
donasi_bukti_transfer: "cm0yk1pmh000h10njhi6m8b8t",
donasi_bukti_trf_pencairan_dana: "cm32s7h1q005yb5kuf5uiv5de",
// Job
job_image: "cm0ypp6zl0003kp7jf59zuvjy",
// Event
event_sponsor: "cm65zlbyf001udvmggnd6i0oh",
event_bukti_transfer: "cm65zlehy001wdvmgnobur2zh",
};
export default DIRECTORY_ID;

17
src/lib/index.ts Normal file
View File

@@ -0,0 +1,17 @@
import APIs from "./APIs";
import DIRECTORY_ID from "./id-derectory";
import prisma from "./prisma";
import { pathAssetImage } from "./path_asset_image";
import { RouterImagePreview } from "./router_hipmi/router_image_preview";
import { RouterAdminGlobal } from "./router_admin/router_admin_global";
import RealtimeProvider from "./realtime_provider";
export { DIRECTORY_ID };
export { prisma };
export { APIs };
export { pathAssetImage };
export { RealtimeProvider };
// Router
export { RouterImagePreview };
export { RouterAdminGlobal };

5
src/lib/limit.ts Normal file
View File

@@ -0,0 +1,5 @@
import pLimit from "p-limit";
const global_limit = pLimit(1);
export default global_limit;

View File

@@ -0,0 +1,6 @@
export const pathAssetImage = {
no_image: "/aset/global/no-image.svg",
avatar: "/aset/global/avatar.png",
main_background: "/aset/global/main_background.png",
new_loader: "/aset/global/loading.gif",
};

44
src/lib/prisma.back.txt Normal file
View File

@@ -0,0 +1,44 @@
import { PrismaClient } from '@prisma/client';
let prisma: PrismaClient;
if (process.env.NODE_ENV === 'production') {
prisma = new PrismaClient();
} else {
const globalWithPrisma = global as typeof globalThis & {
prisma: PrismaClient;
};
if (!globalWithPrisma.prisma) {
globalWithPrisma.prisma = new PrismaClient();
}
prisma = globalWithPrisma.prisma;
}
// Handle uncaught errors
process.on('uncaughtException', async (error) => {
console.error('Uncaught Exception:', error);
await prisma.$disconnect();
process.exit(1);
});
// Handle unhandled promise rejections
process.on('unhandledRejection', async (error) => {
console.error('Unhandled Rejection:', error);
await prisma.$disconnect();
process.exit(1);
});
// Handle graceful shutdown
process.on('SIGINT', async () => {
console.log('Received SIGINT signal. Closing database connections...');
await prisma.$disconnect();
process.exit(0);
});
process.on('SIGTERM', async () => {
console.log('Received SIGTERM signal. Closing database connections...');
await prisma.$disconnect();
process.exit(0);
});
export default prisma;

53
src/lib/prisma.ts Normal file
View File

@@ -0,0 +1,53 @@
import { PrismaClient } from "@prisma/client";
// Deklarasikan variabel global untuk menandai apakah listener sudah ditambahkan
declare global {
var prisma: PrismaClient;
var prismaListenersAdded: boolean; // Flag untuk menandai listener
}
let prisma: PrismaClient;
if (process.env.NODE_ENV === "production") {
prisma = new PrismaClient();
} else {
if (!global.prisma) {
global.prisma = new PrismaClient();
}
prisma = global.prisma;
}
// Tambahkan listener hanya jika belum ditambahkan sebelumnya
if (!global.prismaListenersAdded) {
// Handle uncaught errors
process.on("uncaughtException", async (error) => {
console.error("Uncaught Exception:", error);
await prisma.$disconnect();
process.exit(1);
});
// Handle unhandled promise rejections
process.on("unhandledRejection", async (error) => {
console.error("Unhandled Rejection:", error);
await prisma.$disconnect();
process.exit(1);
});
// Handle graceful shutdown
process.on("SIGINT", async () => {
console.log("Received SIGINT signal. Closing database connections...");
await prisma.$disconnect();
process.exit(0);
});
process.on("SIGTERM", async () => {
console.log("Received SIGTERM signal. Closing database connections...");
await prisma.$disconnect();
process.exit(0);
});
// Tandai bahwa listener sudah ditambahkan
global.prismaListenersAdded = true;
}
export default prisma;

View File

@@ -0,0 +1,261 @@
"use client";
import { useShallowEffect } from "@mantine/hooks";
import { useAtom } from "jotai";
import { WibuRealtime } from "wibu-pkg";
import {
gs_access_user,
gs_admin_ntf,
gs_adminDonasi_triggerReview,
gs_adminEvent_triggerReview,
gs_adminInvestasi_triggerReview,
gs_adminJob_triggerReview,
gs_adminVoting_triggerReview,
gs_donasiTriggerBeranda,
gs_eventTriggerBeranda,
gs_investasiTriggerBeranda,
gs_jobTiggerBeranda,
gs_realtimeData,
gs_user_ntf,
gs_votingTiggerBeranda,
IRealtimeData,
} from "./global_state";
// const WIBU_REALTIME_TOKEN: string | undefined =
// process.env.NEXT_PUBLIC_WIBU_REALTIME_TOKEN;
// Pasang tipe data di package WibuRealtime sebagai type adata setData
export type TypeNotification = {
type: "message" | "notification" | "trigger";
pushNotificationTo: "ADMIN" | "USER";
dataMessage?: IRealtimeData;
userId?: string;
};
// Tambahkan flag global untuk mencegah inisialisasi ulang
let isWibuRealtimeInitialized = false;
export default function RealtimeProvider({
userId,
WIBU_REALTIME_TOKEN,
}: {
userId: string;
WIBU_REALTIME_TOKEN: string;
}) {
const [dataRealtime, setDataRealtime] = useAtom(gs_realtimeData);
const [newAdminNtf, setNewAdminNtf] = useAtom(gs_admin_ntf);
const [newUserNtf, setNewUserNtf] = useAtom(gs_user_ntf);
// ACCESS USER
const [isAccessUser, setIsAccessUser] = useAtom(gs_access_user);
// JOB
const [isTriggerJobBeranda, setIsTriggerJobBeranda] =
useAtom(gs_jobTiggerBeranda);
const [isAdminJob_TriggerReview, setIsAdminJob_TriggerReview] = useAtom(
gs_adminJob_triggerReview
);
// EVENT
const [isTriggerEventBeranda, setIsTriggerEventBeranda] = useAtom(
gs_eventTriggerBeranda
);
const [isAdminEvent_TriggerReview, setIsAdminEvent_TriggerReview] = useAtom(
gs_adminEvent_triggerReview
);
// VOTING
const [isTriggerVotingBeranda, setIsTriggerVotingBeranda] = useAtom(
gs_votingTiggerBeranda
);
const [isAdminVoting_TriggerReview, setIsAdminVoting_TriggerReview] = useAtom(
gs_adminVoting_triggerReview
);
// DONASI
const [isAdminDonasi_TriggerReview, setIsAdminDonasi_TriggerReview] = useAtom(
gs_adminDonasi_triggerReview
);
const [isTriggerDonasiBeranda, setIsTriggerDonasiBeranda] = useAtom(
gs_donasiTriggerBeranda
);
// INVESTASI
const [isAdminInvestasi_TriggerReview, setIsAdminInvestasi_TriggerReview] =
useAtom(gs_adminInvestasi_triggerReview);
const [isTriggerInvestasiBeranda, setIsTriggerInvestasiBeranda] = useAtom(
gs_investasiTriggerBeranda
);
useShallowEffect(() => {
try {
if (!isWibuRealtimeInitialized) {
WibuRealtime.init({
project: "hipmi",
WIBU_REALTIME_TOKEN: WIBU_REALTIME_TOKEN,
onData(data: TypeNotification) {
// Notifikasi ke admin
if (
data.type == "notification" &&
data.pushNotificationTo == "ADMIN"
) {
setNewAdminNtf((e) => e + 1);
}
// trigger access
if (
data.type == "trigger" &&
data.pushNotificationTo == "USER" &&
data.dataMessage?.kategoriApp == "ACCESS" &&
data.dataMessage?.userId == userId
) {
setIsAccessUser(data.dataMessage.status as any);
}
// Notifikasi ke semua user , yang datanya di acc admin
if (
data.type == "notification" &&
data.pushNotificationTo == "USER" &&
data.dataMessage?.userId == userId
) {
setNewUserNtf((e) => e + 1);
setDataRealtime(data.dataMessage as any);
}
// ---------------------- JOB ------------------------- //
if (
data.type == "trigger" &&
data.pushNotificationTo == "ADMIN" &&
data.dataMessage?.kategoriApp == "JOB"
) {
setIsAdminJob_TriggerReview(true);
}
if (
data.type == "trigger" &&
data.pushNotificationTo == "USER" &&
data.dataMessage?.kategoriApp == "JOB" &&
data.dataMessage.status == "Publish"
) {
setIsTriggerJobBeranda(true);
}
// ---------------------- JOB ------------------------- //
// ---------------------- EVENT ------------------------- //
if (
data.type == "trigger" &&
data.pushNotificationTo == "ADMIN" &&
data.dataMessage?.kategoriApp == "EVENT"
) {
setIsAdminEvent_TriggerReview(true);
}
if (
data.type == "trigger" &&
data.pushNotificationTo == "USER" &&
data.dataMessage?.kategoriApp == "EVENT" &&
data.dataMessage.status == "Publish"
) {
setIsTriggerEventBeranda(true);
}
if (
data.type == "notification" &&
data.pushNotificationTo == "USER" &&
data.dataMessage?.status == "Peserta Event" &&
userId !== data.dataMessage?.userId
) {
setNewUserNtf((e) => e + 1);
}
// ---------------------- EVENT ------------------------- //
// ---------------------- VOTING ------------------------- //
if (
data.type == "trigger" &&
data.pushNotificationTo == "ADMIN" &&
data.dataMessage?.kategoriApp == "VOTING"
) {
setIsAdminVoting_TriggerReview(true);
}
if (
data.type == "trigger" &&
data.pushNotificationTo == "USER" &&
data.dataMessage?.kategoriApp == "VOTING" &&
data.dataMessage.status == "Publish"
) {
setIsTriggerVotingBeranda(true);
}
if (
data.type == "notification" &&
data.pushNotificationTo == "USER" &&
data.dataMessage?.status == "Voting Masuk" &&
userId !== data.dataMessage?.userId
) {
setNewUserNtf((e) => e + 1);
}
// ---------------------- VOTING ------------------------- //
// ---------------------- DONASI ------------------------- //
if (
data.type == "trigger" &&
data.pushNotificationTo == "ADMIN" &&
data.dataMessage?.kategoriApp == "DONASI"
) {
setIsAdminDonasi_TriggerReview(true);
}
if (
data.type == "trigger" &&
data.pushNotificationTo == "USER" &&
data.dataMessage?.kategoriApp == "DONASI" &&
data.dataMessage.status == "Publish"
) {
setIsTriggerDonasiBeranda(true);
}
// if (
// data.type == "notification" &&
// data.pushNotificationTo == "ADMIN" &&
// data.dataMessage?.status == "Menunggu" &&
// userId !== data.dataMessage?.userId
// ) {
// }
// ---------------------- DONASI ------------------------- //
// ---------------------- INVESTASI ------------------------- //
if (
data.type == "trigger" &&
data.pushNotificationTo == "ADMIN" &&
data.dataMessage?.kategoriApp == "INVESTASI"
) {
setIsAdminInvestasi_TriggerReview(true);
}
if (
data.type == "trigger" &&
data.pushNotificationTo == "USER" &&
data.dataMessage?.kategoriApp == "INVESTASI" &&
data.dataMessage.status == "Publish"
) {
setIsTriggerInvestasiBeranda(true);
}
// ---------------------- INVESTASI ------------------------- //
},
});
// Tandai bahwa WibuRealtime telah diinisialisasi
isWibuRealtimeInitialized = true;
}
} catch (error) {
console.log("Error Realtime:", error);
}
}, []);
return null;
}

View File

@@ -0,0 +1,6 @@
export const RouterAdminColab = {
dashboard: "/dev/admin/colab/dashboard",
table_publish: "/dev/admin/colab/sub-menu/publish",
table_group: "/dev/admin/colab/sub-menu/group",
table_reject: "/dev/admin/colab/sub-menu/reject",
};

View File

@@ -0,0 +1,3 @@
export const RouterAdminDeveloper = {
main: "/dev/admin/developer",
};

View File

@@ -0,0 +1,11 @@
export const RouterAdminDonasi = {
main: "/dev/admin/donasi/main",
table_publish: "/dev/admin/donasi/sub-menu/publish",
table_review: "/dev/admin/donasi/sub-menu/review",
table_reject: "/dev/admin/donasi/sub-menu/reject",
table_kategori: "/dev/admin/donasi/sub-menu/kategori",
transfer_invoice: "/dev/admin/donasi/sub-detail/transfer-invoice/",
transfer_invoice_reimbursement:
"/dev/admin/donasi/sub-detail/transfer-invoice-reimbursement/",
informasi: "/dev/admin/donasi/sub-menu/informasi",
};

View File

@@ -0,0 +1,20 @@
export const RouterAdminEvent = {
main_event: "/dev/admin/event/main",
// detail
detail_peserta: "/dev/admin/event/detail/peserta/",
detail_publish: "/dev/admin/event/detail/publish/",
detail_sponsor: "/dev/admin/event/detail/detail_sponsor/",
// child
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",
};

View File

@@ -0,0 +1,16 @@
export const RouterAdminForum = {
// main
main: "/dev/admin/forum/main",
// sub menu
table_posting: "/dev/admin/forum/sub-menu/posting",
table_report_posting: "/dev/admin/forum/sub-menu/report-posting",
table_report_komentar: "/dev/admin/forum/sub-menu/report-komentar",
// detail
detail_posting: "/dev/admin/forum/detail/",
// sub detail
report_komentar: "/dev/admin/forum/sub-detail/report-komentar/",
report_posting: "/dev/admin/forum/sub-detail/report-posting/",
};

View File

@@ -0,0 +1,7 @@
export const RouterAdminGlobal = {
/**
* @param fileId | file id from wibu storage , atau bisa diambil di DB
* @type {string}
*/
preview_image: ({ id }: { id: string }) => `/dev/admin/preview-image/${id}`,
};

View File

@@ -0,0 +1,15 @@
export const RouterAdminInvestasi = {
// API
api_bukti_transfer: "/api/investasi/bukti-transfer/",
main: "/dev/admin/investasi/main",
table_publish: "/dev/admin/investasi/sub-menu/publish",
table_review: "/dev/admin/investasi/sub-menu/review",
table_reject: "/dev/admin/investasi/sub-menu/reject",
// detail
detail_publish: "/dev/admin/investasi/detail/publish/",
detail_review: "/dev/admin/investasi/detail/review/",
detail_reject: "/dev/admin/investasi/detail/reject/",
bukti_transfer: "/dev/admin/investasi/bukti-transfer/",
};

View File

@@ -0,0 +1,8 @@
export const RouterAdminJob = {
main: "/dev/admin/job/main",
publish: "/dev/admin/job/child/publish",
review: "/dev/admin/job/child/review",
reject: "/dev/admin/job/child/reject",
arsip: "/dev/admin/job/child/arsip",
detail_poster: "/dev/admin/job/detail/poster/",
};

View File

@@ -0,0 +1,3 @@
export const RouterAdminMap = {
main: "/dev/admin/map",
};

View 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",
};

View File

@@ -0,0 +1,3 @@
export const RouterAdminUserAccess = {
main: "/dev/admin/user-access",
};

View File

@@ -0,0 +1,3 @@
export const RouterAdminAppInformation = {
main: "/dev/admin/app-information/main",
};

View File

@@ -0,0 +1,41 @@
export const RouterAdminDashboard = {
main_admin: "/dev/admin/main/dashboard",
splash_admin: "/dev/splash/admin",
};
export const RouterAdminInvestasi_OLD = {
main_investasi: "/dev/admin/investasi/main",
halaman_aksi: "/dev/admin/investasi/halaman_aksi/",
konfirmasi: "/dev/admin/investasi/konfirmasi/",
bukti_transfer: "/dev/admin/investasi/bukti_transfer",
status_transfer: "/dev/admin/investasi/status_transfer",
table_status_publish: "/dev/admin/investasi/table_status/publish",
table_status_review: "/dev/admin/investasi/table_status/review",
table_status_reject: "/dev/admin/investasi/table_status/reject",
};
export const RouterAdminDonasi_OLD = {
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",
table_kategori: "/dev/admin/donasi/table/kategori",
// detail
detail_publish: "/dev/admin/donasi/detail/publish/",
detail_review: "/dev/admin/donasi/detail/review/",
detail_reject: "/dev/admin/donasi/detail/reject/",
// proses
proses_transaksi: "/dev/admin/donasi/proses_transaksi/",
pencairan_dana: "/dev/admin/donasi/pencairan_dana/",
};
export const RouterAdminAward = {
main_award: "/dev/admin/award/main",
};

View File

@@ -0,0 +1,6 @@
export const RouterAuth = {
login: "/dev/auth/login",
validasi: "/dev/auth/validasi/",
register: "/dev/auth/register/",
check_cookies: "/dev/check-cookies",
};

View File

@@ -0,0 +1,29 @@
export const RouterColab = {
//splash
splash: "/dev/colab/splash",
//main
beranda: "/dev/colab/main/beranda",
status: "/dev/colab/main/status",
proyek: "/dev/colab/main/proyek",
grup_diskusi: "/dev/colab/main/grup",
notifikasi: "/dev/colab/main/notifikasi",
// create
create: "/dev/colab/create",
edit: "/dev/colab/edit/",
//detail
main_detail: "/dev/colab/detail/main_detail/",
status_review: "/dev/colab/detail/status/review/",
status_reject: "/dev/colab/detail/status/reject/",
status_publish: "/dev/colab/detail/status/publish/",
detail_partisipasi_proyek: "/dev/colab/detail/proyek/partisipasi/",
detail_proyek_saya: "/dev/colab/detail/proyek/saya/",
detail_grup: "/dev/colab/detail/grup/",
info_grup: "/dev/colab/detail/info-grup/",
detail_notifikasi: "/dev/colab/detail/notifikasi/",
group_chat: "/dev/colab/detail/group/",
// proyek
};

View File

@@ -0,0 +1,5 @@
export const RouterCrowd = {
main: "/dev/crowd/main",
investasi: "/dev/investasi/main",
donasi: "/dev/donasi/main/beranda"
}

View File

@@ -0,0 +1,58 @@
export const RouterDonasi = {
//api
api_gambar: "/api/donasi/gambar/",
api_gambar_cerita: "/api/donasi/gambar_cerita/",
api_image: "/api/donasi/image/",
api_image_cerita: "/api/donasi/image_cerita/",
api_gambar_kabar: "/api/donasi/gambar_kabar/",
api_gambar_pencairan: "/api/donasi/gambar_pencairan/",
//main
main_beranda: "/dev/donasi/main/beranda",
status_galang_dana: ({ id }: { id: string }) => `/dev/donasi/main/galang_dana/${id}`,
main_donasi_saya: "/dev/donasi/main/donasi_saya",
// create
create_donasi: "/dev/donasi/create/create_donasi",
create_cerita_penggalang: "/dev/donasi/create/cerita_penggalang/",
create_kabar: "/dev/donasi/create/create_kabar/",
// edit
update_kabar: "/dev/donasi/edit/update_kabar/",
edit_donasi: "/dev/donasi/edit/edit_donasi/",
edit_cerita_penggalang: "/dev/donasi/edit/edit_cerita/",
edit_rekening: "/dev/donasi/edit/edit_rekening/",
edit_kabar: ({ id }: { id: string }) => `/dev/donasi/edit/kabar/${id}`,
//pop up
page_pop_up_create: "/dev/donasi/page_pop_up/create",
//detail
detail_main: "/dev/donasi/detail/main/",
detail_publish: "/dev/donasi/detail/publish/",
detail_review: "/dev/donasi/detail/review/",
detail_draft: "/dev/donasi/detail/draft/",
detail_reject: "/dev/donasi/detail/reject/",
detail_donasi_saya: "/dev/donasi/detail/donasi_saya/",
detail_kabar: "/dev/donasi/detail/kabar/",
detail_notif: "/dev/donasi/detail/detail_notif/",
//alur donasi
kabar: ({ id }: { id: string }) => `/dev/donasi/kabar/${id}`,
daftar_kabar: ({ id }: { id: string }) => `/dev/donasi/kabar/daftar/${id}`,
rekap_kabar: ({ id }: { id: string }) => `/dev/donasi/kabar/rekap/${id}`,
donatur: "/dev/donasi/donatur/",
pencairan_dana: "/dev/donasi/pencairan_dana/",
penggalang_dana: "/dev/donasi/penggalang_dana/",
cerita_penggalang: "/dev/donasi/cerita_penggalang/",
list_kabar: "/dev/donasi/list_kabar/",
notif_page: "/dev/donasi/notif_page/",
bukti_transfer: "/dev/donasi/bukti-transfer/",
// proses donasi
masukan_donasi: "/dev/donasi/proses_donasi/masukan_donasi/",
metode_pembayaran: "/dev/donasi/proses_donasi/metode_pembayaran/",
invoice: "/dev/donasi/proses_donasi/invoice/",
proses_transaksi: "/dev/donasi/proses_donasi/proses_transaksi/",
};

View File

@@ -0,0 +1,53 @@
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: ({ id }: { id: string }) => `/dev/event/main/riwayat/${id}`,
/**
*
* @param statusId | 1 - 4 | 1: Publish, 2: Review, 3: Draft, 4: Reject
* @type string
*/
// status
status: ({ id }: { id?: string }) => `/dev/event/main/status/${id}`,
// 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/",
//peserta
daftar_peserta: ({ id }: { id: string }) => `/dev/event/detail/peserta/${id}`,
//sponsor
daftar_sponsor: ({ id }: { id: string }) => `/dev/event/detail/sponsor/${id}`,
edit_sponsor: "/dev/event/detail/sponsor/edit_sponsor/",
tambah_sponsor: ({ id }: { id: string }) =>
`/dev/event/detail/sponsor/tambah_sponsor/${id}`,
detail_sponsor: ({ id }: { id: string }) =>
`/dev/event/detail/detail_sponsor/${id}`,
nominal_sponsor: ({ id }: { id: string }) =>
`/dev/event/detail/sponsor/nominal_sponsor/${id}`,
metode_pembayaran: ({ id }: { id: string }) =>
`/dev/event/detail/sponsor/metode_pembayaran/${id}`,
invoice: ({ id }: { id: string }) =>
`/dev/event/invoice/${id}`,
};

View File

@@ -0,0 +1,28 @@
export const RouterForum = {
splash: "/dev/forum/splash",
// main
beranda: "/dev/forum/main",
forumku: "/dev/forum/forumku/",
// create
create: "/dev/forum/create",
//edit
edit_posting: "/dev/forum/edit/posting/",
edit_komentar: "/dev/forum/edit/komentar/",
//detail
main_detail: "/dev/forum/detail/main-detail/",
detail_report_komentar: "/dev/forum/detail/report-komentar/",
detail_report_posting: "/dev/forum/detail/report-posting/",
// komentar
komentar: "/dev/forum/komentar/",
//report
report_posting: "/dev/forum/report/posting/",
report_komentar: "/dev/forum/report/komentar/",
report_posting_lainnya: "/dev/forum/report/posting-lainnya/",
report_komentar_lainnya: "/dev/forum/report/komentar-lainnya/",
};

View File

@@ -0,0 +1,4 @@
export const RouterHome = {
main_home: "/dev/home",
home_user_non_active: "/dev/user-not-active",
};

View File

@@ -0,0 +1,4 @@
export const RouterImagePreview = {
main: ({ id }: { id: string }) => `/dev/image-preview/${id}`,
not_user_image: ({ id }: { id: string }) => `/preview-image/${id}`,
};

View File

@@ -0,0 +1,167 @@
export const NEW_RouterInvestasi = {
// API
api_gambar: "/api/investasi/gambar/",
// MAIN
/**
*
* @param param status id | 1: Publish, 2: Review, 3: Draft, 4: Reject
* @type string
*/
portofolio: ({ id }: { id: "1" | "2" | "3" | "4" }) => `/dev/investasi/main/portofolio/${id}`,
// portofolio: ({ id }: { id?: string }) => `/dev/investasi/main/portofolio/${id}`,
// TRANSAKSI
pembelian: "/dev/investasi/transaksi/pembelian/",
metode_pembayaran: "/dev/investasi/transaksi/metode-pembayaran/",
invoice: "/dev/investasi/transaksi/invoice/",
proses_transaksi: "/dev/investasi/transaksi/proses-transaksi/",
// STATUS TRANSAKSI
transaksi_gagal: "/dev/investasi/status-transaksi/gagal/",
transaksi_berhasil: "/dev/investasi/status-transaksi/berhasil/",
// FILE VIEW
file_prospektus: ({ id }: { id: string }) =>
`/dev/investasi/file-view/prospektus/${id}`,
OLD_file_view_prospektus: "/dev/investasi/file-view/prospektus/",
OLD_file_view_dokumen: "/dev/investasi/file-view/dokumen/",
// DETAIL
detail_main: ({ id }: { id: string }) => `/dev/investasi/detail/${id}`,
detail_portofolio: ({ id }: { id: string }) =>
`/dev/investasi/detail/portofolio/${id}`,
detail_prospektus: ({ id }: { id: string }) =>
`/dev/investasi/detail/prospektus/${id}`,
detail_saham: "/dev/investasi/detail/saham/",
detail_publish: "/dev/investasi/detail_portofolio/publish/",
detail_review: "/dev/investasi/detail_portofolio/review/",
detail_draft: "/dev/investasi/detail_portofolio/draft/",
detail_reject: "/dev/investasi/detail_portofolio/reject/",
// DOKUMEN
/**
* @param id | investasiId
* @type string
*/
daftar_dokumen: ({ id }: { id: string }) =>
`/dev/investasi/dokumen/daftar/${id}`,
/**
* @param id | investasiId
* @type string
*/
rekap_dokumen: ({ id }: { id: string }) =>
`/dev/investasi/dokumen/rekap/${id}`,
// BERITA
/**
* @param id | beritaId
* @type string
*/
berita: ({ id }: { id: string }) => `/dev/investasi/berita/${id}`,
/**
* @param id | investasiId
* @type string
*/
daftar_berita: ({ id }: { id: string }) =>
`/dev/investasi/berita/daftar/${id}`,
/**
* @param id | investasiId
* @type string
*/
rekap_berita: ({ id }: { id: string }) => `/dev/investasi/berita/rekap/${id}`,
// CREATE
/**
* @param id | investasiId
* @type string
*/
create_dokumen: ({ id }: { id: string }) =>
`/dev/investasi/create/dokumen/${id}`,
/**
* @param id | investasiId
* @type string
*/
create_berita: ({ id }: { id: string }) =>
`/dev/investasi/create/berita/${id}`,
// EDIT
/**
* @param id | investasiId
* @type string
*/
edit_investasi: ({ id }: { id: string }) => `/dev/investasi/edit/${id}`,
/**
* @param id | dokumenId
* @type string
*/
edit_dokumen: ({ id }: { id: string }) => `/dev/investasi/edit/dokumen/${id}`,
/**
* @param id | investasiId
* @type string
*/
edit_prospektus: ({ id }: { id: string }) =>
`/dev/investasi/edit/prospektus/${id}`,
};
export const RouterInvestasi_OLD = {
api_gambar: "/api/investasi/gambar/",
api_file_prospektus: "/api/investasi/prospektus/",
api_file_dokumen: "/api/investasi/dokumen/",
api_get_notif_midtrans: "/api/investasi/midtrans",
//INVESTASI
main: "/dev/investasi/main",
create: "/dev/investasi/create/investasi",
main_porto: "/dev/investasi/main/portofolio",
main_investasi: "/dev/investasi/main/saham_saya",
main_transaksi: "/dev/investasi/main/transaksi",
transfer: "/dev/investasi/transfer/",
dialog_transaksi: "/dev/investasi/dialog_page/transaksi_saham",
dialog_create: "/dev/investasi/dialog_page/create",
// portofolio
portofolio: "/dev/investasi/main/portofolio",
// proses beli saham
proses_investasi: "/dev/investasi/proses_investasi/",
proses_transaksi: "/dev/investasi/proses_transaksi/",
status_transaksi: "/dev/investasi/status_transaksi/berhasil",
status_pesanan: "/dev/investasi/status_pesanan/",
status_transaksi_gagal: "/dev/investasi/status_transaksi/gagal/",
metode_transfer: "/dev/investasi/metode_transfer/",
// edit //
edit: "/dev/investasi/edit/",
edit_intro: "/dev/investasi/edit_intro/",
edit_prospektus: "/dev/investasi/edit_prospektus/",
edit_dokumen: "/dev/investasi/edit_dokumen/",
edit_berita: "/dev/investasi/edit_berita/",
// detail //
detail: "/dev/investasi/detail/",
detail_portofolio: "",
detail_saham_terbeli: "/dev/investasi/detail_saham_terbeli/",
detail_prospektus: "/dev/investasi/detail_prospektus/",
detail_dokumen: "/dev/investasi/detail_dokumen/",
detail_berita: "/dev/investasi/detail_berita/",
detail_draft: "/dev/investasi/detail_portofolio/draft/",
detail_publish: "/dev/investasi/detail_portofolio/publish/",
detail_review: "/dev/investasi/detail_portofolio/review/",
detail_reject: "/dev/investasi/detail_portofolio/reject/",
// berita
daftar_berita: "/dev/investasi/berita/",
create_berita: "/dev/investasi/create_berita/",
list_edit_berita: "/dev/investasi/list_edit_berita/",
//upload
upload_prospektus: "/dev/investasi/upload_prospektus/",
upload_dokumen: "/dev/investasi/upload_dokumen/",
};

View File

@@ -0,0 +1,33 @@
export const RouterJob = {
//api
api_gambar: "/api/job/gambar/",
//spalsh
spalsh: "/dev/job/splash",
// main
beranda: "/dev/job/main/beranda",
/**
*
* @param statusId | 1 - 4 | 1: Publish, 2: Review, 3: Draft, 4: Reject
* @returns
*/
status: ({ id }: { id?: string }) => `/dev/job/main/status/${id}`,
arsip: "/dev/job/main/arsip",
// create & edit
create: "/dev/job/create",
edit: "/dev/job/edit/",
// detail
main_detail: "/dev/job/detail/main/",
detail_publish: "/dev/job/detail/publish/",
detail_review: "/dev/job/detail/review/",
detail_draft: "/dev/job/detail/draft/",
detail_reject: "/dev/job/detail/reject/",
detail_arsip: "/dev/job/detail/arsip/",
// non user
non_user_view: "/dev/job/non_user_view/",
"job_vacancy_non_user": ({ id }: { id: string }) => `/job-vacancy/${id}`,
};

View File

@@ -0,0 +1,34 @@
export const RouterProfile = {
katalogOLD: "/dev/katalog/",
"katalog": ({id}:{id: string}) => `/dev/katalog/${id}`,
// create
create: "/dev/profile/create",
// edit
edit: "/dev/profile/edit/",
// api
api_foto_profile: "/api/profile/foto/",
api_background_profile: "/api/profile/background/",
api_url_foto: "/api/profile/url_foto/",
api_url_background: "/api/profile/url_background/",
// upload
update_foto_profile: "/dev/profile/upload/foto/",
update_foto_background: "/dev/profile/upload/background/",
};
export const RouterPortofolio = {
main_detail: "/dev/portofolio/main/",
api_logo_porto: "/api/portofolio/logo/",
create: "/dev/portofolio/create/",
daftar_portofolio: "/dev/portofolio/daftar-portofolio/",
//edit
edit_data_bisnis: "/dev/portofolio/edit/data/",
edit_logo_bisnis: "/dev/portofolio/edit/logo/",
edit_medsos_bisnis: "/dev/portofolio/edit/medsos/",
};

View File

@@ -0,0 +1,12 @@
export const RouterMap = {
// api
api_foto: "/api/map/foto/",
api_custom_pin: "/api/map/pin/",
// main
splash: "/dev/map/splash",
main_view: "/dev/map/main",
create: "/dev/map/create/",
edit: "/dev/map/edit/",
custom_pin: "/dev/map/custom-pin/",
};

View File

@@ -0,0 +1,4 @@
export const RouterNotifikasi = {
// main: ({ name }: { name: string }) => `/dev/notifikasi/${name}`,
categoryApp: ({ name }: { name: string }) => `/dev/notifikasi/${name}`,
};

View File

@@ -0,0 +1,3 @@
export const RouterUserSearch = {
main: "/dev/user-search"
}

View File

@@ -0,0 +1,31 @@
export const RouterVote = {
// main
splash: "/dev/vote/splash",
beranda: "/dev/vote/main/beranda",
status: ({ id }: { id?: string }) => `/dev/vote/main/status/${id}`,
kontribusi: "/dev/vote/main/kontribusi",
/**
*
* @param riwayatId | 1 & 2 | 1: Semua, 2: Saya
* @type string
*/
riwayat: ({ id }: { id?: string }) => `/dev/vote/main/riwayat/${id}`,
// 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/",
daftar_kontributor: "/dev/vote/detail/daftar-kontributor/",
};

16
src/lib/server_env.ts Normal file
View File

@@ -0,0 +1,16 @@
type ENV = {
DATABASE_URL: string;
WIBU_PWD: string;
Client_KEY: string;
Server_KEY: string;
MAPBOX_TOKEN: string;
WS_APIKEY: string;
NEXT_PUBLIC_WIBU_REALTIME_TOKEN: string;
};
export class ServerEnv {
static value: ENV | null = null;
static set(val: ENV) {
ServerEnv.value = val;
}
}

41
src/lib/token.ts Normal file
View File

@@ -0,0 +1,41 @@
"use client";
class TokenStorage {
static value = "";
static get() {
return TokenStorage.value;
}
static set(value: string) {
TokenStorage.value = value;
}
}
type ENV = {
DATABASE_URL: string;
WIBU_PWD: string;
Client_KEY: string;
Server_KEY: string;
MAPBOX_TOKEN: string;
WS_APIKEY: string;
};
export class GlobalEnv {
static value: ENV | null = null;
static set(val: ENV) {
GlobalEnv.value = val;
}
}
function TokenProvider({
token,
envObject,
}: {
token: string;
envObject: ENV;
}) {
TokenStorage.set(token);
GlobalEnv.set(envObject);
return null;
}
export { TokenStorage, TokenProvider };

10
src/lib/warna.ts Normal file
View File

@@ -0,0 +1,10 @@
export const Warna = {
hijau_tua: "#297646",
hijau_muda: "#3da18d",
hijau_cerah: "#42c748",
kuning: "#fed630",
biru: "#3175b1",
merah: "#DE2E2D",
hitam: "#121517",
};