diff --git a/.env b/.env
index f8620a4f..85072cdf 100644
--- a/.env
+++ b/.env
@@ -4,4 +4,7 @@
# Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB.
# See the documentation for all the connection string options: https://pris.ly/d/connection-strings
-DATABASE_URL="postgresql://bip:Production_123@localhost:5433/hipmi?schema=public"
\ No newline at end of file
+DATABASE_URL="postgresql://bip:Production_123@localhost:5433/hipmi?schema=public"
+PWD="QWERTYUIOPLKJHGFDSAZXCVBNMQAZWSXEDCRFVTGBYHNUJMIKOLPPOIUYTREWQLKJHGFDSAMNBVCXZlghvftyguhijknhbgvcfytguu8okjnhbgvfty7u8oilkjnhgvtygu7u8ojilnkhbgvhujnkhghvjhukjnhb"
+Client_KEY="SB-Mid-client-9NDTxltqdZrEB9m-"
+Server_KEY="SB-Mid-server-NyltU-U7fLVQd1nv1LWBKylr"
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 8f322f0d..786b7c83 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,7 +21,8 @@
# debug
npm-debug.log*
-yarn-debug.log*
+
+rn-debug.log*
yarn-error.log*
# local env files
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 00000000..35412482
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,4 @@
+{
+ "WillLuke.nextjs.addTypesOnSave": true,
+ "WillLuke.nextjs.hasPrompted": true
+}
\ No newline at end of file
diff --git a/README_DEV.md b/README_DEV.md
new file mode 100644
index 00000000..f209b32e
--- /dev/null
+++ b/README_DEV.md
@@ -0,0 +1,37 @@
+## Page info
+
+### API
+- src/app/api
+
+### Api path shortcut
+- src/app/lib/api.ts
+
+### fun
+Deskripsi: Global function seperti console.log, random number dll.
+
+### lib
+Deskripsi: Library untuk menampung beberapa function seperti:
+- global prisma
+- colortune untuk tampilan FE
+
+### bin
+Deskripsi: JSON seeder
+- menjalankan seeder : http://localhost:3000/api/seeder?dev=DEV-HIPMI
+
+### App_Modules
+Deskripsi: Folder client yang mencakup sub menu dari menu-menu utama
+- Auth:
+1. login
+2. validasi
+3. register
+4. logout
+5. splash screen
+6. state (khusus bagian auth)
+
+- Home:
+1. home page
+
+## NOTE
+Function name:
+- g = global
+- gs = global state
\ No newline at end of file
diff --git a/config.yaml b/config.yaml
new file mode 100644
index 00000000..3390da51
--- /dev/null
+++ b/config.yaml
@@ -0,0 +1,2 @@
+server:
+ password: QWERTYUIOPLKJHGFDSAZXCVBNMQAZWSXEDCRFVTGBYHNUJMIKOLPPOIUYTREWQLKJHGFDSAMNBVCXZlghvftyguhijknhbgvcfytguu8okjnhbgvfty7u8oilkjnhgvtygu7u8ojilnkhbgvhujnkhghvjhukjnhb
diff --git a/next.config.js b/next.config.js
index 767719fc..5c728631 100644
--- a/next.config.js
+++ b/next.config.js
@@ -1,4 +1,10 @@
/** @type {import('next').NextConfig} */
-const nextConfig = {}
+const nextConfig = {
+ reactStrictMode: false,
+ experimental: {
+ serverActions: true
+ },
+
+}
module.exports = nextConfig
diff --git a/package.json b/package.json
index 2c0b3860..b0ac8d88 100644
--- a/package.json
+++ b/package.json
@@ -11,21 +11,40 @@
"dependencies": {
"@emotion/react": "^11.11.1",
"@emotion/server": "^11.11.0",
+ "@mantine/carousel": "^7.1.5",
"@mantine/core": "^6.0.17",
+ "@mantine/dropzone": "^7.1.3",
"@mantine/hooks": "^6.0.17",
"@mantine/next": "^6.0.17",
+ "@mantine/notifications": "^6.0.17",
"@prisma/client": "^5.0.0",
+ "@tabler/icons-react": "^2.38.0",
+ "@types/lodash": "^4.14.199",
"@types/node": "20.4.5",
"@types/react": "18.2.17",
"@types/react-dom": "18.2.7",
+ "@types/uuid": "^9.0.4",
"autoprefixer": "10.4.14",
+ "embla-carousel-react": "^8.0.0-rc14",
"eslint": "8.45.0",
"eslint-config-next": "13.4.12",
- "next": "13.4.12",
+ "iron-session": "^6.3.1",
+ "jotai": "^2.4.3",
+ "lodash": "^4.17.21",
+ "midtrans-client": "^1.3.1",
+ "moment": "^2.29.4",
+ "next": "^13.5.4-canary.8",
"postcss": "8.4.27",
"react": "18.2.0",
+ "react-countdown": "^2.3.5",
"react-dom": "18.2.0",
+ "react-responsive-carousel": "^3.2.23",
+ "react-simple-toasts": "^5.10.0",
+ "react-toastify": "^9.1.3",
+ "socket.io-client": "^4.7.2",
"tailwindcss": "3.3.3",
- "typescript": "5.1.6"
+ "typescript": "5.1.6",
+ "uuid": "^9.0.1",
+ "yaml": "^2.3.2"
}
}
diff --git a/prisma/migrations/20231002020725_new_prisma/migration.sql b/prisma/migrations/20231002020725_new_prisma/migration.sql
new file mode 100644
index 00000000..bbf083ef
--- /dev/null
+++ b/prisma/migrations/20231002020725_new_prisma/migration.sql
@@ -0,0 +1,51 @@
+-- CreateTable
+CREATE TABLE "User" (
+ "id" TEXT NOT NULL,
+ "username" TEXT NOT NULL,
+ "nomor" TEXT NOT NULL,
+ "active" BOOLEAN NOT NULL DEFAULT true,
+ "createdAt" TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3),
+ "masterUserRoleId" TEXT NOT NULL DEFAULT '1',
+
+ CONSTRAINT "User_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "MasterUserRole" (
+ "id" TEXT NOT NULL,
+ "name" TEXT NOT NULL,
+ "active" BOOLEAN NOT NULL DEFAULT true,
+ "createdAt" TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3),
+
+ CONSTRAINT "MasterUserRole_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "UserSession" (
+ "id" TEXT NOT NULL,
+ "token" TEXT NOT NULL,
+ "expires" TIMESTAMP(3) NOT NULL,
+ "active" BOOLEAN NOT NULL DEFAULT true,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "userId" TEXT NOT NULL,
+
+ CONSTRAINT "UserSession_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateIndex
+CREATE UNIQUE INDEX "User_username_key" ON "User"("username");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "User_nomor_key" ON "User"("nomor");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "UserSession_userId_key" ON "UserSession"("userId");
+
+-- AddForeignKey
+ALTER TABLE "User" ADD CONSTRAINT "User_masterUserRoleId_fkey" FOREIGN KEY ("masterUserRoleId") REFERENCES "MasterUserRole"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "UserSession" ADD CONSTRAINT "UserSession_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/prisma/migrations/20231003063648_profile_and_img/migration.sql b/prisma/migrations/20231003063648_profile_and_img/migration.sql
new file mode 100644
index 00000000..d4aa8505
--- /dev/null
+++ b/prisma/migrations/20231003063648_profile_and_img/migration.sql
@@ -0,0 +1,41 @@
+-- CreateTable
+CREATE TABLE "Profile" (
+ "id" TEXT NOT NULL,
+ "name" TEXT NOT NULL,
+ "email" TEXT NOT NULL,
+ "alamat" TEXT NOT NULL,
+ "jenisKelamin" TEXT NOT NULL,
+ "active" BOOLEAN NOT NULL DEFAULT true,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "userId" TEXT,
+ "imagesId" TEXT,
+
+ CONSTRAINT "Profile_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "Images" (
+ "id" TEXT NOT NULL,
+ "url" TEXT NOT NULL,
+ "active" BOOLEAN NOT NULL DEFAULT true,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+
+ CONSTRAINT "Images_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Profile_email_key" ON "Profile"("email");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Profile_userId_key" ON "Profile"("userId");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Profile_imagesId_key" ON "Profile"("imagesId");
+
+-- AddForeignKey
+ALTER TABLE "Profile" ADD CONSTRAINT "Profile_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Profile" ADD CONSTRAINT "Profile_imagesId_fkey" FOREIGN KEY ("imagesId") REFERENCES "Images"("id") ON DELETE SET NULL ON UPDATE CASCADE;
diff --git a/prisma/migrations/20231219030550_transaksi_sukses/migration.sql b/prisma/migrations/20231219030550_transaksi_sukses/migration.sql
new file mode 100644
index 00000000..7d359e58
--- /dev/null
+++ b/prisma/migrations/20231219030550_transaksi_sukses/migration.sql
@@ -0,0 +1,257 @@
+-- CreateTable
+CREATE TABLE "Katalog" (
+ "id" TEXT NOT NULL,
+ "namaBisnis" TEXT NOT NULL,
+ "alamatKantor" TEXT NOT NULL,
+ "tlpn" TEXT NOT NULL,
+ "deskripsi" TEXT NOT NULL,
+ "active" BOOLEAN NOT NULL DEFAULT true,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "profileId" TEXT,
+ "masterBidangBisnisId" TEXT NOT NULL,
+
+ CONSTRAINT "Katalog_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "MasterBidangBisnis" (
+ "id" TEXT NOT NULL,
+ "name" TEXT NOT NULL,
+ "active" BOOLEAN NOT NULL DEFAULT true,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+
+ CONSTRAINT "MasterBidangBisnis_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "Investasi" (
+ "id" TEXT NOT NULL,
+ "title" TEXT NOT NULL,
+ "targetDana" TEXT NOT NULL,
+ "hargaLembar" TEXT NOT NULL,
+ "totalLembar" TEXT NOT NULL,
+ "roi" TEXT NOT NULL,
+ "active" BOOLEAN NOT NULL DEFAULT true,
+ "countDown" TIMESTAMP(3),
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+ "authorId" TEXT,
+ "catatan" TEXT,
+ "sisaLembar" TEXT NOT NULL,
+ "lembarTerbeli" TEXT DEFAULT '0',
+ "progress" TEXT DEFAULT '0',
+ "masterPeriodeDevidenId" TEXT,
+ "masterPembagianDevidenId" TEXT,
+ "masterPencarianInvestorId" TEXT,
+ "imagesId" TEXT,
+ "masterStatusInvestasiId" TEXT DEFAULT '2',
+ "masterProgresInvestasiId" TEXT,
+
+ CONSTRAINT "Investasi_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "MasterPencarianInvestor" (
+ "id" TEXT NOT NULL,
+ "name" TEXT NOT NULL,
+ "active" BOOLEAN NOT NULL DEFAULT true,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+
+ CONSTRAINT "MasterPencarianInvestor_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "MasterPeriodeDeviden" (
+ "id" TEXT NOT NULL,
+ "name" TEXT NOT NULL,
+ "active" BOOLEAN NOT NULL DEFAULT true,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+
+ CONSTRAINT "MasterPeriodeDeviden_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "MasterPembagianDeviden" (
+ "id" TEXT NOT NULL,
+ "name" TEXT NOT NULL,
+ "active" BOOLEAN NOT NULL DEFAULT true,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+
+ CONSTRAINT "MasterPembagianDeviden_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "MasterStatusInvestasi" (
+ "id" TEXT NOT NULL,
+ "name" TEXT NOT NULL,
+ "color" TEXT NOT NULL,
+ "active" BOOLEAN NOT NULL DEFAULT true,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+
+ CONSTRAINT "MasterStatusInvestasi_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "ProspektusInvestasi" (
+ "id" TEXT NOT NULL,
+ "url" TEXT NOT NULL,
+ "active" BOOLEAN NOT NULL DEFAULT true,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "investasiId" TEXT,
+
+ CONSTRAINT "ProspektusInvestasi_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "DokumenInvestasi" (
+ "id" TEXT NOT NULL,
+ "title" TEXT NOT NULL,
+ "url" TEXT NOT NULL,
+ "active" BOOLEAN NOT NULL DEFAULT true,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "investasiId" TEXT,
+
+ CONSTRAINT "DokumenInvestasi_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "BeritaInvestasi" (
+ "id" TEXT NOT NULL,
+ "title" TEXT NOT NULL,
+ "deskripsi" TEXT NOT NULL,
+ "active" BOOLEAN NOT NULL DEFAULT true,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+ "imagesId" TEXT,
+ "investasiId" TEXT NOT NULL,
+
+ CONSTRAINT "BeritaInvestasi_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "MasterBank" (
+ "id" TEXT NOT NULL,
+ "name" TEXT NOT NULL,
+ "norek" TEXT NOT NULL,
+ "active" BOOLEAN NOT NULL DEFAULT true,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "MasterBank_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "MasterProgresInvestasi" (
+ "id" TEXT NOT NULL,
+ "name" TEXT NOT NULL,
+ "active" BOOLEAN NOT NULL DEFAULT true,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "MasterProgresInvestasi_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "TransaksiInvestasi" (
+ "id" TEXT NOT NULL,
+ "investasiId" TEXT NOT NULL,
+ "authorId" TEXT NOT NULL,
+ "namaBank" TEXT,
+ "nomorRekening" TEXT,
+ "token" TEXT,
+ "redirect_url" TEXT,
+ "quantity" TEXT NOT NULL,
+ "price" TEXT NOT NULL,
+ "gross_amount" TEXT NOT NULL,
+ "merchant_name" TEXT NOT NULL,
+ "status_code" TEXT,
+ "status_message" TEXT,
+ "transaction_id" TEXT,
+ "order_id" TEXT,
+ "payment_type" TEXT,
+ "transaction_time" TEXT,
+ "transaction_status" TEXT,
+ "fraud_status" TEXT,
+ "pdf_url" TEXT,
+ "finish_redirect_url" TEXT,
+ "active" BOOLEAN NOT NULL DEFAULT true,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+ "masterStatusTransaksiInvestasiId" TEXT DEFAULT '1',
+
+ CONSTRAINT "TransaksiInvestasi_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "MasterStatusTransaksiInvestasi" (
+ "id" TEXT NOT NULL,
+ "name" TEXT NOT NULL,
+ "color" TEXT,
+ "active" BOOLEAN NOT NULL DEFAULT true,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "MasterStatusTransaksiInvestasi_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Investasi_imagesId_key" ON "Investasi"("imagesId");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "ProspektusInvestasi_investasiId_key" ON "ProspektusInvestasi"("investasiId");
+
+-- AddForeignKey
+ALTER TABLE "Katalog" ADD CONSTRAINT "Katalog_profileId_fkey" FOREIGN KEY ("profileId") REFERENCES "Profile"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Katalog" ADD CONSTRAINT "Katalog_masterBidangBisnisId_fkey" FOREIGN KEY ("masterBidangBisnisId") REFERENCES "MasterBidangBisnis"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Investasi" ADD CONSTRAINT "Investasi_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Investasi" ADD CONSTRAINT "Investasi_masterPeriodeDevidenId_fkey" FOREIGN KEY ("masterPeriodeDevidenId") REFERENCES "MasterPeriodeDeviden"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Investasi" ADD CONSTRAINT "Investasi_masterPembagianDevidenId_fkey" FOREIGN KEY ("masterPembagianDevidenId") REFERENCES "MasterPembagianDeviden"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Investasi" ADD CONSTRAINT "Investasi_masterPencarianInvestorId_fkey" FOREIGN KEY ("masterPencarianInvestorId") REFERENCES "MasterPencarianInvestor"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Investasi" ADD CONSTRAINT "Investasi_imagesId_fkey" FOREIGN KEY ("imagesId") REFERENCES "Images"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Investasi" ADD CONSTRAINT "Investasi_masterStatusInvestasiId_fkey" FOREIGN KEY ("masterStatusInvestasiId") REFERENCES "MasterStatusInvestasi"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Investasi" ADD CONSTRAINT "Investasi_masterProgresInvestasiId_fkey" FOREIGN KEY ("masterProgresInvestasiId") REFERENCES "MasterProgresInvestasi"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "ProspektusInvestasi" ADD CONSTRAINT "ProspektusInvestasi_investasiId_fkey" FOREIGN KEY ("investasiId") REFERENCES "Investasi"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "DokumenInvestasi" ADD CONSTRAINT "DokumenInvestasi_investasiId_fkey" FOREIGN KEY ("investasiId") REFERENCES "Investasi"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "BeritaInvestasi" ADD CONSTRAINT "BeritaInvestasi_imagesId_fkey" FOREIGN KEY ("imagesId") REFERENCES "Images"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "BeritaInvestasi" ADD CONSTRAINT "BeritaInvestasi_investasiId_fkey" FOREIGN KEY ("investasiId") REFERENCES "Investasi"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "TransaksiInvestasi" ADD CONSTRAINT "TransaksiInvestasi_investasiId_fkey" FOREIGN KEY ("investasiId") REFERENCES "Investasi"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "TransaksiInvestasi" ADD CONSTRAINT "TransaksiInvestasi_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "TransaksiInvestasi" ADD CONSTRAINT "TransaksiInvestasi_masterStatusTransaksiInvestasiId_fkey" FOREIGN KEY ("masterStatusTransaksiInvestasiId") REFERENCES "MasterStatusTransaksiInvestasi"("id") ON DELETE SET NULL ON UPDATE CASCADE;
diff --git a/prisma/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml
new file mode 100644
index 00000000..fbffa92c
--- /dev/null
+++ b/prisma/migrations/migration_lock.toml
@@ -0,0 +1,3 @@
+# Please do not edit this file manually
+# It should be added in your version-control system (i.e. Git)
+provider = "postgresql"
\ No newline at end of file
diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index 7aed529a..8890f763 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -9,5 +9,347 @@ datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
-
+model User {
+ id String @id @default(cuid())
+ username String @unique
+ nomor String @unique
+ active Boolean @default(true)
+ createdAt DateTime? @default(now())
+ updatedAt DateTime? @updatedAt
+ MasterUserRole MasterUserRole @relation(fields: [masterUserRoleId], references: [id])
+ masterUserRoleId String @default("1")
+ UserSession UserSession?
+ Profile Profile?
+ Investasi Investasi[]
+ TransaksiInvestasi TransaksiInvestasi[]
+ Donasi Donasi[]
+}
+
+model MasterUserRole {
+ id String @id
+ name String
+ active Boolean @default(true)
+ createdAt DateTime? @default(now())
+ updatedAt DateTime? @updatedAt
+ User User[]
+}
+
+model UserSession {
+ id String @id @default(cuid())
+ token String
+ expires DateTime
+ active Boolean @default(true)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @default(now()) @updatedAt
+ User User @relation(fields: [userId], references: [id])
+ userId String @unique
+}
+
+model Profile {
+ id String @id @default(cuid())
+ name String
+ email String @unique
+ alamat String
+ jenisKelamin String
+ active Boolean @default(true)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @default(now()) @updatedAt
+ User User? @relation(fields: [userId], references: [id])
+ userId String? @unique
+ ImageProfile Images? @relation(fields: [imagesId], references: [id])
+ imagesId String? @unique
+ Katalog Katalog[]
+}
+
+model Images {
+ id String @id @default(cuid())
+ url String
+ active Boolean @default(true)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @default(now()) @updatedAt
+ Profile Profile?
+ Investasi Investasi?
+ BeritaInvestasi BeritaInvestasi[]
+ Donasi Donasi?
+ CeritaDonasi Donasi_Cerita[]
+ Donasi_TemporaryCreate Donasi_TemporaryCreate[]
+}
+
+model Katalog {
+ id String @id @default(cuid())
+ namaBisnis String
+ alamatKantor String
+ tlpn String
+ deskripsi String
+ active Boolean @default(true)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @default(now()) @updatedAt
+ Profile Profile? @relation(fields: [profileId], references: [id])
+ profileId String?
+ MasterBidangBisnis MasterBidangBisnis @relation(fields: [masterBidangBisnisId], references: [id])
+ masterBidangBisnisId String
+}
+
+model MasterBidangBisnis {
+ id String @id
+ name String
+ active Boolean @default(true)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @default(now()) @updatedAt
+ Katalog Katalog[]
+}
+
+// -------------------- INVESTASI --------------------- //
+// Table investasi / saham
+model Investasi {
+ id String @id @default(cuid())
+ title String
+ targetDana String
+ hargaLembar String
+ totalLembar String
+ roi String
+ active Boolean @default(true)
+
+ countDown DateTime?
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ author User? @relation(fields: [authorId], references: [id])
+ authorId String?
+ catatan String?
+ sisaLembar String
+ lembarTerbeli String? @default("0")
+ progress String? @default("0")
+
+ MasterPeriodeDeviden MasterPeriodeDeviden? @relation(fields: [masterPeriodeDevidenId], references: [id])
+ masterPeriodeDevidenId String?
+ MasterPembagianDeviden MasterPembagianDeviden? @relation(fields: [masterPembagianDevidenId], references: [id])
+ masterPembagianDevidenId String?
+ MasterPencarianInvestor MasterPencarianInvestor? @relation(fields: [masterPencarianInvestorId], references: [id])
+ masterPencarianInvestorId String?
+ ImageInvestasi Images? @relation(fields: [imagesId], references: [id])
+ imagesId String? @unique
+
+ MasterStatusInvestasi MasterStatusInvestasi? @relation(fields: [masterStatusInvestasiId], references: [id])
+ masterStatusInvestasiId String? @default("2")
+ ProspektusInvestasi ProspektusInvestasi?
+ BeritaInvestasi BeritaInvestasi[]
+ DokumenInvestasi DokumenInvestasi[]
+ TransaksiInvestasi TransaksiInvestasi[]
+ MasterProgresInvestasi MasterProgresInvestasi? @relation(fields: [masterProgresInvestasiId], references: [id])
+ masterProgresInvestasiId String?
+}
+
+model MasterPencarianInvestor {
+ id String @id @default(cuid())
+ name String
+ active Boolean @default(true)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @default(now()) @updatedAt
+ investasi Investasi[]
+}
+
+model MasterPeriodeDeviden {
+ id String @id @default(cuid())
+ name String
+ active Boolean @default(true)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @default(now()) @updatedAt
+ investasi Investasi[]
+}
+
+model MasterPembagianDeviden {
+ id String @id @default(cuid())
+ name String
+ active Boolean @default(true)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @default(now()) @updatedAt
+ investasi Investasi[]
+}
+
+model MasterStatusInvestasi {
+ id String @id @default(cuid())
+ name String
+ color String
+ active Boolean @default(true)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @default(now()) @updatedAt
+ investasi Investasi[]
+}
+
+model ProspektusInvestasi {
+ id String @id @default(cuid())
+ url String
+ active Boolean @default(true)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @default(now()) @updatedAt
+ investasi Investasi? @relation(fields: [investasiId], references: [id])
+ investasiId String? @unique
+}
+
+model DokumenInvestasi {
+ id String @id @default(cuid())
+ title String
+ url String
+ active Boolean @default(true)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @default(now()) @updatedAt
+ investasi Investasi? @relation(fields: [investasiId], references: [id])
+ investasiId String?
+}
+
+model BeritaInvestasi {
+ id String @id @default(cuid())
+ title String
+ deskripsi String
+ active Boolean @default(true)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ ImageBerita Images? @relation(fields: [imagesId], references: [id])
+ imagesId String?
+ investasi Investasi @relation(fields: [investasiId], references: [id])
+ investasiId String
+}
+
+model MasterBank {
+ id String @id @default(cuid())
+ name String
+ norek String
+ active Boolean @default(true)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+}
+
+model MasterProgresInvestasi {
+ id String @id @default(cuid())
+ name String
+ active Boolean @default(true)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ Investasi Investasi[]
+}
+
+model TransaksiInvestasi {
+ id String @id @default(cuid())
+ Investasi Investasi @relation(fields: [investasiId], references: [id])
+ investasiId String
+ Author User @relation(fields: [authorId], references: [id])
+ authorId String
+
+ namaBank String?
+ nomorRekening String?
+ token String?
+ redirect_url String?
+ quantity String
+ price String
+ gross_amount String
+ merchant_name String
+ status_code String?
+ status_message String?
+ transaction_id String?
+ order_id String?
+ payment_type String?
+ transaction_time String?
+ transaction_status String?
+ fraud_status String?
+ pdf_url String?
+ finish_redirect_url String?
+
+ active Boolean @default(true)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ MasterStatusTransaksiInvestasi MasterStatusTransaksiInvestasi? @relation(fields: [masterStatusTransaksiInvestasiId], references: [id])
+ masterStatusTransaksiInvestasiId String? @default("1")
+}
+
+model MasterStatusTransaksiInvestasi {
+ id String @id @default(cuid())
+ name String
+ color String?
+ active Boolean @default(true)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ TransaksiInvestasi TransaksiInvestasi[]
+}
+
+// -------------------- DONASI --------------------- //
+model Donasi {
+ id String @id @default(cuid())
+ title String
+ target String
+ active Boolean @default(true)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ publishTime DateTime?
+ catatan String?
+
+ Author User? @relation(fields: [authorId], references: [id])
+ authorId String?
+ imageDonasi Images? @relation(fields: [imagesId], references: [id])
+ imagesId String? @unique
+ CeritaDonasi Donasi_Cerita?
+ DonasiMaster_Ketegori DonasiMaster_Kategori? @relation(fields: [donasiMaster_KategoriId], references: [id])
+ donasiMaster_KategoriId String?
+ DonasiMaster_Durasi DonasiMaster_Durasi? @relation(fields: [donasiMaster_DurasiId], references: [id])
+ donasiMaster_DurasiId String?
+ DonasiMaster_Status DonasiMaster_StatusDonasi? @relation(fields: [donasiMaster_StatusDonasiId], references: [id])
+ donasiMaster_StatusDonasiId String? @default("2")
+}
+
+model Donasi_TemporaryCreate {
+ id String @id @default(cuid())
+ title String
+ target String
+ active Boolean @default(true)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ imageDonasiTemporary Images? @relation(fields: [imagesId], references: [id])
+ imagesId String? @unique
+ kategori DonasiMaster_Kategori? @relation(fields: [donasiMaster_KategoriId], references: [id])
+ donasiMaster_KategoriId String?
+ durasi DonasiMaster_Durasi? @relation(fields: [donasiMaster_DurasiId], references: [id])
+ donasiMaster_DurasiId String?
+}
+
+model DonasiMaster_Kategori {
+ id String @id @default(cuid())
+ name String
+ active Boolean @default(true)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ Donasi Donasi[]
+ Donasi_TemporaryCreate Donasi_TemporaryCreate[]
+}
+
+model DonasiMaster_Durasi {
+ id String @id @default(cuid())
+ name String
+ active Boolean @default(true)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ Donasi Donasi[]
+ Donasi_TemporaryCreate Donasi_TemporaryCreate[]
+}
+
+model Donasi_Cerita {
+ id String @id @default(cuid())
+ pembukaan String
+ cerita String
+ active Boolean @default(true)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+
+ imageCeritaDonasi Images? @relation(fields: [imagesId], references: [id])
+ imagesId String? @unique
+ Donasi Donasi? @relation(fields: [donasiId], references: [id])
+ donasiId String? @unique
+}
+
+model DonasiMaster_StatusDonasi {
+ id String @id @default(cuid())
+ name String
+ active Boolean @default(true)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ Donasi Donasi[]
+}
diff --git a/public/aset/avatar.png b/public/aset/avatar.png
new file mode 100644
index 00000000..20e377a6
Binary files /dev/null and b/public/aset/avatar.png differ
diff --git a/public/aset/donasi/bukti.jpg b/public/aset/donasi/bukti.jpg
new file mode 100644
index 00000000..9bb96f9b
Binary files /dev/null and b/public/aset/donasi/bukti.jpg differ
diff --git a/public/aset/dummy_file.pdf b/public/aset/dummy_file.pdf
new file mode 100644
index 00000000..92b2f709
Binary files /dev/null and b/public/aset/dummy_file.pdf differ
diff --git a/public/aset/global/no_img.png b/public/aset/global/no_img.png
new file mode 100644
index 00000000..00953883
Binary files /dev/null and b/public/aset/global/no_img.png differ
diff --git a/public/aset/investasi/home-hipmi.png b/public/aset/investasi/home-hipmi.png
new file mode 100644
index 00000000..ad584afc
Binary files /dev/null and b/public/aset/investasi/home-hipmi.png differ
diff --git a/public/aset/investasi/logo-crowd-panjang.png b/public/aset/investasi/logo-crowd-panjang.png
new file mode 100644
index 00000000..1bcf8cea
Binary files /dev/null and b/public/aset/investasi/logo-crowd-panjang.png differ
diff --git a/public/aset/investasi/logo-crowd.png b/public/aset/investasi/logo-crowd.png
new file mode 100644
index 00000000..74b04efd
Binary files /dev/null and b/public/aset/investasi/logo-crowd.png differ
diff --git a/public/img/logo.png b/public/aset/logo.png
similarity index 100%
rename from public/img/logo.png
rename to public/aset/logo.png
diff --git a/public/aset/logo/logo-hipmi round white.png b/public/aset/logo/logo-hipmi round white.png
new file mode 100644
index 00000000..92746638
Binary files /dev/null and b/public/aset/logo/logo-hipmi round white.png differ
diff --git a/public/aset/logo/logo-hipmi round.png b/public/aset/logo/logo-hipmi round.png
new file mode 100644
index 00000000..59b439e8
Binary files /dev/null and b/public/aset/logo/logo-hipmi round.png differ
diff --git a/public/aset/logo/logo-hipmi.png b/public/aset/logo/logo-hipmi.png
new file mode 100644
index 00000000..1bebbd56
Binary files /dev/null and b/public/aset/logo/logo-hipmi.png differ
diff --git a/public/aset/no-file.png b/public/aset/no-file.png
new file mode 100644
index 00000000..da332135
Binary files /dev/null and b/public/aset/no-file.png differ
diff --git a/public/aset/no-img.png b/public/aset/no-img.png
new file mode 100644
index 00000000..65ec0740
Binary files /dev/null and b/public/aset/no-img.png differ
diff --git a/public/aset/pdf-icon.png b/public/aset/pdf-icon.png
new file mode 100644
index 00000000..7b86a45e
Binary files /dev/null and b/public/aset/pdf-icon.png differ
diff --git a/public/donasi/image/454e636f-9631-45cd-99ae-27efdb44be91.jpeg b/public/donasi/image/454e636f-9631-45cd-99ae-27efdb44be91.jpeg
new file mode 100644
index 00000000..5652497a
Binary files /dev/null and b/public/donasi/image/454e636f-9631-45cd-99ae-27efdb44be91.jpeg differ
diff --git a/public/donasi/image/4e1a2302-5471-4a95-a79c-0fbe3c3f0677.jpeg b/public/donasi/image/4e1a2302-5471-4a95-a79c-0fbe3c3f0677.jpeg
new file mode 100644
index 00000000..5652497a
Binary files /dev/null and b/public/donasi/image/4e1a2302-5471-4a95-a79c-0fbe3c3f0677.jpeg differ
diff --git a/public/donasi/image/7d8d0898-4c8a-470f-afde-755d6133425f.jpeg b/public/donasi/image/7d8d0898-4c8a-470f-afde-755d6133425f.jpeg
new file mode 100644
index 00000000..d3ea1214
Binary files /dev/null and b/public/donasi/image/7d8d0898-4c8a-470f-afde-755d6133425f.jpeg differ
diff --git a/public/donasi/image/84a72cf5-1b0e-47f8-bca9-763edef28c0b.jpeg b/public/donasi/image/84a72cf5-1b0e-47f8-bca9-763edef28c0b.jpeg
new file mode 100644
index 00000000..6453d730
Binary files /dev/null and b/public/donasi/image/84a72cf5-1b0e-47f8-bca9-763edef28c0b.jpeg differ
diff --git a/public/donasi/image/b9b270aa-f0db-42a6-822e-a35b6b28c883.jpeg b/public/donasi/image/b9b270aa-f0db-42a6-822e-a35b6b28c883.jpeg
new file mode 100644
index 00000000..5652497a
Binary files /dev/null and b/public/donasi/image/b9b270aa-f0db-42a6-822e-a35b6b28c883.jpeg differ
diff --git a/public/donasi/image/bf8c9bae-e3c9-4d33-89ec-9a88c3740da8.jpeg b/public/donasi/image/bf8c9bae-e3c9-4d33-89ec-9a88c3740da8.jpeg
new file mode 100644
index 00000000..289b1a56
Binary files /dev/null and b/public/donasi/image/bf8c9bae-e3c9-4d33-89ec-9a88c3740da8.jpeg differ
diff --git a/public/donasi/image/c6b8d269-7e15-4711-81e0-35d1d2f757dc.jpeg b/public/donasi/image/c6b8d269-7e15-4711-81e0-35d1d2f757dc.jpeg
new file mode 100644
index 00000000..289b1a56
Binary files /dev/null and b/public/donasi/image/c6b8d269-7e15-4711-81e0-35d1d2f757dc.jpeg differ
diff --git a/public/donasi/image/c77f246e-d572-4acb-9b41-0b9e5d973e69.jpg b/public/donasi/image/c77f246e-d572-4acb-9b41-0b9e5d973e69.jpg
new file mode 100644
index 00000000..b71d094e
Binary files /dev/null and b/public/donasi/image/c77f246e-d572-4acb-9b41-0b9e5d973e69.jpg differ
diff --git a/public/donasi/image/ddd5a80a-f5d9-4483-8fe0-5216c372a536.jpg b/public/donasi/image/ddd5a80a-f5d9-4483-8fe0-5216c372a536.jpg
new file mode 100644
index 00000000..b71d094e
Binary files /dev/null and b/public/donasi/image/ddd5a80a-f5d9-4483-8fe0-5216c372a536.jpg differ
diff --git a/public/donasi/image_cerita/0d904f72-972b-4b04-959d-80ae0456f832.jpg b/public/donasi/image_cerita/0d904f72-972b-4b04-959d-80ae0456f832.jpg
new file mode 100644
index 00000000..b71d094e
Binary files /dev/null and b/public/donasi/image_cerita/0d904f72-972b-4b04-959d-80ae0456f832.jpg differ
diff --git a/public/donasi/image_cerita/0e1cee5c-6dd7-4024-b2d8-16da46421f17.jpg b/public/donasi/image_cerita/0e1cee5c-6dd7-4024-b2d8-16da46421f17.jpg
new file mode 100644
index 00000000..b71d094e
Binary files /dev/null and b/public/donasi/image_cerita/0e1cee5c-6dd7-4024-b2d8-16da46421f17.jpg differ
diff --git a/public/donasi/image_cerita/1f2f7595-15c3-4eb4-9cf7-256ce8871d77.jpeg b/public/donasi/image_cerita/1f2f7595-15c3-4eb4-9cf7-256ce8871d77.jpeg
new file mode 100644
index 00000000..d3ea1214
Binary files /dev/null and b/public/donasi/image_cerita/1f2f7595-15c3-4eb4-9cf7-256ce8871d77.jpeg differ
diff --git a/public/donasi/image_cerita/3f56e88a-141f-4370-bbe2-dbac623bcb67.jpeg b/public/donasi/image_cerita/3f56e88a-141f-4370-bbe2-dbac623bcb67.jpeg
new file mode 100644
index 00000000..6302e96c
Binary files /dev/null and b/public/donasi/image_cerita/3f56e88a-141f-4370-bbe2-dbac623bcb67.jpeg differ
diff --git a/public/donasi/image_cerita/48ddfea8-1c95-431e-abd2-6a03c43e7cca.jpeg b/public/donasi/image_cerita/48ddfea8-1c95-431e-abd2-6a03c43e7cca.jpeg
new file mode 100644
index 00000000..d3ea1214
Binary files /dev/null and b/public/donasi/image_cerita/48ddfea8-1c95-431e-abd2-6a03c43e7cca.jpeg differ
diff --git a/public/donasi/image_cerita/627f9ce6-466f-413c-a6fc-4416feb260a6.jpeg b/public/donasi/image_cerita/627f9ce6-466f-413c-a6fc-4416feb260a6.jpeg
new file mode 100644
index 00000000..5652497a
Binary files /dev/null and b/public/donasi/image_cerita/627f9ce6-466f-413c-a6fc-4416feb260a6.jpeg differ
diff --git a/public/donasi/image_cerita/e1b466b9-0d77-46f5-ad16-50b81f4e36cb.jpeg b/public/donasi/image_cerita/e1b466b9-0d77-46f5-ad16-50b81f4e36cb.jpeg
new file mode 100644
index 00000000..4f712802
Binary files /dev/null and b/public/donasi/image_cerita/e1b466b9-0d77-46f5-ad16-50b81f4e36cb.jpeg differ
diff --git a/public/donasi/image_cerita/ffdb4c10-df64-404c-8b0a-cea952324119.jpeg b/public/donasi/image_cerita/ffdb4c10-df64-404c-8b0a-cea952324119.jpeg
new file mode 100644
index 00000000..4f712802
Binary files /dev/null and b/public/donasi/image_cerita/ffdb4c10-df64-404c-8b0a-cea952324119.jpeg differ
diff --git a/public/file/06714b9b-5ed3-44df-b512-36110c5b91dd.pdf b/public/file/06714b9b-5ed3-44df-b512-36110c5b91dd.pdf
new file mode 100644
index 00000000..92b2f709
Binary files /dev/null and b/public/file/06714b9b-5ed3-44df-b512-36110c5b91dd.pdf differ
diff --git a/public/file/0bfd9239-0853-42d9-bb7f-681adbec25ae.pdf b/public/file/0bfd9239-0853-42d9-bb7f-681adbec25ae.pdf
new file mode 100644
index 00000000..24d01eeb
Binary files /dev/null and b/public/file/0bfd9239-0853-42d9-bb7f-681adbec25ae.pdf differ
diff --git a/public/file/3ece02cd-8472-42ee-9721-356041bcd655.pdf b/public/file/3ece02cd-8472-42ee-9721-356041bcd655.pdf
new file mode 100644
index 00000000..326da9f2
Binary files /dev/null and b/public/file/3ece02cd-8472-42ee-9721-356041bcd655.pdf differ
diff --git a/public/file/5ef5daeb-0ef7-47d4-847d-a201ff0bd818.pdf b/public/file/5ef5daeb-0ef7-47d4-847d-a201ff0bd818.pdf
new file mode 100644
index 00000000..ab4bd256
Binary files /dev/null and b/public/file/5ef5daeb-0ef7-47d4-847d-a201ff0bd818.pdf differ
diff --git a/public/file/6e9274d3-5c39-47ee-bf7c-114189618dff.pdf b/public/file/6e9274d3-5c39-47ee-bf7c-114189618dff.pdf
new file mode 100644
index 00000000..24d01eeb
Binary files /dev/null and b/public/file/6e9274d3-5c39-47ee-bf7c-114189618dff.pdf differ
diff --git a/public/file/c8904500-c9fd-40e4-a500-7ccb9fb48eb5.pdf b/public/file/c8904500-c9fd-40e4-a500-7ccb9fb48eb5.pdf
new file mode 100644
index 00000000..92b2f709
Binary files /dev/null and b/public/file/c8904500-c9fd-40e4-a500-7ccb9fb48eb5.pdf differ
diff --git a/public/file/e1366e3c-26c3-4939-8503-0ac3e2e68f03.pdf b/public/file/e1366e3c-26c3-4939-8503-0ac3e2e68f03.pdf
new file mode 100644
index 00000000..92b2f709
Binary files /dev/null and b/public/file/e1366e3c-26c3-4939-8503-0ac3e2e68f03.pdf differ
diff --git a/public/file/index.ts b/public/file/index.ts
new file mode 100644
index 00000000..e50a6f8e
--- /dev/null
+++ b/public/file/index.ts
@@ -0,0 +1 @@
+// Image for file
\ No newline at end of file
diff --git a/public/investasi/0815b390-ff1c-4139-a67f-ff4603b9e2ca.png b/public/investasi/0815b390-ff1c-4139-a67f-ff4603b9e2ca.png
new file mode 100644
index 00000000..24d01eeb
Binary files /dev/null and b/public/investasi/0815b390-ff1c-4139-a67f-ff4603b9e2ca.png differ
diff --git a/public/investasi/24c94a56-5563-4a2e-a401-b5f771d9ba12.png b/public/investasi/24c94a56-5563-4a2e-a401-b5f771d9ba12.png
new file mode 100644
index 00000000..24d01eeb
Binary files /dev/null and b/public/investasi/24c94a56-5563-4a2e-a401-b5f771d9ba12.png differ
diff --git a/public/investasi/2756d89c-0156-4252-920a-443d25ead85e.png b/public/investasi/2756d89c-0156-4252-920a-443d25ead85e.png
new file mode 100644
index 00000000..24d01eeb
Binary files /dev/null and b/public/investasi/2756d89c-0156-4252-920a-443d25ead85e.png differ
diff --git a/public/investasi/4297c21c-529d-4f71-bb52-b2fcb60a2bac.png b/public/investasi/4297c21c-529d-4f71-bb52-b2fcb60a2bac.png
new file mode 100644
index 00000000..24d01eeb
Binary files /dev/null and b/public/investasi/4297c21c-529d-4f71-bb52-b2fcb60a2bac.png differ
diff --git a/public/investasi/59b1d508-1b64-46f2-99c2-a43f268a2a86.jpeg b/public/investasi/59b1d508-1b64-46f2-99c2-a43f268a2a86.jpeg
new file mode 100644
index 00000000..326da9f2
Binary files /dev/null and b/public/investasi/59b1d508-1b64-46f2-99c2-a43f268a2a86.jpeg differ
diff --git a/public/investasi/83fd7d43-e40d-4a4c-bdff-bd7eeb75ac04.jpeg b/public/investasi/83fd7d43-e40d-4a4c-bdff-bd7eeb75ac04.jpeg
new file mode 100644
index 00000000..803e3c56
Binary files /dev/null and b/public/investasi/83fd7d43-e40d-4a4c-bdff-bd7eeb75ac04.jpeg differ
diff --git a/public/investasi/d5b525d2-f460-4b0e-af8a-02b9c21a972e.png b/public/investasi/d5b525d2-f460-4b0e-af8a-02b9c21a972e.png
new file mode 100644
index 00000000..98983643
Binary files /dev/null and b/public/investasi/d5b525d2-f460-4b0e-af8a-02b9c21a972e.png differ
diff --git a/public/investasi/ddf1e9c2-92f0-4885-b467-01cc35d1bf46.png b/public/investasi/ddf1e9c2-92f0-4885-b467-01cc35d1bf46.png
new file mode 100644
index 00000000..24d01eeb
Binary files /dev/null and b/public/investasi/ddf1e9c2-92f0-4885-b467-01cc35d1bf46.png differ
diff --git a/public/investasi/ed305bf4-65e1-441a-a8bb-2d815a6e49c1.png b/public/investasi/ed305bf4-65e1-441a-a8bb-2d815a6e49c1.png
new file mode 100644
index 00000000..d0f301d6
Binary files /dev/null and b/public/investasi/ed305bf4-65e1-441a-a8bb-2d815a6e49c1.png differ
diff --git a/public/investasi/f3e7698b-44de-4dc5-9238-65196abc4fe7.png b/public/investasi/f3e7698b-44de-4dc5-9238-65196abc4fe7.png
new file mode 100644
index 00000000..24d01eeb
Binary files /dev/null and b/public/investasi/f3e7698b-44de-4dc5-9238-65196abc4fe7.png differ
diff --git a/public/investasi/index.ts b/public/investasi/index.ts
new file mode 100644
index 00000000..21598c3d
--- /dev/null
+++ b/public/investasi/index.ts
@@ -0,0 +1 @@
+// Image for investasi
\ No newline at end of file
diff --git a/src/app/api/auth/login/route.ts b/src/app/api/auth/login/route.ts
new file mode 100644
index 00000000..f7442d2c
--- /dev/null
+++ b/src/app/api/auth/login/route.ts
@@ -0,0 +1,36 @@
+import { redirect } from "next/navigation";
+
+import { myConsole } from "@/app/fun/my_console";
+import prisma from "@/app/lib/prisma";
+import { RouterAdminDashboard } from "@/app/lib/router_hipmi/router_admin";
+
+import { NextResponse } from "next/server";
+
+export async function POST(req: Request) {
+ if (req.method === "POST") {
+ const body = await req.json();
+ // console.log(body);
+
+ if (body.nomor === "1234567890") {
+ return NextResponse.json({
+ success: true,
+ status: 200,
+ message: "Login Success",
+ });
+ } else {
+ try {
+ await fetch(
+ `https://wa.wibudev.com/code?nom=${body.nomor}&text=Masukan Kode OTP:${body.otp}`
+ );
+ return NextResponse.json({
+ body,
+ status: 200,
+ message: "Login Success",
+ });
+ } catch (error) {
+ return NextResponse.json({ status: 500, message: "Server Error !!!" });
+ }
+ }
+ }
+ return NextResponse.json({ success: false });
+}
diff --git a/src/app/api/auth/logout/route.ts b/src/app/api/auth/logout/route.ts
new file mode 100644
index 00000000..d4c9049e
--- /dev/null
+++ b/src/app/api/auth/logout/route.ts
@@ -0,0 +1,12 @@
+import { cookies } from "next/headers";
+import { NextResponse } from "next/server";
+
+export async function GET() {
+ cookies().set({
+ name: "ssn",
+ value: "",
+ maxAge: 0,
+ });
+
+ return NextResponse.json({ status: 200, message: "Logout" });
+}
diff --git a/src/app/api/auth/register/route.ts b/src/app/api/auth/register/route.ts
new file mode 100644
index 00000000..21f71ac4
--- /dev/null
+++ b/src/app/api/auth/register/route.ts
@@ -0,0 +1,59 @@
+import { sealData } from "iron-session";
+import { myConsole } from "@/app/fun/my_console";
+import prisma from "@/app/lib/prisma";
+import { data } from "autoprefixer";
+import { NextResponse } from "next/server";
+import { cookies } from "next/headers";
+import { getConfig } from "@/bin/config";
+
+import fs from "fs";
+import yaml from "yaml";
+const config = yaml.parse(fs.readFileSync("config.yaml").toString());
+
+export async function POST(req: Request) {
+ if (req.method === "POST") {
+ const body = await req.json();
+ // MyConsole(body);
+
+ const cekUsername = await prisma.user.findUnique({
+ where: {
+ username: body.username,
+ },
+ });
+
+ myConsole(cekUsername);
+
+ if (cekUsername)
+ return NextResponse.json({ status: 400, message: "Username sudah ada" });
+
+ const data = await prisma.user.create({
+ data: {
+ username: body.username,
+ nomor: body.nomor,
+ },
+ });
+
+ if (data) {
+ const seal = await sealData(
+ JSON.stringify({
+ id: data.id,
+ username: data.username,
+ }),
+ {
+ password: await config.server.password,
+ }
+ );
+
+ cookies().set({
+ name: "ssn",
+ value: seal,
+ maxAge: 60 * 60 * 24 * 7,
+ });
+
+ return NextResponse.json({ status: 201 });
+ }
+
+ return NextResponse.json({ success: true });
+ }
+ return NextResponse.json({ success: false });
+}
diff --git a/src/app/api/auth/validasi/route.ts b/src/app/api/auth/validasi/route.ts
new file mode 100644
index 00000000..ba849d0e
--- /dev/null
+++ b/src/app/api/auth/validasi/route.ts
@@ -0,0 +1,59 @@
+import { myConsole } from "@/app/fun/my_console";
+import prisma from "@/app/lib/prisma";
+import { NextResponse } from "next/server";
+import { cookies } from "next/headers";
+import { sealData, unsealData } from "iron-session";
+import { getConfig } from "@/bin/config";
+import yaml from "yaml";
+import fs from "fs";
+import { revalidatePath } from "next/cache";
+const config = yaml.parse(fs.readFileSync("config.yaml").toString());
+
+export async function POST(req: Request) {
+
+ if (req.method === "POST") {
+ const body = await req.json();
+
+
+ const data = await prisma.user.findUnique({
+ where: {
+ nomor: body.nomor,
+ },
+ select: {
+ id: true,
+ nomor: true,
+ username: true,
+ active: true,
+ },
+ });
+
+ myConsole(data)
+
+ if (!data) return NextResponse.json({ status: 404 });
+
+ if (data) {
+ const res = await sealData(
+ JSON.stringify({
+ id: data.id,
+ username: data.username,
+ }),
+ {
+ password: (await config.server.password),
+ }
+ );
+
+ cookies().set({
+ name: "ssn",
+ value: res,
+ maxAge: 60 * 60 * 24 * 7,
+ });
+
+ revalidatePath("/dev/home")
+
+ return NextResponse.json({ status: 200, data });
+ }
+
+ return NextResponse.json({ success: true });
+ }
+ return NextResponse.json({ success: false });
+}
diff --git a/src/app/api/donasi/gambar/[id]/route.ts b/src/app/api/donasi/gambar/[id]/route.ts
new file mode 100644
index 00000000..1bf25d16
--- /dev/null
+++ b/src/app/api/donasi/gambar/[id]/route.ts
@@ -0,0 +1,32 @@
+import prisma from "@/app/lib/prisma";
+import fs from "fs";
+import { NextRequest, NextResponse } from "next/server";
+
+export async function GET(
+ req: NextRequest,
+ { params }: { params: { id: string } }
+) {
+ const get = await prisma.images.findUnique({
+ where: {
+ id: params.id,
+ },
+ select: {
+ url: true,
+ },
+ });
+
+ if (!fs.existsSync(`./public/donasi/image/${get?.url}`)) {
+ const notFile = fs.readFileSync("./public/aset/global/no_img.png");
+ return new NextResponse(notFile, {
+ headers: {
+ "Content-Type": "image/png",
+ },
+ });
+ }
+ const file = fs.readFileSync(`./public/donasi/image/${get?.url}`);
+ return new NextResponse(file, {
+ headers: {
+ "Content-Type": "image/png",
+ },
+ });
+}
diff --git a/src/app/api/donasi/gambar_cerita/[id]/route.ts b/src/app/api/donasi/gambar_cerita/[id]/route.ts
new file mode 100644
index 00000000..26728087
--- /dev/null
+++ b/src/app/api/donasi/gambar_cerita/[id]/route.ts
@@ -0,0 +1,34 @@
+import prisma from "@/app/lib/prisma";
+import fs from "fs";
+import { NextRequest, NextResponse } from "next/server";
+
+export async function GET(
+ req: NextRequest,
+ { params }: { params: { id: string } }
+) {
+
+ const get = await prisma.images.findUnique({
+ where: {
+ id: params.id,
+ },
+ select: {
+ url: true,
+ },
+ });
+
+
+ if (!fs.existsSync(`./public/donasi/image_cerita/${get?.url}`)) {
+ const notFile = fs.readFileSync("./public/aset/global/no_img.png");
+ return new NextResponse(notFile, {
+ headers: {
+ "Content-Type": "image/png",
+ },
+ });
+ }
+ const file = fs.readFileSync(`./public/donasi/image_cerita/${get?.url}`);
+ return new NextResponse(file, {
+ headers: {
+ "Content-Type": "image/png",
+ },
+ });
+}
diff --git a/src/app/api/donasi/image/[url]/route.ts b/src/app/api/donasi/image/[url]/route.ts
new file mode 100644
index 00000000..b23bbf31
--- /dev/null
+++ b/src/app/api/donasi/image/[url]/route.ts
@@ -0,0 +1,23 @@
+import fs from "fs";
+import { NextRequest, NextResponse } from "next/server";
+
+export async function GET(
+ req: NextRequest,
+ { params }: { params: { url: string } }
+) {
+ if (!fs.existsSync(`./public/donasi/image/${params.url}`)) {
+ const notFile = fs.readFileSync("./public/aset/global/no_img.png");
+ return new NextResponse(notFile, {
+ headers: {
+ "Content-Type": "image/png",
+ },
+ });
+ }
+
+ const file = fs.readFileSync(`./public/donasi/image/${params.url}`);
+ return new NextResponse(file, {
+ headers: {
+ "Content-Type": "image/png",
+ },
+ });
+}
diff --git a/src/app/api/donasi/image_cerita/[url]/route.ts b/src/app/api/donasi/image_cerita/[url]/route.ts
new file mode 100644
index 00000000..17635968
--- /dev/null
+++ b/src/app/api/donasi/image_cerita/[url]/route.ts
@@ -0,0 +1,25 @@
+import { NextRequest, NextResponse } from "next/server";
+import fs from "fs"
+
+export async function GET(
+ req: NextRequest,
+ { params }: { params: { url: string } }
+) {
+
+ if (!fs.existsSync(`./public/donasi/image_cerita/${params.url}`)) {
+ const notFile = fs.readFileSync("./public/aset/global/no_img.png");
+ return new NextResponse(notFile, {
+ headers: {
+ "Content-Type": "image/png",
+ },
+ });
+ }
+
+ const file = fs.readFileSync(`./public/donasi/image_cerita/${params.url}`);
+ return new NextResponse(file, {
+ headers: {
+ "Content-Type": "image/png",
+ },
+ });
+
+}
diff --git a/src/app/api/donasi/index.md b/src/app/api/donasi/index.md
new file mode 100644
index 00000000..21e60f83
--- /dev/null
+++ b/src/app/api/donasi/index.md
@@ -0,0 +1 @@
+# Test
\ No newline at end of file
diff --git a/src/app/api/investasi/dokumen/[id]/route.ts b/src/app/api/investasi/dokumen/[id]/route.ts
new file mode 100644
index 00000000..e5d4c94c
--- /dev/null
+++ b/src/app/api/investasi/dokumen/[id]/route.ts
@@ -0,0 +1,22 @@
+import prisma from "@/app/lib/prisma";
+import { NextRequest, NextResponse } from "next/server";
+import fs from "fs";
+
+export async function GET(
+ req: NextRequest,
+ { params }: { params: { id: string } }
+) {
+ const data = await prisma.dokumenInvestasi.findUnique({
+ where: { id: params.id },
+ select: {
+ url: true,
+ },
+ });
+
+ const file = fs.readFileSync(`./public/file/${data?.url}`);
+ return new NextResponse(file, {
+ headers: {
+ "Content-Type": "application/pdf",
+ },
+ });
+}
diff --git a/src/app/api/investasi/gambar/[id]/route.ts b/src/app/api/investasi/gambar/[id]/route.ts
new file mode 100644
index 00000000..8fce01cc
--- /dev/null
+++ b/src/app/api/investasi/gambar/[id]/route.ts
@@ -0,0 +1,33 @@
+import { NextRequest, NextResponse } from "next/server";
+import fs from "fs";
+import prisma from "@/app/lib/prisma";
+
+export async function GET(
+ req: NextRequest,
+ { params }: { params: { id: string } }
+) {
+
+ const data = await prisma.images.findUnique({
+ where: {
+ id: params.id,
+ },
+ select: {
+ url: true,
+ },
+ });
+
+ if (!fs.existsSync(`./public/investasi/${data?.url}`)) {
+ const fl = fs.readFileSync(`./public/aset/no-img.png`);
+ return new NextResponse(fl, {
+ headers: {
+ "Content-Type": "image/png",
+ },
+ });
+ }
+ const fl = fs.readFileSync(`./public/investasi/${data?.url}`);
+ return new NextResponse(fl, {
+ headers: {
+ "Content-Type": "image/png",
+ },
+ });
+}
diff --git a/src/app/api/investasi/midtrans/[id]/route.ts b/src/app/api/investasi/midtrans/[id]/route.ts
new file mode 100644
index 00000000..4c1b0cd8
--- /dev/null
+++ b/src/app/api/investasi/midtrans/[id]/route.ts
@@ -0,0 +1,9 @@
+import { NextRequest, NextResponse } from "next/server";
+
+export async function POST(req: NextRequest, {params}: {params: {id: any}}) {
+
+ const body = await req.json()
+ console.log(body)
+
+ return NextResponse.json({ status: 200, message: "OK", data: body });
+}
diff --git a/src/app/api/investasi/prospektus/[id]/route.ts b/src/app/api/investasi/prospektus/[id]/route.ts
new file mode 100644
index 00000000..243b204a
--- /dev/null
+++ b/src/app/api/investasi/prospektus/[id]/route.ts
@@ -0,0 +1,23 @@
+import prisma from "@/app/lib/prisma";
+import { NextRequest, NextResponse } from "next/server";
+import fs from "fs";
+
+export async function GET(
+ req: NextRequest,
+ { params }: { params: { id: string } }
+) {
+ // console.log(params.id)
+ const data = await prisma.prospektusInvestasi.findUnique({
+ where: { id: params.id },
+ select: {
+ url: true,
+ },
+ });
+
+ const file = fs.readFileSync(`./public/file/${data?.url}`);
+ return new NextResponse(file, {
+ headers: {
+ "Content-Type": "application/pdf",
+ },
+ });
+}
diff --git a/src/app/api/profile/foto/[name]/route.ts b/src/app/api/profile/foto/[name]/route.ts
new file mode 100644
index 00000000..c1d3a267
--- /dev/null
+++ b/src/app/api/profile/foto/[name]/route.ts
@@ -0,0 +1,22 @@
+import { NextRequest, NextResponse } from "next/server";
+import fs from "fs";
+
+export async function GET(
+ req: NextRequest,
+ { params }: { params: { name: string } }
+) {
+ if (!fs.existsSync(`./public/img/${params.name}`)) {
+ const fl = fs.readFileSync(`./public/aset/avatar.png`);
+ return new NextResponse(fl, {
+ headers: {
+ "Content-Type": "image/png",
+ },
+ });
+ }
+ const fl = fs.readFileSync(`./public/img/${params.name}`);
+ return new NextResponse(fl, {
+ headers: {
+ "Content-Type": "image/png",
+ },
+ });
+}
diff --git a/src/app/api/seeder/route.ts b/src/app/api/seeder/route.ts
new file mode 100644
index 00000000..fdaaac19
--- /dev/null
+++ b/src/app/api/seeder/route.ts
@@ -0,0 +1,236 @@
+import prisma from "@/app/lib/prisma";
+import { NextResponse } from "next/server";
+import userRole from "../../../bin/seeder/user_role.json";
+import bidangBisnis from "../../../bin/seeder/bidang_bisnis.json";
+import pencarianInvestor from "./../../../bin/seeder/investasi/pencarian_investor.json";
+import periodeDeviden from "./../../../bin/seeder/investasi/periode_deviden.json";
+import pembagianDeviden from "./../../../bin/seeder/investasi/pembagian_deviden.json";
+import statusInvestasi from "./../../../bin/seeder/investasi/status_investasi.json";
+import namaBank from "./../../../bin/seeder/investasi/nama_bank.json";
+import statusTransaksiInvestasi from "./../../../bin/seeder/investasi/status_transaksi_investasi.json";
+import jenisProgres from "../../../bin/seeder/investasi/master_progres.json";
+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";
+
+export async function GET(req: Request) {
+ const dev = new URL(req.url).searchParams.get("dev");
+ if (dev === "DEV-HIPMI") {
+ for (let i of userRole) {
+ const data = await prisma.masterUserRole.upsert({
+ where: {
+ id: i.id.toString(),
+ },
+ update: {
+ id: i.id.toString(),
+ name: i.name,
+ },
+ create: {
+ id: i.id.toString(),
+ name: i.name,
+ },
+ });
+ }
+
+ for (let i of userSeeder) {
+ await prisma.user.upsert({
+ where: {
+ nomor: i.nomor,
+ },
+ create: {
+ nomor: i.nomor,
+ username: i.name,
+ masterUserRoleId: i.masterUserRoleId,
+ },
+ update: {
+ nomor: i.nomor,
+ username: i.name,
+ masterUserRoleId: i.masterUserRoleId,
+ },
+ });
+ }
+
+ for (let i of bidangBisnis) {
+ await prisma.masterBidangBisnis.upsert({
+ where: {
+ id: i.id.toString(),
+ },
+ update: {
+ id: i.id.toString(),
+ name: i.name,
+ },
+ create: {
+ id: i.id.toString(),
+ name: i.name,
+ },
+ });
+ }
+
+ for (let i of pencarianInvestor) {
+ await prisma.masterPencarianInvestor.upsert({
+ where: {
+ id: i.id.toString(),
+ },
+ update: {
+ id: i.id.toString(),
+ name: i.name,
+ },
+ create: {
+ id: i.id.toString(),
+ name: i.name,
+ },
+ });
+ }
+
+ for (let i of pembagianDeviden) {
+ await prisma.masterPembagianDeviden.upsert({
+ where: {
+ id: i.id.toString(),
+ },
+ update: {
+ id: i.id.toString(),
+ name: i.name,
+ },
+ create: {
+ id: i.id.toString(),
+ name: i.name,
+ },
+ });
+ }
+
+ for (let i of periodeDeviden) {
+ await prisma.masterPeriodeDeviden.upsert({
+ where: {
+ id: i.id.toString(),
+ },
+ update: {
+ id: i.id.toString(),
+ name: i.name,
+ },
+ create: {
+ id: i.id.toString(),
+ name: i.name,
+ },
+ });
+ }
+
+ for (let i of statusInvestasi) {
+ await prisma.masterStatusInvestasi.upsert({
+ where: {
+ id: i.id,
+ },
+ create: {
+ id: i.id,
+ name: i.name,
+ color: i.color,
+ },
+ update: {
+ id: i.id,
+ name: i.name,
+ color: i.color,
+ },
+ });
+ }
+
+ for (let i of namaBank) {
+ await prisma.masterBank.upsert({
+ where: {
+ id: i.id.toString(),
+ },
+ create: {
+ id: i.id.toString(),
+ name: i.name,
+ norek: i.norek.toString(),
+ },
+ update: {
+ id: i.id.toString(),
+ name: i.name,
+ norek: i.norek.toString(),
+ },
+ });
+ }
+
+ for (let i of statusTransaksiInvestasi) {
+ await prisma.masterStatusTransaksiInvestasi.upsert({
+ where: {
+ id: i.id,
+ },
+ create: {
+ id: i.id,
+ name: i.name,
+ color: i.color,
+ },
+ update: {
+ id: i.id,
+ name: i.name,
+ color: i.color,
+ },
+ });
+ }
+
+ for (let i of jenisProgres) {
+ await prisma.masterProgresInvestasi.upsert({
+ where: {
+ id: i.id,
+ },
+ create: {
+ id: i.id,
+ name: i.name,
+ },
+ update: {
+ name: i.name,
+ },
+ });
+ }
+
+ for (let d of donasi_status) {
+ await prisma.donasiMaster_StatusDonasi.upsert({
+ where: {
+ id: d.id,
+ },
+ create: {
+ id: d.id,
+ name: d.name,
+ },
+ update: {
+ name: d.name,
+ },
+ });
+ }
+
+ for (let d of donasi_kategori) {
+ await prisma.donasiMaster_Kategori.upsert({
+ where: {
+ id: d.id,
+ },
+ create: {
+ id: d.id,
+ name: d.name,
+ },
+ update: {
+ name: d.name,
+ },
+ });
+ }
+
+ for (let d of donasi_durasi) {
+ await prisma.donasiMaster_Durasi.upsert({
+ where: {
+ id: d.id,
+ },
+ create: {
+ id: d.id,
+ name: d.name,
+ },
+ update: {
+ name: d.name,
+ },
+ });
+ }
+
+ return NextResponse.json({ success: true });
+ }
+
+ return NextResponse.json({ success: false });
+}
diff --git a/src/app/dev/admin/award/main/page.tsx b/src/app/dev/admin/award/main/page.tsx
new file mode 100644
index 00000000..94e470f0
--- /dev/null
+++ b/src/app/dev/admin/award/main/page.tsx
@@ -0,0 +1,9 @@
+import { Admin_Award } from "@/app_modules/admin/award";
+
+export default async function Page() {
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/admin/award/page.tsx b/src/app/dev/admin/award/page.tsx
new file mode 100644
index 00000000..dfbbbb84
--- /dev/null
+++ b/src/app/dev/admin/award/page.tsx
@@ -0,0 +1,9 @@
+import Admin_Award from "@/app_modules/admin/award/main";
+
+export default async function Page() {
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/admin/donasi/detail/publish/page.tsx b/src/app/dev/admin/donasi/detail/publish/page.tsx
new file mode 100644
index 00000000..aadb50b3
--- /dev/null
+++ b/src/app/dev/admin/donasi/detail/publish/page.tsx
@@ -0,0 +1,9 @@
+import { AdminDonasi_DetailPublish } from "@/app_modules/admin/donasi";
+
+export default async function Page() {
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/admin/donasi/detail/review/[id]/page.tsx b/src/app/dev/admin/donasi/detail/review/[id]/page.tsx
new file mode 100644
index 00000000..8dbbc3ce
--- /dev/null
+++ b/src/app/dev/admin/donasi/detail/review/[id]/page.tsx
@@ -0,0 +1,9 @@
+import { AdminDonasi_DetailReview } from "@/app_modules/admin/donasi";
+import { AdminDonasi_getById } from "@/app_modules/admin/donasi/fun/get/get_one_by_id";
+
+export default async function Page({params}: {params: {id: string}}) {
+ // console.log(params.id)
+ const dataReview = await AdminDonasi_getById(params.id)
+ // console.log(dataReview)
+ return
+}
\ No newline at end of file
diff --git a/src/app/dev/admin/donasi/main/page.tsx b/src/app/dev/admin/donasi/main/page.tsx
new file mode 100644
index 00000000..63f2c0ce
--- /dev/null
+++ b/src/app/dev/admin/donasi/main/page.tsx
@@ -0,0 +1,20 @@
+import { AdminDonasi_Main } from "@/app_modules/admin/donasi";
+import AdminDonasi_funCountByStatus from "@/app_modules/admin/donasi/fun/count/fun_count_donasi_by_status";
+
+export default async function Page() {
+ const countPublish = await AdminDonasi_funCountByStatus("1");
+ const countReview = await AdminDonasi_funCountByStatus("2");
+ const countDraft = await AdminDonasi_funCountByStatus("3");
+ const countReject = await AdminDonasi_funCountByStatus("4");
+
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/admin/donasi/table/publish/page.tsx b/src/app/dev/admin/donasi/table/publish/page.tsx
new file mode 100644
index 00000000..c1d70e82
--- /dev/null
+++ b/src/app/dev/admin/donasi/table/publish/page.tsx
@@ -0,0 +1,10 @@
+import { AdminDonasi_TablePublish } from "@/app_modules/admin/donasi";
+import { AdminDonasi_getByStatus } from "@/app_modules/admin/donasi/fun/get/get_donasi_by_status";
+
+export default async function Page() {
+ const listPublish = await AdminDonasi_getByStatus("1")
+ // console.log(listPublish)
+ return<>
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/admin/donasi/table/reject/page.tsx b/src/app/dev/admin/donasi/table/reject/page.tsx
new file mode 100644
index 00000000..7a62da99
--- /dev/null
+++ b/src/app/dev/admin/donasi/table/reject/page.tsx
@@ -0,0 +1,10 @@
+import { AdminDonasi_TableReject } from "@/app_modules/admin/donasi";
+import { AdminDonasi_getByStatus } from "@/app_modules/admin/donasi/fun/get/get_donasi_by_status";
+
+export default async function Page() {
+ const dataReject = await AdminDonasi_getByStatus("4")
+ // console.log(dataReject)
+ return<>
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/admin/donasi/table/review/page.tsx b/src/app/dev/admin/donasi/table/review/page.tsx
new file mode 100644
index 00000000..8fa21952
--- /dev/null
+++ b/src/app/dev/admin/donasi/table/review/page.tsx
@@ -0,0 +1,9 @@
+import { AdminDonasi_TableReview } from "@/app_modules/admin/donasi";
+import { AdminDonasi_getByStatus } from "@/app_modules/admin/donasi/fun/get/get_donasi_by_status";
+import { getToken_UserId } from "@/app_modules/fun/get_user_token";
+
+export default async function Page() {
+ const listReview = await AdminDonasi_getByStatus("2");
+ // console.log(listReview);
+ return ;
+}
diff --git a/src/app/dev/admin/investasi/bukti_transfer/layout.tsx b/src/app/dev/admin/investasi/bukti_transfer/layout.tsx
new file mode 100644
index 00000000..cac14c4b
--- /dev/null
+++ b/src/app/dev/admin/investasi/bukti_transfer/layout.tsx
@@ -0,0 +1,16 @@
+import { Admin_LayoutBuktiTransferInvestasi } from "@/app_modules/admin/investasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+
+ {children}
+
+ >
+ );
+}
diff --git a/src/app/dev/admin/investasi/bukti_transfer/page.tsx b/src/app/dev/admin/investasi/bukti_transfer/page.tsx
new file mode 100644
index 00000000..90040a12
--- /dev/null
+++ b/src/app/dev/admin/investasi/bukti_transfer/page.tsx
@@ -0,0 +1,9 @@
+import { Admin_BuktiTransferInvestasi } from "@/app_modules/admin/investasi";
+
+export default async function Page() {
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/admin/investasi/halaman_aksi/[id]/layout.tsx b/src/app/dev/admin/investasi/halaman_aksi/[id]/layout.tsx
new file mode 100644
index 00000000..c769c7ad
--- /dev/null
+++ b/src/app/dev/admin/investasi/halaman_aksi/[id]/layout.tsx
@@ -0,0 +1,10 @@
+
+
+import { Admin_LayoutHalamanAksi } from "@/app_modules/admin/investasi";
+import React from "react";
+
+export default async function Layout({ children }: { children: React.ReactNode }) {
+ return <>
+ {children}
+ >;
+}
diff --git a/src/app/dev/admin/investasi/halaman_aksi/[id]/page.tsx b/src/app/dev/admin/investasi/halaman_aksi/[id]/page.tsx
new file mode 100644
index 00000000..4d899bd7
--- /dev/null
+++ b/src/app/dev/admin/investasi/halaman_aksi/[id]/page.tsx
@@ -0,0 +1,10 @@
+import { Admin_HalamanAksi } from "@/app_modules/admin/investasi";
+
+export default async function Page({params}:{params: {id: string}}) {
+
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/admin/investasi/konfirmasi/[id]/page.tsx b/src/app/dev/admin/investasi/konfirmasi/[id]/page.tsx
new file mode 100644
index 00000000..57b53ff0
--- /dev/null
+++ b/src/app/dev/admin/investasi/konfirmasi/[id]/page.tsx
@@ -0,0 +1,16 @@
+import { Admin_KonfirmasiInvestasi } from "@/app_modules/admin/investasi";
+import { funGetUserProfile } from "@/app_modules/fun/get_user_profile";
+import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
+
+
+export default async function Page({ params }: { params: { id: string } }) {
+ const dataInvestasi = await getOneInvestasiById(params.id)
+ const dataUser = await funGetUserProfile(dataInvestasi?.authorId as any)
+ // console.log(dataUser)
+
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/admin/investasi/main/page.tsx b/src/app/dev/admin/investasi/main/page.tsx
new file mode 100644
index 00000000..fdeee026
--- /dev/null
+++ b/src/app/dev/admin/investasi/main/page.tsx
@@ -0,0 +1,32 @@
+import { Admin_Investasi } from "@/app_modules/admin/investasi";
+import Admin_CountStatusInvestasi from "@/app_modules/admin/investasi/fun/count_status";
+import Admin_funGetAllInvestasi from "@/app_modules/admin/investasi/fun/get_all_investasi";
+import Admin_getPublishProgresInvestasi from "@/app_modules/admin/investasi/fun/get_publish_progres";
+import Admin_getTotalInvestasiByUser from "@/app_modules/admin/investasi/fun/get_total_investasi_by_user";
+
+export default async function Page() {
+ const listInvestasi = await Admin_funGetAllInvestasi();
+ const countDraft = await Admin_CountStatusInvestasi(1);
+ const countReview = await Admin_CountStatusInvestasi(2);
+ const countPublish = await Admin_CountStatusInvestasi(3);
+ const countReject = await Admin_CountStatusInvestasi(4);
+ const totalInvestasiByUser = await Admin_getTotalInvestasiByUser()
+ const publishProgres = await Admin_getPublishProgresInvestasi()
+ // console.log(targetTerbesar)
+
+ return (
+ <>
+
+ {/*
{JSON.stringify(totalInvestasiByUser, null,2)} */}
+ >
+ );
+}
diff --git a/src/app/dev/admin/investasi/status_transfer/layout.tsx b/src/app/dev/admin/investasi/status_transfer/layout.tsx
new file mode 100644
index 00000000..549f12ff
--- /dev/null
+++ b/src/app/dev/admin/investasi/status_transfer/layout.tsx
@@ -0,0 +1,16 @@
+import { Admin_LayoutStatusTransferInvesatasi } from "@/app_modules/admin/investasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+
+ {children}
+
+ >
+ );
+}
diff --git a/src/app/dev/admin/investasi/status_transfer/page.tsx b/src/app/dev/admin/investasi/status_transfer/page.tsx
new file mode 100644
index 00000000..8a5203a3
--- /dev/null
+++ b/src/app/dev/admin/investasi/status_transfer/page.tsx
@@ -0,0 +1,8 @@
+import { Admin_StatusTransferInvesatasi } from "@/app_modules/admin/investasi";
+
+export default async function Page() {
+ return<>
+
+ >
+
+}
\ No newline at end of file
diff --git a/src/app/dev/admin/investasi/table_status/publish/page.tsx b/src/app/dev/admin/investasi/table_status/publish/page.tsx
new file mode 100644
index 00000000..1d9f989c
--- /dev/null
+++ b/src/app/dev/admin/investasi/table_status/publish/page.tsx
@@ -0,0 +1,10 @@
+import { Admin_TablePublishInvestasi } from "@/app_modules/admin/investasi";
+import Admin_funGetAllInvestasi from "@/app_modules/admin/investasi/fun/get_all_investasi";
+
+export default async function Page() {
+ const listInvestasi = await Admin_funGetAllInvestasi();
+
+ return<>
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/admin/investasi/table_status/reject/page.tsx b/src/app/dev/admin/investasi/table_status/reject/page.tsx
new file mode 100644
index 00000000..55092f60
--- /dev/null
+++ b/src/app/dev/admin/investasi/table_status/reject/page.tsx
@@ -0,0 +1,10 @@
+import { Admin_TableRejectInvestasi } from "@/app_modules/admin/investasi";
+import Admin_funGetAllInvestasi from "@/app_modules/admin/investasi/fun/get_all_investasi";
+
+export default async function Page() {
+ const dataInvestsi = await Admin_funGetAllInvestasi()
+ return <>
+
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/admin/investasi/table_status/review/page.tsx b/src/app/dev/admin/investasi/table_status/review/page.tsx
new file mode 100644
index 00000000..350245f7
--- /dev/null
+++ b/src/app/dev/admin/investasi/table_status/review/page.tsx
@@ -0,0 +1,9 @@
+import { Admin_TableReviewInvestasi } from "@/app_modules/admin/investasi";
+import Admin_funGetAllInvestasi from "@/app_modules/admin/investasi/fun/get_all_investasi";
+
+export default async function Page() {
+ const dataInvestsi = await Admin_funGetAllInvestasi()
+ return <>
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/admin/layout.tsx b/src/app/dev/admin/layout.tsx
new file mode 100644
index 00000000..e7937178
--- /dev/null
+++ b/src/app/dev/admin/layout.tsx
@@ -0,0 +1,14 @@
+import { AdminLayout } from "@/app_modules/admin/main";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/admin/main/dashboard/page.tsx b/src/app/dev/admin/main/dashboard/page.tsx
new file mode 100644
index 00000000..2151cea9
--- /dev/null
+++ b/src/app/dev/admin/main/dashboard/page.tsx
@@ -0,0 +1,5 @@
+import { AdminMain } from "@/app_modules/admin/main";
+
+export default async function Page() {
+ return ;
+}
diff --git a/src/app/dev/auth/login/page.tsx b/src/app/dev/auth/login/page.tsx
new file mode 100644
index 00000000..b36236db
--- /dev/null
+++ b/src/app/dev/auth/login/page.tsx
@@ -0,0 +1,14 @@
+import { Login } from "@/app_modules/auth";
+import { cookies } from "next/headers";
+
+export default function Page() {
+ const c = cookies().getAll();
+ const tkn = c;
+
+ return (
+ <>
+ {/* {JSON.stringify(tkn)} */}
+ ;
+ >
+ );
+}
diff --git a/src/app/dev/auth/register/page.tsx b/src/app/dev/auth/register/page.tsx
new file mode 100644
index 00000000..f35d8b13
--- /dev/null
+++ b/src/app/dev/auth/register/page.tsx
@@ -0,0 +1,5 @@
+import { Register } from "@/app_modules/auth";
+
+export default function Page() {
+ return ;
+}
diff --git a/src/app/dev/auth/splash/page.tsx b/src/app/dev/auth/splash/page.tsx
index 4f33da8f..183d35c3 100644
--- a/src/app/dev/auth/splash/page.tsx
+++ b/src/app/dev/auth/splash/page.tsx
@@ -1,7 +1,28 @@
import { SplashScreen } from "@/app_modules/auth";
+import { useShallowEffect } from "@mantine/hooks";
+import { cookies } from "next/headers";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import { unsealData } from "iron-session";
+import { getConfig } from "@/bin/config";
+import yaml from "yaml";
+import fs from "fs";
-export default function Page(){
- return<>
-
+const config = yaml.parse(fs.readFileSync("config.yaml").toString());
+
+export default async function PageSplash() {
+ const c = cookies().get("ssn");
+ const tkn = !c
+ ? null
+ : JSON.parse(
+ await unsealData(c.value as string, {
+ password: (await getConfig()).server.password,
+ })
+ );
+
+ return (
+ <>
+
>
-}
\ No newline at end of file
+ );
+}
diff --git a/src/app/dev/auth/validasi/layout.tsx b/src/app/dev/auth/validasi/layout.tsx
new file mode 100644
index 00000000..86a4fa5e
--- /dev/null
+++ b/src/app/dev/auth/validasi/layout.tsx
@@ -0,0 +1,8 @@
+import { LayoutValidasi } from "@/app_modules/auth";
+import React from "react";
+
+export default async function Layout({children}: {children: React.ReactNode}) {
+ return<>
+ {children}
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/auth/validasi/page.tsx b/src/app/dev/auth/validasi/page.tsx
new file mode 100644
index 00000000..9f5a20d0
--- /dev/null
+++ b/src/app/dev/auth/validasi/page.tsx
@@ -0,0 +1,7 @@
+import { Validasi } from "@/app_modules/auth";
+
+
+export default function Page() {
+
+ return ;
+}
diff --git a/src/app/dev/crowd/main/layout.tsx b/src/app/dev/crowd/main/layout.tsx
new file mode 100644
index 00000000..7a50a1ba
--- /dev/null
+++ b/src/app/dev/crowd/main/layout.tsx
@@ -0,0 +1,14 @@
+import { LayoutMainCrowd } from "@/app_modules/crowd";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/crowd/main/page.tsx b/src/app/dev/crowd/main/page.tsx
new file mode 100644
index 00000000..7a7c3586
--- /dev/null
+++ b/src/app/dev/crowd/main/page.tsx
@@ -0,0 +1,9 @@
+import { MainCrowd } from "@/app_modules/crowd";
+
+export default async function Page() {
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/crowd/splash/page.tsx b/src/app/dev/crowd/splash/page.tsx
new file mode 100644
index 00000000..2fc01434
--- /dev/null
+++ b/src/app/dev/crowd/splash/page.tsx
@@ -0,0 +1,7 @@
+import { SplashCrowd } from "@/app_modules/crowd";
+
+export default async function Page() {
+ return <>
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/donasi/cerita_penggalang/[id]/layout.tsx b/src/app/dev/donasi/cerita_penggalang/[id]/layout.tsx
new file mode 100644
index 00000000..ef779963
--- /dev/null
+++ b/src/app/dev/donasi/cerita_penggalang/[id]/layout.tsx
@@ -0,0 +1,21 @@
+import { LayoutCeritaPenggalangDonasi } from "@/app_modules/donasi";
+import { Donasi_getOneById } from "@/app_modules/donasi/fun/get/get_one_donasi_by_id";
+import React from "react";
+
+export default async function Layout({
+ children,
+ params,
+}: {
+ children: React.ReactNode;
+ params: { id: string };
+}) {
+ const dataDonasi = await Donasi_getOneById(params.id);
+ const statusDonasiId = dataDonasi?.donasiMaster_StatusDonasiId;
+ return (
+ <>
+
+ {children}
+
+ >
+ );
+}
diff --git a/src/app/dev/donasi/cerita_penggalang/[id]/page.tsx b/src/app/dev/donasi/cerita_penggalang/[id]/page.tsx
new file mode 100644
index 00000000..b9518bed
--- /dev/null
+++ b/src/app/dev/donasi/cerita_penggalang/[id]/page.tsx
@@ -0,0 +1,12 @@
+import { CeritaPenggalangDonasi } from "@/app_modules/donasi";
+import Donasi_getCeritaByDonasiId from "@/app_modules/donasi/fun/get/get_cerita_penggalang";
+
+export default async function Page({ params }: { params: { id: string } }) {
+ const dataCerita = await Donasi_getCeritaByDonasiId(params.id);
+ // console.log(dataCerita)
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/donasi/create/cerita_penggalang/[id]/page.tsx b/src/app/dev/donasi/create/cerita_penggalang/[id]/page.tsx
new file mode 100644
index 00000000..17038f30
--- /dev/null
+++ b/src/app/dev/donasi/create/cerita_penggalang/[id]/page.tsx
@@ -0,0 +1,16 @@
+import { CreateCeritaPenggalangDonasi } from "@/app_modules/donasi";
+import { Donasi_getTemporaryCreate } from "@/app_modules/donasi/fun/get/get_temporary_create";
+import { getToken_UserId } from "@/app_modules/fun/get_user_token";
+
+
+export default async function Page({ params }: { params: { id: string } }) {
+
+ const getTemporaryCreate = await Donasi_getTemporaryCreate(params.id);
+ const userId = await getToken_UserId()
+
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/donasi/create/layout.tsx b/src/app/dev/donasi/create/layout.tsx
new file mode 100644
index 00000000..966bf13c
--- /dev/null
+++ b/src/app/dev/donasi/create/layout.tsx
@@ -0,0 +1,14 @@
+import { LayoutCreateDonasi } from "@/app_modules/donasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/donasi/create/page.tsx b/src/app/dev/donasi/create/page.tsx
new file mode 100644
index 00000000..19d14d03
--- /dev/null
+++ b/src/app/dev/donasi/create/page.tsx
@@ -0,0 +1,15 @@
+import { CreateDonasi } from "@/app_modules/donasi";
+import {
+ Donasi_getMasterDurasi,
+ Donasi_getMasterKategori,
+} from "@/app_modules/donasi/fun";
+import { getToken_UserId } from "@/app_modules/fun/get_user_token";
+
+export default async function Page() {
+ const masterKategori = await Donasi_getMasterKategori();
+ const masterDurasi = await Donasi_getMasterDurasi();
+
+ return (
+
+ );
+}
diff --git a/src/app/dev/donasi/detail/detail_donasi_saya/layout.tsx b/src/app/dev/donasi/detail/detail_donasi_saya/layout.tsx
new file mode 100644
index 00000000..b1c163ab
--- /dev/null
+++ b/src/app/dev/donasi/detail/detail_donasi_saya/layout.tsx
@@ -0,0 +1,14 @@
+import { LayoutDetailDonasiSaya } from "@/app_modules/donasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/donasi/detail/detail_donasi_saya/page.tsx b/src/app/dev/donasi/detail/detail_donasi_saya/page.tsx
new file mode 100644
index 00000000..e3c3c3f1
--- /dev/null
+++ b/src/app/dev/donasi/detail/detail_donasi_saya/page.tsx
@@ -0,0 +1,7 @@
+import { DetailDonasiSaya } from "@/app_modules/donasi";
+
+export default async function Page() {
+ return<>
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/donasi/detail/detail_draft/[id]/layout.tsx b/src/app/dev/donasi/detail/detail_draft/[id]/layout.tsx
new file mode 100644
index 00000000..2877c7ed
--- /dev/null
+++ b/src/app/dev/donasi/detail/detail_draft/[id]/layout.tsx
@@ -0,0 +1,16 @@
+import { LayoutDetailDraftDonasi } from "@/app_modules/donasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+ params
+}: {
+ children: React.ReactNode;
+ params: {id: string}
+}) {
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/donasi/detail/detail_draft/[id]/page.tsx b/src/app/dev/donasi/detail/detail_draft/[id]/page.tsx
new file mode 100644
index 00000000..4439b3ae
--- /dev/null
+++ b/src/app/dev/donasi/detail/detail_draft/[id]/page.tsx
@@ -0,0 +1,12 @@
+import { DetailDraftDonasi } from "@/app_modules/donasi";
+import { Donasi_getOneById } from "@/app_modules/donasi/fun/get/get_one_donasi_by_id";
+
+export default async function Page({ params }: { params: { id: string } }) {
+ const dataDonasi = await Donasi_getOneById(params.id);
+
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/donasi/detail/detail_kabar/layout.tsx b/src/app/dev/donasi/detail/detail_kabar/layout.tsx
new file mode 100644
index 00000000..7eef5bd4
--- /dev/null
+++ b/src/app/dev/donasi/detail/detail_kabar/layout.tsx
@@ -0,0 +1,14 @@
+import { LayoutDetailKabarDonasi } from "@/app_modules/donasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/donasi/detail/detail_kabar/page.tsx b/src/app/dev/donasi/detail/detail_kabar/page.tsx
new file mode 100644
index 00000000..08d151f1
--- /dev/null
+++ b/src/app/dev/donasi/detail/detail_kabar/page.tsx
@@ -0,0 +1,5 @@
+import { DetailKabarDonasi } from "@/app_modules/donasi";
+
+export default async function Page() {
+ return
+}
\ No newline at end of file
diff --git a/src/app/dev/donasi/detail/detail_main/layout.tsx b/src/app/dev/donasi/detail/detail_main/layout.tsx
new file mode 100644
index 00000000..57dd7b23
--- /dev/null
+++ b/src/app/dev/donasi/detail/detail_main/layout.tsx
@@ -0,0 +1,14 @@
+import { LayoutDetailMainDonasi } from "@/app_modules/donasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/donasi/detail/detail_main/page.tsx b/src/app/dev/donasi/detail/detail_main/page.tsx
new file mode 100644
index 00000000..0d188a27
--- /dev/null
+++ b/src/app/dev/donasi/detail/detail_main/page.tsx
@@ -0,0 +1,9 @@
+import { DetailMainDonasi } from "@/app_modules/donasi";
+
+export default async function Page() {
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/donasi/detail/detail_publish/layout.tsx b/src/app/dev/donasi/detail/detail_publish/layout.tsx
new file mode 100644
index 00000000..b23aed9e
--- /dev/null
+++ b/src/app/dev/donasi/detail/detail_publish/layout.tsx
@@ -0,0 +1,14 @@
+import { LayoutDetailPublishDonasi } from "@/app_modules/donasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/donasi/detail/detail_publish/page.tsx b/src/app/dev/donasi/detail/detail_publish/page.tsx
new file mode 100644
index 00000000..e7ca2cdb
--- /dev/null
+++ b/src/app/dev/donasi/detail/detail_publish/page.tsx
@@ -0,0 +1,7 @@
+import { DetailPublishDonasi } from "@/app_modules/donasi";
+
+export default async function Page() {
+ return<>
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/donasi/detail/detail_reject/layout.tsx b/src/app/dev/donasi/detail/detail_reject/layout.tsx
new file mode 100644
index 00000000..9edc1d02
--- /dev/null
+++ b/src/app/dev/donasi/detail/detail_reject/layout.tsx
@@ -0,0 +1,8 @@
+import { LayoutDetailRejectDonasi } from "@/app_modules/donasi";
+import React from "react";
+
+export default async function Layout({children}: {children: React.ReactNode}) {
+ return<>
+ {children}
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/donasi/detail/detail_reject/page.tsx b/src/app/dev/donasi/detail/detail_reject/page.tsx
new file mode 100644
index 00000000..a8b4d15c
--- /dev/null
+++ b/src/app/dev/donasi/detail/detail_reject/page.tsx
@@ -0,0 +1,7 @@
+import { DetailRejectDonasi } from "@/app_modules/donasi";
+
+export default async function Page() {
+ return<>
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/donasi/detail/detail_review/[id]/layout.tsx b/src/app/dev/donasi/detail/detail_review/[id]/layout.tsx
new file mode 100644
index 00000000..13071fc5
--- /dev/null
+++ b/src/app/dev/donasi/detail/detail_review/[id]/layout.tsx
@@ -0,0 +1,14 @@
+import { LayoutDetailReviewDonasi } from "@/app_modules/donasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/donasi/detail/detail_review/[id]/page.tsx b/src/app/dev/donasi/detail/detail_review/[id]/page.tsx
new file mode 100644
index 00000000..c7a4279b
--- /dev/null
+++ b/src/app/dev/donasi/detail/detail_review/[id]/page.tsx
@@ -0,0 +1,12 @@
+import { DetailReviewDonasi } from "@/app_modules/donasi";
+import { Donasi_getOneById } from "@/app_modules/donasi/fun/get/get_one_donasi_by_id";
+
+export default async function Page({ params }: { params: { id: string } }) {
+ const dataDonasi = await Donasi_getOneById(params.id);
+
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/donasi/donatur/layout.tsx b/src/app/dev/donasi/donatur/layout.tsx
new file mode 100644
index 00000000..86fcd7cb
--- /dev/null
+++ b/src/app/dev/donasi/donatur/layout.tsx
@@ -0,0 +1,14 @@
+import { LayoutDonaturDonasi } from "@/app_modules/donasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/donasi/donatur/page.tsx b/src/app/dev/donasi/donatur/page.tsx
new file mode 100644
index 00000000..823c1be8
--- /dev/null
+++ b/src/app/dev/donasi/donatur/page.tsx
@@ -0,0 +1,8 @@
+import { DonaturDonasi } from "@/app_modules/donasi";
+
+export default async function Page() {
+ return<>
+
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/donasi/edit/edit_cerita/[id]/layout.tsx b/src/app/dev/donasi/edit/edit_cerita/[id]/layout.tsx
new file mode 100644
index 00000000..009acb93
--- /dev/null
+++ b/src/app/dev/donasi/edit/edit_cerita/[id]/layout.tsx
@@ -0,0 +1,16 @@
+import { LayoutEditCeritaPenggalangDonasi } from "@/app_modules/donasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+
+ {children}
+
+ >
+ );
+}
diff --git a/src/app/dev/donasi/edit/edit_cerita/[id]/page.tsx b/src/app/dev/donasi/edit/edit_cerita/[id]/page.tsx
new file mode 100644
index 00000000..1467178d
--- /dev/null
+++ b/src/app/dev/donasi/edit/edit_cerita/[id]/page.tsx
@@ -0,0 +1,12 @@
+import { EditCeritaPenggalangDonasi } from "@/app_modules/donasi";
+import Donasi_getCeritaByDonasiId from "@/app_modules/donasi/fun/get/get_cerita_penggalang";
+
+export default async function Page({ params }: { params: { id: string } }) {
+ const dataCerita = await Donasi_getCeritaByDonasiId(params.id)
+ // console.log(dataCerita);
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/donasi/edit/edit_donasi/[id]/layout.tsx b/src/app/dev/donasi/edit/edit_donasi/[id]/layout.tsx
new file mode 100644
index 00000000..ed3f460d
--- /dev/null
+++ b/src/app/dev/donasi/edit/edit_donasi/[id]/layout.tsx
@@ -0,0 +1,14 @@
+import { LayoutEditDonasi } from "@/app_modules/donasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/donasi/edit/edit_donasi/[id]/page.tsx b/src/app/dev/donasi/edit/edit_donasi/[id]/page.tsx
new file mode 100644
index 00000000..cb62d88a
--- /dev/null
+++ b/src/app/dev/donasi/edit/edit_donasi/[id]/page.tsx
@@ -0,0 +1,15 @@
+import { EditDonasi } from "@/app_modules/donasi";
+import { Donasi_getMasterDurasi, Donasi_getMasterKategori } from "@/app_modules/donasi/fun";
+import { Donasi_getOneById } from "@/app_modules/donasi/fun/get/get_one_donasi_by_id";
+
+export default async function Page({params}: {params: {id: string}}) {
+ const dataDonasi = await Donasi_getOneById(params.id)
+ const masterKategori = await Donasi_getMasterKategori()
+ const masterDurasi = await Donasi_getMasterDurasi()
+
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/donasi/edit/update_kabar/layout.tsx b/src/app/dev/donasi/edit/update_kabar/layout.tsx
new file mode 100644
index 00000000..7d7abf48
--- /dev/null
+++ b/src/app/dev/donasi/edit/update_kabar/layout.tsx
@@ -0,0 +1,14 @@
+import { LayoutUpdateKabarDonasi } from "@/app_modules/donasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/donasi/edit/update_kabar/page.tsx b/src/app/dev/donasi/edit/update_kabar/page.tsx
new file mode 100644
index 00000000..65e24c8a
--- /dev/null
+++ b/src/app/dev/donasi/edit/update_kabar/page.tsx
@@ -0,0 +1,7 @@
+import { UpdateKabarDonasi } from "@/app_modules/donasi";
+
+export default async function Page() {
+ return<>
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/donasi/kabar/layout.tsx b/src/app/dev/donasi/kabar/layout.tsx
new file mode 100644
index 00000000..3b7e6330
--- /dev/null
+++ b/src/app/dev/donasi/kabar/layout.tsx
@@ -0,0 +1,14 @@
+import { LayoutKabarDonasi } from "@/app_modules/donasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/donasi/kabar/page.tsx b/src/app/dev/donasi/kabar/page.tsx
new file mode 100644
index 00000000..ff47e41e
--- /dev/null
+++ b/src/app/dev/donasi/kabar/page.tsx
@@ -0,0 +1,9 @@
+import { KabarDonasi } from "@/app_modules/donasi";
+
+export default async function Page() {
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/donasi/list_kabar/layout.tsx b/src/app/dev/donasi/list_kabar/layout.tsx
new file mode 100644
index 00000000..01770051
--- /dev/null
+++ b/src/app/dev/donasi/list_kabar/layout.tsx
@@ -0,0 +1,14 @@
+import { LayoutListKabarDonasi } from "@/app_modules/donasi";
+import React from "react";
+
+export default async function Layput({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/donasi/list_kabar/page.tsx b/src/app/dev/donasi/list_kabar/page.tsx
new file mode 100644
index 00000000..f7021644
--- /dev/null
+++ b/src/app/dev/donasi/list_kabar/page.tsx
@@ -0,0 +1,9 @@
+import { ListKabarDonasi } from "@/app_modules/donasi";
+
+export default async function Page() {
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/donasi/main/beranda/page.tsx b/src/app/dev/donasi/main/beranda/page.tsx
new file mode 100644
index 00000000..bd1c5f72
--- /dev/null
+++ b/src/app/dev/donasi/main/beranda/page.tsx
@@ -0,0 +1,5 @@
+import { MainDonasi } from "@/app_modules/donasi";
+
+export default async function Page() {
+ return
+}
\ No newline at end of file
diff --git a/src/app/dev/donasi/main/donasi_saya/page.tsx b/src/app/dev/donasi/main/donasi_saya/page.tsx
new file mode 100644
index 00000000..f915391f
--- /dev/null
+++ b/src/app/dev/donasi/main/donasi_saya/page.tsx
@@ -0,0 +1,5 @@
+import { DonasiSayaDonasi } from "@/app_modules/donasi";
+
+export default async function Page() {
+ return
+}
\ No newline at end of file
diff --git a/src/app/dev/donasi/main/galang_dana/page.tsx b/src/app/dev/donasi/main/galang_dana/page.tsx
new file mode 100644
index 00000000..bd6092ba
--- /dev/null
+++ b/src/app/dev/donasi/main/galang_dana/page.tsx
@@ -0,0 +1,17 @@
+import { PostingDonasi } from "@/app_modules/donasi";
+import Donasi_getByStatus from "@/app_modules/donasi/fun/get/get_donasi_by_status";
+import { getToken_UserId } from "@/app_modules/fun/get_user_token";
+
+export default async function Page() {
+ const authorId = await getToken_UserId();
+ const listReview = await Donasi_getByStatus(authorId, "2");
+ const listDraft = await Donasi_getByStatus(authorId, "3");
+
+// console.log(listReview)
+
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/donasi/main/layout.tsx b/src/app/dev/donasi/main/layout.tsx
new file mode 100644
index 00000000..15206dfa
--- /dev/null
+++ b/src/app/dev/donasi/main/layout.tsx
@@ -0,0 +1,8 @@
+import { LayoutDonasi } from "@/app_modules/donasi";
+import React from "react";
+
+export default async function Layout({children}: {children: React.ReactNode}) {
+ return <>
+ {children}
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/donasi/masukan_donasi/layout.tsx b/src/app/dev/donasi/masukan_donasi/layout.tsx
new file mode 100644
index 00000000..749879e9
--- /dev/null
+++ b/src/app/dev/donasi/masukan_donasi/layout.tsx
@@ -0,0 +1,14 @@
+import { LayoutMasukanDonasi } from "@/app_modules/donasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/donasi/masukan_donasi/page.tsx b/src/app/dev/donasi/masukan_donasi/page.tsx
new file mode 100644
index 00000000..72b4922f
--- /dev/null
+++ b/src/app/dev/donasi/masukan_donasi/page.tsx
@@ -0,0 +1,5 @@
+import { MasukanDonasi } from "@/app_modules/donasi";
+
+export default async function Page() {
+ return
+}
\ No newline at end of file
diff --git a/src/app/dev/donasi/page_pop_up/create/page.tsx b/src/app/dev/donasi/page_pop_up/create/page.tsx
new file mode 100644
index 00000000..740abe0e
--- /dev/null
+++ b/src/app/dev/donasi/page_pop_up/create/page.tsx
@@ -0,0 +1,5 @@
+import { PagePopUpCreateDonasi } from "@/app_modules/donasi";
+
+export default async function Page() {
+ return ;
+}
diff --git a/src/app/dev/donasi/pencairan_dana/layout.tsx b/src/app/dev/donasi/pencairan_dana/layout.tsx
new file mode 100644
index 00000000..a28ed92d
--- /dev/null
+++ b/src/app/dev/donasi/pencairan_dana/layout.tsx
@@ -0,0 +1,14 @@
+import { LayoutPencairanDanaDonasi } from "@/app_modules/donasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/donasi/pencairan_dana/page.tsx b/src/app/dev/donasi/pencairan_dana/page.tsx
new file mode 100644
index 00000000..c45f962c
--- /dev/null
+++ b/src/app/dev/donasi/pencairan_dana/page.tsx
@@ -0,0 +1,9 @@
+import { PencairanDanaDonasi } from "@/app_modules/donasi";
+
+export default async function Page() {
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/donasi/penggalang_dana/layout.tsx b/src/app/dev/donasi/penggalang_dana/layout.tsx
new file mode 100644
index 00000000..768206c4
--- /dev/null
+++ b/src/app/dev/donasi/penggalang_dana/layout.tsx
@@ -0,0 +1,14 @@
+import { LayoutPenggalangDanaDonasi } from "@/app_modules/donasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/donasi/penggalang_dana/page.tsx b/src/app/dev/donasi/penggalang_dana/page.tsx
new file mode 100644
index 00000000..faeb2166
--- /dev/null
+++ b/src/app/dev/donasi/penggalang_dana/page.tsx
@@ -0,0 +1,10 @@
+import { PenggalangDanaDonasi } from "@/app_modules/donasi";
+
+
+export default async function Page() {
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/home/layout.tsx b/src/app/dev/home/layout.tsx
new file mode 100644
index 00000000..6d14346a
--- /dev/null
+++ b/src/app/dev/home/layout.tsx
@@ -0,0 +1,9 @@
+import { HomeLayout } from "@/app_modules/home";
+
+export default async function Layout({children}: {children: any}) {
+ return <>
+ {children}
+
+ >
+
+}
\ No newline at end of file
diff --git a/src/app/dev/home/page.tsx b/src/app/dev/home/page.tsx
new file mode 100644
index 00000000..499c6b37
--- /dev/null
+++ b/src/app/dev/home/page.tsx
@@ -0,0 +1,31 @@
+import { HomeView } from "@/app_modules/home";
+import { cookies } from "next/headers";
+import { unsealData } from "iron-session";
+import _ from "lodash";
+import { redirect } from "next/navigation";
+
+import yaml from "yaml";
+import fs from "fs";
+import { funGetUserProfile } from "@/app_modules/fun/get_user_profile";
+const config = yaml.parse(fs.readFileSync("config.yaml").toString());
+
+export default async function Page() {
+ const c = cookies().get("ssn");
+
+ if (!c?.value) return redirect("/dev/auth/login");
+ const usr = JSON.parse(
+ await unsealData(c?.value as string, {
+ password: config.server.password,
+ })
+ );
+
+ const dataProfile = await funGetUserProfile(usr.id)
+
+
+ return (
+ <>
+ {/* {JSON.stringify(usr)} */}
+
+ >
+ );
+}
diff --git a/src/app/dev/investasi/berita/[id]/layout.tsx b/src/app/dev/investasi/berita/[id]/layout.tsx
new file mode 100644
index 00000000..d8d02c47
--- /dev/null
+++ b/src/app/dev/investasi/berita/[id]/layout.tsx
@@ -0,0 +1,14 @@
+import { LayoutBeritaInvestasi } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/investasi/berita/[id]/page.tsx b/src/app/dev/investasi/berita/[id]/page.tsx
new file mode 100644
index 00000000..b37fb6b6
--- /dev/null
+++ b/src/app/dev/investasi/berita/[id]/page.tsx
@@ -0,0 +1,13 @@
+import { BeritaInvestasi } from "@/app_modules/investasi";
+import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
+
+export default async function Page({params}: {params: {id: string}}) {
+
+ const dataInvestasi = await getOneInvestasiById(params.id)
+
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/investasi/create/layout.tsx b/src/app/dev/investasi/create/layout.tsx
new file mode 100644
index 00000000..e86d95c8
--- /dev/null
+++ b/src/app/dev/investasi/create/layout.tsx
@@ -0,0 +1,14 @@
+import { InvestasiCreateLayout } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/investasi/create/page.tsx b/src/app/dev/investasi/create/page.tsx
new file mode 100644
index 00000000..35ed259c
--- /dev/null
+++ b/src/app/dev/investasi/create/page.tsx
@@ -0,0 +1,38 @@
+import { InvestasiCreate } from "@/app_modules/investasi";
+import { unsealData } from "iron-session";
+import { cookies } from "next/headers";
+import yaml from "yaml";
+import fs from "fs";
+import { funCreateInvestasi } from "@/app_modules/investasi/fun/fun_create_investasi";
+import getPencarianInvestor from "@/app_modules/investasi/fun/master/get_pencarian_investor";
+import getPeriodeDeviden from "@/app_modules/investasi/fun/master/get_periode_deviden";
+import getPembagianDeviden from "@/app_modules/investasi/fun/master/get_pembagian_deviden";
+import getStatusInvestasi from "@/app_modules/investasi/fun/master/get_status_investasi";
+
+const config = yaml.parse(fs.readFileSync("config.yaml").toString());
+
+export default async function Page() {
+ const c = cookies().get("ssn");
+ const tkn = JSON.parse(
+ await unsealData(c?.value as string, {
+ password: config.server.password,
+ })
+ );
+
+ const pencarianInvestor = await getPencarianInvestor();
+ const periodeDeviden = await getPeriodeDeviden();
+ const pembagianDeviden = await getPembagianDeviden();
+ const statusInvestasi = await getStatusInvestasi();
+
+
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/investasi/create_berita/[id]/layout.tsx b/src/app/dev/investasi/create_berita/[id]/layout.tsx
new file mode 100644
index 00000000..833d254b
--- /dev/null
+++ b/src/app/dev/investasi/create_berita/[id]/layout.tsx
@@ -0,0 +1,8 @@
+import { LayoutCreateBeritaInvestasi } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({children, params}: {children: React.ReactNode, params: {id: string}}) {
+ return<>
+ {children}
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/create_berita/[id]/page.tsx b/src/app/dev/investasi/create_berita/[id]/page.tsx
new file mode 100644
index 00000000..0c6fcbee
--- /dev/null
+++ b/src/app/dev/investasi/create_berita/[id]/page.tsx
@@ -0,0 +1,8 @@
+import { CreateBeritaInvestasi } from "@/app_modules/investasi";
+
+export default async function Page({params}: {params: {id: string}}) {
+ return<>
+
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/detail/[id]/layout.tsx b/src/app/dev/investasi/detail/[id]/layout.tsx
new file mode 100644
index 00000000..bd4ccaa3
--- /dev/null
+++ b/src/app/dev/investasi/detail/[id]/layout.tsx
@@ -0,0 +1,14 @@
+import { LayoutDetailInvestasi } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/investasi/detail/[id]/page.tsx b/src/app/dev/investasi/detail/[id]/page.tsx
new file mode 100644
index 00000000..f2f23011
--- /dev/null
+++ b/src/app/dev/investasi/detail/[id]/page.tsx
@@ -0,0 +1,44 @@
+import { funGetUserProfile } from "@/app_modules/fun/get_user_profile";
+import { DetailInvestasi } from "@/app_modules/investasi";
+import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
+
+import yaml from "yaml";
+import fs from "fs";
+import { cookies } from "next/headers";
+import { unsealData } from "iron-session";
+import funProgressBar from "@/app_modules/investasi/fun/fun_progress_bar";
+import funTotalInvestorByIdInvestasi from "@/app_modules/investasi/fun/fun_total_investor_by_id";
+const config = yaml.parse(fs.readFileSync("config.yaml").toString());
+
+export default async function Page({ params }: { params: { id: string } }) {
+ const c = cookies().get("ssn");
+ const usr = JSON.parse(
+ await unsealData(c?.value as string, {
+ password: config.server.password,
+ })
+ );
+
+ const loginUserId = usr.id;
+ const dataInvestasi = await getOneInvestasiById(params.id);
+ const dataUser = await funGetUserProfile(dataInvestasi?.authorId as any)
+
+ let total = Number(dataInvestasi?.totalLembar)
+ let beli = Number(dataInvestasi?.lembarTerbeli)
+ const progress = await funProgressBar(total, beli)
+
+ const totalInvestor = await funTotalInvestorByIdInvestasi(dataInvestasi?.id)
+
+ // console.log(dataInvestasi?.MasterProgresInvestasi?.name)
+
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/investasi/detail_berita/[id]/layout.tsx b/src/app/dev/investasi/detail_berita/[id]/layout.tsx
new file mode 100644
index 00000000..c75c0992
--- /dev/null
+++ b/src/app/dev/investasi/detail_berita/[id]/layout.tsx
@@ -0,0 +1,14 @@
+import { LayoutDetailBeritaInvestasi } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/investasi/detail_berita/[id]/page.tsx b/src/app/dev/investasi/detail_berita/[id]/page.tsx
new file mode 100644
index 00000000..c8f77c5e
--- /dev/null
+++ b/src/app/dev/investasi/detail_berita/[id]/page.tsx
@@ -0,0 +1,12 @@
+import { DetailBeritaInvestasi } from "@/app_modules/investasi";
+import getOneBeritaInvestasiById from "@/app_modules/investasi/fun/get_one_berita_by_id";
+
+export default async function Page({params}: {params: {id: string}}) {
+ // console.log(params.id)
+ const dataBerita = await getOneBeritaInvestasiById(params.id)
+ // console.log(dataBerita)
+
+ return <>
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/detail_dokumen/[id]/layout.tsx b/src/app/dev/investasi/detail_dokumen/[id]/layout.tsx
new file mode 100644
index 00000000..5f040396
--- /dev/null
+++ b/src/app/dev/investasi/detail_dokumen/[id]/layout.tsx
@@ -0,0 +1,14 @@
+import { LayoutDetailDokumenInvestasi } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/investasi/detail_dokumen/[id]/page.tsx b/src/app/dev/investasi/detail_dokumen/[id]/page.tsx
new file mode 100644
index 00000000..6037f374
--- /dev/null
+++ b/src/app/dev/investasi/detail_dokumen/[id]/page.tsx
@@ -0,0 +1,10 @@
+import { DetailDokumenInvestasi } from "@/app_modules/investasi";
+import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
+
+export default async function Page({params}: {params: {id: string}}) {
+ const dataInvestasi = await getOneInvestasiById(params.id)
+ // console.log(params.id)
+ return<>
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/detail_portofolio/draft/[id]/layout.tsx b/src/app/dev/investasi/detail_portofolio/draft/[id]/layout.tsx
new file mode 100644
index 00000000..34780b41
--- /dev/null
+++ b/src/app/dev/investasi/detail_portofolio/draft/[id]/layout.tsx
@@ -0,0 +1,8 @@
+import { LayoutDetailDraftInvestasi } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({children, params}: {children: React.ReactNode, params: {id: string}}) {
+ return<>
+ {children}
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/detail_portofolio/draft/[id]/page.tsx b/src/app/dev/investasi/detail_portofolio/draft/[id]/page.tsx
new file mode 100644
index 00000000..bf07c1eb
--- /dev/null
+++ b/src/app/dev/investasi/detail_portofolio/draft/[id]/page.tsx
@@ -0,0 +1,13 @@
+import { DetailDraftInvestasi } from "@/app_modules/investasi";
+import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
+
+export default async function Page({params}: {params: {id: string}}) {
+
+
+ const dataInvestasi = await getOneInvestasiById(params.id)
+
+ return<>
+
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/detail_portofolio/publish/[id]/layout.tsx b/src/app/dev/investasi/detail_portofolio/publish/[id]/layout.tsx
new file mode 100644
index 00000000..a52bced1
--- /dev/null
+++ b/src/app/dev/investasi/detail_portofolio/publish/[id]/layout.tsx
@@ -0,0 +1,9 @@
+import { LayoutDetailPublishInvestasi } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({children}: {children: React.ReactNode}) {
+ return<>
+ {children}
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/detail_portofolio/publish/[id]/page.tsx b/src/app/dev/investasi/detail_portofolio/publish/[id]/page.tsx
new file mode 100644
index 00000000..71c85689
--- /dev/null
+++ b/src/app/dev/investasi/detail_portofolio/publish/[id]/page.tsx
@@ -0,0 +1,10 @@
+import { DetailPublishInvestasi } from "@/app_modules/investasi";
+import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
+
+export default async function Page({params}: {params: {id: string}}) {
+
+ const dataInvestasi = await getOneInvestasiById(params.id)
+ return<>
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/detail_portofolio/reject/[id]/layout.tsx b/src/app/dev/investasi/detail_portofolio/reject/[id]/layout.tsx
new file mode 100644
index 00000000..f0653738
--- /dev/null
+++ b/src/app/dev/investasi/detail_portofolio/reject/[id]/layout.tsx
@@ -0,0 +1,18 @@
+import { LayoutDetailRejectInvestasi } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+ params,
+}: {
+ children: React.ReactNode;
+ params: { id: string };
+}) {
+ return (
+ <>
+
+ {children}
+
+ >
+ );
+}
diff --git a/src/app/dev/investasi/detail_portofolio/reject/[id]/page.tsx b/src/app/dev/investasi/detail_portofolio/reject/[id]/page.tsx
new file mode 100644
index 00000000..23368b5b
--- /dev/null
+++ b/src/app/dev/investasi/detail_portofolio/reject/[id]/page.tsx
@@ -0,0 +1,10 @@
+import { DetailRejectInvestasi } from "@/app_modules/investasi";
+import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
+
+export default async function Page({params}: {params: {id: string}}) {
+ const dataInvestasi = await getOneInvestasiById(params.id)
+// console.log(dataInvestasi)
+ return<>
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/detail_portofolio/review/[id]/layout.tsx b/src/app/dev/investasi/detail_portofolio/review/[id]/layout.tsx
new file mode 100644
index 00000000..30869978
--- /dev/null
+++ b/src/app/dev/investasi/detail_portofolio/review/[id]/layout.tsx
@@ -0,0 +1,8 @@
+import { LayoutDetailReviewInvestasi } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({children}: {children: React.ReactNode}) {
+ return<>
+ {children}
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/detail_portofolio/review/[id]/page.tsx b/src/app/dev/investasi/detail_portofolio/review/[id]/page.tsx
new file mode 100644
index 00000000..0b1bcf64
--- /dev/null
+++ b/src/app/dev/investasi/detail_portofolio/review/[id]/page.tsx
@@ -0,0 +1,12 @@
+import { DetailReviewInvestasi } from "@/app_modules/investasi";
+import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
+
+export default async function Page({params}:{params : {id: string}}) {
+
+ const dataInvestasi = await getOneInvestasiById(params.id)
+ // console.log(dataInvestasi)
+
+ return<>
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/detail_prospektus/[id]/layout.tsx b/src/app/dev/investasi/detail_prospektus/[id]/layout.tsx
new file mode 100644
index 00000000..49640fcf
--- /dev/null
+++ b/src/app/dev/investasi/detail_prospektus/[id]/layout.tsx
@@ -0,0 +1,8 @@
+import { LayoutDetailPropektus } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({children}: {children: React.ReactNode}) {
+ return<>
+ {children}
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/detail_prospektus/[id]/page.tsx b/src/app/dev/investasi/detail_prospektus/[id]/page.tsx
new file mode 100644
index 00000000..492bdad5
--- /dev/null
+++ b/src/app/dev/investasi/detail_prospektus/[id]/page.tsx
@@ -0,0 +1,12 @@
+import { DetailPropektus } from "@/app_modules/investasi";
+import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
+
+export default async function Page({ params }: { params: { id: string } }) {
+ const dataInvestasi = await getOneInvestasiById(params.id);
+
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/investasi/detail_saham_terbeli/[id]/layout.tsx b/src/app/dev/investasi/detail_saham_terbeli/[id]/layout.tsx
new file mode 100644
index 00000000..fed30f04
--- /dev/null
+++ b/src/app/dev/investasi/detail_saham_terbeli/[id]/layout.tsx
@@ -0,0 +1,8 @@
+import { LayoutDetailSahamTerbeli } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({children}: {children: React.ReactNode}) {
+ return<>
+ {children}
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/detail_saham_terbeli/[id]/page.tsx b/src/app/dev/investasi/detail_saham_terbeli/[id]/page.tsx
new file mode 100644
index 00000000..af7e1425
--- /dev/null
+++ b/src/app/dev/investasi/detail_saham_terbeli/[id]/page.tsx
@@ -0,0 +1,13 @@
+import { DetailSahamTerbeli } from "@/app_modules/investasi";
+import funTotalInvestorByIdInvestasi from "@/app_modules/investasi/fun/fun_total_investor_by_id";
+import getOneTransaksiBerhasilByIdInvestasi from "@/app_modules/investasi/fun/get_one_transaksi_by_id";
+
+export default async function Page({ params }: { params: { id: string } }) {
+ const dataTransaksi = await getOneTransaksiBerhasilByIdInvestasi(params.id);
+ const investor = await funTotalInvestorByIdInvestasi(
+ dataTransaksi?.Investasi.id as any
+ );
+ // console.log(investor);
+
+ return ;
+}
diff --git a/src/app/dev/investasi/dialog_page/create/layout.tsx b/src/app/dev/investasi/dialog_page/create/layout.tsx
new file mode 100644
index 00000000..85568b94
--- /dev/null
+++ b/src/app/dev/investasi/dialog_page/create/layout.tsx
@@ -0,0 +1,16 @@
+import { LayoutDialogPageCreateInvestasi } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+
+ {children}
+
+ >
+ );
+}
diff --git a/src/app/dev/investasi/dialog_page/create/page.tsx b/src/app/dev/investasi/dialog_page/create/page.tsx
new file mode 100644
index 00000000..df3fb522
--- /dev/null
+++ b/src/app/dev/investasi/dialog_page/create/page.tsx
@@ -0,0 +1,7 @@
+import { DialogPageCreateInvestasi } from "@/app_modules/investasi";
+
+export default async function Page(){
+ return<>
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/dialog_page/transaksi_saham/layout.tsx b/src/app/dev/investasi/dialog_page/transaksi_saham/layout.tsx
new file mode 100644
index 00000000..9184d8ea
--- /dev/null
+++ b/src/app/dev/investasi/dialog_page/transaksi_saham/layout.tsx
@@ -0,0 +1,8 @@
+import LayoutCountDownTransaksiInvestasi from "@/app_modules/investasi/dialog_page/transaksi_saham/layout";
+import React from "react";
+
+export default async function Layout({children}: {children: React.ReactNode}) {
+ return<>
+ {children}
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/dialog_page/transaksi_saham/page.tsx b/src/app/dev/investasi/dialog_page/transaksi_saham/page.tsx
new file mode 100644
index 00000000..9dec4842
--- /dev/null
+++ b/src/app/dev/investasi/dialog_page/transaksi_saham/page.tsx
@@ -0,0 +1,7 @@
+import { KonfirmasiBuktiInvestasi } from "@/app_modules/investasi";
+
+export default async function Page() {
+ return <>
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/edit/[id]/layout.tsx b/src/app/dev/investasi/edit/[id]/layout.tsx
new file mode 100644
index 00000000..5ab6c294
--- /dev/null
+++ b/src/app/dev/investasi/edit/[id]/layout.tsx
@@ -0,0 +1,9 @@
+
+import { LayoutEditInvestasi } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({children, params}: {children: React.ReactNode, params:{id: string}}) {
+ return<>
+ {children}
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/edit/[id]/page.tsx b/src/app/dev/investasi/edit/[id]/page.tsx
new file mode 100644
index 00000000..e4aa7e1a
--- /dev/null
+++ b/src/app/dev/investasi/edit/[id]/page.tsx
@@ -0,0 +1,11 @@
+import { EditInvestasi } from "@/app_modules/investasi";
+
+
+export default async function Page({params}: {params: {id: string}}) {
+ return (
+ <>
+
+
+ >
+ );
+}
diff --git a/src/app/dev/investasi/edit_berita/[id]/layout.tsx b/src/app/dev/investasi/edit_berita/[id]/layout.tsx
new file mode 100644
index 00000000..68855271
--- /dev/null
+++ b/src/app/dev/investasi/edit_berita/[id]/layout.tsx
@@ -0,0 +1,8 @@
+import { LayoutEditBeritaInvestasi } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({children}: { children: React.ReactNode }) {
+ return<>
+ {children}
+ >
+}
diff --git a/src/app/dev/investasi/edit_berita/[id]/page.tsx b/src/app/dev/investasi/edit_berita/[id]/page.tsx
new file mode 100644
index 00000000..245f1308
--- /dev/null
+++ b/src/app/dev/investasi/edit_berita/[id]/page.tsx
@@ -0,0 +1,10 @@
+import { EditBeritaInvestasi } from "@/app_modules/investasi";
+import getOneBeritaInvestasiById from "@/app_modules/investasi/fun/get_one_berita_by_id";
+
+export default async function Page({params}: {params: {id: string}}) {
+ const dataBerita = await getOneBeritaInvestasiById(params.id)
+ // console.log(dataBerita)
+ return<>
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/edit_dokumen/[id]/layout.tsx b/src/app/dev/investasi/edit_dokumen/[id]/layout.tsx
new file mode 100644
index 00000000..e051bfc5
--- /dev/null
+++ b/src/app/dev/investasi/edit_dokumen/[id]/layout.tsx
@@ -0,0 +1,8 @@
+import { LayoutEditDokumenInvestasi } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({children, params}: {children: React.ReactNode, params: {id: string}}) {
+ return<>
+ {children}
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/edit_dokumen/[id]/page.tsx b/src/app/dev/investasi/edit_dokumen/[id]/page.tsx
new file mode 100644
index 00000000..b7100cfe
--- /dev/null
+++ b/src/app/dev/investasi/edit_dokumen/[id]/page.tsx
@@ -0,0 +1,10 @@
+import { EditDokumenInvestasi } from "@/app_modules/investasi";
+import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
+
+export default async function Page({params}: {params: {id: string}}) {
+ const dataInvestasi = await getOneInvestasiById(params.id)
+ // console.log(dataInvestasi)
+ return<>
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/edit_intro/[id]/layout.tsx b/src/app/dev/investasi/edit_intro/[id]/layout.tsx
new file mode 100644
index 00000000..9ffdc3cd
--- /dev/null
+++ b/src/app/dev/investasi/edit_intro/[id]/layout.tsx
@@ -0,0 +1,8 @@
+import { LayoutEditIntroInvestasi } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({children}: {children: React.ReactNode}) {
+ return<>
+ {children}
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/edit_intro/[id]/page.tsx b/src/app/dev/investasi/edit_intro/[id]/page.tsx
new file mode 100644
index 00000000..b726841c
--- /dev/null
+++ b/src/app/dev/investasi/edit_intro/[id]/page.tsx
@@ -0,0 +1,23 @@
+import { EditIntroInvestasi } from "@/app_modules/investasi";
+import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
+import getPembagianDeviden from "@/app_modules/investasi/fun/master/get_pembagian_deviden";
+import getPencarianInvestor from "@/app_modules/investasi/fun/master/get_pencarian_investor";
+import getPeriodeDeviden from "@/app_modules/investasi/fun/master/get_periode_deviden";
+
+export default async function Page({ params }: { params: { id: string } }) {
+ const dataInvestasi = await getOneInvestasiById(params.id);
+ const listPencarian = await getPencarianInvestor();
+ const listPeriode = await getPeriodeDeviden();
+ const listPembagian = await getPembagianDeviden();
+
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/investasi/edit_prospektus/[id]/layout.tsx b/src/app/dev/investasi/edit_prospektus/[id]/layout.tsx
new file mode 100644
index 00000000..0c6a45a1
--- /dev/null
+++ b/src/app/dev/investasi/edit_prospektus/[id]/layout.tsx
@@ -0,0 +1,21 @@
+import { LayoutEditProspektusInvestasi } from "@/app_modules/investasi";
+import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
+import React from "react";
+
+export default async function Layout({
+ children,
+ params,
+}: {
+ children: React.ReactNode;
+ params: { id: string };
+}) {
+ const dataInvestasi = await getOneInvestasiById(params.id);
+
+ return (
+ <>
+
+ {children}
+
+ >
+ );
+}
diff --git a/src/app/dev/investasi/edit_prospektus/[id]/page.tsx b/src/app/dev/investasi/edit_prospektus/[id]/page.tsx
new file mode 100644
index 00000000..521d1475
--- /dev/null
+++ b/src/app/dev/investasi/edit_prospektus/[id]/page.tsx
@@ -0,0 +1,12 @@
+import { EditProspektusInvestasi } from "@/app_modules/investasi";
+import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
+
+export default async function Page({ params }: { params: { id: string } }) {
+ const dataInvestasi = await getOneInvestasiById(params.id);
+// console.log(dataInvestasi);
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/investasi/list_edit_berita/[id]/layout.tsx b/src/app/dev/investasi/list_edit_berita/[id]/layout.tsx
new file mode 100644
index 00000000..f6361a2c
--- /dev/null
+++ b/src/app/dev/investasi/list_edit_berita/[id]/layout.tsx
@@ -0,0 +1,16 @@
+import { LayoutListEditBeritaInvestasi } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+ params
+}: {
+ children: React.ReactNode;
+ params: { id: string };
+}) {
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/investasi/list_edit_berita/[id]/page.tsx b/src/app/dev/investasi/list_edit_berita/[id]/page.tsx
new file mode 100644
index 00000000..898fd9ad
--- /dev/null
+++ b/src/app/dev/investasi/list_edit_berita/[id]/page.tsx
@@ -0,0 +1,15 @@
+import { ListEditBeritaInvestasi } from "@/app_modules/investasi";
+import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
+
+export default async function Page({params}: {params: {id: string}}) {
+
+ const dataInvestasi = await getOneInvestasiById(params.id)
+ // console.log(dataInvestasi)
+
+
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/investasi/main/layout.tsx b/src/app/dev/investasi/main/layout.tsx
new file mode 100644
index 00000000..652b25c9
--- /dev/null
+++ b/src/app/dev/investasi/main/layout.tsx
@@ -0,0 +1,8 @@
+import { LayoutMainInvestasi } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({children}: {children: React.ReactNode}) {
+ return <>
+ {children}
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/main/page.tsx b/src/app/dev/investasi/main/page.tsx
new file mode 100644
index 00000000..be5f6f53
--- /dev/null
+++ b/src/app/dev/investasi/main/page.tsx
@@ -0,0 +1,45 @@
+import { MainInvestasi } from "@/app_modules/investasi";
+import funUpadteProgresPersenInvestasi from "@/app_modules/investasi/fun/fun_update_progres_persen";
+import funUpadteProgresWaktuInvestasi from "@/app_modules/investasi/fun/fun_update_progres_waktu";
+import getAllDataPublishInvestasi from "@/app_modules/investasi/fun/get_list_all_investasi";
+import { getListAllPublish } from "@/app_modules/investasi/fun/get_list_all_publish";
+import { MODEL_Investasi } from "@/app_modules/investasi/model/model_investasi";
+
+import _ from "lodash";
+
+export default async function Page() {
+ const dataOnProgres = await getListAllPublish("1");
+ const dataSelesai = await getListAllPublish("2");
+ const dataWaktuHabis = await getListAllPublish("3");
+ const allData = await getAllDataPublishInvestasi();
+ // console.log(allData)
+
+ // const dataInves: MODEL_Investasi[] = [];
+
+ // for (let i of allData as any) {
+ // await funUpadteProgresWaktuInvestasi(i).then(
+ // async () =>
+ // await funUpadteProgresPersenInvestasi(i).then(
+ // async () =>
+ // await getAllDataPublishInvestasi().then((val: any) =>
+ // dataInves.push(val)
+ // )
+ // )
+ // );
+ // }
+
+ // const realData = dataInves.map((e) => e)
+ // console.log(allData)
+
+
+
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/investasi/main/portofolio/page.tsx b/src/app/dev/investasi/main/portofolio/page.tsx
new file mode 100644
index 00000000..53d718e2
--- /dev/null
+++ b/src/app/dev/investasi/main/portofolio/page.tsx
@@ -0,0 +1,39 @@
+import { PortofolioInvestasi } from "@/app_modules/investasi";
+import { cookies } from "next/headers";
+import fs from "fs";
+import yaml from "yaml";
+import { unsealData } from "iron-session";
+import getInvestasiByStatusId from "@/app_modules/investasi/fun/get_investasi_by_id";
+import getStatusInvestasi from "@/app_modules/investasi/fun/master/get_status_investasi";
+import getPortoByStatusId from "@/app_modules/investasi/fun/get_porto_status_by_id";
+
+const config = yaml.parse(fs.readFileSync("config.yaml").toString());
+
+export default async function Page() {
+ const c = cookies().get("ssn");
+ const tkn = JSON.parse(
+ await unsealData(c?.value as string, {
+ password: config.server.password,
+ })
+ );
+
+ const listStatusInvestasi = await getStatusInvestasi();
+ const dataDraft = await getPortoByStatusId(tkn.id, 1)
+ const dataReview = await getPortoByStatusId(tkn.id, 2)
+ const dataPublish = await getPortoByStatusId(tkn.id, 3)
+ const dataReject = await getPortoByStatusId(tkn.id, 4)
+
+
+
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/investasi/main/saham_saya/page.tsx b/src/app/dev/investasi/main/saham_saya/page.tsx
new file mode 100644
index 00000000..9601e2b8
--- /dev/null
+++ b/src/app/dev/investasi/main/saham_saya/page.tsx
@@ -0,0 +1,23 @@
+import { InvestasiSahamTerbeli } from "@/app_modules/investasi";
+import getListTransaksiBerhasilInvestasi from "@/app_modules/investasi/fun/get_list_transaksi_berhasil_by_id";
+import yaml from "yaml";
+import fs from "fs";
+import { cookies } from "next/headers";
+import { unsealData } from "iron-session";
+const config = yaml.parse(fs.readFileSync("config.yaml").toString());
+
+export default async function Page() {
+ const c = cookies().get("ssn");
+ const user = JSON.parse(
+ await unsealData(c?.value as string, {
+ password: config.server.password,
+ })
+ );
+ const listTransaksi = await getListTransaksiBerhasilInvestasi(user.id)
+ // console.log(listTransaksi)
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/investasi/main/transaksi/page.tsx b/src/app/dev/investasi/main/transaksi/page.tsx
new file mode 100644
index 00000000..525a1a51
--- /dev/null
+++ b/src/app/dev/investasi/main/transaksi/page.tsx
@@ -0,0 +1,33 @@
+import { TransaksiInvestasi } from "@/app_modules/investasi";
+import getListAllTransaksiById_Investasi from "@/app_modules/investasi/fun/get_list_all_transaksi_by_id";
+import getMaster_StatusTransaksiInvestasi from "@/app_modules/investasi/fun/master/get_status_transaksi";
+
+import fs from "fs";
+import yaml from "yaml";
+import { unsealData } from "iron-session";
+import { cookies } from "next/headers";
+import funCountDown from "@/app_modules/investasi/fun/fun_countdown_investasi";
+import funCekSisaWaktuTransaksiInvestasi from "@/app_modules/investasi/fun/fun_cek_sisa_waktu";
+const config = yaml.parse(fs.readFileSync("config.yaml").toString());
+
+export default async function Page() {
+ const c = cookies().get("ssn");
+ const tkn = JSON.parse(
+ await unsealData(c?.value as string, {
+ password: config.server.password,
+ })
+ );
+ const userId = tkn.id;
+ const statusTransaksi = await getMaster_StatusTransaksiInvestasi();
+ const listTransaksi = await getListAllTransaksiById_Investasi(userId);
+ // console.log(listTransaksi)
+
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/investasi/metode_transfer/[id]/layout.tsx b/src/app/dev/investasi/metode_transfer/[id]/layout.tsx
new file mode 100644
index 00000000..eb622d97
--- /dev/null
+++ b/src/app/dev/investasi/metode_transfer/[id]/layout.tsx
@@ -0,0 +1,14 @@
+import { LayoutMetodeTransferInvestasi } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/investasi/metode_transfer/[id]/page.tsx b/src/app/dev/investasi/metode_transfer/[id]/page.tsx
new file mode 100644
index 00000000..b350f945
--- /dev/null
+++ b/src/app/dev/investasi/metode_transfer/[id]/page.tsx
@@ -0,0 +1,32 @@
+import { MetodeTransferInvestasi } from "@/app_modules/investasi";
+import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
+import getMaster_NamaBank from "@/app_modules/investasi/fun/master/get_nama_bank";
+
+import yaml from "yaml";
+import fs from "fs";
+import { cookies } from "next/headers";
+import { unsealData } from "iron-session";
+const config = yaml.parse(fs.readFileSync("config.yaml").toString());
+
+export default async function Page({ params }: { params: { id: string } }) {
+ const c = cookies().get("ssn");
+ const usr = JSON.parse(
+ await unsealData(c?.value as string, {
+ password: config.server.password,
+ })
+ );
+
+ const authorId = usr.id;
+ const dataInvestasi = await getOneInvestasiById(params.id);
+ const namaBank = await getMaster_NamaBank();
+ // console.log(namaBank)
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/investasi/proses_investasi/[id]/layout.tsx b/src/app/dev/investasi/proses_investasi/[id]/layout.tsx
new file mode 100644
index 00000000..2d8b6959
--- /dev/null
+++ b/src/app/dev/investasi/proses_investasi/[id]/layout.tsx
@@ -0,0 +1,8 @@
+import { LayoutProsesInvestasi } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({children}: {children: React.ReactNode}) {
+ return<>
+ {children}
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/proses_investasi/[id]/page.tsx b/src/app/dev/investasi/proses_investasi/[id]/page.tsx
new file mode 100644
index 00000000..c77a06a0
--- /dev/null
+++ b/src/app/dev/investasi/proses_investasi/[id]/page.tsx
@@ -0,0 +1,11 @@
+import { ProsesInvestasi } from "@/app_modules/investasi";
+import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
+
+export default async function Page({params}: {params: {id: string}}) {
+
+ const dataInvestasi = await getOneInvestasiById(params.id)
+
+ return<>
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/proses_transaksi/[id]/layout.tsx b/src/app/dev/investasi/proses_transaksi/[id]/layout.tsx
new file mode 100644
index 00000000..733d73b5
--- /dev/null
+++ b/src/app/dev/investasi/proses_transaksi/[id]/layout.tsx
@@ -0,0 +1,12 @@
+import { LayoutProsesTransaksiInvestasi } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ {children}
+ );
+}
diff --git a/src/app/dev/investasi/proses_transaksi/[id]/page.tsx b/src/app/dev/investasi/proses_transaksi/[id]/page.tsx
new file mode 100644
index 00000000..40f0b6c3
--- /dev/null
+++ b/src/app/dev/investasi/proses_transaksi/[id]/page.tsx
@@ -0,0 +1,30 @@
+import { ProsesTransaksiInvestasi } from "@/app_modules/investasi";
+import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
+import { unsealData } from "iron-session";
+import { cookies } from "next/headers";
+import { funGetUserProfile } from "@/app_modules/fun/get_user_profile";
+import yaml from "yaml";
+import fs from "fs";
+const config = yaml.parse(fs.readFileSync("config.yaml").toString());
+
+export default async function Page({ params }: { params: { id: string } }) {
+ const c = cookies().get("ssn");
+ const user = JSON.parse(
+ await unsealData(c?.value as string, {
+ password: config.server.password,
+ })
+ );
+
+ const userLogin = await funGetUserProfile(user.id);
+ const dataInvestasi = await getOneInvestasiById(params.id);
+
+ // console.log(dataInvestasi);
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/investasi/status_pesanan/[id]/layout.tsx b/src/app/dev/investasi/status_pesanan/[id]/layout.tsx
new file mode 100644
index 00000000..2b040878
--- /dev/null
+++ b/src/app/dev/investasi/status_pesanan/[id]/layout.tsx
@@ -0,0 +1,8 @@
+import { LayoutStatusPesananInvestasi } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({children}: {children: React.ReactNode}) {
+ return <>
+ {children}
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/status_pesanan/[id]/page.tsx b/src/app/dev/investasi/status_pesanan/[id]/page.tsx
new file mode 100644
index 00000000..f5f6c5c7
--- /dev/null
+++ b/src/app/dev/investasi/status_pesanan/[id]/page.tsx
@@ -0,0 +1,14 @@
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import { StatusPesananInvetsatsi } from "@/app_modules/investasi";
+import getOneTransaksiByIdInvestasi from "@/app_modules/investasi/fun/get_one_transaksi_by_id";
+import getTransaksiByIdInvestasi from "@/app_modules/investasi/fun/get_transaksi_investasi";
+
+export default async function Page({ params }: { params: { id: string } }) {
+ const dataTransaksi = await getOneTransaksiByIdInvestasi(params.id);
+
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/investasi/status_transaksi/berhasil/layout.tsx b/src/app/dev/investasi/status_transaksi/berhasil/layout.tsx
new file mode 100644
index 00000000..6b2fd6be
--- /dev/null
+++ b/src/app/dev/investasi/status_transaksi/berhasil/layout.tsx
@@ -0,0 +1,9 @@
+
+import { LayoutStatusTransaksiInvestasi } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({children}: {children: React.ReactNode}) {
+ return<>
+ {children}
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/status_transaksi/berhasil/page.tsx b/src/app/dev/investasi/status_transaksi/berhasil/page.tsx
new file mode 100644
index 00000000..b751d50b
--- /dev/null
+++ b/src/app/dev/investasi/status_transaksi/berhasil/page.tsx
@@ -0,0 +1,8 @@
+import { StatusTransaksiInvestasi } from "@/app_modules/investasi";
+
+
+export default async function Page() {
+ return<>
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/status_transaksi/gagal/[id]/layout.tsx b/src/app/dev/investasi/status_transaksi/gagal/[id]/layout.tsx
new file mode 100644
index 00000000..d9a96998
--- /dev/null
+++ b/src/app/dev/investasi/status_transaksi/gagal/[id]/layout.tsx
@@ -0,0 +1,16 @@
+import { LayoutStatusTransaksiInvestasi_Gagal } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+
+ {children}
+
+ >
+ );
+}
diff --git a/src/app/dev/investasi/status_transaksi/gagal/[id]/page.tsx b/src/app/dev/investasi/status_transaksi/gagal/[id]/page.tsx
new file mode 100644
index 00000000..fb6362ad
--- /dev/null
+++ b/src/app/dev/investasi/status_transaksi/gagal/[id]/page.tsx
@@ -0,0 +1,14 @@
+import { StatusTransaksiInvestasi_Gagal } from "@/app_modules/investasi";
+import getTransaksiByIdInvestasi from "@/app_modules/investasi/fun/get_transaksi_investasi";
+
+export default async function Page({ params }: { params: { id: string } }) {
+ // console.log(params.id)
+ const dataTransaksi = await getTransaksiByIdInvestasi(params.id);
+// console.log(dataTransaksi);
+
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/investasi/transfer/[id]/layout.tsx b/src/app/dev/investasi/transfer/[id]/layout.tsx
new file mode 100644
index 00000000..a5a1a6b9
--- /dev/null
+++ b/src/app/dev/investasi/transfer/[id]/layout.tsx
@@ -0,0 +1,14 @@
+import { LayoutTransferInvestasi } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/investasi/transfer/[id]/page.tsx b/src/app/dev/investasi/transfer/[id]/page.tsx
new file mode 100644
index 00000000..7c89ddce
--- /dev/null
+++ b/src/app/dev/investasi/transfer/[id]/page.tsx
@@ -0,0 +1,17 @@
+import { TransferInvestasi } from "@/app_modules/investasi";
+import funCountDown from "@/app_modules/investasi/fun/fun_countdown_investasi";
+import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
+import getTransaksiByIdInvestasi from "@/app_modules/investasi/fun/get_transaksi_investasi";
+
+export default async function Page({ params }: { params: { id: string } }) {
+ const dataTransaksi = await getTransaksiByIdInvestasi(params.id);
+ // const cd = await funCountDown(params.id)
+ // console.log(dataTransaksi)
+ // const cd = await funCountDown("" + dataTransaksi?.id);
+
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/investasi/upload/layout.tsx b/src/app/dev/investasi/upload/layout.tsx
new file mode 100644
index 00000000..f0dc3953
--- /dev/null
+++ b/src/app/dev/investasi/upload/layout.tsx
@@ -0,0 +1,8 @@
+import { LayoutUploadGambarInvestasi } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({children}: {children: React.ReactNode}) {
+ return<>
+ {children}
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/upload/page.tsx b/src/app/dev/investasi/upload/page.tsx
new file mode 100644
index 00000000..96feb763
--- /dev/null
+++ b/src/app/dev/investasi/upload/page.tsx
@@ -0,0 +1,7 @@
+import { UploadGambarInvestasi } from "@/app_modules/investasi";
+
+export default async function Page() {
+ return<>
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/upload_bukti/layout.tsx b/src/app/dev/investasi/upload_bukti/layout.tsx
new file mode 100644
index 00000000..2e61e6c1
--- /dev/null
+++ b/src/app/dev/investasi/upload_bukti/layout.tsx
@@ -0,0 +1,8 @@
+import { LayoutBuktiTransferInvestasi } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({children}: {children: React.ReactNode}) {
+ return<>
+ {children}
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/upload_bukti/page.tsx b/src/app/dev/investasi/upload_bukti/page.tsx
new file mode 100644
index 00000000..681868f8
--- /dev/null
+++ b/src/app/dev/investasi/upload_bukti/page.tsx
@@ -0,0 +1,5 @@
+import { UploadBuktiTransferInvestasi } from "@/app_modules/investasi";
+
+export default async function Page() {
+ return ;
+}
diff --git a/src/app/dev/investasi/upload_dokumen/[id]/layout.tsx b/src/app/dev/investasi/upload_dokumen/[id]/layout.tsx
new file mode 100644
index 00000000..1f1ff79e
--- /dev/null
+++ b/src/app/dev/investasi/upload_dokumen/[id]/layout.tsx
@@ -0,0 +1,6 @@
+import { LayoutUploadDokumenInvestasi } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({children}: {children: React.ReactNode}) {
+ return {children}
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/upload_dokumen/[id]/page.tsx b/src/app/dev/investasi/upload_dokumen/[id]/page.tsx
new file mode 100644
index 00000000..f96c9080
--- /dev/null
+++ b/src/app/dev/investasi/upload_dokumen/[id]/page.tsx
@@ -0,0 +1,5 @@
+import { UploadDokumenInvestasi } from "@/app_modules/investasi";
+
+export default async function Page({ params }: { params: { id: string } }) {
+ return ;
+}
diff --git a/src/app/dev/investasi/upload_prospektus/[id]/layout.tsx b/src/app/dev/investasi/upload_prospektus/[id]/layout.tsx
new file mode 100644
index 00000000..f8ce7fe2
--- /dev/null
+++ b/src/app/dev/investasi/upload_prospektus/[id]/layout.tsx
@@ -0,0 +1,8 @@
+import { LayoutUploadProspektusInvestasi } from "@/app_modules/investasi";
+import React from "react";
+
+export default async function Layout({children}: {children: React.ReactNode}) {
+ return<>
+ {children}
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/investasi/upload_prospektus/[id]/page.tsx b/src/app/dev/investasi/upload_prospektus/[id]/page.tsx
new file mode 100644
index 00000000..40d56782
--- /dev/null
+++ b/src/app/dev/investasi/upload_prospektus/[id]/page.tsx
@@ -0,0 +1,5 @@
+import { UploadProspektusInvestasi } from "@/app_modules/investasi";
+
+export default async function Page({ params }: { params: { id: string } }) {
+ return ;
+}
diff --git a/src/app/dev/katalog/[id]/layout.tsx b/src/app/dev/katalog/[id]/layout.tsx
new file mode 100644
index 00000000..62c2dc48
--- /dev/null
+++ b/src/app/dev/katalog/[id]/layout.tsx
@@ -0,0 +1,10 @@
+import { KatalogLayout } from "@/app_modules/katalog/main";
+
+export default async function Layout({ children, params }: { children: any, params: {id: string} }) {
+ // const a = atob(params.id.toString())
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/katalog/[id]/page.tsx b/src/app/dev/katalog/[id]/page.tsx
new file mode 100644
index 00000000..6ed3a573
--- /dev/null
+++ b/src/app/dev/katalog/[id]/page.tsx
@@ -0,0 +1,34 @@
+import prisma from "@/app/lib/prisma";
+import { getProfile } from "@/app_modules/katalog/profile";
+import { KatalogView } from "@/app_modules/katalog/main";
+import { url } from "inspector";
+import { unsealData } from "iron-session";
+import _ from "lodash";
+import { cookies } from "next/headers";
+import { redirect } from "next/navigation";
+import { funGetUserProfile } from "@/app_modules/fun/get_user_profile";
+import yaml from "yaml";
+import fs from "fs";
+import { funGetListPortofolio } from "@/app_modules/katalog/portofolio/fun/get_list_portofolio";
+const config = yaml.parse(fs.readFileSync("config.yaml").toString());
+
+export default async function Page() {
+ const data = await getProfile();
+
+ const u = cookies().get("ssn");
+ const usr = JSON.parse(
+ await unsealData(u?.value as string, {
+ password: config.server.password,
+ })
+ );
+
+ const user = await funGetUserProfile(usr.id);
+
+ const listPorto = await funGetListPortofolio(user?.Profile?.id)
+
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/portofolio/create/[id]/layout.tsx b/src/app/dev/portofolio/create/[id]/layout.tsx
new file mode 100644
index 00000000..be0a02bc
--- /dev/null
+++ b/src/app/dev/portofolio/create/[id]/layout.tsx
@@ -0,0 +1,8 @@
+import { CreatePortofolio, CreatePortofolioLayout, PortofolioLayout } from "@/app_modules/katalog/portofolio";
+import React from "react";
+
+export default async function Layout({children, params}: {children: React.ReactNode, params: {id: string}}) {
+ return<>
+ {children}
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/portofolio/create/[id]/page.tsx b/src/app/dev/portofolio/create/[id]/page.tsx
new file mode 100644
index 00000000..2bdd09e8
--- /dev/null
+++ b/src/app/dev/portofolio/create/[id]/page.tsx
@@ -0,0 +1,16 @@
+import { myConsole } from "@/app/fun/my_console";
+import { CreatePortofolio } from "@/app_modules/katalog/portofolio";
+import { getBidangBisnis } from "@/app_modules/katalog/portofolio/fun/get_bidang_bisnis";
+
+export default async function Page({ params }: { params: { id: string } }) {
+ const bidangBisnis = await getBidangBisnis();
+
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/portofolio/main/[id]/layout.tsx b/src/app/dev/portofolio/main/[id]/layout.tsx
new file mode 100644
index 00000000..f46699c1
--- /dev/null
+++ b/src/app/dev/portofolio/main/[id]/layout.tsx
@@ -0,0 +1,13 @@
+import { PortofolioLayout } from "@/app_modules/katalog/portofolio";
+import { getOnePortofolio } from "@/app_modules/katalog/portofolio/fun/get_one_portofolio";
+
+export default async function Layout({ children, params }: { children: any, params: {id: string} }) {
+ const getPorto = await getOnePortofolio(params.id)
+
+
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/portofolio/main/[id]/page.tsx b/src/app/dev/portofolio/main/[id]/page.tsx
new file mode 100644
index 00000000..25e9a13e
--- /dev/null
+++ b/src/app/dev/portofolio/main/[id]/page.tsx
@@ -0,0 +1,15 @@
+import { ViewPortofolio } from "@/app_modules/katalog/portofolio";
+import { getOnePortofolio } from "@/app_modules/katalog/portofolio/fun/get_one_portofolio";
+
+export default async function Page({params}: {params: {id: string}}) {
+
+ const getPorto = await getOnePortofolio(params.id)
+ // console.log(getPorto)
+
+ return (
+ <>
+ {/* {JSON.stringify(getPorto)} */}
+
+ >
+ );
+}
diff --git a/src/app/dev/profile/create/[id]/layout.tsx b/src/app/dev/profile/create/[id]/layout.tsx
new file mode 100644
index 00000000..a4737a19
--- /dev/null
+++ b/src/app/dev/profile/create/[id]/layout.tsx
@@ -0,0 +1,10 @@
+import { ProfileLayout } from "@/app_modules/katalog/profile";
+
+export default function Layout({ children }: { children: any }) {
+ return (
+ <>
+ {children}
+ >
+ );
+}
+
diff --git a/src/app/dev/profile/create/[id]/page.tsx b/src/app/dev/profile/create/[id]/page.tsx
new file mode 100644
index 00000000..fb1c2751
--- /dev/null
+++ b/src/app/dev/profile/create/[id]/page.tsx
@@ -0,0 +1,9 @@
+import { CreateProfile } from "@/app_modules/katalog/profile";
+
+export default async function Page({params}: {params: {id: string}}) {
+ // console.log(params.id)
+
+ return <>
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/dev/profile/edit/[id]/layout.tsx b/src/app/dev/profile/edit/[id]/layout.tsx
new file mode 100644
index 00000000..34a5c84c
--- /dev/null
+++ b/src/app/dev/profile/edit/[id]/layout.tsx
@@ -0,0 +1,12 @@
+import { funGetUserProfile } from "@/app_modules/fun/get_user_profile";
+import { EditProfileLayout } from "@/app_modules/katalog/profile";
+
+export default async function Layout({ children, params }: { children: any, params: {id: string} }) {
+ const data = await funGetUserProfile(params.id)
+ const profileId = data?.Profile?.id
+ return (
+ <>
+ {children}
+ >
+ );
+}
diff --git a/src/app/dev/profile/edit/[id]/page.tsx b/src/app/dev/profile/edit/[id]/page.tsx
new file mode 100644
index 00000000..dca06bfe
--- /dev/null
+++ b/src/app/dev/profile/edit/[id]/page.tsx
@@ -0,0 +1,14 @@
+import { funGetUserProfile } from "@/app_modules/fun/get_user_profile";
+import { getProfile } from "@/app_modules/katalog/profile";
+import EditProfile from "@/app_modules/katalog/profile/edit/view";
+
+export default async function Page({ params }: { params: { id: string } }) {
+ const data = await funGetUserProfile(params.id);
+
+ return (
+ <>
+ {/* {JSON.stringify(data)} */}
+
+ >
+ );
+}
diff --git a/src/app/dev/profile/upload/[id]/layout.tsx b/src/app/dev/profile/upload/[id]/layout.tsx
new file mode 100644
index 00000000..a204721f
--- /dev/null
+++ b/src/app/dev/profile/upload/[id]/layout.tsx
@@ -0,0 +1,13 @@
+import { UploadFotoProfileLayout } from "@/app_modules/katalog/profile";
+import { AppShell } from "@mantine/core";
+
+export default function Layout({ children, params }: { children: any, params: {id: string} }) {
+
+ return (
+ <>
+
+ {children}
+
+ >
+ );
+}
diff --git a/src/app/dev/profile/upload/[id]/page.tsx b/src/app/dev/profile/upload/[id]/page.tsx
new file mode 100644
index 00000000..9c98a056
--- /dev/null
+++ b/src/app/dev/profile/upload/[id]/page.tsx
@@ -0,0 +1,26 @@
+import { UploadFotoProfile } from "@/app_modules/katalog/profile";
+import { unsealData } from "iron-session";
+import { cookies } from "next/headers";
+import yaml from "yaml";
+import fs from "fs";
+import { funGetUserProfile } from "@/app_modules/fun/get_user_profile";
+const config = yaml.parse(fs.readFileSync("config.yaml").toString());
+
+export default async function Page() {
+ const c = cookies().get("ssn");
+ const usr = JSON.parse(
+ await unsealData(c?.value as string, {
+ password: config.server.password,
+ })
+ );
+
+ const imageUrl = await funGetUserProfile(usr.id).then(
+ (res) => res?.Profile?.ImageProfile?.url
+ );
+
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/splash/admin/page.tsx b/src/app/dev/splash/admin/page.tsx
new file mode 100644
index 00000000..6597e069
--- /dev/null
+++ b/src/app/dev/splash/admin/page.tsx
@@ -0,0 +1,7 @@
+import { SplashDashboardAdmin } from "@/app_modules/admin/main";
+
+export default async function Page() {
+ return<>
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/emotion.tsx b/src/app/emotion.tsx
index 07deb7bf..cb3adb61 100644
--- a/src/app/emotion.tsx
+++ b/src/app/emotion.tsx
@@ -1,31 +1,42 @@
-'use client';
+"use client";
+import AppNotif from "@/app_modules/notif";
// import './globals.css'
-import { CacheProvider } from '@emotion/react';
-import { MantineProvider, useEmotionCache } from '@mantine/core';
-import { useServerInsertedHTML } from 'next/navigation';
+import { CacheProvider } from "@emotion/react";
+import { MantineProvider, useEmotionCache } from "@mantine/core";
+import { Notifications } from "@mantine/notifications";
+import { useServerInsertedHTML } from "next/navigation";
+import { ToastContainer, toast } from "react-toastify";
+import "react-toastify/dist/ReactToastify.css";
-export default function RootStyleRegistry({ children }: { children: React.ReactNode }) {
- const cache = useEmotionCache();
- cache.compat = true;
+export default function RootStyleRegistry({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ const cache = useEmotionCache();
+ cache.compat = true;
- useServerInsertedHTML(() => (
-
- ));
+ useServerInsertedHTML(() => (
+
+ ));
- return (
-
-
-
-
- {children}
-
-
-
-
- );
+ return (
+
+
+
+
+
+ {children}
+ {/*
+ */}
+
+
+
+
+ );
}
diff --git a/src/app/fun/my_console.ts b/src/app/fun/my_console.ts
new file mode 100644
index 00000000..c6dd9398
--- /dev/null
+++ b/src/app/fun/my_console.ts
@@ -0,0 +1,6 @@
+export function myConsole(value: any) {
+ const onData = false
+ if (onData) {
+ console.log(value);
+ }
+}
diff --git a/src/app/fun/rondom_otp.ts b/src/app/fun/rondom_otp.ts
new file mode 100644
index 00000000..4c578b23
--- /dev/null
+++ b/src/app/fun/rondom_otp.ts
@@ -0,0 +1,4 @@
+export function randomOTP(){
+ const random = Math.floor(Math.random() * (9000 - 1000 )) + 1000
+ return random;
+}
\ No newline at end of file
diff --git a/src/app/lib/api.ts b/src/app/lib/api.ts
new file mode 100644
index 00000000..48812758
--- /dev/null
+++ b/src/app/lib/api.ts
@@ -0,0 +1,20 @@
+export const ApiHipmi = {
+ // Get one token
+ get_token: "/api/user/get-token",
+ // Auth
+ login: "/api/auth/login",
+ validasi: "/api/auth/validasi",
+ register: "/api/auth/register",
+ logout: "/api/auth/logout",
+
+ //Profile
+ create_profile: "/api/profile/create",
+ edit_profile: "/api/profile/edit",
+ get_foto: "/api/profile/foto/",
+
+ //Portofolio
+ create_portofolio: "/api/portofolio/create",
+
+ //Investasi
+ get_gambar_investasi: "/api/investasi/gambar"
+};
diff --git a/src/app/lib/prisma.ts b/src/app/lib/prisma.ts
new file mode 100644
index 00000000..553b19ad
--- /dev/null
+++ b/src/app/lib/prisma.ts
@@ -0,0 +1,17 @@
+import { PrismaClient } from '@prisma/client'
+
+const prismaClientSingleton = () => {
+ return new PrismaClient()
+}
+
+type PrismaClientSingleton = ReturnType
+
+const globalForPrisma = globalThis as unknown as {
+ prisma: PrismaClientSingleton | undefined
+}
+
+const prisma = globalForPrisma.prisma ?? prismaClientSingleton()
+
+export default prisma
+
+if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma
\ No newline at end of file
diff --git a/src/app/lib/router_hipmi/router_admin.ts b/src/app/lib/router_hipmi/router_admin.ts
new file mode 100644
index 00000000..53f1b257
--- /dev/null
+++ b/src/app/lib/router_hipmi/router_admin.ts
@@ -0,0 +1,34 @@
+export const RouterAdminDashboard = {
+ main_admin: "/dev/admin/main/dashboard",
+ splash_admin: "/dev/splash/admin",
+};
+
+export const RouterAdminInvestasi = {
+ 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 = {
+ 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/",
+
+
+};
+
+export const RouterAdminAward = {
+ main_award: "/dev/admin/award/main",
+};
diff --git a/src/app/lib/router_hipmi/router_crowd.ts b/src/app/lib/router_hipmi/router_crowd.ts
new file mode 100644
index 00000000..a710e040
--- /dev/null
+++ b/src/app/lib/router_hipmi/router_crowd.ts
@@ -0,0 +1,5 @@
+export const RouterCrowd = {
+ main: "/dev/crowd/main",
+ investasi: "/dev/investasi/main",
+ donasi: "/dev/donasi/main/beranda"
+}
\ No newline at end of file
diff --git a/src/app/lib/router_hipmi/router_donasi.ts b/src/app/lib/router_hipmi/router_donasi.ts
new file mode 100644
index 00000000..77a4f91a
--- /dev/null
+++ b/src/app/lib/router_hipmi/router_donasi.ts
@@ -0,0 +1,42 @@
+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/",
+
+ //main
+ main_beranda: "/dev/donasi/main/beranda",
+ main_galang_dana: "/dev/donasi/main/galang_dana",
+ main_donasi_saya: "/dev/donasi/main/donasi_saya",
+
+ // create
+ create: "/dev/donasi/create",
+ create_cerita_penggalang: "/dev/donasi/create/cerita_penggalang/",
+
+ // edit
+ update_kabar: "/dev/donasi/edit/update_kabar",
+ edit_donasi: "/dev/donasi/edit/edit_donasi/",
+ edit_cerita_penggalang: "/dev/donasi/edit/edit_cerita/",
+
+ //pop up
+ page_pop_up_create: "/dev/donasi/page_pop_up/create",
+
+ //detail
+ detail_main: "/dev/donasi/detail/detail_main",
+ detail_kabar: "/dev/donasi/detail/detail_kabar",
+ detail_publish: "/dev/donasi/detail/detail_publish",
+ detail_review: "/dev/donasi/detail/detail_review/",
+ detail_draft: "/dev/donasi/detail/detail_draft/",
+ detail_reject: "/dev/donasi/detail/detail_reject",
+ detail_donasi_saya: "/dev/donasi/detail/detail_donasi_saya",
+
+ //alur donasi
+ masukan_donasi: "/dev/donasi/masukan_donasi",
+ donatur: "/dev/donasi/donatur",
+ kabar: "/dev/donasi/kabar",
+ pencairan_dana: "/dev/donasi/pencairan_dana",
+ penggalang_dana: "/dev/donasi/penggalang_dana",
+ cerita_penggalang: "/dev/donasi/cerita_penggalang/",
+ list_kabar: "/dev/donasi/list_kabar",
+};
diff --git a/src/app/lib/router_hipmi/router_home.ts b/src/app/lib/router_hipmi/router_home.ts
new file mode 100644
index 00000000..b38c64f1
--- /dev/null
+++ b/src/app/lib/router_hipmi/router_home.ts
@@ -0,0 +1,3 @@
+export const RouterHome = {
+ main_home: "/dev/home"
+}
\ No newline at end of file
diff --git a/src/app/lib/router_hipmi/router_investasi.ts b/src/app/lib/router_hipmi/router_investasi.ts
new file mode 100644
index 00000000..35d57616
--- /dev/null
+++ b/src/app/lib/router_hipmi/router_investasi.ts
@@ -0,0 +1,55 @@
+export const RouterInvestasi = {
+ 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",
+ 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
+ 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/",
+};
diff --git a/src/app/lib/router_hipmi/router_user_profile.ts b/src/app/lib/router_hipmi/router_user_profile.ts
new file mode 100644
index 00000000..58271653
--- /dev/null
+++ b/src/app/lib/router_hipmi/router_user_profile.ts
@@ -0,0 +1,3 @@
+export const RouterUserProfile = {
+ api_foto: "/api/profile/foto/",
+};
diff --git a/src/app/lib/warna.ts b/src/app/lib/warna.ts
new file mode 100644
index 00000000..537457ba
--- /dev/null
+++ b/src/app/lib/warna.ts
@@ -0,0 +1,10 @@
+export const Warna = {
+ hijau_tua: "#297646",
+ hijau_muda: "#3da18d",
+ hijau_cerah: "#42c748",
+ kuning: "#fed630",
+ biru: "#3175b1",
+ merah: "#DE2E2D",
+ hitam: "#121517",
+ };
+
\ No newline at end of file
diff --git a/src/app/makuro/_server/makuro_test.ts b/src/app/makuro/_server/makuro_test.ts
new file mode 100644
index 00000000..4f5b3010
--- /dev/null
+++ b/src/app/makuro/_server/makuro_test.ts
@@ -0,0 +1,4 @@
+'use server'
+export default async function makuro_test() {
+ console.log("ini diserver")
+}
\ No newline at end of file
diff --git a/src/app/makuro/_server/makuro_view.tsx b/src/app/makuro/_server/makuro_view.tsx
new file mode 100644
index 00000000..7e222d27
--- /dev/null
+++ b/src/app/makuro/_server/makuro_view.tsx
@@ -0,0 +1,13 @@
+'use client'
+
+import { Button } from "@mantine/core";
+import makuro_test from "./makuro_test";
+
+export default function ViewMakuro() {
+
+ return <>
+ makuro_test()}
+ >Tekan Aja
+ >
+}
\ No newline at end of file
diff --git a/src/app/makuro/page.tsx b/src/app/makuro/page.tsx
new file mode 100644
index 00000000..07482089
--- /dev/null
+++ b/src/app/makuro/page.tsx
@@ -0,0 +1,8 @@
+import { Text } from "@mantine/core";
+import ViewMakuro from "./_server/makuro_view";
+
+export default function Page() {
+ return <>
+
+ >
+}
\ No newline at end of file
diff --git a/src/app/page.tsx b/src/app/page.tsx
index 21cfd5c9..76e0c4f4 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -1,7 +1,7 @@
+import { SplashScreen } from "@/app_modules/auth";
import { redirect } from "next/navigation";
-
+import PageSplash from "./dev/auth/splash/page";
export default async function Page() {
-
- return redirect("/dev/auth/splash")
+ return
}
diff --git a/src/app/zCoba/page.tsx b/src/app/zCoba/page.tsx
new file mode 100644
index 00000000..5778dd02
--- /dev/null
+++ b/src/app/zCoba/page.tsx
@@ -0,0 +1,19 @@
+"use client";
+
+import { NotifPeringatan } from "@/app_modules/donasi/component/notifikasi/notif_peringatan";
+import { Box, Button, Group } from "@mantine/core";
+import { notifications } from "@mantine/notifications";
+
+export default function Coba() {
+ return (
+ <>
+
+
+ NotifPeringatan("Coba")}>
+ Show notification
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/admin/award/index.tsx b/src/app_modules/admin/award/index.tsx
new file mode 100644
index 00000000..77fc8bc2
--- /dev/null
+++ b/src/app_modules/admin/award/index.tsx
@@ -0,0 +1,3 @@
+import Admin_Award from "./main";
+
+export {Admin_Award}
\ No newline at end of file
diff --git a/src/app_modules/admin/award/main.tsx b/src/app_modules/admin/award/main.tsx
new file mode 100644
index 00000000..9dbebbf7
--- /dev/null
+++ b/src/app_modules/admin/award/main.tsx
@@ -0,0 +1,15 @@
+"use client"
+
+import { Divider, Stack, Title } from "@mantine/core"
+
+export default function Admin_Award(){
+ return<>
+
+ Award
+
+
+ Cooming Soon !!
+
+
+ >
+}
\ No newline at end of file
diff --git a/src/app_modules/admin/donasi/component/tombol_kembali.tsx b/src/app_modules/admin/donasi/component/tombol_kembali.tsx
new file mode 100644
index 00000000..44139fb1
--- /dev/null
+++ b/src/app_modules/admin/donasi/component/tombol_kembali.tsx
@@ -0,0 +1,23 @@
+"use client";
+
+import { Group, Button } from "@mantine/core";
+import { IconChevronLeft } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+
+export default function AdminDonasi_TombolKembali() {
+ const router = useRouter();
+ return (
+ <>
+
+ }
+ variant="white"
+ onClick={() => router.back()}
+ >
+ Kembali
+
+
+ >
+ );
+}
diff --git a/src/app_modules/admin/donasi/detail_table/detail_publish.tsx b/src/app_modules/admin/donasi/detail_table/detail_publish.tsx
new file mode 100644
index 00000000..18d35002
--- /dev/null
+++ b/src/app_modules/admin/donasi/detail_table/detail_publish.tsx
@@ -0,0 +1,159 @@
+"use client";
+
+import {
+ AspectRatio,
+ Box,
+ Divider,
+ Grid,
+ Group,
+ Image,
+ Pagination,
+ Paper,
+ Progress,
+ ScrollArea,
+ SimpleGrid,
+ Stack,
+ Table,
+ Text,
+ Title,
+} from "@mantine/core";
+import AdminDonasi_TombolKembali from "../component/tombol_kembali";
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import {
+ IconClover,
+ IconMessageChatbot,
+ IconMoneybag,
+} from "@tabler/icons-react";
+import router from "next/router";
+import moment from "moment";
+
+export default function AdminDonasi_DetailPublish() {
+ return (
+ <>
+
+
+
+
+
+
+
+ >
+ );
+}
+
+function TampilanDetailDonasi() {
+ return (
+ <>
+
+
+
+
+
+
+
+
+ Judul Donasi
+
+
+
+ Dana dibutuhkan
+
+ Rp. 50.000.000
+
+
+
+ Sisa hari{" "}
+
+ 100
+ {" "}
+
+
+
+
+ {/*
+ router.push(RouterDonasi.donatur)}
+ >
+
+
+
+ 50
+
+ Donatur
+
+
+
+ router.push(RouterDonasi.kabar)}
+ >
+
+
+ Kabar Terbaru
+
+
+
+ router.push(RouterDonasi.pencairan_dana)}
+ >
+
+
+ Pencairan Dana
+
+
+ */}
+
+
+
+ >
+ );
+}
+
+function TampilanListDonatur() {
+ const tableRows = Array(10)
+ .fill(0)
+ .map((e, i) => (
+
+ User {`${i + 1}`}
+
+ Rp.{" "}
+ {`${new Intl.NumberFormat("id-ID", {
+ maximumFractionDigits: 10,
+ }).format(i + 100000)}`}
+
+ {`${moment(Date.now()).format("ll")}`}
+
+ ));
+
+ return (
+ <>
+
+
+ List Donatur
+
+
+
+
+ Nama
+ Jumlah Donasi
+ Tanggal Donasi
+
+
+ {tableRows}
+
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/admin/donasi/detail_table/detail_reject.tsx b/src/app_modules/admin/donasi/detail_table/detail_reject.tsx
new file mode 100644
index 00000000..f9e34956
--- /dev/null
+++ b/src/app_modules/admin/donasi/detail_table/detail_reject.tsx
@@ -0,0 +1,18 @@
+"use client";
+
+import { Button, Stack, Text } from "@mantine/core";
+
+export default function AdminDonasi_DetailReject({
+ closeModal,
+}: {
+ closeModal: any;
+}) {
+ return (
+ <>
+
+ Cooming Soon
+ closeModal()}>close
+
+ >
+ );
+}
diff --git a/src/app_modules/admin/donasi/detail_table/detail_review.tsx b/src/app_modules/admin/donasi/detail_table/detail_review.tsx
new file mode 100644
index 00000000..d8ce9e63
--- /dev/null
+++ b/src/app_modules/admin/donasi/detail_table/detail_review.tsx
@@ -0,0 +1,206 @@
+"use client";
+
+import {
+ AspectRatio,
+ Button,
+ Divider,
+ Group,
+ Image,
+ Modal,
+ Paper,
+ Progress,
+ SimpleGrid,
+ Stack,
+ Text,
+ TextInput,
+ Textarea,
+ Title,
+} from "@mantine/core";
+import AdminDonasi_TombolKembali from "../component/tombol_kembali";
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah";
+import {
+ MODEL_CERITA_DONASI,
+ MODEL_DONASI,
+} from "@/app_modules/donasi/model/interface";
+import { useState } from "react";
+import { useRouter } from "next/navigation";
+import { useDisclosure } from "@mantine/hooks";
+import { AdminDonasi_funUpdateStatusPublish } from "../fun/update/fun_status_publish";
+import { NotifBerhasil } from "@/app_modules/donasi/component/notifikasi/notif_berhasil";
+import { NotifPeringatan } from "@/app_modules/donasi/component/notifikasi/notif_peringatan";
+import toast from "react-simple-toasts";
+import { AdminDonasi_funUpdateStatusReject } from "../fun/update/fun_status_reject";
+import _ from "lodash";
+import { NotifGagal } from "@/app_modules/donasi/component/notifikasi/notif_gagal";
+
+export default function AdminDonasi_DetailReview({
+ dataReview,
+}: {
+ dataReview: MODEL_DONASI;
+}) {
+ const [donasi, setDonasi] = useState(dataReview);
+ return (
+ <>
+
+
+
+
+
+
+
+ >
+ );
+}
+
+function ButtonOnHeader({ donasi }: { donasi: MODEL_DONASI }) {
+ const router = useRouter();
+ const [opened, { open, close }] = useDisclosure(false);
+ const [catatan, setCatatan] = useState("");
+
+ async function onPulish() {
+ await AdminDonasi_funUpdateStatusPublish(donasi.id, "1").then((res) => {
+ if (res.status === 200) {
+ NotifBerhasil("Berhasil Mengubah Status Donasi");
+ router.back();
+ } else {
+ NotifPeringatan("Gagal Mengubah Status Donasi");
+ }
+ });
+ }
+
+ async function onReject() {
+ if (catatan === "") return NotifPeringatan("Lengkapi Alasan Penolakan");
+
+ await AdminDonasi_funUpdateStatusReject(donasi.id, "4", catatan).then(
+ (res) => {
+ if (res.status === 200) {
+ NotifBerhasil(res.message);
+ router.back()
+ } else {
+ NotifGagal(res.message);
+ }
+ }
+ );
+ }
+
+ return (
+ <>
+
+
+
+ onPulish()}
+ >
+ Publish
+
+
+ Reject
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
+
+function TampilanDetailDonasi({ donasi }: { donasi: MODEL_DONASI }) {
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+ {donasi.title}
+
+ Durasi: {donasi.DonasiMaster_Durasi.name} hari
+
+
+
+
+
+ Dana dibutuhkan
+
+
+
+
+
+ Kategori
+
+ {donasi.DonasiMaster_Ketegori.name}
+
+
+
+
+
+
+ >
+ );
+}
+
+function CeritaPenggalangDana({ cerita }: { cerita: MODEL_CERITA_DONASI }) {
+ return (
+ <>
+
+ Cerita Penggalang Dana
+ {cerita.pembukaan}
+
+
+
+
+
+ {cerita.cerita}
+
+ >
+ );
+}
diff --git a/src/app_modules/admin/donasi/fun/count/fun_count_donasi_by_status.ts b/src/app_modules/admin/donasi/fun/count/fun_count_donasi_by_status.ts
new file mode 100644
index 00000000..0278d09a
--- /dev/null
+++ b/src/app_modules/admin/donasi/fun/count/fun_count_donasi_by_status.ts
@@ -0,0 +1,50 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+/**
+ *
+ * @param status | string > 1 - 4
+ * @returns jumlah dari donasi per status
+ */
+export default async function AdminDonasi_funCountByStatus(status: string) {
+ if (status === "1") {
+ const count = await prisma.donasi.count({
+ where: {
+ donasiMaster_StatusDonasiId: "1",
+ },
+ });
+ return count;
+ }
+ if (status === "2") {
+ const count = await prisma.donasi.count({
+ where: {
+ donasiMaster_StatusDonasiId: "2",
+ },
+ });
+ return count;
+ }
+ if (status === "3") {
+ const count = await prisma.donasi.count({
+ where: {
+ donasiMaster_StatusDonasiId: "3",
+ },
+ });
+ return count;
+ }
+ if (status === "4") {
+ const count = await prisma.donasi.count({
+ where: {
+ donasiMaster_StatusDonasiId: "4",
+ },
+ });
+ return count;
+ }
+ if (status === undefined || status === null) {
+
+ return {
+ status: 400,
+ message: "Parameter tidak sesuai"
+ }
+ }
+}
diff --git a/src/app_modules/admin/donasi/fun/get/get_donasi_by_status.ts b/src/app_modules/admin/donasi/fun/get/get_donasi_by_status.ts
new file mode 100644
index 00000000..7017c7f9
--- /dev/null
+++ b/src/app_modules/admin/donasi/fun/get/get_donasi_by_status.ts
@@ -0,0 +1,109 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+export async function AdminDonasi_getByStatus(status: string) {
+ if (status === "1") {
+ const getReview = await prisma.donasi.findMany({
+ where: {
+ donasiMaster_StatusDonasiId: "1",
+ },
+ select: {
+ id: true,
+ title: true,
+ target: true,
+ active: true,
+ createdAt: true,
+ updatedAt: true,
+ publishTime: true,
+ authorId: true,
+ imagesId: true,
+ donasiMaster_KategoriId: true,
+ donasiMaster_DurasiId: true,
+ donasiMaster_StatusDonasiId: true,
+ Author: true,
+ imageDonasi: true,
+ CeritaDonasi: true,
+ DonasiMaster_Ketegori: true,
+ DonasiMaster_Durasi: true,
+ DonasiMaster_Status: true,
+ },
+ });
+ return getReview;
+ }
+
+ if (status === "2") {
+ const getReview = await prisma.donasi.findMany({
+ where: {
+ donasiMaster_StatusDonasiId: "2",
+ },
+ select: {
+ id: true,
+ title: true,
+ target: true,
+ active: true,
+ createdAt: true,
+ updatedAt: true,
+ publishTime: true,
+ authorId: true,
+ imagesId: true,
+ donasiMaster_KategoriId: true,
+ donasiMaster_DurasiId: true,
+ donasiMaster_StatusDonasiId: true,
+ Author: true,
+ imageDonasi: true,
+ CeritaDonasi: true,
+ DonasiMaster_Ketegori: true,
+ DonasiMaster_Durasi: true,
+ DonasiMaster_Status: true,
+ },
+ });
+ return getReview;
+ }
+
+ if (status === "3") {
+ const getReview = await prisma.donasi.findMany({
+ where: {
+ donasiMaster_StatusDonasiId: "3",
+ },
+ });
+ return getReview;
+ }
+
+ if (status === "4") {
+ const getReview = await prisma.donasi.findMany({
+ where: {
+ donasiMaster_StatusDonasiId: "4",
+ },
+ select: {
+ id: true,
+ title: true,
+ target: true,
+ active: true,
+ createdAt: true,
+ updatedAt: true,
+ publishTime: true,
+ catatan: true,
+ authorId: true,
+ imagesId: true,
+ donasiMaster_KategoriId: true,
+ donasiMaster_DurasiId: true,
+ donasiMaster_StatusDonasiId: true,
+ Author: true,
+ imageDonasi: true,
+ CeritaDonasi: true,
+ DonasiMaster_Ketegori: true,
+ DonasiMaster_Durasi: true,
+ DonasiMaster_Status: true,
+ },
+ });
+ return getReview;
+ }
+
+ if (status === undefined) {
+ return {
+ status: 400,
+ message: "Not Found",
+ };
+ }
+}
diff --git a/src/app_modules/admin/donasi/fun/get/get_one_by_id.ts b/src/app_modules/admin/donasi/fun/get/get_one_by_id.ts
new file mode 100644
index 00000000..3c27247b
--- /dev/null
+++ b/src/app_modules/admin/donasi/fun/get/get_one_by_id.ts
@@ -0,0 +1,32 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+export async function AdminDonasi_getById(id: string) {
+ const res = await prisma.donasi.findFirst({
+ where: {
+ id: id,
+ },
+ select: {
+ id: true,
+ title: true,
+ target: true,
+ active: true,
+ createdAt: true,
+ updatedAt: true,
+ publishTime: true,
+ authorId: true,
+ imagesId: true,
+ donasiMaster_KategoriId: true,
+ donasiMaster_DurasiId: true,
+ donasiMaster_StatusDonasiId: true,
+ Author: true,
+ imageDonasi: true,
+ CeritaDonasi: true,
+ DonasiMaster_Ketegori: true,
+ DonasiMaster_Durasi: true,
+ DonasiMaster_Status: true,
+ },
+ });
+ return res;
+}
diff --git a/src/app_modules/admin/donasi/fun/update/fun_status_publish.ts b/src/app_modules/admin/donasi/fun/update/fun_status_publish.ts
new file mode 100644
index 00000000..c0705449
--- /dev/null
+++ b/src/app_modules/admin/donasi/fun/update/fun_status_publish.ts
@@ -0,0 +1,30 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import { RouterAdminDonasi } from "@/app/lib/router_hipmi/router_admin";
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import { revalidatePath } from "next/cache";
+
+export async function AdminDonasi_funUpdateStatusPublish(
+ donasiId: string,
+ statusId: string
+) {
+ const publishTime = Date.now();
+
+ const data = await prisma.donasi.update({
+ where: {
+ id: donasiId,
+ },
+ data: {
+ donasiMaster_StatusDonasiId: statusId,
+ publishTime: new Date(publishTime),
+ },
+ });
+
+ if (!data) return { status: 400, message: "Data tidak ditemukan" };
+ revalidatePath(RouterAdminDonasi.table_review);
+ return {
+ status: 200,
+ message: "Status berhasil diganti",
+ };
+}
diff --git a/src/app_modules/admin/donasi/fun/update/fun_status_reject.ts b/src/app_modules/admin/donasi/fun/update/fun_status_reject.ts
new file mode 100644
index 00000000..d96c54e2
--- /dev/null
+++ b/src/app_modules/admin/donasi/fun/update/fun_status_reject.ts
@@ -0,0 +1,30 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import { RouterAdminDonasi } from "@/app/lib/router_hipmi/router_admin";
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import { revalidatePath } from "next/cache";
+
+export async function AdminDonasi_funUpdateStatusReject(
+ donasiId: string,
+ statusId: string,
+ catatan: string
+) {
+
+ const data = await prisma.donasi.update({
+ where: {
+ id: donasiId,
+ },
+ data: {
+ donasiMaster_StatusDonasiId: statusId,
+ catatan: catatan
+ },
+ });
+
+ if (!data) return { status: 400, message: "Data tidak ditemukan" };
+ revalidatePath(RouterAdminDonasi.table_review);
+ return {
+ status: 200,
+ message: "Status berhasil diganti",
+ };
+}
diff --git a/src/app_modules/admin/donasi/index.tsx b/src/app_modules/admin/donasi/index.tsx
new file mode 100644
index 00000000..0f323869
--- /dev/null
+++ b/src/app_modules/admin/donasi/index.tsx
@@ -0,0 +1,17 @@
+import AdminDonasi_Main from "./main";
+import AdminDonasi_TablePublish from "./table_status/table_publish";
+import AdminDonasi_DetailPublish from "./detail_table/detail_publish";
+import AdminDonasi_TableReview from "./table_status/table_review";
+import AdminDonasi_DetailReview from "./detail_table/detail_review";
+import AdminDonasi_TableReject from "./table_status/table_reject";
+import AdminDonasi_DetailReject from "./detail_table/detail_reject";
+
+export {
+ AdminDonasi_Main,
+ AdminDonasi_TablePublish,
+ AdminDonasi_DetailPublish,
+ AdminDonasi_TableReview,
+ AdminDonasi_TableReject,
+ AdminDonasi_DetailReview,
+ AdminDonasi_DetailReject,
+};
diff --git a/src/app_modules/admin/donasi/main/index.tsx b/src/app_modules/admin/donasi/main/index.tsx
new file mode 100644
index 00000000..3f496f1e
--- /dev/null
+++ b/src/app_modules/admin/donasi/main/index.tsx
@@ -0,0 +1,105 @@
+"use client";
+
+import { RouterAdminDonasi } from "@/app/lib/router_hipmi/router_admin";
+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";
+
+export default function AdminDonasi_Main({
+ countPublish,
+ countReview,
+ countDraft,
+ countReject,
+}: {
+ countPublish: number;
+ countReview: number;
+ countDraft: number;
+ countReject: number;
+}) {
+ const router = useRouter();
+ const listBox = [
+ {
+ id: 1,
+ name: "Publish",
+ jumlah: countPublish,
+ link: RouterAdminDonasi.table_publish,
+ color: "green",
+ },
+ {
+ id: 2,
+ name: "Review",
+ jumlah: countReview,
+ link: RouterAdminDonasi.table_review,
+ color: "orange",
+ },
+ {
+ id: 3,
+ name: "Draft",
+ jumlah: countDraft,
+ link: "",
+ color: "yellow",
+ },
+ {
+ id: 4,
+ name: "Reject",
+ jumlah: countReject,
+ link: RouterAdminDonasi.table_reject,
+ color: "red",
+ },
+ ];
+ return (
+ <>
+
+ Donasi
+
+
+ {listBox.map((e, i) => (
+
+
+
+
+ {e.name}
+ {e.jumlah}
+
+ {e.link !== "" ? (
+ router.push(e.link)}>
+ {" "}
+
+
+ ) : (
+
+ )}
+
+
+ ))}
+
+
+ >
+ );
+}
diff --git a/src/app_modules/admin/donasi/table_status/table_publish.tsx b/src/app_modules/admin/donasi/table_status/table_publish.tsx
new file mode 100644
index 00000000..37a32dd9
--- /dev/null
+++ b/src/app_modules/admin/donasi/table_status/table_publish.tsx
@@ -0,0 +1,99 @@
+"use client";
+
+import { RouterAdminDonasi } from "@/app/lib/router_hipmi/router_admin";
+import {
+ ActionIcon,
+ Box,
+ Button,
+ Center,
+ Group,
+ Stack,
+ Table,
+ Text,
+ Title,
+} from "@mantine/core";
+import { IconChevronLeft, IconEyeCheck } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import AdminDonasi_TombolKembali from "../component/tombol_kembali";
+import { MODEL_DONASI } from "@/app_modules/donasi/model/interface";
+import { useState } from "react";
+import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah";
+
+export default function AdminDonasi_TablePublish({
+ listPublish,
+}: {
+ listPublish: MODEL_DONASI;
+}) {
+ return (
+ <>
+
+
+
+
+ >
+ );
+}
+
+function TableStatus({ listPublish }: { listPublish: MODEL_DONASI[] }) {
+ const router = useRouter();
+ const [donasi, setDonasi] = useState(listPublish);
+ async function onClick() {
+ router.push(RouterAdminDonasi.detail_publish);
+ }
+
+ const TableRows = donasi.map((e, i) => (
+
+ {e.title}
+
+
+
+ {e.DonasiMaster_Ketegori.name}
+ {e.DonasiMaster_Durasi.name} hari
+
+
+ }
+ radius={"xl"}
+ variant="outline"
+ onClick={onClick}
+ >
+ Tampilkan
+
+
+
+
+ ));
+
+ return (
+ <>
+
+
+
+ PUBLISH
+
+
+
+
+
+ Judul
+ Target
+ Ketegori
+ Durasi
+ Aksi
+
+
+ {TableRows}
+
+
+ >
+ );
+}
diff --git a/src/app_modules/admin/donasi/table_status/table_reject.tsx b/src/app_modules/admin/donasi/table_status/table_reject.tsx
new file mode 100644
index 00000000..00212fee
--- /dev/null
+++ b/src/app_modules/admin/donasi/table_status/table_reject.tsx
@@ -0,0 +1,118 @@
+"use client";
+
+import { RouterAdminDonasi } from "@/app/lib/router_hipmi/router_admin";
+import {
+ ActionIcon,
+ Box,
+ Button,
+ Center,
+ Group,
+ Modal,
+ Stack,
+ Table,
+ Text,
+ Title,
+} from "@mantine/core";
+import { IconChevronLeft, IconEyeCheck } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import AdminDonasi_TombolKembali from "../component/tombol_kembali";
+import { useDisclosure } from "@mantine/hooks";
+import AdminDonasi_DetailReview from "../detail_table/detail_review";
+import { MODEL_DONASI } from "@/app_modules/donasi/model/interface";
+import { useState } from "react";
+import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah";
+
+export default function AdminDonasi_TableReject({
+ dataReject,
+}: {
+ dataReject: MODEL_DONASI[];
+}) {
+ return (
+ <>
+
+
+
+
+ >
+ );
+}
+
+function TableStatus({ dataReject }: { dataReject: MODEL_DONASI[] }) {
+ const router = useRouter();
+ const [opened, { open, close }] = useDisclosure(false);
+ const [donasi, setDonasi] = useState(dataReject);
+
+ function onClick() {
+ return (
+
+
+ Alasan penolakan
+ {"test"}
+
+
+ );
+ }
+
+ const TableRows = donasi.map((e, i) => (
+
+ {e.title}
+
+
+
+ {e.DonasiMaster_Ketegori.name}
+ {e.DonasiMaster_Durasi.name} hari
+ {e.catatan}
+
+
+ }
+ radius={"xl"}
+ variant="outline"
+ onClick={() => {
+ onClick()
+ // onClick(e.catatan);
+ }}
+ >
+ Tampilkan
+
+
+
+
+ ));
+
+ return (
+ <>
+
+
+
+ REJECT
+
+
+
+
+
+ Judul
+ Target
+ Ketegori
+ Durasi
+ Catatan
+
+ Lihat alasan
+
+
+
+ {TableRows}
+
+
+ >
+ );
+}
diff --git a/src/app_modules/admin/donasi/table_status/table_review.tsx b/src/app_modules/admin/donasi/table_status/table_review.tsx
new file mode 100644
index 00000000..c55a8cb7
--- /dev/null
+++ b/src/app_modules/admin/donasi/table_status/table_review.tsx
@@ -0,0 +1,108 @@
+"use client";
+
+import { RouterAdminDonasi } from "@/app/lib/router_hipmi/router_admin";
+import {
+ ActionIcon,
+ Box,
+ Button,
+ Center,
+ Group,
+ Modal,
+ Stack,
+ Table,
+ Text,
+ Title,
+} from "@mantine/core";
+import { IconChevronLeft, IconEyeCheck } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import AdminDonasi_TombolKembali from "../component/tombol_kembali";
+import { useDisclosure } from "@mantine/hooks";
+import AdminDonasi_DetailReview from "../detail_table/detail_review";
+import { MODEL_DONASI } from "@/app_modules/donasi/model/interface";
+import { useState } from "react";
+import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah";
+
+export default function AdminDonasi_TableReview({
+ listReview,
+}: {
+ listReview: MODEL_DONASI[];
+}) {
+ return (
+ <>
+
+
+
+
+ >
+ );
+}
+
+function TableStatus({ listReview }: { listReview: MODEL_DONASI[] }) {
+ const router = useRouter();
+ const [opened, { open, close }] = useDisclosure(false);
+ const [donasi, setDonasi] = useState(listReview);
+
+ async function onClick() {
+ // router.push(RouterAdminDonasi.detail_publish);
+ }
+
+ const TableRows = donasi.map((e, i) => (
+
+ {e.title}
+
+
+
+ {e.DonasiMaster_Ketegori.name}
+ {e.DonasiMaster_Durasi.name} hari
+
+
+ }
+ radius={"xl"}
+ variant="outline"
+ onClick={() => router.push(RouterAdminDonasi.detail_review + `${e.id}`)}
+ >
+ Tampilkan
+
+
+
+
+ ));
+
+ return (
+ <>
+
+
+
+ REVIEW
+
+
+
+
+
+ Judul
+ Target
+ Ketegori
+ Durasi
+
+ Aksi
+
+
+
+ {TableRows}
+
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/admin/investasi/bukti_transfer/layout.tsx b/src/app_modules/admin/investasi/bukti_transfer/layout.tsx
new file mode 100644
index 00000000..4e653c2d
--- /dev/null
+++ b/src/app_modules/admin/investasi/bukti_transfer/layout.tsx
@@ -0,0 +1,19 @@
+"use client";
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { AppShell } from "@mantine/core";
+import React from "react";
+
+export default function Admin_LayoutBuktiTransferInvestasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ }>
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/admin/investasi/bukti_transfer/view.tsx b/src/app_modules/admin/investasi/bukti_transfer/view.tsx
new file mode 100644
index 00000000..75127ec8
--- /dev/null
+++ b/src/app_modules/admin/investasi/bukti_transfer/view.tsx
@@ -0,0 +1,57 @@
+"use client";
+
+import { RouterAdminInvestasi } from "@/app/lib/router_hipmi/router_admin";
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import {
+ Avatar,
+ Badge,
+ Grid,
+ Group,
+ Paper,
+ Text,
+ ThemeIcon,
+ Title,
+} from "@mantine/core";
+import { IconChevronRight } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+
+export default function Admin_BuktiTransferInvestasi() {
+ const router = useRouter()
+ const listUsername = [
+ {
+ id: 1,
+ },
+ {
+ id: 2,
+ },
+ {
+ id: 3,
+ },
+ {
+ id: 4,
+ },
+ {
+ id: 5,
+ },
+ {
+ id: 6,
+ },
+ ];
+ return (
+ <>
+ {/* Box Username */}
+ {listUsername.map((e) => (
+ router.push(RouterAdminInvestasi.status_transfer)}>
+
+
+ Username
+
+
+ Status Transfer
+
+
+
+ ))}
+ >
+ );
+}
diff --git a/src/app_modules/admin/investasi/fun/count_status.ts b/src/app_modules/admin/investasi/fun/count_status.ts
new file mode 100644
index 00000000..22fe1409
--- /dev/null
+++ b/src/app_modules/admin/investasi/fun/count_status.ts
@@ -0,0 +1,65 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import _ from "lodash";
+
+/**
+ *
+ * @param id
+ *
+ * @type number
+ * @returns count of status investasi
+ */
+export default async function Admin_CountStatusInvestasi(id: number) {
+ if (id === 1) {
+ const count = await prisma.investasi.count({
+ where: {
+ MasterStatusInvestasi: {
+ name: {
+ equals: "Draft",
+ },
+ },
+ },
+ });
+ return count;
+ }
+
+ if (id === 2) {
+ const count = await prisma.investasi.count({
+ where: {
+ MasterStatusInvestasi: {
+ name: {
+ equals: "Review",
+ },
+ },
+ },
+ });
+ return count;
+ }
+
+ if (id === 3) {
+ const count = await prisma.investasi.count({
+ where: {
+ MasterStatusInvestasi: {
+ name: {
+ equals: "Publish",
+ },
+ },
+ },
+ });
+ return count;
+ }
+
+ if (id === 4) {
+ const count = await prisma.investasi.count({
+ where: {
+ MasterStatusInvestasi: {
+ name: {
+ equals: "Reject",
+ },
+ },
+ },
+ });
+ return count;
+ }
+}
diff --git a/src/app_modules/admin/investasi/fun/fun_reject_investasi.ts b/src/app_modules/admin/investasi/fun/fun_reject_investasi.ts
new file mode 100644
index 00000000..00a60faa
--- /dev/null
+++ b/src/app_modules/admin/investasi/fun/fun_reject_investasi.ts
@@ -0,0 +1,26 @@
+"use server"
+
+import prisma from "@/app/lib/prisma"
+import { RouterAdminInvestasi } from "@/app/lib/router_hipmi/router_admin"
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi"
+import { revalidatePath } from "next/cache"
+
+export default async function Admin_funRejectInvestasi(data: any) {
+ // console.log(data)
+
+ const res = await prisma.investasi.update({
+ where: { id: data.id },
+ data: {
+ masterStatusInvestasiId: data.status,
+ catatan: data.catatan
+ }
+ })
+ if(!res) return {status: 400, message: "Gagal reject"}
+
+ revalidatePath(RouterAdminInvestasi.main_investasi)
+
+ return {
+ status: 200,
+ message: "Reject berhasil"
+ }
+}
\ No newline at end of file
diff --git a/src/app_modules/admin/investasi/fun/get_all_investasi.ts b/src/app_modules/admin/investasi/fun/get_all_investasi.ts
new file mode 100644
index 00000000..69504d5c
--- /dev/null
+++ b/src/app_modules/admin/investasi/fun/get_all_investasi.ts
@@ -0,0 +1,39 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+export default async function Admin_funGetAllInvestasi() {
+ const res = await prisma.investasi.findMany({
+ where: {
+ MasterStatusInvestasi: {
+ name: {
+ not: "Draft",
+ },
+ },
+ },
+ select: {
+ id: true,
+ title: true,
+ authorId: true,
+ hargaLembar: true,
+ targetDana: true,
+ totalLembar: true,
+ roi: true,
+ active: true,
+ imagesId: true,
+ catatan: true,
+ MasterStatusInvestasi: true,
+ BeritaInvestasi: true,
+ DokumenInvestasi: true,
+ ProspektusInvestasi: true,
+ MasterPembagianDeviden: true,
+ MasterPencarianInvestor: true,
+ MasterPeriodeDeviden: true,
+ author: true,
+ progress: true,
+ sisaLembar: true
+ },
+ });
+ // console.log(res)
+ return res;
+}
diff --git a/src/app_modules/admin/investasi/fun/get_publish_progres.ts b/src/app_modules/admin/investasi/fun/get_publish_progres.ts
new file mode 100644
index 00000000..d920aa62
--- /dev/null
+++ b/src/app_modules/admin/investasi/fun/get_publish_progres.ts
@@ -0,0 +1,33 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import _ from "lodash";
+
+export default async function Admin_getPublishProgresInvestasi() {
+ const data = await prisma.investasi.findMany({
+ orderBy: {
+ updatedAt: "desc"
+ },
+ where: {
+ MasterStatusInvestasi: {
+ name: "Publish",
+ },
+ },
+
+ select: {
+ id: true,
+
+ author: {
+ select: {
+ username: true,
+ },
+ },
+ updatedAt: true,
+ targetDana: true,
+ progress: true,
+ },
+ });
+
+ // console.log(data)
+ return data;
+}
diff --git a/src/app_modules/admin/investasi/fun/get_total_investasi_by_user.ts b/src/app_modules/admin/investasi/fun/get_total_investasi_by_user.ts
new file mode 100644
index 00000000..0438306c
--- /dev/null
+++ b/src/app_modules/admin/investasi/fun/get_total_investasi_by_user.ts
@@ -0,0 +1,17 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+export default async function Admin_getTotalInvestasiByUser() {
+ const data = await prisma.user.findMany({
+ include: {
+ _count: {
+ select: {
+ Investasi: true,
+ },
+ },
+ },
+ });
+
+ return data;
+}
diff --git a/src/app_modules/admin/investasi/halaman_aksi/layout.tsx b/src/app_modules/admin/investasi/halaman_aksi/layout.tsx
new file mode 100644
index 00000000..c60dc2a3
--- /dev/null
+++ b/src/app_modules/admin/investasi/halaman_aksi/layout.tsx
@@ -0,0 +1,20 @@
+"use client";
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { AppShell } from "@mantine/core";
+import React from "react";
+
+export default function Admin_LayoutHalamanAksi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ {/* {children} */}
+ }>
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/admin/investasi/halaman_aksi/view.tsx b/src/app_modules/admin/investasi/halaman_aksi/view.tsx
new file mode 100644
index 00000000..fd8dca9c
--- /dev/null
+++ b/src/app_modules/admin/investasi/halaman_aksi/view.tsx
@@ -0,0 +1,93 @@
+"use client";
+
+import { RouterAdminInvestasi } from "@/app/lib/router_hipmi/router_admin";
+import {
+ Box,
+ Button,
+ Center,
+ Flex,
+ Grid,
+ Group,
+ Paper,
+ SimpleGrid,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import { IconChevronRight } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+
+export default function Admin_HalamanAksi({idInves}: {idInves: string}) {
+ const router = useRouter();
+ const listHalamanAksi = [
+ {
+ id: 1,
+ name: "Konfirmasi",
+ desc: "Publis atau non - aktifkan proyek invetsasi",
+ route: RouterAdminInvestasi.konfirmasi,
+ },
+ {
+ id: 2,
+ name: "Bukti Transfer",
+ desc: "Lihat bukti transfer investor",
+ route: RouterAdminInvestasi.bukti_transfer,
+ },
+ ];
+
+ return (
+ <>
+
+ {listHalamanAksi.map((e) => (
+
+
+
+ {e.name}
+ {e.desc}
+
+
+ router.push(e.route + `${idInves}`)}
+ >
+ Lihat
+
+
+
+
+ ))}
+
+ {/*
+ {listHalamanAksi.map((e) => (
+ router.push(e.route)}>
+
+
+
+
+ {e.name}
+
+ {e.desc}
+
+
+
+
+
+
+
+
+
+ ))}
+ */}
+ >
+ );
+}
diff --git a/src/app_modules/admin/investasi/index.tsx b/src/app_modules/admin/investasi/index.tsx
new file mode 100644
index 00000000..1bd2d83e
--- /dev/null
+++ b/src/app_modules/admin/investasi/index.tsx
@@ -0,0 +1,27 @@
+import Admin_Investasi from "./main/view";
+import Admin_HalamanAksi from "./halaman_aksi/view";
+import Admin_LayoutHalamanAksi from "./halaman_aksi/layout";
+import Admin_KonfirmasiInvestasi from "./konfirmasi/view";
+import Admin_LayoutKonfirmasiInvestasi from "./konfirmasi/layout";
+import Admin_BuktiTransferInvestasi from "./bukti_transfer/view";
+import Admin_LayoutBuktiTransferInvestasi from "./bukti_transfer/layout";
+import Admin_StatusTransferInvesatasi from "./status_transfer/view";
+import Admin_LayoutStatusTransferInvesatasi from "./status_transfer/layout";
+import Admin_TableReviewInvestasi from "./main/table_review";
+import Admin_TablePublishInvestasi from "./main/table_publish";
+import Admin_TableRejectInvestasi from "./main/table_reject";
+
+export {
+ Admin_Investasi,
+ Admin_HalamanAksi,
+ Admin_LayoutHalamanAksi,
+ Admin_KonfirmasiInvestasi,
+ Admin_LayoutKonfirmasiInvestasi,
+ Admin_BuktiTransferInvestasi,
+ Admin_LayoutBuktiTransferInvestasi,
+ Admin_StatusTransferInvesatasi,
+ Admin_LayoutStatusTransferInvesatasi,
+ Admin_TablePublishInvestasi,
+ Admin_TableReviewInvestasi,
+ Admin_TableRejectInvestasi,
+};
diff --git a/src/app_modules/admin/investasi/konfirmasi/layout.tsx b/src/app_modules/admin/investasi/konfirmasi/layout.tsx
new file mode 100644
index 00000000..582f173d
--- /dev/null
+++ b/src/app_modules/admin/investasi/konfirmasi/layout.tsx
@@ -0,0 +1,19 @@
+"use client";
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { AppShell } from "@mantine/core";
+import React from "react";
+
+export default function Admin_LayoutKonfirmasiInvestasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ }>
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/admin/investasi/konfirmasi/view.tsx b/src/app_modules/admin/investasi/konfirmasi/view.tsx
new file mode 100644
index 00000000..10ec8b66
--- /dev/null
+++ b/src/app_modules/admin/investasi/konfirmasi/view.tsx
@@ -0,0 +1,398 @@
+"use client";
+
+import { RouterHome } from "@/app/lib/router_hipmi/router_home";
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import { RouterUserProfile } from "@/app/lib/router_hipmi/router_user_profile";
+import { Warna } from "@/app/lib/warna";
+import funEditInvestasi from "@/app_modules/investasi/fun/fun_edit_investasi";
+import funGantiStatusInvestasi from "@/app_modules/investasi/fun/fun_ganti_status";
+import { gs_StatusPortoInvestasi } from "@/app_modules/investasi/g_state";
+import { MODEL_Investasi } from "@/app_modules/investasi/model/model_investasi";
+import { MODEL_User_profile } from "@/app_modules/home/models/user_profile";
+import {
+ Group,
+ Flex,
+ Avatar,
+ Paper,
+ AspectRatio,
+ Box,
+ Title,
+ Slider,
+ Grid,
+ Stack,
+ ActionIcon,
+ Center,
+ Button,
+ Text,
+ Image,
+ Collapse,
+ Textarea,
+ Divider,
+ Mark,
+ Modal,
+} from "@mantine/core";
+import { useDisclosure, useShallowEffect } from "@mantine/hooks";
+import {
+ IconAlertHexagonFilled,
+ IconBan,
+ IconBookDownload,
+ IconCheck,
+ IconChevronDown,
+ IconChevronLeft,
+ IconChevronRight,
+ IconFile,
+ IconFileDescription,
+ IconFileTypePdf,
+ IconPdf,
+ IconSpeakerphone,
+} from "@tabler/icons-react";
+import { useAtom } from "jotai";
+import _ from "lodash";
+import Link from "next/link";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import toast, { toastConfig } from "react-simple-toasts";
+import Admin_funRejectInvestasi from "../fun/fun_reject_investasi";
+import { RouterAdminInvestasi } from "@/app/lib/router_hipmi/router_admin";
+import "react-simple-toasts/dist/theme/dark.css";
+import { BeritaInvestasi } from "@/app_modules/investasi";
+
+toastConfig({ theme: "dark" });
+
+export default function Admin_KonfirmasiInvestasi({
+ dataInvestasi,
+ dataUser,
+}: {
+ dataInvestasi: MODEL_Investasi;
+ dataUser: MODEL_User_profile;
+}) {
+ const router = useRouter();
+ const [investasi, setInvestasi] = useState(dataInvestasi);
+ const [user, setUser] = useState(dataUser);
+ const [publish, setPublish] = useState(true);
+ const [opened, { toggle }] = useDisclosure(false);
+ const [catatan, setCatatan] = useState("");
+ const [status, setStatus] = useAtom(gs_StatusPortoInvestasi);
+
+ const listBox = [
+ {
+ id: 1,
+ name: "Prospektus",
+ icon: ,
+ route: RouterInvestasi.detail_prospektus,
+ },
+ {
+ id: 2,
+ name: "Dokumen",
+ icon: ,
+ route: RouterInvestasi.detail_dokumen,
+ },
+ {
+ id: 3,
+ name: "Berita",
+ icon: ,
+ route: RouterInvestasi.berita,
+ },
+ ];
+
+ useShallowEffect(() => {
+ cekStatusPublish();
+ }, []);
+
+ async function cekStatusPublish() {
+ if (investasi.MasterStatusInvestasi.id === "3") setPublish(false);
+ }
+
+ async function onReject() {
+ const body = {
+ id: investasi.id,
+ catatan: investasi.catatan,
+ status: "4",
+ };
+ if (_.isEmpty(body.catatan)) return toast("Lengkapi alasan");
+ await Admin_funRejectInvestasi(body).then((res) => {
+ if (res.status === 200) {
+ toast(res.message);
+ router.back();
+ toggle();
+ } else {
+ toast(res.message);
+ }
+ });
+ }
+
+ async function onPublish() {
+ await funGantiStatusInvestasi(investasi.id, "3", "1").then((res) => {
+ if (res.status === 200) {
+ setTimeout(() => setPublish(false), 1000);
+ router.push(RouterAdminInvestasi.table_status_review);
+ toast("Proyek Investasi Di Publish");
+ }
+ });
+ }
+
+ return (
+ <>
+
+
+ router.back()}>
+
+
+
+
+ {user.username}
+
+
+
+ {" "}
+
+ {!publish || investasi.MasterStatusInvestasi.id === "4" ? (
+ ""
+ ) : (
+ // }
+ // bg={"orange"}
+ // color="orange"
+ // onClick={() => {
+ // setTimeout(() => setPublish(true), 1000);
+ // toast("Proyek Investasi Di Non-Aktifkan");
+ // }}
+ // >
+ // Non - aktifkan
+ //
+ }
+ onClick={() => {
+ onPublish();
+ }}
+ >
+ Publish
+
+ )}
+
+ {investasi.MasterStatusInvestasi.id === "3" ? (
+ ""
+ ) : (
+ }
+ >
+ Reject
+
+ )}
+
+
+
+
+
+
+
+
+ {/* Title */}
+
+
+ {investasi.title}
+
+
+
+
+
+
+
+
+
+ {/* Rincian Data */}
+
+
+
+
+
+ Dana Dibutuhkan
+
+ Rp.{" "}
+ {new Intl.NumberFormat("id-ID", {
+ maximumFractionDigits: 10,
+ }).format(+investasi.targetDana)}
+
+
+
+ Harga Per Lembar
+
+ Rp.{" "}
+ {new Intl.NumberFormat("id-ID", {
+ maximumFractionDigits: 10,
+ }).format(+investasi.hargaLembar)}{" "}
+
+
+
+ Jadwal Pembagian
+ {investasi.MasterPembagianDeviden.name} bulan
+
+
+ Pencarian Investor
+ {investasi.MasterPencarianInvestor.name} hari
+
+
+
+
+
+
+ ROI
+ {investasi.roi} %
+
+
+ Total Lembar
+
+ {" "}
+ {new Intl.NumberFormat("id-ID", {
+ maximumFractionDigits: 10,
+ }).format(+investasi.totalLembar)}{" "}
+ lembar
+
+
+
+ Pembagian Deviden
+ {investasi.MasterPeriodeDeviden.name}
+
+
+
+
+
+
+
+
+
+ {/* Note */}
+ {!publish || investasi.MasterStatusInvestasi.id === "4" ? (
+ ""
+ ) : (
+
+ Note :
+
+ Cek kembali kelengkapan file prospektus & semua dokumen
+ terkait investasi sebelum mem-publish. Jika kelengkapan file
+ kurang lengkap maka reject dan berikan pesan terkait
+ kekurangnya.
+
+
+ )}
+ {publish &&
+ investasi.MasterStatusInvestasi.id === "3" &&
+ _.isEmpty(investasi.BeritaInvestasi) ? (
+
+ ) : (
+ ""
+ )}
+
+ {/* Note dan dokumen */}
+
+
+ {/* File file */}
+
+ {/* Prospektus */}
+
+ Prospektus :
+ {investasi.ProspektusInvestasi === null ? (
+ Tidak ada file
+ ) : (
+
+
+
+ Prospektus_{investasi.title}
+
+
+ Buka
+
+
+
+
+ )}
+
+
+ {/* Dokumen */}
+
+ Dokumen :
+ {_.isEmpty(investasi.DokumenInvestasi) ? (
+ Tidak ada dokumen
+ ) : (
+ investasi.DokumenInvestasi.map((e) => (
+
+
+
+ {e.title}
+
+
+ Buka
+
+
+
+
+ ))
+ )}
+
+
+
+
+
+
+
+
+
+ {/* {JSON.stringify(investasi, null, 2)} */}
+ >
+ );
+}
diff --git a/src/app_modules/admin/investasi/main/table_publikasi_progres.tsx b/src/app_modules/admin/investasi/main/table_publikasi_progres.tsx
new file mode 100644
index 00000000..195567a7
--- /dev/null
+++ b/src/app_modules/admin/investasi/main/table_publikasi_progres.tsx
@@ -0,0 +1,76 @@
+"use client";
+
+import {
+ Paper,
+ Stack,
+ Center,
+ Title,
+ Table,
+ Group,
+ Avatar,
+} from "@mantine/core";
+import _ from "lodash";
+import moment from "moment";
+
+export default function TablePublikasiProgresInvestasi({
+ publishProgres,
+}: {
+ publishProgres: any[];
+}) {
+ return (
+ <>
+
+
+
+ Publikasi & Progres Investasi
+
+
+
+
+
+ Username
+
+
+ Publis
+
+
+ Progres
+
+
+
+
+
+ {_.isEmpty(publishProgres)
+ ? []
+ : publishProgres.map((e) => (
+
+
+
+ {" "}
+ {e.author.username}
+
+
+
+
+ {moment(e.updatedAt).format("DD MMM YYYY")}{" "}
+
+
+
+ {e.progress} %
+
+
+
+ ))}
+
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/admin/investasi/main/table_publish.tsx b/src/app_modules/admin/investasi/main/table_publish.tsx
new file mode 100644
index 00000000..1437c2b6
--- /dev/null
+++ b/src/app_modules/admin/investasi/main/table_publish.tsx
@@ -0,0 +1,118 @@
+"use client";
+import { RouterAdminInvestasi } from "@/app/lib/router_hipmi/router_admin";
+import { MODEL_Investasi } from "@/app_modules/investasi/model/model_investasi";
+import {
+ Badge,
+ ActionIcon,
+ Box,
+ ScrollArea,
+ Table,
+ Tooltip,
+ Stack,
+ Avatar,
+ Group,
+ Text,
+ Center,
+} from "@mantine/core";
+import { IconChevronLeft, IconEyeCheck } from "@tabler/icons-react";
+import { IconEdit, IconEye } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+
+export default function Admin_TablePublishInvestasi({
+ dataInvestsi,
+}: {
+ dataInvestsi: MODEL_Investasi[];
+}) {
+ const [investasi, setInvestasi] = useState(dataInvestsi);
+ const router = useRouter();
+
+ // console.log(investasi);
+
+ const tableBody = investasi.map((e) =>
+ e.MasterStatusInvestasi.id === "3" ? (
+
+
+
+
+ {e.author.username}
+
+
+ {e.title}
+
+ {e.progress} %
+
+
+ {new Intl.NumberFormat("id-ID", {maximumFractionDigits: 10}).format(+e.sisaLembar)}
+
+
+ {new Intl.NumberFormat("id-ID", {maximumFractionDigits: 10}).format(+e.totalLembar)}
+
+
+
+
+
+
+ router.push(RouterAdminInvestasi.konfirmasi + `${e.id}`)
+ }
+ >
+
+
+
+
+
+
+ ) : (
+ ""
+ )
+ );
+
+ return (
+ <>
+
+ router.push(RouterAdminInvestasi.main_investasi)}>
+
+
+
+
+
+ {/*
+ List Publish
+ */}
+
+ Publish
+
+
+
+
+ Username
+ Nama Proyek Investasi
+
+ Progres
+
+
+ Sisa Saham
+
+
+ Total Saham
+
+
+ Aksi
+
+
+
+ {tableBody}
+
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/admin/investasi/main/table_reject.tsx b/src/app_modules/admin/investasi/main/table_reject.tsx
new file mode 100644
index 00000000..08781012
--- /dev/null
+++ b/src/app_modules/admin/investasi/main/table_reject.tsx
@@ -0,0 +1,96 @@
+"use client";
+import { RouterAdminInvestasi } from "@/app/lib/router_hipmi/router_admin";
+import { MODEL_Investasi } from "@/app_modules/investasi/model/model_investasi";
+import {
+ Badge,
+ ActionIcon,
+ Box,
+ ScrollArea,
+ Table,
+ Tooltip,
+ Stack,
+ Center,
+ Avatar,
+ Group,
+ Text,
+} from "@mantine/core";
+import { IconChevronLeft, IconEdit } from "@tabler/icons-react";
+import _ from "lodash";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+
+export default function Admin_TableRejectInvestasi({
+ dataInvestsi,
+}: {
+ dataInvestsi: MODEL_Investasi[];
+}) {
+ const [investasi, setInvestasi] = useState(dataInvestsi);
+ const router = useRouter();
+
+ const tableBody = investasi.map((e) =>
+ e.MasterStatusInvestasi.id === "4" ? (
+
+
+
+
+ {e.author.username}
+
+
+ {_.capitalize(e.title)}
+ {e.catatan}
+
+
+
+
+ router.push(RouterAdminInvestasi.konfirmasi + `${e.id}`)
+ }
+ >
+
+
+
+
+
+
+ ) : (
+ ""
+ )
+ );
+
+ return (
+ <>
+
+ router.push(RouterAdminInvestasi.main_investasi)}>
+
+
+
+
+
+
+ Reject
+
+
+
+
+ Username
+ Nama Proyek Investasi
+ Catatan
+
+ Aksi
+
+
+
+ {tableBody}
+
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/admin/investasi/main/table_review.tsx b/src/app_modules/admin/investasi/main/table_review.tsx
new file mode 100644
index 00000000..8900969d
--- /dev/null
+++ b/src/app_modules/admin/investasi/main/table_review.tsx
@@ -0,0 +1,98 @@
+"use client";
+import { RouterAdminInvestasi } from "@/app/lib/router_hipmi/router_admin";
+import { MODEL_Investasi } from "@/app_modules/investasi/model/model_investasi";
+import {
+ Badge,
+ ActionIcon,
+ Box,
+ ScrollArea,
+ Table,
+ Tooltip,
+ Stack,
+ Group,
+ Avatar,
+ Text,
+ Center,
+} from "@mantine/core";
+import { IconChevronLeft, IconEdit } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+
+export default function Admin_TableReviewInvestasi({
+ dataInvestsi,
+}: {
+ dataInvestsi: MODEL_Investasi[];
+}) {
+ const [investasi, setInvestasi] = useState(dataInvestsi);
+ const router = useRouter();
+
+ const tableBody = investasi.map((e) =>
+ e.MasterStatusInvestasi.id === "2" ? (
+
+
+
+
+ {e.author.username}
+
+
+
+ {e.title}
+
+
+
+ {e.ProspektusInvestasi === null ? (
+ Unavailable
+ ) : (
+
+ Available
+
+ )}
+
+
+
+
+
+
+ router.push(RouterAdminInvestasi.konfirmasi + `${e.id}`)
+ }
+ >
+
+
+
+
+
+
+ ) : (
+ ""
+ )
+ );
+ return (
+ <>
+
+ router.push(RouterAdminInvestasi.main_investasi)}>
+
+
+
+
+
+ Review
+
+
+
+
+ Username
+ Nama Proyek Investasi
+ File Prospektus
+ Aksi
+
+
+ {tableBody}
+
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/admin/investasi/main/table_total_investasi.tsx b/src/app_modules/admin/investasi/main/table_total_investasi.tsx
new file mode 100644
index 00000000..3d55cc86
--- /dev/null
+++ b/src/app_modules/admin/investasi/main/table_total_investasi.tsx
@@ -0,0 +1,61 @@
+"use client";
+
+import {
+ Paper,
+ Stack,
+ Center,
+ Title,
+ Table,
+ Group,
+ Avatar,
+} from "@mantine/core";
+
+export default function TableTotalInvestasi({
+ totalInvestasiByUser,
+}: {
+ totalInvestasiByUser: any[];
+}) {
+ return (
+ <>
+
+
+
+ Total Investasi Pengguna
+
+
+
+
+
+ Username
+
+
+ Total
+
+
+
+
+ {totalInvestasiByUser.map((e) => (
+
+
+
+ {e.username}
+
+
+
+ {e._count.Investasi}
+
+
+ ))}
+
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/admin/investasi/main/view.tsx b/src/app_modules/admin/investasi/main/view.tsx
new file mode 100644
index 00000000..7a858a6b
--- /dev/null
+++ b/src/app_modules/admin/investasi/main/view.tsx
@@ -0,0 +1,143 @@
+"use client";
+
+import { RouterAdminInvestasi } from "@/app/lib/router_hipmi/router_admin";
+import { MODEL_Investasi } from "@/app_modules/investasi/model/model_investasi";
+import {
+ ActionIcon,
+ Avatar,
+ Badge,
+ Box,
+ Center,
+ Divider,
+ Grid,
+ Group,
+ Paper,
+ ScrollArea,
+ Stack,
+ Table,
+ Text,
+ Title,
+} from "@mantine/core";
+import {
+ IconArrowBadgeRight,
+ IconArrowBigRightLine,
+ IconArrowsMaximize,
+ IconCaretRight,
+ IconChevronsDownRight,
+ IconChevronsRight,
+ IconEdit,
+ IconZoomCheck,
+} from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import Admin_TablePublishInvestasi from "./table_publish";
+import Admin_TableReviewInvestasi from "./table_review";
+import Admin_TableRejectInvestasi from "./table_reject";
+import moment from "moment";
+import _ from "lodash";
+import TableTotalInvestasi from "./table_total_investasi";
+import TablePublikasiProgresInvestasi from "./table_publikasi_progres";
+
+export default function Admin_Investasi({
+ listInvestasi,
+ countDraft,
+ countReview,
+ countPublish,
+ countReject,
+ totalInvestasiByUser,
+ publishProgres,
+}: {
+ listInvestasi: MODEL_Investasi[];
+ countDraft: number | any;
+ countReview: number | any;
+ countPublish: number | any;
+ countReject: number | any;
+ totalInvestasiByUser: any[];
+ publishProgres: any[];
+}) {
+ const [investasi, setInvestasi] = useState(listInvestasi);
+ const router = useRouter();
+
+ const listBox = [
+ {
+ id: 1,
+ name: "Draft",
+ jumlah: countDraft,
+ link: "",
+ color: "yellow",
+ },
+ {
+ id: 2,
+ name: "Review",
+ jumlah: countReview,
+ link: RouterAdminInvestasi.table_status_review,
+ color: "orange",
+ },
+ {
+ id: 3,
+ name: "Publish",
+ jumlah: countPublish,
+ link: RouterAdminInvestasi.table_status_publish,
+ color: "green",
+ },
+ {
+ id: 4,
+ name: "Reject",
+ jumlah: countReject,
+ link: RouterAdminInvestasi.table_status_reject,
+ color: "red",
+ },
+ ];
+
+ return (
+ <>
+
+ Investasi
+
+ {/* Status box */}
+
+ {listBox.map((e) => (
+
+
+
+ {e.name}
+
+ {e.jumlah}
+
+
+
+ {e.link === "" ? (
+
+ {/* */}
+
+ ) : (
+ router.push(e.link)}
+ >
+
+
+ )}
+
+
+
+ ))}
+
+
+ {/* Table Total & Progres */}
+ {/*
+
+
+
+
+
+
+ */}
+
+ >
+ );
+}
diff --git a/src/app_modules/admin/investasi/status_transfer/layout.tsx b/src/app_modules/admin/investasi/status_transfer/layout.tsx
new file mode 100644
index 00000000..02aab0e9
--- /dev/null
+++ b/src/app_modules/admin/investasi/status_transfer/layout.tsx
@@ -0,0 +1,19 @@
+"use client";
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { AppShell } from "@mantine/core";
+import React from "react";
+
+export default function Admin_LayoutStatusTransferInvesatasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ }>
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/admin/investasi/status_transfer/view.tsx b/src/app_modules/admin/investasi/status_transfer/view.tsx
new file mode 100644
index 00000000..843b3ee6
--- /dev/null
+++ b/src/app_modules/admin/investasi/status_transfer/view.tsx
@@ -0,0 +1,58 @@
+"use client";
+
+import { Warna } from "@/app/lib/warna";
+import {
+ AspectRatio,
+ Avatar,
+ Button,
+ Center,
+ Group,
+ Image,
+ Select,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import { useRouter } from "next/navigation";
+
+export default function Admin_StatusTransferInvesatasi() {
+ const router = useRouter();
+ return (
+ <>
+
+
+
+ Username
+
+
+
+
+
+
+
+
+
+
+
+ {
+ router.back();
+ }}
+ >
+ Simpan
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/admin/main/index.tsx b/src/app_modules/admin/main/index.tsx
new file mode 100644
index 00000000..83aa17a4
--- /dev/null
+++ b/src/app_modules/admin/main/index.tsx
@@ -0,0 +1,5 @@
+import AdminMain from "./view";
+import AdminLayout from "./layout";
+import SplashDashboardAdmin from "./splash";
+
+export { AdminMain, AdminLayout, SplashDashboardAdmin };
diff --git a/src/app_modules/admin/main/layout.tsx b/src/app_modules/admin/main/layout.tsx
new file mode 100644
index 00000000..45b59e8f
--- /dev/null
+++ b/src/app_modules/admin/main/layout.tsx
@@ -0,0 +1,146 @@
+"use client";
+
+import {
+ ActionIcon,
+ AppShell,
+ Avatar,
+ Box,
+ Burger,
+ Drawer,
+ Footer,
+ Group,
+ Header,
+ MediaQuery,
+ NavLink,
+ Navbar,
+ Stack,
+ Text,
+ Title,
+ useMantineTheme,
+} from "@mantine/core";
+import React, { useState } from "react";
+import HeaderTamplate from "../../component/header_tamplate";
+import { useDisclosure } from "@mantine/hooks";
+import { IconLetterH, IconLogout } from "@tabler/icons-react";
+import {
+ RouterAdminAward,
+ RouterAdminDashboard,
+ RouterAdminDonasi,
+ RouterAdminInvestasi,
+} from "@/app/lib/router_hipmi/router_admin";
+import { useRouter } from "next/navigation";
+import { RouterHome } from "@/app/lib/router_hipmi/router_home";
+import { Logout } from "@/app_modules/auth";
+
+export default function AdminLayout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ const theme = useMantineTheme();
+ const [opened, setOpened] = useState(false);
+ const router = useRouter();
+ const [active, setActive] = useState(1);
+
+ const listAdminPage = [
+ {
+ id: 1,
+ name: "Dashboard",
+ route: RouterAdminDashboard.main_admin,
+ },
+ {
+ id: 2,
+ name: "Investasi",
+ route: RouterAdminInvestasi.main_investasi,
+ },
+ {
+ id: 3,
+ name: "Donasi",
+ route: RouterAdminDonasi.main_donasi,
+ },
+ ];
+
+ return (
+ <>
+
+
+ {listAdminPage.map((e) => (
+ {
+ // setActive(e.id);
+ router.push(e.route);
+ }}
+ />
+ ))}
+
+
+ }
+ header={
+
+ {/* Mobile View */}
+
+
+ setOpened((o) => !o)}
+ size="sm"
+ color={theme.colors.gray[6]}
+ mr="xl"
+ />
+ Dashboard Admin
+ router.push(RouterHome.main_home)}
+ >
+
+
+
+
+
+ {/* Web View */}
+
+
+ Dashboard Admin
+ HIPMI
+ {/*
+ {listAdminPage.map((e) => (
+ router.push(e.route)}>
+ {e.name}
+
+ ))}
+ */}
+
+
+
+
+ }
+ >
+ {/* {JSON.stringify(active)} */}
+
+ {children}
+
+ setOpened(false)} size={"50%"}>
+
+ {listAdminPage.map((e) => (
+ router.push(e.route)}>
+ {e.name}
+
+ ))}
+
+
+ >
+ );
+}
diff --git a/src/app_modules/admin/main/splash.tsx b/src/app_modules/admin/main/splash.tsx
new file mode 100644
index 00000000..c492bb09
--- /dev/null
+++ b/src/app_modules/admin/main/splash.tsx
@@ -0,0 +1,30 @@
+"use client";
+
+import { RouterAdminDashboard } from "@/app/lib/router_hipmi/router_admin";
+import { AspectRatio, Center, Image, Stack, Text, Title } from "@mantine/core";
+import { useShallowEffect } from "@mantine/hooks";
+import { useRouter } from "next/navigation";
+
+export default function SplashDashboardAdmin() {
+ const router = useRouter();
+ useShallowEffect(() => {
+ setTimeout(() => router.push(RouterAdminDashboard.main_admin), 2000)
+ }, []);
+ return (
+ <>
+ {/*
+
+ Selamat Datang, ADMIN
+
+ HIPMI
+
+ */}
+
+
+
+
+ Welcome Admin
+
+ >
+ );
+}
diff --git a/src/app_modules/admin/main/view.tsx b/src/app_modules/admin/main/view.tsx
new file mode 100644
index 00000000..d5a651e7
--- /dev/null
+++ b/src/app_modules/admin/main/view.tsx
@@ -0,0 +1,18 @@
+"use client";
+
+import { Center, Divider, Stack, Title } from "@mantine/core";
+import Admin_Investasi from "../investasi/main/view";
+
+export default function AdminMain() {
+ return (
+ <>
+
+ Main Dashboard
+
+
+ Cooming Soon !!
+
+
+ >
+ );
+}
diff --git a/src/app_modules/auth/index.ts b/src/app_modules/auth/index.ts
index 9ad38fa5..47281058 100644
--- a/src/app_modules/auth/index.ts
+++ b/src/app_modules/auth/index.ts
@@ -1,3 +1,8 @@
import SplashScreen from "./splash/view";
+import Login from "./login/view";
+import Validasi from "./validasi/view";
+import LayoutValidasi from "./validasi/layout";
+import Register from "./register/view";
+import Logout from "./logout/view";
-export {SplashScreen}
\ No newline at end of file
+export { SplashScreen, Login, Validasi, Register, Logout, LayoutValidasi };
diff --git a/src/app_modules/auth/login/view.tsx b/src/app_modules/auth/login/view.tsx
new file mode 100644
index 00000000..ef726c79
--- /dev/null
+++ b/src/app_modules/auth/login/view.tsx
@@ -0,0 +1,99 @@
+"use client";
+
+import { myConsole } from "@/app/fun/my_console";
+import { randomOTP } from "@/app/fun/rondom_otp";
+import { ApiHipmi } from "@/app/lib/api";
+import { Warna } from "@/app/lib/warna";
+import { Button, Center, Flex, Stack, TextInput, Title } from "@mantine/core";
+import { getHotkeyHandler, useFocusTrap, useHotkeys } from "@mantine/hooks";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import toast from "react-simple-toasts";
+import { useAtom } from "jotai";
+import { gs_otp, gs_nomor } from "../state/state";
+import { IconCircleLetterH } from "@tabler/icons-react";
+import { RouterAdminDashboard } from "@/app/lib/router_hipmi/router_admin";
+
+export default function Login() {
+ const router = useRouter();
+ const [nomor, setNomor] = useState("");
+ const [inputNumber, setInputNumber] = useAtom(gs_nomor);
+ const [code, setCode] = useAtom(gs_otp);
+ const focusTrapRef = useFocusTrap();
+
+ const onLogin = async () => {
+ const body = {
+ nomor: nomor,
+ otp: randomOTP(),
+ };
+
+ if (body.nomor.length < 10) return toast("Nomor minimal 10 digit");
+ if (body.nomor.length > 13) return toast("Nomor maximal 13 digit");
+
+ await fetch(ApiHipmi.login, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(body),
+ })
+ .then((res) => res.json())
+ .then((val) => {
+ // console.log(val);
+ if (val.success === true) {
+ router.push(RouterAdminDashboard.splash_admin);
+ } else {
+ if (val.status == 200) {
+ toast("Nomor OTP terkirim");
+ setCode(val.body.otp);
+ setInputNumber(val.body.nomor);
+ router.push("/dev/auth/validasi");
+ } else {
+ toast(val.message);
+ }
+ }
+ });
+ };
+
+ return (
+ <>
+
+
+ Login
+
+ {
+ setNomor(val.target.value);
+ }}
+ />
+
+ {
+ onLogin();
+ }}
+ >
+ Login
+
+
+ >
+ );
+}
diff --git a/src/app_modules/auth/logout/view.tsx b/src/app_modules/auth/logout/view.tsx
new file mode 100644
index 00000000..7fc5af4a
--- /dev/null
+++ b/src/app_modules/auth/logout/view.tsx
@@ -0,0 +1,60 @@
+"use client";
+import { myConsole } from "@/app/fun/my_console";
+import { ApiHipmi } from "@/app/lib/api";
+import { ActionIcon, Button, Group, Modal } from "@mantine/core";
+import { useRouter } from "next/navigation";
+import { useAtom } from "jotai";
+import { gs_nomor, gs_otp } from "../state/state";
+import { IconLogout } from "@tabler/icons-react";
+import { Warna } from "@/app/lib/warna";
+import { gs_token } from "@/app_modules/home/state/global_state";
+import { useDisclosure } from "@mantine/hooks";
+
+export default function Logout() {
+ const router = useRouter();
+ const [nomor, setnomor] = useAtom(gs_nomor);
+ const [code, setCode] = useAtom(gs_otp);
+ const [token, setToken] = useAtom(gs_token);
+
+ const [opened, { toggle }] = useDisclosure(false);
+
+ const onLogout = async () => {
+ // MyConsole("keluar");
+
+ await fetch(ApiHipmi.logout)
+ .then((res) => res.json())
+ .then((val) => {
+ if (val.status == 200) {
+ setnomor(null);
+ setCode(null);
+ setToken(null);
+
+ return router.push("/dev/auth/login");
+ }
+ });
+ };
+
+ return (
+ <>
+
+
+
+ Batal
+
+ onLogout()}
+ >
+ Keluar
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/auth/register/view.tsx b/src/app_modules/auth/register/view.tsx
new file mode 100644
index 00000000..9fa289ca
--- /dev/null
+++ b/src/app_modules/auth/register/view.tsx
@@ -0,0 +1,94 @@
+"use client";
+
+import { Warna } from "@/app/lib/warna";
+import { Flex, Title, TextInput, Button, Text } from "@mantine/core";
+import { IconCircleLetterH } from "@tabler/icons-react";
+import { gs_nomor } from "../state/state";
+import { useAtom } from "jotai";
+import { useState } from "react";
+import { myConsole } from "@/app/fun/my_console";
+import toast from "react-simple-toasts";
+import { ApiHipmi } from "@/app/lib/api";
+import { useRouter } from "next/navigation";
+import _ from "lodash";
+import { useFocusTrap } from "@mantine/hooks";
+
+export default function Register() {
+ const route = useRouter();
+ const [nomor, setNomor] = useAtom(gs_nomor);
+ const [value, setValue] = useState("");
+ const focusTrapRef = useFocusTrap();
+
+ const onRegister = async () => {
+ myConsole(value);
+
+ const body = {
+ username: _.lowerCase(value),
+ nomor: nomor,
+ };
+
+ if (!body) return toast("Lengkapi username");
+ if (body.username.length < 5) return toast("Username minimal 5 karakter");
+
+ await fetch(ApiHipmi.register, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(body),
+ })
+ .then((res) => res.json())
+ .then((val) => {
+ myConsole(val);
+ if (val.status == 201) {
+ toast("Pendaftaran Berhasil");
+ return route.push("/dev/home");
+ } else {
+ return toast(val.message);
+ }
+ });
+ };
+
+ return (
+ <>
+
+ Registrasi
+
+
+
+ {
+ setValue(val.target.value);
+ }}
+ />
+
+ Nomor : {nomor}
+
+ {
+ onRegister();
+ }}
+ >
+ Register
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/auth/splash/view.tsx b/src/app_modules/auth/splash/view.tsx
index dd6d63de..80df56af 100644
--- a/src/app_modules/auth/splash/view.tsx
+++ b/src/app_modules/auth/splash/view.tsx
@@ -1,10 +1,50 @@
-"use client"
+"use client";
-import { Title } from "@mantine/core"
+import {
+ AspectRatio,
+ Box,
+ Center,
+ Flex,
+ Image,
+ Paper,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import { useShallowEffect } from "@mantine/hooks";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
-export default function SplashScreen(){
- return <>
- Splash Screen
-
+export default function SplashScreen({ data }: { data: any }) {
+ const router = useRouter();
+ const [val, setVal] = useState(false);
+
+ useShallowEffect(() => {
+ if (!data) {
+ setTimeout(() => {
+ return router.push("/dev/auth/login");
+ }, 2000);
+ } else {
+ setTimeout(() => {
+ return router.push("/dev/home");
+ }, 2000);
+ }
+ }, []);
+ return (
+ <>
+
+
+ {/* Welcome to */}
+
+
+
+
+
>
-}
\ No newline at end of file
+ );
+}
diff --git a/src/app_modules/auth/state/state.ts b/src/app_modules/auth/state/state.ts
new file mode 100644
index 00000000..04c96225
--- /dev/null
+++ b/src/app_modules/auth/state/state.ts
@@ -0,0 +1,4 @@
+import { atomWithStorage } from 'jotai/utils'
+
+export const gs_nomor = atomWithStorage("nomorHp", null)
+export const gs_otp = atomWithStorage("code_otp", null)
\ No newline at end of file
diff --git a/src/app_modules/auth/validasi/layout.tsx b/src/app_modules/auth/validasi/layout.tsx
new file mode 100644
index 00000000..d1bfeec5
--- /dev/null
+++ b/src/app_modules/auth/validasi/layout.tsx
@@ -0,0 +1,31 @@
+"use client";
+
+import { ActionIcon, AppShell, Group, Header } from "@mantine/core";
+import { IconChevronLeft } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import React from "react";
+
+export default function LayoutValidasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ const router = useRouter()
+ return (
+ <>
+
+
+ router.back()} >
+
+
+
+
+ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/auth/validasi/view.tsx b/src/app_modules/auth/validasi/view.tsx
new file mode 100644
index 00000000..e1650fbe
--- /dev/null
+++ b/src/app_modules/auth/validasi/view.tsx
@@ -0,0 +1,115 @@
+"use client";
+
+import { useAtom } from "jotai";
+import {
+ ActionIcon,
+ Button,
+ Center,
+ Flex,
+ PinInput,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import { gs_nomor, gs_otp } from "../state/state";
+import { Warna } from "@/app/lib/warna";
+import { useState } from "react";
+import { myConsole } from "@/app/fun/my_console";
+import { IconChevronLeft, IconCircleLetterH } from "@tabler/icons-react";
+import toast from "react-simple-toasts";
+import { ApiHipmi } from "@/app/lib/api";
+import { useRouter } from "next/navigation";
+import { funGetUserProfile } from "@/app_modules/fun/get_user_profile";
+import { useFocusTrap } from "@mantine/hooks";
+
+export default function Validasi() {
+ const router = useRouter();
+ const [nomor, setnomor] = useAtom(gs_nomor);
+ const [code, setCode] = useAtom(gs_otp);
+
+ const [inputCode, setInputOtp] = useState("");
+ const focusTrapRef = useFocusTrap();
+
+ const onValid = async () => {
+ // MyConsole(inputCode)
+ const body = {
+ nomor: nomor,
+ otp: code,
+ };
+
+ if (!inputCode) return toast("Lengkapi Kode");
+ if (body.otp != inputCode) return toast("Kode Salah");
+
+ await fetch(ApiHipmi.validasi, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(body),
+ })
+ .then((res) => res.json())
+ .then((val) => {
+ myConsole(val);
+ if (val.status == 200) {
+ toast("Berhasil Login");
+ setTimeout(() => router.push("/dev/home"), 2000);
+ funGetUserProfile(val.data.id);
+ } else {
+ toast("Silahkan Registrasi");
+ return router.push("/dev/auth/register");
+ }
+ });
+ };
+
+ return (
+ <>
+ {/* {JSON.stringify(nomor)}
+ {JSON.stringify(code)} */}
+
+
+
+ Validasi Kode OTP
+
+
+
+ Enter the 4-digit OTP , we’ve just sent
+ to +{nomor}
+
+ {
+ setInputOtp(val);
+ }}
+ />
+ {
+ onValid();
+ // myConsole("ok")
+ }}
+ >
+ Submit
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/component/header_tamplate.tsx b/src/app_modules/component/header_tamplate.tsx
new file mode 100644
index 00000000..967b7655
--- /dev/null
+++ b/src/app_modules/component/header_tamplate.tsx
@@ -0,0 +1,54 @@
+"use client";
+
+import { Header, Group, ActionIcon, Text } from "@mantine/core";
+import { IconArrowLeft } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+
+export default function HeaderTamplate({
+ route,
+ route2,
+ title,
+ icon,
+}: {
+ route?: any;
+ route2?: any;
+ title: string;
+ icon?: any;
+}) {
+ const router = useRouter();
+ return (
+ <>
+
+
+ {
+ if (route === null || route === undefined) {
+ return router.back();
+ } else {
+ return router.push(route);
+ }
+ }}
+ >
+
+
+ {title}
+ {(() => {
+ if (route2 === null ||route2 === undefined) {
+ return ;
+ } else {
+ return (
+ router.push(route2)}
+ >
+ {icon}
+
+ );
+ }
+ })()}
+
+
+ >
+ );
+}
diff --git a/src/app_modules/crowd/index.ts b/src/app_modules/crowd/index.ts
new file mode 100644
index 00000000..764cbbea
--- /dev/null
+++ b/src/app_modules/crowd/index.ts
@@ -0,0 +1,5 @@
+import MainCrowd from "./main/view";
+import LayoutMainCrowd from "./main/layout";
+import SplashCrowd from "./splash/view";
+
+export {MainCrowd,LayoutMainCrowd, SplashCrowd}
\ No newline at end of file
diff --git a/src/app_modules/crowd/main/layout.tsx b/src/app_modules/crowd/main/layout.tsx
new file mode 100644
index 00000000..af1ae295
--- /dev/null
+++ b/src/app_modules/crowd/main/layout.tsx
@@ -0,0 +1,24 @@
+"use client";
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { ActionIcon, AppShell, Group, Header, Text } from "@mantine/core";
+import { IconArrowLeft } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import React from "react";
+
+export default function LayoutMainCrowd({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ const router = useRouter();
+ return (
+ <>
+ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/crowd/main/view.tsx b/src/app_modules/crowd/main/view.tsx
new file mode 100644
index 00000000..dd5e41ea
--- /dev/null
+++ b/src/app_modules/crowd/main/view.tsx
@@ -0,0 +1,89 @@
+"use client";
+
+import { RouterCrowd } from "@/app/lib/router_hipmi/router_crowd";
+import { Warna } from "@/app/lib/warna";
+import { gs_donasi_hot_menu } from "@/app_modules/donasi/global_state";
+import { gs_investasiFooter } from "@/app_modules/investasi/g_state";
+import {
+ AspectRatio,
+ Button,
+ Center,
+ Flex,
+ Grid,
+ Image,
+ Paper,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import { IconChevronRight } from "@tabler/icons-react";
+import { useAtom } from "jotai";
+import { useRouter } from "next/navigation";
+import toast from "react-simple-toasts";
+
+export default function MainCrowd() {
+ const router = useRouter();
+ const [changeColor, setChangeColor] = useAtom(gs_investasiFooter);
+ const [donasiHotMenu, setDonasiHotMenu] = useAtom(gs_donasi_hot_menu)
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+ {
+ router.push(RouterCrowd.investasi);
+ setChangeColor(0);
+ }}
+ >
+
+
+ Investasi
+
+ Buat investasi dan jual beli saham lebih mudah dengan pengguna lain dengan CROWD INVESTASI
+
+
+
+
+
+
+
+
+
+ {
+ router.push(RouterCrowd.donasi)
+ setDonasiHotMenu(0)
+ }}
+ >
+
+
+ Donasi
+
+ Berbagi info untuk berdonasi lebih luas dan lebih mudah dengan CROWD DONASI
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/crowd/splash/view.tsx b/src/app_modules/crowd/splash/view.tsx
new file mode 100644
index 00000000..31514e8e
--- /dev/null
+++ b/src/app_modules/crowd/splash/view.tsx
@@ -0,0 +1,24 @@
+"use client";
+
+import { Warna } from "@/app/lib/warna";
+import { Center, Image, Stack, Text, Title } from "@mantine/core";
+import { useShallowEffect } from "@mantine/hooks";
+import { useRouter } from "next/navigation";
+
+export default function SplashCrowd() {
+ const router = useRouter();
+
+ useShallowEffect(() => {
+ setTimeout(() => router.push("/dev/crowd/main"), 2000);
+ }, []);
+ return (
+ <>
+
+
+ Welcome to
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/component/box_informasi.tsx b/src/app_modules/donasi/component/box_informasi.tsx
new file mode 100644
index 00000000..b2e64965
--- /dev/null
+++ b/src/app_modules/donasi/component/box_informasi.tsx
@@ -0,0 +1,22 @@
+import { Center, Grid, Group, Paper, Text, Title } from "@mantine/core";
+
+export default function BoxInformasiDonasi({
+ informasi,
+}: {
+ informasi: string;
+}) {
+ return (
+ <>
+
+
+
+
+
+ *
+ {informasi}
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/component/detail_main/cerita_penggalang.tsx b/src/app_modules/donasi/component/detail_main/cerita_penggalang.tsx
new file mode 100644
index 00000000..2250c1a9
--- /dev/null
+++ b/src/app_modules/donasi/component/detail_main/cerita_penggalang.tsx
@@ -0,0 +1,40 @@
+"use client";
+
+import { useRouter } from "next/navigation";
+import { MODEL_DONASI } from "../../model/interface";
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import { Stack, Title, Paper, Group, ActionIcon, Text } from "@mantine/core";
+import { IconCircleChevronRight } from "@tabler/icons-react";
+import moment from "moment";
+
+export default function ComponentCeritaPenggalangDanaDonasi({
+ donasi,
+}: {
+ donasi: MODEL_DONASI;
+}) {
+ const router = useRouter();
+ return (
+ <>
+
+ Cerita Penggalang Dana
+
+
+
+ {moment(donasi.createdAt).format("ll")}
+ router.push(RouterDonasi.cerita_penggalang + `${donasi.id}`)}
+ >
+
+
+
+
+ {donasi.CeritaDonasi.cerita}
+
+ {/* Baca selengkapnya */}
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/component/footer_button_donasi.tsx b/src/app_modules/donasi/component/footer_button_donasi.tsx
new file mode 100644
index 00000000..b54eff85
--- /dev/null
+++ b/src/app_modules/donasi/component/footer_button_donasi.tsx
@@ -0,0 +1,23 @@
+"use client";
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import { Footer, Center, Button } from "@mantine/core";
+import { useRouter } from "next/navigation";
+
+export default function ButtonDonasi() {
+ const router = useRouter();
+ return (
+ <>
+
+
+ router.push(RouterDonasi.masukan_donasi)}
+ >
+ Donasi
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/component/footer_close_donasi.tsx b/src/app_modules/donasi/component/footer_close_donasi.tsx
new file mode 100644
index 00000000..4daf0f24
--- /dev/null
+++ b/src/app_modules/donasi/component/footer_close_donasi.tsx
@@ -0,0 +1,20 @@
+"use client";
+
+import { Footer, Center, Button } from "@mantine/core";
+import { useRouter } from "next/navigation";
+
+
+export default function FooterDonasi() {
+ const router = useRouter()
+ return (
+ <>
+
+
+ router.back()}>
+ Tutup
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/component/header_tamplate.tsx b/src/app_modules/donasi/component/header_tamplate.tsx
new file mode 100644
index 00000000..419a7caa
--- /dev/null
+++ b/src/app_modules/donasi/component/header_tamplate.tsx
@@ -0,0 +1,67 @@
+"use client";
+
+import { Header, Group, ActionIcon, Text, Title } from "@mantine/core";
+import { IconArrowLeft, IconChevronLeft } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+
+export default function HeaderTamplateDonasi({
+ hideBack,
+ route,
+ route2,
+ title,
+ icon,
+ bg,
+}: {
+ hideBack?: boolean;
+ route?: any;
+ route2?: any;
+ title: string;
+ icon?: any;
+ bg?: any;
+}) {
+ const router = useRouter();
+ return (
+ <>
+
+
+ {hideBack ? (
+
+ ) : (
+ {
+ if (route === null || route === undefined) {
+ return router.back();
+ } else {
+ return router.push(route);
+ }
+ }}
+ >
+
+
+ )}
+ {title}
+ {(() => {
+ if (route2 === null || route2 === undefined) {
+ return ;
+ } else {
+ return (
+ router.push(route2)}
+ >
+ {icon}
+
+ );
+ }
+ })()}
+
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/component/notifikasi/notif_berhasil.tsx b/src/app_modules/donasi/component/notifikasi/notif_berhasil.tsx
new file mode 100644
index 00000000..8ee724b2
--- /dev/null
+++ b/src/app_modules/donasi/component/notifikasi/notif_berhasil.tsx
@@ -0,0 +1,31 @@
+import { Center, Text } from "@mantine/core";
+import { notifications } from "@mantine/notifications";
+import { IconAlertTriangle, IconChecklist, IconCircleCheck } from "@tabler/icons-react";
+
+/**
+ *
+ * @param text | masukan text untuk peringatan
+ * @type string
+ * @returns notifikasi peringatan
+ */
+export async function NotifBerhasil(text: string) {
+ return notifications.show({
+ message: (
+
+ {text}
+
+ ),
+ color: "green",
+ radius: "md",
+ autoClose: 1000,
+ icon: ,
+ withCloseButton: false,
+
+ styles: (theme) => ({
+ description: { color: theme.white },
+ root: {
+ backgroundColor: theme.colors.green[7],
+ },
+ }),
+ });
+}
diff --git a/src/app_modules/donasi/component/notifikasi/notif_gagal.tsx b/src/app_modules/donasi/component/notifikasi/notif_gagal.tsx
new file mode 100644
index 00000000..6bc45813
--- /dev/null
+++ b/src/app_modules/donasi/component/notifikasi/notif_gagal.tsx
@@ -0,0 +1,31 @@
+import { Center, Text } from "@mantine/core";
+import { notifications } from "@mantine/notifications";
+import { IconAlertTriangle } from "@tabler/icons-react";
+
+/**
+ *
+ * @param text | masukan text untuk peringatan
+ * @type string
+ * @returns notifikasi peringatan
+ */
+export async function NotifGagal(text: string) {
+ return notifications.show({
+ message: (
+
+ {text}
+
+ ),
+ color: "red",
+ radius: "md",
+ autoClose: 1000,
+ icon: ,
+ withCloseButton: false,
+
+ styles: (theme) => ({
+ description: { color: theme.white },
+ root: {
+ backgroundColor: theme.colors.red[7],
+ },
+ }),
+ });
+}
diff --git a/src/app_modules/donasi/component/notifikasi/notif_peringatan.tsx b/src/app_modules/donasi/component/notifikasi/notif_peringatan.tsx
new file mode 100644
index 00000000..121944db
--- /dev/null
+++ b/src/app_modules/donasi/component/notifikasi/notif_peringatan.tsx
@@ -0,0 +1,31 @@
+import { Center, Text } from "@mantine/core";
+import { notifications } from "@mantine/notifications";
+import { IconAlertTriangle } from "@tabler/icons-react";
+
+/**
+ *
+ * @param text | masukan text untuk peringatan
+ * @type string
+ * @returns notifikasi peringatan
+ */
+export async function NotifPeringatan(text: string) {
+ return notifications.show({
+ message: (
+
+ {text}
+
+ ),
+ color: "yellow",
+ radius: "md",
+ autoClose: 1000,
+ icon: ,
+ withCloseButton: false,
+
+ styles: (theme) => ({
+ description: { color: theme.white },
+ root: {
+ backgroundColor: theme.colors.yellow[7],
+ },
+ }),
+ });
+}
diff --git a/src/app_modules/donasi/component/tampilan_rupiah.tsx b/src/app_modules/donasi/component/tampilan_rupiah.tsx
new file mode 100644
index 00000000..27d45d2b
--- /dev/null
+++ b/src/app_modules/donasi/component/tampilan_rupiah.tsx
@@ -0,0 +1,14 @@
+import { Text } from "@mantine/core";
+
+export default function TampilanRupiahDonasi({nominal}: {nominal: number}) {
+ return (
+ <>
+
+ Rp.{" "}
+ {new Intl.NumberFormat("id-ID", { maximumFractionDigits: 10 }).format(
+ nominal
+ )}
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/create/create_cerita_penggalang.tsx b/src/app_modules/donasi/create/create_cerita_penggalang.tsx
new file mode 100644
index 00000000..e5645913
--- /dev/null
+++ b/src/app_modules/donasi/create/create_cerita_penggalang.tsx
@@ -0,0 +1,158 @@
+"use client";
+
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import {
+ AspectRatio,
+ Button,
+ Center,
+ FileButton,
+ Image,
+ Paper,
+ Stack,
+ Textarea,
+} from "@mantine/core";
+import { IconCamera } from "@tabler/icons-react";
+import { useAtom } from "jotai";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import { gs_donasi_tabs_posting } from "../global_state";
+import BoxInformasiDonasi from "../component/box_informasi";
+import { MODEL_DONASI_TEMPORARY } from "../model/interface";
+import _ from "lodash";
+import toast from "react-simple-toasts";
+import { Donasi_funCreate } from "../fun/create/fun_create_donasi";
+import { notifications } from "@mantine/notifications";
+import { NotifPeringatan } from "../component/notifikasi/notif_peringatan";
+
+export default function CreateCeritaPenggalangDonasi({
+ dataTemporary,
+ userId,
+}: {
+ dataTemporary: MODEL_DONASI_TEMPORARY;
+ userId: string;
+}) {
+ const router = useRouter();
+ const [tabsPostingDonasi, setTabsPostingDonasi] = useAtom(
+ gs_donasi_tabs_posting
+ );
+ const [create, setCreate] = useState({
+ pembukaan: "",
+ cerita: "",
+ });
+ const [temporary, setTemporary] = useState(dataTemporary);
+ const [file, setFile] = useState(null);
+ const [imageCerita, setImageCerita] = useState();
+
+ async function onCreate() {
+ if (_.values(create).includes("")) return NotifPeringatan("Lengkapin Data");
+ if (!file) return NotifPeringatan("Lengkapi Gambar");
+
+ const gambar = new FormData();
+ gambar.append("file", file as any);
+
+ const body = {
+ id: temporary.id,
+ title: temporary.title,
+ target: temporary.target,
+ imagesId: temporary.imagesId,
+ donasiMaster_KategoriId: temporary.donasiMaster_KategoriId,
+ donasiMaster_DurasiId: temporary.donasiMaster_DurasiId,
+ authorId: userId,
+ CeritaDonasi: {
+ pembukaan: create.pembukaan,
+ cerita: create.cerita,
+ },
+ };
+
+ await Donasi_funCreate(body as any, gambar).then((res) => {
+ if (res.status === 201) {
+ router.push(RouterDonasi.page_pop_up_create);
+ setTabsPostingDonasi("Review");
+ } else {
+ toast(res.message);
+ }
+ });
+ }
+ return (
+ <>
+
+ {/* {JSON.stringify(dataTempo, null, 2)} */}
+
+
+ {/* {JSON.stringify(value.pembukaan, null, 2)} */}
+ >
+ );
+}
diff --git a/src/app_modules/donasi/create/create_donasi.tsx b/src/app_modules/donasi/create/create_donasi.tsx
new file mode 100644
index 00000000..7881eac6
--- /dev/null
+++ b/src/app_modules/donasi/create/create_donasi.tsx
@@ -0,0 +1,169 @@
+"use client";
+
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import {
+ ActionIcon,
+ AspectRatio,
+ Box,
+ Button,
+ Center,
+ FileButton,
+ Image,
+ Paper,
+ Select,
+ Stack,
+ Text,
+ TextInput,
+ Textarea,
+} from "@mantine/core";
+import { IconCamera } from "@tabler/icons-react";
+import { useAtom } from "jotai";
+import { useRouter } from "next/navigation";
+
+import BoxInformasiDonasi from "../component/box_informasi";
+import { MODEL_DONASI_ALL_MASTER } from "../model/interface";
+import { useState } from "react";
+import { useShallowEffect } from "@mantine/hooks";
+import Donasi_funCreateTemporary from "../fun/create/fun_create_donasi_temporary";
+import toast from "react-simple-toasts";
+import _ from "lodash";
+import { notifications } from "@mantine/notifications";
+import { NotifPeringatan } from "../component/notifikasi/notif_peringatan";
+
+export default function CreateDonasi({
+ masterKategori,
+ masterDurasi,
+}: {
+ masterKategori: MODEL_DONASI_ALL_MASTER[];
+ masterDurasi: MODEL_DONASI_ALL_MASTER[];
+}) {
+ const router = useRouter();
+ const [kategori, setKategori] = useState(masterKategori);
+ const [durasi, setDurasi] = useState(masterDurasi);
+ const [create, setCreate] = useState({
+ kategoriId: "",
+ title: "",
+ target: "",
+ durasiId: "",
+ });
+ const [file, setFile] = useState(null);
+ const [imageDonasi, setImageDonasi] = useState();
+
+ async function onCreate() {
+ const body = {
+ donasiMaster_KategoriId: create.kategoriId,
+ donasiMaster_DurasiId: create.durasiId,
+ title: create.title,
+ target: create.target,
+ };
+
+ if (_.values(body).includes("")) return NotifPeringatan("Lengkapin Data");
+ if (!file) return NotifPeringatan("Lengkapi Gambar");
+
+ const gambar = new FormData();
+ gambar.append("file", file as any);
+
+ await Donasi_funCreateTemporary(body as any, gambar).then((res) => {
+ if (res.status === 201) {
+ router.push(RouterDonasi.create_cerita_penggalang + `${res.donasiId}`);
+ } else {
+ toast(res.message);
+ }
+ });
+ }
+
+ return (
+ <>
+
+
+ ({
+ value: e.id,
+ label: e.name,
+ }))}
+ onChange={(val: string) =>
+ setCreate({
+ ...create,
+ kategoriId: val,
+ })
+ }
+ />
+
+
+
+
+
+
+
+ {
+ try {
+ const buffer = URL.createObjectURL(
+ new Blob([new Uint8Array(await files.arrayBuffer())])
+ );
+ // console.log(buffer, "ini buffer");
+ // console.log(files, " ini file");
+ setImageDonasi(buffer);
+ setFile(files);
+ } catch (error) {
+ console.log(error);
+ }
+ }}
+ accept="image/png,image/jpeg"
+ >
+ {(props) => (
+ }
+ >
+ Upload
+
+ )}
+
+
+
+
+
+ setCreate({ ...create, title: val.target.value })
+ }
+ />
+
+ setCreate({ ...create, target: val.target.value })
+ }
+ />
+ ({
+ value: e.id,
+ label: e.name + " " + `hari`,
+ }))}
+ onChange={(val: string) => setCreate({ ...create, durasiId: val })}
+ />
+
+ onCreate()}>
+ Selanjutnya
+
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/create/layout.tsx b/src/app_modules/donasi/create/layout.tsx
new file mode 100644
index 00000000..56a3566d
--- /dev/null
+++ b/src/app_modules/donasi/create/layout.tsx
@@ -0,0 +1,14 @@
+"use client"
+
+import { AppShell } from "@mantine/core"
+import React from "react"
+import HeaderTamplateDonasi from "../component/header_tamplate"
+
+export default function LayoutCreateDonasi({children}: {children: React.ReactNode}){
+ return<>
+ }>
+ {children}
+
+
+ >
+}
\ No newline at end of file
diff --git a/src/app_modules/donasi/detail/detail_donasi_saya/index.tsx b/src/app_modules/donasi/detail/detail_donasi_saya/index.tsx
new file mode 100644
index 00000000..46bbea76
--- /dev/null
+++ b/src/app_modules/donasi/detail/detail_donasi_saya/index.tsx
@@ -0,0 +1,159 @@
+"use client";
+
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import { ActionIcon, AspectRatio, Avatar, Divider, Grid, Group, Image, Paper, Progress, Stack, Text, Title } from "@mantine/core";
+import { IconClover, IconMessageChatbot, IconMoneybag, IconCircleChevronRight } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import BoxInformasiDonasi from "../../component/box_informasi";
+
+export default function DetailDonasiSaya() {
+ return (
+ <>
+
+
+ Donasi Saya:
+
+ Rp. 100.000
+
+
+
+
+
+
+ >
+ );
+}
+
+function DetailDonasi() {
+ const router = useRouter();
+ return (
+ <>
+
+
+
+
+
+
+
+ Judul Donasi
+
+
+
+ Dana dibutuhkan
+
+ Rp. 50.000.000
+
+
+
+ Sisa hari{" "}
+
+ 100
+ {" "}
+
+
+
+
+
+ router.push(RouterDonasi.donatur)}
+ >
+
+
+
+ 50
+
+ Donatur
+
+
+
+ router.push(RouterDonasi.kabar)}
+ >
+
+
+ Kabar Terbaru
+
+
+
+ router.push(RouterDonasi.pencairan_dana)}
+ >
+
+
+ Pencairan Dana
+
+
+
+
+
+ >
+ );
+}
+
+function InformasiPenggalangDana() {
+ const router = useRouter();
+ return (
+ <>
+
+ Informasi Penggalang Dana
+
+
+
+ Penggalang Dana
+ router.push(RouterDonasi.penggalang_dana)}
+ >
+
+
+
+
+
+ U
+
+ Username
+
+
+
+
+
+ >
+ );
+}
+
+function CeritaPenggalangDana() {
+ const router = useRouter();
+ return (
+ <>
+
+ Cerita Penggalang Dana
+
+
+
+ 1 Des 2023
+ router.push(RouterDonasi.cerita_penggalang)}
+ >
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fugiat
+ doloremque perferendis laborum? Cupiditate sed consequatur quasi
+ doloremque, consequuntur libero? Vel nam esse fuga, sed et
+ repellat commodi nemo quia dignissimos?
+
+ {/* Baca selengkapnya */}
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/detail/detail_donasi_saya/layout.tsx b/src/app_modules/donasi/detail/detail_donasi_saya/layout.tsx
new file mode 100644
index 00000000..6989d042
--- /dev/null
+++ b/src/app_modules/donasi/detail/detail_donasi_saya/layout.tsx
@@ -0,0 +1,15 @@
+"use client"
+
+import { AppShell } from "@mantine/core"
+import React from "react"
+import HeaderTamplateDonasi from "../../component/header_tamplate"
+
+export default function LayoutDetailDonasiSaya({children}: {children: React.ReactNode}){
+ return<>
+ }
+ >
+ {children}
+
+ >
+}
\ No newline at end of file
diff --git a/src/app_modules/donasi/detail/detail_draft/index.tsx b/src/app_modules/donasi/detail/detail_draft/index.tsx
new file mode 100644
index 00000000..9db7650a
--- /dev/null
+++ b/src/app_modules/donasi/detail/detail_draft/index.tsx
@@ -0,0 +1,132 @@
+"use client";
+
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import {
+ Stack,
+ AspectRatio,
+ Paper,
+ Title,
+ Progress,
+ Grid,
+ Group,
+ Divider,
+ ActionIcon,
+ Avatar,
+ Text,
+ Image,
+ Button,
+} from "@mantine/core";
+import {
+ IconClover,
+ IconMail,
+ IconMoneybag,
+ IconCircleChevronRight,
+ IconMessageChatbot,
+} from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import BoxInformasiDonasi from "../../component/box_informasi";
+import { useAtom } from "jotai";
+import { gs_donasi_tabs_posting } from "../../global_state";
+import { MODEL_DONASI } from "../../model/interface";
+import { useState } from "react";
+import TampilanRupiahDonasi from "../../component/tampilan_rupiah";
+import ComponentCeritaPenggalangDanaDonasi from "../../component/detail_main/cerita_penggalang";
+import { Donasi_funGantiStatus } from "../../fun/update/fun_ganti_status";
+import { NotifBerhasil } from "../../component/notifikasi/notif_berhasil";
+import { NotifPeringatan } from "../../component/notifikasi/notif_peringatan";
+import { useShallowEffect } from "@mantine/hooks";
+
+export default function DetailDraftDonasi({
+ dataDonasi,
+}: {
+ dataDonasi: MODEL_DONASI;
+}) {
+ return (
+ <>
+
+
+
+
+
+ >
+ );
+}
+
+function ButtonAjukanPenggalangan({
+ dataDonasi,
+}: {
+ dataDonasi: MODEL_DONASI;
+}) {
+ const router = useRouter();
+ const [tabsPostingDonasi, setTabsPostingDonasi] = useAtom(
+ gs_donasi_tabs_posting
+ );
+ async function onCLick() {
+ await Donasi_funGantiStatus(dataDonasi.id, "2").then((res) => {
+ if (res.status === 200) {
+ router.push(RouterDonasi.main_galang_dana);
+ setTabsPostingDonasi("Review");
+ NotifBerhasil("Berhasil Diajukan");
+ } else {
+ NotifPeringatan(res.message);
+ }
+ });
+ }
+ return (
+ <>
+ onCLick()}
+ >
+ Ajukan Penggalangan Dana
+
+ >
+ );
+}
+
+function DetailDonasi({ dataDonasi }: { dataDonasi: MODEL_DONASI }) {
+ const [donasi, setDonasi] = useState(dataDonasi);
+ useShallowEffect(() => {
+ setDonasi(dataDonasi);
+ }, [dataDonasi]);
+ return (
+ <>
+
+
+
+
+
+
+
+
+ {donasi.title}
+
+ Durasi: {donasi.DonasiMaster_Durasi.name} hari
+
+
+
+
+
+ Dana dibutuhkan
+
+
+
+
+
+ Kategori
+
+ {donasi.DonasiMaster_Ketegori.name}
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/detail/detail_draft/layout.tsx b/src/app_modules/donasi/detail/detail_draft/layout.tsx
new file mode 100644
index 00000000..927a1945
--- /dev/null
+++ b/src/app_modules/donasi/detail/detail_draft/layout.tsx
@@ -0,0 +1,85 @@
+"use client";
+
+import {
+ ActionIcon,
+ AppShell,
+ Button,
+ Footer,
+ Group,
+ Header,
+ Modal,
+ Stack,
+ Title,
+} from "@mantine/core";
+import React from "react";
+import HeaderTamplateDonasi from "../../component/header_tamplate";
+import {
+ IconChevronLeft,
+ IconEdit,
+ IconMessageShare,
+} from "@tabler/icons-react";
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import { useDisclosure } from "@mantine/hooks";
+import router from "next/router";
+import { title } from "process";
+import { useRouter } from "next/navigation";
+import { data } from "autoprefixer";
+
+export default function LayoutDetailDraftDonasi({
+ children,
+ donasiId
+}: {
+ children: React.ReactNode;
+ donasiId: string
+}) {
+ const [opened, { open, close }] = useDisclosure(false);
+ const router = useRouter();
+ return (
+ <>
+
+
+ {
+ router.back();
+ }}
+ >
+
+
+ Detail Draft
+ open()}>
+
+
+
+
+ }
+ >
+ {children}
+
+
+
+ router.push(RouterDonasi.edit_donasi + `${donasiId}`)}
+ >
+ Edit Donasi
+
+ router.push(RouterDonasi.edit_cerita_penggalang + `${donasiId}`)}
+ >
+ Edit Cerita
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/detail/detail_kabar/index.tsx b/src/app_modules/donasi/detail/detail_kabar/index.tsx
new file mode 100644
index 00000000..bf747081
--- /dev/null
+++ b/src/app_modules/donasi/detail/detail_kabar/index.tsx
@@ -0,0 +1,52 @@
+"use client";
+
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import {
+ Paper,
+ Stack,
+ Group,
+ Avatar,
+ Title,
+ Text,
+ AspectRatio,
+ Image,
+ Divider,
+} from "@mantine/core";
+import moment from "moment";
+
+export default function DetailKabarDonasi() {
+ return (
+ <>
+
+
+
+
+ Username
+ {moment(Date.now()).format("ll")}
+
+
+
+ Judul Berita
+
+
+
+ Lorem ipsum, dolor sit amet consectetur adipisicing elit. Aliquam
+ nostrum vitae eum facilis similique minus exercitationem assumenda,
+ quidem dolores illum ducimus fuga rem molestias? Numquam id
+ praesentium dolor qui amet.
+
+
+
+
+
+
+ Lorem ipsum, dolor sit amet consectetur adipisicing elit. Aliquam
+ nostrum vitae eum facilis similique minus exercitationem assumenda,
+ quidem dolores illum ducimus fuga rem molestias? Numquam id
+ praesentium dolor qui amet.
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/detail/detail_kabar/layout.tsx b/src/app_modules/donasi/detail/detail_kabar/layout.tsx
new file mode 100644
index 00000000..c55fdb25
--- /dev/null
+++ b/src/app_modules/donasi/detail/detail_kabar/layout.tsx
@@ -0,0 +1,32 @@
+"use client";
+
+import {
+ AppShell,
+ Button,
+ Center,
+ Divider,
+ Footer,
+ Header,
+} from "@mantine/core";
+import { useRouter } from "next/navigation";
+import React from "react";
+import FooterDonasi from "../../component/footer_close_donasi";
+import HeaderTamplateDonasi from "../../component/header_tamplate";
+
+export default function LayoutDetailKabarDonasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ const router = useRouter();
+ return (
+ <>
+ }
+ footer={ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/detail/detail_main/cerita_penggalang/index.tsx b/src/app_modules/donasi/detail/detail_main/cerita_penggalang/index.tsx
new file mode 100644
index 00000000..e9c6681a
--- /dev/null
+++ b/src/app_modules/donasi/detail/detail_main/cerita_penggalang/index.tsx
@@ -0,0 +1,30 @@
+"use client";
+
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import { MODEL_CERITA_DONASI } from "@/app_modules/donasi/model/interface";
+import { Box, Image, Stack, Text } from "@mantine/core";
+import moment from "moment";
+import { useState } from "react";
+
+export default function CeritaPenggalangDonasi({
+ dataCerita,
+}: {
+ dataCerita: MODEL_CERITA_DONASI;
+}) {
+ const [data, setData] = useState(dataCerita);
+ return (
+ <>
+ {/* {JSON.stringify(data.imageCeritaDonasi, null, 2)} */}
+
+ {moment(data.createdAt).format("ll")}
+ #HaloOrangBaik
+ {data.pembukaan}
+
+ {data.cerita}
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/detail/detail_main/cerita_penggalang/layout.tsx b/src/app_modules/donasi/detail/detail_main/cerita_penggalang/layout.tsx
new file mode 100644
index 00000000..31758e38
--- /dev/null
+++ b/src/app_modules/donasi/detail/detail_main/cerita_penggalang/layout.tsx
@@ -0,0 +1,35 @@
+"use client";
+
+import ButtonDonasi from "@/app_modules/donasi/component/footer_button_donasi";
+import FooterDonasi from "@/app_modules/donasi/component/footer_close_donasi";
+import HeaderTamplateDonasi from "@/app_modules/donasi/component/header_tamplate";
+import { AppShell } from "@mantine/core";
+import React from "react";
+
+export default function LayoutCeritaPenggalangDonasi({
+ children,
+ statusDonasiId,
+}: {
+ children: React.ReactNode;
+ statusDonasiId: string;
+}) {
+ if (statusDonasiId !== "1") {
+ return (
+ <>
+ }
+ >
+ {children}
+
+ >
+ );
+ }
+ return (
+ }
+ footer={ }
+ >
+ {children}
+
+ );
+}
diff --git a/src/app_modules/donasi/detail/detail_main/donatur/index.tsx b/src/app_modules/donasi/detail/detail_main/donatur/index.tsx
new file mode 100644
index 00000000..f5cbc8d7
--- /dev/null
+++ b/src/app_modules/donasi/detail/detail_main/donatur/index.tsx
@@ -0,0 +1,57 @@
+"use client";
+
+import {
+ Avatar,
+ Center,
+ Grid,
+ Group,
+ Paper,
+ SimpleGrid,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import { size } from "lodash";
+import moment from "moment";
+
+export default function DonaturDonasi() {
+ return (
+ <>
+
+ {Array(10)
+ .fill(0)
+ .map((e, i) => (
+
+
+
+
+
+
+
+
+
+ Orang Baik
+
+ Berdonasi sebesar
+
+ Rp. 50.000
+
+
+ {moment(Date.now()).format("ll")}
+
+
+
+
+ ))}
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/detail/detail_main/donatur/layout.tsx b/src/app_modules/donasi/detail/detail_main/donatur/layout.tsx
new file mode 100644
index 00000000..d274bbb6
--- /dev/null
+++ b/src/app_modules/donasi/detail/detail_main/donatur/layout.tsx
@@ -0,0 +1,19 @@
+"use client";
+
+import { AppShell } from "@mantine/core";
+import React from "react";
+import HeaderTamplateDonasi from "../../../component/header_tamplate";
+
+export default function LayoutDonaturDonasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ }>
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/detail/detail_main/index.tsx b/src/app_modules/donasi/detail/detail_main/index.tsx
new file mode 100644
index 00000000..8c9ac395
--- /dev/null
+++ b/src/app_modules/donasi/detail/detail_main/index.tsx
@@ -0,0 +1,171 @@
+"use client";
+
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import {
+ ActionIcon,
+ AspectRatio,
+ Avatar,
+ Badge,
+ Button,
+ Center,
+ Divider,
+ Grid,
+ Group,
+ Image,
+ Paper,
+ Progress,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import {
+ IconCircleChevronRight,
+ IconClover,
+ IconMail,
+ IconMailAi,
+ IconMessageChatbot,
+ IconMoneybag,
+} from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import BoxInformasiDonasi from "../../component/box_informasi";
+
+export default function DetailMainDonasi() {
+ return (
+ <>
+
+
+
+
+
+ >
+ );
+}
+
+function DetailDonasi() {
+ const router = useRouter();
+ return (
+ <>
+
+
+
+
+
+
+
+ Judul Donasi
+
+
+
+ Dana dibutuhkan
+
+ Rp. 50.000.000
+
+
+ Sisa hari 100
+
+
+
+
+ router.push(RouterDonasi.donatur)}
+ >
+
+
+
+ 50
+
+ Donatur
+
+
+
+ router.push(RouterDonasi.kabar)}
+ >
+
+
+ Kabar Terbaru
+
+
+
+ router.push(RouterDonasi.pencairan_dana)}
+ >
+
+
+ Pencairan Dana
+
+
+
+
+
+ >
+ );
+}
+
+function InformasiPenggalangDana() {
+ const router = useRouter();
+ return (
+ <>
+
+ Informasi Penggalang Dana
+
+
+
+ Penggalang Dana
+ router.push(RouterDonasi.penggalang_dana)}
+ >
+
+
+
+
+
+ U
+
+ Username
+
+
+
+
+
+ >
+ );
+}
+
+function CeritaPenggalangDana() {
+ const router = useRouter();
+ return (
+ <>
+
+ Cerita Penggalang Dana
+
+
+
+ 1 Des 2023
+ router.push(RouterDonasi.cerita_penggalang)}
+ >
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fugiat
+ doloremque perferendis laborum? Cupiditate sed consequatur quasi
+ doloremque, consequuntur libero? Vel nam esse fuga, sed et
+ repellat commodi nemo quia dignissimos?
+
+ {/* Baca selengkapnya */}
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/detail/detail_main/kabar/index.tsx b/src/app_modules/donasi/detail/detail_main/kabar/index.tsx
new file mode 100644
index 00000000..1284ab5f
--- /dev/null
+++ b/src/app_modules/donasi/detail/detail_main/kabar/index.tsx
@@ -0,0 +1,62 @@
+"use client";
+
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import {
+ ActionIcon,
+ Avatar,
+ Group,
+ Paper,
+ SimpleGrid,
+ Spoiler,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import { IconCircleChevronRight } from "@tabler/icons-react";
+import moment from "moment";
+import { useRouter } from "next/navigation";
+
+export default function KabarDonasi() {
+ const router = useRouter()
+ return (
+ <>
+
+ {Array(4)
+ .fill(0)
+ .map((e, i) => (
+
+
+
+
+
+ Username
+ {moment(Date.now()).format("ll")}
+
+
+
+ Judul Kabar
+
+
+ Lorem ipsum, dolor sit amet consectetur adipisicing elit.
+ Aliquam nostrum vitae eum facilis similique minus
+ exercitationem assumenda, quidem dolores illum ducimus
+ fuga rem molestias? Numquam id praesentium dolor qui amet.
+
+ router.push(RouterDonasi.detail_kabar)}>Buka Kabar
+
+
+
+
+ ))}
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/detail/detail_main/kabar/layout.tsx b/src/app_modules/donasi/detail/detail_main/kabar/layout.tsx
new file mode 100644
index 00000000..c7ae2cca
--- /dev/null
+++ b/src/app_modules/donasi/detail/detail_main/kabar/layout.tsx
@@ -0,0 +1,16 @@
+"use client"
+
+import { AppShell } from "@mantine/core"
+import React from "react"
+import HeaderTamplateDonasi from "../../../component/header_tamplate"
+
+export default function LayoutKabarDonasi({children}: {children: React.ReactNode}){
+ return<>
+ }
+ >
+ {children}
+
+
+ >
+}
\ No newline at end of file
diff --git a/src/app_modules/donasi/detail/detail_main/layout.tsx b/src/app_modules/donasi/detail/detail_main/layout.tsx
new file mode 100644
index 00000000..2d7872d9
--- /dev/null
+++ b/src/app_modules/donasi/detail/detail_main/layout.tsx
@@ -0,0 +1,23 @@
+"use client";
+
+import { AppShell, Box, Button, Center, Footer } from "@mantine/core";
+import React from "react";
+import HeaderTamplateDonasi from "../../component/header_tamplate";
+import ButtonDonasi from "../../component/footer_button_donasi";
+
+export default function LayoutDetailMainDonasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ }
+ footer={ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/detail/detail_main/masukan_donasi/index.tsx b/src/app_modules/donasi/detail/detail_main/masukan_donasi/index.tsx
new file mode 100644
index 00000000..8708ebda
--- /dev/null
+++ b/src/app_modules/donasi/detail/detail_main/masukan_donasi/index.tsx
@@ -0,0 +1,93 @@
+"use client";
+
+import {
+ Box,
+ Button,
+ Grid,
+ Group,
+ Paper,
+ Stack,
+ Text,
+ TextInput,
+ Title,
+} from "@mantine/core";
+import {
+ IconChevronRight,
+ IconMoodSmile,
+ IconMoodSmileBeam,
+ IconMoodSmileDizzy,
+ IconMoodXd,
+} from "@tabler/icons-react";
+
+export default function MasukanDonasi() {
+ const listNominal = [
+ {
+ id: 1,
+ nominal: 25000,
+ icon: ,
+ },
+ {
+ id: 2,
+ nominal: 50000,
+ icon: ,
+ },
+ {
+ id: 3,
+ nominal: 75000,
+ icon: ,
+ },
+ {
+ id: 4,
+ nominal: 10000,
+ icon: ,
+ },
+ ];
+ return (
+ <>
+
+
+ {listNominal.map((e) => (
+
+
+
+ {e.icon}
+
+ Rp.{" "}
+ {new Intl.NumberFormat("id-ID", {
+ maximumFractionDigits: 10,
+ }).format(e.nominal)}
+
+
+
+
+
+ ))}
+
+
+
+ Nominal Lainnya
+
+
+ Rp.
+
+
+
+
+
+
+ Minimal Donasi Rp. 10.000
+
+
+
+ Lanjutan Pembayaran
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/detail/detail_main/masukan_donasi/layout.tsx b/src/app_modules/donasi/detail/detail_main/masukan_donasi/layout.tsx
new file mode 100644
index 00000000..66a5a8de
--- /dev/null
+++ b/src/app_modules/donasi/detail/detail_main/masukan_donasi/layout.tsx
@@ -0,0 +1,21 @@
+"use client";
+
+import { AppShell } from "@mantine/core";
+import React from "react";
+import HeaderTamplateDonasi from "../../../component/header_tamplate";
+
+export default function LayoutMasukanDonasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/detail/detail_main/pencairan_dana/index.tsx b/src/app_modules/donasi/detail/detail_main/pencairan_dana/index.tsx
new file mode 100644
index 00000000..68bd09f5
--- /dev/null
+++ b/src/app_modules/donasi/detail/detail_main/pencairan_dana/index.tsx
@@ -0,0 +1,102 @@
+"use client";
+
+import BoxInformasiDonasi from "@/app_modules/donasi/component/box_informasi";
+import {
+ Avatar,
+ Button,
+ Center,
+ Grid,
+ Group,
+ Image,
+ Modal,
+ Paper,
+ Spoiler,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import { useDisclosure } from "@mantine/hooks";
+import { IconTransferIn } from "@tabler/icons-react";
+import moment from "moment";
+
+export default function PencairanDanaDonasi() {
+ return (
+ <>
+
+
+
+
+ >
+ );
+}
+
+function BoxDanaDicarikan() {
+ return (
+ <>
+
+
+
+
+ Rp. 10.000.000
+ Dana sudah dicairkan
+
+
+ 2 kali
+ Pencairan dana
+
+
+
+
+
+ >
+ );
+}
+
+function InformasiPencairanDana() {
+ const [opened, { open, close }] = useDisclosure(false);
+ return (
+ <>
+
+
+
+
+ Bukti Pencairan Dana
+
+
+
+
+
+ {Array(2)
+ .fill(0)
+ .map((e, i) => (
+
+ {moment(Date.now()).format("ll")}
+
+ Pencairan Dana Sebesar Rp. 5.000.000
+
+ Pencairan Dana kepada pihak Penggalang dana sebesar 5 juta yang
+ di transfer pada, {moment(Date.now()).format("lll")}.
+
+
+ }
+ onClick={() => open()}
+ >
+ Bukti Transfer
+
+
+
+
+ ))}
+ >
+ );
+}
diff --git a/src/app_modules/donasi/detail/detail_main/pencairan_dana/layout.tsx b/src/app_modules/donasi/detail/detail_main/pencairan_dana/layout.tsx
new file mode 100644
index 00000000..b9b89359
--- /dev/null
+++ b/src/app_modules/donasi/detail/detail_main/pencairan_dana/layout.tsx
@@ -0,0 +1,19 @@
+"use client";
+
+import HeaderTamplateDonasi from "@/app_modules/donasi/component/header_tamplate";
+import { AppShell } from "@mantine/core";
+import React from "react";
+
+export default function LayoutPencairanDanaDonasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ }>
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/detail/detail_main/penggalang_dana/index.tsx b/src/app_modules/donasi/detail/detail_main/penggalang_dana/index.tsx
new file mode 100644
index 00000000..9c68ca61
--- /dev/null
+++ b/src/app_modules/donasi/detail/detail_main/penggalang_dana/index.tsx
@@ -0,0 +1,140 @@
+"use client";
+
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import {
+ AspectRatio,
+ Avatar,
+ Box,
+ Center,
+ Divider,
+ Grid,
+ Group,
+ Image,
+ Paper,
+ Progress,
+ SimpleGrid,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import { useViewportSize } from "@mantine/hooks";
+import {
+ IconBrandGmail,
+ IconHome,
+ IconMoodSmile,
+ IconPhone,
+ IconRecordMail,
+} from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import router from "next/router";
+
+export default function PenggalangDanaDonasi() {
+ return (
+ <>
+
+
+
+
+ >
+ );
+}
+
+function InformasiPenggalang() {
+ return (
+ <>
+
+
+
+
+
+
+
+
+ @Username
+
+
+
+
+ Nama Penggalang Dana
+
+
+
+ +62 81x xxx xxx
+
+
+
+ user1@gmail.com
+
+
+
+
+ >
+ );
+}
+
+function DataPengganganDana() {
+ const router = useRouter();
+ const { height, width } = useViewportSize();
+ return (
+ <>
+ Peggalangan Dana Yang Dilakukan
+
+
+ {Array(5)
+ .fill(0)
+ .map((e, i) => (
+ router.push(RouterDonasi.detail_main)}>
+
+
+
+
+
+
+
+
+
+
+
+
+ Judul Donasi Bisa Dilihat Disini Untuk Contoh
+
+
+
+ Terkumpul
+
+ Rp. 100.000.000
+
+
+
+
+
+ {width > 575 ? "" : }
+
+
+ ))}
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/detail/detail_main/penggalang_dana/layout.tsx b/src/app_modules/donasi/detail/detail_main/penggalang_dana/layout.tsx
new file mode 100644
index 00000000..bc0360df
--- /dev/null
+++ b/src/app_modules/donasi/detail/detail_main/penggalang_dana/layout.tsx
@@ -0,0 +1,22 @@
+"use client";
+
+import HeaderTamplateDonasi from "@/app_modules/donasi/component/header_tamplate";
+import { AppShell } from "@mantine/core";
+import React from "react";
+
+export default function LayoutPenggalangDanaDonasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ }
+ // footer={ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/detail/detail_publish/index.tsx b/src/app_modules/donasi/detail/detail_publish/index.tsx
new file mode 100644
index 00000000..adc04a6f
--- /dev/null
+++ b/src/app_modules/donasi/detail/detail_publish/index.tsx
@@ -0,0 +1,167 @@
+"use client";
+
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import {
+ Stack,
+ AspectRatio,
+ Paper,
+ Title,
+ Progress,
+ Grid,
+ Group,
+ Divider,
+ ActionIcon,
+ Avatar,
+ Text,
+ Image,
+} from "@mantine/core";
+import {
+ IconClover,
+ IconMail,
+ IconMoneybag,
+ IconCircleChevronRight,
+ IconMessageChatbot,
+} from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import BoxInformasiDonasi from "../../component/box_informasi";
+
+export default function DetailPublishDonasi() {
+ return (
+ <>
+
+
+
+
+
+ >
+ );
+}
+
+function DetailDonasi() {
+ const router = useRouter();
+ return (
+ <>
+
+
+
+
+
+
+
+ Judul Donasi
+
+
+
+ Dana dibutuhkan
+
+ Rp. 50.000.000
+
+
+ Sisa hari 100
+
+
+
+
+ router.push(RouterDonasi.donatur)}
+ >
+
+
+
+ 50
+
+ Donatur
+
+
+
+ router.push(RouterDonasi.kabar)}
+ >
+
+
+ Kabar Terbaru
+
+
+
+ router.push(RouterDonasi.pencairan_dana)}
+ >
+
+
+ Pencairan Dana
+
+
+
+
+
+ >
+ );
+}
+
+function InformasiPenggalangDana() {
+ const router = useRouter();
+ return (
+ <>
+
+ Informasi Penggalang Dana
+
+
+
+ Penggalang Dana
+ router.push(RouterDonasi.penggalang_dana)}
+ >
+
+
+
+
+
+ U
+
+ Username
+
+
+
+
+
+ >
+ );
+}
+
+function CeritaPenggalangDana() {
+ const router = useRouter();
+ return (
+ <>
+
+ Cerita Penggalang Dana
+
+
+
+ 1 Des 2023
+ router.push(RouterDonasi.cerita_penggalang)}
+ >
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fugiat
+ doloremque perferendis laborum? Cupiditate sed consequatur quasi
+ doloremque, consequuntur libero? Vel nam esse fuga, sed et
+ repellat commodi nemo quia dignissimos?
+
+ {/* Baca selengkapnya */}
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/detail/detail_publish/layout.tsx b/src/app_modules/donasi/detail/detail_publish/layout.tsx
new file mode 100644
index 00000000..29f7012d
--- /dev/null
+++ b/src/app_modules/donasi/detail/detail_publish/layout.tsx
@@ -0,0 +1,21 @@
+"use client";
+
+import { AppShell } from "@mantine/core";
+import React from "react";
+import HeaderTamplateDonasi from "../../component/header_tamplate";
+import { IconEdit, IconMessageShare } from "@tabler/icons-react";
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+
+export default function LayoutDetailPublishDonasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ } route2={RouterDonasi.list_kabar} />}>
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/detail/detail_reject/index.tsx b/src/app_modules/donasi/detail/detail_reject/index.tsx
new file mode 100644
index 00000000..c325e9f8
--- /dev/null
+++ b/src/app_modules/donasi/detail/detail_reject/index.tsx
@@ -0,0 +1,209 @@
+"use client";
+
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import {
+ Stack,
+ AspectRatio,
+ Paper,
+ Title,
+ Progress,
+ Grid,
+ Group,
+ Divider,
+ ActionIcon,
+ Avatar,
+ Text,
+ Image,
+ Button,
+ Spoiler,
+ Modal,
+} from "@mantine/core";
+import {
+ IconClover,
+ IconMail,
+ IconMoneybag,
+ IconCircleChevronRight,
+ IconMessageChatbot,
+} from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import BoxInformasiDonasi from "../../component/box_informasi";
+import { useAtom } from "jotai";
+import { gs_donasi_tabs_posting } from "../../global_state";
+import { useDisclosure } from "@mantine/hooks";
+
+export default function DetailRejectDonasi() {
+ return (
+ <>
+
+
+
+ {/* */}
+
+
+
+ >
+ );
+}
+
+function ButtonAction() {
+ const [tabsPostingDonasi, setTabsPostingDonasi] = useAtom(
+ gs_donasi_tabs_posting
+ );
+ const router = useRouter();
+ const [opened, { open, close }] = useDisclosure(false);
+
+ async function onCLick() {
+ router.push(RouterDonasi.main_galang_dana);
+ setTabsPostingDonasi("Draft");
+ }
+ async function onDelete() {
+ router.push(RouterDonasi.main_galang_dana);
+ setTabsPostingDonasi("Reject");
+ }
+ return (
+ <>
+
+ onCLick()}
+ >
+ Ajukan Kembali
+
+ open()}>
+ Hapus Donasi
+
+
+
+
+
+ Batal
+
+ onDelete()}>
+ Hapus
+
+
+
+ >
+ );
+}
+
+function AlasanPenolakan() {
+ return (
+ <>
+
+ Alasan penolakan
+
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Veniam id
+ explicabo accusantium consequatur natus ex nisi perferendis rem
+ deserunt illo exercitationem illum doloremque, maxime voluptatibus
+ nihil rerum provident et? Nobis.
+
+
+ >
+ );
+}
+
+function DetailDonasi() {
+ const router = useRouter();
+ return (
+ <>
+
+
+
+
+
+
+
+ Judul Donasi
+
+
+
+ Dana dibutuhkan
+
+ Rp. 50.000.000
+
+
+
+ Kategori
+
+ Kesehatan
+
+
+
+
+
+
+ >
+ );
+}
+
+function InformasiPenggalangDana() {
+ const router = useRouter();
+ return (
+ <>
+
+ Informasi Penggalang Dana
+
+
+
+ Penggalang Dana
+ router.push(RouterDonasi.penggalang_dana)}
+ >
+
+
+
+
+
+ U
+
+ Username
+
+
+
+
+
+ >
+ );
+}
+
+function CeritaPenggalangDana() {
+ const router = useRouter();
+ return (
+ <>
+
+ Cerita Penggalang Dana
+
+
+
+ 1 Des 2023
+ router.push(RouterDonasi.cerita_penggalang)}
+ >
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fugiat
+ doloremque perferendis laborum? Cupiditate sed consequatur quasi
+ doloremque, consequuntur libero? Vel nam esse fuga, sed et
+ repellat commodi nemo quia dignissimos?
+
+ {/* Baca selengkapnya */}
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/detail/detail_reject/layout.tsx b/src/app_modules/donasi/detail/detail_reject/layout.tsx
new file mode 100644
index 00000000..e73ce477
--- /dev/null
+++ b/src/app_modules/donasi/detail/detail_reject/layout.tsx
@@ -0,0 +1,22 @@
+"use client";
+
+import { AppShell } from "@mantine/core";
+import React from "react";
+import HeaderTamplateDonasi from "../../component/header_tamplate";
+import { IconEdit, IconMessageShare } from "@tabler/icons-react";
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+
+export default function LayoutDetailRejectDonasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+
+ return (
+ <>
+ }>
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/detail/detail_review/index.tsx b/src/app_modules/donasi/detail/detail_review/index.tsx
new file mode 100644
index 00000000..544f1cf7
--- /dev/null
+++ b/src/app_modules/donasi/detail/detail_review/index.tsx
@@ -0,0 +1,121 @@
+"use client";
+
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import {
+ Stack,
+ AspectRatio,
+ Paper,
+ Title,
+ Progress,
+ Grid,
+ Group,
+ Divider,
+ ActionIcon,
+ Avatar,
+ Text,
+ Image,
+ Button,
+} from "@mantine/core";
+import {
+ IconClover,
+ IconMail,
+ IconMoneybag,
+ IconCircleChevronRight,
+ IconMessageChatbot,
+} from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import BoxInformasiDonasi from "../../component/box_informasi";
+import { useAtom } from "jotai";
+import { gs_donasi_tabs_posting } from "../../global_state";
+import { MODEL_DONASI } from "../../model/interface";
+import { useState } from "react";
+import TampilanRupiahDonasi from "../../component/tampilan_rupiah";
+import ComponentCeritaPenggalangDanaDonasi from "../../component/detail_main/cerita_penggalang";
+import { Donasi_funGantiStatus } from "../../fun/update/fun_ganti_status";
+import { NotifPeringatan } from "../../component/notifikasi/notif_peringatan";
+import { NotifBerhasil } from "../../component/notifikasi/notif_berhasil";
+
+export default function DetailReviewDonasi({
+ dataDonasi,
+}: {
+ dataDonasi: MODEL_DONASI;
+}) {
+ const [donasi, setDonasi] = useState(dataDonasi);
+ return (
+ <>
+
+
+
+
+
+ >
+ );
+}
+
+function ButtonBatalReview({ donasi }: { donasi: MODEL_DONASI }) {
+ const router = useRouter();
+ const [tabsPostingDonasi, setTabsPostingDonasi] = useAtom(
+ gs_donasi_tabs_posting
+ );
+
+ async function onCLick() {
+ await Donasi_funGantiStatus(donasi.id, "3").then((res) => {
+ if (res.status === 200) {
+ router.push(RouterDonasi.main_galang_dana);
+ setTabsPostingDonasi("Draft");
+ NotifBerhasil("Berhasil Dibatalkan");
+ } else {
+ NotifPeringatan(res.message);
+ }
+ });
+ }
+ return (
+ <>
+ onCLick()}>
+ Batalkan Review
+
+ >
+ );
+}
+
+function DetailDonasi({ donasi }: { donasi: MODEL_DONASI }) {
+ const router = useRouter();
+ return (
+ <>
+
+
+
+
+
+
+
+
+ {donasi.title}
+
+ Durasi: {donasi.DonasiMaster_Durasi.name} hari
+
+
+
+
+
+ Dana dibutuhkan
+
+
+
+
+
+ Kategori
+
+ {donasi.DonasiMaster_Ketegori.name}
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/detail/detail_review/layout.tsx b/src/app_modules/donasi/detail/detail_review/layout.tsx
new file mode 100644
index 00000000..df67b33d
--- /dev/null
+++ b/src/app_modules/donasi/detail/detail_review/layout.tsx
@@ -0,0 +1,22 @@
+"use client";
+
+import { AppShell } from "@mantine/core";
+import React from "react";
+import HeaderTamplateDonasi from "../../component/header_tamplate";
+import { IconEdit, IconMessageShare } from "@tabler/icons-react";
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+
+export default function LayoutDetailReviewDonasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+
+ return (
+ <>
+ }>
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/edit/edit_cerita_penggalang/index.tsx b/src/app_modules/donasi/edit/edit_cerita_penggalang/index.tsx
new file mode 100644
index 00000000..08e2428e
--- /dev/null
+++ b/src/app_modules/donasi/edit/edit_cerita_penggalang/index.tsx
@@ -0,0 +1,157 @@
+"use client";
+
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import {
+ AspectRatio,
+ Button,
+ Center,
+ FileButton,
+ Image,
+ Paper,
+ Stack,
+ Textarea,
+} from "@mantine/core";
+import { IconCamera } from "@tabler/icons-react";
+import { useAtom } from "jotai";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import { gs_donasi_tabs_posting } from "../../global_state";
+import toast from "react-simple-toasts";
+import { MODEL_CERITA_DONASI } from "../../model/interface";
+import { NotifPeringatan } from "../../component/notifikasi/notif_peringatan";
+import _ from "lodash";
+import { Donasi_funUpdateCerita } from "../../fun/update/fun_update_cerita_donasi";
+import { NotifBerhasil } from "../../component/notifikasi/notif_berhasil";
+
+export default function EditCeritaPenggalangDonasi({
+ dataCerita,
+}: {
+ dataCerita: MODEL_CERITA_DONASI;
+}) {
+ const router = useRouter();
+ const [tabsPostingDonasi, setTabsPostingDonasi] = useAtom(
+ gs_donasi_tabs_posting
+ );
+ const [value, setValue] = useState(dataCerita);
+ const [file, setFile] = useState(null);
+ const [updateImage, setUpdateImage] = useState();
+
+ return (
+ <>
+ {/* {JSON.stringify(value, null, 2)} */}
+
+
+ setValue({
+ ...value,
+ pembukaan: val.target.value,
+ })
+ }
+ />
+
+
+
+ {
+ try {
+ const buffer = URL.createObjectURL(
+ new Blob([new Uint8Array(await files.arrayBuffer())])
+ );
+ setUpdateImage(buffer);
+ setFile(files);
+ } catch (error) {
+ console.log(error);
+ }
+ }}
+ accept="image/png,image/jpeg"
+ >
+ {(props) => (
+ }
+ >
+ Upload
+
+ )}
+
+
+
+
+
+
+
+
+
+
+ setValue({
+ ...value,
+ cerita: val.target.value,
+ })
+ }
+ />
+
+ onUpdate(router, value, file as any)}
+ >
+ Simpan
+
+
+ {/* {JSON.stringify(value.pembukaan, null, 2)} */}
+ >
+ );
+}
+
+async function onUpdate(
+ router: any,
+ value: MODEL_CERITA_DONASI,
+ file: FormData
+) {
+ // router.back();
+ const body = {
+ id: value.id,
+ pembukaan: value.pembukaan,
+ cerita: value.cerita,
+ imagesId: value.imageCeritaDonasi.id
+ };
+
+ const gambar = new FormData();
+ gambar.append("file", file as any);
+
+ if (_.values(body).includes("")) return NotifPeringatan("Lengkapi Data");
+ await Donasi_funUpdateCerita(body as any,gambar).then((res) => {
+ if (res.status === 200) {
+ NotifBerhasil(res.message);
+ router.back();
+ } else {
+ toast(res.message);
+ }
+ });
+}
diff --git a/src/app_modules/donasi/edit/edit_cerita_penggalang/layout.tsx b/src/app_modules/donasi/edit/edit_cerita_penggalang/layout.tsx
new file mode 100644
index 00000000..5f54e8f6
--- /dev/null
+++ b/src/app_modules/donasi/edit/edit_cerita_penggalang/layout.tsx
@@ -0,0 +1,19 @@
+"use client";
+
+import { AppShell } from "@mantine/core";
+import React from "react";
+import HeaderTamplateDonasi from "../../component/header_tamplate";
+
+export default function LayoutEditCeritaPenggalangDonasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ }>
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/edit/edit_donasi/index.tsx b/src/app_modules/donasi/edit/edit_donasi/index.tsx
new file mode 100644
index 00000000..ddbab2ce
--- /dev/null
+++ b/src/app_modules/donasi/edit/edit_donasi/index.tsx
@@ -0,0 +1,218 @@
+"use client";
+
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import {
+ Stack,
+ Select,
+ AspectRatio,
+ Paper,
+ Center,
+ Button,
+ TextInput,
+ Image,
+ FileButton,
+ Modal,
+ Group,
+ Title,
+} from "@mantine/core";
+import { IconCamera } from "@tabler/icons-react";
+import { useAtom } from "jotai";
+import { useRouter } from "next/navigation";
+import { gs_donasi_tabs_posting } from "../../global_state";
+import toast from "react-simple-toasts";
+import { MODEL_DONASI, MODEL_DONASI_ALL_MASTER } from "../../model/interface";
+import { useState } from "react";
+import { Donasi_funUpdateDonasi } from "../../fun/update/fun_update_donasi";
+import { useDisclosure } from "@mantine/hooks";
+import { NotifBerhasil } from "../../component/notifikasi/notif_berhasil";
+import { NotifPeringatan } from "../../component/notifikasi/notif_peringatan";
+import _ from "lodash";
+import { Donasi_getOneById } from "../../fun/get/get_one_donasi_by_id";
+
+export default function EditDonasi({
+ dataDonasi,
+ masterKategori,
+ masterDurasi,
+}: {
+ dataDonasi: MODEL_DONASI;
+ masterKategori: MODEL_DONASI_ALL_MASTER[];
+ masterDurasi: MODEL_DONASI_ALL_MASTER[];
+}) {
+ const router = useRouter();
+ const [tabsPostingDonasi, setTabsPostingDonasi] = useAtom(
+ gs_donasi_tabs_posting
+ );
+ const [value, setValue] = useState(dataDonasi);
+ const [kategori, setKategori] = useState(masterKategori);
+ const [durasi, setDurasi] = useState(masterDurasi);
+ const [file, setFile] = useState(null);
+ const [updateImage, setUpdateImage] = useState();
+ const [opened, { open, close }] = useDisclosure(false);
+
+ return (
+ <>
+ {/* {JSON.stringify(donasi, null, 2)} */}
+
+ ({
+ value: e.id,
+ label: e.name,
+ }))}
+ onChange={(val) =>
+ setValue({
+ ...(value as any),
+ DonasiMaster_Ketegori: {
+ id: val,
+ },
+ })
+ }
+ />
+
+
+
+
+
+
+
+ {
+ try {
+ const buffer = URL.createObjectURL(
+ new Blob([new Uint8Array(await files.arrayBuffer())])
+ );
+ // console.log(buffer, "ini buffer");
+ // console.log(files, " ini file");
+ setUpdateImage(buffer);
+ setFile(files);
+ } catch (error) {
+ console.log(error);
+ }
+ }}
+ accept="image/png,image/jpeg"
+ >
+ {(props) => (
+ }
+ >
+ Upload
+
+ )}
+
+
+
+
+
+ setValue({
+ ...value,
+ title: val.target.value,
+ })
+ }
+ />
+
+ setValue({
+ ...value,
+ target: val.target.value,
+ })
+ }
+ />
+ ({
+ value: e.id,
+ label: e.name + " " + `hari`,
+ }))}
+ onChange={(val) =>
+ setValue({
+ ...(value as any),
+ DonasiMaster_Durasi: {
+ id: val,
+ },
+ })
+ }
+ />
+
+ {
+ onUpdate(value, file as any, router);
+ }}
+ >
+ Update
+
+ {/*
+
+ */}
+
+ >
+ );
+}
+
+// function ModalEdit() {
+// return (
+// <>
+//
+// Anda yakin menyimpan data ini ?
+//
+// Batal
+// Simpan
+//
+//
+
+// >
+// );
+// }
+
+async function onUpdate(value: MODEL_DONASI, file: FormData, router: any) {
+ const body = {
+ id: value.id,
+ donasiMaster_KategoriId: value.DonasiMaster_Ketegori.id,
+ donasiMaster_DurasiId: value.DonasiMaster_Durasi.id,
+ title: value.title,
+ target: value.target,
+ imagesId: value.imagesId,
+ };
+
+ const gambar = new FormData();
+ gambar.append("file", file as any);
+
+ if (_.values(body).includes("")) return NotifPeringatan("Lengkapi Data");
+
+ await Donasi_funUpdateDonasi(body as any, gambar).then((res) => {
+ if (res.status === 200) {
+ NotifBerhasil(res.message);
+ router.back();
+ } else {
+ NotifPeringatan(res.message);
+ }
+ });
+}
diff --git a/src/app_modules/donasi/edit/edit_donasi/layout.tsx b/src/app_modules/donasi/edit/edit_donasi/layout.tsx
new file mode 100644
index 00000000..5a39d408
--- /dev/null
+++ b/src/app_modules/donasi/edit/edit_donasi/layout.tsx
@@ -0,0 +1,19 @@
+"use client";
+
+import { AppShell } from "@mantine/core";
+import React from "react";
+import HeaderTamplateDonasi from "../../component/header_tamplate";
+
+export default function LayoutEditDonasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ }>
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/edit/list_kabar/index.tsx b/src/app_modules/donasi/edit/list_kabar/index.tsx
new file mode 100644
index 00000000..4e267031
--- /dev/null
+++ b/src/app_modules/donasi/edit/list_kabar/index.tsx
@@ -0,0 +1,79 @@
+"use client";
+
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import {
+ ActionIcon,
+ Avatar,
+ Button,
+ Group,
+ Paper,
+ SimpleGrid,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import {
+ IconCirclePlus,
+ IconEdit,
+ IconEditCircle,
+ IconTrash,
+} from "@tabler/icons-react";
+import moment from "moment";
+import { useRouter } from "next/navigation";
+
+export default function ListKabarDonasi() {
+ const router = useRouter();
+ return (
+ <>
+
+ } radius={"xl"}>
+ Tambah Kabar
+
+
+ {Array(4)
+ .fill(0)
+ .map((e, i) => (
+
+
+
+
+
+ Username
+ {moment(Date.now()).format("ll")}
+
+
+
+
+ Judul Kabar
+
+
+ Lorem ipsum, dolor sit amet consectetur adipisicing
+ elit. Aliquam nostrum vitae eum facilis similique minus
+ exercitationem assumenda, quidem dolores illum ducimus
+ fuga rem molestias? Numquam id praesentium dolor qui
+ amet.
+
+ router.push(RouterDonasi.update_kabar)}
+ >
+ Buka Kabar
+
+
+
+
+
+ ))}
+
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/edit/list_kabar/layout.tsx b/src/app_modules/donasi/edit/list_kabar/layout.tsx
new file mode 100644
index 00000000..371e154f
--- /dev/null
+++ b/src/app_modules/donasi/edit/list_kabar/layout.tsx
@@ -0,0 +1,20 @@
+"use client";
+
+import HeaderTamplateDonasi from "@/app_modules/donasi/component/header_tamplate";
+import { AppShell } from "@mantine/core";
+import React from "react";
+
+export default function LayoutListKabarDonasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ }>
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/edit/update_kabar/index.tsx b/src/app_modules/donasi/edit/update_kabar/index.tsx
new file mode 100644
index 00000000..f9767886
--- /dev/null
+++ b/src/app_modules/donasi/edit/update_kabar/index.tsx
@@ -0,0 +1,51 @@
+"use client";
+
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import {
+ Paper,
+ Stack,
+ Group,
+ Avatar,
+ Title,
+ Text,
+ AspectRatio,
+ Image,
+ Divider,
+} from "@mantine/core";
+import moment from "moment";
+
+export default function UpdateKabarDonasi() {
+ return (
+ <>
+
+
+
+
+ Username
+ {moment(Date.now()).format("ll")}
+
+
+
+ Judul Berita
+
+
+ Lorem ipsum, dolor sit amet consectetur adipisicing elit. Aliquam
+ nostrum vitae eum facilis similique minus exercitationem assumenda,
+ quidem dolores illum ducimus fuga rem molestias? Numquam id
+ praesentium dolor qui amet.
+
+
+
+
+
+
+ Lorem ipsum, dolor sit amet consectetur adipisicing elit. Aliquam
+ nostrum vitae eum facilis similique minus exercitationem assumenda,
+ quidem dolores illum ducimus fuga rem molestias? Numquam id
+ praesentium dolor qui amet.
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/edit/update_kabar/layout.tsx b/src/app_modules/donasi/edit/update_kabar/layout.tsx
new file mode 100644
index 00000000..477794ea
--- /dev/null
+++ b/src/app_modules/donasi/edit/update_kabar/layout.tsx
@@ -0,0 +1,44 @@
+"use client";
+
+import {
+ AppShell,
+ Button,
+ Center,
+ Divider,
+ Footer,
+ Group,
+ Header,
+} from "@mantine/core";
+import { useRouter } from "next/navigation";
+import React from "react";
+import FooterDonasi from "../../component/footer_close_donasi";
+import HeaderTamplateDonasi from "../../component/header_tamplate";
+
+export default function LayoutUpdateKabarDonasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ const router = useRouter();
+ return (
+ <>
+ }
+ footer={
+
+
+
+ Edit
+
+
+ Hapus
+
+
+
+ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/fun/create/fun_create_donasi.ts b/src/app_modules/donasi/fun/create/fun_create_donasi.ts
new file mode 100644
index 00000000..4a7b1414
--- /dev/null
+++ b/src/app_modules/donasi/fun/create/fun_create_donasi.ts
@@ -0,0 +1,72 @@
+"use server";
+
+import fs from "fs";
+import prisma from "@/app/lib/prisma";
+import { MODEL_DONASI } from "../../model/interface";
+import { Donasi_funDeleteTemporaryCreate } from "../delete/fun_delete_temporary_create";
+import { v4 } from "uuid";
+import _ from "lodash";
+import { revalidatePath } from "next/cache";
+
+export async function Donasi_funCreate(req: MODEL_DONASI, file: FormData) {
+ const body = req;
+
+ const dataDonasi = await prisma.donasi.create({
+ data: {
+ target: body.target,
+ title: body.title,
+ donasiMaster_DurasiId: body.donasiMaster_DurasiId,
+ donasiMaster_KategoriId: body.donasiMaster_KategoriId,
+ imagesId: body.imagesId,
+ authorId: body.authorId,
+ },
+ });
+
+ if (!dataDonasi) return { status: 400, message: "Gagal disimpan" };
+ await Donasi_funDeleteTemporaryCreate(body.id).then((res) => {
+ if (res.status === 200) {
+ console.log(res.message);
+ } else {
+ console.log(res.message);
+ }
+ });
+
+ const dataImage: any = file.get("file");
+ const fileName = dataImage.name;
+ const fileExtension = _.lowerCase(dataImage.name.split(".").pop());
+ const fRandomName = v4(fileName) + "." + fileExtension;
+
+ const uploadImageCerita = await prisma.images.create({
+ data: {
+ url: fRandomName,
+ },
+ select: {
+ id: true,
+ url: true,
+ },
+ });
+
+ if (!uploadImageCerita)
+ return { status: 400, message: "Gagal upload gambar" };
+ const uploadFolder = Buffer.from(await dataImage.arrayBuffer());
+ fs.writeFileSync(
+ `./public/donasi/image_cerita/${uploadImageCerita.url}`,
+ uploadFolder
+ );
+
+ const dataCerita = await prisma.donasi_Cerita.create({
+ data: {
+ donasiId: dataDonasi.id,
+ pembukaan: body.CeritaDonasi.pembukaan,
+ cerita: body.CeritaDonasi.cerita,
+ imagesId: uploadImageCerita.id,
+ },
+ });
+
+ if (!dataCerita) return { status: 400, message: "Gagal simpan data cerita" };
+ revalidatePath("/dev/donasi/main/galang_dana");
+ return {
+ status: 201,
+ message: "Data donasi tersimpan",
+ };
+}
diff --git a/src/app_modules/donasi/fun/create/fun_create_donasi_temporary.ts b/src/app_modules/donasi/fun/create/fun_create_donasi_temporary.ts
new file mode 100644
index 00000000..974e82fc
--- /dev/null
+++ b/src/app_modules/donasi/fun/create/fun_create_donasi_temporary.ts
@@ -0,0 +1,62 @@
+"use server";
+
+import fs from "fs";
+import prisma from "@/app/lib/prisma";
+import { MODEL_DONASI, MODEL_DONASI_TEMPORARY } from "../../model/interface";
+import _ from "lodash";
+import { v4 } from "uuid";
+
+interface Model_Temporary {
+ kategoriId: "";
+ title: "";
+ target: "";
+ durasiId: "";
+}
+
+export default async function Donasi_funCreateTemporary(
+ data: MODEL_DONASI,
+ file: FormData
+) {
+ // console.log(data, "ini data")
+ // console.log(file, "ini file nya")
+
+ const dataImage: any = file.get("file");
+ const fileName = dataImage.name;
+ const fileExtension = _.lowerCase(dataImage.name.split(".").pop());
+ const fRandomName = v4(fileName) + "." + fileExtension;
+
+ const uploadTemporary = await prisma.images.create({
+ data: {
+ url: fRandomName,
+ },
+ select: {
+ id: true,
+ url: true,
+ },
+ });
+
+ if (!uploadTemporary) return { status: 400, message: "Gagal upload gambar" };
+ const uploadFolder = Buffer.from(await dataImage.arrayBuffer());
+ fs.writeFileSync(
+ `./public/donasi/image/${uploadTemporary.url}`,
+ uploadFolder
+ );
+
+ const res = await prisma.donasi_TemporaryCreate.create({
+ data: {
+ title: data.title,
+ target: data.target,
+ donasiMaster_KategoriId: data.donasiMaster_KategoriId,
+ donasiMaster_DurasiId: data.donasiMaster_DurasiId,
+ imagesId: uploadTemporary.id,
+ },
+ });
+
+ if (!res) return { status: 400, message: "Gagal membuat donasi" };
+
+ return {
+ status: 201,
+ message: "Berhasil membuat donasi",
+ donasiId: res.id,
+ };
+}
diff --git a/src/app_modules/donasi/fun/delete/fun_delete_temporary_create.ts b/src/app_modules/donasi/fun/delete/fun_delete_temporary_create.ts
new file mode 100644
index 00000000..35352166
--- /dev/null
+++ b/src/app_modules/donasi/fun/delete/fun_delete_temporary_create.ts
@@ -0,0 +1,17 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+export async function Donasi_funDeleteTemporaryCreate(id: string) {
+ const del = await prisma.donasi_TemporaryCreate.delete({
+ where: {
+ id: id,
+ },
+ });
+
+ if(!del) return {status: 400, message:"Gagal hapus temporary"}
+ return {
+ status: 200,
+ message: "Berhasil hapus temporary"
+ }
+}
diff --git a/src/app_modules/donasi/fun/get/get_cerita_penggalang.ts b/src/app_modules/donasi/fun/get/get_cerita_penggalang.ts
new file mode 100644
index 00000000..18b0de49
--- /dev/null
+++ b/src/app_modules/donasi/fun/get/get_cerita_penggalang.ts
@@ -0,0 +1,18 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+export default async function Donasi_getCeritaByDonasiId(donasiId: string) {
+ const data = await prisma.donasi_Cerita.findFirst({
+ where: {
+ donasiId: donasiId,
+ },
+ select: {
+ id: true,
+ pembukaan: true,
+ cerita: true,
+ imageCeritaDonasi: true,
+ },
+ });
+ return data;
+}
diff --git a/src/app_modules/donasi/fun/get/get_donasi_by_status.ts b/src/app_modules/donasi/fun/get/get_donasi_by_status.ts
new file mode 100644
index 00000000..9301724b
--- /dev/null
+++ b/src/app_modules/donasi/fun/get/get_donasi_by_status.ts
@@ -0,0 +1,61 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+/**
+ *
+ * @param authorId string
+ * @param status string | masukan angka 1 - 4
+ * @returns List data donasi by status
+ */
+export default async function Donasi_getByStatus(
+ authorId: string,
+ status: string
+) {
+ if (status === "1") {
+ const getReview = await prisma.donasi.findMany({
+ where: {
+ authorId: authorId,
+ donasiMaster_StatusDonasiId: "1",
+ },
+ });
+ return getReview;
+ }
+
+ if (status === "2") {
+ const getReview = await prisma.donasi.findMany({
+ where: {
+ authorId: authorId,
+ donasiMaster_StatusDonasiId: "2",
+ },
+ });
+ return getReview;
+ }
+
+ if (status === "3") {
+ const getReview = await prisma.donasi.findMany({
+ where: {
+ authorId: authorId,
+ donasiMaster_StatusDonasiId: "3",
+ },
+ });
+ return getReview;
+ }
+
+ if (status === "4") {
+ const getReview = await prisma.donasi.findMany({
+ where: {
+ authorId: authorId,
+ donasiMaster_StatusDonasiId: "4",
+ },
+ });
+ return getReview;
+ }
+
+ if (status === undefined) {
+ return {
+ status: 400,
+ message: "Not Found",
+ };
+ }
+}
diff --git a/src/app_modules/donasi/fun/get/get_one_donasi_by_id.ts b/src/app_modules/donasi/fun/get/get_one_donasi_by_id.ts
new file mode 100644
index 00000000..12796132
--- /dev/null
+++ b/src/app_modules/donasi/fun/get/get_one_donasi_by_id.ts
@@ -0,0 +1,33 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+export async function Donasi_getOneById(donasiId: string) {
+ const data = await prisma.donasi.findFirst({
+ where: {
+ id: donasiId,
+ },
+ select: {
+ id: true,
+ title: true,
+ target: true,
+ active: true,
+ createdAt: true,
+ updatedAt: true,
+ publishTime: true,
+ authorId: true,
+ imagesId: true,
+ donasiMaster_KategoriId: true,
+ donasiMaster_DurasiId: true,
+ donasiMaster_StatusDonasiId: true,
+ Author: true,
+ imageDonasi: true,
+ CeritaDonasi: true,
+ DonasiMaster_Ketegori: true,
+ DonasiMaster_Durasi: true,
+ DonasiMaster_Status: true,
+ },
+ });
+
+ return data;
+}
diff --git a/src/app_modules/donasi/fun/get/get_temporary_create.ts b/src/app_modules/donasi/fun/get/get_temporary_create.ts
new file mode 100644
index 00000000..69b72eff
--- /dev/null
+++ b/src/app_modules/donasi/fun/get/get_temporary_create.ts
@@ -0,0 +1,12 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+export async function Donasi_getTemporaryCreate(id: string) {
+ const data = await prisma.donasi_TemporaryCreate.findFirst({
+ where: {
+ id: id,
+ },
+ });
+ return data;
+}
diff --git a/src/app_modules/donasi/fun/index.ts b/src/app_modules/donasi/fun/index.ts
new file mode 100644
index 00000000..afce9db0
--- /dev/null
+++ b/src/app_modules/donasi/fun/index.ts
@@ -0,0 +1,4 @@
+import { Donasi_getMasterKategori } from "./master/get_ketegori";
+import { Donasi_getMasterDurasi } from "./master/get_durasi";
+
+export { Donasi_getMasterKategori, Donasi_getMasterDurasi };
diff --git a/src/app_modules/donasi/fun/master/get_durasi.ts b/src/app_modules/donasi/fun/master/get_durasi.ts
new file mode 100644
index 00000000..87d39965
--- /dev/null
+++ b/src/app_modules/donasi/fun/master/get_durasi.ts
@@ -0,0 +1,8 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+export async function Donasi_getMasterDurasi() {
+ const data = await prisma.donasiMaster_Durasi.findMany({});
+ return data;
+}
diff --git a/src/app_modules/donasi/fun/master/get_ketegori.ts b/src/app_modules/donasi/fun/master/get_ketegori.ts
new file mode 100644
index 00000000..f40127c5
--- /dev/null
+++ b/src/app_modules/donasi/fun/master/get_ketegori.ts
@@ -0,0 +1,8 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+export async function Donasi_getMasterKategori() {
+ const data = await prisma.donasiMaster_Kategori.findMany({});
+ return data;
+}
diff --git a/src/app_modules/donasi/fun/update/fun_ganti_status.ts b/src/app_modules/donasi/fun/update/fun_ganti_status.ts
new file mode 100644
index 00000000..64c3b962
--- /dev/null
+++ b/src/app_modules/donasi/fun/update/fun_ganti_status.ts
@@ -0,0 +1,28 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import { revalidatePath } from "next/cache";
+
+export async function Donasi_funGantiStatus(
+ donasiId: string,
+ statusId: string
+) {
+ const data = await prisma.donasi.update({
+ where: {
+ id: donasiId,
+ },
+ data: {
+ donasiMaster_StatusDonasiId: statusId,
+ },
+ });
+
+
+ if (!data) return { status: 400, message: "Data tidak ditemukan" };
+
+ revalidatePath(RouterDonasi.main_galang_dana)
+ return {
+ status: 200,
+ message: "Status berhasil diganti",
+ };
+}
diff --git a/src/app_modules/donasi/fun/update/fun_update_cerita_donasi.ts b/src/app_modules/donasi/fun/update/fun_update_cerita_donasi.ts
new file mode 100644
index 00000000..46f0c73a
--- /dev/null
+++ b/src/app_modules/donasi/fun/update/fun_update_cerita_donasi.ts
@@ -0,0 +1,59 @@
+"use server";
+
+import _ from "lodash";
+import { MODEL_CERITA_DONASI } from "../../model/interface";
+import { v4 } from "uuid";
+import prisma from "@/app/lib/prisma";
+import { revalidatePath } from "next/cache";
+import fs from "fs";
+
+export async function Donasi_funUpdateCerita(
+ data: MODEL_CERITA_DONASI,
+ file: FormData
+) {
+
+
+ const gambar: any = file.get("file");
+ if (gambar !== "null") {
+ const fileName = gambar.name;
+ const fileExtension = _.lowerCase(gambar.name.split(".").pop());
+ const fileRandomName = v4(fileName) + "." + fileExtension;
+
+
+ const updateGambar = await prisma.images.update({
+ where: {
+ id: data.imagesId,
+ },
+ data: {
+ url: fileRandomName,
+ },
+ });
+
+ if (!updateGambar) return { status: 400, message: "Update gambat gagal" };
+ revalidatePath("/dev/donasi/detail/detail_draft");
+
+ const uploadFolder = Buffer.from(await gambar.arrayBuffer());
+ fs.writeFileSync(
+ `./public/donasi/image_cerita/${updateGambar.url}`,
+ uploadFolder
+ );
+ }
+
+ const update = await prisma.donasi_Cerita.update({
+ where: {
+ id: data.id,
+ },
+ data: {
+ pembukaan: data.pembukaan,
+ cerita: data.cerita,
+ },
+ });
+
+ if (!update) return { status: 400, message: "Gagal update cerita" };
+ revalidatePath("/dev/donasi/detail/detail_draft");
+
+ return {
+ status: 200,
+ message: "Berhasil update cerita",
+ };
+}
diff --git a/src/app_modules/donasi/fun/update/fun_update_donasi.ts b/src/app_modules/donasi/fun/update/fun_update_donasi.ts
new file mode 100644
index 00000000..4e6f8da7
--- /dev/null
+++ b/src/app_modules/donasi/fun/update/fun_update_donasi.ts
@@ -0,0 +1,71 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import { MODEL_DONASI } from "../../model/interface";
+import _ from "lodash";
+import { v4 } from "uuid";
+import fs from "fs";
+import { revalidatePath, revalidateTag } from "next/cache";
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+
+export async function Donasi_funUpdateDonasi(
+ data: MODEL_DONASI,
+ file: FormData
+) {
+ // console.log(data);
+
+ const gambar: any = file.get("file");
+ if (gambar !== "null") {
+ const fileName = gambar.name;
+ const fileExtension = _.lowerCase(gambar.name.split(".").pop());
+ const fileRandomName = v4(fileName) + "." + fileExtension;
+
+ const cariGambar = await prisma.images.findFirst({
+ where: {
+ id: data.imagesId,
+ },
+ select: {
+ url: true,
+ },
+ });
+
+ if (!cariGambar) return { status: 400, message: "Gambar tidak ditemukan" };
+ revalidatePath("/dev/donasi/detail/detail_draft");
+ fs.unlinkSync(`./public/donasi/image/${cariGambar.url}`);
+
+ const updateGambar = await prisma.images.update({
+ where: {
+ id: data.imagesId,
+ },
+ data: {
+ url: fileRandomName,
+ },
+ });
+
+ if (!updateGambar) return { status: 400, message: "Update gambat gagal" };
+ revalidatePath("/dev/donasi/detail/detail_draft");
+
+ const uploadFolder = Buffer.from(await gambar.arrayBuffer());
+ fs.writeFileSync(`./public/donasi/image/${updateGambar.url}`, uploadFolder);
+ }
+
+ const update = await prisma.donasi.update({
+ where: {
+ id: data.id,
+ },
+ data: {
+ donasiMaster_KategoriId: data.donasiMaster_KategoriId,
+ donasiMaster_DurasiId: data.donasiMaster_DurasiId,
+ title: data.title,
+ target: data.target,
+ },
+ });
+
+ if (!update) return { status: 400, message: "Gagal update" };
+ revalidatePath("/dev/donasi/detail/detail_draft");
+
+ return {
+ status: 200,
+ message: "Berhasil update",
+ };
+}
diff --git a/src/app_modules/donasi/global_state/index.ts b/src/app_modules/donasi/global_state/index.ts
new file mode 100644
index 00000000..1e19f2fa
--- /dev/null
+++ b/src/app_modules/donasi/global_state/index.ts
@@ -0,0 +1,17 @@
+import { atomWithStorage } from "jotai/utils";
+
+/**
+ * @param index 0 - 2
+ * @returns global state hot menu donasi
+ */
+export const gs_donasi_hot_menu = atomWithStorage("gs_donasi_hot_menu", 0);
+
+/**
+ * @param status - Publish, Review,, Draft, Reject
+ * @type string
+ * @returns status tabs pada posting
+ */
+export const gs_donasi_tabs_posting = atomWithStorage(
+ "gs_donasi_tabs_posting",
+ "Publish"
+);
diff --git a/src/app_modules/donasi/index.ts b/src/app_modules/donasi/index.ts
new file mode 100644
index 00000000..3e154e23
--- /dev/null
+++ b/src/app_modules/donasi/index.ts
@@ -0,0 +1,87 @@
+import MainDonasi from "./main/beranda";
+import LayoutDonasi from "./main/layout";
+import GalangDanaDonasi from "./main/galang_dana";
+import DonasiSayaDonasi from "./main/donasi_saya";
+import CreateDonasi from "./create/create_donasi";
+import LayoutCreateDonasi from "./create/layout";
+import PagePopUpCreateDonasi from "./page_pop_up/create";
+import DetailMainDonasi from "./detail/detail_main";
+import LayoutDetailMainDonasi from "./detail/detail_main/layout";
+import MasukanDonasi from "./detail/detail_main/masukan_donasi";
+import LayoutMasukanDonasi from "./detail/detail_main/masukan_donasi/layout";
+import DonaturDonasi from "./detail/detail_main/donatur";
+import LayoutDonaturDonasi from "./detail/detail_main/donatur/layout";
+import KabarDonasi from "./detail/detail_main/kabar";
+import LayoutKabarDonasi from "./detail/detail_main/kabar/layout";
+import DetailKabarDonasi from "./detail/detail_kabar";
+import LayoutDetailKabarDonasi from "./detail/detail_kabar/layout";
+import PencairanDanaDonasi from "./detail/detail_main/pencairan_dana";
+import LayoutPencairanDanaDonasi from "./detail/detail_main/pencairan_dana/layout";
+import PenggalangDanaDonasi from "./detail/detail_main/penggalang_dana";
+import LayoutPenggalangDanaDonasi from "./detail/detail_main/penggalang_dana/layout";
+import CeritaPenggalangDonasi from "./detail/detail_main/cerita_penggalang";
+import LayoutCeritaPenggalangDonasi from "./detail/detail_main/cerita_penggalang/layout";
+import DetailPublishDonasi from "./detail/detail_publish";
+import LayoutDetailPublishDonasi from "./detail/detail_publish/layout";
+import CreateCeritaPenggalangDonasi from "./create/create_cerita_penggalang";
+import ListKabarDonasi from "./edit/list_kabar";
+import LayoutListKabarDonasi from "./edit/list_kabar/layout";
+import UpdateKabarDonasi from "./edit/update_kabar";
+import LayoutUpdateKabarDonasi from "./edit/update_kabar/layout";
+import DetailReviewDonasi from "./detail/detail_review";
+import LayoutDetailReviewDonasi from "./detail/detail_review/layout";
+import DetailDraftDonasi from "./detail/detail_draft";
+import LayoutDetailDraftDonasi from "./detail/detail_draft/layout";
+import DetailRejectDonasi from "./detail/detail_reject";
+import LayoutDetailRejectDonasi from "./detail/detail_reject/layout";
+import EditDonasi from "./edit/edit_donasi";
+import LayoutEditDonasi from "./edit/edit_donasi/layout";
+import EditCeritaPenggalangDonasi from "./edit/edit_cerita_penggalang";
+import LayoutEditCeritaPenggalangDonasi from "./edit/edit_cerita_penggalang/layout";
+import DetailDonasiSaya from "./detail/detail_donasi_saya";
+import LayoutDetailDonasiSaya from "./detail/detail_donasi_saya/layout";
+
+export {
+ MainDonasi,
+ LayoutDonasi,
+ GalangDanaDonasi as PostingDonasi,
+ DonasiSayaDonasi,
+ CreateDonasi,
+ LayoutCreateDonasi,
+ PagePopUpCreateDonasi,
+ DetailMainDonasi,
+ LayoutDetailMainDonasi,
+ MasukanDonasi,
+ LayoutMasukanDonasi,
+ DonaturDonasi,
+ LayoutDonaturDonasi,
+ KabarDonasi,
+ LayoutKabarDonasi,
+ DetailKabarDonasi,
+ LayoutDetailKabarDonasi,
+ PencairanDanaDonasi,
+ LayoutPencairanDanaDonasi,
+ PenggalangDanaDonasi,
+ LayoutPenggalangDanaDonasi,
+ CeritaPenggalangDonasi,
+ LayoutCeritaPenggalangDonasi,
+ DetailPublishDonasi,
+ LayoutDetailPublishDonasi,
+ CreateCeritaPenggalangDonasi,
+ ListKabarDonasi,
+ LayoutListKabarDonasi,
+ UpdateKabarDonasi,
+ LayoutUpdateKabarDonasi,
+ DetailReviewDonasi,
+ LayoutDetailReviewDonasi,
+ DetailDraftDonasi,
+ LayoutDetailDraftDonasi,
+ DetailRejectDonasi,
+ LayoutDetailRejectDonasi,
+ EditDonasi,
+ LayoutEditDonasi,
+ EditCeritaPenggalangDonasi,
+ LayoutEditCeritaPenggalangDonasi,
+ DetailDonasiSaya,
+ LayoutDetailDonasiSaya,
+};
diff --git a/src/app_modules/donasi/main/beranda.tsx b/src/app_modules/donasi/main/beranda.tsx
new file mode 100644
index 00000000..af568f5c
--- /dev/null
+++ b/src/app_modules/donasi/main/beranda.tsx
@@ -0,0 +1,82 @@
+"use client";
+
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import { Warna } from "@/app/lib/warna";
+import {
+ AspectRatio,
+ Avatar,
+ Badge,
+ Box,
+ Button,
+ Card,
+ CardSection,
+ Center,
+ Divider,
+ Grid,
+ Group,
+ Image,
+ Paper,
+ Progress,
+ SimpleGrid,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import { useViewportSize } from "@mantine/hooks";
+import { useRouter } from "next/navigation";
+
+export default function MainDonasi() {
+ const router = useRouter();
+ const { height, width } = useViewportSize();
+ return (
+ <>
+
+
+ {Array(5)
+ .fill(0)
+ .map((e, i) => (
+ router.push(RouterDonasi.detail_main)}>
+
+
+
+
+
+
+
+
+
+
+
+
+ Judul Donasi Bisa Dilihat Disini Untuk Contoh
+
+
+
+ Terkumpul
+
+ Rp. 100.000.000
+
+
+
+
+
+ {width > 575 ? "" : }
+
+
+ ))}
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/main/donasi_saya.tsx b/src/app_modules/donasi/main/donasi_saya.tsx
new file mode 100644
index 00000000..1b3c47ad
--- /dev/null
+++ b/src/app_modules/donasi/main/donasi_saya.tsx
@@ -0,0 +1,87 @@
+"use client";
+
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import {
+ AspectRatio,
+ Avatar,
+ Badge,
+ Box,
+ Button,
+ Card,
+ Center,
+ Divider,
+ Grid,
+ Group,
+ Image,
+ Paper,
+ Progress,
+ SimpleGrid,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import { useViewportSize } from "@mantine/hooks";
+import { useRouter } from "next/navigation";
+
+import toast from "react-simple-toasts";
+
+export default function DonasiSayaDonasi() {
+ const router = useRouter();
+ const { height, width } = useViewportSize();
+ return (
+ <>
+
+ {Array(5)
+ .fill(0)
+ .map((e, i) => (
+
+ router.push(RouterDonasi.detail_donasi_saya)
+
+ }
+ >
+
+
+
+
+
+ Judul Donasi Bisa Dilihat Disini Untuk Contoh
+
+
+
+ Donasi Saya
+
+ Rp. 25.000.000
+
+
+
+
+
+
+
+
+
+
+
+
+ {width > 575 ? "" : }
+
+
+ ))}
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/main/galang_dana.tsx b/src/app_modules/donasi/main/galang_dana.tsx
new file mode 100644
index 00000000..9481733a
--- /dev/null
+++ b/src/app_modules/donasi/main/galang_dana.tsx
@@ -0,0 +1,108 @@
+"use client";
+
+import {
+ Affix,
+ Box,
+ Button,
+ Divider,
+ Stack,
+ Tabs,
+ TabsProps,
+ Text,
+ rem,
+} from "@mantine/core";
+import { IconCirclePlus } from "@tabler/icons-react";
+import { useAtom } from "jotai";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import { gs_donasi_tabs_posting } from "../global_state";
+import PostingPublishDonasi from "./galang_dana/publish";
+import PostingReviewDonasi from "./galang_dana/review";
+import PostingRejectDonasi from "./galang_dana/reject";
+import { Warna } from "@/app/lib/warna";
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import PostingDraftDonasi from "./galang_dana/draft";
+
+export default function GalangDanaDonasi({listReview, listDraft}: {listReview: any, listDraft: any}) {
+ const router = useRouter();
+ const [tabsPostingDonasi, setTabsPostingDonasi] = useAtom(
+ gs_donasi_tabs_posting
+ );
+
+ const listPosting = [
+ {
+ id: 1,
+ value: "Publish",
+ path: ,
+ color: "green",
+ },
+ {
+ id: 2,
+ value: "Review",
+ path: ,
+ color: "yellow",
+ },
+ {
+ id: 3,
+ value: "Draft",
+ path: ,
+ color: "red",
+ },
+ {
+ id: 4,
+ value: "Reject",
+ path: ,
+ color: "red",
+ },
+ ];
+
+ return (
+ <>
+
+ }
+ onClick={() => router.push(RouterDonasi.create)}
+ >
+ Galang Dana
+
+
+
+
+
+
+ {listPosting.map((e, i) => (
+
+
+ {e.value}
+
+
+ ))}
+
+ {listPosting.map((e, i) => (
+
+ {e.path}
+
+ ))}
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/main/galang_dana/draft.tsx b/src/app_modules/donasi/main/galang_dana/draft.tsx
new file mode 100644
index 00000000..ae2f1a9b
--- /dev/null
+++ b/src/app_modules/donasi/main/galang_dana/draft.tsx
@@ -0,0 +1,81 @@
+"use client";
+
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import {
+ AspectRatio,
+ Box,
+ Button,
+ Card,
+ Center,
+ Divider,
+ Grid,
+ Image,
+ Paper,
+ Progress,
+ SimpleGrid,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import { useViewportSize } from "@mantine/hooks";
+import { useRouter } from "next/navigation";
+
+import toast from "react-simple-toasts";
+import { MODEL_DONASI } from "../../model/interface";
+import TampilanRupiahDonasi from "../../component/tampilan_rupiah";
+
+export default function PostingDraftDonasi({
+ listDraft,
+}: {
+ listDraft: MODEL_DONASI[];
+}) {
+ const { height, width } = useViewportSize();
+ const router = useRouter();
+ return (
+ <>
+
+ {listDraft.map((e, i) => (
+ router.push(RouterDonasi.detail_draft + `${e.id}`)}>
+
+
+
+
+
+
+
+
+
+
+
+
+ {e.title}
+
+
+ Terget Dana
+
+
+
+
+
+
+
+ {width > 575 ? "" : }
+
+
+ ))}
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/main/galang_dana/publish.tsx b/src/app_modules/donasi/main/galang_dana/publish.tsx
new file mode 100644
index 00000000..dcefb38d
--- /dev/null
+++ b/src/app_modules/donasi/main/galang_dana/publish.tsx
@@ -0,0 +1,84 @@
+"use client";
+
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import {
+ AspectRatio,
+ Box,
+ Button,
+ Card,
+ Center,
+ Divider,
+ Grid,
+ Group,
+ Image,
+ Paper,
+ Progress,
+ SimpleGrid,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import { useViewportSize } from "@mantine/hooks";
+import { useRouter } from "next/navigation";
+import toast from "react-simple-toasts";
+
+export default function PostingPublishDonasi({ data }: { data: any }) {
+ const router = useRouter();
+ const { height, width } = useViewportSize();
+ return (
+ <>
+
+ {Array(5)
+ .fill(0)
+ .map((e, i) => (
+
+ router.push(RouterDonasi.detail_publish)
+ // toast("Cooming soon")
+ }
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+ Judul Donasi Bisa Dilihat Disini Untuk Contoh
+
+
+
+ Terkumpul
+
+ Rp. 100.000.000
+
+
+
+
+
+ {width > 575 ? "" : }
+
+
+ ))}
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/main/galang_dana/reject.tsx b/src/app_modules/donasi/main/galang_dana/reject.tsx
new file mode 100644
index 00000000..0c7e8543
--- /dev/null
+++ b/src/app_modules/donasi/main/galang_dana/reject.tsx
@@ -0,0 +1,83 @@
+"use client";
+
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import {
+ AspectRatio,
+ Box,
+ Button,
+ Card,
+ Center,
+ Divider,
+ Grid,
+ Image,
+ Paper,
+ SimpleGrid,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import { useViewportSize } from "@mantine/hooks";
+import { useRouter } from "next/navigation";
+import toast from "react-simple-toasts";
+
+export default function PostingRejectDonasi({ data }: { data: any }) {
+ const { height, width } = useViewportSize();
+ const router = useRouter()
+ return (
+ <>
+
+
+
+
+ {Array(5)
+ .fill(0)
+ .map((e, i) => (
+
+ router.push(RouterDonasi.detail_reject)
+
+ }
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+ Judul Donasi Bisa Dilihat Disini Untuk Contoh
+
+
+ Alasan ditolak
+
+ Lorem ipsum dolor, sit amet consectetur adipisicing elit.
+ Expedita inventore rem iure praesentium delectus consectetur
+ alias, veniam, fugit in ab esse recusandae mollitia quasi
+ perferendis tenetur suscipit architecto saepe! Animi.
+
+
+
+
+
+ {width > 575 ? "" : }
+
+
+ ))}
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/main/galang_dana/review.tsx b/src/app_modules/donasi/main/galang_dana/review.tsx
new file mode 100644
index 00000000..079661fc
--- /dev/null
+++ b/src/app_modules/donasi/main/galang_dana/review.tsx
@@ -0,0 +1,83 @@
+"use client";
+
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import {
+ AspectRatio,
+ Box,
+ Button,
+ Card,
+ Center,
+ Divider,
+ Grid,
+ Image,
+ Paper,
+ Progress,
+ SimpleGrid,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import { useViewportSize } from "@mantine/hooks";
+import { useRouter } from "next/navigation";
+
+import toast from "react-simple-toasts";
+import { MODEL_DONASI } from "../../model/interface";
+
+export default function PostingReviewDonasi({
+ listReview,
+}: {
+ listReview: MODEL_DONASI[];
+}) {
+ const { height, width } = useViewportSize();
+ const router = useRouter();
+ return (
+ <>
+
+ {listReview.map((e, i) => (
+ router.push(RouterDonasi.detail_review + `${e.id}`)}>
+
+
+
+
+
+
+
+
+
+
+
+
+ {e.title}
+
+
+ Terget Dana
+
+ Rp.{" "}
+ {new Intl.NumberFormat("id-ID", {
+ maximumFractionDigits: 10,
+ }).format(+e.target)}
+
+
+
+
+
+ {width > 575 ? "" : }
+
+
+ ))}
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/main/layout.tsx b/src/app_modules/donasi/main/layout.tsx
new file mode 100644
index 00000000..70130a58
--- /dev/null
+++ b/src/app_modules/donasi/main/layout.tsx
@@ -0,0 +1,100 @@
+"use client";
+
+import {
+ ActionIcon,
+ AppShell,
+ Center,
+ Flex,
+ Footer,
+ Grid,
+ Text,
+} from "@mantine/core";
+import React, { useState } from "react";
+import HeaderTamplateDonasi from "../component/header_tamplate";
+
+import {
+ IconCurrencyDollar,
+ IconGift,
+ IconGiftCardFilled,
+ IconHome,
+ IconMoneybag,
+ IconSend,
+} from "@tabler/icons-react";
+import toast from "react-simple-toasts";
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import { useRouter } from "next/navigation";
+import { useAtom } from "jotai";
+import { gs_donasi_hot_menu } from "../global_state";
+import { RouterCrowd } from "@/app/lib/router_hipmi/router_crowd";
+
+export default function LayoutDonasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ const router = useRouter();
+ const [active, setActive] = useAtom(gs_donasi_hot_menu);
+ const listPage = [
+ {
+ id: 1,
+ name: "Beranda",
+ path: RouterDonasi.main_beranda,
+ icon: ,
+ },
+ {
+ id: 2,
+ name: "Galang Dana",
+ path: RouterDonasi.main_galang_dana,
+ icon: ,
+ },
+ {
+ id: 3,
+ name: "Donasi Saya",
+ path: RouterDonasi.main_donasi_saya,
+ icon: ,
+ },
+ ];
+
+ return (
+ <>
+
+ }
+ footer={
+
+
+ {/* Tampilan Bursa */}
+ {listPage.map((e, i) => (
+ {
+ router.push(e.path);
+ setActive(i);
+ }}
+ >
+
+
+
+ {e.icon}
+
+
+ {e.name}
+
+
+
+
+ ))}
+
+
+ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/model/interface.ts b/src/app_modules/donasi/model/interface.ts
new file mode 100644
index 00000000..ea5d34e9
--- /dev/null
+++ b/src/app_modules/donasi/model/interface.ts
@@ -0,0 +1,56 @@
+import { MODEL_AUTHOR } from "@/app_modules/home/models/interface";
+import { MODEL_IMAGES } from "@/app_modules/models/interface";
+
+export interface MODEL_DONASI {
+ id: string;
+ title: string;
+ target: string;
+ active: boolean;
+ createdAt: Date;
+ updatedAt: Date;
+ imagesId: string;
+ publishTime: Date;
+ catatan: string,
+ authorId: string;
+ donasiMaster_KategoriId: string;
+ donasiMaster_DurasiId: string;
+ donasiMaster_StatusDonasiId: string;
+ CeritaDonasi: MODEL_CERITA_DONASI;
+ Author: MODEL_AUTHOR;
+ imageDonasi: MODEL_IMAGES;
+ DonasiMaster_Ketegori: MODEL_DONASI_ALL_MASTER;
+ DonasiMaster_Durasi: MODEL_DONASI_ALL_MASTER;
+ DonasiMaster_Status: MODEL_DONASI_ALL_MASTER;
+}
+
+export interface MODEL_CERITA_DONASI {
+ id: string;
+ pembukaan: string;
+ cerita: string;
+ active: boolean;
+ createdAt: Date;
+ updatedAt: Date;
+ imagesId: string;
+ imageCeritaDonasi: MODEL_IMAGES
+ donasiId: string
+}
+
+export interface MODEL_DONASI_ALL_MASTER {
+ id: string;
+ name: string;
+ active: boolean;
+ createdAt: Date;
+ updatedAt: Date;
+}
+
+export interface MODEL_DONASI_TEMPORARY {
+ id: string;
+ title: string;
+ target: string;
+ active: boolean;
+ createdAt: Date;
+ updatedAt: Date;
+ imagesId: string;
+ donasiMaster_KategoriId: string;
+ donasiMaster_DurasiId: string;
+}
diff --git a/src/app_modules/donasi/page_pop_up/create.tsx b/src/app_modules/donasi/page_pop_up/create.tsx
new file mode 100644
index 00000000..ba6ba636
--- /dev/null
+++ b/src/app_modules/donasi/page_pop_up/create.tsx
@@ -0,0 +1,22 @@
+"use client";
+
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import { Box, Stack, Title } from "@mantine/core";
+import { useShallowEffect } from "@mantine/hooks";
+import { IconCircleCheck } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+
+export default function PagePopUpCreateDonasi() {
+ const router = useRouter();
+ useShallowEffect(() => {
+ setTimeout(() => router.push(RouterDonasi.main_galang_dana), 2000);
+ }, []);
+ return (
+ <>
+
+
+ Berhasil Membuat Pengalangan Dana
+
+ >
+ );
+}
diff --git a/src/app_modules/fun/get_user_profile.ts b/src/app_modules/fun/get_user_profile.ts
new file mode 100644
index 00000000..41125b6f
--- /dev/null
+++ b/src/app_modules/fun/get_user_profile.ts
@@ -0,0 +1,36 @@
+"use server";
+import prisma from "@/app/lib/prisma";
+import { revalidatePath } from "next/cache";
+
+export async function funGetUserProfile( userId: string ) {
+
+ const user = await prisma.user.findUnique({
+ where: {
+ id: userId,
+ },
+ select: {
+ id: true,
+ username: true,
+ nomor: true,
+ Profile: {
+ select: {
+ id: true,
+ alamat: true,
+ email: true,
+ jenisKelamin: true,
+ name: true,
+ ImageProfile: {
+ select: {
+ url: true,
+ },
+ },
+ },
+ },
+ },
+ });
+
+ revalidatePath("/dev/home");
+ revalidatePath("/dev/katalog/view");
+
+ return user;
+}
diff --git a/src/app_modules/fun/get_user_token.ts b/src/app_modules/fun/get_user_token.ts
new file mode 100644
index 00000000..e4b8f98f
--- /dev/null
+++ b/src/app_modules/fun/get_user_token.ts
@@ -0,0 +1,21 @@
+"use server";
+
+import { cookies } from "next/headers";
+import yaml from "yaml";
+import fs from "fs";
+import { unsealData } from "iron-session";
+import { redirect } from "next/navigation";
+const config = yaml.parse(fs.readFileSync("config.yaml").toString());
+
+export async function getToken_UserId() {
+ const c = cookies().get("ssn");
+ if (!c?.value) return redirect("/dev/auth/login");
+
+ const token = JSON.parse(
+ await unsealData(c?.value as string, {
+ password: config.server.password,
+ })
+ );
+
+ return token.id
+}
diff --git a/src/app_modules/fun/midtrans/fun_get_notif.ts b/src/app_modules/fun/midtrans/fun_get_notif.ts
new file mode 100644
index 00000000..1783e0be
--- /dev/null
+++ b/src/app_modules/fun/midtrans/fun_get_notif.ts
@@ -0,0 +1,15 @@
+"use server";
+
+export default async function funGetNotif({
+ params,
+}: {
+ params: { data: any };
+}) {
+ const body = params.data;
+ console.log(body);
+
+ return {
+ status: 200,
+ message: "OK",
+ };
+}
diff --git a/src/app_modules/home/api/api-get-token.ts b/src/app_modules/home/api/api-get-token.ts
new file mode 100644
index 00000000..a3712f9c
--- /dev/null
+++ b/src/app_modules/home/api/api-get-token.ts
@@ -0,0 +1,25 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import { getConfig } from "@/bin/config";
+import { unsealData } from "iron-session";
+import { cookies } from "next/headers";
+
+import fs from "fs";
+import yaml from "yaml";
+const config = yaml.parse(fs.readFileSync("config.yaml").toString());
+
+/**
+ * @returns token(id and username)
+ */
+export async function getToken() {
+ const c = cookies().get("ssn");
+
+ const token = await unsealData(c?.value as string, {
+ password: await config.server.password,
+ });
+
+ const data = JSON.parse(token as any)
+
+ return data;
+}
diff --git a/src/app_modules/home/index.ts b/src/app_modules/home/index.ts
new file mode 100644
index 00000000..dfb2e4ad
--- /dev/null
+++ b/src/app_modules/home/index.ts
@@ -0,0 +1,4 @@
+import HomeView from "./view";
+import HomeLayout from "./layout";
+import { getToken } from "./api/api-get-token";
+export {HomeView, HomeLayout, getToken}
\ No newline at end of file
diff --git a/src/app_modules/home/layout.tsx b/src/app_modules/home/layout.tsx
new file mode 100644
index 00000000..dc479717
--- /dev/null
+++ b/src/app_modules/home/layout.tsx
@@ -0,0 +1,39 @@
+"use client";
+import { ActionIcon, AppShell, Flex, Group, Header, Text } from "@mantine/core";
+import { HomeView } from ".";
+import { IconUserSearch, IconAward, IconQrcode } from "@tabler/icons-react";
+import { Logout } from "../auth";
+
+export default function HomeLayout({ children }: { children: any }) {
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+
+ HIPMI
+
+
+
+
+
+
+
+
+
+ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/home/models/interface.ts b/src/app_modules/home/models/interface.ts
new file mode 100644
index 00000000..e150a789
--- /dev/null
+++ b/src/app_modules/home/models/interface.ts
@@ -0,0 +1,9 @@
+export interface MODEL_AUTHOR {
+ id: string;
+ username: string;
+ nomor: string;
+ active: boolean;
+ createdAt: Date;
+ updatedAt: Date;
+ masterUserRoleId: string;
+}
diff --git a/src/app_modules/home/models/user_profile.ts b/src/app_modules/home/models/user_profile.ts
new file mode 100644
index 00000000..978b7b33
--- /dev/null
+++ b/src/app_modules/home/models/user_profile.ts
@@ -0,0 +1,15 @@
+export interface MODEL_User_profile {
+ id: string;
+ username: string;
+ nomor: string;
+ Profile: {
+ id: string;
+ alamat: string;
+ email: string;
+ jenisKelamin: string;
+ name: string;
+ ImageProfile: {
+ url: string;
+ } | null;
+ } | null;
+}
diff --git a/src/app_modules/home/state/global_state.ts b/src/app_modules/home/state/global_state.ts
new file mode 100644
index 00000000..638d7246
--- /dev/null
+++ b/src/app_modules/home/state/global_state.ts
@@ -0,0 +1,3 @@
+import { atomWithStorage } from "jotai/utils";
+
+export const gs_token = atomWithStorage("gs_token", null);
diff --git a/src/app_modules/home/view.tsx b/src/app_modules/home/view.tsx
new file mode 100644
index 00000000..b716ff10
--- /dev/null
+++ b/src/app_modules/home/view.tsx
@@ -0,0 +1,185 @@
+"use client";
+
+import {
+ ActionIcon,
+ Box,
+ Center,
+ Flex,
+ Image,
+ Loader,
+ Paper,
+ SimpleGrid,
+ Text,
+ ThemeIcon,
+ Title,
+} from "@mantine/core";
+import { Logout } from "../auth";
+import { useState } from "react";
+import { ApiHipmi } from "@/app/lib/api";
+import { useShallowEffect } from "@mantine/hooks";
+import { getToken } from "./api/api-get-token";
+
+import {
+ IconAffiliate,
+ IconBriefcase,
+ IconHeartHandshake,
+ IconMap2,
+ IconMessages,
+ IconPackageImport,
+ IconPresentation,
+ IconShoppingBag,
+ IconUserCircle,
+} from "@tabler/icons-react";
+
+import toast from "react-simple-toasts";
+import { getProfile } from "../katalog/profile";
+import { useRouter } from "next/navigation";
+import { useAtom } from "jotai";
+import { gs_token } from "./state/global_state";
+import { loadDataProfile } from "../katalog/profile/fun/fun_get_profile";
+import {
+ gs_fotoProfile,
+ gs_profile,
+} from "../katalog/profile/state/global_state";
+import { gs_ListPortofolio } from "../katalog/portofolio/state/global_state";
+import { myConsole } from "@/app/fun/my_console";
+import { getFotoProfile } from "../katalog/profile/api/get-foto-profile";
+import { funGetUserProfile } from "../fun/get_user_profile";
+import { MODEL_User_profile } from "./models/user_profile";
+import AppNotif from "../notif";
+
+// export const dynamic = "force-dynamic"
+// export const revalidate = 0
+
+export default function HomeView({ user }: { user: MODEL_User_profile }) {
+ const router = useRouter();
+ const [stateUser, setStateUser] = useState(user);
+
+ const listHalaman = [
+ {
+ id: 1,
+ name: "Forums",
+ icon: ,
+ link: "",
+ },
+ {
+ id: 2,
+ name: "Project Collaboration",
+ icon: ,
+ link: "",
+ },
+ {
+ id: 3,
+ name: "Voting",
+ icon: ,
+ link: "",
+ },
+ {
+ id: 4,
+ name: "Event",
+ icon: ,
+ link: "",
+ },
+ {
+ id: 5,
+ name: "Crowd Funding",
+ icon: ,
+ link: `/dev/crowd/splash`,
+ },
+ {
+ id: 6,
+ name: "Marketplace",
+ icon: ,
+ link: "",
+ },
+ {
+ id: 7,
+ name: "Job Vacancy",
+ icon: ,
+ link: "",
+ },
+ {
+ id: 8,
+ name: "Business Maps",
+ icon: ,
+ link: "",
+ },
+ ];
+
+ return (
+ <>
+
+
+ {
+ if (stateUser.Profile === null) {
+ return router.push(`/dev/profile/create/${stateUser.id}`);
+ } else {
+ return router.push(`/dev/katalog/${stateUser.Profile.id}`);
+ }
+ }}
+ >
+
+
+
+
+ Welcome to ,{" "}
+ {stateUser.username ? stateUser.username : }
+
+
+
+
+
+
+
+ {/* {JSON.stringify(stateUser, null, 2)} */}
+
+
+
+ {listHalaman.map((e, i) => (
+ {
+ // if (stateUser.Profile === null) {
+ // return toast("Lengkapi Profile Anda !");
+ // } else {
+ // if (e.link === "") {
+ // toast(e.name);
+ // } else {
+ // return router.push(e.link);
+ // }
+ // }
+ if (e.link === "") {
+ toast("Cooming Soon !!");
+ } else {
+ return router.push(e.link);
+ }
+ }}
+ >
+
+
+ {e.icon}
+
+ {e.name}
+
+
+ ))}
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/berita/layout.tsx b/src/app_modules/investasi/berita/layout.tsx
new file mode 100644
index 00000000..6417d8d3
--- /dev/null
+++ b/src/app_modules/investasi/berita/layout.tsx
@@ -0,0 +1,19 @@
+"use client";
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { AppShell } from "@mantine/core";
+import React from "react";
+
+export default function LayoutBeritaInvestasi({
+ children,
+ }: {
+ children: React.ReactNode;
+ }) {
+ return (
+ <>
+ }>
+ {children}
+
+ >
+ );
+ }
\ No newline at end of file
diff --git a/src/app_modules/investasi/berita/view.tsx b/src/app_modules/investasi/berita/view.tsx
new file mode 100644
index 00000000..e5d9e664
--- /dev/null
+++ b/src/app_modules/investasi/berita/view.tsx
@@ -0,0 +1,73 @@
+"use client";
+
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import {
+ AspectRatio,
+ Box,
+ Center,
+ Grid,
+ Group,
+ Image,
+ Paper,
+ Spoiler,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import moment from "moment";
+import { useRouter } from "next/navigation";
+import { MODEL_Investasi } from "../model/model_investasi";
+import { useState } from "react";
+import _ from "lodash";
+
+export default function BeritaInvestasi({
+ dataInvestasi,
+}: {
+ dataInvestasi: MODEL_Investasi;
+}) {
+ const router = useRouter();
+ const [berita, setBerita] = useState(dataInvestasi);
+
+ return (
+ <>
+ {!_.isEmpty(berita.BeritaInvestasi) ? (
+ berita.BeritaInvestasi.map((e) => (
+
+ router.push(RouterInvestasi.detail_berita + `${e.id}`)
+ }
+ >
+
+
+ {e.title}
+ {moment(e.createdAt).format("LL")}
+
+
+
+
+
+ {e.deskripsi}
+
+
+
+
+
+
+
+
+
+
+ ))
+ ) : (
+
+ Tidak Ada Berita
+
+ )}
+ >
+ );
+}
diff --git a/src/app_modules/investasi/create/layout.tsx b/src/app_modules/investasi/create/layout.tsx
new file mode 100644
index 00000000..9407f40c
--- /dev/null
+++ b/src/app_modules/investasi/create/layout.tsx
@@ -0,0 +1,23 @@
+"use client";
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { AppShell } from "@mantine/core";
+import React from "react";
+
+export default function InvestasiCreateLayout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+
+ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/create/view.tsx b/src/app_modules/investasi/create/view.tsx
new file mode 100644
index 00000000..e90c0344
--- /dev/null
+++ b/src/app_modules/investasi/create/view.tsx
@@ -0,0 +1,296 @@
+"use client";
+
+import { ApiHipmi } from "@/app/lib/api";
+import { Warna } from "@/app/lib/warna";
+import { MODEL_DEFAULT_MASTER } from "@/app_modules/models/model_default_master";
+import {
+ AspectRatio,
+ Box,
+ Button,
+ Center,
+ Divider,
+ FileButton,
+ Group,
+ Image,
+ NumberInput,
+ Paper,
+ Select,
+ Stack,
+ Text,
+ TextInput,
+} from "@mantine/core";
+import { IconCamera, IconPdf, IconUpload } from "@tabler/icons-react";
+import _ from "lodash";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import { funCreateInvestasi } from "../fun/fun_create_investasi";
+import toast from "react-simple-toasts";
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import { useAtom } from "jotai";
+import { gs_StatusPortoInvestasi, gs_investasiFooter } from "../g_state";
+import { useShallowEffect } from "@mantine/hooks";
+
+export default function InvestasiCreate({
+ id,
+ pencarianInvestor,
+ periodeDeviden,
+ pembagianDeviden,
+}: {
+ id: string;
+ pencarianInvestor: MODEL_DEFAULT_MASTER[];
+ periodeDeviden: MODEL_DEFAULT_MASTER[];
+ pembagianDeviden: MODEL_DEFAULT_MASTER[];
+}) {
+ const router = useRouter();
+ const [fl, setFl] = useState(null);
+ const [img, setImg] = useState();
+ const [pdf, setPdf] = useState(null);
+ const [filePdf, setFilePdf] = useState(null);
+
+ const [changeColor, setChangeColor] = useAtom(gs_investasiFooter);
+ const [activeTab, setActiveTab] = useAtom(gs_StatusPortoInvestasi);
+ const [totalLembar, setTotalLembar] = useState(0);
+
+ const [value, setValue] = useState({
+ title: "",
+ targetDana: 0,
+ hargaLembar: 0,
+ roi: 0,
+ pencarianInvestorId: "",
+ periodeDevidenId: "",
+ pembagianDevidenId: "",
+ });
+
+ async function onSubmit() {
+ const body = {
+ authorId: id,
+ title: value.title,
+ targetDana: value.targetDana,
+ hargaLembar: value.hargaLembar,
+ totalLembar: totalLembar,
+ roi: value.roi,
+ masterPeriodeDevidenId: value.periodeDevidenId,
+ masterPembagianDevidenId: value.pembagianDevidenId,
+ masterPencarianInvestorId: value.pencarianInvestorId,
+ };
+ // toast("Berhasil disimpan")
+
+ // if (_.values(body).includes("")) return toast("Lengkapi data");
+ if (!fl) return toast("Gambar Kosong");
+ if (!pdf) return toast("File Kosong");
+
+ const gmbr = new FormData();
+ gmbr.append("file", fl);
+
+ const flPdf = new FormData();
+ flPdf.append("file", pdf as any);
+
+ await funCreateInvestasi(gmbr, flPdf, body as any).then((res) => {
+ if (res.status === 201) {
+ // toast(res.message);
+ setChangeColor(1);
+ setActiveTab("Review");
+ router.push(RouterInvestasi.dialog_create);
+ } else {
+ toast(res.message);
+ }
+ });
+ }
+
+ async function onTotalLembar(target: any, harga: any) {
+ const hasil: any = target / harga;
+ setTotalLembar(_.floor(hasil === Infinity ? 0 : hasil));
+ }
+
+ return (
+ <>
+
+ {/* Inputan Create */}
+
+
+
+ {img ? (
+
+ ) : (
+
+ )}
+
+
+
+ {/* Upload Foto */}
+
+ {
+ const buffer = URL.createObjectURL(
+ new Blob([new Uint8Array(await files.arrayBuffer())])
+ );
+ // console.log(files);
+ setImg(buffer);
+ setFl(files);
+ }}
+ accept="image/png,image/jpeg"
+ >
+ {(props) => (
+ }
+ compact
+ radius={50}
+ bg={Warna.hijau_muda}
+ // onClick={() => router.push("/dev/investasi/upload")}
+ >
+ Upload Gambar
+
+ )}
+
+
+ {/* Upload File */}
+
+ {!pdf ? (
+
+ Upload File Prospektus
+
+ ) : (
+
+ {pdf.name}
+
+ )}
+ {/* {JSON.stringify(filePdf)} */}
+ {
+ const buffer = URL.createObjectURL(
+ new Blob([new Uint8Array(await files.arrayBuffer())])
+ );
+ // console.log(files.name)
+ setFilePdf(buffer);
+ setPdf(files);
+ }}
+ >
+ {(props) => (
+ }
+ {...props}
+ compact
+ radius={"xl"}
+ bg={Warna.hijau_muda}
+ >
+ Upload File
+
+ )}
+
+
+ {
+ setValue({
+ ...value,
+ title: val.target.value,
+ });
+ }}
+ />
+ {
+ setValue({
+ ...value,
+ targetDana: val,
+ });
+ }}
+ />
+
+ {
+ //console.log(val)
+ setValue({
+ ...value,
+ hargaLembar: +val,
+ });
+ onTotalLembar(value.targetDana, val);
+ }}
+ />
+
+
+
+ Total Lembar
+
+
+ {totalLembar}
+
+
+
+ *Total lembar dihitung dari, Target Dana : Harga Perlembar
+
+
+
+ {
+ setValue({
+ ...value,
+ roi: val,
+ });
+ }}
+ />
+ ({
+ value: e.id,
+ label: e.name + " " + "hari",
+ }))}
+ onChange={(val) => {
+ setValue({
+ ...(value as any),
+ pencarianInvestorId: val,
+ });
+ }}
+ />
+ ({ value: e.id, label: e.name }))}
+ onChange={(val) => {
+ setValue({
+ ...(value as any),
+ periodeDevidenId: val,
+ });
+ }}
+ />
+ ({
+ value: e.id,
+ label: e.name + " " + "bulan",
+ }))}
+ onChange={(val) => {
+ setValue({
+ ...(value as any),
+ pembagianDevidenId: val,
+ });
+ }}
+ />
+
+
+
+ onSubmit()}
+ >
+ Simpan
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/create_berita/layout.tsx b/src/app_modules/investasi/create_berita/layout.tsx
new file mode 100644
index 00000000..98029344
--- /dev/null
+++ b/src/app_modules/investasi/create_berita/layout.tsx
@@ -0,0 +1,34 @@
+"use client";
+
+import { Warna } from "@/app/lib/warna";
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { AppShell, Button, Center, Footer } from "@mantine/core";
+import { IconPencilPlus } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+
+import React from "react";
+import toast from "react-simple-toasts";
+
+export default function LayoutCreateBeritaInvestasi({
+ children,
+ idInves
+}: {
+ children: React.ReactNode;
+ idInves: string
+}) {
+ const router = useRouter();
+ return (
+ <>
+ }
+ // footer={
+ //
+ // }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/create_berita/view.tsx b/src/app_modules/investasi/create_berita/view.tsx
new file mode 100644
index 00000000..3ebd4a1d
--- /dev/null
+++ b/src/app_modules/investasi/create_berita/view.tsx
@@ -0,0 +1,125 @@
+"use client";
+
+import { Warna } from "@/app/lib/warna";
+import {
+ AspectRatio,
+ Button,
+ Center,
+ FileButton,
+ Group,
+ Image,
+ Stack,
+ TextInput,
+ Textarea,
+ Title,
+} from "@mantine/core";
+import { IconCamera, IconUpload } from "@tabler/icons-react";
+import _ from "lodash";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import toast from "react-simple-toasts";
+import funCreateBeritaInvestasi from "../fun/fun_create_berita";
+
+export default function CreateBeritaInvestasi({idInves}: {idInves: string}) {
+ const router = useRouter();
+ const [fl, setFl] = useState(null);
+ const [img, setImg] = useState();
+
+ const [value, setValue] = useState({
+ title: "",
+ deskripsi: "",
+ investasiId: idInves
+ });
+
+ async function onCreate() {
+ const body = value;
+
+ if (_.values(body).includes("")) return toast("Lengkapi data");
+ if (!fl) return toast("File Kosong");
+
+ const fd = new FormData();
+ fd.append("file", fl);
+
+ await funCreateBeritaInvestasi(fd, body as any).then((res) => {
+ res.status === 201
+ ? (toast(res.message), router.back())
+ : toast(res.message);
+ });
+
+ // router.back();
+ // toast("Berita tersimpan");
+ }
+
+ return (
+ <>
+
+
+ {img ? (
+
+ ) : (
+
+ )}
+
+
+ {
+ const buffer = URL.createObjectURL(
+ new Blob([new Uint8Array(await files.arrayBuffer())])
+ );
+ setImg(buffer);
+ setFl(files);
+ }}
+ accept="image/png,image/jpeg"
+ >
+ {(props) => (
+ router.push("/dev/investasi/upload")}
+ >
+
+
+ )}
+
+
+ {
+ setValue({
+ ...value,
+ title: val.target.value,
+ });
+ }}
+ />
+
+ {
+ setValue({
+ ...value,
+ deskripsi: val.target.value,
+ });
+ }}
+ />
+
+
+ {
+ onCreate();
+ }}
+ >
+ Simpan
+
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/detail/layout.tsx b/src/app_modules/investasi/detail/layout.tsx
new file mode 100644
index 00000000..d76a981b
--- /dev/null
+++ b/src/app_modules/investasi/detail/layout.tsx
@@ -0,0 +1,41 @@
+"use client";
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { ActionIcon, AppShell, Group, Header, Text } from "@mantine/core";
+import { IconArrowLeft, IconEdit } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import { title } from "process";
+import React from "react";
+
+export default function LayoutDetailInvestasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ const router = useRouter();
+ return (
+ <>
+
+
+ {
+ router.back()
+ }}>
+
+
+ Detail Investasi
+ {
+ router.replace("")
+ }}>
+ {/* */}
+
+
+
+ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/detail/view.tsx b/src/app_modules/investasi/detail/view.tsx
new file mode 100644
index 00000000..78eb94ea
--- /dev/null
+++ b/src/app_modules/investasi/detail/view.tsx
@@ -0,0 +1,317 @@
+"use client";
+
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import { Warna } from "@/app/lib/warna";
+import {
+ ActionIcon,
+ AspectRatio,
+ Avatar,
+ Box,
+ Button,
+ Center,
+ Flex,
+ Grid,
+ Group,
+ Image,
+ Paper,
+ Progress,
+ Slider,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import {
+ IconBookDownload,
+ IconCircleCheck,
+ IconFileDescription,
+ IconSpeakerphone,
+ IconXboxX,
+} from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import { MODEL_Investasi } from "../model/model_investasi";
+import moment from "moment";
+import { MODEL_User_profile } from "@/app_modules/home/models/user_profile";
+import { RouterUserProfile } from "@/app/lib/router_hipmi/router_user_profile";
+import { gs_TransferValue } from "../g_state";
+import { useAtom } from "jotai";
+import _ from "lodash";
+
+export default function DetailInvestasi({
+ dataInvestasi,
+ dataUser,
+ loginUserId,
+ progress,
+ totalInvestor,
+}: {
+ dataInvestasi: MODEL_Investasi;
+ dataUser: MODEL_User_profile;
+ loginUserId: string;
+ progress: number;
+ totalInvestor: number;
+}) {
+ const router = useRouter();
+ const [investasi, setInvestasi] = useState(dataInvestasi);
+ const [user, setUser] = useState(dataUser);
+ const [transaksiValue, setTransaksiValue] = useAtom(gs_TransferValue);
+
+ const listBox = [
+ {
+ id: 1,
+ name: "Prospektus",
+ icon: ,
+ route: RouterInvestasi.detail_prospektus,
+ },
+ {
+ id: 2,
+ name: "Dokumen",
+ icon: ,
+ route: RouterInvestasi.detail_dokumen,
+ },
+ {
+ id: 3,
+ name: "Berita",
+ icon: ,
+ route: RouterInvestasi.berita,
+ },
+ ];
+
+ async function onSubmit() {
+ router.push(RouterInvestasi.proses_transaksi + `${investasi.id}`);
+ setTransaksiValue({
+ ...transaksiValue,
+ lembarTerbeli: "",
+ namaBank: "",
+ nomorRekening: "",
+ totalTransfer: "",
+ });
+ }
+
+ return (
+ <>
+ {/* Foto username dan sisa waktu */}
+
+
+
+ {(() => {
+ const usr = investasi.author.username;
+ const splt = usr.split("");
+ const Up = _.upperCase(splt[0]);
+
+ return Up;
+ })()}
+
+ {user.username}
+
+ {investasi.MasterProgresInvestasi.id === "1" ? (
+
+
+ Sisa waktu:
+
+ {Number(investasi.MasterPencarianInvestor.name) -
+ moment(new Date()).diff(
+ new Date(investasi.countDown),
+ "days"
+ )}
+
+ Hari
+
+
+ ) : (
+
+ {investasi.MasterProgresInvestasi.id === "2" ? (
+
+
+
+ Selesai
+
+
+ ) : (
+
+
+
+ Waktu Habis
+
+
+ )}
+
+ )}
+
+
+
+
+
+
+
+
+ {/* Title dan Progress */}
+
+
+ {investasi.title}
+
+
+
+
+ {/* Rincian Data */}
+
+
+
+
+ Dana Dibutuhkan
+
+ Rp.{" "}
+ {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+investasi.targetDana)}
+
+
+
+ Harga Per Lembar
+
+ Rp.{" "}
+ {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+investasi.hargaLembar)}
+
+
+
+ Jadwal Pembagian
+ {investasi.MasterPembagianDeviden.name} bulan
+
+
+ Pembagian Deviden
+ {investasi.MasterPeriodeDeviden.name}
+
+
+
+
+
+
+ Investor
+
+ {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(totalInvestor)}
+
+
+
+ ROI
+ {investasi.roi}%
+
+
+ Total Lembar
+
+ {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+investasi.totalLembar)}{" "}
+ lembar
+
+
+
+ Sisa Lembar
+
+ {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+investasi.sisaLembar)}{" "}
+ lembar
+
+
+
+
+
+
+ {/* List Box */}
+
+ {listBox.map((e) => (
+ router.push(e.route + `${investasi.id}`)}
+ >
+
+
+ {e.name}
+
+ {e.icon}
+
+
+
+
+ ))}
+
+
+ {investasi.sisaLembar === "0" ||
+ Number(investasi.MasterPencarianInvestor.name) -
+ moment(new Date()).diff(new Date(investasi.countDown), "days") <=
+ 0 ? (
+
+
+ Investasi Telah Ditutup
+
+
+ ) : (
+
+ {loginUserId === investasi.authorId ? (
+
+
+ Investasi Ini Milik Anda
+
+
+ ) : (
+
+ {
+ onSubmit();
+ }}
+ >
+ Beli Saham
+
+
+ )}
+
+ )}
+ >
+ );
+}
diff --git a/src/app_modules/investasi/detail_berita/layout.tsx b/src/app_modules/investasi/detail_berita/layout.tsx
new file mode 100644
index 00000000..3342c2fb
--- /dev/null
+++ b/src/app_modules/investasi/detail_berita/layout.tsx
@@ -0,0 +1,19 @@
+"use client";
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { AppShell } from "@mantine/core";
+import React from "react";
+
+export default function LayoutDetailBeritaInvestasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ }>
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/detail_berita/view.tsx b/src/app_modules/investasi/detail_berita/view.tsx
new file mode 100644
index 00000000..9f03f18e
--- /dev/null
+++ b/src/app_modules/investasi/detail_berita/view.tsx
@@ -0,0 +1,32 @@
+"use client";
+
+import { AspectRatio, Group, Image, Stack, Text, Title } from "@mantine/core";
+import { Model_Berita_Investasi } from "../model/model_investasi";
+import { useState } from "react";
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import moment from "moment";
+
+export default function DetailBeritaInvestasi({
+ dataBerita,
+}: {
+ dataBerita: Model_Berita_Investasi;
+}) {
+ const [berita, setBerita] = useState(dataBerita);
+ return (
+ <>
+
+
+ {berita.title}
+ {moment(berita.createdAt).format("lll")}
+
+
+
+
+ {berita.deskripsi}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/detail_dokumen/layout.tsx b/src/app_modules/investasi/detail_dokumen/layout.tsx
new file mode 100644
index 00000000..46231d13
--- /dev/null
+++ b/src/app_modules/investasi/detail_dokumen/layout.tsx
@@ -0,0 +1,19 @@
+"use client";
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { AppShell } from "@mantine/core";
+import React from "react";
+
+export default function LayoutDetailDokumenInvestasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ }>
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/detail_dokumen/view.tsx b/src/app_modules/investasi/detail_dokumen/view.tsx
new file mode 100644
index 00000000..a2623e32
--- /dev/null
+++ b/src/app_modules/investasi/detail_dokumen/view.tsx
@@ -0,0 +1,53 @@
+"use client";
+
+import { Paper, Grid, Center, Text, Title } from "@mantine/core";
+import { IconChevronRight } from "@tabler/icons-react";
+import Link from "next/link";
+import { MODEL_Investasi } from "../model/model_investasi";
+import { useState } from "react";
+import _ from "lodash";
+
+export default function DetailDokumenInvestasi({
+ dataInvestasi,
+}: {
+ dataInvestasi: MODEL_Investasi;
+}) {
+ const [dokumen, setDokumen] = useState(dataInvestasi);
+ return (
+ <>
+ {!_.isEmpty(dokumen.DokumenInvestasi) ? (
+ dokumen.DokumenInvestasi.map((e) => (
+
+
+ ""}
+ >
+
+ {e.title}
+
+
+
+
+
+
+
+
+
+ ))
+ ) : (
+
+ Tidak Ada File
+
+ )}
+ >
+ );
+}
diff --git a/src/app_modules/investasi/detail_portofolio/draft/layout.tsx b/src/app_modules/investasi/detail_portofolio/draft/layout.tsx
new file mode 100644
index 00000000..ab9a5672
--- /dev/null
+++ b/src/app_modules/investasi/detail_portofolio/draft/layout.tsx
@@ -0,0 +1,30 @@
+"use client";
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { AppShell } from "@mantine/core";
+import { IconEdit } from "@tabler/icons-react";
+import React from "react";
+
+export default function LayoutDetailDraftInvestasi({
+ children,
+ id
+}: {
+ children: React.ReactNode;
+ id: string
+}) {
+ return (
+ <>
+ }
+ route2={`/dev/investasi/edit/${id}`}
+ />
+ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/detail_portofolio/draft/page.tsx b/src/app_modules/investasi/detail_portofolio/draft/page.tsx
new file mode 100644
index 00000000..8cd68b06
--- /dev/null
+++ b/src/app_modules/investasi/detail_portofolio/draft/page.tsx
@@ -0,0 +1,157 @@
+"use client";
+
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import { Warna } from "@/app/lib/warna";
+import {
+ ActionIcon,
+ AspectRatio,
+ Avatar,
+ Box,
+ Button,
+ Center,
+ Flex,
+ Grid,
+ Group,
+ Image,
+ Paper,
+ Slider,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import {
+ IconBookDownload,
+ IconFileDescription,
+ IconSpeakerphone,
+} from "@tabler/icons-react";
+import { useAtom } from "jotai";
+import { useRouter } from "next/navigation";
+import { gs_StatusPortoInvestasi } from "../../g_state";
+import toast from "react-simple-toasts";
+import { MODEL_Investasi } from "../../model/model_investasi";
+import { useState } from "react";
+import _ from "lodash";
+import funGantiStatusInvestasi from "../../fun/fun_ganti_status";
+
+export default function DetailDraftInvestasi({
+ dataInvestasi,
+}: {
+ dataInvestasi: any;
+}) {
+ const router = useRouter();
+ const [activeTab, setActiveTab] = useAtom(gs_StatusPortoInvestasi);
+ const [investasi, setInvestasi] = useState(dataInvestasi);
+
+ const listBox = [
+ {
+ id: 1,
+ name: "Prospektus",
+ icon: ,
+ route: RouterInvestasi.edit_prospektus,
+ },
+ {
+ id: 2,
+ name: "Dokumen",
+ icon: ,
+ route: RouterInvestasi.edit_dokumen,
+ },
+ {
+ id: 3,
+ name: "Berita",
+ icon: ,
+ route: RouterInvestasi.edit_berita,
+ },
+ ];
+
+ async function onsubmit() {
+ await funGantiStatusInvestasi(investasi.id, "2")
+ .then((res) => res)
+ .then((val) => {
+ if (val.status === 200) {
+ toast("Review Berhasil Diajukan");
+ router.push(RouterInvestasi.portofolio);
+ setActiveTab("Review");
+ } else {
+ toast("Error");
+ }
+ });
+ }
+
+ return (
+ <>
+
+
+
+
+
+
+ {/* Title dan Persentase */}
+
+
+ {_.capitalize(investasi.title)}
+
+
+
+ {/* Rincian Data */}
+
+
+
+
+ Dana Dibutuhkan
+ Rp. {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+investasi.targetDana)}
+
+
+ Harga Per Lembar
+ Rp. {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+investasi.hargaLembar)}
+
+
+ Jadwal Pembagian
+ {investasi.MasterPembagianDeviden.name} bulan
+
+
+ Pencarian Investor
+ {investasi.MasterPencarianInvestor.name} Hari
+
+
+
+
+
+
+ ROI
+ {investasi.roi} %
+
+
+ Total Lembar
+ {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+investasi.totalLembar)} lembar
+
+
+ Pembagian Deviden
+ {investasi.MasterPeriodeDeviden.name}
+
+
+
+
+
+
+ onsubmit()}
+ >
+ Ajukan Review
+
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/detail_portofolio/publish/layout.tsx b/src/app_modules/investasi/detail_portofolio/publish/layout.tsx
new file mode 100644
index 00000000..ab38cebf
--- /dev/null
+++ b/src/app_modules/investasi/detail_portofolio/publish/layout.tsx
@@ -0,0 +1,19 @@
+"use client"
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate"
+import { AppShell } from "@mantine/core"
+import React from "react"
+
+export default function LayoutDetailPublishInvestasi({children}: {children: React.ReactNode}){
+ return<>
+
+
+ }
+ >
+ {children}
+
+
+ >
+}
\ No newline at end of file
diff --git a/src/app_modules/investasi/detail_portofolio/publish/page.tsx b/src/app_modules/investasi/detail_portofolio/publish/page.tsx
new file mode 100644
index 00000000..68bd9ad0
--- /dev/null
+++ b/src/app_modules/investasi/detail_portofolio/publish/page.tsx
@@ -0,0 +1,207 @@
+"use client";
+
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import { Warna } from "@/app/lib/warna";
+import {
+ ActionIcon,
+ AspectRatio,
+ Avatar,
+ Box,
+ Button,
+ Center,
+ Flex,
+ Grid,
+ Group,
+ Image,
+ Paper,
+ Progress,
+ Slider,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import {
+ IconBookDownload,
+ IconCircleCheck,
+ IconFileDescription,
+ IconSpeakerphone,
+} from "@tabler/icons-react";
+import { useAtom } from "jotai";
+import { useRouter } from "next/navigation";
+import toast from "react-simple-toasts";
+import { MODEL_Investasi } from "../../model/model_investasi";
+import { useState } from "react";
+import moment from "moment";
+import _ from "lodash";
+
+export default function DetailPublishInvestasi({
+ dataInvestasi,
+}: {
+ dataInvestasi: MODEL_Investasi;
+}) {
+ const router = useRouter();
+ const [investasi, setInvestasi] = useState(dataInvestasi);
+
+ const listBox = [
+ {
+ id: 1,
+ name: "Prospektus",
+ icon: ,
+ route: RouterInvestasi.detail_prospektus,
+ },
+ {
+ id: 2,
+ name: "Dokumen",
+ icon: ,
+ route: RouterInvestasi.edit_dokumen,
+ },
+ {
+ id: 3,
+ name: "Berita",
+ icon: ,
+ route: RouterInvestasi.list_edit_berita,
+ },
+ ];
+
+ return (
+ <>
+ {Number(investasi.MasterPencarianInvestor.name) -
+ moment(new Date()).diff(new Date(investasi.countDown), "days") <=
+ 0 ? (
+
+
+ Selesai
+
+ ) : (
+
+
+ Sisa waktu :{" "}
+ {Number(investasi.MasterPencarianInvestor.name) -
+ moment(new Date()).diff(
+ new Date(investasi.countDown),
+ "days"
+ )}{" "}
+ hari
+
+
+ )}
+
+
+
+
+
+
+
+ {/* Title dan Persentase */}
+
+
+ {investasi.title}
+
+
+
+
+ {/* Rincian Data */}
+
+
+
+
+ Dana Dibutuhkan
+
+ Rp.{" "}
+ {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+investasi.targetDana)}
+
+
+
+ Harga Per Lembar
+
+ Rp.{" "}
+ {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+investasi.hargaLembar)}
+
+
+
+ Jadwal Pembagian
+ {investasi.MasterPembagianDeviden.name} bulan
+
+
+ Pembagian Deviden
+ {investasi.MasterPeriodeDeviden.name}
+
+
+
+
+
+
+ ROI
+ {investasi.roi}%
+
+
+ Total Lembar
+
+ {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+investasi.totalLembar)}{" "}
+ lembar
+
+
+
+ Sisa Lembar
+
+ {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+investasi.sisaLembar)}{" "}
+ lembar
+
+
+
+
+
+
+ {/* List Box */}
+
+ {listBox.map((e) => (
+ router.push(e.route + `${investasi.id}`)}
+ >
+
+
+ {e.name}
+
+ {e.icon}
+
+
+
+
+ ))}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/detail_portofolio/reject/layout.tsx b/src/app_modules/investasi/detail_portofolio/reject/layout.tsx
new file mode 100644
index 00000000..89d76cd1
--- /dev/null
+++ b/src/app_modules/investasi/detail_portofolio/reject/layout.tsx
@@ -0,0 +1,30 @@
+"use client";
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { AppShell } from "@mantine/core";
+import { IconEdit } from "@tabler/icons-react";
+import React from "react";
+
+export default function LayoutDetailRejecttInvestasi({
+ children,
+ idInves,
+}: {
+ children: React.ReactNode;
+ idInves: string;
+}) {
+ return (
+ <>
+ }
+ // route2={`/dev/investasi/edit/${idInves}`}
+ />
+ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/detail_portofolio/reject/page.tsx b/src/app_modules/investasi/detail_portofolio/reject/page.tsx
new file mode 100644
index 00000000..f2ba204b
--- /dev/null
+++ b/src/app_modules/investasi/detail_portofolio/reject/page.tsx
@@ -0,0 +1,246 @@
+"use client";
+
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import { Warna } from "@/app/lib/warna";
+import {
+ ActionIcon,
+ AspectRatio,
+ Avatar,
+ Box,
+ Button,
+ Center,
+ Divider,
+ Flex,
+ Grid,
+ Group,
+ Image,
+ Modal,
+ Paper,
+ Slider,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import {
+ IconArrowBackUpDouble,
+ IconBookDownload,
+ IconFileDescription,
+ IconSpeakerphone,
+ IconTrash,
+} from "@tabler/icons-react";
+import { useAtom } from "jotai";
+import { useRouter } from "next/navigation";
+import { gs_StatusPortoInvestasi } from "../../g_state";
+import toast from "react-simple-toasts";
+import { MODEL_Investasi } from "../../model/model_investasi";
+import { useState } from "react";
+import funGantiStatusInvestasi from "../../fun/fun_ganti_status";
+import funDeleteInvestasi from "../../fun/fun_delete_investasi";
+import { useDisclosure } from "@mantine/hooks";
+
+export default function DetailRejectInvestasi({
+ dataInvestasi,
+}: {
+ dataInvestasi: MODEL_Investasi;
+}) {
+ const router = useRouter();
+ const [investasi, setInvestasi] = useState(dataInvestasi);
+ const [activeTab, setActiveTab] = useAtom(gs_StatusPortoInvestasi);
+ const [opened, { toggle }] = useDisclosure(false);
+
+ const listBox = [
+ {
+ id: 1,
+ name: "Prospektus",
+ icon: ,
+ route: RouterInvestasi.edit_prospektus,
+ },
+ {
+ id: 2,
+ name: "Dokumen",
+ icon: ,
+ route: RouterInvestasi.edit_dokumen,
+ },
+ // {
+ // id: 3,
+ // name: "Berita",
+ // icon: ,
+ // route: RouterInvestasi.edit_berita,
+ // },
+ ];
+
+ async function onAjukan() {
+ await funGantiStatusInvestasi(investasi.id, "1").then((res) => {
+ if (res.status === 200) {
+ toast("Project Diajukan Kembali");
+ setActiveTab("Draft");
+ router.push(RouterInvestasi.portofolio);
+ } else {
+ toast("Gagal Pengajuan");
+ }
+ });
+ }
+
+ async function onBatal() {
+ await funDeleteInvestasi(investasi.id).then((res) => {
+ if (res.status === 200) {
+ toast(res.message);
+ toggle();
+ router.push(RouterInvestasi.portofolio);
+ } else {
+ toast(res.message);
+ }
+ });
+ // setActiveTab("Reject");
+ }
+
+ return (
+ <>
+ {/* Pop up */}
+
+
+ Batal
+ onBatal()}>
+ Hapus
+
+
+
+
+ {/* Alasan */}
+
+ Alasan :
+
+
+ {investasi.catatan}
+
+
+
+
+ {/* Tombol Ajukan */}
+
+
+
+ }
+ mb={"xl"}
+ radius={50}
+ bg={"orange.7"}
+ color="yellow"
+ compact
+ onClick={() => onAjukan()}
+ >
+ Masuk ke Draft
+
+
+
+
+ {/* Tombol Hapus */}
+
+
+ {" "}
+ }
+ compact
+ mb={"xl"}
+ radius={50}
+ bg={"red.7"}
+ color="yellow"
+ onClick={() => toggle()}
+ >
+ Hapus Project
+
+
+
+
+
+
+
+
+
+
+
+ {/* Title dan Persentase */}
+
+
+ {investasi.title}
+
+
+
+ {/* Rincian Data */}
+
+
+
+
+ Dana Dibutuhkan
+ Rp. {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+investasi.targetDana)}
+
+
+ Harga Per Lembar
+ Rp. {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+investasi.hargaLembar)}
+
+
+ Jadwal Pembagian
+ {investasi.MasterPembagianDeviden.name} Bulan
+
+
+ Pencarian Investor
+ {investasi.MasterPencarianInvestor.name} Hari
+
+
+
+
+
+
+ ROI
+ {investasi.roi} %
+
+
+ Total Lembar
+ {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+investasi.totalLembar)} lembar
+
+
+ Pembagian Deviden
+ {investasi.MasterPeriodeDeviden.name}
+
+
+
+
+
+ {/* List Box */}
+
+ {listBox.map((e) => (
+ router.push(e.route + `${investasi.id}`)}
+ >
+
+
+
+ {e.name}
+
+ {e.icon}
+
+
+
+
+
+ ))}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/detail_portofolio/review/layout.tsx b/src/app_modules/investasi/detail_portofolio/review/layout.tsx
new file mode 100644
index 00000000..54aec622
--- /dev/null
+++ b/src/app_modules/investasi/detail_portofolio/review/layout.tsx
@@ -0,0 +1,19 @@
+"use client"
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate"
+import { AppShell } from "@mantine/core"
+import React from "react"
+
+export default function LayoutDetailReviewInvestasi({children}: {children: React.ReactNode}){
+ return<>
+
+
+ }
+ >
+ {children}
+
+
+ >
+}
\ No newline at end of file
diff --git a/src/app_modules/investasi/detail_portofolio/review/page.tsx b/src/app_modules/investasi/detail_portofolio/review/page.tsx
new file mode 100644
index 00000000..f8046368
--- /dev/null
+++ b/src/app_modules/investasi/detail_portofolio/review/page.tsx
@@ -0,0 +1,181 @@
+"use client";
+
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import { Warna } from "@/app/lib/warna";
+import {
+ ActionIcon,
+ AspectRatio,
+ Avatar,
+ Box,
+ Button,
+ Center,
+ Flex,
+ Grid,
+ Group,
+ Image,
+ Paper,
+ Slider,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import {
+ IconBookDownload,
+ IconFileDescription,
+ IconSpeakerphone,
+} from "@tabler/icons-react";
+import { useAtom } from "jotai";
+import { useRouter } from "next/navigation";
+import { gs_StatusPortoInvestasi } from "../../g_state";
+import toast from "react-simple-toasts";
+import { MODEL_Investasi } from "../../model/model_investasi";
+import funGantiStatusInvestasi from "../../fun/fun_ganti_status";
+import { useState } from "react";
+import _ from "lodash";
+
+export default function DetailReviewInvestasi({
+ dataInvestasi,
+}: {
+ dataInvestasi: MODEL_Investasi;
+}) {
+ const router = useRouter();
+ const [activeTab, setActiveTab] = useAtom(gs_StatusPortoInvestasi);
+ const [investasi, setInvestasi] = useState(dataInvestasi);
+
+ const listBox = [
+ {
+ id: 1,
+ name: "Prospektus",
+ icon: ,
+ route: RouterInvestasi.detail_prospektus,
+ },
+ {
+ id: 2,
+ name: "Dokumen",
+ icon: ,
+ route: RouterInvestasi.detail_dokumen,
+ },
+ // {
+ // id: 3,
+ // name: "Berita",
+ // icon: ,
+ // route: RouterInvestasi.berita,
+ // },
+ ];
+
+ async function onsubmit() {
+ await funGantiStatusInvestasi(investasi.id, "1")
+ .then((res) => res)
+ .then((val) => {
+ if (val.status === 200) {
+ toast("Review Dibatalkan");
+ router.push(RouterInvestasi.portofolio);
+ setActiveTab("Draft");
+ } else {
+ toast("Error");
+ }
+ });
+ }
+
+ return (
+ <>
+
+
+
+
+
+
+ {/* Title dan Persentase */}
+
+
+ {_.capitalize(investasi.title)}
+
+
+
+ {/* Rincian Data */}
+
+
+
+
+ Dana Dibutuhkan
+ Rp. {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 20,
+ }).format(+investasi.targetDana)}
+
+
+ Harga Per Lembar
+ Rp. {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+investasi.hargaLembar)}
+
+
+ Jadwal Pembagian
+ {investasi.MasterPembagianDeviden.name} Bulan
+
+
+ Pencarian Investor
+ {investasi.MasterPencarianInvestor.name} Hari
+
+
+
+
+
+
+ ROI
+ {investasi.roi} %
+
+
+ Total Lembar
+ {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+investasi.totalLembar)} lembar
+
+
+ Pembagian Deviden
+ {investasi.MasterPeriodeDeviden.name}
+
+
+
+
+
+ {/* List Box */}
+
+ {listBox.map((e) => (
+ router.push(e.route + `${investasi.id}`)}
+ >
+
+
+
+ {e.name}
+
+ {e.icon}
+
+
+
+
+
+ ))}
+
+
+ {/* Tombol Ajukan */}
+
+ onsubmit()}
+ >
+ Batalkan Review
+
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/detail_prospektus/layout.tsx b/src/app_modules/investasi/detail_prospektus/layout.tsx
new file mode 100644
index 00000000..ac6d266d
--- /dev/null
+++ b/src/app_modules/investasi/detail_prospektus/layout.tsx
@@ -0,0 +1,24 @@
+"use client";
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { ActionIcon, AppShell, Group, Header, Text } from "@mantine/core";
+import { IconArrowLeft } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import router from "next/router";
+import { title } from "process";
+import React from "react";
+
+export default function LayoutDetailProspektus({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ const router = useRouter();
+ return (
+ <>
+ }>
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/detail_prospektus/view.tsx b/src/app_modules/investasi/detail_prospektus/view.tsx
new file mode 100644
index 00000000..97f82cfc
--- /dev/null
+++ b/src/app_modules/investasi/detail_prospektus/view.tsx
@@ -0,0 +1,48 @@
+"use client";
+
+import { Paper, Grid, Center, Text, Title } from "@mantine/core";
+import { IconChevronRight } from "@tabler/icons-react";
+import Link from "next/link";
+import {
+ MODEL_Investasi,
+ Model_Prospektus_Investasi,
+} from "../model/model_investasi";
+import { useState } from "react";
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+
+export default function DetailPropektus({
+ dataInvestasi,
+}: {
+ dataInvestasi: MODEL_Investasi;
+}) {
+ const [prospek, setProspek] = useState(dataInvestasi);
+
+ return (
+ <>
+ {prospek.ProspektusInvestasi !== null ? (
+
+
+
+
+ Prospektus_{prospek.title}
+
+
+
+
+
+
+
+
+
+ ) : (
+
+ Tidak Ada File
+
+ )}
+ >
+ );
+}
diff --git a/src/app_modules/investasi/detail_saham_terbeli/layout.tsx b/src/app_modules/investasi/detail_saham_terbeli/layout.tsx
new file mode 100644
index 00000000..6122fe9b
--- /dev/null
+++ b/src/app_modules/investasi/detail_saham_terbeli/layout.tsx
@@ -0,0 +1,19 @@
+"use client";
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { AppShell } from "@mantine/core";
+import React from "react";
+
+export default function LayoutDetailSahamTerbeli({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ }>
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/detail_saham_terbeli/view.tsx b/src/app_modules/investasi/detail_saham_terbeli/view.tsx
new file mode 100644
index 00000000..44caf969
--- /dev/null
+++ b/src/app_modules/investasi/detail_saham_terbeli/view.tsx
@@ -0,0 +1,323 @@
+"use client";
+
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import { Warna } from "@/app/lib/warna";
+import {
+ ActionIcon,
+ AspectRatio,
+ Avatar,
+ Box,
+ Button,
+ Center,
+ Divider,
+ Flex,
+ Grid,
+ Group,
+ Image,
+ Paper,
+ Progress,
+ Slider,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import {
+ IconBookDownload,
+ IconCircleCheck,
+ IconFileDescription,
+ IconSpeakerphone,
+} from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import { MODEL_Transaksi_Investasi } from "../model/model_investasi";
+import { useState } from "react";
+import moment from "moment";
+import _ from "lodash";
+
+export default function DetailSahamTerbeli({
+ dataTransaksi,
+ investor,
+}: {
+ dataTransaksi: MODEL_Transaksi_Investasi;
+ investor: number;
+}) {
+ const router = useRouter();
+ const [investasi, setINvestasi] = useState(dataTransaksi);
+ const listBox = [
+ {
+ id: 1,
+ name: "Prospektus",
+ icon: ,
+ route: RouterInvestasi.detail_prospektus,
+ },
+ {
+ id: 2,
+ name: "Dokumen",
+ icon: ,
+ route: RouterInvestasi.detail_dokumen,
+ },
+ {
+ id: 3,
+ name: "Berita",
+ icon: ,
+ route: RouterInvestasi.berita,
+ },
+ ];
+
+ return (
+ <>
+
+
+
+ {(() => {
+ const usr = investasi.Investasi.author.username;
+ const splt = usr.split("");
+ const Up = _.upperCase(splt[0]);
+
+ return Up;
+ })()}
+
+ {investasi.Investasi.author.username}
+
+ {(() => {
+ if (
+ Number(investasi.Investasi.MasterPencarianInvestor.name) -
+ moment(new Date()).diff(new Date(investasi.createdAt), "days") <=
+ 0
+ ) {
+ return (
+ <>
+
+
+ Selesai
+
+ >
+ );
+ } else {
+ return (
+ <>
+
+ {(() => {
+ if (
+ Number(investasi.Investasi.MasterPencarianInvestor.name) -
+ moment(new Date()).diff(
+ new Date(investasi.Investasi.countDown),
+ "days"
+ ) <=
+ 0
+ ) {
+ return (
+ <>
+
+
+
+ Waktu Habis
+
+
+ >
+ );
+ } else {
+ return (
+ <>
+
+ Sisa waktu:
+
+ {Number(
+ investasi.Investasi.MasterPencarianInvestor.name
+ ) -
+ moment(new Date()).diff(
+ new Date(investasi.Investasi.countDown),
+ "days"
+ )}
+
+ Hari
+
+ >
+ );
+ }
+ })()}
+
+ >
+ );
+ }
+ })()}
+
+
+ {/* Gambar Investasi */}
+
+
+
+
+
+
+ {/* Title dan Persentase */}
+
+
+ {investasi.Investasi.title}
+
+
+
+
+ {/* Rincian Data */}
+
+
+
+ {/*
+ Terkumpul
+ Rp.
+ */}
+
+ Dana Dibutuhkan
+
+ Rp.{" "}
+ {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+investasi.Investasi.targetDana)}
+
+
+
+ Harga Per Lembar
+
+ Rp.{" "}
+ {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+investasi.Investasi.hargaLembar)}
+
+
+
+ Jadwal Pembagian
+
+ {investasi.Investasi.MasterPembagianDeviden.name} bulan{" "}
+
+
+
+ Pembagian Deviden
+ {investasi.Investasi.MasterPeriodeDeviden.name}
+
+
+
+
+
+
+ Investor
+ {new Intl.NumberFormat("id-ID", {maximumSignificantDigits: 10}).format(investor)}
+
+
+ ROI
+ {investasi.Investasi.roi}%
+
+
+ Total Lembar
+
+ {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+investasi.Investasi.totalLembar)}{" "}
+ lembar
+
+
+
+ Sisa Lembar
+
+ {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+investasi.Investasi.sisaLembar)}{" "}
+ lembar
+
+
+
+
+
+
+
+
+ {/* Saham Terbeli */}
+
+
+ Saham Anda
+
+
+
+
+
+ Total Pembelian
+
+ Rp.{" "}
+ {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+investasi.gross_amount)}
+
+
+
+
+
+
+
+ Lembar Dibeli
+
+ {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+investasi.quantity)}{" "}
+ lembar
+
+
+
+
+
+
+
+ {/* List Box */}
+
+ {listBox.map((e) => (
+ router.push(e.route + `${investasi.Investasi.id}`)}
+ >
+
+
+
+ {e.name}
+
+ {e.icon}
+
+
+
+
+
+ ))}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/dialog_page/create/layout.tsx b/src/app_modules/investasi/dialog_page/create/layout.tsx
new file mode 100644
index 00000000..fb9731e5
--- /dev/null
+++ b/src/app_modules/investasi/dialog_page/create/layout.tsx
@@ -0,0 +1,44 @@
+"use client";
+
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import {
+ AppShell,
+ CloseButton,
+ Footer,
+ Group,
+ Header,
+ Text,
+} from "@mantine/core";
+import { useShallowEffect } from "@mantine/hooks";
+import { IconAlertTriangle } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import router from "next/router";
+import React from "react";
+
+export default function LayoutDialogPageCreateInvestasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ const router = useRouter();
+ useShallowEffect(() => {
+ setTimeout(() => router.push(RouterInvestasi.portofolio), 3000);
+ }, []);
+ return (
+ <>
+
+
+
+ Mohon menunggu validasi Admin
+
+
+
+ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/dialog_page/create/view.tsx b/src/app_modules/investasi/dialog_page/create/view.tsx
new file mode 100644
index 00000000..b53551c3
--- /dev/null
+++ b/src/app_modules/investasi/dialog_page/create/view.tsx
@@ -0,0 +1,16 @@
+"use client";
+
+import { Group, Highlight, Stack, Text, Title } from "@mantine/core";
+import { IconAlertTriangle, IconCircleCheck } from "@tabler/icons-react";
+
+export default function DialogPageCreateInvestasi() {
+ return (
+ <>
+
+ Berhasil Membuat Proyek Investasi
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/dialog_page/transaksi_saham/layout.tsx b/src/app_modules/investasi/dialog_page/transaksi_saham/layout.tsx
new file mode 100644
index 00000000..2a58347e
--- /dev/null
+++ b/src/app_modules/investasi/dialog_page/transaksi_saham/layout.tsx
@@ -0,0 +1,39 @@
+"use client";
+
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import { AppShell, CloseButton, Group, Header, Text } from "@mantine/core";
+import { useAtom } from "jotai";
+import { useRouter } from "next/navigation";
+import React from "react";
+import { gs_investasiFooter } from "../../g_state";
+
+export default function LayoutCountDownTransaksiInvestasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ const router = useRouter();
+ const [hotMenu, setHotMenu] = useAtom(gs_investasiFooter)
+ return (
+ <>
+
+
+ {
+ router.push(RouterInvestasi.main_transaksi),
+ setHotMenu(3)
+ }}
+ />
+ Status Transfer
+
+
+ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/dialog_page/transaksi_saham/view.tsx b/src/app_modules/investasi/dialog_page/transaksi_saham/view.tsx
new file mode 100644
index 00000000..59527e6b
--- /dev/null
+++ b/src/app_modules/investasi/dialog_page/transaksi_saham/view.tsx
@@ -0,0 +1,56 @@
+"use client";
+
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import { Box, Center, Loader, Stack, Text, Title } from "@mantine/core";
+import { useShallowEffect } from "@mantine/hooks";
+import { IconCircleCheck } from "@tabler/icons-react";
+import moment from "moment";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import toast from "react-simple-toasts";
+import Countdown from "react-countdown";
+
+export default function CountDownTransaksiInvestasi() {
+ const router = useRouter();
+ const [count, setCount] = useState(10);
+ useShallowEffect(() => {
+ setTimeout(() => router.push(RouterInvestasi.status_transaksi), 10000);
+ }, []);
+
+ const PopupCD = () => Sedang di Proses ;
+ const countD = ({ hours, minutes, seconds, completed }: any) => {
+ if (completed) {
+ return PopupCD();
+ } else {
+ return (
+ <>
+ {minutes}:{seconds}
+ >
+ );
+ }
+ };
+
+ return (
+ <>
+
+
+
+
+
+ Xendit sedang memproses transaksimu
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/dummy/data_dummy.json b/src/app_modules/investasi/dummy/data_dummy.json
new file mode 100644
index 00000000..40332e27
--- /dev/null
+++ b/src/app_modules/investasi/dummy/data_dummy.json
@@ -0,0 +1,132 @@
+[
+ {
+ "id": "clny2l8e20002tlagig62qv50",
+ "title": "Event EO",
+ "targetDana": "20000",
+ "hargaLembar": "1000",
+ "totalLembar": "200",
+ "roi": "7",
+ "active": true,
+ "createdAt": "2023-10-20T03:47:19.610Z",
+ "updatedAt": "2023-10-20T03:47:19.610Z",
+ "authorId": "clntsruqk0002tlrfyc9vzhxx",
+ "masterPeriodeDevidenId": "Akhir Project",
+ "masterPembagianDevidenId": 3,
+ "masterPencarianInvestorId": 60,
+ "imagesId": "clny2l8dj0000tlagcpsi9dmz",
+ "persentase": 30,
+ "saham_beli": 1,
+ "statusPorto": {
+ "id": 1,
+ "status": "Draft"
+ },
+ "statusSaham": {
+ "id": 2,
+ "status": "Menunggu konfirmasi"
+ }
+ },
+ {
+ "id": "clnxyjc0r0002tlamg8fn9ubk",
+ "title": "Subway ",
+ "targetDana": "1600000000",
+ "hargaLembar": "1000",
+ "totalLembar": "1600000",
+ "roi": "6",
+ "active": true,
+ "createdAt": "2023-10-20T01:53:52.539Z",
+ "updatedAt": "2023-10-20T01:53:52.539Z",
+ "authorId": "clntxvesu0002tlnbz030gx30",
+ "masterPeriodeDevidenId": "Selamanya",
+ "masterPembagianDevidenId": 6,
+ "masterPencarianInvestorId": 4,
+ "imagesId": "clnxyjc070000tlamc5jmsqse",
+ "persentase": 60,
+ "saham_beli": 0,
+ "statusPorto": {
+ "id": 3,
+ "status": "Publish"
+ },
+ "statusSaham": {
+ "id": 1,
+ "status": "Berhasil"
+ }
+ },
+ {
+ "id": "clnwzrcqz0002tlqlrb3b8kif",
+ "title": "Weeding EO",
+ "targetDana": "300000",
+ "hargaLembar": "1000",
+ "totalLembar": "3000",
+ "roi": "6",
+ "active": true,
+ "createdAt": "2023-10-19T09:40:20.171Z",
+ "updatedAt": "2023-10-19T09:40:20.171Z",
+ "authorId": "clntxvesu0002tlnbz030gx30",
+ "masterPeriodeDevidenId": "Selamanya",
+ "masterPembagianDevidenId": 6,
+ "masterPencarianInvestorId": 30,
+ "imagesId": "clnwzrcqs0000tlqlfr2cmbo5",
+ "persentase": 30,
+ "saham_beli": 1,
+ "statusPorto": {
+ "id": 2,
+ "status": "Review"
+ },
+ "statusSaham": {
+ "id": 1,
+ "status": "Berhasil"
+ }
+ },
+ {
+ "id": "clnwzmah00005tlwdn1h7htp6",
+ "title": "Exi EO",
+ "targetDana": "100000",
+ "hargaLembar": "1000",
+ "totalLembar": "1000",
+ "roi": "3",
+ "active": true,
+ "createdAt": "2023-10-19T09:36:23.940Z",
+ "updatedAt": "2023-10-19T09:36:23.940Z",
+ "authorId": "clntxvesu0002tlnbz030gx30",
+ "masterPeriodeDevidenId": "Selamanya",
+ "masterPembagianDevidenId": 3,
+ "masterPencarianInvestorId": 60,
+ "imagesId": "clnwzmagq0003tlwd2gldlzgb",
+ "persentase": 50,
+ "saham_beli": 1,
+ "statusPorto": {
+ "id": 2,
+ "status": "Review"
+ },
+ "statusSaham": {
+ "id": 1,
+ "status": "Berhasil"
+ }
+ },
+ {
+ "id": "clnwyvtlx0002tlfopdvez4yr",
+ "title": "Party EO",
+ "targetDana": "30000",
+ "hargaLembar": "1000",
+ "totalLembar": "30",
+ "roi": "1",
+ "active": true,
+ "createdAt": "2023-10-19T09:15:49.030Z",
+ "updatedAt": "2023-10-19T09:15:49.030Z",
+ "authorId": "clntxvesu0002tlnbz030gx30",
+ "masterPeriodeDevidenId": "Selamanya",
+ "masterPembagianDevidenId": 3,
+ "masterPencarianInvestorId": 90,
+ "imagesId": "clnwyvtlh0000tlfof0ec1x9k",
+ "persentase": 80,
+ "saham_beli": 0,
+ "statusPorto": {
+ "id": 4,
+ "status": "Reject"
+ },
+ "statusSaham": {
+ "id": 2,
+ "status": "Menunggu konfirmasi"
+ }
+ }
+]
diff --git a/src/app_modules/investasi/edit/layout.tsx b/src/app_modules/investasi/edit/layout.tsx
new file mode 100644
index 00000000..cfae68e7
--- /dev/null
+++ b/src/app_modules/investasi/edit/layout.tsx
@@ -0,0 +1,13 @@
+"use client"
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate"
+import { AppShell } from "@mantine/core"
+import React from "react"
+
+export default function LayoutEditInvestasi({children}: {children: React.ReactNode}){
+ return<>
+ }>
+ {children}
+
+ >
+}
\ No newline at end of file
diff --git a/src/app_modules/investasi/edit/view.tsx b/src/app_modules/investasi/edit/view.tsx
new file mode 100644
index 00000000..d09052b7
--- /dev/null
+++ b/src/app_modules/investasi/edit/view.tsx
@@ -0,0 +1,57 @@
+"use client";
+
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import { Center, Grid, Group, Paper, Text, Title } from "@mantine/core";
+import { IconChevronRight } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+
+export default function EditInvestasi({id}:{id:string}) {
+ const router = useRouter();
+ const listEdit = [
+ {
+ id: 1,
+ name: "Intro",
+ route: RouterInvestasi.edit_intro,
+ },
+ {
+ id: 2,
+ name: "Prospektus",
+ route: RouterInvestasi.edit_prospektus,
+ },
+ {
+ id: 3,
+ name: "Dokumen",
+ route: RouterInvestasi.edit_dokumen,
+ },
+ // {
+ // id: 4,
+ // name: "Berita",
+ // route: RouterInvestasi.list_edit_berita,
+ // },
+ ];
+ return (
+ <>
+ {listEdit.map((e) => (
+ router.push(e.route + `${id}`)}
+ >
+
+
+ {e.name}
+
+
+
+
+
+
+
+
+ ))}
+ >
+ );
+}
diff --git a/src/app_modules/investasi/edit_berita/layout.tsx b/src/app_modules/investasi/edit_berita/layout.tsx
new file mode 100644
index 00000000..d99cb5ed
--- /dev/null
+++ b/src/app_modules/investasi/edit_berita/layout.tsx
@@ -0,0 +1,31 @@
+"use client";
+
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import { Warna } from "@/app/lib/warna";
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { AppShell, Button, Center, Footer } from "@mantine/core";
+import { useRouter } from "next/navigation";
+import React from "react";
+import toast from "react-simple-toasts";
+
+export default function LayoutEditBeritaInvestasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ const router = useRouter()
+ return (
+ <>
+ }
+ // footer={
+ //
+ // }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/edit_berita/view.tsx b/src/app_modules/investasi/edit_berita/view.tsx
new file mode 100644
index 00000000..96a5c6fd
--- /dev/null
+++ b/src/app_modules/investasi/edit_berita/view.tsx
@@ -0,0 +1,133 @@
+"use client";
+
+import {
+ AspectRatio,
+ Button,
+ Center,
+ FileButton,
+ FileInput,
+ Group,
+ Image,
+ Stack,
+ Text,
+ TextInput,
+ Textarea,
+} from "@mantine/core";
+import { IconCamera, IconUpload } from "@tabler/icons-react";
+import {
+ MODEL_Investasi,
+ Model_Berita_Investasi,
+} from "../model/model_investasi";
+import { useState } from "react";
+import { useRouter } from "next/navigation";
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import { Warna } from "@/app/lib/warna";
+import toast from "react-simple-toasts";
+import _ from "lodash";
+import funEditBeritaInvestasi from "../fun/fun_edit_berita";
+import deleteBeritaInvestasi from "../fun/fun_delete_berita";
+
+export default function EditBeritaInvestasi({
+ dataBerita,
+}: {
+ dataBerita: Model_Berita_Investasi;
+}) {
+ const router = useRouter();
+ const [edit, setEdit] = useState(dataBerita);
+ const [img, setImg] = useState();
+ const [fl, setFl] = useState(null);
+
+ async function onUpdate() {
+ const body = edit;
+ if (_.values(body).includes("")) return toast("Lengkapi data");
+
+ const fd = new FormData();
+ fd.append("file", fl as any);
+
+ await funEditBeritaInvestasi(fd, body).then(async (res) => {
+ if (res.status === 200) {
+ router.back();
+ } else {
+ toast(res.message)
+ }
+ });
+ }
+
+
+ return (
+ <>
+
+
+ {img ? (
+
+ ) : (
+
+ )}
+
+
+ {
+ const buffer = URL.createObjectURL(
+ new Blob([new Uint8Array(await files.arrayBuffer())])
+ );
+ setImg(buffer);
+ setFl(files);
+ }}
+ accept="image/png,image/jpeg"
+ >
+ {(props) => (
+
+
+
+ )}
+
+
+
+ {
+ setEdit({
+ ...edit,
+ title: val.target.value,
+ });
+ }}
+ />
+ {
+ setEdit({
+ ...edit,
+ deskripsi: val.target.value,
+ });
+ }}
+ />
+
+
+ {
+ onUpdate();
+ }}
+ >
+ Update
+
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/edit_dokumen/layout.tsx b/src/app_modules/investasi/edit_dokumen/layout.tsx
new file mode 100644
index 00000000..70c781b4
--- /dev/null
+++ b/src/app_modules/investasi/edit_dokumen/layout.tsx
@@ -0,0 +1,31 @@
+"use client";
+
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { AppShell } from "@mantine/core";
+import { IconEdit } from "@tabler/icons-react";
+import React from "react";
+
+export default function LayoutEditDokumenInvestasi({
+ children,
+ idInves,
+}: {
+ children: React.ReactNode;
+ idInves: string
+}) {
+ return (
+ <>
+ }
+ route2={RouterInvestasi.upload_dokumen + `${idInves}`}
+ />
+ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/edit_dokumen/view.tsx b/src/app_modules/investasi/edit_dokumen/view.tsx
new file mode 100644
index 00000000..0f3ea4e0
--- /dev/null
+++ b/src/app_modules/investasi/edit_dokumen/view.tsx
@@ -0,0 +1,95 @@
+"use client";
+
+import {
+ Paper,
+ Grid,
+ Center,
+ Title,
+ Divider,
+ Button,
+ Text,
+ ActionIcon,
+ Group,
+ Modal,
+} from "@mantine/core";
+import {
+ IconChevronRight,
+ IconTrash,
+ IconWorldShare,
+} from "@tabler/icons-react";
+import Link from "next/link";
+import { useState } from "react";
+import { MODEL_Investasi } from "../model/model_investasi";
+import _ from "lodash";
+import funDeleteDokumenInvestasi from "../fun/fun_delete_dokumen";
+import toast from "react-simple-toasts";
+import funLoadDataInvestasi from "../fun/fun_load_data";
+import { useDisclosure } from "@mantine/hooks";
+import { Warna } from "@/app/lib/warna";
+
+export default function EditDokumenInvestasi({
+ dataInvestasi,
+}: {
+ dataInvestasi: MODEL_Investasi;
+}) {
+ const [dokumen, setDokumen] = useState(dataInvestasi);
+
+ async function onDelete(id: string) {
+ await funDeleteDokumenInvestasi(id).then(async (res) => {
+ if (res.status === 200) {
+ toast(res.message);
+
+ const load = await funLoadDataInvestasi(dokumen.id);
+ setDokumen(load as any);
+ } else {
+ toast(res.message);
+ }
+ });
+ }
+
+ return (
+ <>
+ {!_.isEmpty(dokumen.DokumenInvestasi) ? (
+ dokumen.DokumenInvestasi.map((e) => (
+
+ ""}
+ >
+
+ {e.title}
+
+
+
+
+
+
+
+
+
+ {
+ onDelete(e.id);
+ }}
+ >
+
+
+
+
+
+
+ ))
+ ) : (
+
+ Tidak ada file
+
+ )}
+
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/edit_intro/layout.tsx b/src/app_modules/investasi/edit_intro/layout.tsx
new file mode 100644
index 00000000..29c3b91d
--- /dev/null
+++ b/src/app_modules/investasi/edit_intro/layout.tsx
@@ -0,0 +1,23 @@
+"use client";
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { AppShell, Stack, Text } from "@mantine/core";
+import React from "react";
+
+export default function LayoutEditIntroInvestasi({
+
+ children,
+}: {
+
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ }>
+
+ {children}
+
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/edit_intro/view.tsx b/src/app_modules/investasi/edit_intro/view.tsx
new file mode 100644
index 00000000..9f99708b
--- /dev/null
+++ b/src/app_modules/investasi/edit_intro/view.tsx
@@ -0,0 +1,266 @@
+"use client";
+
+import { Warna } from "@/app/lib/warna";
+import {
+ Paper,
+ Grid,
+ Center,
+ Text,
+ Title,
+ Button,
+ Divider,
+ AspectRatio,
+ Box,
+ FileButton,
+ Group,
+ Select,
+ TextInput,
+ Image,
+ NumberInput,
+ Stack,
+ Modal,
+} from "@mantine/core";
+import { IconCamera, IconChevronRight, IconUpload } from "@tabler/icons-react";
+import Link from "next/link";
+import { useRouter } from "next/navigation";
+
+import { useState } from "react";
+import toast from "react-simple-toasts";
+import { MODEL_Investasi } from "../model/model_investasi";
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import _ from "lodash";
+import { MODEL_DEFAULT_MASTER } from "@/app_modules/models/model_default_master";
+import funEditInvestasi from "../fun/fun_edit_investasi";
+import { useDisclosure, useWindowScroll } from "@mantine/hooks";
+
+export default function EditIntroInvestasi({
+ dataInvestasi,
+ listPencarian,
+ listPeriode,
+ listPembagian,
+}: {
+ dataInvestasi: MODEL_Investasi;
+ listPencarian: MODEL_DEFAULT_MASTER[];
+ listPeriode: MODEL_DEFAULT_MASTER[];
+ listPembagian: MODEL_DEFAULT_MASTER[];
+}) {
+ const router = useRouter();
+ const [opened, { open, close }] = useDisclosure(false);
+ const [scroll, scrollTo] = useWindowScroll();
+
+ const [edit_inves, setEdit_inves] = useState(dataInvestasi);
+ const [img, setImg] = useState();
+ const [fl, setFl] = useState(null);
+ const [totalLembar, setTotalLembar] = useState(
+ edit_inves.totalLembar
+ );
+
+ async function onTotalLembar(target: any, harga: any) {
+ const hasil: any = target / harga;
+ setTotalLembar(_.floor(hasil === Infinity ? 0 : hasil));
+ }
+
+ async function onUpdate() {
+ const body = edit_inves;
+ if (_.values(edit_inves).includes("")) return toast("Lengkapi data");
+
+ const fd = new FormData();
+ fd.append("file", fl as any);
+
+ await funEditInvestasi(fd, body).then(async (res) => {
+ res.status === 200
+ ? (toast(res.message), router.back())
+ : toast(res.message);
+ });
+ }
+
+ return (
+ <>
+
+
+
+ Batal
+
+
+ Simpan
+
+
+
+
+
+
+
+ {img ? (
+
+ ) : (
+
+ )}
+
+
+
+ {
+ const buffer = URL.createObjectURL(
+ new Blob([new Uint8Array(await files.arrayBuffer())])
+ );
+ setImg(buffer);
+ setFl(files);
+ }}
+ accept="image/png,image/jpeg"
+ >
+ {(props) => (
+ }
+ compact
+ bg={Warna.hijau_muda}
+ color="green"
+ >
+ Upload Gambar
+
+ )}
+
+
+
+ {
+ setEdit_inves({
+ ...edit_inves,
+ title: val.target.value,
+ });
+ }}
+ />
+
+ {
+ setEdit_inves({
+ ...edit_inves,
+ targetDana: val as any,
+ });
+ }}
+ />
+
+ {
+ setEdit_inves({
+ ...edit_inves,
+ hargaLembar: val as any,
+ });
+ onTotalLembar(edit_inves.targetDana, val);
+ }}
+ />
+
+ {/* Total Lembar */}
+
+
+ Total Lembar
+
+
+ {totalLembar}
+
+
+
+ *Total lembar dihitung dari, Target Dana : Harga Perlembar
+
+
+
+ {
+ setEdit_inves({
+ ...edit_inves,
+ roi: val as any,
+ });
+ }}
+ />
+
+ {/* Select Start */}
+ ({
+ value: e.id,
+ label: e.name + " " + "hari",
+ }))}
+ value={edit_inves.MasterPencarianInvestor.id}
+ onChange={(val) => {
+ setEdit_inves({
+ ...(edit_inves as any),
+ MasterPencarianInvestor: {
+ id: val,
+ },
+ });
+ }}
+ />
+ ({
+ value: e.id,
+ label: e.name,
+ }))}
+ value={edit_inves.MasterPeriodeDeviden.id}
+ onChange={(val) => {
+ setEdit_inves({
+ ...(edit_inves as any),
+ MasterPeriodeDeviden: {
+ id: val,
+ },
+ });
+ }}
+ />
+ ({
+ value: e.id,
+ label: e.name + " " + `${"bulan"}`,
+ }))}
+ value={edit_inves.MasterPembagianDeviden.id}
+ onChange={(val) => {
+ setEdit_inves({
+ ...(edit_inves as any),
+ MasterPembagianDeviden: {
+ id: val,
+ },
+ });
+ }}
+ />
+ {/* Select End */}
+
+
+ {
+ scrollTo({ y: 0 });
+ open();
+ }}
+ >
+ Update
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/edit_propektus/layout.tsx b/src/app_modules/investasi/edit_propektus/layout.tsx
new file mode 100644
index 00000000..0e0c2574
--- /dev/null
+++ b/src/app_modules/investasi/edit_propektus/layout.tsx
@@ -0,0 +1,33 @@
+"use client";
+
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { AppShell } from "@mantine/core";
+import { IconEdit } from "@tabler/icons-react";
+import React from "react";
+import getOneInvestasiById from "../fun/get_one_investasi_by_id";
+import { MODEL_Investasi } from "../model/model_investasi";
+
+export default function LayoutEditProspektusInvestasi({
+ children,
+ dataInvestasi,
+}: {
+ children: React.ReactNode;
+ dataInvestasi: MODEL_Investasi;
+}) {
+ return (
+ <>
+ }
+ route2={RouterInvestasi.upload_prospektus + `${dataInvestasi.id}`}
+ />
+ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/edit_propektus/view.tsx b/src/app_modules/investasi/edit_propektus/view.tsx
new file mode 100644
index 00000000..5ea33d68
--- /dev/null
+++ b/src/app_modules/investasi/edit_propektus/view.tsx
@@ -0,0 +1,75 @@
+"use client";
+
+import {
+ Paper,
+ Grid,
+ Center,
+ Title,
+ Divider,
+ Button,
+ Text,
+ Group,
+ FileButton,
+ FileInput,
+ Image,
+ AspectRatio,
+ Flex,
+ Stack,
+ Box,
+} from "@mantine/core";
+import { IconChevronRight, IconFileTypePdf } from "@tabler/icons-react";
+import Link from "next/link";
+import { useState } from "react";
+import { MODEL_Investasi } from "../model/model_investasi";
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+
+export default function EditProspektusInvestasi({
+ dataInvestasi,
+}: {
+ dataInvestasi: MODEL_Investasi;
+}) {
+ const [prospek, setProspek] = useState(dataInvestasi);
+
+ return (
+ <>
+ {/* {JSON.stringify(prospek, null, 2)} */}
+
+
+ {prospek.ProspektusInvestasi != null ? (
+
+
+ ""}
+ >
+
+
+ {/* */}
+ Prospektus_{prospek.title}
+
+
+
+
+
+
+
+
+
+
+ ) : (
+
+ Tidak ada file
+
+ )}
+ {/* */}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/fun/fun_cek_sisa_waktu.ts b/src/app_modules/investasi/fun/fun_cek_sisa_waktu.ts
new file mode 100644
index 00000000..5a355019
--- /dev/null
+++ b/src/app_modules/investasi/fun/fun_cek_sisa_waktu.ts
@@ -0,0 +1,33 @@
+"use server";
+
+import moment from "moment";
+import { MODEL_Transaksi_Investasi } from "../model/model_investasi";
+import funGantiStatusTransaksi_Investasi from "./fun_ganti_status_transaksi";
+
+export default async function funCekSisaWaktuTransaksiInvestasi(
+ data: MODEL_Transaksi_Investasi[]
+) {
+ const listData = data;
+
+
+ for (let e of listData) {
+ cekWaktu(e)
+ }
+
+ async function cekWaktu(data: MODEL_Transaksi_Investasi) {
+ // console.log(data)
+ const selesai = moment(data.createdAt).add(1, "days").format();
+ // let durasi = moment.duration(moment(selesai).diff(new Date()));
+ const skrng = moment(new Date());
+ const sisaWaktu = moment(selesai).diff(skrng);
+
+
+ if (sisaWaktu <= 0) {
+ await funGantiStatusTransaksi_Investasi(data.id, "4")
+ .then((res) => {
+ // console.log(res.data)
+ });
+ }
+ }
+
+}
diff --git a/src/app_modules/investasi/fun/fun_countdown_investasi.ts b/src/app_modules/investasi/fun/fun_countdown_investasi.ts
new file mode 100644
index 00000000..b83b62bb
--- /dev/null
+++ b/src/app_modules/investasi/fun/fun_countdown_investasi.ts
@@ -0,0 +1,30 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import moment from "moment";
+import funGantiStatusTransaksi_Investasi from "./fun_ganti_status_transaksi";
+import { MODEL_Transaksi_Investasi } from "../model/model_investasi";
+
+export default async function funCountDown(data: MODEL_Transaksi_Investasi) {
+ // const res = await prisma.transaksiInvestasi.findMany({
+ // where: {
+ // id: data.id,
+ // },
+ // });
+
+ // if (!res) return { status: 400 };
+
+ // const selesai = moment(data.createdAt).add(1, "days").format();
+ // let durasi = moment.duration(moment(selesai).diff(new Date()));
+ // const timer = setInterval(() => {
+ // durasi = moment.duration(+durasi - 1000, "milliseconds");
+ // // console.log(d.days(), "=", d.hours(), d.minutes(), d.seconds());
+ // if (durasi.hours() <= 0 && durasi.minutes() <= 0 && durasi.seconds() <= 0) {
+ // funGantiStatusTransaksi_Investasi(data.id, "4");
+ // clearInterval(timer);
+ // return {
+ // status: 200,
+ // };
+ // }
+ // }, 1000);
+}
diff --git a/src/app_modules/investasi/fun/fun_create_berita.ts b/src/app_modules/investasi/fun/fun_create_berita.ts
new file mode 100644
index 00000000..0b6f8729
--- /dev/null
+++ b/src/app_modules/investasi/fun/fun_create_berita.ts
@@ -0,0 +1,62 @@
+"use server";
+
+import _ from "lodash";
+import { MODEL_Investasi } from "../model/model_investasi";
+import { v4 } from "uuid";
+import prisma from "@/app/lib/prisma";
+import fs from "fs";
+import { revalidatePath } from "next/cache";
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+
+export default async function funCreateBeritaInvestasi(
+ formData: FormData,
+ data: any
+) {
+
+ const file: any = formData.get("file");
+ const fName = file.name;
+ const fExt = _.lowerCase(file.name.split(".").pop());
+ const fRandomName = v4(fName) + "." + fExt;
+
+ const upload = await prisma.images.create({
+ data: {
+ url: fRandomName,
+ },
+ select: {
+ id: true,
+ url: true,
+ },
+ });
+
+ if (!upload)
+ return {
+ status: 400,
+ message: "File Kosong",
+ };
+
+ const upFolder = Buffer.from(await file.arrayBuffer());
+ fs.writeFileSync(`./public/investasi/${upload.url}`, upFolder);
+
+ const createBerita = await prisma.beritaInvestasi.create({
+ data: {
+ title: data.title,
+ deskripsi: data.deskripsi,
+ imagesId: upload.id,
+ investasiId: data.investasiId
+ },
+ });
+
+
+ if (!createBerita)
+ return {
+ status: 400,
+ message: "Gagal Disimpan",
+ };
+
+ revalidatePath(RouterInvestasi.list_edit_berita);
+
+ return {
+ status: 201,
+ message: "Berhasil Disimpan",
+ };
+}
diff --git a/src/app_modules/investasi/fun/fun_create_investasi.ts b/src/app_modules/investasi/fun/fun_create_investasi.ts
new file mode 100644
index 00000000..1a62b096
--- /dev/null
+++ b/src/app_modules/investasi/fun/fun_create_investasi.ts
@@ -0,0 +1,98 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import _ from "lodash";
+import { v4 } from "uuid";
+import fs from "fs";
+import { revalidatePath } from "next/cache";
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import { MODEL_Investasi } from "../model/model_investasi";
+import funUploadProspektusInvestasi from "./fun_upload_prospek";
+
+export async function funCreateInvestasi(
+ gamabar: FormData,
+ filePdf: FormData,
+ data: MODEL_Investasi
+) {
+ // Function upload gambar
+ const file: any = gamabar.get("file");
+ const fName = file.name;
+ const fExt = _.lowerCase(file.name.split(".").pop());
+ const fRandomName = v4(fName) + "." + fExt;
+
+ const uploadImage = await prisma.images.create({
+ data: {
+ url: fRandomName,
+ },
+ select: {
+ id: true,
+ url: true,
+ },
+ });
+
+ if (!uploadImage)
+ return {
+ status: 400,
+ message: "Gambar Kosong",
+ };
+
+ const upFolder = Buffer.from(await file.arrayBuffer());
+ fs.writeFileSync(`./public/investasi/${uploadImage.url}`, upFolder);
+
+ const createInvest = await prisma.investasi.create({
+ data: {
+ authorId: data.authorId,
+ title: data.title,
+ targetDana: data.targetDana.toString(),
+ hargaLembar: data.hargaLembar.toString(),
+ totalLembar: data.totalLembar.toString(),
+ sisaLembar: data.totalLembar.toString(),
+ roi: data.roi.toString(),
+ masterPembagianDevidenId: data.masterPembagianDevidenId,
+ masterPeriodeDevidenId: data.masterPeriodeDevidenId,
+ masterPencarianInvestorId: data.masterPencarianInvestorId,
+ imagesId: uploadImage.id,
+ masterStatusInvestasiId: "2",
+ },
+ });
+
+ if (!createInvest)
+ return {
+ status: 400,
+ message: "Gagal Disimpan",
+ };
+
+ // File upload function
+ // const dataPdf: any = filePdf.get("file");
+ // const pdfName = dataPdf.name;
+ // const pdfExt = _.lowerCase(dataPdf.name.split(".").pop());
+ // const pdfRandomName = v4(pdfName) + "." + pdfExt;
+
+ // const uploadFile = await prisma.prospektusInvestasi.create({
+ // data: {
+ // investasiId: createInvest.id,
+ // url: pdfRandomName,
+ // },
+ // select: {
+ // id: true,
+ // url: true,
+ // },
+ // });
+
+ // if (!uploadFile) return { status: 400, message: "File Kosong" };
+ // const upPdfFolder = Buffer.from(await file.arrayBuffer());
+ // fs.writeFileSync(`./public/file/${uploadFile.url}`, upPdfFolder);
+
+ const updloadPDF = await funUploadProspektusInvestasi(
+ filePdf,
+ createInvest.id
+ );
+ // console.log(updloadPDF);
+
+ revalidatePath(RouterInvestasi.main_porto);
+
+ return {
+ status: 201,
+ message: "Berhasil Disimpan",
+ };
+}
diff --git a/src/app_modules/investasi/fun/fun_create_transaksi.ts b/src/app_modules/investasi/fun/fun_create_transaksi.ts
new file mode 100644
index 00000000..bfe1f946
--- /dev/null
+++ b/src/app_modules/investasi/fun/fun_create_transaksi.ts
@@ -0,0 +1,30 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import { MODEL_Transaksi_Investasi } from "../model/model_investasi";
+
+export default async function funCreateTransaksiInvestasi(
+ data: MODEL_Transaksi_Investasi,
+ invesId: string,
+ authorId: string
+) {
+ const res = await prisma.transaksiInvestasi.create({
+ data: {
+ namaBank: data.namaBank,
+ nomorRekening: data.nomorRekening,
+ investasiId: invesId,
+ authorId: authorId,
+ gross_amount: "",
+ merchant_name:"",
+ price: "",
+ quantity: ""
+ },
+ });
+ if (!res) return { status: 400, message: "Gagal disimpan" };
+
+ return {
+ status: 201,
+ message: "Berhasil disimpan",
+ res
+ };
+}
diff --git a/src/app_modules/investasi/fun/fun_delete_berita.ts b/src/app_modules/investasi/fun/fun_delete_berita.ts
new file mode 100644
index 00000000..35a0e862
--- /dev/null
+++ b/src/app_modules/investasi/fun/fun_delete_berita.ts
@@ -0,0 +1,21 @@
+"use server";
+
+import { myConsole } from "@/app/fun/my_console";
+import prisma from "@/app/lib/prisma";
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import { revalidatePath } from "next/cache";
+
+export default async function funDeleteBeritaInvestasi(id: string) {
+ const res = await prisma.beritaInvestasi.delete({
+ where: {
+ id: id,
+ },
+ });
+
+ if (!res) return { status: 400, message: "Gagal hapus" };
+
+ return {
+ status: 200,
+ message: "Berita terhapus",
+ };
+}
diff --git a/src/app_modules/investasi/fun/fun_delete_dokumen.ts b/src/app_modules/investasi/fun/fun_delete_dokumen.ts
new file mode 100644
index 00000000..3263051f
--- /dev/null
+++ b/src/app_modules/investasi/fun/fun_delete_dokumen.ts
@@ -0,0 +1,18 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+export default async function funDeleteDokumenInvestasi(idDokumen: string) {
+ const res = await prisma.dokumenInvestasi.delete({
+ where: {
+ id: idDokumen,
+ },
+ });
+
+ if (!res) return { status: 400, message: "Gagal hapus" };
+
+ return {
+ status: 200,
+ message: "Dokumen terhapus",
+ };
+}
diff --git a/src/app_modules/investasi/fun/fun_delete_investasi.ts b/src/app_modules/investasi/fun/fun_delete_investasi.ts
new file mode 100644
index 00000000..8a5efc44
--- /dev/null
+++ b/src/app_modules/investasi/fun/fun_delete_investasi.ts
@@ -0,0 +1,26 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import { RouterAdminInvestasi } from "@/app/lib/router_hipmi/router_admin";
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import { revalidatePath } from "next/cache";
+
+export default async function funDeleteInvestasi(id: string) {
+ const res = await prisma.investasi.delete({
+ where: {
+ id: id,
+ },
+ });
+
+ if (!res) return { status: 400, message: "Gagal Hapus Data" };
+
+
+ revalidatePath(RouterInvestasi.portofolio)
+ revalidatePath(RouterAdminInvestasi.main_investasi)
+
+
+ return {
+ status: 200,
+ message: "Berhasil Hapus",
+ };
+}
diff --git a/src/app_modules/investasi/fun/fun_edit_berita.ts b/src/app_modules/investasi/fun/fun_edit_berita.ts
new file mode 100644
index 00000000..85cc3fc0
--- /dev/null
+++ b/src/app_modules/investasi/fun/fun_edit_berita.ts
@@ -0,0 +1,54 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import { Model_Berita_Investasi } from "../model/model_investasi";
+import _ from "lodash";
+import { v4 } from "uuid";
+import fs from "fs";
+import { revalidatePath } from "next/cache";
+
+export default async function funEditBeritaInvestasi(
+ formData: FormData,
+ data: Model_Berita_Investasi
+) {
+ const fl = formData.get("file");
+
+ if (fl !== "null") {
+ const file: any = formData.get("file");
+ const fName = file.name;
+ const fExt =
+ file && file.name ? _.lowerCase(file.name.split(".").pop()) : "";
+ const fRandomName = v4(fName) + "." + fExt;
+
+ const updateImage = await prisma.images.update({
+ where: {
+ id: data.imagesId,
+ },
+ data: {
+ url: fRandomName,
+ },
+ });
+
+ if (!updateImage) return { status: 400, message: "Gagal upload gambar" };
+ const upFolder = Buffer.from(await file.arrayBuffer());
+ fs.writeFileSync(`./public/investasi/${updateImage.url}`, upFolder);
+ revalidatePath("/dev/investasi/list_edit_berita");
+ }
+
+ const res = await prisma.beritaInvestasi.update({
+ where: {
+ id: data.id,
+ },
+ data: {
+ title: data.title,
+ deskripsi: data.deskripsi,
+ },
+ });
+
+ if (!res) return { status: 400, message: "Gagal Update" };
+ revalidatePath("/dev/investasi/list_edit_berita");
+ return {
+ status: 200,
+ message: "Berhasil Update",
+ };
+}
diff --git a/src/app_modules/investasi/fun/fun_edit_investasi.ts b/src/app_modules/investasi/fun/fun_edit_investasi.ts
new file mode 100644
index 00000000..c79b15f9
--- /dev/null
+++ b/src/app_modules/investasi/fun/fun_edit_investasi.ts
@@ -0,0 +1,66 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import { MODEL_Investasi } from "../model/model_investasi";
+import _ from "lodash";
+import { v4 } from "uuid";
+import fs from "fs";
+import { revalidatePath } from "next/cache";
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+
+export default async function funEditInvestasi(
+ formData: FormData,
+ data: MODEL_Investasi
+) {
+ const file = formData?.get("file");
+
+ if (file !== "null") {
+ const file: any = formData?.get("file");
+ const fName = file.name;
+ const fExt =
+ file && file.name ? _.lowerCase(file.name.split(".").pop()) : "";
+ const fRandomName = v4(fName) + "." + fExt;
+
+ const updateImage = await prisma.images.update({
+ where: {
+ id: data.imagesId,
+ },
+ data: {
+ url: fRandomName,
+ },
+ });
+
+ if (!updateImage) return { status: 400, message: "Gagal upload gambar" };
+ const upFolder = Buffer.from(await file.arrayBuffer());
+ fs.writeFileSync(`./public/investasi/${updateImage.url}`, upFolder);
+ }
+
+ const editInves = await prisma.investasi.update({
+ where: {
+ id: data.id,
+ },
+ data: {
+ title: data.title,
+ targetDana: "" + data.targetDana,
+ hargaLembar: "" + data.hargaLembar,
+ totalLembar: "" + data.totalLembar,
+ roi: data.roi,
+ masterPencarianInvestorId: data.MasterPencarianInvestor.id,
+ masterPembagianDevidenId: data.MasterPembagianDeviden.id,
+ masterPeriodeDevidenId: data.MasterPeriodeDeviden.id,
+ },
+ });
+
+ if (!editInves) {
+ return {
+ status: 400,
+ message: "Gagal update",
+ };
+ }
+
+ revalidatePath(RouterInvestasi.detail_draft);
+ return {
+ status: 200,
+ message: "Berhasil Disimpan",
+ };
+}
diff --git a/src/app_modules/investasi/fun/fun_ganti_status.ts b/src/app_modules/investasi/fun/fun_ganti_status.ts
new file mode 100644
index 00000000..0745b76a
--- /dev/null
+++ b/src/app_modules/investasi/fun/fun_ganti_status.ts
@@ -0,0 +1,69 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import { RouterAdminInvestasi } from "@/app/lib/router_hipmi/router_admin";
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import moment from "moment";
+import { revalidatePath } from "next/cache";
+
+export default async function funGantiStatusInvestasi(
+ id: string,
+ statusInves: string,
+ statusProgres?: string
+) {
+ console.log(statusProgres)
+ if (statusProgres === '1') {
+ const publishCD = new Date();
+ const data = await prisma.investasi.update({
+ where: {
+ id: id,
+ },
+ data: {
+ MasterStatusInvestasi: {
+ connect: {
+ id: statusInves,
+ },
+ },
+ countDown: publishCD,
+ MasterProgresInvestasi: {
+ connect: {
+ id: statusProgres,
+ },
+ },
+ },
+ });
+
+ if (!data) return { status: 400 };
+
+ revalidatePath(RouterInvestasi.portofolio);
+ revalidatePath(RouterAdminInvestasi.main_investasi);
+
+ return {
+ status: 200,
+ };
+ } else {
+ const publishCD = new Date();
+ const data = await prisma.investasi.update({
+ where: {
+ id: id,
+ },
+ data: {
+ MasterStatusInvestasi: {
+ connect: {
+ id: statusInves,
+ },
+ },
+ countDown: publishCD,
+ },
+ });
+
+ if (!data) return { status: 400 };
+
+ revalidatePath(RouterInvestasi.portofolio);
+ revalidatePath(RouterAdminInvestasi.main_investasi);
+
+ return {
+ status: 200,
+ };
+ }
+}
diff --git a/src/app_modules/investasi/fun/fun_ganti_status_transaksi.ts b/src/app_modules/investasi/fun/fun_ganti_status_transaksi.ts
new file mode 100644
index 00000000..1c9fce06
--- /dev/null
+++ b/src/app_modules/investasi/fun/fun_ganti_status_transaksi.ts
@@ -0,0 +1,37 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import { revalidatePath } from "next/cache";
+
+export default async function funGantiStatusTransaksi_Investasi(
+ transaksiId: string,
+ status: string
+) {
+ // console.log(transaksiId, "hehe", status)
+ const data = await prisma.transaksiInvestasi.update({
+ where: {
+ id: transaksiId,
+ },
+ data: {
+ masterStatusTransaksiInvestasiId: status,
+ },
+ select: {
+ id: true,
+ namaBank: true,
+ Investasi: true,
+ MasterStatusTransaksiInvestasi: true
+ }
+ });
+
+
+
+ if (!data) return { status: 400, message: "Status Gagal Diubah" };
+
+ revalidatePath(RouterInvestasi.main_transaksi)
+ return {
+ data: data,
+ status: 200,
+ message: "Status Diubah",
+ };
+}
diff --git a/src/app_modules/investasi/fun/fun_load_data.ts b/src/app_modules/investasi/fun/fun_load_data.ts
new file mode 100644
index 00000000..6a8a033c
--- /dev/null
+++ b/src/app_modules/investasi/fun/fun_load_data.ts
@@ -0,0 +1,33 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import { revalidatePath } from "next/cache";
+
+export default async function funLoadDataInvestasi(id: string) {
+ const data = await prisma.investasi.findUnique({
+ where: {
+ id: id,
+ },
+ select: {
+ id: true,
+ title: true,
+ authorId: true,
+ hargaLembar: true,
+ targetDana: true,
+ totalLembar: true,
+ roi: true,
+ active: true,
+ imagesId: true,
+ MasterStatusInvestasi: true,
+ BeritaInvestasi: true,
+ DokumenInvestasi: true,
+ ProspektusInvestasi: true,
+ MasterPembagianDeviden: true,
+ MasterPencarianInvestor: true,
+ MasterPeriodeDeviden: true,
+ },
+ });
+
+ return data;
+}
diff --git a/src/app_modules/investasi/fun/fun_progress_bar.ts b/src/app_modules/investasi/fun/fun_progress_bar.ts
new file mode 100644
index 00000000..ceaa8993
--- /dev/null
+++ b/src/app_modules/investasi/fun/fun_progress_bar.ts
@@ -0,0 +1,11 @@
+"use server";
+
+export default async function funProgressBar(total: number, beli: number) {
+ const t = total;
+ const b = beli;
+
+ const progress = (b / t) * 100;
+ const pembulatan = Math.round(progress);
+
+ return pembulatan;
+}
diff --git a/src/app_modules/investasi/fun/fun_total_investor_by_id.ts b/src/app_modules/investasi/fun/fun_total_investor_by_id.ts
new file mode 100644
index 00000000..486223ee
--- /dev/null
+++ b/src/app_modules/investasi/fun/fun_total_investor_by_id.ts
@@ -0,0 +1,16 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+export default async function funTotalInvestorByIdInvestasi(id: any) {
+ // console.log(id)
+ const data = await prisma.transaksiInvestasi.count({
+ where: {
+ investasiId: id,
+ status_code: "200"
+ },
+ });
+
+ return data;
+}
+// belum ke hitungg
diff --git a/src/app_modules/investasi/fun/fun_update_investasi.ts b/src/app_modules/investasi/fun/fun_update_investasi.ts
new file mode 100644
index 00000000..b549085f
--- /dev/null
+++ b/src/app_modules/investasi/fun/fun_update_investasi.ts
@@ -0,0 +1,70 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import { MODEL_Investasi } from "../model/model_investasi";
+import { revalidatePath } from "next/cache";
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+
+export default async function funUpdateInvestasi(
+ dataLembarSaham: MODEL_Investasi,
+ dataInvestasi: MODEL_Investasi
+) {
+
+
+ const investasi = dataInvestasi;
+ // console.log(investasi)
+ const progres =
+ ((+investasi.totalLembar - +dataLembarSaham.sisaLembar) /
+ +investasi.totalLembar) *
+ 100;
+ const jumlahTerbeli = +investasi.totalLembar - +dataLembarSaham.sisaLembar;
+
+ const res = await prisma.investasi.update({
+ where: {
+ id: dataLembarSaham.id,
+ },
+ data: {
+ sisaLembar: "" + dataLembarSaham.sisaLembar,
+ progress: "" + progres,
+ lembarTerbeli: "" + jumlahTerbeli,
+ },
+ });
+
+ if (!res) return { status: 400, message: "Gagal update" };
+
+ if (res.progress === "100") {
+ const updateStatusProgres = await prisma.investasi.update({
+ where: {
+ id: res.id,
+ },
+ data: {
+ masterProgresInvestasiId: "2",
+ },
+ });
+
+ // console.log(updateStatusProgres)
+
+ try {
+ await fetch(
+ `https://wa.wibudev.com/code?nom=${investasi.author.nomor}&text=Selamat !! , Project Investasi ${investasi.title} Anda Sukses`
+ );
+ return {
+ status: 200,
+ message: "Berhasil, kirim pesan ke Author"
+ }
+ } catch (error) {
+ return {
+ status: 400,
+ message: "Tidak Terkirim ke Author"
+ }
+ }
+
+ }
+
+ revalidatePath(RouterInvestasi.main);
+
+ return {
+ status: 200,
+ message: "Update berhasil",
+ };
+}
diff --git a/src/app_modules/investasi/fun/fun_update_payment.ts b/src/app_modules/investasi/fun/fun_update_payment.ts
new file mode 100644
index 00000000..a1f08111
--- /dev/null
+++ b/src/app_modules/investasi/fun/fun_update_payment.ts
@@ -0,0 +1,81 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import { MODEL_Investasi } from "../model/model_investasi";
+import { revalidatePath } from "next/cache";
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+
+export interface Model_Midtrans_Success {
+ status_code: string;
+ status_message: string;
+ transaction_id: string;
+ order_id: string;
+ gross_amount: string;
+ payment_type: string;
+ transaction_time: string;
+ transaction_status: string;
+ fraud_status: string;
+ va_numbers: [{ bank: string; va_number: string }];
+ pdf_url: string;
+ finish_redirect_url: string;
+}
+
+interface Model_Body {
+ authorId: string;
+ customer_name: string;
+ phone: string;
+ gross_amount: number;
+ item_name: string;
+ price: number;
+ quantity: number;
+ merchant_name: string;
+ investasiId: string;
+}
+
+interface Model_Token {
+ token: string;
+ redirect_url: string;
+}
+
+export default async function funUpdatePaymentInvestasi(
+ data: Model_Midtrans_Success,
+ body: Model_Body,
+ token: Model_Token
+) {
+ if (data.status_code === "200") {
+ const res = await prisma.transaksiInvestasi.create({
+ data: {
+ gross_amount: "" + body.gross_amount,
+ merchant_name: body.merchant_name,
+ price: "" + body.price,
+ quantity: "" + body.quantity,
+ token: token.token,
+ redirect_url: token.redirect_url,
+ authorId: body.authorId,
+ investasiId: body.investasiId,
+ status_code: data.status_code,
+ status_message: data.status_message,
+ order_id: data.order_id,
+ fraud_status: data.fraud_status,
+ payment_type: data.payment_type,
+ transaction_id: data.transaction_id,
+ transaction_status: data.transaction_status,
+ transaction_time: data.transaction_time,
+ pdf_url: data.pdf_url,
+ finish_redirect_url: data.finish_redirect_url,
+ namaBank: data.va_numbers[0].bank,
+ nomorRekening: data.va_numbers[0].va_number,
+ },
+ });
+
+ if (!res) return { status: 400, message: "Gagal update transaksi" };
+
+ revalidatePath(RouterInvestasi.main_transaksi);
+
+ return {
+ status: 200,
+ message: "Berhasil",
+ data: res,
+ };
+ }
+}
diff --git a/src/app_modules/investasi/fun/fun_update_progres_persen.ts b/src/app_modules/investasi/fun/fun_update_progres_persen.ts
new file mode 100644
index 00000000..f5aeba43
--- /dev/null
+++ b/src/app_modules/investasi/fun/fun_update_progres_persen.ts
@@ -0,0 +1,20 @@
+"use server";
+import { MODEL_Investasi } from "../model/model_investasi";
+import moment from "moment";
+import prisma from "@/app/lib/prisma";
+
+export default async function funUpadteProgresPersenInvestasi(data: MODEL_Investasi) {
+ // console.log(data)
+ if (data.MasterProgresInvestasi.id !== "2" && data.progress === "100") {
+ const res = await prisma.investasi.update({
+ where: {
+ id: data.id,
+ },
+ data: {
+ masterProgresInvestasiId: "2",
+ },
+ });
+ // console.log(res);
+ return res;
+ }
+}
diff --git a/src/app_modules/investasi/fun/fun_update_progres_waktu.ts b/src/app_modules/investasi/fun/fun_update_progres_waktu.ts
new file mode 100644
index 00000000..af0b9cdd
--- /dev/null
+++ b/src/app_modules/investasi/fun/fun_update_progres_waktu.ts
@@ -0,0 +1,23 @@
+"use server";
+import { MODEL_Investasi } from "../model/model_investasi";
+import moment from "moment";
+import prisma from "@/app/lib/prisma";
+
+export default async function funUpadteProgresWaktuInvestasi(data: MODEL_Investasi) {
+
+ const pencarian = data.MasterPencarianInvestor.name;
+ const countD = moment(new Date()).diff(new Date(data.countDown), "days");
+
+ if (+pencarian - +countD <= 0) {
+ const res = await prisma.investasi.update({
+ where: {
+ id: data.id,
+ },
+ data: {
+ masterProgresInvestasiId: "3",
+ },
+ });
+ // console.log(res);
+ return res;
+ }
+}
diff --git a/src/app_modules/investasi/fun/fun_upload_dokumen.ts b/src/app_modules/investasi/fun/fun_upload_dokumen.ts
new file mode 100644
index 00000000..fe94eb10
--- /dev/null
+++ b/src/app_modules/investasi/fun/fun_upload_dokumen.ts
@@ -0,0 +1,39 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import _ from "lodash";
+import { v4 } from "uuid";
+import fs from "fs";
+import { revalidatePath } from "next/cache";
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+
+export default async function funUploadDokumenInvestasi(
+ formData: FormData,
+ data: any
+) {
+
+ const file: any = formData.get("file");
+ const fName = file.name;
+ const fExt = _.lowerCase(file.name.split(".").pop());
+ // console.log(fName)
+ // console.log(fExt)
+ const fRandomName = v4(fName) + "." + fExt;
+
+ const uploadFile = await prisma.dokumenInvestasi.create({
+ data: {
+ investasiId: data.idInves,
+ title: data.title,
+ url: fRandomName,
+ },
+ });
+
+ if (!uploadFile) return { status: 400, message: "Gagal Upload" };
+ const upFolder = Buffer.from(await file.arrayBuffer());
+ fs.writeFileSync(`./public/file/${uploadFile.url}`, upFolder);
+
+ revalidatePath(RouterInvestasi.edit_dokumen);
+ return {
+ status: 201,
+ message: "File tersimpan ",
+ };
+}
diff --git a/src/app_modules/investasi/fun/fun_upload_prospek.ts b/src/app_modules/investasi/fun/fun_upload_prospek.ts
new file mode 100644
index 00000000..62f6bedf
--- /dev/null
+++ b/src/app_modules/investasi/fun/fun_upload_prospek.ts
@@ -0,0 +1,44 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import _ from "lodash";
+import { v4 } from "uuid";
+import fs from "fs"
+import { revalidatePath } from "next/cache";
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+
+export default async function funUploadProspektusInvestasi(
+ formData: FormData,
+ idInves: string
+) {
+
+ const file: any = formData.get("file");
+ const fName = file.name;
+ const fExt = _.lowerCase(file.name.split(".").pop());
+ // console.log(fName)
+ // console.log(fExt)
+ const fRandomName = v4(fName) + "." + fExt;
+
+ const uploadFile = await prisma.prospektusInvestasi.upsert({
+ where: {
+ investasiId: idInves,
+ },
+ update: {
+ url: fRandomName,
+ },
+ create: {
+ investasiId: idInves,
+ url: fRandomName,
+ },
+ });
+
+ if(!uploadFile) return {status: 400, message: "Gagal Upload"}
+ const upFolder = Buffer.from(await file.arrayBuffer())
+ fs.writeFileSync(`./public/file/${uploadFile.url}`, upFolder)
+
+ revalidatePath(RouterInvestasi.edit_prospektus)
+ return {
+ status: 201,
+ message: "File tersimpan "
+ }
+}
diff --git a/src/app_modules/investasi/fun/get_investasi_by_id.ts b/src/app_modules/investasi/fun/get_investasi_by_id.ts
new file mode 100644
index 00000000..576eb31e
--- /dev/null
+++ b/src/app_modules/investasi/fun/get_investasi_by_id.ts
@@ -0,0 +1,38 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+export default async function getInvestasiByStatusId(
+ id: string,
+) {
+ const data = await prisma.user.findUnique({
+ where: {
+ id: id,
+ },
+ select: {
+ Investasi: {
+ select: {
+ id: true,
+ title: true,
+ authorId: true,
+ hargaLembar: true,
+ targetDana: true,
+ totalLembar: true,
+ sisaLembar: true,
+ roi: true,
+ active: true,
+ imagesId: true,
+ MasterStatusInvestasi: true,
+ BeritaInvestasi: true,
+ DokumenInvestasi: true,
+ ProspektusInvestasi: true,
+ MasterPembagianDeviden: true,
+ MasterPencarianInvestor: true,
+ MasterPeriodeDeviden: true,
+ },
+ },
+ },
+ });
+
+ return data?.Investasi;
+}
diff --git a/src/app_modules/investasi/fun/get_list_all_investasi.ts b/src/app_modules/investasi/fun/get_list_all_investasi.ts
new file mode 100644
index 00000000..2c3985d4
--- /dev/null
+++ b/src/app_modules/investasi/fun/get_list_all_investasi.ts
@@ -0,0 +1,45 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+export default async function getAllDataPublishInvestasi() {
+ const data = await prisma.investasi.findMany({
+ orderBy: [
+ {
+ masterProgresInvestasiId: "asc",
+ },
+ {
+ countDown: "desc",
+ },
+ ],
+ where: {
+ MasterStatusInvestasi: {
+ name: {
+ equals: "Publish",
+ },
+ },
+ },
+ select: {
+ id: true,
+ title: true,
+ authorId: true,
+ hargaLembar: true,
+ targetDana: true,
+ totalLembar: true,
+ sisaLembar: true,
+ progress: true,
+ roi: true,
+ active: true,
+ createdAt: true,
+ updatedAt: true,
+ imagesId: true,
+ ProspektusInvestasi: true,
+ MasterPembagianDeviden: true,
+ MasterPencarianInvestor: true,
+ MasterPeriodeDeviden: true,
+ MasterProgresInvestasi: true,
+ countDown: true,
+ },
+ });
+ return data;
+}
diff --git a/src/app_modules/investasi/fun/get_list_all_publish.ts b/src/app_modules/investasi/fun/get_list_all_publish.ts
new file mode 100644
index 00000000..be61ac54
--- /dev/null
+++ b/src/app_modules/investasi/fun/get_list_all_publish.ts
@@ -0,0 +1,142 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+/**
+ *
+ * @param status progres > 1 - 3
+ * @type string
+ * @returns data publish menurut status progresnya
+ */
+export async function getListAllPublish(status : string) {
+
+ if (status === "1") {
+ const data = await prisma.investasi.findMany({
+ orderBy: {
+ countDown: "asc",
+ },
+ where: {
+ MasterStatusInvestasi: {
+ name: {
+ equals: "Publish",
+ },
+ },
+ AND: {
+ MasterProgresInvestasi: {
+ id: "1",
+ },
+ },
+ },
+ select: {
+ id: true,
+ title: true,
+ authorId: true,
+ hargaLembar: true,
+ targetDana: true,
+ totalLembar: true,
+ sisaLembar: true,
+ progress: true,
+ roi: true,
+ active: true,
+ createdAt: true,
+ updatedAt: true,
+ imagesId: true,
+ // MasterStatusInvestasi: true,
+ // BeritaInvestasi: true,
+ // DokumenInvestasi: true,
+ ProspektusInvestasi: true,
+ MasterPembagianDeviden: true,
+ MasterPencarianInvestor: true,
+ MasterPeriodeDeviden: true,
+ MasterProgresInvestasi: true,
+ countDown: true,
+ },
+ });
+ return data;
+ }
+ if (status === "2") {
+ const data = await prisma.investasi.findMany({
+ orderBy: {
+ masterPencarianInvestorId: "asc",
+ },
+ where: {
+ MasterStatusInvestasi: {
+ name: {
+ equals: "Publish",
+ },
+ },
+ AND: {
+ MasterProgresInvestasi: {
+ id: "2",
+ },
+ },
+ },
+ select: {
+ id: true,
+ title: true,
+ authorId: true,
+ hargaLembar: true,
+ targetDana: true,
+ totalLembar: true,
+ sisaLembar: true,
+ progress: true,
+ roi: true,
+ active: true,
+ createdAt: true,
+ updatedAt: true,
+ imagesId: true,
+ // MasterStatusInvestasi: true,
+ // BeritaInvestasi: true,
+ // DokumenInvestasi: true,
+ ProspektusInvestasi: true,
+ MasterPembagianDeviden: true,
+ MasterPencarianInvestor: true,
+ MasterPeriodeDeviden: true,
+ countDown: true,
+ },
+ });
+ return data
+ }
+ if (status === "3") {
+ const data = await prisma.investasi.findMany({
+ orderBy: {
+ masterPencarianInvestorId: "asc",
+ },
+ where: {
+ MasterStatusInvestasi: {
+ name: {
+ equals: "Publish",
+ },
+ },
+ AND: {
+ MasterProgresInvestasi: {
+ id: "3",
+ },
+ },
+ },
+ select: {
+ id: true,
+ title: true,
+ authorId: true,
+ hargaLembar: true,
+ targetDana: true,
+ totalLembar: true,
+ sisaLembar: true,
+ progress: true,
+ roi: true,
+ active: true,
+ createdAt: true,
+ updatedAt: true,
+ imagesId: true,
+ // MasterStatusInvestasi: true,
+ // BeritaInvestasi: true,
+ // DokumenInvestasi: true,
+ ProspektusInvestasi: true,
+ MasterPembagianDeviden: true,
+ MasterPencarianInvestor: true,
+ MasterPeriodeDeviden: true,
+ countDown: true,
+ },
+ });
+ return data
+ }
+}
diff --git a/src/app_modules/investasi/fun/get_list_all_transaksi_by_id.ts b/src/app_modules/investasi/fun/get_list_all_transaksi_by_id.ts
new file mode 100644
index 00000000..ea2ed9d6
--- /dev/null
+++ b/src/app_modules/investasi/fun/get_list_all_transaksi_by_id.ts
@@ -0,0 +1,86 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import moment from "moment";
+import { MODEL_Transaksi_Investasi } from "../model/model_investasi";
+import funGantiStatusTransaksi_Investasi from "./fun_ganti_status_transaksi";
+
+export default async function getListAllTransaksiById_Investasi(
+ userId: string
+) {
+ const data = await prisma.transaksiInvestasi.findMany({
+ orderBy: {
+ updatedAt: "desc",
+ },
+ where: {
+ authorId: userId,
+ },
+ select: {
+ id: true,
+ namaBank: true,
+ nomorRekening: true,
+ active: true,
+ createdAt: true,
+ updatedAt: true,
+ authorId: true,
+ quantity: true,
+ price: true,
+ gross_amount: true,
+ merchant_name: true,
+ redirect_url: true,
+ token: true,
+
+ Author: true,
+ masterStatusTransaksiInvestasiId: true,
+ MasterStatusTransaksiInvestasi: true,
+ investasiId: true,
+ Investasi: true,
+ },
+ });
+
+ for (let e of data) {
+ cekWaktu(e as any)
+ }
+
+ async function cekWaktu(data: MODEL_Transaksi_Investasi) {
+ // console.log(data)
+ const selesai = moment(data.createdAt).add(1, "days").format();
+ const skrng = moment(new Date());
+ const sisaWaktu = moment(selesai).diff(skrng);
+
+ if (sisaWaktu <= 0) {
+ await funGantiStatusTransaksi_Investasi(data.id, "4")
+ }
+ }
+
+ const dataBaru = await prisma.transaksiInvestasi.findMany({
+ orderBy: {
+ createdAt: "desc",
+ },
+ where: {
+ authorId: userId,
+ },
+ select: {
+ id: true,
+ namaBank: true,
+ nomorRekening: true,
+ active: true,
+ createdAt: true,
+ updatedAt: true,
+ authorId: true,
+ quantity: true,
+ price: true,
+ gross_amount: true,
+ merchant_name: true,
+ redirect_url: true,
+ token: true,
+ Author: true,
+ masterStatusTransaksiInvestasiId: true,
+ MasterStatusTransaksiInvestasi: true,
+ investasiId: true,
+ Investasi: true,
+ },
+ });
+
+ return dataBaru
+}
diff --git a/src/app_modules/investasi/fun/get_list_transaksi_berhasil_by_id.ts b/src/app_modules/investasi/fun/get_list_transaksi_berhasil_by_id.ts
new file mode 100644
index 00000000..4c8650a2
--- /dev/null
+++ b/src/app_modules/investasi/fun/get_list_transaksi_berhasil_by_id.ts
@@ -0,0 +1,35 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+export default async function getListTransaksiBerhasilInvestasi(
+ idAuthor: string
+) {
+ const data = await prisma.transaksiInvestasi.findMany({
+ orderBy: {
+ createdAt: "desc",
+ },
+ where: {
+ authorId: idAuthor,
+ status_code: "200",
+ },
+ select: {
+ id: true,
+ Investasi: {
+ select: {
+ author: true,
+ imagesId: true,
+ title: true,
+ totalLembar: true,
+ sisaLembar: true,
+
+ },
+ },
+ Author: true,
+ gross_amount: true,
+ quantity: true,
+ },
+ });
+
+ return data;
+}
diff --git a/src/app_modules/investasi/fun/get_norek.ts b/src/app_modules/investasi/fun/get_norek.ts
new file mode 100644
index 00000000..89a5eecd
--- /dev/null
+++ b/src/app_modules/investasi/fun/get_norek.ts
@@ -0,0 +1,21 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+export default async function getNorekInvestasi(id: string) {
+ const res = await prisma.masterBank.findUnique({
+ where: { id: id },
+ select: {
+ name: true,
+ norek: true,
+ },
+ });
+
+ if(!res) return {status: 400, message: "Nomor rekeneing tidak tersedia"}
+
+ return {
+ res,
+ status: 200,
+ message: "Berhasil"
+ }
+}
diff --git a/src/app_modules/investasi/fun/get_one_berita_by_id.ts b/src/app_modules/investasi/fun/get_one_berita_by_id.ts
new file mode 100644
index 00000000..c8c66c76
--- /dev/null
+++ b/src/app_modules/investasi/fun/get_one_berita_by_id.ts
@@ -0,0 +1,12 @@
+"use server"
+
+import prisma from "@/app/lib/prisma"
+
+export default async function getOneBeritaInvestasiById(id: string) {
+ const res = await prisma.beritaInvestasi.findUnique({
+ where: {
+ id: id
+ }
+ })
+ return res;
+}
\ No newline at end of file
diff --git a/src/app_modules/investasi/fun/get_one_investasi_by_id.ts b/src/app_modules/investasi/fun/get_one_investasi_by_id.ts
new file mode 100644
index 00000000..ac059d0d
--- /dev/null
+++ b/src/app_modules/investasi/fun/get_one_investasi_by_id.ts
@@ -0,0 +1,40 @@
+"use server";
+import prisma from "@/app/lib/prisma";
+import { data } from "autoprefixer";
+
+export default async function getOneInvestasiById(id: string) {
+ const data = await prisma.investasi.findUnique({
+ where: {
+ id: id,
+ },
+ select: {
+ id: true,
+ title: true,
+ authorId: true,
+ hargaLembar: true,
+ targetDana: true,
+ totalLembar: true,
+ sisaLembar: true,
+ lembarTerbeli: true,
+ progress: true,
+ roi: true,
+ active: true,
+ createdAt: true,
+ updatedAt: true,
+ catatan: true,
+ imagesId: true,
+ MasterStatusInvestasi: true,
+ BeritaInvestasi: true,
+ DokumenInvestasi: true,
+ ProspektusInvestasi: true,
+ MasterPembagianDeviden: true,
+ MasterPencarianInvestor: true,
+ MasterPeriodeDeviden: true,
+ MasterProgresInvestasi: true,
+ author: true,
+ countDown: true
+ },
+ });
+
+ return data;
+}
diff --git a/src/app_modules/investasi/fun/get_one_transaksi_by_id.ts b/src/app_modules/investasi/fun/get_one_transaksi_by_id.ts
new file mode 100644
index 00000000..2eea1c30
--- /dev/null
+++ b/src/app_modules/investasi/fun/get_one_transaksi_by_id.ts
@@ -0,0 +1,49 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+export default async function getOneTransaksiBerhasilByIdInvestasi(
+ idTransaksi: string
+) {
+ const data = await prisma.transaksiInvestasi.findUnique({
+ where: {
+ id: idTransaksi,
+ },
+ select: {
+ Investasi: {
+ select: {
+ author: {
+ select: {
+ nomor: true,
+ username: true,
+ }
+ },
+ BeritaInvestasi: true,
+ DokumenInvestasi: true,
+ ProspektusInvestasi: true,
+ MasterPembagianDeviden: true,
+ MasterPencarianInvestor: true,
+ MasterPeriodeDeviden: true,
+ id: true,
+ title: true,
+ countDown: true,
+ imagesId: true,
+ roi: true,
+ targetDana: true,
+ totalLembar: true,
+ sisaLembar: true,
+ hargaLembar: true,
+ },
+ },
+ id: true,
+ gross_amount: true,
+ quantity: true,
+ transaction_id: true,
+ status_message: true,
+ payment_type: true,
+ namaBank: true,
+ },
+ });
+
+ return data;
+}
diff --git a/src/app_modules/investasi/fun/get_porto_status_by_id.ts b/src/app_modules/investasi/fun/get_porto_status_by_id.ts
new file mode 100644
index 00000000..778207ce
--- /dev/null
+++ b/src/app_modules/investasi/fun/get_porto_status_by_id.ts
@@ -0,0 +1,108 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+export default async function getPortoByStatusId(id: string, statusId: number) {
+ // Draft
+ if (statusId === 1) {
+ const data = await prisma.investasi.findMany({
+ orderBy: {
+ updatedAt: "desc",
+ },
+ where: {
+ authorId: id,
+ MasterStatusInvestasi: {
+ name: "Draft",
+ },
+ },
+ select: {
+ id: true,
+ title: true,
+ imagesId: true,
+ // hargaLembar: true,
+ targetDana: true,
+ // totalLembar: true,
+ // roi: true,
+ // active: true,
+ // MasterStatusInvestasi: true,
+ // BeritaInvestasi: true,
+ // DokumenInvestasi: true,
+ // ProspektusInvestasi: true,
+ // MasterPembagianDeviden: true,
+ // MasterPencarianInvestor: true,
+ // MasterPeriodeDeviden: true,
+ // SahamTerbeli: true,
+ },
+ });
+ return data;
+ }
+
+ // Review
+ if (statusId === 2) {
+ const data = await prisma.investasi.findMany({
+ orderBy: {
+ createdAt: "desc",
+ },
+ where: {
+ authorId: id,
+ MasterStatusInvestasi: {
+ name: "Review",
+ },
+ },
+ select: {
+ id: true,
+ title: true,
+ imagesId: true,
+ targetDana: true,
+ },
+ });
+ return data;
+ }
+
+ // Publish
+ if (statusId === 3) {
+ const data = await prisma.investasi.findMany({
+ orderBy: {
+ updatedAt: "desc",
+ },
+ where: {
+ authorId: id,
+ MasterStatusInvestasi: {
+ name: "Publish",
+ },
+ },
+ select: {
+ id: true,
+ title: true,
+ imagesId: true,
+ updatedAt: true,
+ targetDana: true,
+ MasterPencarianInvestor: true,
+ countDown: true,
+ },
+ });
+ return data;
+ }
+
+ // Reject
+ if (statusId === 4) {
+ const data = await prisma.investasi.findMany({
+ orderBy: {
+ updatedAt: "desc",
+ },
+ where: {
+ authorId: id,
+ MasterStatusInvestasi: {
+ name: "Reject",
+ },
+ },
+ select: {
+ id: true,
+ title: true,
+ imagesId: true,
+ targetDana: true
+ },
+ });
+ return data;
+ }
+}
diff --git a/src/app_modules/investasi/fun/get_token_transaksi.js b/src/app_modules/investasi/fun/get_token_transaksi.js
new file mode 100644
index 00000000..bea592a7
--- /dev/null
+++ b/src/app_modules/investasi/fun/get_token_transaksi.js
@@ -0,0 +1,94 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import MidTrans from "midtrans-client";
+
+const snap = new MidTrans.Snap({
+ isProduction: false,
+ serverKey: process.env.Server_KEY,
+ clientKey: process.env.Client_KEY,
+});
+
+export default async function getTokenTransaksi(data) {
+ const body = await data;
+ // console.log(body);
+
+ const date = new Date();
+ const randomId = date.getTime();
+
+ const params = {
+ transaction_details: {
+ order_id: "hipmi_" + randomId,
+ gross_amount: body.gross_amount,
+ },
+ item_details: [
+ {
+ id: "item_hipmi_" + randomId,
+ name: body.item_name,
+ price: body.price,
+ quantity: body.quantity,
+ merchant_name: body.merchant_name,
+ },
+ ],
+ customer_details: {
+ first_name: body.customer_name,
+ phone: body.phone,
+ },
+ enabled_payments: [
+ "permata_va",
+ "bca_va",
+ "bni_va",
+ "bri_va",
+ "cimb_va",
+ "other_va",
+ "shopeepay",
+ ],
+ bca_va: {
+ va_number: "7725699636222",
+ sub_company_code: "00000",
+ free_text: {
+ inquiry: [
+ {
+ en: "Pay according to the invoice",
+ id: "Bayar sesuai faktur",
+ },
+ ],
+ payment: [
+ {
+ en: "Pay according to the invoice",
+ id: "Bayar sesuai faktur",
+ },
+ ],
+ },
+ },
+ };
+
+ const token = await new Promise(async (res) => {
+ try {
+ const transaksi = await snap.createTransaction(params);
+ // console.log(transaksi);
+ res({
+ status: 200,
+ value: transaksi,
+ });
+ } catch (error) {
+ // console.log(error);
+ res({
+ status: 400,
+ value: error,
+ });
+ }
+ });
+
+ // console.log(token)
+
+ if (token.status === 400) {
+ return { token: token };
+ }
+
+
+ return {
+ token: token,
+ // dataTransaksi: newTransaksi,
+ };
+}
diff --git a/src/app_modules/investasi/fun/get_transaksi_investasi.ts b/src/app_modules/investasi/fun/get_transaksi_investasi.ts
new file mode 100644
index 00000000..e78e602b
--- /dev/null
+++ b/src/app_modules/investasi/fun/get_transaksi_investasi.ts
@@ -0,0 +1,27 @@
+"use server"
+
+import prisma from "@/app/lib/prisma"
+
+export default async function getTransaksiByIdInvestasi(id: string) {
+ const data = await prisma.transaksiInvestasi.findUnique({
+ where: {
+ id: id
+ },
+ select: {
+ id: true,
+ namaBank: true,
+ nomorRekening: true,
+ transaction_id: true,
+ quantity: true,
+ gross_amount: true,
+ status_message: true,
+ active: true,
+ createdAt: true,
+ updatedAt: true,
+ Author: true,
+ Investasi: true
+ }
+ })
+ return data
+
+}
\ No newline at end of file
diff --git a/src/app_modules/investasi/fun/master/get_nama_bank.ts b/src/app_modules/investasi/fun/master/get_nama_bank.ts
new file mode 100644
index 00000000..beec67b3
--- /dev/null
+++ b/src/app_modules/investasi/fun/master/get_nama_bank.ts
@@ -0,0 +1,8 @@
+"use server"
+
+import prisma from "@/app/lib/prisma"
+
+export default async function getMaster_NamaBank() {
+ const data = await prisma.masterBank.findMany()
+ return data
+}
\ No newline at end of file
diff --git a/src/app_modules/investasi/fun/master/get_pembagian_deviden.ts b/src/app_modules/investasi/fun/master/get_pembagian_deviden.ts
new file mode 100644
index 00000000..752b5b48
--- /dev/null
+++ b/src/app_modules/investasi/fun/master/get_pembagian_deviden.ts
@@ -0,0 +1,15 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+export default async function getPembagianDeviden() {
+ const data = await prisma.masterPembagianDeviden.findMany({
+ select: {
+ id: true,
+ name: true,
+ active: true,
+ },
+ });
+
+ return data;
+}
diff --git a/src/app_modules/investasi/fun/master/get_pencarian_investor.ts b/src/app_modules/investasi/fun/master/get_pencarian_investor.ts
new file mode 100644
index 00000000..916cab31
--- /dev/null
+++ b/src/app_modules/investasi/fun/master/get_pencarian_investor.ts
@@ -0,0 +1,15 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+export default async function getPencarianInvestor() {
+ const data = await prisma.masterPencarianInvestor.findMany({
+ select: {
+ id: true,
+ name: true,
+ active: true
+ }
+ });
+
+ return data;
+}
diff --git a/src/app_modules/investasi/fun/master/get_periode_deviden.ts b/src/app_modules/investasi/fun/master/get_periode_deviden.ts
new file mode 100644
index 00000000..47d3f5bb
--- /dev/null
+++ b/src/app_modules/investasi/fun/master/get_periode_deviden.ts
@@ -0,0 +1,15 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+export default async function getPeriodeDeviden() {
+ const data = await prisma.masterPeriodeDeviden.findMany({
+ select: {
+ id: true,
+ name: true,
+ active: true,
+ },
+ });
+
+ return data;
+}
diff --git a/src/app_modules/investasi/fun/master/get_status_investasi.ts b/src/app_modules/investasi/fun/master/get_status_investasi.ts
new file mode 100644
index 00000000..fce65241
--- /dev/null
+++ b/src/app_modules/investasi/fun/master/get_status_investasi.ts
@@ -0,0 +1,14 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+export default async function getStatusInvestasi() {
+ const data = await prisma.masterStatusInvestasi.findMany({
+ select: {
+ id: true,
+ name: true,
+ color: true,
+ },
+ });
+ return data;
+}
diff --git a/src/app_modules/investasi/fun/master/get_status_transaksi.ts b/src/app_modules/investasi/fun/master/get_status_transaksi.ts
new file mode 100644
index 00000000..2f59b37f
--- /dev/null
+++ b/src/app_modules/investasi/fun/master/get_status_transaksi.ts
@@ -0,0 +1,8 @@
+"use server"
+
+import prisma from "@/app/lib/prisma"
+
+export default async function getMaster_StatusTransaksiInvestasi() {
+ const data = await prisma.masterStatusTransaksiInvestasi.findMany()
+ return data
+}
\ No newline at end of file
diff --git a/src/app_modules/investasi/g_state/index.ts b/src/app_modules/investasi/g_state/index.ts
new file mode 100644
index 00000000..1002ddd3
--- /dev/null
+++ b/src/app_modules/investasi/g_state/index.ts
@@ -0,0 +1,17 @@
+import { atom } from "jotai";
+import { atomWithStorage } from "jotai/utils";
+
+export const gs_investasiFooter = atomWithStorage("changeColor", 0);
+export const gs_StatusPortoInvestasi = atomWithStorage(
+ "gs_TabPortoInvestasi",
+ "Draft"
+);
+
+export const gs_TransferValue = atomWithStorage("gs_TransferValue", {
+ lembarTerbeli: "",
+ totalTransfer: "",
+ namaBank: "",
+ nomorRekening: "",
+});
+
+export const gs_midtrans_snap= atomWithStorage("gs_midtrans_snapssssssssss", false)
diff --git a/src/app_modules/investasi/index.ts b/src/app_modules/investasi/index.ts
new file mode 100644
index 00000000..006aa1e6
--- /dev/null
+++ b/src/app_modules/investasi/index.ts
@@ -0,0 +1,141 @@
+import MainInvestasi from "./main/view";
+import LayoutMainInvestasi from "./main/layout";
+import InvestasiCreate from "./create/view";
+import InvestasiCreateLayout from "./create/layout";
+import UploadGambarInvestasi from "./upload/view";
+import LayoutUploadGambarInvestasi from "./upload/layout";
+import DetailInvestasi from "./detail/view";
+import LayoutDetailInvestasi from "./detail/layout";
+import ProsesInvestasi from "./proses_investasi/view";
+import LayoutProsesInvestasi from "./proses_investasi/layout";
+import UploadBuktiTransferInvestasi from "./upload_bukti/view";
+import LayoutBuktiTransferInvestasi from "./upload_bukti/layout";
+import CountDownTransaksiInvestasi from "./dialog_page/transaksi_saham/view";
+import LayoutCountDownTransaksiInvestasi from "./dialog_page/transaksi_saham/layout";
+import PortofolioInvestasi from "./portofolio/view";
+import LayoutPortofolioInvestasi from "./portofolio/layout";
+import EditInvestasi from "./edit/view";
+import LayoutEditInvestasi from "./edit/layout";
+import EditIntroInvestasi from "./edit_intro/view";
+import LayoutEditIntroInvestasi from "./edit_intro/layout";
+import EditProspektusInvestasi from "./edit_propektus/view";
+import LayoutEditProspektusInvestasi from "./edit_propektus/layout";
+import EditDokumenInvestasi from "./edit_dokumen/view";
+import LayoutEditDokumenInvestasi from "./edit_dokumen/layout";
+import EditBeritaInvestasi from "./edit_berita/view";
+import LayoutEditBeritaInvestasi from "./edit_berita/layout";
+import DetailSahamTerbeli from "./detail_saham_terbeli/view";
+import LayoutDetailSahamTerbeli from "./detail_saham_terbeli/layout";
+import DetailPropektus from "./detail_prospektus/view";
+import LayoutDetailPropektus from "./detail_prospektus/layout";
+import DetailDokumenInvestasi from "./detail_dokumen/view";
+import LayoutDetailDokumenInvestasi from "./detail_dokumen/layout";
+import DetailBeritaInvestasi from "./detail_berita/view";
+import LayoutDetailBeritaInvestasi from "./detail_berita/layout";
+import BeritaInvestasi from "./berita/view";
+import LayoutBeritaInvestasi from "./berita/layout";
+import MetodeTransferInvestasi from "./metode_transfer/view";
+import LayoutMetodeTransferInvestasi from "./metode_transfer/layout";
+import TransferInvestasi from "./transfer/view";
+import LayoutTransferInvestasi from "./transfer/layout";
+import StatusTransaksiInvestasi from "./status_transaksi/view";
+import LayoutStatusTransaksiInvestasi from "./status_transaksi/layout";
+import DialogPageCreateInvestasi from "./dialog_page/create/view";
+import LayoutDialogPageCreateInvestasi from "./dialog_page/create/layout";
+import CreateBeritaInvestasi from "./create_berita/view";
+import LayoutCreateBeritaInvestasi from "./create_berita/layout";
+import ListEditBeritaInvestasi from "./list_edit_berita/view";
+import LayoutListEditBeritaInvestasi from "./list_edit_berita/layout";
+import InvestasiSahamTerbeli from "./saham_saya/saham_saya";
+import DetailDraftInvestasi from "./detail_portofolio/draft/page";
+import LayoutDetailDraftInvestasi from "./detail_portofolio/draft/layout";
+import DetailReviewInvestasi from "./detail_portofolio/review/page";
+import LayoutDetailReviewInvestasi from "./detail_portofolio/review/layout";
+import DetailPublishInvestasi from "./detail_portofolio/publish/page";
+import LayoutDetailPublishInvestasi from "./detail_portofolio/publish/layout";
+import DetailRejectInvestasi from "./detail_portofolio/reject/page";
+import LayoutDetailRejectInvestasi from "./detail_portofolio/reject/layout";
+import TransaksiInvestasi from "./transaksi/view";
+import LayoutTransaksiInvestasi from "./transaksi/layout";
+import StatusTransaksiInvestasi_Gagal from "./status_transaksi/gagal/view";
+import LayoutStatusTransaksiInvestasi_Gagal from "./status_transaksi/gagal/layout";
+import UploadProspektusInvestasi from "./upload_prospektus/view";
+import LayoutUploadProspektusInvestasi from "./upload_prospektus/layout";
+import UploadDokumenInvestasi from "./upload_dokumen/view";
+import LayoutUploadDokumenInvestasi from "./upload_dokumen/layout";
+import ProsesTransaksiInvestasi from "./proses_transaksi/view";
+import LayoutProsesTransaksiInvestasi from "./proses_transaksi/layout";
+import StatusPesananInvetsatsi from "./status_pesanan/view";
+import LayoutStatusPesananInvestasi from "./status_pesanan/layout";
+
+export {
+ MainInvestasi,
+ LayoutMainInvestasi,
+ InvestasiCreate,
+ InvestasiCreateLayout,
+ UploadGambarInvestasi,
+ LayoutUploadGambarInvestasi,
+ DetailInvestasi,
+ LayoutDetailInvestasi,
+ ProsesInvestasi,
+ LayoutProsesInvestasi,
+ UploadBuktiTransferInvestasi,
+ LayoutBuktiTransferInvestasi,
+ CountDownTransaksiInvestasi as KonfirmasiBuktiInvestasi,
+ LayoutCountDownTransaksiInvestasi as LayoutKonfirmasiBuktiInvestasi,
+ PortofolioInvestasi,
+ LayoutPortofolioInvestasi,
+ EditInvestasi,
+ LayoutEditInvestasi,
+ EditIntroInvestasi,
+ LayoutEditIntroInvestasi,
+ EditProspektusInvestasi,
+ LayoutEditProspektusInvestasi,
+ EditDokumenInvestasi,
+ LayoutEditDokumenInvestasi,
+ EditBeritaInvestasi,
+ LayoutEditBeritaInvestasi,
+ DetailSahamTerbeli,
+ LayoutDetailSahamTerbeli,
+ DetailPropektus,
+ LayoutDetailPropektus,
+ DetailDokumenInvestasi,
+ LayoutDetailDokumenInvestasi,
+ DetailBeritaInvestasi,
+ LayoutDetailBeritaInvestasi,
+ BeritaInvestasi,
+ LayoutBeritaInvestasi as LayoutBeritaInvestasi,
+ MetodeTransferInvestasi,
+ LayoutMetodeTransferInvestasi,
+ TransferInvestasi,
+ LayoutTransferInvestasi,
+ StatusTransaksiInvestasi,
+ LayoutStatusTransaksiInvestasi,
+ DialogPageCreateInvestasi,
+ LayoutDialogPageCreateInvestasi,
+ CreateBeritaInvestasi,
+ LayoutCreateBeritaInvestasi,
+ ListEditBeritaInvestasi,
+ LayoutListEditBeritaInvestasi,
+ InvestasiSahamTerbeli,
+ DetailDraftInvestasi,
+ LayoutDetailDraftInvestasi,
+ DetailReviewInvestasi,
+ LayoutDetailReviewInvestasi,
+ DetailPublishInvestasi,
+ LayoutDetailPublishInvestasi,
+ DetailRejectInvestasi,
+ LayoutDetailRejectInvestasi,
+ TransaksiInvestasi,
+ LayoutTransaksiInvestasi,
+ StatusTransaksiInvestasi_Gagal,
+ LayoutStatusTransaksiInvestasi_Gagal,
+ UploadProspektusInvestasi,
+ LayoutUploadProspektusInvestasi,
+ UploadDokumenInvestasi,
+ LayoutUploadDokumenInvestasi,
+ ProsesTransaksiInvestasi,
+ LayoutProsesTransaksiInvestasi,
+ StatusPesananInvetsatsi,
+ LayoutStatusPesananInvestasi,
+};
diff --git a/src/app_modules/investasi/list_edit_berita/layout.tsx b/src/app_modules/investasi/list_edit_berita/layout.tsx
new file mode 100644
index 00000000..cb47a944
--- /dev/null
+++ b/src/app_modules/investasi/list_edit_berita/layout.tsx
@@ -0,0 +1,32 @@
+"use client";
+
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { AppShell } from "@mantine/core";
+import { IconPencilPlus } from "@tabler/icons-react";
+import React from "react";
+import getOneInvestasiById from "../fun/get_one_investasi_by_id";
+
+export default function LayoutListEditBeritaInvestasi({
+ children,
+ idInves
+}: {
+ children: React.ReactNode;
+ idInves: string
+}) {
+ return (
+ <>
+ }
+ route2={RouterInvestasi.create_berita + `${idInves}`}
+ />
+ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/list_edit_berita/view.tsx b/src/app_modules/investasi/list_edit_berita/view.tsx
new file mode 100644
index 00000000..1801807e
--- /dev/null
+++ b/src/app_modules/investasi/list_edit_berita/view.tsx
@@ -0,0 +1,126 @@
+"use client";
+
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import {
+ ActionIcon,
+ AspectRatio,
+ Box,
+ Center,
+ Divider,
+ Grid,
+ Group,
+ Image,
+ Menu,
+ Paper,
+ Spoiler,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import { IconDots } from "@tabler/icons-react";
+import moment from "moment";
+import { useRouter } from "next/navigation";
+import toast from "react-simple-toasts";
+import { MODEL_Investasi } from "../model/model_investasi";
+import { useState } from "react";
+import _ from "lodash";
+import getOneInvestasiById from "../fun/get_one_investasi_by_id";
+import funLoadDataInvestasi from "../fun/fun_load_data";
+import funDeleteBeritaInvestasi from "../fun/fun_delete_berita";
+import { useShallowEffect } from "@mantine/hooks";
+
+export default function ListEditBeritaInvestasi({
+ dataInvestasi,
+}: {
+ dataInvestasi: MODEL_Investasi;
+}) {
+ const router = useRouter();
+ const [investasi, setInvestasi] = useState(dataInvestasi);
+
+ async function onDelete(idBerita: string) {
+ await funDeleteBeritaInvestasi(idBerita).then(async (res) => {
+ if (res.status === 200) {
+ const load = await funLoadDataInvestasi(investasi.id)
+ toast(res.message);
+ return setInvestasi(load as any)
+ } else {
+ toast(res.message);
+ }
+ });
+ }
+
+ if (!investasi) return <>data kosong>;
+ return (
+ <>
+
+ {_.isEmpty(investasi.BeritaInvestasi) ? (
+
+
+ Berita Kosong
+
+
+ ) : (
+ ""
+ )}
+
+ {investasi.BeritaInvestasi.map((v, k) => (
+
+
+
+
+ {v.title}
+ {moment(v.createdAt).local().format("lll")}
+
+
+
+
+
+
+
+
+
+ router.push(RouterInvestasi.edit_berita + `${v.id}`)
+ }
+ >
+ Edit
+
+ {
+ onDelete(v.id);
+ }}
+ >
+ Hapus
+
+
+
+
+
+
+
+ {v.deskripsi}
+
+
+
+
+
+
+
+
+
+
+
+
+ ))}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/main/layout.tsx b/src/app_modules/investasi/main/layout.tsx
new file mode 100644
index 00000000..f39c0e75
--- /dev/null
+++ b/src/app_modules/investasi/main/layout.tsx
@@ -0,0 +1,105 @@
+"use client";
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import {
+ ActionIcon,
+ AppShell,
+ Center,
+ Flex,
+ Footer,
+ Grid,
+ Group,
+ Stack,
+ Text,
+} from "@mantine/core";
+import {
+ IconCash,
+ IconChartHistogram,
+ IconChartPie,
+ IconChartPieFilled,
+ IconMoneybag,
+ IconNotes,
+ IconPencilPlus,
+} from "@tabler/icons-react";
+import { useAtom } from "jotai";
+import { useRouter } from "next/navigation";
+import React, { useState } from "react";
+import { gs_investasiFooter } from "../g_state";
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+
+export default function LayoutMainInvestasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ const router = useRouter();
+ const [active, setActive] = useAtom(gs_investasiFooter);
+
+ const listFooter = [
+ {
+ id: 1,
+ name: "Bursa",
+ route: RouterInvestasi.main,
+ icon: ,
+ },
+ {
+ id: 2,
+ name: "Portofolio",
+ route: RouterInvestasi.main_porto,
+ icon: ,
+ },
+ {
+ id: 3,
+ name: "Saham Saya",
+ route: RouterInvestasi.main_investasi,
+ icon: ,
+ },
+ {
+ id: 4,
+ name: "Transaksi",
+ route: RouterInvestasi.main_transaksi,
+ icon: ,
+ },
+ ];
+
+ return (
+ <>
+ }
+ // route2={"/dev/investasi/create"}
+ />
+ }
+ footer={
+
+
+ {/* Tampilan Bursa */}
+ {listFooter.map((e, k) => (
+ {
+ router.push(e.route);
+ setActive(k)
+ }}
+ >
+
+
+ {e.icon}
+ {e.name}
+
+
+
+ ))}
+
+
+ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/main/view.tsx b/src/app_modules/investasi/main/view.tsx
new file mode 100644
index 00000000..62b23b7c
--- /dev/null
+++ b/src/app_modules/investasi/main/view.tsx
@@ -0,0 +1,216 @@
+"use client";
+
+import { ApiHipmi } from "@/app/lib/api";
+import { MODEL_DEFAULT_MASTER } from "@/app_modules/models/model_default_master";
+import {
+ AspectRatio,
+ Badge,
+ Box,
+ Button,
+ Card,
+ CardSection,
+ Center,
+ Divider,
+ Flex,
+ Grid,
+ Group,
+ Image,
+ Paper,
+ Progress,
+ Slider,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import { useRouter } from "next/navigation";
+import dataDummy from "../dummy/data_dummy.json";
+import moment from "moment";
+import { IconCheck, IconCircleCheck, IconXboxX } from "@tabler/icons-react";
+import { MODEL_Investasi } from "../model/model_investasi";
+import _ from "lodash";
+import { useState } from "react";
+import { useShallowEffect } from "@mantine/hooks";
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import { Warna } from "@/app/lib/warna";
+
+export default function MainInvestasi({
+ listData,
+ dataSelesai,
+ dataWaktuHabis,
+}: {
+ listData: MODEL_Investasi[];
+ dataSelesai: MODEL_Investasi[];
+ dataWaktuHabis: MODEL_Investasi[];
+}) {
+ // console.log(listData)
+ const router = useRouter();
+ const [investasi, setInvestasi] = useState(listData);
+ const [invesDone, setInvesDone] = useState(dataSelesai);
+ const [invesFail, setInvesFail] = useState(dataWaktuHabis);
+ const [statusPublish, setStatusPublish] = useState(false);
+
+ // console.log(dataWaktuHabis)
+
+ if (_.isEmpty(investasi) && _.isEmpty(invesDone) && _.isEmpty(invesFail))
+ return (
+ <>
+ {" "}
+
+ BURSA KOSONG
+
+ >
+ );
+
+ return (
+ <>
+
+ {investasi.map((e) => (
+
+
+
+
+ {e.imagesId ? (
+
+ ) : (
+
+ )}
+
+
+
+
+
+
+ {e.title}
+
+
+
+
+
+
+
+
+
+
+ Dana Dibutuhkan
+
+ Rp.{" "}
+ {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+e.targetDana)}
+
+
+
+ Harga Per Lembar
+
+ Rp.{" "}
+ {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+e.hargaLembar)}
+
+
+
+
+
+
+
+
+
+ ROI
+ {e.roi}%
+
+
+ Sisa Lembar
+
+ {new Intl.NumberFormat("id-ID").format(+e.sisaLembar)}
+
+
+
+
+
+
+
+
+
+
+
+ router.push(RouterInvestasi.detail + `${e.id}`)}
+ >
+ Details
+
+
+ {e.progress === "100" ? (
+
+
+
+ Selesai
+
+
+ ) : (
+
+ {+e.MasterPencarianInvestor.name -
+ moment(new Date()).diff(new Date(e.countDown), "days") <=
+ 0 ? (
+
+
+
+ Waktu Habis
+
+
+ ) : (
+
+ Sisa waktu:
+
+ {Number(e.MasterPencarianInvestor.name) -
+ moment(new Date()).diff(
+ new Date(e.countDown),
+ "days"
+ )}
+
+ Hari
+
+ )}
+
+ )}
+
+
+
+ ))}
+ >
+ );
+}
diff --git a/src/app_modules/investasi/metode_transfer/layout.tsx b/src/app_modules/investasi/metode_transfer/layout.tsx
new file mode 100644
index 00000000..3da9da0d
--- /dev/null
+++ b/src/app_modules/investasi/metode_transfer/layout.tsx
@@ -0,0 +1,19 @@
+"use client";
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { AppShell } from "@mantine/core";
+import React from "react";
+
+export default function LayoutMetodeTransferInvestasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ }>
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/metode_transfer/view.tsx b/src/app_modules/investasi/metode_transfer/view.tsx
new file mode 100644
index 00000000..0f1278dc
--- /dev/null
+++ b/src/app_modules/investasi/metode_transfer/view.tsx
@@ -0,0 +1,130 @@
+"use client";
+
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import { Warna } from "@/app/lib/warna";
+import {
+ Avatar,
+ Box,
+ Button,
+ Center,
+ Flex,
+ Group,
+ Paper,
+ Radio,
+ Text,
+ Title,
+} from "@mantine/core";
+import { useShallowEffect } from "@mantine/hooks";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import toast from "react-simple-toasts";
+import {
+ MODEL_Investasi,
+ MODEL_Transaksi_Investasi,
+ Model_Nama_Bank,
+} from "../model/model_investasi";
+import { useAtom } from "jotai";
+import { gs_TransferValue } from "../g_state";
+import getNorekInvestasi from "../fun/get_norek";
+import _ from "lodash";
+import funCreateTransaksiInvestasi from "../fun/fun_create_transaksi";
+import { myConsole } from "@/app/fun/my_console";
+
+export default function MetodeTransferInvestasi({
+ dataInvestasi,
+ namaBank,
+ authorId,
+}: {
+ dataInvestasi: MODEL_Investasi;
+ namaBank: Model_Nama_Bank[];
+ authorId: string;
+}) {
+ const [investasi, setInvestasi] = useState(dataInvestasi);
+ const [bank, setBank] = useState(namaBank);
+ const [pilihBank, setPilihBank] = useState(null);
+ const router = useRouter();
+ const [transferValue, setTransferValue] = useAtom(gs_TransferValue);
+
+ async function onSubmit() {
+ // Create Transaksi
+ await funCreateTransaksiInvestasi(
+ transferValue as any,
+ investasi.id,
+ authorId
+ ).then(async (res) => {
+ if (res.status === 201) {
+ toast(res.message);
+ router.push(RouterInvestasi.transfer + `${res.res?.id}`);
+ } else {
+ toast(res.message);
+ }
+ });
+ }
+
+ async function onSelect(id: string) {
+ await getNorekInvestasi(id).then((res) => {
+ if (res.status === 200) {
+ setTransferValue({
+ ...transferValue,
+ namaBank: res.res?.name as any,
+ nomorRekening: res.res?.norek as any,
+ });
+ } else {
+ toast(res.message);
+ }
+ });
+ }
+
+ return (
+ <>
+ {/* {JSON.stringify(transferValue, null, 2)} */}
+ {/* Box judul */}
+
+ {investasi.title}
+ Total Transfer : Rp.{transferValue.totalTransfer}
+
+
+ {/* Metode transfer */}
+ {
+ setPilihBank(val);
+ onSelect(val);
+ }}
+ value={"" + pilihBank}
+ >
+
+ {bank.map((e) => (
+
+
+
+ ))}
+
+
+
+
+ {pilihBank === null ? (
+
+ Pilih Bank
+
+ ) : (
+ {
+ onSubmit();
+ }}
+ >
+ Lanjutkan Untuk Transfer
+
+ )}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/model/dummy.ts b/src/app_modules/investasi/model/dummy.ts
new file mode 100644
index 00000000..3547d261
--- /dev/null
+++ b/src/app_modules/investasi/model/dummy.ts
@@ -0,0 +1,26 @@
+export interface DUMMY_INVESTASI {
+ id: string;
+ authorId: string;
+ title: string;
+ targetDana: string;
+ hargaLembar: string;
+ totalLembar: string;
+ roi: string;
+ masterPeriodeDevidenId: string;
+ masterPembagianDevidenId: string;
+ masterPencarianInvestorId: string;
+ imagesId: string;
+ active: boolean;
+ createdAt: Date;
+ updatedAt: Date;
+ persentase: number;
+ saham_beli: number;
+ statusPorto: {
+ id: number;
+ status: string;
+ };
+ statusSaham: {
+ id: number;
+ status: string;
+ };
+}
diff --git a/src/app_modules/investasi/model/model_investasi.ts b/src/app_modules/investasi/model/model_investasi.ts
new file mode 100644
index 00000000..12b3ed50
--- /dev/null
+++ b/src/app_modules/investasi/model/model_investasi.ts
@@ -0,0 +1,114 @@
+import { MODEL_User_profile } from "@/app_modules/home/models/user_profile";
+
+export interface MODEL_Investasi {
+ id: string;
+ title: string;
+ targetDana: string;
+ hargaLembar: string;
+ totalLembar: string;
+ sisaLembar: string;
+ lembarTerbeli: string;
+ roi: string;
+ active: true;
+ createdAt: Date;
+ updatedAt: Date;
+ authorId: string;
+ imagesId: string;
+ catatan: string;
+ progress: string;
+ MasterStatusInvestasi: MODEL_Status_investasi;
+ BeritaInvestasi: Model_Berita_Investasi[];
+ DokumenInvestasi: Model_Dokumen_Investasi[];
+ ProspektusInvestasi: Model_Prospektus_Investasi;
+ MasterPembagianDeviden: Model_All_Master;
+ MasterPencarianInvestor: Model_All_Master;
+ MasterPeriodeDeviden: Model_All_Master;
+ MasterProgresInvestasi: Model_All_Master,
+ masterPeriodeDevidenId: string;
+ masterPembagianDevidenId: string;
+ masterPencarianInvestorId: string;
+ author: MODEL_User_profile;
+ countDown: Date
+}
+
+export interface MODEL_Transaksi_Investasi {
+ id: string;
+ namaBank: string;
+ nomorRekening: string;
+ transaction_id: string,
+ status_message: string
+ payment_type: string,
+ active: boolean;
+ createdAt: Date;
+ updatedAt: Date;
+ authorId: string;
+ quantity: string;
+ price: string;
+ gross_amount: string;
+ merchant_name: string;
+ redirect_url: string;
+ token: string;
+ Author: MODEL_User_profile;
+ masterStatusTransaksiInvestasiId: string;
+ investasiId: string;
+ Investasi: MODEL_Investasi;
+}
+
+export interface MODEL_Status_investasi {
+ id: string;
+ name: string;
+ color: string;
+}
+
+interface Model_All_Master {
+ id: string;
+ name: string;
+ active: boolean;
+}
+
+export interface Model_Berita_Investasi {
+ id: string;
+ title: string;
+ deskripsi: string;
+ imagesId: string;
+ active: boolean;
+ createdAt: Date;
+ updatedAt: Date;
+}
+
+export interface Model_Prospektus_Investasi {
+ id: string;
+ url: string;
+ active: boolean;
+ createdAt: Date;
+ updatedAt: Date;
+ investasiId: string;
+}
+
+export interface Model_Dokumen_Investasi {
+ id: string;
+ title: string;
+ url: string;
+ active: boolean;
+ createdAt: Date;
+ updatedAt: Date;
+ investasiId: string;
+}
+
+export interface Model_Nama_Bank {
+ id: string;
+ name: string;
+ norek: string;
+ active: boolean;
+ createdAt: Date;
+ updatedAt: Date;
+}
+
+export interface Model_Status_Transaksi_Investasi {
+ id: string;
+ name: string;
+ color: string;
+ active: boolean;
+ createdAt: Date;
+ updatedAt: Date;
+}
diff --git a/src/app_modules/investasi/portofolio/draft.tsx b/src/app_modules/investasi/portofolio/draft.tsx
new file mode 100644
index 00000000..8e3801db
--- /dev/null
+++ b/src/app_modules/investasi/portofolio/draft.tsx
@@ -0,0 +1,76 @@
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import {
+ Card,
+ CardSection,
+ AspectRatio,
+ Box,
+ Title,
+ Divider,
+ Group,
+ Badge,
+ Image,
+ Text,
+ Center,
+ Paper,
+ Grid,
+ Flex,
+ Stack,
+} from "@mantine/core";
+import { useRouter } from "next/navigation";
+import { MODEL_Investasi } from "../model/model_investasi";
+import _ from "lodash";
+
+export default function Draft({ data }: { data: MODEL_Investasi[] }) {
+ const router = useRouter();
+ // console.log(data)
+
+ if (_.isEmpty(data))
+ return (
+ <>
+ Tidak ada Draft
+ >
+ );
+
+ return (
+ <>
+ {/* {JSON.stringify(data,null, 2)} */}
+ {data.map((e) => (
+ router.push(RouterInvestasi.detail_draft + `${e.id}`)}
+ >
+
+
+ {_.capitalize(e.title)}
+
+ Target Dana:
+
+ Rp.{" "}
+ {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+e.targetDana)}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ))}
+ >
+ );
+}
diff --git a/src/app_modules/investasi/portofolio/layout.tsx b/src/app_modules/investasi/portofolio/layout.tsx
new file mode 100644
index 00000000..9f23e1ef
--- /dev/null
+++ b/src/app_modules/investasi/portofolio/layout.tsx
@@ -0,0 +1,29 @@
+"use client";
+
+import {
+ AppShell,
+ Box,
+ Button,
+ Group,
+ Header,
+ ScrollArea,
+} from "@mantine/core";
+import React, { useState } from "react";
+
+export default function LayoutPortofolioInvestasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ const [active, setActive] = useState(0);
+
+
+ return (
+ <>
+
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/portofolio/publish.tsx b/src/app_modules/investasi/portofolio/publish.tsx
new file mode 100644
index 00000000..de52eae2
--- /dev/null
+++ b/src/app_modules/investasi/portofolio/publish.tsx
@@ -0,0 +1,115 @@
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import {
+ Card,
+ CardSection,
+ AspectRatio,
+ Box,
+ Title,
+ Slider,
+ Divider,
+ Group,
+ Badge,
+ Image,
+ Text,
+ Center,
+ Grid,
+ Stack,
+ Paper,
+} from "@mantine/core";
+import { useRouter } from "next/navigation";
+import {
+ MODEL_Investasi,
+ MODEL_Status_investasi,
+} from "../model/model_investasi";
+import _ from "lodash";
+import moment from "moment";
+import { useState } from "react";
+import { IconChecklist, IconCircleCheck } from "@tabler/icons-react";
+
+export default function Publish({ data }: { data: MODEL_Investasi[] }) {
+ const router = useRouter();
+ const [sisaWaktu, setSisaWaktu] = useState();
+
+ if (_.isEmpty(data))
+ return (
+ <>
+ Tidak ada Publish
+ >
+ );
+
+ return (
+ <>
+ {data.map((e) => (
+
+ router.push(RouterInvestasi.detail_publish + `${e.id}`)
+ }
+ >
+
+
+ {_.capitalize(e.title)}
+
+ Target Dana:
+
+ Rp.{" "}
+ {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+e.targetDana)}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {Number(e.MasterPencarianInvestor.name) -
+ moment(new Date()).diff(new Date(e.updatedAt), "days") <=
+ 0 ? (
+
+
+ Selesai
+
+ ) : (
+
+ {/*
+ Publish
+ */}
+
+ {Number(e.MasterPencarianInvestor.name) -
+ moment(new Date()).diff(new Date(e.countDown), "days") <=
+ 0 ? (
+
+
+ Selesai
+
+ ) : (
+
+ Sisa Waktu : {}
+ {Number(e.MasterPencarianInvestor.name) -
+ moment(new Date()).diff(new Date(e.countDown), "days")} hari
+
+ )}
+
+
+ )}
+
+
+ ))}
+ >
+ );
+}
diff --git a/src/app_modules/investasi/portofolio/reject.tsx b/src/app_modules/investasi/portofolio/reject.tsx
new file mode 100644
index 00000000..f3c9219c
--- /dev/null
+++ b/src/app_modules/investasi/portofolio/reject.tsx
@@ -0,0 +1,77 @@
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import {
+ Card,
+ CardSection,
+ AspectRatio,
+ Box,
+ Title,
+ Divider,
+ Group,
+ Badge,
+ Image,
+ Text,
+ Center,
+ Grid,
+ Stack,
+ Paper,
+} from "@mantine/core";
+import { useRouter } from "next/navigation";
+import {
+ MODEL_Investasi,
+ MODEL_Status_investasi,
+} from "../model/model_investasi";
+import { useState } from "react";
+import _ from "lodash";
+
+export default function Reject({ data }: { data: MODEL_Investasi[] }) {
+ const [investasi, setInvestasi] = useState(data);
+ const router = useRouter();
+
+ if (_.isEmpty(data))
+ return (
+ <>
+ Tidak ada Reject
+ >
+ );
+
+ return (
+ <>
+
+ {investasi.map((e) => (
+ router.push(RouterInvestasi.detail_reject + `${e.id}`)}
+ >
+
+
+ {_.capitalize(e.title)}
+
+ Target Dana:
+
+ Rp. {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+e.targetDana)}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ))}
+ >
+ );
+}
diff --git a/src/app_modules/investasi/portofolio/review.tsx b/src/app_modules/investasi/portofolio/review.tsx
new file mode 100644
index 00000000..1f6865c5
--- /dev/null
+++ b/src/app_modules/investasi/portofolio/review.tsx
@@ -0,0 +1,75 @@
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import {
+ Card,
+ CardSection,
+ AspectRatio,
+ Box,
+ Title,
+ Divider,
+ Group,
+ Badge,
+ Image,
+ Center,
+ Text,
+ Paper,
+ Grid,
+ Stack,
+} from "@mantine/core";
+import { useRouter } from "next/navigation";
+import {
+ MODEL_Status_investasi,
+ MODEL_Investasi,
+} from "../model/model_investasi";
+import _ from "lodash";
+
+export default function Review({ data }: { data: MODEL_Investasi[] }) {
+ const router = useRouter();
+
+ if (_.isEmpty(data))
+ return (
+ <>
+ Tidak ada Review
+ >
+ );
+ return (
+ <>
+ {data.map((e) => (
+ router.push(RouterInvestasi.detail_review + `${e.id}`)}
+ >
+
+
+ {_.capitalize(e.title)}
+
+ Target Dana:
+
+ Rp.{" "}
+ {new Intl.NumberFormat("id-ID", {
+ maximumSignificantDigits: 10,
+ }).format(+e.targetDana)}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ))}
+ >
+ );
+}
diff --git a/src/app_modules/investasi/portofolio/view.tsx b/src/app_modules/investasi/portofolio/view.tsx
new file mode 100644
index 00000000..9646981a
--- /dev/null
+++ b/src/app_modules/investasi/portofolio/view.tsx
@@ -0,0 +1,125 @@
+"use client";
+
+import {
+ AspectRatio,
+ Avatar,
+ Badge,
+ Box,
+ Button,
+ Card,
+ CardSection,
+ Collapse,
+ Divider,
+ Flex,
+ Grid,
+ Group,
+ Image,
+ Paper,
+ ScrollArea,
+ Select,
+ Slider,
+ Stack,
+ Tabs,
+ Text,
+ Title,
+} from "@mantine/core";
+import dataDummy from "../dummy/data_dummy.json";
+import moment from "moment";
+import { useRouter } from "next/navigation";
+import {
+ IconCaretDown,
+ IconCircleCheck,
+ IconCirclePlus,
+} from "@tabler/icons-react";
+import { useState } from "react";
+
+import "react-responsive-carousel/lib/styles/carousel.min.css"; // requires a loader
+import { Carousel } from "react-responsive-carousel";
+import { useDisclosure } from "@mantine/hooks";
+import { Warna } from "@/app/lib/warna";
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import {
+ IconPhoto,
+ IconMessageCircle,
+ IconSettings,
+} from "@tabler/icons-react";
+import { atomWithStorage } from "jotai/utils";
+import { useAtom } from "jotai";
+import { gs_StatusPortoInvestasi } from "../g_state";
+import {
+ MODEL_Investasi,
+ MODEL_Status_investasi,
+} from "../model/model_investasi";
+import _ from "lodash";
+import Draft from "./draft";
+import Review from "./review";
+import Publish from "./publish";
+import Reject from "./reject";
+
+export default function PortofolioInvestasi({
+ listStatusInvestasi,
+ dataDraft,
+ dataReview,
+ dataPublish,
+ dataReject,
+}: {
+ listStatusInvestasi: any;
+ dataDraft: any;
+ dataReview: any;
+ dataPublish: any;
+ dataReject: any;
+}) {
+ const router = useRouter();
+ const [activeTab, setActiveTab] = useAtom(gs_StatusPortoInvestasi);
+ const [status_inves, setStatus_inves] =
+ useState(listStatusInvestasi);
+
+ return (
+ <>
+ {/* {JSON.stringify(dataInvestasi, null, 2)} */}
+
+ }
+ onClick={() => router.push(RouterInvestasi.create)}
+ >
+ Buat Proyek Invetasi
+
+
+
+ {status_inves.map((e) => (
+
+ {e.name}
+
+ ))}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/proses_investasi/layout.tsx b/src/app_modules/investasi/proses_investasi/layout.tsx
new file mode 100644
index 00000000..ee09e665
--- /dev/null
+++ b/src/app_modules/investasi/proses_investasi/layout.tsx
@@ -0,0 +1,21 @@
+"use client";
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { AppShell } from "@mantine/core";
+import React from "react";
+
+export default function LayoutProsesInvestasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+
+ }
+ >{children}
+ >
+ );
+}
diff --git a/src/app_modules/investasi/proses_investasi/view.tsx b/src/app_modules/investasi/proses_investasi/view.tsx
new file mode 100644
index 00000000..5463d7eb
--- /dev/null
+++ b/src/app_modules/investasi/proses_investasi/view.tsx
@@ -0,0 +1,169 @@
+"use client";
+
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import { Warna } from "@/app/lib/warna";
+import {
+ ActionIcon,
+ Box,
+ Button,
+ Center,
+ Divider,
+ Grid,
+ Group,
+ NumberInput,
+ Text,
+ Title,
+} from "@mantine/core";
+import { useCounter, useFocusTrap, useShallowEffect } from "@mantine/hooks";
+import {
+ IconMinus,
+ IconNumber10Small,
+ IconPlus,
+ IconRefresh,
+} from "@tabler/icons-react";
+import _ from "lodash";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import toast from "react-simple-toasts";
+import { MODEL_Investasi } from "../model/model_investasi";
+import { error } from "console";
+import { useAtom } from "jotai";
+import { gs_TransferValue } from "../g_state";
+
+export default function ProsesInvestasi({
+ dataInvestasi,
+}: {
+ dataInvestasi: MODEL_Investasi;
+}) {
+ const router = useRouter();
+ const focusTrapRef = useFocusTrap();
+
+ const [jumlah, setJumlah] = useState(0);
+ const [hargaLembar, setHargaLembar] = useState(
+ Number(dataInvestasi.hargaLembar)
+ );
+ const [total, setTotal] = useState(0);
+ const [investasi, setInvestasi] = useState(dataInvestasi);
+ const [maxPembelian, setMaxPembelian] = useState(
+ Number(dataInvestasi.totalLembar)
+ );
+ const [transferValue, setTransferValue] = useAtom(gs_TransferValue);
+
+ // async function onBeli() {
+ // setTransferValue({
+ // ...transferValue,
+ // totalTransfer: total as any,
+ // lembarTerbeli: jumlah as any,
+ // });
+ // router.push(RouterInvestasi.metode_transfer + `${investasi.id}`);
+ // }
+ const date = new Date();
+ const randomId = date.getTime();
+
+ async function onProses() {
+
+ const body = {
+ transaction_details: {
+ order_id: "hipmi_" + `${randomId}`,
+ gross_amount: total,
+ },
+ item_details: [
+ {
+ id: "item_"+ `${randomId}`,
+ name: investasi.title,
+ price: Number(investasi.hargaLembar),
+ quantity: transferValue.lembarTerbeli,
+ merchant_name: "Transaksi Saham",
+ },
+ ],
+ customer_details: {
+ first_name: "",
+ email: "test@midtrans.com",
+ phone: "+628123456",
+ },
+ };
+ }
+
+ return (
+ <>
+ {/* {JSON.stringify(investasi, null, 2)} */}
+
+ {/* Sisa Lembar Saham */}
+
+ Sisa Lembar Saham
+
+ {new Intl.NumberFormat("id-ID", {
+ maximumFractionDigits: 10,
+ }).format(+investasi.totalLembar)}{" "}
+
+
+
+ {/* Harga perlembar saham */}
+
+ Harga Perlembar
+
+ Rp.{" "}
+ {new Intl.NumberFormat("id-ID", {
+ maximumFractionDigits: 10,
+ }).format(+investasi.hargaLembar)}{" "}
+
+
+
+ {/* Lembar saham */}
+
+
+ Jumlah Pembelian
+
+ minimal pembelian 10 lembar
+
+ {/*
+ maximal pembelian {maxPembelian} lembar
+ */}
+
+ {
+ setTotal(val * hargaLembar);
+ setJumlah(val);
+ // console.log(val);
+ }}
+ />
+
+
+
+
+
+
+ Total Harga
+
+ Rp.{total}
+
+
+
+ {jumlah < 10 ? (
+
+ Beli Saham
+
+ ) : (
+ {
+ // onBeli();
+ onProses();
+ }}
+ >
+ Beli Saham
+
+ )}
+
+
+
+ {/* {JSON.stringify(investasi, null, 2)} */}
+ >
+ );
+}
diff --git a/src/app_modules/investasi/proses_transaksi/layout.tsx b/src/app_modules/investasi/proses_transaksi/layout.tsx
new file mode 100644
index 00000000..8437317b
--- /dev/null
+++ b/src/app_modules/investasi/proses_transaksi/layout.tsx
@@ -0,0 +1,44 @@
+"use client";
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { ActionIcon, AppShell, Box, Group, Header, Text } from "@mantine/core";
+import { useAtom } from "jotai";
+import React, { useState } from "react";
+import { gs_midtrans_snap } from "../g_state";
+import { IconArrowLeft } from "@tabler/icons-react";
+import { title } from "process";
+import { useRouter } from "next/navigation";
+
+export default function LayoutProsesTransaksiInvestasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ const [snapShow, setSnapShow] = useAtom(gs_midtrans_snap);
+ const router = useRouter();
+ // console.log(snapShow)
+ return (
+ <>
+
+
+ {
+ router.back();
+ }}
+ >
+
+
+ Proses Transaksi
+
+
+
+ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/proses_transaksi/view.jsx b/src/app_modules/investasi/proses_transaksi/view.jsx
new file mode 100644
index 00000000..99738912
--- /dev/null
+++ b/src/app_modules/investasi/proses_transaksi/view.jsx
@@ -0,0 +1,236 @@
+"use client";
+
+import { Warna } from "@/app/lib/warna";
+import {
+ Box,
+ Group,
+ NumberInput,
+ Divider,
+ Center,
+ Button,
+ Text,
+ Container,
+ Flex,
+} from "@mantine/core";
+import { useFocusTrap, useShallowEffect } from "@mantine/hooks";
+import { useRouter } from "next/navigation";
+import { MODEL_Investasi } from "../model/model_investasi";
+import { MODEL_User_profile } from "@/app_modules/home/models/user_profile";
+import { useEffect, useState } from "react";
+import getTokenTransaksi from "../fun/get_token_transaksi";
+import toast from "react-simple-toasts";
+import funUpdatePaymentInvestasi from "../fun/fun_update_payment";
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import { useAtom } from "jotai";
+import { gs_investasiFooter, gs_midtrans_snap } from "../g_state";
+import funUpdateInvestasi from "../fun/fun_update_investasi";
+
+export default function ProsesTransaksiInvestasi({ dataInvestasi, userLogin }) {
+ const router = useRouter();
+ const focusTrapRef = useFocusTrap();
+ const [investasi, setInvestasi] = useState(dataInvestasi);
+ const [user, setUser] = useState(userLogin);
+ const [maxPembelian, setMaxPembelian] = useState(
+ Number(investasi.sisaLembar)
+ );
+ const [total, setTotal] = useState(0);
+ const [jumlah, setJumlah] = useState(0);
+ const [hotmenu, setHotmenu] = useAtom(gs_investasiFooter);
+ const [snapShow, setSnapShow] = useState(false);
+
+ useShallowEffect(() => {
+ setJumlah(0)
+ setTotal(0)
+ },[])
+
+ // console.log(userLogin.id);
+ // console.log(investasi);
+
+ async function onProses() {
+ const body = {
+ // customer_details
+ authorId: userLogin.id,
+ customer_name: userLogin.username,
+ phone: userLogin.nomor,
+ // transaction_details
+ gross_amount: total,
+ // item_details
+ item_name: "Saham" + " " + investasi.title,
+ price: +investasi.hargaLembar,
+ quantity: jumlah,
+ merchant_name: investasi.author.username,
+ // investasi
+ investasiId: investasi.id,
+ };
+
+ await getTokenTransaksi(body).then(async (res) => {
+ if (res.token.status === 200) {
+ // console.log(res.token.value.token)
+ // setSnapShow(true);
+ snap.pay(res.token.value.token, {
+ // embedId: "embedId",
+ onSuccess: async function (result) {
+ // setSnapShow(false);
+
+ await funUpdatePaymentInvestasi(result, body, res.token.value).then(
+ async (resUpdate) => {
+ if (resUpdate.status === 200) {
+ // console.log(resUpdate.message)
+ const lembarTersisa = investasi.sisaLembar - resUpdate.data.quantity;
+
+ const body2 = {
+ id: investasi.id,
+ sisaLembar: lembarTersisa,
+ };
+
+ await funUpdateInvestasi(body2, investasi);
+ toast(res.message);
+ router.push(
+ RouterInvestasi.status_pesanan + `${resUpdate.data.id}`
+ );
+
+ setHotmenu(3);
+ } else {
+ toast(res.message);
+ }
+ }
+ );
+ },
+ onPending: async function (result) {
+ // console.log("pending");
+ // console.log(result);
+ // await funUpdatePaymentInvestasi(result, res.dataTransaksi.id);
+ // toast(res.message);
+ // router.push(
+ // RouterInvestasi.status_pesanan + `${res.dataTransaksi.id}`
+ // );
+ // router.push(RouterInvestasi.detail + `${investasi.id}`)
+ await router.push(RouterInvestasi.detail + `${investasi.id}`);
+ setJumlah(0);
+ },
+ onClose: async function (result) {
+ await router.push(RouterInvestasi.detail + `${investasi.id}`);
+
+ // if (result === undefined) {
+ // const data = {
+ // status_code: "400",
+ // };
+ // // await funUpdatePaymentInvestasi(data, res.dataTransaksi.id);
+ // router.push(RouterInvestasi.main_transaksi);
+ // setSnapShow(false);
+ // // router.push(RouterPay.home);
+ // console.log(data);
+ // }
+ },
+ });
+ } else {
+ toast("Gagal Membuat Token");
+ }
+ });
+ }
+
+ useEffect(() => {
+ const midTransURl = "https://app.sandbox.midtrans.com/snap/snap.js";
+ let script = document.createElement("script");
+ const midTransClientKey = process.env.Client_KEY;
+
+ script.src = midTransURl;
+ script.setAttribute("data-client-key", midTransClientKey);
+ script.async = true;
+
+ document.body.appendChild(script);
+
+ return () => {
+ document.body.removeChild(script);
+ };
+ }, []);
+
+ return (
+ <>
+ {/* {!snapShow && (
+
+ )} */}
+
+ {/* Sisa Lembar Saham */}
+
+ Sisa Lembar Saham
+
+ {new Intl.NumberFormat("id-ID", {
+ maximumFractionDigits: 10,
+ }).format(+investasi.sisaLembar)}{" "}
+
+
+
+ {/* Harga perlembar saham */}
+
+ Harga Perlembar
+
+ Rp.{" "}
+ {new Intl.NumberFormat("id-ID", {
+ maximumFractionDigits: 10,
+ }).format(+investasi.hargaLembar)}{" "}
+
+
+
+ {/* Lembar saham */}
+
+
+ Jumlah Pembelian
+
+ minimal pembelian 10 lembar
+
+ {/*
+ maximal pembelian {maxPembelian} lembar
+ */}
+
+ {
+ setTotal(val * +investasi.hargaLembar);
+ setJumlah(val);
+ // console.log(val);
+ }}
+ />
+
+
+
+
+
+
+ Total Harga
+
+
+ Rp.{" "}
+ {new Intl.NumberFormat("id-ID", {
+ maximumFractionDigits: 10,
+ }).format(total)}
+
+
+
+
+ {jumlah < 10 ? (
+
+ Beli
+
+ ) : (
+ {
+ onProses();
+ }}
+ >
+ Beli
+
+ )}
+
+
+
+ {/* */}
+ >
+ );
+}
diff --git a/src/app_modules/investasi/saham_saya/saham_saya.tsx b/src/app_modules/investasi/saham_saya/saham_saya.tsx
new file mode 100644
index 00000000..56d379c4
--- /dev/null
+++ b/src/app_modules/investasi/saham_saya/saham_saya.tsx
@@ -0,0 +1,174 @@
+"use client";
+
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import {
+ Title,
+ Card,
+ CardSection,
+ Group,
+ Flex,
+ Avatar,
+ AspectRatio,
+ Box,
+ Slider,
+ Grid,
+ Stack,
+ Divider,
+ Badge,
+ Image,
+ Text,
+ Button,
+ Paper,
+ Progress,
+ Center,
+ SimpleGrid,
+} from "@mantine/core";
+import { IconCircleCheck } from "@tabler/icons-react";
+import moment from "moment";
+import { useRouter } from "next/navigation";
+import dataDummy from "../dummy/data_dummy.json";
+import { MODEL_Transaksi_Investasi } from "../model/model_investasi";
+import { useState } from "react";
+import { Warna } from "@/app/lib/warna";
+import _ from "lodash";
+
+export default function InvestasiSahamTerbeli({
+ listTransaksi,
+}: {
+ listTransaksi: MODEL_Transaksi_Investasi[];
+}) {
+ const router = useRouter();
+ const [transaksi, setTransaksi] = useState(listTransaksi);
+
+ if (_.isEmpty(transaksi)) {
+ return (
+ <>
+
+ Saham Anda Kosong
+
+ >
+ );
+ }
+
+ return (
+ <>
+
+ {transaksi.map((e) => (
+
+
+
+
+
+ {(() => {
+ const usr = e.Investasi.author.username;
+ const splt = usr.split("");
+ const Up = _.upperCase(splt[0]);
+
+ return Up;
+ })()}
+
+ {e.Investasi.author.username}
+
+
+
+ router.push(
+ RouterInvestasi.detail_saham_terbeli + `${e.id}`
+ )
+ }
+ >
+ Detail
+
+
+
+
+
+
+
+
+
+ {e.Investasi.title}
+
+
+
+
+
+
+
+
+ Lembar Saham:
+
+ {new Intl.NumberFormat("id-ID", {
+ maximumFractionDigits: 10,
+ }).format(+e.quantity)}
+
+
+
+ Total:
+
+ Rp.{" "}
+ {new Intl.NumberFormat("id-ID", {
+ maximumFractionDigits: 10,
+ }).format(+e.gross_amount)}
+
+
+
+
+
+
+
+ {e.Investasi.imagesId ? (
+
+ ) : (
+
+ )}
+
+
+
+
+
+
+
+
+ ))}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/status_pesanan/layout.tsx b/src/app_modules/investasi/status_pesanan/layout.tsx
new file mode 100644
index 00000000..1356d682
--- /dev/null
+++ b/src/app_modules/investasi/status_pesanan/layout.tsx
@@ -0,0 +1,30 @@
+"use client";
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { ActionIcon, AppShell, Group, Header, Text } from "@mantine/core";
+import { IconArrowLeft } from "@tabler/icons-react";
+import router from "next/router";
+import { title } from "process";
+import React from "react";
+
+export default function LayoutStatusPesananInvestasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+
+
+ Status Transaksi
+
+
+ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/status_pesanan/view.tsx b/src/app_modules/investasi/status_pesanan/view.tsx
new file mode 100644
index 00000000..6a6d99f7
--- /dev/null
+++ b/src/app_modules/investasi/status_pesanan/view.tsx
@@ -0,0 +1,70 @@
+"use client";
+
+import { useState } from "react";
+import { MODEL_Transaksi_Investasi } from "../model/model_investasi";
+import { Button, Group, Paper, Stack, Text } from "@mantine/core";
+import { useRouter } from "next/navigation";
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+
+export default function StatusPesananInvetsatsi({
+ dataTransaksi,
+}: {
+ dataTransaksi: MODEL_Transaksi_Investasi;
+}) {
+ const router = useRouter()
+ const [transaksi, setTransaksi] = useState(dataTransaksi);
+
+ return (
+ <>
+
+
+
+
+ Pemilik Investasi
+ {transaksi.Investasi.author.username}
+
+
+ Nomor Telephone
+ {transaksi.Investasi.author.nomor}
+
+
+ Nama Proyek Investasi
+ {transaksi.Investasi.title}
+
+
+
+
+
+
+ Transaksi ID
+ {transaksi.transaction_id}
+
+
+ Lembar Terbeli
+ {new Intl.NumberFormat("id-ID").format(+transaksi.quantity)} lembar
+
+
+ Total Transfer
+ Rp. {new Intl.NumberFormat("id-ID", {maximumFractionDigits: 10}).format(+transaksi.gross_amount)}
+
+
+ Tipe Pembayaran
+ {transaksi.payment_type.replace('_', " ")}
+
+
+ Nama Bank
+ {transaksi.namaBank}
+
+
+ Status Pembayaran
+ {transaksi.status_message}
+
+
+
+ router.push(RouterInvestasi.main_transaksi)}>
+ Kembali ke List Transaksi
+
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/status_transaksi/gagal/layout.tsx b/src/app_modules/investasi/status_transaksi/gagal/layout.tsx
new file mode 100644
index 00000000..b93873df
--- /dev/null
+++ b/src/app_modules/investasi/status_transaksi/gagal/layout.tsx
@@ -0,0 +1,67 @@
+"use client";
+
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import { Warna } from "@/app/lib/warna";
+import {
+ AppShell,
+ Header,
+ Group,
+ CloseButton,
+ ActionIcon,
+ Footer,
+ Center,
+ Button,
+ Text,
+} from "@mantine/core";
+import { useAtom } from "jotai";
+import { useRouter } from "next/navigation";
+import { gs_investasiFooter } from "../../g_state";
+
+export default function LayoutStatusTransaksiInvestasi_Gagal({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ const router = useRouter();
+ const [hotMenu, setHotMenu] = useAtom(gs_investasiFooter);
+
+ return (
+ <>
+
+
+ {
+ router.push(RouterInvestasi.main_transaksi);
+ setHotMenu(3);
+ }}
+ />
+ Status Transaksi
+
+
+
+ }
+ footer={
+
+
+ {
+ router.push(RouterInvestasi.main_transaksi), setHotMenu(3);
+ }}
+ >
+ Kembali Ke Transaksi
+
+
+
+ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/status_transaksi/gagal/view.tsx b/src/app_modules/investasi/status_transaksi/gagal/view.tsx
new file mode 100644
index 00000000..f9cff712
--- /dev/null
+++ b/src/app_modules/investasi/status_transaksi/gagal/view.tsx
@@ -0,0 +1,69 @@
+"use client";
+
+import {
+ Paper,
+ Stack,
+ Center,
+ Flex,
+ Title,
+ Divider,
+ Group,
+ Text,
+} from "@mantine/core";
+import { useShallowEffect } from "@mantine/hooks";
+import { IconAlertHexagon } from "@tabler/icons-react";
+import moment from "moment";
+import { useState } from "react";
+import { MODEL_Transaksi_Investasi } from "../../model/model_investasi";
+
+export default function StatusTransaksiInvestasi_Gagal({
+ dataTransaksi,
+}: {
+ dataTransaksi: MODEL_Transaksi_Investasi;
+}) {
+ const [transaksi, setTransaksi] = useState(dataTransaksi)
+
+ return (
+ <>
+
+
+
+
+
+ Transaksi Gagal
+ {moment(transaksi.createdAt).format('lll')}
+
+
+
+
+
+
+ {/* Rp. {transaksi.totalTransfer} */}
+
+
+
+
+
+
+
+ Nama Investasi
+ {transaksi.Investasi.title}
+
+
+ Bank Tujuan
+ {transaksi.namaBank}
+
+
+ Jumlah Transfer
+ {/* Rp. {transaksi.totalTransfer} */}
+
+
+ Jumlah Lembar
+ {/* {transaksi.lembarTerbeli} */}
+
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/status_transaksi/layout.tsx b/src/app_modules/investasi/status_transaksi/layout.tsx
new file mode 100644
index 00000000..6fbccb59
--- /dev/null
+++ b/src/app_modules/investasi/status_transaksi/layout.tsx
@@ -0,0 +1,69 @@
+"use client";
+
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import {
+ ActionIcon,
+ AppShell,
+ Button,
+ Center,
+ CloseButton,
+ Footer,
+ Group,
+ Header,
+ Text,
+} from "@mantine/core";
+import { useAtom } from "jotai";
+import { useRouter } from "next/navigation";
+import React from "react";
+import { gs_investasiFooter } from "../g_state";
+import { Warna } from "@/app/lib/warna";
+
+export default function LayoutStatusTransaksiInvestasi(
+ {
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ const router = useRouter();
+ const [hotMenu, setHotMenu] = useAtom(gs_investasiFooter);
+
+ return (
+ <>
+
+
+ {
+ router.push(RouterInvestasi.main_transaksi);
+ setHotMenu(3);
+ }}
+ />
+ Status Transaksi
+
+
+
+ }
+ footer={
+
+
+ {
+ router.push(RouterInvestasi.main_investasi), setHotMenu(2);
+ }}
+ >
+ Kembali Ke Investasi
+
+
+
+ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/status_transaksi/view.tsx b/src/app_modules/investasi/status_transaksi/view.tsx
new file mode 100644
index 00000000..3c0f5919
--- /dev/null
+++ b/src/app_modules/investasi/status_transaksi/view.tsx
@@ -0,0 +1,68 @@
+"use client";
+
+import {
+ Box,
+ Center,
+ Divider,
+ Flex,
+ Grid,
+ Group,
+ Loader,
+ Paper,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import { useShallowEffect } from "@mantine/hooks";
+import moment from "moment";
+import { useState } from "react";
+
+export default function StatusTransaksiInvestasi() {
+ const [tgl, setTgl] = useState(null);
+
+ useShallowEffect(() => {
+ onDate();
+ }, []);
+
+ async function onDate() {
+ const d = Date.now();
+ setTgl(moment(d).format("LLL"));
+ }
+
+ return (
+ <>
+
+
+
+
+
+ Transaksi berhasil diproses
+ {tgl}
+
+
+
+ Rp. 300.000
+
+
+
+
+
+
+
+ Penerima
+ Nama Penerima
+
+
+ Bank Penerima
+ Nama Bank(BNI, BSI, dll)
+
+
+ Nomor Rekening
+ 0000000000000
+
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/transaksi/layout.tsx b/src/app_modules/investasi/transaksi/layout.tsx
new file mode 100644
index 00000000..3d85ddb6
--- /dev/null
+++ b/src/app_modules/investasi/transaksi/layout.tsx
@@ -0,0 +1,19 @@
+"use client";
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { AppShell, Title } from "@mantine/core";
+import React from "react";
+
+export default function LayoutTransaksiInvestasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ History transaksi}>
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/transaksi/view.tsx b/src/app_modules/investasi/transaksi/view.tsx
new file mode 100644
index 00000000..2fc02d23
--- /dev/null
+++ b/src/app_modules/investasi/transaksi/view.tsx
@@ -0,0 +1,97 @@
+"use client";
+
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import {
+ Badge,
+ Box,
+ Center,
+ Group,
+ Paper,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import { useRouter } from "next/navigation";
+import toast from "react-simple-toasts";
+import {
+ MODEL_Transaksi_Investasi,
+ Model_Status_Transaksi_Investasi,
+} from "../model/model_investasi";
+import { useState } from "react";
+import moment from "moment";
+import funCountDown from "../fun/fun_countdown_investasi";
+import funGantiStatusTransaksi_Investasi from "../fun/fun_ganti_status_transaksi";
+import { useInterval, useShallowEffect } from "@mantine/hooks";
+import _ from "lodash";
+import Link from "next/link";
+
+export default function TransaksiInvestasi({
+ statusTransaksi,
+ listTransaksi,
+}: {
+ statusTransaksi: Model_Status_Transaksi_Investasi[];
+ listTransaksi: MODEL_Transaksi_Investasi[];
+}) {
+ const router = useRouter();
+ const [status, setStatus] = useState(statusTransaksi);
+ const [transaksi, setTransaksi] = useState(listTransaksi);
+
+ async function onKlik(statusId: string, transaksiId: string) {
+ // console.log(id)
+ if (statusId === "1") {
+ return router.push(RouterInvestasi.transfer + transaksiId);
+ } else {
+ if (statusId === "2") {
+ return router.push(RouterInvestasi.transfer);
+ } else {
+ if (statusId === "3") {
+ return router.push(RouterInvestasi.dialog_transaksi);
+ } else {
+ return router.push(
+ RouterInvestasi.status_transaksi_gagal + transaksiId
+ );
+ }
+ }
+ }
+ }
+
+ if (_.isEmpty(transaksi))
+ return (
+ <>
+
+ Tidak Ada Transaksi
+
+ >
+ );
+
+ return (
+ <>
+
+ {transaksi.map((e) => (
+ router.push(RouterInvestasi.status_pesanan + `${e.id}`)}>
+
+
+
+ {e.Investasi.title}
+
+ Rp.
+ {new Intl.NumberFormat("id-ID", {
+ maximumFractionDigits: 10,
+ }).format(+e.gross_amount)}
+
+
+
+
+ {/* Bank {e.namaBank} */}
+ {moment(e.createdAt).format("ll")}
+
+ {e.quantity} Lembar
+
+
+
+ ))}
+
+ {/* {JSON.stringify(transaksi, null, 2)} */}
+ >
+ );
+}
diff --git a/src/app_modules/investasi/transfer/layout.tsx b/src/app_modules/investasi/transfer/layout.tsx
new file mode 100644
index 00000000..a0e0145e
--- /dev/null
+++ b/src/app_modules/investasi/transfer/layout.tsx
@@ -0,0 +1,57 @@
+"use client";
+
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import { Warna } from "@/app/lib/warna";
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import {
+ ActionIcon,
+ AppShell,
+ Button,
+ Center,
+ CloseButton,
+ Footer,
+ Group,
+ Header,
+ Text,
+} from "@mantine/core";
+import { useAtom } from "jotai";
+import { useRouter } from "next/navigation";
+import React from "react";
+import { gs_investasiFooter } from "../g_state";
+
+export default function LayoutTransferInvestasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ const router = useRouter();
+ const [hotMenu, setHotMenu] = useAtom(gs_investasiFooter);
+
+ return (
+ <>
+
+
+ {
+ router.push(RouterInvestasi.main_transaksi), setHotMenu(3);
+ }}
+ />
+ Transfer
+
+
+
+ }
+ // footer={
+ //
+ // }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/transfer/view.tsx b/src/app_modules/investasi/transfer/view.tsx
new file mode 100644
index 00000000..3e95d5c9
--- /dev/null
+++ b/src/app_modules/investasi/transfer/view.tsx
@@ -0,0 +1,240 @@
+"use client";
+
+import { Warna } from "@/app/lib/warna";
+import {
+ AspectRatio,
+ Avatar,
+ Box,
+ Button,
+ Center,
+ CopyButton,
+ Divider,
+ FileButton,
+ Flex,
+ Grid,
+ Group,
+ Image,
+ Paper,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import { useInterval, useShallowEffect } from "@mantine/hooks";
+import { IconAlertTriangle } from "@tabler/icons-react";
+import moment from "moment";
+import { redirect, useRouter } from "next/navigation";
+
+import { useState } from "react";
+import Countdown from "react-countdown";
+import {
+ MODEL_Investasi,
+ MODEL_Transaksi_Investasi,
+} from "../model/model_investasi";
+import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
+import { useAtom } from "jotai";
+import { gs_TransferValue, gs_investasiFooter } from "../g_state";
+import funGantiStatusTransaksi_Investasi from "../fun/fun_ganti_status_transaksi";
+
+export default function TransferInvestasi({
+ dataTransaksi,
+}: {
+ dataTransaksi: MODEL_Transaksi_Investasi;
+}) {
+ const router = useRouter();
+ const [transaksi, setTransaksi] = useState(dataTransaksi);
+ const [countDown, setCountDown] = useState({
+ jam: null,
+ menit: null,
+ detik: null,
+ });
+
+ // useShallowEffect(() => {
+ // const inter = apa_kabar("2023-11-18");
+ // return () => clearInterval(inter);
+ // }, []);
+ // function apa_kabar(date: string) {
+ // let d = moment.duration(moment(date).diff(new Date()));
+ // const inter = setInterval(() => {
+ // d = moment.duration(+d - 1000, "milliseconds");
+
+ // console.log(d.days(), "=", d.hours(), ":", d.minutes(), ":", d.seconds());
+ // }, 1000);
+ // return inter;
+ // }
+
+ // useShallowEffect(() => {
+ // const mulai = moment(transaksi.createdAt).format();
+ // const selesai = moment(transaksi.createdAt).add(1, "days").format();
+ // const timer = funCountDown(mulai as any, selesai as any);
+
+ // return () => clearInterval(timer);
+ // }, []);
+
+ // functionbaru ==========================//
+ const selesai = moment(transaksi.createdAt).add(1, "days").format();
+ let durasi = moment.duration(moment(selesai).diff(new Date()));
+ const interval = useInterval(() => {
+ durasi = moment.duration(+durasi - 1000, "milliseconds");
+ if (durasi.hours() <= 0 && durasi.minutes() <= 0 && durasi.seconds() <= 0) {
+ funGantiStatusTransaksi_Investasi(transaksi.id, "4").then((res) => {
+ if (res.status === 200) {
+ router.push(
+ RouterInvestasi.status_transaksi_gagal + `${transaksi.id}`
+ );
+ interval.stop();
+ }
+ });
+ }
+ setCountDown({
+ ...countDown,
+ jam: durasi.hours(),
+ menit: durasi.minutes(),
+ detik: durasi.seconds(),
+ });
+ }, 1000);
+
+ useShallowEffect(() => {
+ interval.start();
+ }, []);
+
+ return (
+ <>
+ {/* {JSON.stringify(transaksi, null,2)} */}
+ {/* {countDown.jam} */}
+
+
+ Mohon transfer untuk diteruskan ke :
+
+ {transaksi.Investasi.title}
+
+
+
+
+ Transfer sebelum
+
+
+
+ {moment(transaksi.createdAt).format("lll")}
+
+
+
+
+
+ {countDown.jam <= 0 &&
+ countDown.menit <= 0 &&
+ countDown.detik <= 0 ? (
+
+ Waktu Habis
+
+ ) : (
+
+ {countDown.jam}:{countDown.menit}:{countDown.detik}
+
+ )}
+
+
+
+
+
+
+
+ {/* Nama Rekening */}
+
+
+
+
+ Bank {transaksi.namaBank}
+ PT. Xendit Jakarta
+
+
+
+
+
+ {transaksi.nomorRekening}
+
+
+
+
+ {({ copied, copy }) => (
+
+ {copied ? "Tersalin" : "Salin"}
+
+ )}
+
+
+
+
+
+
+
+ {/* Nomor rekening */}
+
+ Total Transfer
+
+
+
+ {/* Rp. {transaksi.totalTransfer} */}
+
+
+
+ {/*
+ {({ copied, copy }) => (
+
+ {copied ? "Tersalin" : "Salin"}
+
+ )}
+ */}
+
+
+
+
+
+
+ Pastikan jumlahnya benar
+
+
+
+
+
+ {/* Tombol Sudah Transfer */}
+
+ {
+ router.push(RouterInvestasi.dialog_transaksi);
+ // setHotMenu(1);
+ // router.push(RouterInvestasi.status_transaksi);
+ }}
+ >
+ Sudah Transfer
+
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/upload/layout.tsx b/src/app_modules/investasi/upload/layout.tsx
new file mode 100644
index 00000000..6df08981
--- /dev/null
+++ b/src/app_modules/investasi/upload/layout.tsx
@@ -0,0 +1,19 @@
+"use client";
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { AppShell } from "@mantine/core";
+import React from "react";
+
+export default function LayoutUploadGambarInvestasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ }>
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/upload/view.tsx b/src/app_modules/investasi/upload/view.tsx
new file mode 100644
index 00000000..21c50c4b
--- /dev/null
+++ b/src/app_modules/investasi/upload/view.tsx
@@ -0,0 +1,39 @@
+"use client";
+
+import { Warna } from "@/app/lib/warna";
+import {
+ AspectRatio,
+ Button,
+ Center,
+ Divider,
+ FileButton,
+ Group,
+ Image,
+ Paper,
+ Text,
+ Title,
+} from "@mantine/core";
+import { useState } from "react";
+
+export default function UploadGambarInvestasi() {
+ const [img, setImg] = useState();
+ return (
+ <>
+
+ {
+ const buffer = URL.createObjectURL(
+ new Blob([new Uint8Array( await files.arrayBuffer())])
+ );
+ setImg(buffer);
+ }}
+ accept="image/png,image/jpeg"
+ >
+ {(props) => Upload image }
+
+
+
+ {img && }
+ >
+ );
+}
diff --git a/src/app_modules/investasi/upload_bukti/layout.tsx b/src/app_modules/investasi/upload_bukti/layout.tsx
new file mode 100644
index 00000000..4c2caab7
--- /dev/null
+++ b/src/app_modules/investasi/upload_bukti/layout.tsx
@@ -0,0 +1,19 @@
+"use client";
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { AppShell } from "@mantine/core";
+import React from "react";
+
+export default function LayoutBuktiTransferInvestasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ }>
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/upload_bukti/view.tsx b/src/app_modules/investasi/upload_bukti/view.tsx
new file mode 100644
index 00000000..e742fc96
--- /dev/null
+++ b/src/app_modules/investasi/upload_bukti/view.tsx
@@ -0,0 +1,144 @@
+"use client";
+
+import { Warna } from "@/app/lib/warna";
+import {
+ AspectRatio,
+ Button,
+ Center,
+ CopyButton,
+ FileButton,
+ Grid,
+ Group,
+ Image,
+ Text,
+} from "@mantine/core";
+import { useShallowEffect } from "@mantine/hooks";
+import { IconCamera } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import toast from "react-simple-toasts";
+
+export default function UploadBuktiTransferInvestasi() {
+ const router = useRouter();
+ const [fl, setFl] = useState(null);
+ const [img, setImg] = useState(null);
+ const [total, setTotal] = useState(null);
+ const [bank, setBank] = useState(null);
+
+
+ useShallowEffect(() => {
+ if (typeof window !== undefined) {
+ const totalHarga = localStorage.getItem("total_harga");
+ const pilihBank = localStorage.getItem("bank")
+ setTotal(totalHarga);
+ setBank(pilihBank)
+ }
+ }, []);
+
+ return (
+ <>
+ {/* Nama Rekening */}
+
+
+ Nama Rekening
+
+
+ Xendit
+
+
+
+
+ {/* Nomor rekening */}
+
+
+ Nomor Rekening
+
+
+ {bank}
+
+ {/*
+
+ {({ copied, copy }) => (
+
+ {copied ? "Copied url" : "Copy url"}
+
+ )}
+
+ */}
+
+
+ {/* Total Bayar */}
+
+
+ Total Bayar
+
+
+ Rp. {total}
+
+
+
+
+ {/* Upload */}
+
+ {
+ const buffer = URL.createObjectURL(
+ new Blob([new Uint8Array(await files.arrayBuffer())])
+ );
+ setImg(buffer);
+ setFl(files);
+ }}
+ accept="image/png,image/jpeg"
+ >
+ {(props) => (
+ router.push("/dev/investasi/upload")}
+ >
+ Upload
+
+ )}
+
+
+
+ {img ? (
+
+ ) : (
+
+ )}
+
+
+ {/*
+ {img === null ? (
+ toast("Masukan Bukti Transfer")}
+ >
+ Selesai
+
+ ) : (
+ router.push("/dev/investasi/konfirmasi")}
+ >
+ Selesai
+
+ )}
+ */}
+ >
+ );
+}
diff --git a/src/app_modules/investasi/upload_dokumen/layout.tsx b/src/app_modules/investasi/upload_dokumen/layout.tsx
new file mode 100644
index 00000000..686ec34f
--- /dev/null
+++ b/src/app_modules/investasi/upload_dokumen/layout.tsx
@@ -0,0 +1,19 @@
+"use client";
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { AppShell } from "@mantine/core";
+import React from "react";
+
+export default function LayoutUploadDokumenInvestasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ }>
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/upload_dokumen/view.tsx b/src/app_modules/investasi/upload_dokumen/view.tsx
new file mode 100644
index 00000000..3e350232
--- /dev/null
+++ b/src/app_modules/investasi/upload_dokumen/view.tsx
@@ -0,0 +1,118 @@
+"use client";
+
+import { Warna } from "@/app/lib/warna";
+import {
+ Group,
+ FileButton,
+ Button,
+ Box,
+ Paper,
+ AspectRatio,
+ Image,
+ Stack,
+ Center,
+ TextInput,
+} from "@mantine/core";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import toast from "react-simple-toasts";
+import funUploadProspektusInvestasi from "../fun/fun_upload_prospek";
+import funLoadDataInvestasi from "../fun/fun_load_data";
+import _ from "lodash";
+import funUploadDokumenInvestasi from "../fun/fun_upload_dokumen";
+
+export default function UploadDokumenInvestasi({
+ idInves,
+}: {
+ idInves: string;
+}) {
+ const router = useRouter();
+ const [file, setFile] = useState(null);
+ const [pdf, setPdf] = useState(null);
+ const [title, setTitle] = useState("");
+
+ async function onUpload() {
+ const body = {
+ idInves: idInves,
+ title: title,
+ };
+ if (_.values(body).includes("")) return toast("Lengkapi nama dokumen");
+ if (!pdf) return toast("File Kosong");
+
+ const fd = new FormData();
+ fd.append("file", pdf as any);
+
+ await funUploadDokumenInvestasi(fd, body).then((res) => {
+ // console.log(res);
+ if (res.status === 201) {
+ toast("Berhasil upload");
+ router.back();
+ } else {
+ toast(res.message);
+ }
+ });
+ }
+
+ return (
+ <>
+
+
+ {
+ const buffer = URL.createObjectURL(
+ new Blob([new Uint8Array(await file.arrayBuffer())])
+ );
+ setFile(buffer);
+ setPdf(file);
+ }}
+ accept={"application/pdf"}
+ >
+ {(props) => (
+
+ Upload File
+
+ )}
+
+
+
+
+ {!file ? (
+
+
+
+
+
+ ) : (
+
+
+
+
+
+ )}
+
+ {
+ setTitle(val.target.value);
+ }}
+ />
+
+ onUpload()}
+ >
+ Simpan
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/upload_prospektus/layout.tsx b/src/app_modules/investasi/upload_prospektus/layout.tsx
new file mode 100644
index 00000000..8ce9c057
--- /dev/null
+++ b/src/app_modules/investasi/upload_prospektus/layout.tsx
@@ -0,0 +1,19 @@
+"use client";
+
+import HeaderTamplate from "@/app_modules/component/header_tamplate";
+import { AppShell } from "@mantine/core";
+import React from "react";
+
+export default function LayoutUploadProspektusInvestasi({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <>
+ }>
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/investasi/upload_prospektus/view.tsx b/src/app_modules/investasi/upload_prospektus/view.tsx
new file mode 100644
index 00000000..b2b89eca
--- /dev/null
+++ b/src/app_modules/investasi/upload_prospektus/view.tsx
@@ -0,0 +1,103 @@
+"use client";
+
+import { Warna } from "@/app/lib/warna";
+import {
+ Group,
+ FileButton,
+ Button,
+ Box,
+ Paper,
+ AspectRatio,
+ Image,
+ Stack,
+ Center,
+} from "@mantine/core";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import toast from "react-simple-toasts";
+import funUploadProspektusInvestasi from "../fun/fun_upload_prospek";
+import funLoadDataInvestasi from "../fun/fun_load_data";
+
+export default function UploadProspektusInvestasi({
+ idInves,
+}: {
+ idInves: string;
+}) {
+ const router = useRouter();
+ const [file, setFile] = useState(null);
+ const [pdf, setPdf] = useState(null);
+
+ async function onUpload() {
+ if (!pdf) return toast("File Kosong");
+
+ const fd = new FormData();
+ fd.append("file", pdf as any);
+
+ await funUploadProspektusInvestasi(fd, idInves).then((res) => {
+ if (res.status === 201) {
+ toast("Berhasil upload");
+ router.back();
+
+ } else {
+ toast(res.message);
+ }
+ });
+ }
+
+ return (
+ <>
+
+
+ {
+ const buffer = URL.createObjectURL(
+ new Blob([new Uint8Array(await file.arrayBuffer())])
+ );
+ // console.log(buffer);
+ setFile(buffer);
+ setPdf(file);
+ }}
+ accept="application/pdf"
+ >
+ {(props) => (
+
+ Upload File
+
+ )}
+
+
+
+
+ {!file ? (
+
+
+
+
+
+ ) : (
+
+
+
+
+
+ )}
+
+
+ onUpload()}
+ >
+ Simpan
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/katalog/component/header_transparent.tsx b/src/app_modules/katalog/component/header_transparent.tsx
new file mode 100644
index 00000000..27c3c7e4
--- /dev/null
+++ b/src/app_modules/katalog/component/header_transparent.tsx
@@ -0,0 +1,33 @@
+"use client";
+
+import { Header, Group, ActionIcon, Text } from "@mantine/core";
+import { IconArrowLeft } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import React from "react";
+
+export default function HeaderTransparent({
+ route,
+ icon2,
+ title,
+}: {
+ route: any;
+ icon2: any;
+ title: string;
+}) {
+ const router = useRouter();
+ return (
+ <>
+
+
+
+ router.push(route)}>
+
+
+
+ {title}
+ {icon2}
+
+
+ >
+ );
+}
diff --git a/src/app_modules/katalog/index.ts b/src/app_modules/katalog/index.ts
new file mode 100644
index 00000000..215b6612
--- /dev/null
+++ b/src/app_modules/katalog/index.ts
@@ -0,0 +1,3 @@
+import HeaderTransparent from "./component/header_transparent";
+
+export {HeaderTransparent as headerTransparent}
\ No newline at end of file
diff --git a/src/app_modules/katalog/main/index.ts b/src/app_modules/katalog/main/index.ts
new file mode 100644
index 00000000..e1ebf6e6
--- /dev/null
+++ b/src/app_modules/katalog/main/index.ts
@@ -0,0 +1,4 @@
+import KatalogView from "./view";
+import KatalogLayout from "./layout";
+
+export {KatalogView, KatalogLayout}
\ No newline at end of file
diff --git a/src/app_modules/katalog/main/layout.tsx b/src/app_modules/katalog/main/layout.tsx
new file mode 100644
index 00000000..6af092e6
--- /dev/null
+++ b/src/app_modules/katalog/main/layout.tsx
@@ -0,0 +1,41 @@
+"use client";
+
+import { Logout } from "@/app_modules/auth";
+import { ActionIcon, AppShell, Group, Header, Text } from "@mantine/core";
+import { IconUserSearch, IconAward, IconQrcode, IconArrowLeft, IconPencilPlus } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+
+export default function KatalogLayout({ children, profileId }: { children: any, profileId: any }) {
+ const router = useRouter()
+ return (
+ <>
+
+
+
+ router.push("/dev/home")}>
+
+
+ {/*
+
+ */}
+
+
+ Katalog
+
+
+ router.push(`/dev/portofolio/create/${profileId}`)}>
+
+
+ {/* */}
+
+
+
+ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/katalog/main/view.tsx b/src/app_modules/katalog/main/view.tsx
new file mode 100644
index 00000000..91909fa5
--- /dev/null
+++ b/src/app_modules/katalog/main/view.tsx
@@ -0,0 +1,47 @@
+"use client";
+
+import { Warna } from "@/app/lib/warna";
+import {
+ ActionIcon,
+ BackgroundImage,
+ Box,
+ Center,
+ Flex,
+ Grid,
+ Group,
+ Image,
+ Paper,
+ Text,
+} from "@mantine/core";
+import { useShallowEffect } from "@mantine/hooks";
+import {
+ IconAddressBook,
+ IconCamera,
+ IconEditCircle,
+ IconGenderFemale,
+ IconGenderMale,
+ IconHome,
+ IconMail,
+} from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import { ProfileView, getProfile } from "../profile";
+import { gs_profile } from "../profile/state/global_state";
+import { myConsole } from "@/app/fun/my_console";
+import { useAtom } from "jotai";
+import { loadDataProfile } from "../profile/fun/fun_get_profile";
+import { getFotoProfile } from "../profile/api/get-foto-profile";
+import { ApiHipmi } from "@/app/lib/api";
+import { ListPortofolioView } from "../portofolio";
+import { User } from "@prisma/client";
+import { MODEL_User_profile } from "@/app_modules/home/models/user_profile";
+import { LIST_PORTOFOLIO } from "@/app_modules/models/portofolio";
+
+export default function KatalogView({ user, listPorto }: { user: MODEL_User_profile, listPorto: LIST_PORTOFOLIO }) {
+ return (
+ <>
+
+
+ >
+ );
+}
diff --git a/src/app_modules/katalog/portofolio/create/layout.tsx b/src/app_modules/katalog/portofolio/create/layout.tsx
new file mode 100644
index 00000000..f8904e51
--- /dev/null
+++ b/src/app_modules/katalog/portofolio/create/layout.tsx
@@ -0,0 +1,31 @@
+"use client";
+
+import { ActionIcon, AppShell, Group, Header, Text } from "@mantine/core";
+import { IconArrowLeft } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+
+export default function CreatePortofolioLayout({ children, profileId }: { children: any, profileId: any }) {
+ const router = useRouter();
+ return (
+ <>
+
+
+ router.push(`/dev/katalog/${profileId}`)}
+ >
+
+
+ Buat Portofolio
+
+
+
+ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/katalog/portofolio/create/view.tsx b/src/app_modules/katalog/portofolio/create/view.tsx
new file mode 100644
index 00000000..b28e96bd
--- /dev/null
+++ b/src/app_modules/katalog/portofolio/create/view.tsx
@@ -0,0 +1,124 @@
+"use client";
+
+import { myConsole } from "@/app/fun/my_console";
+import { ApiHipmi } from "@/app/lib/api";
+import { Warna } from "@/app/lib/warna";
+import { BIDANG_BISNIS } from "@/app_modules/models/portofolio";
+import { Button, Select, Stack, TextInput, Title } from "@mantine/core";
+import _ from "lodash";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import toast from "react-simple-toasts";
+import funCreatePortofolio from "../fun/fun_create_portofolio";
+
+export default function CreatePortofolio({
+ bidangBisnis,
+ profileId,
+}: {
+ bidangBisnis: BIDANG_BISNIS;
+ profileId: any;
+}) {
+ const router = useRouter();
+ const [value, setValue] = useState({
+ namaBisnis: "",
+ bidangBisnisId: "",
+ alamatKantor: "",
+ tlpn: "",
+ deskripsi: "",
+ });
+
+ async function onSubmit() {
+ const body = {
+ profileId: profileId,
+ namaBisnis: value.namaBisnis,
+ masterBidangBisnisId: value.bidangBisnisId,
+ alamatKantor: value.alamatKantor,
+ tlpn: value.tlpn,
+ deskripsi: value.deskripsi,
+ };
+
+ if (_.values(body).includes("")) return toast("Lengkapi Data");
+
+ await funCreatePortofolio(body as any).then((res) => {
+ if (res.status === 201) {
+ toast("Berhasil disimpan");
+ return setTimeout(() => router.push(`/dev/katalog/${profileId}`), 1000)
+ } else {
+ return toast("Gagal disimpan");
+ }
+ });
+ }
+
+ return (
+ <>
+ {/* {JSON.stringify(profileId)} */}
+
+
+ {
+ setValue({
+ ...value,
+ namaBisnis: val.target.value,
+ });
+ }}
+ />
+ ({
+ value: e.id,
+ label: e.name,
+ }))}
+ onChange={(val) => {
+ setValue({
+ ...value,
+ bidangBisnisId: val as any,
+ });
+ }}
+ />
+ {
+ setValue({
+ ...value,
+ alamatKantor: val.target.value,
+ });
+ }}
+ />
+ {
+ setValue({
+ ...value,
+ tlpn: val.target.value,
+ });
+ }}
+ />
+ {
+ setValue({
+ ...value,
+ deskripsi: val.target.value,
+ });
+ }}
+ />
+
+ {
+ onSubmit();
+ }}
+ >
+ Simpan
+
+
+
+ {/* {JSON.stringify(data, null, 2)} */}
+ >
+ );
+}
diff --git a/src/app_modules/katalog/portofolio/fun/fun_create_portofolio.ts b/src/app_modules/katalog/portofolio/fun/fun_create_portofolio.ts
new file mode 100644
index 00000000..1cc3caf5
--- /dev/null
+++ b/src/app_modules/katalog/portofolio/fun/fun_create_portofolio.ts
@@ -0,0 +1,32 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import { MODEL_PORTOFOLIO } from "@/app_modules/models/portofolio";
+import { revalidatePath } from "next/cache";
+
+export default async function funCreatePortofolio(data: MODEL_PORTOFOLIO) {
+ console.log(data);
+
+ const res = await prisma.katalog.create({
+ data: {
+ profileId: data.profileId,
+ namaBisnis: data.namaBisnis,
+ deskripsi: data.deskripsi,
+ tlpn: data.tlpn,
+ alamatKantor: data.alamatKantor,
+ masterBidangBisnisId: data.masterBidangBisnisId,
+ },
+ });
+
+ if (!res)
+ return {
+ status: 401,
+ success: false,
+ };
+
+ revalidatePath(`/dev/katalog/${data.profileId}`);
+ return {
+ status: 201,
+ success: true,
+ };
+}
diff --git a/src/app_modules/katalog/portofolio/fun/fun_get_all_portofolio.ts b/src/app_modules/katalog/portofolio/fun/fun_get_all_portofolio.ts
new file mode 100644
index 00000000..2a7f7de9
--- /dev/null
+++ b/src/app_modules/katalog/portofolio/fun/fun_get_all_portofolio.ts
@@ -0,0 +1,16 @@
+import toast from "react-simple-toasts";
+import { funGetListPortofolio } from "./get_list_portofolio";
+
+/**
+ *
+ * @param id - profileId
+ * @returns load list portofolio by Id
+ */
+export async function loadListPortofolio(id: string) {
+ if (id === null) {
+ return toast("Id null");
+ } else {
+ const data = await funGetListPortofolio(id).then((res) => res);
+ return data
+ }
+}
diff --git a/src/app_modules/katalog/portofolio/fun/get_bidang_bisnis.ts b/src/app_modules/katalog/portofolio/fun/get_bidang_bisnis.ts
new file mode 100644
index 00000000..4130f24d
--- /dev/null
+++ b/src/app_modules/katalog/portofolio/fun/get_bidang_bisnis.ts
@@ -0,0 +1,9 @@
+"use server"
+
+import { myConsole } from "@/app/fun/my_console"
+import prisma from "@/app/lib/prisma"
+
+export async function getBidangBisnis() {
+ const data = await prisma.masterBidangBisnis.findMany()
+ return data
+}
\ No newline at end of file
diff --git a/src/app_modules/katalog/portofolio/fun/get_list_portofolio.ts b/src/app_modules/katalog/portofolio/fun/get_list_portofolio.ts
new file mode 100644
index 00000000..7a4d6e38
--- /dev/null
+++ b/src/app_modules/katalog/portofolio/fun/get_list_portofolio.ts
@@ -0,0 +1,23 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+export async function funGetListPortofolio(profileId: any) {
+ const data = await prisma.katalog.findMany({
+ where: {
+ profileId: profileId,
+ },
+ select: {
+ id: true,
+ namaBisnis: true,
+ alamatKantor: true,
+ tlpn: true,
+ deskripsi: true,
+ masterBidangBisnisId: true,
+ active: true,
+ profileId: true
+ },
+ });
+
+ return data
+}
diff --git a/src/app_modules/katalog/portofolio/fun/get_one_portofolio.ts b/src/app_modules/katalog/portofolio/fun/get_one_portofolio.ts
new file mode 100644
index 00000000..91572a8c
--- /dev/null
+++ b/src/app_modules/katalog/portofolio/fun/get_one_portofolio.ts
@@ -0,0 +1,30 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+export async function getOnePortofolio(id: string) {
+ // console.log(id)
+ const data = await prisma.katalog.findUnique({
+ where: {
+ id: id,
+ },
+ select: {
+ id: true,
+ namaBisnis: true,
+ alamatKantor: true,
+ deskripsi: true,
+ tlpn: true,
+ active: true,
+ MasterBidangBisnis: {
+ select: {
+ id: true,
+ name: true,
+ active: true,
+ },
+ },
+ profileId: true,
+ },
+ });
+
+ return data
+}
diff --git a/src/app_modules/katalog/portofolio/index.ts b/src/app_modules/katalog/portofolio/index.ts
new file mode 100644
index 00000000..3f6834e9
--- /dev/null
+++ b/src/app_modules/katalog/portofolio/index.ts
@@ -0,0 +1,7 @@
+import CreatePortofolio from "./create/view";
+import CreatePortofolioLayout from "./create/layout";
+import ListPortofolioView from "./list_view/view";
+import PortofolioLayout from "./main/layout";
+import ViewPortofolio from "./main/view";
+
+export {CreatePortofolio, CreatePortofolioLayout, ListPortofolioView, PortofolioLayout, ViewPortofolio}
\ No newline at end of file
diff --git a/src/app_modules/katalog/portofolio/list_view/view.tsx b/src/app_modules/katalog/portofolio/list_view/view.tsx
new file mode 100644
index 00000000..08d2003e
--- /dev/null
+++ b/src/app_modules/katalog/portofolio/list_view/view.tsx
@@ -0,0 +1,63 @@
+"use client";
+import { Box, Center, Grid, Paper, Text, Title } from "@mantine/core";
+import { useShallowEffect } from "@mantine/hooks";
+import { useState } from "react";
+import _ from "lodash";
+import { IconCaretRightFilled } from "@tabler/icons-react";
+import { loadDataProfile } from "../../profile/fun/fun_get_profile";
+import { useAtom } from "jotai";
+import { gs_profile } from "../../profile/state/global_state";
+import { gs_ListPortofolio } from "../state/global_state";
+import { myConsole } from "@/app/fun/my_console";
+import { getProfile } from "../../profile";
+import { LIST_PORTOFOLIO } from "@/app_modules/models/portofolio";
+import { useRouter } from "next/navigation";
+
+export default function ListPortofolioView({
+ listPorto,
+}: {
+ listPorto: LIST_PORTOFOLIO;
+}) {
+ const router = useRouter();
+ const [porto, setPorto] = useState(listPorto);
+ return (
+ <>
+ {/* {JSON.stringify(porto, null, 2)} */}
+
+ Portofolio
+
+
+ {(() => {
+ if (porto) {
+ return (
+ <>
+ {" "}
+ {_.map(porto as any).map((e: any) => (
+ router.push(`/dev/portofolio/main/${e.id}/`)}
+ >
+
+
+ {e.namaBisnis}
+
+
+
+
+
+
+ ))}
+ >
+ );
+ } else {
+ return <>>;
+ }
+ })()}
+
+ >
+ );
+}
diff --git a/src/app_modules/katalog/portofolio/main/layout.tsx b/src/app_modules/katalog/portofolio/main/layout.tsx
new file mode 100644
index 00000000..e19363c9
--- /dev/null
+++ b/src/app_modules/katalog/portofolio/main/layout.tsx
@@ -0,0 +1,33 @@
+"use client";
+
+import { ActionIcon, AppShell } from "@mantine/core";
+import HeaderTransparent from "../../component/header_transparent";
+
+import { useRouter } from "next/navigation";
+import { IconArrowLeft, IconEdit } from "@tabler/icons-react";
+
+export default function PortofolioLayout({ children, profileId }: { children: any, profileId: any }) {
+ const router = useRouter();
+ return (
+ <>
+ router.push("/dev/portofolio/edit")}
+ >
+
+
+ }
+ />
+ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/katalog/portofolio/main/view.tsx b/src/app_modules/katalog/portofolio/main/view.tsx
new file mode 100644
index 00000000..b667e1dd
--- /dev/null
+++ b/src/app_modules/katalog/portofolio/main/view.tsx
@@ -0,0 +1,34 @@
+"use client";
+
+import { Warna } from "@/app/lib/warna";
+import { MODEL_PORTOFOLIO } from "@/app_modules/models/portofolio";
+import { Box, Button, Center, Text, Title } from "@mantine/core";
+import { IconTrash } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+
+export default function ViewPortofolio({
+ dataPorto,
+}: {
+ dataPorto: MODEL_PORTOFOLIO;
+}) {
+ const router = useRouter();
+ const [porto, setPorto] = useState(dataPorto);
+
+ return (
+ <>
+
+ {porto.namaBisnis}
+ {porto.alamatKantor}
+ +{porto.tlpn}
+ {porto.deskripsi}
+ {porto.MasterBidangBisnis.name}
+
+
+ {}}>
+
+ {" "}
+
+ >
+ );
+}
diff --git a/src/app_modules/katalog/portofolio/state/global_state.ts b/src/app_modules/katalog/portofolio/state/global_state.ts
new file mode 100644
index 00000000..dd75aafe
--- /dev/null
+++ b/src/app_modules/katalog/portofolio/state/global_state.ts
@@ -0,0 +1,3 @@
+import { atomWithStorage } from "jotai/utils";
+
+export const gs_ListPortofolio = atomWithStorage("gs_ListPortofolio", null)
\ No newline at end of file
diff --git a/src/app_modules/katalog/profile/api/get-foto-profile.ts b/src/app_modules/katalog/profile/api/get-foto-profile.ts
new file mode 100644
index 00000000..d8d24f5a
--- /dev/null
+++ b/src/app_modules/katalog/profile/api/get-foto-profile.ts
@@ -0,0 +1,16 @@
+"use server";
+import { myConsole } from "@/app/fun/my_console";
+import prisma from "@/app/lib/prisma";
+
+export async function getFotoProfile(id: any) {
+ const imgUrl = await prisma.images.findUnique({
+ where: {
+ id: id,
+ },
+ select: {
+ id: true,
+ url: true,
+ },
+ });
+ return imgUrl;
+}
diff --git a/src/app_modules/katalog/profile/api/get-profile.ts b/src/app_modules/katalog/profile/api/get-profile.ts
new file mode 100644
index 00000000..4fb27faa
--- /dev/null
+++ b/src/app_modules/katalog/profile/api/get-profile.ts
@@ -0,0 +1,38 @@
+"use server";
+
+import { myConsole } from "@/app/fun/my_console";
+import prisma from "@/app/lib/prisma";
+import { getToken } from "@/app_modules/home";
+import { NextResponse } from "next/server";
+
+
+/**
+ * @function api get data profile by user id
+ * @returns data profile
+ */
+export async function getProfile() {
+ const token = await getToken();
+
+ const dataProfile = await prisma.profile.findUnique({
+ where: {
+ userId: token.id,
+ },
+ select: {
+ id: true,
+ name: true,
+ email: true,
+ alamat: true,
+ jenisKelamin: true,
+ active: true,
+ imagesId: true,
+ User: {
+ select : {
+ username: true,
+ nomor: true
+ }
+ }
+ },
+ });
+
+ return dataProfile;
+}
diff --git a/src/app_modules/katalog/profile/create/layout.tsx b/src/app_modules/katalog/profile/create/layout.tsx
new file mode 100644
index 00000000..4d726bde
--- /dev/null
+++ b/src/app_modules/katalog/profile/create/layout.tsx
@@ -0,0 +1,36 @@
+"use client";
+
+import {
+ ActionIcon,
+ AppShell,
+ Group,
+ Header,
+ Text,
+ Title,
+} from "@mantine/core";
+import { IconArrowLeft } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+
+export default function ProfileLayout({ children }: { children: any }) {
+ const router = useRouter()
+ return (
+ <>
+
+
+ router.push("/dev/home")}>
+
+
+ Create Profile
+
+
+
+ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/katalog/profile/create/view.tsx b/src/app_modules/katalog/profile/create/view.tsx
new file mode 100644
index 00000000..13b5034a
--- /dev/null
+++ b/src/app_modules/katalog/profile/create/view.tsx
@@ -0,0 +1,104 @@
+"use client";
+
+import { myConsole } from "@/app/fun/my_console";
+import { ApiHipmi } from "@/app/lib/api";
+import { Warna } from "@/app/lib/warna";
+import { gs_token } from "@/app_modules/home/state/global_state";
+import { Button, Select, Stack, TextInput } from "@mantine/core";
+import { useAtom } from "jotai";
+import _ from "lodash";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import toast from "react-simple-toasts";
+import funCreateNewProfile from "../fun/fun_create_profile";
+
+export default function CreateProfile({ userId }: { userId: any }) {
+ const router = useRouter();
+
+ const [value, setValue] = useState({
+ name: "",
+ email: "",
+ alamat: "",
+ jenisKelamin: "",
+ });
+
+ async function onSubmit() {
+ const body = {
+ userId: userId,
+ name: value.name,
+ email: value.email,
+ alamat: value.alamat,
+ jenisKelamin: value.jenisKelamin,
+ };
+
+ myConsole(body);
+
+ if (_.values(value).includes("")) return toast("Lengkapi data");
+ // if(_.values(value.email).includes(`${/^\S+@\S+$/.test(value.email) ? null : "Invalid email"}`)){}
+
+ await funCreateNewProfile(body).then((res) => {
+ if (res.status === 201) {
+ toast("Data tersimpan");
+ return router.push(`/dev/katalog/${userId}`);
+ } else {
+ toast("Gagal")
+ }
+ });
+ }
+
+ return (
+ <>
+
+ {
+ setValue({
+ ...value,
+ name: val.target.value,
+ });
+ }}
+ />
+ {
+ setValue({
+ ...value,
+ email: val.target.value,
+ });
+ }}
+ />
+ {
+ setValue({
+ ...value,
+ alamat: val.target.value,
+ });
+ }}
+ />
+ {
+ setValue({
+ ...value,
+ jenisKelamin: val as string,
+ });
+ }}
+ />
+ onSubmit()}
+ >
+ Simpan
+
+
+ >
+ );
+}
diff --git a/src/app_modules/katalog/profile/edit/layout.tsx b/src/app_modules/katalog/profile/edit/layout.tsx
new file mode 100644
index 00000000..b15d0da8
--- /dev/null
+++ b/src/app_modules/katalog/profile/edit/layout.tsx
@@ -0,0 +1,36 @@
+"use client";
+
+import {
+ ActionIcon,
+ AppShell,
+ Group,
+ Header,
+ Text,
+ Title,
+} from "@mantine/core";
+import { IconArrowLeft } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+
+export default function EditProfileLayout({ children, profileId }: { children: any, profileId: any }) {
+ const router = useRouter()
+ return (
+ <>
+
+
+ router.push(`/dev/katalog/${profileId}`)}>
+
+
+ Edit Profile
+
+
+
+ }
+ >
+ {children}
+
+ >
+ );
+}
diff --git a/src/app_modules/katalog/profile/edit/view.tsx b/src/app_modules/katalog/profile/edit/view.tsx
new file mode 100644
index 00000000..1318cacc
--- /dev/null
+++ b/src/app_modules/katalog/profile/edit/view.tsx
@@ -0,0 +1,129 @@
+"use client";
+
+import { myConsole } from "@/app/fun/my_console";
+import { ApiHipmi } from "@/app/lib/api";
+import { Warna } from "@/app/lib/warna";
+import { gs_token } from "@/app_modules/home/state/global_state";
+import { Button, Loader, Select, Stack, TextInput } from "@mantine/core";
+import { useShallowEffect } from "@mantine/hooks";
+import { useAtom } from "jotai";
+import _ from "lodash";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import toast from "react-simple-toasts";
+import { gs_profile } from "../state/global_state";
+import { loadDataProfile } from "../fun/fun_get_profile";
+import { MODEL_User_profile } from "@/app_modules/home/models/user_profile";
+import funEditProfile from "../fun/fun_edit_profile";
+
+export default function EditProfile({ data }: { data: MODEL_User_profile }) {
+ const router = useRouter();
+
+ //Get data profile
+ const [dataProfile, setDataProfile] = useState(data);
+
+ async function onUpdate() {
+ const body = dataProfile;
+ if (_.values(body).includes("")) return toast("Lengkapi data");
+
+ await funEditProfile(body).then((res) => {
+ if (res.status === 200) {
+ toast("Update berhasil");
+ setTimeout(() => router.push(`/dev/katalog/${data.Profile?.id}`), 1000);
+ } else {
+ toast("Gagal update");
+ }
+ });
+ }
+
+ if (!dataProfile)
+ return (
+ <>
+
+ >
+ );
+
+ return (
+ <>
+
+
+
+
+ {
+ setDataProfile({
+ ...(dataProfile as any),
+ Profile: {
+ ...dataProfile.Profile,
+ name: val.target.value,
+ },
+ });
+ }}
+ />
+
+ {
+ setDataProfile({
+ ...(dataProfile as any),
+ Profile: {
+ ...dataProfile.Profile,
+ email: val.target.value,
+ },
+ });
+ }}
+ />
+
+ {
+ setDataProfile({
+ ...(dataProfile as any),
+ Profile: {
+ ...dataProfile.Profile,
+ alamat: val.target.value,
+ },
+ });
+ }}
+ />
+
+ {
+ setDataProfile({
+ ...(dataProfile as any),
+ Profile: {
+ ...dataProfile.Profile,
+ jenisKelamin: val,
+ },
+ });
+ }}
+ />
+
+ onUpdate()}
+ >
+ Update
+
+
+
+ {/* {JSON.stringify(dataProfile, null, 2)} */}
+ >
+ );
+}
diff --git a/src/app_modules/katalog/profile/fun/fun_create_profile.ts b/src/app_modules/katalog/profile/fun/fun_create_profile.ts
new file mode 100644
index 00000000..d22c54fd
--- /dev/null
+++ b/src/app_modules/katalog/profile/fun/fun_create_profile.ts
@@ -0,0 +1,25 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+export default async function funCreateNewProfile(data: any) {
+ // console.log(data);
+ const body = data;
+
+ const res = await prisma.profile.create({
+ data: {
+ userId: body.userId,
+ name: body.name,
+ email: body.email,
+ alamat: body.alamat,
+ jenisKelamin: body.jenisKelamin,
+ },
+ });
+
+ if (!res) return { status: 400 };
+
+ return {
+ status: 201,
+ success: true,
+ };
+}
diff --git a/src/app_modules/katalog/profile/fun/fun_edit_profile.ts b/src/app_modules/katalog/profile/fun/fun_edit_profile.ts
new file mode 100644
index 00000000..20fb73ef
--- /dev/null
+++ b/src/app_modules/katalog/profile/fun/fun_edit_profile.ts
@@ -0,0 +1,25 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import { MODEL_User_profile } from "@/app_modules/home/models/user_profile";
+
+export default async function funEditProfile(data: MODEL_User_profile) {
+ const res = await prisma.profile.update({
+ where: {
+ id: data.Profile?.id,
+ },
+ data: {
+ name: data.Profile?.name,
+ email: data.Profile?.email,
+ alamat: data.Profile?.alamat,
+ jenisKelamin: data.Profile?.jenisKelamin,
+ },
+ });
+
+ if (!res) return { status: 400 };
+
+ return {
+ status: 200,
+ success: true,
+ };
+}
diff --git a/src/app_modules/katalog/profile/fun/fun_get_profile.ts b/src/app_modules/katalog/profile/fun/fun_get_profile.ts
new file mode 100644
index 00000000..ab699309
--- /dev/null
+++ b/src/app_modules/katalog/profile/fun/fun_get_profile.ts
@@ -0,0 +1,15 @@
+import { myConsole } from "@/app/fun/my_console";
+import { getProfile } from "..";
+
+/**
+ * @function get data profile
+ * @param setProfile
+ * @returns data profile
+ */
+export async function loadDataProfile(setProfile: any) {
+ await getProfile()
+ .then((res) => res)
+ .then((val) => {
+ setProfile(val);
+ });
+}
diff --git a/src/app_modules/katalog/profile/fun/upload_foto.ts b/src/app_modules/katalog/profile/fun/upload_foto.ts
new file mode 100644
index 00000000..043bd563
--- /dev/null
+++ b/src/app_modules/katalog/profile/fun/upload_foto.ts
@@ -0,0 +1,52 @@
+"use server";
+
+import { myConsole } from "@/app/fun/my_console";
+import prisma from "@/app/lib/prisma";
+import fs from "fs";
+import _ from "lodash";
+import { cookies } from "next/headers";
+import { v4 } from "uuid";
+
+/**
+ *
+ * @param formData
+ * @returns upload gambar ke /public/img
+ */
+export async function funUploadFoto(formData: FormData, id: string) {
+ const file: any = formData.get("file");
+ const fName = file.name;
+ const fExt = _.lowerCase(file.name.split(".").pop());
+ const fRandomName = v4(fName) + "." + fExt;
+
+ myConsole(id);
+ myConsole(fExt);
+
+ const upload = await prisma.images.create({
+ data: {
+ url: fRandomName,
+ },
+ select: {
+ id: true,
+ url: true,
+ },
+ });
+
+ if (upload) {
+ await prisma.profile.update({
+ where: {
+ id: id,
+ },
+ data: {
+ imagesId: upload.id,
+ },
+ });
+ }
+
+ const upFolder = Buffer.from(await file.arrayBuffer());
+ fs.writeFileSync(`./public/img/${upload.url}`, upFolder);
+
+ return {
+ success: true,
+ data: upload,
+ };
+}
diff --git a/src/app_modules/katalog/profile/index.ts b/src/app_modules/katalog/profile/index.ts
new file mode 100644
index 00000000..cfa328c8
--- /dev/null
+++ b/src/app_modules/katalog/profile/index.ts
@@ -0,0 +1,19 @@
+import ProfileLayout from "./create/layout";
+import CreateProfile from "./create/view";
+import { getProfile } from "./api/get-profile";
+import EditProfileLayout from "./edit/layout";
+import EditProfileView from "./edit/view";
+import UploadFotoProfile from "./upload/view";
+import UploadFotoProfileLayout from "./upload/layout"
+import ProfileView from "./main/view";
+
+export {
+ ProfileLayout,
+ CreateProfile,
+ getProfile,
+ EditProfileView,
+ EditProfileLayout,
+ UploadFotoProfile,
+ UploadFotoProfileLayout,
+ ProfileView
+};
diff --git a/src/app_modules/katalog/profile/main/view.tsx b/src/app_modules/katalog/profile/main/view.tsx
new file mode 100644
index 00000000..5028c462
--- /dev/null
+++ b/src/app_modules/katalog/profile/main/view.tsx
@@ -0,0 +1,184 @@
+"use client";
+
+import { Warna } from "@/app/lib/warna";
+import {
+ ActionIcon,
+ BackgroundImage,
+ Box,
+ Center,
+ Flex,
+ Grid,
+ Group,
+ Image,
+ Paper,
+ Text,
+} from "@mantine/core";
+import { useShallowEffect } from "@mantine/hooks";
+import {
+ IconAddressBook,
+ IconCamera,
+ IconEditCircle,
+ IconGenderFemale,
+ IconGenderMale,
+ IconHome,
+ IconMail,
+} from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import { myConsole } from "@/app/fun/my_console";
+import { useAtom } from "jotai";
+import { ApiHipmi } from "@/app/lib/api";
+import { loadDataProfile } from "../fun/fun_get_profile";
+import { getFotoProfile } from "../api/get-foto-profile";
+import { gs_fotoProfile, gs_profile } from "../state/global_state";
+import { getProfile } from "..";
+import { MODEL_User_profile } from "@/app_modules/home/models/user_profile";
+import { funGetUserProfile } from "@/app_modules/fun/get_user_profile";
+
+export default function ProfileView({ user }: { user: MODEL_User_profile }) {
+ const router = useRouter();
+ const [stateUser, setStateUser] = useState(user);
+ useShallowEffect(() => {
+ funGetUserProfile(user.id ?? "").then(setStateUser as any);
+ }, []);
+
+ if (!stateUser) return <>>;
+ return (
+ <>
+ {/* Background dan foto */}
+
+
+
+
+
+
+
+ {stateUser.Profile?.ImageProfile?.url && (
+
+ )}
+
+
+
+
+
+ router.push(`/dev/profile/upload/${stateUser.Profile?.id}`)}
+ sx={{ position: "relative" }}
+ >
+
+
+
+
+
+ {/* Username dan Nama */}
+
+
+
+ {stateUser.Profile?.name}
+
+ @{stateUser.username}
+
+ {
+ router.push(`/dev/profile/edit/${stateUser.id}`);
+ }}
+ >
+
+
+
+
+ {/* Info user: nomor, email dll */}
+
+
+
+
+
+
+
+ {" "}
+ +{stateUser.nomor}
+
+
+
+
+
+
+
+
+
+
+ {" "}
+ {stateUser.Profile?.email}
+
+
+
+
+
+
+
+
+
+ {stateUser.Profile?.alamat}
+
+
+
+ {(() => {
+ if (stateUser.Profile?.jenisKelamin === "Laki - laki") {
+ return (
+ <>
+
+
+
+
+
+ {stateUser.Profile?.jenisKelamin}
+
+
+ >
+ );
+ } else {
+ return (
+ <>
+
+
+
+
+
+ {stateUser.Profile?.jenisKelamin}
+
+
+ >
+ );
+ }
+ })()}
+
+
+ {/* {JSON.stringify(profile, null, 2)} */}
+ >
+ );
+}
diff --git a/src/app_modules/katalog/profile/state/global_state.ts b/src/app_modules/katalog/profile/state/global_state.ts
new file mode 100644
index 00000000..0bdc53d3
--- /dev/null
+++ b/src/app_modules/katalog/profile/state/global_state.ts
@@ -0,0 +1,7 @@
+import { atomWithStorage } from "jotai/utils";
+import { getProfile } from "..";
+
+export const gs_profile = atomWithStorage("gs_profile", null);
+export const gs_fotoProfile = atomWithStorage("gs_fotoProfile" , null)
+
+
diff --git a/src/app_modules/katalog/profile/upload/layout.tsx b/src/app_modules/katalog/profile/upload/layout.tsx
new file mode 100644
index 00000000..ca4d2b4b
--- /dev/null
+++ b/src/app_modules/katalog/profile/upload/layout.tsx
@@ -0,0 +1,96 @@
+"use client";
+
+import {
+ ActionIcon,
+ AppShell,
+ FileButton,
+ Flex,
+ Footer,
+ Group,
+ Header,
+ Text,
+} from "@mantine/core";
+import { IconArrowLeft, IconUpload } from "@tabler/icons-react";
+import { useAtom } from "jotai";
+import toast from "react-simple-toasts";
+import { gs_profile } from "../state/global_state";
+import { useShallowEffect } from "@mantine/hooks";
+import { loadDataProfile } from "../fun/fun_get_profile";
+import { funUploadFoto } from "../fun/upload_foto";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+
+export default function UploadFotoProfileLayout({
+ children,
+ profileId
+}: {
+ children: any;
+ profileId: any
+}) {
+ const router = useRouter()
+ const [profile, setProfile] = useState(profileId)
+
+
+ return (
+ <>
+ {JSON.stringify(profileId)}
+
+
+ router.push(`/dev/katalog/${profile}`)}
+ >
+
+
+ Upload Foto Profile
+
+
+
+ }
+ footer={
+
+
+
+
+ {
+ const id = profile
+
+ if (!files) return toast("File Kosong");
+ const fd = new FormData();
+ fd.append("file", files);
+
+ const upFoto = await funUploadFoto(fd, id);
+ if (upFoto.success) {
+ toast("Upload berhasil");
+ router.push(`/dev/katalog/${profile}`)
+ // loadDataProfile(valUser.id, setUser, setProfile);
+ }
+ }}
+ accept="image/png,image/jpeg,image/webp"
+ >
+ {(props) => (
+
+
+
+ )}
+
+
+ Upload
+
+
+
+
+
+ {/* */}
+
+ }
+ >
+ {children}
+ {/* {JSON.stringify(profile)} */}
+
+ >
+ );
+}
diff --git a/src/app_modules/katalog/profile/upload/view.tsx b/src/app_modules/katalog/profile/upload/view.tsx
new file mode 100644
index 00000000..607e2fb8
--- /dev/null
+++ b/src/app_modules/katalog/profile/upload/view.tsx
@@ -0,0 +1,26 @@
+"use client";
+
+import { AspectRatio, FileButton, Image, Paper, Title } from "@mantine/core";
+import { useShallowEffect } from "@mantine/hooks";
+import { useAtom } from "jotai";
+import { loadDataProfile } from "../fun/fun_get_profile";
+import { gs_fotoProfile, gs_profile } from "../state/global_state";
+import { getFotoProfile } from "../api/get-foto-profile";
+import { useState } from "react";
+import { ApiHipmi } from "@/app/lib/api";
+import { myConsole } from "@/app/fun/my_console";
+
+export default function UploadFotoProfile({imageUrl}: {imageUrl: any}) {
+ const [img, setImg] = useState(imageUrl)
+ return (
+ <>
+ {/* {JSON.stringify(foto)} */}
+
+
+ {img ? : }
+
+
+ {/* {JSON.stringify(profile)} */}
+ >
+ );
+}
diff --git a/src/app_modules/models/interface.ts b/src/app_modules/models/interface.ts
new file mode 100644
index 00000000..d9ee6673
--- /dev/null
+++ b/src/app_modules/models/interface.ts
@@ -0,0 +1,7 @@
+export interface MODEL_IMAGES {
+ id: string;
+ url: string;
+ active: boolean;
+ createdAt: Date;
+ updatedAt: Date;
+}
diff --git a/src/app_modules/models/model_default_master.ts b/src/app_modules/models/model_default_master.ts
new file mode 100644
index 00000000..9ba96d40
--- /dev/null
+++ b/src/app_modules/models/model_default_master.ts
@@ -0,0 +1,5 @@
+export interface MODEL_DEFAULT_MASTER {
+ id: string,
+ name: string,
+ active: boolean,
+}
\ No newline at end of file
diff --git a/src/app_modules/models/portofolio.ts b/src/app_modules/models/portofolio.ts
new file mode 100644
index 00000000..a7e6b01c
--- /dev/null
+++ b/src/app_modules/models/portofolio.ts
@@ -0,0 +1,28 @@
+export interface LIST_PORTOFOLIO {
+ id: string;
+ namaBisnis: string;
+ alamatKantor: string;
+ tlpn: string;
+ deskripssi: string;
+ masterBidangBisnisId: string;
+ active: boolean;
+ profileId: string
+}
+
+export interface BIDANG_BISNIS {
+ id: string;
+ name: string;
+ active: boolean;
+}
+
+export interface MODEL_PORTOFOLIO {
+ id: string;
+ namaBisnis: string;
+ alamatKantor: string;
+ deskripsi: string;
+ tlpn: string;
+ active: boolean;
+ MasterBidangBisnis: BIDANG_BISNIS;
+ masterBidangBisnisId: string
+ profileId: string,
+}
diff --git a/src/app_modules/notif/index.tsx b/src/app_modules/notif/index.tsx
new file mode 100644
index 00000000..6dc0240d
--- /dev/null
+++ b/src/app_modules/notif/index.tsx
@@ -0,0 +1,17 @@
+"use client";
+import { useShallowEffect } from "@mantine/hooks";
+import io from "socket.io-client";
+import { toast } from "react-toastify";
+// const socket = io("https://io.wibudev.com");
+
+export default function AppNotif() {
+ // useShallowEffect(() => {
+ // socket.on("io", (data) => {
+ // console.log(JSON.stringify(data))
+ // if (data && data.id === "hipmi") {
+ // toast.success(data.data);
+ // }
+ // });
+ // }, []);
+ return <>>;
+}
diff --git a/src/bin/config/index.ts b/src/bin/config/index.ts
new file mode 100644
index 00000000..3ee540b9
--- /dev/null
+++ b/src/bin/config/index.ts
@@ -0,0 +1,11 @@
+"use server";
+import yaml from "yaml";
+import fs from "fs";
+import path from "path";
+const config: { server: { password: string } } = yaml.parse(
+ fs.readFileSync(path.join(__dirname, "./../../../config.yaml")).toString()
+);
+
+export async function getConfig() {
+ return config;
+}
diff --git a/src/bin/seeder/bidang_bisnis.json b/src/bin/seeder/bidang_bisnis.json
new file mode 100644
index 00000000..1f791d1c
--- /dev/null
+++ b/src/bin/seeder/bidang_bisnis.json
@@ -0,0 +1,18 @@
+[
+ {
+ "id": 1,
+ "name": "Software Developer"
+ },
+ {
+ "id": 2,
+ "name": "Makanan & Minuman"
+ },
+ {
+ "id": 3,
+ "name": "Kosmetik"
+ },
+ {
+ "id": 4,
+ "name": "Mesin Mobil"
+ }
+]
diff --git a/src/bin/seeder/donasi/master_durasi.json b/src/bin/seeder/donasi/master_durasi.json
new file mode 100644
index 00000000..af7811ad
--- /dev/null
+++ b/src/bin/seeder/donasi/master_durasi.json
@@ -0,0 +1,18 @@
+[
+ {
+ "id": "1",
+ "name": "30"
+ },
+ {
+ "id": "2",
+ "name": "60"
+ },
+ {
+ "id": "3",
+ "name": "90"
+ },
+ {
+ "id": "4",
+ "name": "120"
+ }
+]
diff --git a/src/bin/seeder/donasi/master_kategori.json b/src/bin/seeder/donasi/master_kategori.json
new file mode 100644
index 00000000..2cd6377e
--- /dev/null
+++ b/src/bin/seeder/donasi/master_kategori.json
@@ -0,0 +1,22 @@
+[
+ {
+ "id": "1",
+ "name": "Medis"
+ },
+ {
+ "id": "2",
+ "name": "Kegiatan Sosial"
+ },
+ {
+ "id": "3",
+ "name": "Pendidikan"
+ },
+ {
+ "id": "4",
+ "name": "Rumah Ibadah"
+ },
+ {
+ "id": "5",
+ "name": "Bencana Alam"
+ }
+]
diff --git a/src/bin/seeder/donasi/master_status.json b/src/bin/seeder/donasi/master_status.json
new file mode 100644
index 00000000..b42a57b4
--- /dev/null
+++ b/src/bin/seeder/donasi/master_status.json
@@ -0,0 +1,18 @@
+[
+ {
+ "id": "1",
+ "name": "Publish"
+ },
+ {
+ "id": "2",
+ "name": "Review"
+ },
+ {
+ "id": "3",
+ "name": "Draft"
+ },
+ {
+ "id": "4",
+ "name": "Reject"
+ }
+]
diff --git a/src/bin/seeder/investasi/master_progres.json b/src/bin/seeder/investasi/master_progres.json
new file mode 100644
index 00000000..951cf27c
--- /dev/null
+++ b/src/bin/seeder/investasi/master_progres.json
@@ -0,0 +1,14 @@
+[
+ {
+ "id": "1",
+ "name": "Dalam Proses"
+ },
+ {
+ "id": "2",
+ "name": "Selesai"
+ },
+ {
+ "id": "3",
+ "name": "Waktu Habis"
+ }
+]
diff --git a/src/bin/seeder/investasi/nama_bank.json b/src/bin/seeder/investasi/nama_bank.json
new file mode 100644
index 00000000..14ced25f
--- /dev/null
+++ b/src/bin/seeder/investasi/nama_bank.json
@@ -0,0 +1,22 @@
+[
+ {
+ "id": 1,
+ "name": "BRI",
+ "norek": "9065456754325643"
+ },
+ {
+ "id": 2,
+ "name": "BCA",
+ "norek": "2304235678854332"
+ },
+ {
+ "id": 3,
+ "name": "BNI",
+ "norek": "1104786754324564"
+ },
+ {
+ "id": 4,
+ "name": "BSI",
+ "norek": "7076543567898976"
+ }
+]
diff --git a/src/bin/seeder/investasi/pembagian_deviden.json b/src/bin/seeder/investasi/pembagian_deviden.json
new file mode 100644
index 00000000..6f9132c2
--- /dev/null
+++ b/src/bin/seeder/investasi/pembagian_deviden.json
@@ -0,0 +1,18 @@
+[
+ {
+ "id": "1",
+ "name": "3"
+ },
+ {
+ "id": "2",
+ "name": "6"
+ },
+ {
+ "id": "3",
+ "name": "9"
+ },
+ {
+ "id": "4",
+ "name": "12"
+ }
+]
diff --git a/src/bin/seeder/investasi/pencarian_investor.json b/src/bin/seeder/investasi/pencarian_investor.json
new file mode 100644
index 00000000..8435b4e4
--- /dev/null
+++ b/src/bin/seeder/investasi/pencarian_investor.json
@@ -0,0 +1,19 @@
+[
+ {
+ "id": "1",
+ "name": "30"
+ },
+ {
+ "id": "2",
+ "name": "60"
+ },
+ {
+ "id": "3",
+ "name": "90"
+ },
+ {
+ "id": "4",
+ "name": "120"
+ }
+ ]
+
\ No newline at end of file
diff --git a/src/bin/seeder/investasi/periode_deviden.json b/src/bin/seeder/investasi/periode_deviden.json
new file mode 100644
index 00000000..6f7eaf81
--- /dev/null
+++ b/src/bin/seeder/investasi/periode_deviden.json
@@ -0,0 +1,10 @@
+[
+ {
+ "id": "1",
+ "name": "Selamanya"
+ },
+ {
+ "id": "2",
+ "name": "Satu tahun"
+ }
+]
diff --git a/src/bin/seeder/investasi/status_investasi.json b/src/bin/seeder/investasi/status_investasi.json
new file mode 100644
index 00000000..c7ca2fd7
--- /dev/null
+++ b/src/bin/seeder/investasi/status_investasi.json
@@ -0,0 +1,22 @@
+[
+ {
+ "id": "1",
+ "name": "Draft",
+ "color": "yellow"
+ },
+ {
+ "id": "2",
+ "name": "Review",
+ "color": "orange"
+ },
+ {
+ "id": "3",
+ "name": "Publish",
+ "color": "green"
+ },
+ {
+ "id": "4",
+ "name": "Reject",
+ "color": "red"
+ }
+]
diff --git a/src/bin/seeder/investasi/status_transaksi_investasi.json b/src/bin/seeder/investasi/status_transaksi_investasi.json
new file mode 100644
index 00000000..a38ab720
--- /dev/null
+++ b/src/bin/seeder/investasi/status_transaksi_investasi.json
@@ -0,0 +1,23 @@
+[
+ {
+ "id": "1",
+ "name": "Menunggu",
+ "color": "yellow"
+ },
+ {
+ "id": "2",
+ "name": "Proses",
+ "color": "orange"
+ },
+ {
+ "id": "3",
+ "name": "Berhasil",
+ "color": "green"
+ },
+ {
+ "id": "4",
+ "name": "Gagal",
+ "color": "red"
+ }
+ ]
+
\ No newline at end of file
diff --git a/src/bin/seeder/user_role.json b/src/bin/seeder/user_role.json
new file mode 100644
index 00000000..a3725b23
--- /dev/null
+++ b/src/bin/seeder/user_role.json
@@ -0,0 +1,18 @@
+[
+ {
+ "id": 1,
+ "name": "User",
+ "user": 1
+
+ },
+ {
+ "id": 2,
+ "name": "Admin",
+ "user": 2
+ },
+ {
+ "id": 3,
+ "name": "Super Admin",
+ "user": 3
+ }
+ ]
\ No newline at end of file
diff --git a/src/bin/seeder/user_seeder.json b/src/bin/seeder/user_seeder.json
new file mode 100644
index 00000000..e83e8c96
--- /dev/null
+++ b/src/bin/seeder/user_seeder.json
@@ -0,0 +1,12 @@
+[
+ {
+ "name": "Banuna",
+ "nomor": "6282340374412",
+ "masterUserRoleId": "1"
+ },
+ {
+ "name": "Firman",
+ "nomor": "6281339158911",
+ "masterUserRoleId": "1"
+ }
+]
diff --git a/tsconfig.json b/tsconfig.json
index eb0b41d9..474fa58c 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -23,6 +23,6 @@
"@/*": ["./src/*"]
}
},
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts", "src/app_modules/investasi/proses_transaksi/view.jsx", "src/app/api/investasi/midtrans/[id]/route.ts"],
"exclude": ["node_modules"]
}
diff --git a/yarn.lock b/yarn.lock
index 76004960..e6daf34e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -13,52 +13,53 @@
integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==
"@babel/code-frame@^7.0.0":
- version "7.22.5"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658"
- integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==
+ version "7.23.5"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244"
+ integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==
dependencies:
- "@babel/highlight" "^7.22.5"
+ "@babel/highlight" "^7.23.4"
+ chalk "^2.4.2"
"@babel/helper-module-imports@^7.16.7":
- version "7.22.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c"
- integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==
+ version "7.22.15"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0"
+ integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==
dependencies:
- "@babel/types" "^7.22.5"
+ "@babel/types" "^7.22.15"
-"@babel/helper-string-parser@^7.22.5":
- version "7.22.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f"
- integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==
+"@babel/helper-string-parser@^7.23.4":
+ version "7.23.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83"
+ integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==
-"@babel/helper-validator-identifier@^7.22.5":
- version "7.22.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193"
- integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==
+"@babel/helper-validator-identifier@^7.22.20":
+ version "7.22.20"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0"
+ integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==
-"@babel/highlight@^7.22.5":
- version "7.22.5"
- resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031"
- integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==
+"@babel/highlight@^7.23.4":
+ version "7.23.4"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b"
+ integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==
dependencies:
- "@babel/helper-validator-identifier" "^7.22.5"
- chalk "^2.0.0"
+ "@babel/helper-validator-identifier" "^7.22.20"
+ chalk "^2.4.2"
js-tokens "^4.0.0"
-"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.7":
- version "7.22.6"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.6.tgz#57d64b9ae3cff1d67eb067ae117dac087f5bd438"
- integrity sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==
+"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.18.3", "@babel/runtime@^7.23.2", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7":
+ version "7.23.6"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.6.tgz#c05e610dc228855dc92ef1b53d07389ed8ab521d"
+ integrity sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==
dependencies:
- regenerator-runtime "^0.13.11"
+ regenerator-runtime "^0.14.0"
-"@babel/types@^7.22.5":
- version "7.22.5"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe"
- integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==
+"@babel/types@^7.22.15":
+ version "7.23.6"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd"
+ integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==
dependencies:
- "@babel/helper-string-parser" "^7.22.5"
- "@babel/helper-validator-identifier" "^7.22.5"
+ "@babel/helper-string-parser" "^7.23.4"
+ "@babel/helper-validator-identifier" "^7.22.20"
to-fast-properties "^2.0.0"
"@emotion/babel-plugin@^11.11.0":
@@ -100,23 +101,23 @@
integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==
"@emotion/react@^11.11.1":
- version "11.11.1"
- resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.1.tgz#b2c36afac95b184f73b08da8c214fdf861fa4157"
- integrity sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==
+ version "11.11.3"
+ resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.3.tgz#96b855dc40a2a55f52a72f518a41db4f69c31a25"
+ integrity sha512-Cnn0kuq4DoONOMcnoVsTOR8E+AdnKFf//6kUWc4LCdnxj31pZWn7rIULd6Y7/Js1PiPHzn7SKCM9vB/jBni8eA==
dependencies:
"@babel/runtime" "^7.18.3"
"@emotion/babel-plugin" "^11.11.0"
"@emotion/cache" "^11.11.0"
- "@emotion/serialize" "^1.1.2"
+ "@emotion/serialize" "^1.1.3"
"@emotion/use-insertion-effect-with-fallbacks" "^1.0.1"
"@emotion/utils" "^1.2.1"
"@emotion/weak-memoize" "^0.3.1"
hoist-non-react-statics "^3.3.1"
-"@emotion/serialize@^1.1.2":
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.2.tgz#017a6e4c9b8a803bd576ff3d52a0ea6fa5a62b51"
- integrity sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==
+"@emotion/serialize@^1.1.2", "@emotion/serialize@^1.1.3":
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.3.tgz#84b77bfcfe3b7bb47d326602f640ccfcacd5ffb0"
+ integrity sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==
dependencies:
"@emotion/hash" "^0.9.1"
"@emotion/memoize" "^0.8.1"
@@ -167,14 +168,14 @@
eslint-visitor-keys "^3.3.0"
"@eslint-community/regexpp@^4.4.0":
- version "4.6.2"
- resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8"
- integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==
+ version "4.10.0"
+ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63"
+ integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==
"@eslint/eslintrc@^2.1.0":
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.0.tgz#82256f164cc9e0b59669efc19d57f8092706841d"
- integrity sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad"
+ integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==
dependencies:
ajv "^6.12.4"
debug "^4.3.2"
@@ -191,17 +192,20 @@
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.44.0.tgz#961a5903c74139390478bdc808bcde3fc45ab7af"
integrity sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==
-"@floating-ui/core@^1.3.1":
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.3.1.tgz#4d795b649cc3b1cbb760d191c80dcb4353c9a366"
- integrity sha512-Bu+AMaXNjrpjh41znzHqaz3r2Nr8hHuHZT6V2LBKMhyMl0FgKA62PNYbqnfgmzOhoWZj70Zecisbo4H1rotP5g==
+"@floating-ui/core@^1.4.2":
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.5.2.tgz#53a0f7a98c550e63134d504f26804f6b83dbc071"
+ integrity sha512-Ii3MrfY/GAIN3OhXNzpCKaLxHQfJF9qvwq/kEJYdqDxeIHa01K8sldugal6TmeeXl+WMvhv9cnVzUTaFFJF09A==
+ dependencies:
+ "@floating-ui/utils" "^0.1.3"
"@floating-ui/dom@^1.2.1":
- version "1.4.5"
- resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.4.5.tgz#336dfb9870c98b471ff5802002982e489b8bd1c5"
- integrity sha512-96KnRWkRnuBSSFbj0sFGwwOUd8EkiecINVl0O9wiZlZ64EkpyAOG3Xc2vKKNJmru0Z7RqWNymA+6b8OZqjgyyw==
+ version "1.5.3"
+ resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.5.3.tgz#54e50efcb432c06c23cd33de2b575102005436fa"
+ integrity sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==
dependencies:
- "@floating-ui/core" "^1.3.1"
+ "@floating-ui/core" "^1.4.2"
+ "@floating-ui/utils" "^0.1.3"
"@floating-ui/react-dom@^1.3.0":
version "1.3.0"
@@ -219,12 +223,17 @@
aria-hidden "^1.1.3"
tabbable "^6.0.1"
+"@floating-ui/utils@^0.1.3":
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.1.6.tgz#22958c042e10b67463997bd6ea7115fe28cbcaf9"
+ integrity sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==
+
"@humanwhocodes/config-array@^0.11.10":
- version "0.11.10"
- resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2"
- integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==
+ version "0.11.13"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297"
+ integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==
dependencies:
- "@humanwhocodes/object-schema" "^1.2.1"
+ "@humanwhocodes/object-schema" "^2.0.1"
debug "^4.1.1"
minimatch "^3.0.5"
@@ -233,10 +242,22 @@
resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
-"@humanwhocodes/object-schema@^1.2.1":
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
- integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
+"@humanwhocodes/object-schema@^2.0.1":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044"
+ integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==
+
+"@isaacs/cliui@^8.0.2":
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
+ integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
+ dependencies:
+ string-width "^5.1.2"
+ string-width-cjs "npm:string-width@^4.2.0"
+ strip-ansi "^7.0.1"
+ strip-ansi-cjs "npm:strip-ansi@^6.0.1"
+ wrap-ansi "^8.1.0"
+ wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
"@jridgewell/gen-mapping@^0.3.2":
version "0.3.3"
@@ -247,84 +268,99 @@
"@jridgewell/sourcemap-codec" "^1.4.10"
"@jridgewell/trace-mapping" "^0.3.9"
-"@jridgewell/resolve-uri@3.1.0":
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
- integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
+"@jridgewell/resolve-uri@^3.1.0":
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721"
+ integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==
"@jridgewell/set-array@^1.0.1":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
-"@jridgewell/sourcemap-codec@1.4.14":
- version "1.4.14"
- resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
- integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
-
-"@jridgewell/sourcemap-codec@^1.4.10":
+"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
version "1.4.15"
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
"@jridgewell/trace-mapping@^0.3.9":
- version "0.3.18"
- resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6"
- integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==
+ version "0.3.20"
+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f"
+ integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==
dependencies:
- "@jridgewell/resolve-uri" "3.1.0"
- "@jridgewell/sourcemap-codec" "1.4.14"
+ "@jridgewell/resolve-uri" "^3.1.0"
+ "@jridgewell/sourcemap-codec" "^1.4.14"
+
+"@mantine/carousel@^7.1.5":
+ version "7.3.2"
+ resolved "https://registry.yarnpkg.com/@mantine/carousel/-/carousel-7.3.2.tgz#81c6258b4cdbce113496a9b0d78f7d1f2bd5b76c"
+ integrity sha512-wv6jfh8RU1Fz5iQREYFtHtK/iG1APHkdYmYxRTZdhCZxNPdb4PDQvZJBz+tjYWpKN2IKUu2NlAdmP0hIMI0bHw==
"@mantine/core@^6.0.17":
- version "6.0.17"
- resolved "https://registry.yarnpkg.com/@mantine/core/-/core-6.0.17.tgz#734b31c79199a9cf2bfb0bbd7482f5c2c411ff9a"
- integrity sha512-g3EDxcTJKisvEGTsGJPCGXiDumwr4O0nGNXwoGLnrg19nh3FAMfEIq18sJJLtRrBuarSbrvgMVYvKx1R6rTOWg==
+ version "6.0.21"
+ resolved "https://registry.yarnpkg.com/@mantine/core/-/core-6.0.21.tgz#6e3a1b8d0f6869518a644d5f5e3d55a5db7e1e51"
+ integrity sha512-Kx4RrRfv0I+cOCIcsq/UA2aWcYLyXgW3aluAuW870OdXnbII6qg7RW28D+r9D76SHPxWFKwIKwmcucAG08Divg==
dependencies:
"@floating-ui/react" "^0.19.1"
- "@mantine/styles" "6.0.17"
- "@mantine/utils" "6.0.17"
+ "@mantine/styles" "6.0.21"
+ "@mantine/utils" "6.0.21"
"@radix-ui/react-scroll-area" "1.0.2"
react-remove-scroll "^2.5.5"
react-textarea-autosize "8.3.4"
+"@mantine/dropzone@^7.1.3":
+ version "7.3.2"
+ resolved "https://registry.yarnpkg.com/@mantine/dropzone/-/dropzone-7.3.2.tgz#358d99089318e62bc520040a55708a31b0ab7259"
+ integrity sha512-SqeBARkfS/x8UkxTc8qup7oWF1NDXP2WsbzllsLpjnlH7A/MpNgEUHs/y6oUF0Sxnc3g5Z0cvzHlZpFiWDGCmg==
+ dependencies:
+ react-dropzone-esm "15.0.1"
+
"@mantine/hooks@^6.0.17":
- version "6.0.17"
- resolved "https://registry.yarnpkg.com/@mantine/hooks/-/hooks-6.0.17.tgz#dc942c87e6dcfa14a70e4e4a162c22eeb4ff3724"
- integrity sha512-7vf2w1NlzKlUynSuyI2DAIKoEOYKYC8k+tlSsk3BRdbzhbJAiWxcYzJy5seg5dFW1WIpKAZ0wiVdHXf/WRlRgg==
+ version "6.0.21"
+ resolved "https://registry.yarnpkg.com/@mantine/hooks/-/hooks-6.0.21.tgz#bc009d8380ad18455b90f3ddaf484de16a13da95"
+ integrity sha512-sYwt5wai25W6VnqHbS5eamey30/HD5dNXaZuaVEAJ2i2bBv8C0cCiczygMDpAFiSYdXoSMRr/SZ2CrrPTzeNew==
"@mantine/next@^6.0.17":
- version "6.0.17"
- resolved "https://registry.yarnpkg.com/@mantine/next/-/next-6.0.17.tgz#126ba2e6a339648ee47bbe82018cb19826b09a07"
- integrity sha512-/JmKysJ0blftAU8+YtWZ4m3MIXUtiyaPXamEYCkcv+V+8oAa9x4EquX/eK6gOVbEEhUoHGCbIZ3nt54NQiC2dQ==
+ version "6.0.21"
+ resolved "https://registry.yarnpkg.com/@mantine/next/-/next-6.0.21.tgz#22e3c9a7e43f3efaa865b3490961f700a85d66fe"
+ integrity sha512-McaVZZsmUol3yY92mSJSgcMQKFST97pVxNtI7Z52YocyuTjPPFXmqxF/TFj24A7noh1wzvRCPjfd9HX66sY+iQ==
dependencies:
- "@mantine/ssr" "6.0.17"
- "@mantine/styles" "6.0.17"
+ "@mantine/ssr" "6.0.21"
+ "@mantine/styles" "6.0.21"
-"@mantine/ssr@6.0.17":
- version "6.0.17"
- resolved "https://registry.yarnpkg.com/@mantine/ssr/-/ssr-6.0.17.tgz#42989361fca774482ef332ec04e569861c73182d"
- integrity sha512-l4G0GROr/1w96uWmEMrczwxLF5BSR0b2uK/ErTrq6+ozmrFSl+LvU/JKoYnyoo+bgbfhVn8dpNOxpkOYF5fTDg==
+"@mantine/notifications@^6.0.17":
+ version "6.0.21"
+ resolved "https://registry.yarnpkg.com/@mantine/notifications/-/notifications-6.0.21.tgz#bec53664abce13a2cc61a1be1840d82a746f62da"
+ integrity sha512-qsrqxuJHK8b67sf9Pfk+xyhvpf9jMsivW8vchfnJfjv7yz1lLvezjytMFp4fMDoYhjHnDPOEc/YFockK4muhOw==
dependencies:
- "@mantine/styles" "6.0.17"
+ "@mantine/utils" "6.0.21"
+ react-transition-group "4.4.2"
+
+"@mantine/ssr@6.0.21":
+ version "6.0.21"
+ resolved "https://registry.yarnpkg.com/@mantine/ssr/-/ssr-6.0.21.tgz#3e6f347af944324b01f16d852ec5850f6555ce5f"
+ integrity sha512-TVPiz7VxbBntT42UFg4LCRqsv6HM5nvL5d2jBBbFcg9oztJ/5KVGhrtWbu2+kpq/uWWOpmE0sKDs3HQ/qr1PdQ==
+ dependencies:
+ "@mantine/styles" "6.0.21"
html-react-parser "1.4.12"
-"@mantine/styles@6.0.17":
- version "6.0.17"
- resolved "https://registry.yarnpkg.com/@mantine/styles/-/styles-6.0.17.tgz#fef8a64f0e32b970c397e1c22dceb6ab09fb090f"
- integrity sha512-utNwQJgKHguNS0iPyyeFRJy4nbt280XMbmfUf4GCxXlyl/mQxq+JoaKP/OmU7+8kfbtLS9kHeuBSghrC65Nt1g==
+"@mantine/styles@6.0.21":
+ version "6.0.21"
+ resolved "https://registry.yarnpkg.com/@mantine/styles/-/styles-6.0.21.tgz#8ea097fc76cbb3ed55f5cfd719d2f910aff5031b"
+ integrity sha512-PVtL7XHUiD/B5/kZ/QvZOZZQQOj12QcRs3Q6nPoqaoPcOX5+S7bMZLMH0iLtcGq5OODYk0uxlvuJkOZGoPj8Mg==
dependencies:
clsx "1.1.1"
csstype "3.0.9"
-"@mantine/utils@6.0.17":
- version "6.0.17"
- resolved "https://registry.yarnpkg.com/@mantine/utils/-/utils-6.0.17.tgz#7d4a6c7686a3ee19a0ac248ef14780f00730837b"
- integrity sha512-U6SWV/asYE6NhiHx4ltmVZdQR3HwGVqJxVulhOylMcV1tX/P1LMQUCbGV2Oe4O9jbX4/YW5B/CBb4BbEhENQFQ==
+"@mantine/utils@6.0.21":
+ version "6.0.21"
+ resolved "https://registry.yarnpkg.com/@mantine/utils/-/utils-6.0.21.tgz#6185506e91cba3e308aaa8ea9ababc8e767995d6"
+ integrity sha512-33RVDRop5jiWFao3HKd3Yp7A9mEq4HAJxJPTuYm1NkdqX6aTKOQK7wT8v8itVodBp+sb4cJK6ZVdD1UurK/txQ==
-"@next/env@13.4.12":
- version "13.4.12"
- resolved "https://registry.yarnpkg.com/@next/env/-/env-13.4.12.tgz#0b88115ab817f178bf9dc0c5e7b367277595b58d"
- integrity sha512-RmHanbV21saP/6OEPBJ7yJMuys68cIf8OBBWd7+uj40LdpmswVAwe1uzeuFyUsd6SfeITWT3XnQfn6wULeKwDQ==
+"@next/env@13.5.6":
+ version "13.5.6"
+ resolved "https://registry.yarnpkg.com/@next/env/-/env-13.5.6.tgz#c1148e2e1aa166614f05161ee8f77ded467062bc"
+ integrity sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw==
"@next/eslint-plugin-next@13.4.12":
version "13.4.12"
@@ -333,50 +369,50 @@
dependencies:
glob "7.1.7"
-"@next/swc-darwin-arm64@13.4.12":
- version "13.4.12"
- resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.12.tgz#326c830b111de8a1a51ac0cbc3bcb157c4c4f92c"
- integrity sha512-deUrbCXTMZ6ZhbOoloqecnUeNpUOupi8SE2tx4jPfNS9uyUR9zK4iXBvH65opVcA/9F5I/p8vDXSYbUlbmBjZg==
+"@next/swc-darwin-arm64@13.5.6":
+ version "13.5.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.6.tgz#b15d139d8971360fca29be3bdd703c108c9a45fb"
+ integrity sha512-5nvXMzKtZfvcu4BhtV0KH1oGv4XEW+B+jOfmBdpFI3C7FrB/MfujRpWYSBBO64+qbW8pkZiSyQv9eiwnn5VIQA==
-"@next/swc-darwin-x64@13.4.12":
- version "13.4.12"
- resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.12.tgz#dd5c49fc092a8ffe4f30b7aa9bf6c5d2e40bbfa1"
- integrity sha512-WRvH7RxgRHlC1yb5oG0ZLx8F7uci9AivM5/HGGv9ZyG2Als8Ij64GC3d+mQ5sJhWjusyU6T6V1WKTUoTmOB0zQ==
+"@next/swc-darwin-x64@13.5.6":
+ version "13.5.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.6.tgz#9c72ee31cc356cb65ce6860b658d807ff39f1578"
+ integrity sha512-6cgBfxg98oOCSr4BckWjLLgiVwlL3vlLj8hXg2b+nDgm4bC/qVXXLfpLB9FHdoDu4057hzywbxKvmYGmi7yUzA==
-"@next/swc-linux-arm64-gnu@13.4.12":
- version "13.4.12"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.12.tgz#816cbe9d26ce4670ea99d95b66041e483ed122d6"
- integrity sha512-YEKracAWuxp54tKiAvvq73PUs9lok57cc8meYRibTWe/VdPB2vLgkTVWFcw31YDuRXdEhdX0fWS6Q+ESBhnEig==
+"@next/swc-linux-arm64-gnu@13.5.6":
+ version "13.5.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.6.tgz#59f5f66155e85380ffa26ee3d95b687a770cfeab"
+ integrity sha512-txagBbj1e1w47YQjcKgSU4rRVQ7uF29YpnlHV5xuVUsgCUf2FmyfJ3CPjZUvpIeXCJAoMCFAoGnbtX86BK7+sg==
-"@next/swc-linux-arm64-musl@13.4.12":
- version "13.4.12"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.12.tgz#670c8aee221628f65e5b299ee84db746e6c778b0"
- integrity sha512-LhJR7/RAjdHJ2Isl2pgc/JaoxNk0KtBgkVpiDJPVExVWA1c6gzY57+3zWuxuyWzTG+fhLZo2Y80pLXgIJv7g3g==
+"@next/swc-linux-arm64-musl@13.5.6":
+ version "13.5.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.6.tgz#f012518228017052736a87d69bae73e587c76ce2"
+ integrity sha512-cGd+H8amifT86ZldVJtAKDxUqeFyLWW+v2NlBULnLAdWsiuuN8TuhVBt8ZNpCqcAuoruoSWynvMWixTFcroq+Q==
-"@next/swc-linux-x64-gnu@13.4.12":
- version "13.4.12"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.12.tgz#54c64e689f007ae463698dddc1c6637491c99cb4"
- integrity sha512-1DWLL/B9nBNiQRng+1aqs3OaZcxC16Nf+mOnpcrZZSdyKHek3WQh6j/fkbukObgNGwmCoVevLUa/p3UFTTqgqg==
+"@next/swc-linux-x64-gnu@13.5.6":
+ version "13.5.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.6.tgz#339b867a7e9e7ee727a700b496b269033d820df4"
+ integrity sha512-Mc2b4xiIWKXIhBy2NBTwOxGD3nHLmq4keFk+d4/WL5fMsB8XdJRdtUlL87SqVCTSaf1BRuQQf1HvXZcy+rq3Nw==
-"@next/swc-linux-x64-musl@13.4.12":
- version "13.4.12"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.12.tgz#9cbddf4e542ef3d32284e0c36ce102facc015f8b"
- integrity sha512-kEAJmgYFhp0VL+eRWmUkVxLVunn7oL9Mdue/FS8yzRBVj7Z0AnIrHpTIeIUl1bbdQq1VaoOztnKicAjfkLTRCQ==
+"@next/swc-linux-x64-musl@13.5.6":
+ version "13.5.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.6.tgz#ae0ae84d058df758675830bcf70ca1846f1028f2"
+ integrity sha512-CFHvP9Qz98NruJiUnCe61O6GveKKHpJLloXbDSWRhqhkJdZD2zU5hG+gtVJR//tyW897izuHpM6Gtf6+sNgJPQ==
-"@next/swc-win32-arm64-msvc@13.4.12":
- version "13.4.12"
- resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.12.tgz#3467a4b25429ccf49fd416388c9d19c80a4f6465"
- integrity sha512-GMLuL/loR6yIIRTnPRY6UGbLL9MBdw2anxkOnANxvLvsml4F0HNIgvnU3Ej4BjbqMTNjD4hcPFdlEow4XHPdZA==
+"@next/swc-win32-arm64-msvc@13.5.6":
+ version "13.5.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.6.tgz#a5cc0c16920485a929a17495064671374fdbc661"
+ integrity sha512-aFv1ejfkbS7PUa1qVPwzDHjQWQtknzAZWGTKYIAaS4NMtBlk3VyA6AYn593pqNanlicewqyl2jUhQAaFV/qXsg==
-"@next/swc-win32-ia32-msvc@13.4.12":
- version "13.4.12"
- resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.12.tgz#73494cd167191946833c680b28d6a42435d383a8"
- integrity sha512-PhgNqN2Vnkm7XaMdRmmX0ZSwZXQAtamBVSa9A/V1dfKQCV1rjIZeiy/dbBnVYGdj63ANfsOR/30XpxP71W0eww==
+"@next/swc-win32-ia32-msvc@13.5.6":
+ version "13.5.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.6.tgz#6a2409b84a2cbf34bf92fe714896455efb4191e4"
+ integrity sha512-XqqpHgEIlBHvzwG8sp/JXMFkLAfGLqkbVsyN+/Ih1mR8INb6YCc2x/Mbwi6hsAgUnqQztz8cvEbHJUbSl7RHDg==
-"@next/swc-win32-x64-msvc@13.4.12":
- version "13.4.12"
- resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.12.tgz#4a497edc4e8c5ee3c3eb27cf0eb39dfadff70874"
- integrity sha512-Z+56e/Ljt0bUs+T+jPjhFyxYBcdY2RIq9ELFU+qAMQMteHo7ymbV7CKmlcX59RI9C4YzN8PgMgLyAoi916b5HA==
+"@next/swc-win32-x64-msvc@13.5.6":
+ version "13.5.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.6.tgz#4a3e2a206251abc729339ba85f60bc0433c2865d"
+ integrity sha512-Cqfe1YmOS7k+5mGu92nl5ULkzpKuxJrP3+4AEuPmrpFZ3BHxTY3TnHmU1On3bFmFFs6FbTcdF58CCUProGpIGQ==
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
@@ -399,29 +435,42 @@
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"
-"@pkgr/utils@^2.3.1":
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.2.tgz#9e638bbe9a6a6f165580dc943f138fd3309a2cbc"
- integrity sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==
+"@peculiar/asn1-schema@^2.3.6":
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.3.8.tgz#04b38832a814e25731232dd5be883460a156da3b"
+ integrity sha512-ULB1XqHKx1WBU/tTFIA+uARuRoBVZ4pNdOA878RDrRbBfBGcSzi5HBkdScC6ZbHn8z7L8gmKCgPC1LHRrP46tA==
dependencies:
- cross-spawn "^7.0.3"
- fast-glob "^3.3.0"
- is-glob "^4.0.3"
- open "^9.1.0"
- picocolors "^1.0.0"
- tslib "^2.6.0"
+ asn1js "^3.0.5"
+ pvtsutils "^1.3.5"
+ tslib "^2.6.2"
+
+"@peculiar/json-schema@^1.1.12":
+ version "1.1.12"
+ resolved "https://registry.yarnpkg.com/@peculiar/json-schema/-/json-schema-1.1.12.tgz#fe61e85259e3b5ba5ad566cb62ca75b3d3cd5339"
+ integrity sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==
+ dependencies:
+ tslib "^2.0.0"
+
+"@peculiar/webcrypto@^1.4.0":
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/@peculiar/webcrypto/-/webcrypto-1.4.3.tgz#078b3e8f598e847b78683dc3ba65feb5029b93a7"
+ integrity sha512-VtaY4spKTdN5LjJ04im/d/joXuvLbQdgy5Z4DXF4MFZhQ+MTrejbNMkfZBp1Bs3O5+bFqnJgyGdPuZQflvIa5A==
+ dependencies:
+ "@peculiar/asn1-schema" "^2.3.6"
+ "@peculiar/json-schema" "^1.1.12"
+ pvtsutils "^1.3.2"
+ tslib "^2.5.0"
+ webcrypto-core "^1.7.7"
+
+"@pkgjs/parseargs@^0.11.0":
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
+ integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
"@prisma/client@^5.0.0":
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/@prisma/client/-/client-5.0.0.tgz#9f0cd4164f4ffddb28bb1811c27eb7fa1e01a087"
- integrity sha512-XlO5ELNAQ7rV4cXIDJUNBEgdLwX3pjtt9Q/RHqDpGf43szpNJx2hJnggfFs7TKNx0cOFsl6KJCSfqr5duEU/bQ==
- dependencies:
- "@prisma/engines-version" "4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584"
-
-"@prisma/engines-version@4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584":
- version "4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584"
- resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584.tgz#b36eda5620872d3fac810c302a7e46cf41daa033"
- integrity sha512-HHiUF6NixsldsP3JROq07TYBLEjXFKr6PdH8H4gK/XAoTmIplOJBCgrIUMrsRAnEuGyRoRLXKXWUb943+PFoKQ==
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/@prisma/client/-/client-5.7.1.tgz#a124afd05663267f7255a639a81d28303684a063"
+ integrity sha512-TUSa4nUcC4nf/e7X3jyO1pEd6XcI/TLRCA0KjkA46RDIpxUaRsBYEOqITwXRW2c0bMFyKcCRXrH4f7h4q9oOlg==
"@radix-ui/number@1.0.0":
version "1.0.0"
@@ -514,36 +563,189 @@
"@babel/runtime" "^7.13.10"
"@rushstack/eslint-patch@^1.1.3":
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.3.2.tgz#31b9c510d8cada9683549e1dbb4284cca5001faf"
- integrity sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw==
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.6.1.tgz#9ab8f811930d7af3e3d549183a50884f9eb83f36"
+ integrity sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==
-"@swc/helpers@0.5.1":
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.1.tgz#e9031491aa3f26bfcc974a67f48bd456c8a5357a"
- integrity sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==
+"@socket.io/component-emitter@~3.1.0":
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553"
+ integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==
+
+"@swc/helpers@0.5.2":
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.2.tgz#85ea0c76450b61ad7d10a37050289eded783c27d"
+ integrity sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==
dependencies:
tslib "^2.4.0"
+"@tabler/icons-react@^2.38.0":
+ version "2.44.0"
+ resolved "https://registry.yarnpkg.com/@tabler/icons-react/-/icons-react-2.44.0.tgz#8119d3b6321ebaf98400fba7932e280d008125f8"
+ integrity sha512-10qwrqJ/QBNgY4YYer9PjWmCwm3wv9aVK8kGAkFKkwu6UJURVLZ2ea+oFh5j6vSXnA1zMtUG+X8anR5fZ67Isw==
+ dependencies:
+ "@tabler/icons" "2.44.0"
+ prop-types "^15.7.2"
+
+"@tabler/icons@2.44.0":
+ version "2.44.0"
+ resolved "https://registry.yarnpkg.com/@tabler/icons/-/icons-2.44.0.tgz#9f3cf86150b23e84a6eaf9d29ab2b2aaa8c7eed6"
+ integrity sha512-WPPtihDcAwEm1QZM9MXQw6+r/R2/qx7KMU1eegsi9DsqBLAb0W2kbt6e/syvd6j9c+6XNpRVBW1ziGqSWQAWOg==
+
+"@types/accepts@*":
+ version "1.3.7"
+ resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.7.tgz#3b98b1889d2b2386604c2bbbe62e4fb51e95b265"
+ integrity sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==
+ dependencies:
+ "@types/node" "*"
+
+"@types/body-parser@*":
+ version "1.19.5"
+ resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4"
+ integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==
+ dependencies:
+ "@types/connect" "*"
+ "@types/node" "*"
+
+"@types/connect@*":
+ version "3.4.38"
+ resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858"
+ integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==
+ dependencies:
+ "@types/node" "*"
+
+"@types/content-disposition@*":
+ version "0.5.8"
+ resolved "https://registry.yarnpkg.com/@types/content-disposition/-/content-disposition-0.5.8.tgz#6742a5971f490dc41e59d277eee71361fea0b537"
+ integrity sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==
+
+"@types/cookie@^0.5.1":
+ version "0.5.4"
+ resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.5.4.tgz#7e70a20cd695bc48d46b08c2505874cd68b760e0"
+ integrity sha512-7z/eR6O859gyWIAjuvBWFzNURmf2oPBmJlfVWkwehU5nzIyjwBsTh7WMmEEV4JFnHuQ3ex4oyTvfKzcyJVDBNA==
+
+"@types/cookies@*":
+ version "0.7.10"
+ resolved "https://registry.yarnpkg.com/@types/cookies/-/cookies-0.7.10.tgz#c4881dca4dd913420c488508d192496c46eb4fd0"
+ integrity sha512-hmUCjAk2fwZVPPkkPBcI7jGLIR5mg4OVoNMBwU6aVsMm/iNPY7z9/R+x2fSwLt/ZXoGua6C5Zy2k5xOo9jUyhQ==
+ dependencies:
+ "@types/connect" "*"
+ "@types/express" "*"
+ "@types/keygrip" "*"
+ "@types/node" "*"
+
+"@types/express-serve-static-core@^4.17.33":
+ version "4.17.41"
+ resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz#5077defa630c2e8d28aa9ffc2c01c157c305bef6"
+ integrity sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==
+ dependencies:
+ "@types/node" "*"
+ "@types/qs" "*"
+ "@types/range-parser" "*"
+ "@types/send" "*"
+
+"@types/express@*", "@types/express@^4.17.13":
+ version "4.17.21"
+ resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d"
+ integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==
+ dependencies:
+ "@types/body-parser" "*"
+ "@types/express-serve-static-core" "^4.17.33"
+ "@types/qs" "*"
+ "@types/serve-static" "*"
+
+"@types/http-assert@*":
+ version "1.5.5"
+ resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.5.5.tgz#dfb1063eb7c240ee3d3fe213dac5671cfb6a8dbf"
+ integrity sha512-4+tE/lwdAahgZT1g30Jkdm9PzFRde0xwxBNUyRsCitRvCQB90iuA2uJYdUnhnANRcqGXaWOGY4FEoxeElNAK2g==
+
+"@types/http-errors@*":
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f"
+ integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==
+
"@types/json5@^0.0.29":
version "0.0.29"
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
+"@types/keygrip@*":
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.6.tgz#1749535181a2a9b02ac04a797550a8787345b740"
+ integrity sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==
+
+"@types/koa-compose@*":
+ version "3.2.8"
+ resolved "https://registry.yarnpkg.com/@types/koa-compose/-/koa-compose-3.2.8.tgz#dec48de1f6b3d87f87320097686a915f1e954b57"
+ integrity sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==
+ dependencies:
+ "@types/koa" "*"
+
+"@types/koa@*", "@types/koa@^2.13.5":
+ version "2.13.12"
+ resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.13.12.tgz#70d87a9061a81909e0ee11ca50168416e8d3e795"
+ integrity sha512-vAo1KuDSYWFDB4Cs80CHvfmzSQWeUb909aQib0C0aFx4sw0K9UZFz2m5jaEP+b3X1+yr904iQiruS0hXi31jbw==
+ dependencies:
+ "@types/accepts" "*"
+ "@types/content-disposition" "*"
+ "@types/cookies" "*"
+ "@types/http-assert" "*"
+ "@types/http-errors" "*"
+ "@types/keygrip" "*"
+ "@types/koa-compose" "*"
+ "@types/node" "*"
+
+"@types/lodash@^4.14.199":
+ version "4.14.202"
+ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.202.tgz#f09dbd2fb082d507178b2f2a5c7e74bd72ff98f8"
+ integrity sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==
+
+"@types/mime@*":
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.4.tgz#2198ac274de6017b44d941e00261d5bc6a0e0a45"
+ integrity sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==
+
+"@types/mime@^1":
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690"
+ integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==
+
+"@types/node@*":
+ version "20.10.5"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.5.tgz#47ad460b514096b7ed63a1dae26fad0914ed3ab2"
+ integrity sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==
+ dependencies:
+ undici-types "~5.26.4"
+
"@types/node@20.4.5":
version "20.4.5"
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.5.tgz#9dc0a5cb1ccce4f7a731660935ab70b9c00a5d69"
integrity sha512-rt40Nk13II9JwQBdeYqmbn2Q6IVTA5uPhvSO+JVqdXw/6/4glI6oR9ezty/A9Hg5u7JH4OmYmuQ+XvjKm0Datg==
+"@types/node@^17.0.41":
+ version "17.0.45"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190"
+ integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==
+
"@types/parse-json@^4.0.0":
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
- integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239"
+ integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==
"@types/prop-types@*":
- version "15.7.5"
- resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf"
- integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==
+ version "15.7.11"
+ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563"
+ integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==
+
+"@types/qs@*":
+ version "6.9.11"
+ resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.11.tgz#208d8a30bc507bd82e03ada29e4732ea46a6bbda"
+ integrity sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==
+
+"@types/range-parser@*":
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb"
+ integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==
"@types/react-dom@18.2.7":
version "18.2.7"
@@ -552,7 +754,16 @@
dependencies:
"@types/react" "*"
-"@types/react@*", "@types/react@18.2.17":
+"@types/react@*":
+ version "18.2.45"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.45.tgz#253f4fac288e7e751ab3dc542000fb687422c15c"
+ integrity sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==
+ dependencies:
+ "@types/prop-types" "*"
+ "@types/scheduler" "*"
+ csstype "^3.0.2"
+
+"@types/react@18.2.17":
version "18.2.17"
resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.17.tgz#baa565b17ddb649c2dac85b5eaf9e9a1fe0f3b4e"
integrity sha512-u+e7OlgPPh+aryjOm5UJMX32OvB2E3QASOAqVMY6Ahs90djagxwv2ya0IctglNbNTexC12qCSMZG47KPfy1hAA==
@@ -562,9 +773,31 @@
csstype "^3.0.2"
"@types/scheduler@*":
- version "0.16.3"
- resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5"
- integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==
+ version "0.16.8"
+ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff"
+ integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==
+
+"@types/send@*":
+ version "0.17.4"
+ resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a"
+ integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==
+ dependencies:
+ "@types/mime" "^1"
+ "@types/node" "*"
+
+"@types/serve-static@*":
+ version "1.15.5"
+ resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.5.tgz#15e67500ec40789a1e8c9defc2d32a896f05b033"
+ integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==
+ dependencies:
+ "@types/http-errors" "*"
+ "@types/mime" "*"
+ "@types/node" "*"
+
+"@types/uuid@^9.0.4":
+ version "9.0.7"
+ resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.7.tgz#b14cebc75455eeeb160d5fe23c2fcc0c64f724d8"
+ integrity sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==
"@typescript-eslint/parser@^5.42.0":
version "5.62.0"
@@ -616,9 +849,9 @@ acorn-jsx@^5.3.2:
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
acorn@^8.9.0:
- version "8.10.0"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5"
- integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==
+ version "8.11.2"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b"
+ integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==
ajv@^6.10.0, ajv@^6.12.4:
version "6.12.6"
@@ -635,6 +868,11 @@ ansi-regex@^5.0.1:
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+ansi-regex@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
+ integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
+
ansi-styles@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
@@ -642,13 +880,18 @@ ansi-styles@^3.2.1:
dependencies:
color-convert "^1.9.0"
-ansi-styles@^4.1.0:
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
dependencies:
color-convert "^2.0.1"
+ansi-styles@^6.1.0:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
+ integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
+
any-promise@^1.0.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
@@ -679,7 +922,7 @@ aria-hidden@^1.1.3:
dependencies:
tslib "^2.0.0"
-aria-query@^5.1.3:
+aria-query@^5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e"
integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==
@@ -694,15 +937,15 @@ array-buffer-byte-length@^1.0.0:
call-bind "^1.0.2"
is-array-buffer "^3.0.1"
-array-includes@^3.1.6:
- version "3.1.6"
- resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f"
- integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==
+array-includes@^3.1.6, array-includes@^3.1.7:
+ version "3.1.7"
+ resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda"
+ integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==
dependencies:
call-bind "^1.0.2"
- define-properties "^1.1.4"
- es-abstract "^1.20.4"
- get-intrinsic "^1.1.3"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
+ get-intrinsic "^1.2.1"
is-string "^1.0.7"
array-union@^2.1.0:
@@ -710,53 +953,81 @@ array-union@^2.1.0:
resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
-array.prototype.flat@^1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2"
- integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==
+array.prototype.findlastindex@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207"
+ integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==
dependencies:
call-bind "^1.0.2"
- define-properties "^1.1.4"
- es-abstract "^1.20.4"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
+ es-shim-unscopables "^1.0.0"
+ get-intrinsic "^1.2.1"
+
+array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18"
+ integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
es-shim-unscopables "^1.0.0"
-array.prototype.flatmap@^1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183"
- integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==
+array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527"
+ integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==
dependencies:
call-bind "^1.0.2"
- define-properties "^1.1.4"
- es-abstract "^1.20.4"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
es-shim-unscopables "^1.0.0"
array.prototype.tosorted@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532"
- integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz#620eff7442503d66c799d95503f82b475745cefd"
+ integrity sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==
dependencies:
call-bind "^1.0.2"
- define-properties "^1.1.4"
- es-abstract "^1.20.4"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
es-shim-unscopables "^1.0.0"
- get-intrinsic "^1.1.3"
+ get-intrinsic "^1.2.1"
-arraybuffer.prototype.slice@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz#9b5ea3868a6eebc30273da577eb888381c0044bb"
- integrity sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==
+arraybuffer.prototype.slice@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12"
+ integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==
dependencies:
array-buffer-byte-length "^1.0.0"
call-bind "^1.0.2"
define-properties "^1.2.0"
+ es-abstract "^1.22.1"
get-intrinsic "^1.2.1"
is-array-buffer "^3.0.2"
is-shared-array-buffer "^1.0.2"
-ast-types-flow@^0.0.7:
- version "0.0.7"
- resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
- integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==
+asn1js@^3.0.1, asn1js@^3.0.5:
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/asn1js/-/asn1js-3.0.5.tgz#5ea36820443dbefb51cc7f88a2ebb5b462114f38"
+ integrity sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==
+ dependencies:
+ pvtsutils "^1.3.2"
+ pvutils "^1.1.3"
+ tslib "^2.4.0"
+
+ast-types-flow@^0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6"
+ integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==
+
+asynciterator.prototype@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62"
+ integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==
+ dependencies:
+ has-symbols "^1.0.3"
autoprefixer@10.4.14:
version "10.4.14"
@@ -775,12 +1046,19 @@ available-typed-arrays@^1.0.5:
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
-axe-core@^4.6.2:
- version "4.7.2"
- resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0"
- integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==
+axe-core@=4.7.0:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.0.tgz#34ba5a48a8b564f67e103f0aa5768d76e15bbbbf"
+ integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==
-axobject-query@^3.1.1:
+axios@^0.26.0:
+ version "0.26.1"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-0.26.1.tgz#1ede41c51fcf51bbbd6fd43669caaa4f0495aaa9"
+ integrity sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==
+ dependencies:
+ follow-redirects "^1.14.8"
+
+axobject-query@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a"
integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==
@@ -801,23 +1079,16 @@ balanced-match@^1.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
-big-integer@^1.6.44:
- version "1.6.51"
- resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686"
- integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==
+base64-js@^1.3.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+ integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
binary-extensions@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
-bplist-parser@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e"
- integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==
- dependencies:
- big-integer "^1.6.44"
-
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
@@ -826,6 +1097,13 @@ brace-expansion@^1.1.7:
balanced-match "^1.0.0"
concat-map "0.0.1"
+brace-expansion@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
+ integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+ dependencies:
+ balanced-match "^1.0.0"
+
braces@^3.0.2, braces@~3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
@@ -834,26 +1112,27 @@ braces@^3.0.2, braces@~3.0.2:
fill-range "^7.0.1"
browserslist@^4.21.5:
- version "4.21.9"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635"
- integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==
+ version "4.22.2"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b"
+ integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==
dependencies:
- caniuse-lite "^1.0.30001503"
- electron-to-chromium "^1.4.431"
- node-releases "^2.0.12"
- update-browserslist-db "^1.0.11"
+ caniuse-lite "^1.0.30001565"
+ electron-to-chromium "^1.4.601"
+ node-releases "^2.0.14"
+ update-browserslist-db "^1.0.13"
buffer-from@~0.1.1:
version "0.1.2"
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-0.1.2.tgz#15f4b9bcef012044df31142c14333caf6e0260d0"
integrity sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==
-bundle-name@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a"
- integrity sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==
+buffer@^6:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6"
+ integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==
dependencies:
- run-applescript "^5.0.0"
+ base64-js "^1.3.1"
+ ieee754 "^1.2.1"
busboy@1.6.0:
version "1.6.0"
@@ -862,13 +1141,14 @@ busboy@1.6.0:
dependencies:
streamsearch "^1.1.0"
-call-bind@^1.0.0, call-bind@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
- integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
+call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513"
+ integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==
dependencies:
- function-bind "^1.1.1"
- get-intrinsic "^1.0.2"
+ function-bind "^1.1.2"
+ get-intrinsic "^1.2.1"
+ set-function-length "^1.1.1"
callsites@^3.0.0:
version "3.1.0"
@@ -880,12 +1160,12 @@ camelcase-css@^2.0.1:
resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
-caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001503:
- version "1.0.30001517"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz#90fabae294215c3495807eb24fc809e11dc2f0a8"
- integrity sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==
+caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001565:
+ version "1.0.30001572"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001572.tgz#1ccf7dc92d2ee2f92ed3a54e11b7b4a3041acfa0"
+ integrity sha512-1Pbh5FLmn5y4+QhNyJE9j3/7dK44dGB83/ZMjv/qJk86TvDbjk0LosiZo0i0WB0Vx607qMX9jYrn1VLHCkN4rw==
-chalk@^2.0.0:
+chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
@@ -917,6 +1197,11 @@ chokidar@^3.5.3:
optionalDependencies:
fsevents "~2.3.2"
+classnames@^2.2.5:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.0.tgz#9304d63d8d7135989e33e1ffb0bcc65178f92c2a"
+ integrity sha512-FQuRlyKinxrb5gwJlfVASbSrDlikDJ07426TrfPsdGLvtochowmkbnSFdQGJ2aoXrSetq5KqGV9emvWpy+91xA==
+
client-only@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1"
@@ -927,6 +1212,11 @@ clsx@1.1.1:
resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188"
integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==
+clsx@^1.1.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12"
+ integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==
+
color-convert@^1.9.0:
version "1.9.3"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
@@ -966,6 +1256,11 @@ convert-source-map@^1.5.0:
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f"
integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==
+cookie@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
+ integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
+
core-util-is@~1.0.0:
version "1.0.3"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
@@ -982,7 +1277,7 @@ cosmiconfig@^7.0.0:
path-type "^4.0.0"
yaml "^1.10.0"
-cross-spawn@^7.0.2, cross-spawn@^7.0.3:
+cross-spawn@^7.0.0, cross-spawn@^7.0.2:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
@@ -1002,9 +1297,9 @@ csstype@3.0.9:
integrity sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==
csstype@^3.0.2:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b"
- integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
+ integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
damerau-levenshtein@^1.0.8:
version "1.0.8"
@@ -1018,7 +1313,7 @@ debug@^3.2.7:
dependencies:
ms "^2.1.1"
-debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
+debug@^4.1.1, debug@^4.3.2, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2:
version "4.3.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
@@ -1030,34 +1325,21 @@ deep-is@^0.1.3:
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
-default-browser-id@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c"
- integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==
+define-data-property@^1.0.1, define-data-property@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3"
+ integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==
dependencies:
- bplist-parser "^0.2.0"
- untildify "^4.0.0"
+ get-intrinsic "^1.2.1"
+ gopd "^1.0.1"
+ has-property-descriptors "^1.0.0"
-default-browser@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-4.0.0.tgz#53c9894f8810bf86696de117a6ce9085a3cbc7da"
- integrity sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==
- dependencies:
- bundle-name "^3.0.0"
- default-browser-id "^3.0.0"
- execa "^7.1.1"
- titleize "^3.0.0"
-
-define-lazy-prop@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f"
- integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==
-
-define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5"
- integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==
+define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c"
+ integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==
dependencies:
+ define-data-property "^1.0.1"
has-property-descriptors "^1.0.0"
object-keys "^1.1.1"
@@ -1102,6 +1384,14 @@ doctrine@^3.0.0:
dependencies:
esutils "^2.0.2"
+dom-helpers@^5.0.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902"
+ integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==
+ dependencies:
+ "@babel/runtime" "^7.8.7"
+ csstype "^3.0.2"
+
dom-serializer@^1.0.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30"
@@ -1139,16 +1429,60 @@ duplexer2@^0.1.2:
dependencies:
readable-stream "^2.0.2"
-electron-to-chromium@^1.4.431:
- version "1.4.473"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.473.tgz#4853de13a335c70fe1f9df8d4029be54068767d1"
- integrity sha512-aVfC8+440vGfl06l8HKKn8/PD5jRfSnLkTTD65EFvU46igbpQRri1gxSzW9/+TeUlwYzrXk1sw867T96zlyECA==
+eastasianwidth@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
+ integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
+
+electron-to-chromium@^1.4.601:
+ version "1.4.616"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.616.tgz#4bddbc2c76e1e9dbf449ecd5da3d8119826ea4fb"
+ integrity sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==
+
+embla-carousel-react@^8.0.0-rc14:
+ version "8.0.0-rc17"
+ resolved "https://registry.yarnpkg.com/embla-carousel-react/-/embla-carousel-react-8.0.0-rc17.tgz#277d4212eb95b6a29898b65660efe60d2075aa3a"
+ integrity sha512-x4aFprwFB+PQO9EsHHZsrDxARb0uYNBYn9mr5oDFdBdPez4M8G1r5yidWbUcT9pNUc8AQXC9sGzlfauBfBxVOw==
+ dependencies:
+ embla-carousel "8.0.0-rc17"
+ embla-carousel-reactive-utils "8.0.0-rc17"
+
+embla-carousel-reactive-utils@8.0.0-rc17:
+ version "8.0.0-rc17"
+ resolved "https://registry.yarnpkg.com/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.0.0-rc17.tgz#a94934fdce7faa7464581d6c9f10d9e8ed63ca42"
+ integrity sha512-eluEOK/u5HdjYaTLC4bUG3iTCnyX7RsYix3il0aH4ZECOKa5fS+pVK2vrM17Mgw6C5Hyjcr3r3lfJtGerVzVsQ==
+
+embla-carousel@8.0.0-rc17:
+ version "8.0.0-rc17"
+ resolved "https://registry.yarnpkg.com/embla-carousel/-/embla-carousel-8.0.0-rc17.tgz#146dc802d8742b88834ac7ea34416b0f0e983e93"
+ integrity sha512-evF49b88VOitvqFtlvhvKVSu96Y8A+QSFdhok87Bfm8R7OYuk95FT+o8+M1GQLi/EhGDUlT193HTVAR0Wt2neQ==
+
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
emoji-regex@^9.2.2:
version "9.2.2"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+engine.io-client@~6.5.2:
+ version "6.5.3"
+ resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.3.tgz#4cf6fa24845029b238f83c628916d9149c399bc5"
+ integrity sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==
+ dependencies:
+ "@socket.io/component-emitter" "~3.1.0"
+ debug "~4.3.1"
+ engine.io-parser "~5.2.1"
+ ws "~8.11.0"
+ xmlhttprequest-ssl "~2.0.0"
+
+engine.io-parser@~5.2.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.1.tgz#9f213c77512ff1a6cc0c7a86108a7ffceb16fcfb"
+ integrity sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==
+
enhanced-resolve@^5.12.0:
version "5.15.0"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35"
@@ -1174,26 +1508,26 @@ error-ex@^1.3.1:
dependencies:
is-arrayish "^0.2.1"
-es-abstract@^1.19.0, es-abstract@^1.20.4:
- version "1.22.1"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc"
- integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==
+es-abstract@^1.22.1:
+ version "1.22.3"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32"
+ integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==
dependencies:
array-buffer-byte-length "^1.0.0"
- arraybuffer.prototype.slice "^1.0.1"
+ arraybuffer.prototype.slice "^1.0.2"
available-typed-arrays "^1.0.5"
- call-bind "^1.0.2"
+ call-bind "^1.0.5"
es-set-tostringtag "^2.0.1"
es-to-primitive "^1.2.1"
- function.prototype.name "^1.1.5"
- get-intrinsic "^1.2.1"
+ function.prototype.name "^1.1.6"
+ get-intrinsic "^1.2.2"
get-symbol-description "^1.0.0"
globalthis "^1.0.3"
gopd "^1.0.1"
- has "^1.0.3"
has-property-descriptors "^1.0.0"
has-proto "^1.0.1"
has-symbols "^1.0.3"
+ hasown "^2.0.0"
internal-slot "^1.0.5"
is-array-buffer "^3.0.2"
is-callable "^1.2.7"
@@ -1201,39 +1535,59 @@ es-abstract@^1.19.0, es-abstract@^1.20.4:
is-regex "^1.1.4"
is-shared-array-buffer "^1.0.2"
is-string "^1.0.7"
- is-typed-array "^1.1.10"
+ is-typed-array "^1.1.12"
is-weakref "^1.0.2"
- object-inspect "^1.12.3"
+ object-inspect "^1.13.1"
object-keys "^1.1.1"
object.assign "^4.1.4"
- regexp.prototype.flags "^1.5.0"
- safe-array-concat "^1.0.0"
+ regexp.prototype.flags "^1.5.1"
+ safe-array-concat "^1.0.1"
safe-regex-test "^1.0.0"
- string.prototype.trim "^1.2.7"
- string.prototype.trimend "^1.0.6"
- string.prototype.trimstart "^1.0.6"
+ string.prototype.trim "^1.2.8"
+ string.prototype.trimend "^1.0.7"
+ string.prototype.trimstart "^1.0.7"
typed-array-buffer "^1.0.0"
typed-array-byte-length "^1.0.0"
typed-array-byte-offset "^1.0.0"
typed-array-length "^1.0.4"
unbox-primitive "^1.0.2"
- which-typed-array "^1.1.10"
+ which-typed-array "^1.1.13"
+
+es-iterator-helpers@^1.0.12, es-iterator-helpers@^1.0.15:
+ version "1.0.15"
+ resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz#bd81d275ac766431d19305923707c3efd9f1ae40"
+ integrity sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==
+ dependencies:
+ asynciterator.prototype "^1.0.0"
+ call-bind "^1.0.2"
+ define-properties "^1.2.1"
+ es-abstract "^1.22.1"
+ es-set-tostringtag "^2.0.1"
+ function-bind "^1.1.1"
+ get-intrinsic "^1.2.1"
+ globalthis "^1.0.3"
+ has-property-descriptors "^1.0.0"
+ has-proto "^1.0.1"
+ has-symbols "^1.0.3"
+ internal-slot "^1.0.5"
+ iterator.prototype "^1.1.2"
+ safe-array-concat "^1.0.1"
es-set-tostringtag@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8"
- integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9"
+ integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==
dependencies:
- get-intrinsic "^1.1.3"
- has "^1.0.3"
+ get-intrinsic "^1.2.2"
has-tostringtag "^1.0.0"
+ hasown "^2.0.0"
es-shim-unscopables@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241"
- integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763"
+ integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==
dependencies:
- has "^1.0.3"
+ hasown "^2.0.0"
es-to-primitive@^1.2.1:
version "1.2.1"
@@ -1274,30 +1628,29 @@ eslint-config-next@13.4.12:
eslint-plugin-react "^7.31.7"
eslint-plugin-react-hooks "5.0.0-canary-7118f5dd7-20230705"
-eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.7:
- version "0.3.7"
- resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7"
- integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==
+eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.9:
+ version "0.3.9"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac"
+ integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==
dependencies:
debug "^3.2.7"
- is-core-module "^2.11.0"
- resolve "^1.22.1"
+ is-core-module "^2.13.0"
+ resolve "^1.22.4"
eslint-import-resolver-typescript@^3.5.2:
- version "3.5.5"
- resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz#0a9034ae7ed94b254a360fbea89187b60ea7456d"
- integrity sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==
+ version "3.6.1"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz#7b983680edd3f1c5bce1a5829ae0bc2d57fe9efa"
+ integrity sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==
dependencies:
debug "^4.3.4"
enhanced-resolve "^5.12.0"
eslint-module-utils "^2.7.4"
+ fast-glob "^3.3.1"
get-tsconfig "^4.5.0"
- globby "^13.1.3"
is-core-module "^2.11.0"
is-glob "^4.0.3"
- synckit "^0.8.5"
-eslint-module-utils@^2.7.4:
+eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0:
version "2.8.0"
resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49"
integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==
@@ -1305,47 +1658,49 @@ eslint-module-utils@^2.7.4:
debug "^3.2.7"
eslint-plugin-import@^2.26.0:
- version "2.27.5"
- resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65"
- integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==
+ version "2.29.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643"
+ integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==
dependencies:
- array-includes "^3.1.6"
- array.prototype.flat "^1.3.1"
- array.prototype.flatmap "^1.3.1"
+ array-includes "^3.1.7"
+ array.prototype.findlastindex "^1.2.3"
+ array.prototype.flat "^1.3.2"
+ array.prototype.flatmap "^1.3.2"
debug "^3.2.7"
doctrine "^2.1.0"
- eslint-import-resolver-node "^0.3.7"
- eslint-module-utils "^2.7.4"
- has "^1.0.3"
- is-core-module "^2.11.0"
+ eslint-import-resolver-node "^0.3.9"
+ eslint-module-utils "^2.8.0"
+ hasown "^2.0.0"
+ is-core-module "^2.13.1"
is-glob "^4.0.3"
minimatch "^3.1.2"
- object.values "^1.1.6"
- resolve "^1.22.1"
- semver "^6.3.0"
- tsconfig-paths "^3.14.1"
+ object.fromentries "^2.0.7"
+ object.groupby "^1.0.1"
+ object.values "^1.1.7"
+ semver "^6.3.1"
+ tsconfig-paths "^3.15.0"
eslint-plugin-jsx-a11y@^6.5.1:
- version "6.7.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976"
- integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz#2fa9c701d44fcd722b7c771ec322432857fcbad2"
+ integrity sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==
dependencies:
- "@babel/runtime" "^7.20.7"
- aria-query "^5.1.3"
- array-includes "^3.1.6"
- array.prototype.flatmap "^1.3.1"
- ast-types-flow "^0.0.7"
- axe-core "^4.6.2"
- axobject-query "^3.1.1"
+ "@babel/runtime" "^7.23.2"
+ aria-query "^5.3.0"
+ array-includes "^3.1.7"
+ array.prototype.flatmap "^1.3.2"
+ ast-types-flow "^0.0.8"
+ axe-core "=4.7.0"
+ axobject-query "^3.2.1"
damerau-levenshtein "^1.0.8"
emoji-regex "^9.2.2"
- has "^1.0.3"
- jsx-ast-utils "^3.3.3"
- language-tags "=1.0.5"
+ es-iterator-helpers "^1.0.15"
+ hasown "^2.0.0"
+ jsx-ast-utils "^3.3.5"
+ language-tags "^1.0.9"
minimatch "^3.1.2"
- object.entries "^1.1.6"
- object.fromentries "^2.0.6"
- semver "^6.3.0"
+ object.entries "^1.1.7"
+ object.fromentries "^2.0.7"
eslint-plugin-react-hooks@5.0.0-canary-7118f5dd7-20230705:
version "5.0.0-canary-7118f5dd7-20230705"
@@ -1353,14 +1708,15 @@ eslint-plugin-react-hooks@5.0.0-canary-7118f5dd7-20230705:
integrity sha512-AZYbMo/NW9chdL7vk6HQzQhT+PvTAEVqWk9ziruUoW2kAOcN5qNyelv70e0F1VNQAbvutOC9oc+xfWycI9FxDw==
eslint-plugin-react@^7.31.7:
- version "7.33.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.0.tgz#6c356fb0862fec2cd1b04426c669ea746e9b6eb3"
- integrity sha512-qewL/8P34WkY8jAqdQxsiL82pDUeT7nhs8IsuXgfgnsEloKCT4miAV9N9kGtx7/KM9NH/NCGUE7Edt9iGxLXFw==
+ version "7.33.2"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608"
+ integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==
dependencies:
array-includes "^3.1.6"
array.prototype.flatmap "^1.3.1"
array.prototype.tosorted "^1.1.1"
doctrine "^2.1.0"
+ es-iterator-helpers "^1.0.12"
estraverse "^5.3.0"
jsx-ast-utils "^2.4.1 || ^3.0.0"
minimatch "^3.1.2"
@@ -1374,17 +1730,17 @@ eslint-plugin-react@^7.31.7:
string.prototype.matchall "^4.0.8"
eslint-scope@^7.2.0:
- version "7.2.1"
- resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.1.tgz#936821d3462675f25a18ac5fd88a67cc15b393bd"
- integrity sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA==
+ version "7.2.2"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f"
+ integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==
dependencies:
esrecurse "^4.3.0"
estraverse "^5.2.0"
eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1:
- version "3.4.1"
- resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994"
- integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
+ integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
eslint@8.45.0:
version "8.45.0"
@@ -1462,45 +1818,15 @@ esutils@^2.0.2:
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
-execa@^5.0.0:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
- integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
- dependencies:
- cross-spawn "^7.0.3"
- get-stream "^6.0.0"
- human-signals "^2.1.0"
- is-stream "^2.0.0"
- merge-stream "^2.0.0"
- npm-run-path "^4.0.1"
- onetime "^5.1.2"
- signal-exit "^3.0.3"
- strip-final-newline "^2.0.0"
-
-execa@^7.1.1:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9"
- integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==
- dependencies:
- cross-spawn "^7.0.3"
- get-stream "^6.0.1"
- human-signals "^4.3.0"
- is-stream "^3.0.0"
- merge-stream "^2.0.0"
- npm-run-path "^5.1.0"
- onetime "^6.0.0"
- signal-exit "^3.0.7"
- strip-final-newline "^3.0.0"
-
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
-fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.0:
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4"
- integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==
+fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.1:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
+ integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
dependencies:
"@nodelib/fs.stat" "^2.0.2"
"@nodelib/fs.walk" "^1.2.3"
@@ -1519,9 +1845,9 @@ fast-levenshtein@^2.0.6:
integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
fastq@^1.6.0:
- version "1.15.0"
- resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a"
- integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==
+ version "1.16.0"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.16.0.tgz#83b9a9375692db77a822df081edb6a9cf6839320"
+ integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==
dependencies:
reusify "^1.0.4"
@@ -1553,17 +1879,23 @@ find-up@^5.0.0:
path-exists "^4.0.0"
flat-cache@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
- integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee"
+ integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==
dependencies:
- flatted "^3.1.0"
+ flatted "^3.2.9"
+ keyv "^4.5.3"
rimraf "^3.0.2"
-flatted@^3.1.0:
- version "3.2.7"
- resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787"
- integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==
+flatted@^3.2.9:
+ version "3.2.9"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf"
+ integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==
+
+follow-redirects@^1.14.8:
+ version "1.15.3"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a"
+ integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==
for-each@^0.3.3:
version "0.3.3"
@@ -1572,10 +1904,18 @@ for-each@^0.3.3:
dependencies:
is-callable "^1.1.3"
+foreground-child@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d"
+ integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==
+ dependencies:
+ cross-spawn "^7.0.0"
+ signal-exit "^4.0.1"
+
fraction.js@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950"
- integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==
+ version "4.3.7"
+ resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7"
+ integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==
fs.realpath@^1.0.0:
version "1.0.0"
@@ -1583,50 +1923,45 @@ fs.realpath@^1.0.0:
integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
fsevents@~2.3.2:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
- integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
+ integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
-function-bind@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
- integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+function-bind@^1.1.1, function-bind@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
+ integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
-function.prototype.name@^1.1.5:
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621"
- integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==
+function.prototype.name@^1.1.5, function.prototype.name@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd"
+ integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==
dependencies:
call-bind "^1.0.2"
- define-properties "^1.1.3"
- es-abstract "^1.19.0"
- functions-have-names "^1.2.2"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
+ functions-have-names "^1.2.3"
-functions-have-names@^1.2.2, functions-have-names@^1.2.3:
+functions-have-names@^1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
-get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82"
- integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==
+get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b"
+ integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==
dependencies:
- function-bind "^1.1.1"
- has "^1.0.3"
+ function-bind "^1.1.2"
has-proto "^1.0.1"
has-symbols "^1.0.3"
+ hasown "^2.0.0"
get-nonce@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3"
integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==
-get-stream@^6.0.0, get-stream@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
- integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
-
get-symbol-description@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
@@ -1636,9 +1971,9 @@ get-symbol-description@^1.0.0:
get-intrinsic "^1.1.1"
get-tsconfig@^4.5.0:
- version "4.6.2"
- resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.6.2.tgz#831879a5e6c2aa24fe79b60340e2233a1e0f472e"
- integrity sha512-E5XrT4CbbXcXWy+1jChlZmrmCwd5KGx502kDCXJJ7y898TtWW9FwoG5HfOLVRKmlmDGkWN2HM9Ho+/Y8F0sJDg==
+ version "4.7.2"
+ resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.2.tgz#0dcd6fb330391d46332f4c6c1bf89a6514c2ddce"
+ integrity sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==
dependencies:
resolve-pkg-maps "^1.0.0"
@@ -1661,18 +1996,6 @@ glob-to-regexp@^0.4.1:
resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
-glob@7.1.6:
- version "7.1.6"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
- integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.4"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
glob@7.1.7:
version "7.1.7"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
@@ -1685,6 +2008,17 @@ glob@7.1.7:
once "^1.3.0"
path-is-absolute "^1.0.0"
+glob@^10.3.10:
+ version "10.3.10"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b"
+ integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==
+ dependencies:
+ foreground-child "^3.1.0"
+ jackspeak "^2.3.5"
+ minimatch "^9.0.1"
+ minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+ path-scurry "^1.10.1"
+
glob@^7.1.3:
version "7.2.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
@@ -1698,9 +2032,9 @@ glob@^7.1.3:
path-is-absolute "^1.0.0"
globals@^13.19.0:
- version "13.20.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82"
- integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==
+ version "13.24.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171"
+ integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==
dependencies:
type-fest "^0.20.2"
@@ -1723,17 +2057,6 @@ globby@^11.1.0:
merge2 "^1.4.1"
slash "^3.0.0"
-globby@^13.1.3:
- version "13.2.2"
- resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592"
- integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==
- dependencies:
- dir-glob "^3.0.1"
- fast-glob "^3.3.0"
- ignore "^5.2.4"
- merge2 "^1.4.1"
- slash "^4.0.0"
-
gopd@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
@@ -1767,11 +2090,11 @@ has-flag@^4.0.0:
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
has-property-descriptors@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861"
- integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340"
+ integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==
dependencies:
- get-intrinsic "^1.1.1"
+ get-intrinsic "^1.2.2"
has-proto@^1.0.1:
version "1.0.1"
@@ -1790,12 +2113,12 @@ has-tostringtag@^1.0.0:
dependencies:
has-symbols "^1.0.2"
-has@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
- integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+hasown@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c"
+ integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==
dependencies:
- function-bind "^1.1.1"
+ function-bind "^1.1.2"
hoist-non-react-statics@^3.3.1:
version "3.3.2"
@@ -1843,20 +2166,15 @@ htmlparser2@7.2.0:
domutils "^2.8.0"
entities "^3.0.1"
-human-signals@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
- integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
+ieee754@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+ integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
-human-signals@^4.3.0:
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2"
- integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==
-
-ignore@^5.2.0, ignore@^5.2.4:
- version "5.2.4"
- resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
- integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
+ignore@^5.2.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78"
+ integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==
import-fresh@^3.2.1:
version "3.3.0"
@@ -1889,13 +2207,13 @@ inline-style-parser@0.1.1:
resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1"
integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==
-internal-slot@^1.0.3, internal-slot@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986"
- integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==
+internal-slot@^1.0.5:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930"
+ integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==
dependencies:
- get-intrinsic "^1.2.0"
- has "^1.0.3"
+ get-intrinsic "^1.2.2"
+ hasown "^2.0.0"
side-channel "^1.0.4"
invariant@^2.2.4:
@@ -1905,6 +2223,26 @@ invariant@^2.2.4:
dependencies:
loose-envify "^1.0.0"
+iron-session@^6.3.1:
+ version "6.3.1"
+ resolved "https://registry.yarnpkg.com/iron-session/-/iron-session-6.3.1.tgz#9c8b331acc0f9561dd0f942b089e8197576a03de"
+ integrity sha512-3UJ7y2vk/WomAtEySmPgM6qtYF1cZ3tXuWX5GsVX4PJXAcs5y/sV9HuSfpjKS6HkTL/OhZcTDWJNLZ7w+Erx3A==
+ dependencies:
+ "@peculiar/webcrypto" "^1.4.0"
+ "@types/cookie" "^0.5.1"
+ "@types/express" "^4.17.13"
+ "@types/koa" "^2.13.5"
+ "@types/node" "^17.0.41"
+ cookie "^0.5.0"
+ iron-webcrypto "^0.2.5"
+
+iron-webcrypto@^0.2.5:
+ version "0.2.8"
+ resolved "https://registry.yarnpkg.com/iron-webcrypto/-/iron-webcrypto-0.2.8.tgz#7258fb87aa60122949e9900a49ae0f28cf4813b4"
+ integrity sha512-YPdCvjFMOBjXaYuDj5tiHst5CEk6Xw84Jo8Y2+jzhMceclAnb3+vNPP/CTtb5fO2ZEuXEaO4N+w62Vfko757KA==
+ dependencies:
+ buffer "^6"
+
is-array-buffer@^3.0.1, is-array-buffer@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe"
@@ -1919,6 +2257,13 @@ is-arrayish@^0.2.1:
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
+is-async-function@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646"
+ integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==
+ dependencies:
+ has-tostringtag "^1.0.0"
+
is-bigint@^1.0.1:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
@@ -1946,35 +2291,44 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7:
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
-is-core-module@^2.11.0, is-core-module@^2.9.0:
- version "2.12.1"
- resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd"
- integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==
+is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1:
+ version "2.13.1"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384"
+ integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==
dependencies:
- has "^1.0.3"
+ hasown "^2.0.0"
-is-date-object@^1.0.1:
+is-date-object@^1.0.1, is-date-object@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
dependencies:
has-tostringtag "^1.0.0"
-is-docker@^2.0.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
- integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
-
-is-docker@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200"
- integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==
-
is-extglob@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+is-finalizationregistry@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6"
+ integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==
+ dependencies:
+ call-bind "^1.0.2"
+
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-generator-function@^1.0.10:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72"
+ integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==
+ dependencies:
+ has-tostringtag "^1.0.0"
+
is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
version "4.0.3"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
@@ -1982,12 +2336,10 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
dependencies:
is-extglob "^2.1.1"
-is-inside-container@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4"
- integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==
- dependencies:
- is-docker "^3.0.0"
+is-map@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127"
+ integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==
is-negative-zero@^2.0.2:
version "2.0.2"
@@ -2019,6 +2371,11 @@ is-regex@^1.1.4:
call-bind "^1.0.2"
has-tostringtag "^1.0.0"
+is-set@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec"
+ integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==
+
is-shared-array-buffer@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
@@ -2026,16 +2383,6 @@ is-shared-array-buffer@^1.0.2:
dependencies:
call-bind "^1.0.2"
-is-stream@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
- integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
-
-is-stream@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac"
- integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==
-
is-string@^1.0.5, is-string@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
@@ -2050,13 +2397,18 @@ is-symbol@^1.0.2, is-symbol@^1.0.3:
dependencies:
has-symbols "^1.0.2"
-is-typed-array@^1.1.10, is-typed-array@^1.1.9:
+is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9:
version "1.1.12"
resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a"
integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==
dependencies:
which-typed-array "^1.1.11"
+is-weakmap@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2"
+ integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==
+
is-weakref@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
@@ -2064,12 +2416,13 @@ is-weakref@^1.0.2:
dependencies:
call-bind "^1.0.2"
-is-wsl@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
- integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
+is-weakset@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d"
+ integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==
dependencies:
- is-docker "^2.0.0"
+ call-bind "^1.0.2"
+ get-intrinsic "^1.1.1"
isarray@0.0.1:
version "0.0.1"
@@ -2091,10 +2444,35 @@ isexe@^2.0.0:
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+iterator.prototype@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0"
+ integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==
+ dependencies:
+ define-properties "^1.2.1"
+ get-intrinsic "^1.2.1"
+ has-symbols "^1.0.3"
+ reflect.getprototypeof "^1.0.4"
+ set-function-name "^2.0.1"
+
+jackspeak@^2.3.5:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8"
+ integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==
+ dependencies:
+ "@isaacs/cliui" "^8.0.2"
+ optionalDependencies:
+ "@pkgjs/parseargs" "^0.11.0"
+
jiti@^1.18.2:
- version "1.19.1"
- resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.19.1.tgz#fa99e4b76a23053e0e7cde098efe1704a14c16f1"
- integrity sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==
+ version "1.21.0"
+ resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d"
+ integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==
+
+jotai@^2.4.3:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/jotai/-/jotai-2.6.0.tgz#68b5d634f78a9ea55adfb8d92206ef59304b5dd5"
+ integrity sha512-Vt6hsc04Km4j03l+Ax+Sc+FVft5cRJhqgxt6GTz6GM2eM3DyX3CdBdzcG0z2FrlZToL1/0OAkqDghIyARWnSuQ==
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
@@ -2108,6 +2486,11 @@ js-yaml@^4.1.0:
dependencies:
argparse "^2.0.1"
+json-buffer@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
+ integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+
json-parse-even-better-errors@^2.3.0:
version "2.3.1"
resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
@@ -2130,27 +2513,34 @@ json5@^1.0.2:
dependencies:
minimist "^1.2.0"
-"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3:
- version "3.3.4"
- resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz#b896535fed5b867650acce5a9bd4135ffc7b3bf9"
- integrity sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw==
+"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5:
+ version "3.3.5"
+ resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a"
+ integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==
dependencies:
array-includes "^3.1.6"
array.prototype.flat "^1.3.1"
object.assign "^4.1.4"
object.values "^1.1.6"
-language-subtag-registry@~0.3.2:
+keyv@^4.5.3:
+ version "4.5.4"
+ resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
+ integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
+ dependencies:
+ json-buffer "3.0.1"
+
+language-subtag-registry@^0.3.20:
version "0.3.22"
resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d"
integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==
-language-tags@=1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a"
- integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==
+language-tags@^1.0.9:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777"
+ integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==
dependencies:
- language-subtag-registry "~0.3.2"
+ language-subtag-registry "^0.3.20"
levn@^0.4.1:
version "0.4.1"
@@ -2160,11 +2550,16 @@ levn@^0.4.1:
prelude-ls "^1.2.1"
type-check "~0.4.0"
-lilconfig@^2.0.5, lilconfig@^2.1.0:
+lilconfig@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52"
integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==
+lilconfig@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.0.0.tgz#f8067feb033b5b74dab4602a5f5029420be749bc"
+ integrity sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==
+
lines-and-columns@^1.1.6:
version "1.2.4"
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
@@ -2182,6 +2577,11 @@ lodash.merge@^4.6.2:
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+lodash@^4.17.21:
+ version "4.17.21"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+ integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
@@ -2196,10 +2596,10 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
-merge-stream@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
- integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+"lru-cache@^9.1.1 || ^10.0.0":
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484"
+ integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==
merge2@^1.3.0, merge2@^1.4.1:
version "1.4.1"
@@ -2214,15 +2614,13 @@ micromatch@^4.0.4, micromatch@^4.0.5:
braces "^3.0.2"
picomatch "^2.3.1"
-mimic-fn@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
- integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
-
-mimic-fn@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc"
- integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==
+midtrans-client@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/midtrans-client/-/midtrans-client-1.3.1.tgz#2cec3cfbbea35529c99683d3cee7fe21e5e3aa25"
+ integrity sha512-GoT2j9m0yHct9aBGeHLTYW9KWyaqep29gzbky8npffyMJfld/Y8OD9eBGM2hT4QNhe1M2e4XqyK/iyjU+KJMYA==
+ dependencies:
+ axios "^0.26.0"
+ lodash "^4.17.21"
minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
version "3.1.2"
@@ -2231,11 +2629,28 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
dependencies:
brace-expansion "^1.1.7"
+minimatch@^9.0.1:
+ version "9.0.3"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
+ integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
+ dependencies:
+ brace-expansion "^2.0.1"
+
minimist@^1.2.0, minimist@^1.2.6, minimist@~1.2.5:
version "1.2.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
+"minipass@^5.0.0 || ^6.0.2 || ^7.0.0":
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c"
+ integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==
+
+moment@^2.29.4:
+ version "2.30.1"
+ resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae"
+ integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==
+
ms@2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
@@ -2263,44 +2678,43 @@ mz@^2.7.0:
object-assign "^4.0.1"
thenify-all "^1.0.0"
-nanoid@^3.3.4, nanoid@^3.3.6:
- version "3.3.6"
- resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
- integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
+nanoid@^3.3.6, nanoid@^3.3.7:
+ version "3.3.7"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
+ integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
natural-compare@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
-next@13.4.12:
- version "13.4.12"
- resolved "https://registry.yarnpkg.com/next/-/next-13.4.12.tgz#809b21ea0aabbe88ced53252c88c4a5bd5af95df"
- integrity sha512-eHfnru9x6NRmTMcjQp6Nz0J4XH9OubmzOa7CkWL+AUrUxpibub3vWwttjduu9No16dug1kq04hiUUpo7J3m3Xw==
+next@^13.5.4-canary.8:
+ version "13.5.6"
+ resolved "https://registry.yarnpkg.com/next/-/next-13.5.6.tgz#e964b5853272236c37ce0dd2c68302973cf010b1"
+ integrity sha512-Y2wTcTbO4WwEsVb4A8VSnOsG1I9ok+h74q0ZdxkwM3EODqrs4pasq7O0iUxbcS9VtWMicG7f3+HAj0r1+NtKSw==
dependencies:
- "@next/env" "13.4.12"
- "@swc/helpers" "0.5.1"
+ "@next/env" "13.5.6"
+ "@swc/helpers" "0.5.2"
busboy "1.6.0"
caniuse-lite "^1.0.30001406"
- postcss "8.4.14"
+ postcss "8.4.31"
styled-jsx "5.1.1"
watchpack "2.4.0"
- zod "3.21.4"
optionalDependencies:
- "@next/swc-darwin-arm64" "13.4.12"
- "@next/swc-darwin-x64" "13.4.12"
- "@next/swc-linux-arm64-gnu" "13.4.12"
- "@next/swc-linux-arm64-musl" "13.4.12"
- "@next/swc-linux-x64-gnu" "13.4.12"
- "@next/swc-linux-x64-musl" "13.4.12"
- "@next/swc-win32-arm64-msvc" "13.4.12"
- "@next/swc-win32-ia32-msvc" "13.4.12"
- "@next/swc-win32-x64-msvc" "13.4.12"
+ "@next/swc-darwin-arm64" "13.5.6"
+ "@next/swc-darwin-x64" "13.5.6"
+ "@next/swc-linux-arm64-gnu" "13.5.6"
+ "@next/swc-linux-arm64-musl" "13.5.6"
+ "@next/swc-linux-x64-gnu" "13.5.6"
+ "@next/swc-linux-x64-musl" "13.5.6"
+ "@next/swc-win32-arm64-msvc" "13.5.6"
+ "@next/swc-win32-ia32-msvc" "13.5.6"
+ "@next/swc-win32-x64-msvc" "13.5.6"
-node-releases@^2.0.12:
- version "2.0.13"
- resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d"
- integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==
+node-releases@^2.0.14:
+ version "2.0.14"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b"
+ integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==
normalize-path@^3.0.0, normalize-path@~3.0.0:
version "3.0.0"
@@ -2312,20 +2726,6 @@ normalize-range@^0.1.2:
resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
-npm-run-path@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
- integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
- dependencies:
- path-key "^3.0.0"
-
-npm-run-path@^5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00"
- integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==
- dependencies:
- path-key "^4.0.0"
-
object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
@@ -2336,10 +2736,10 @@ object-hash@^3.0.0:
resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9"
integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==
-object-inspect@^1.12.3, object-inspect@^1.9.0:
- version "1.12.3"
- resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9"
- integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==
+object-inspect@^1.13.1, object-inspect@^1.9.0:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2"
+ integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==
object-keys@^1.1.1:
version "1.1.1"
@@ -2352,49 +2752,59 @@ object-keys@~0.4.0:
integrity sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==
object.assign@^4.1.4:
- version "4.1.4"
- resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f"
- integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0"
+ integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==
dependencies:
- call-bind "^1.0.2"
- define-properties "^1.1.4"
+ call-bind "^1.0.5"
+ define-properties "^1.2.1"
has-symbols "^1.0.3"
object-keys "^1.1.1"
-object.entries@^1.1.6:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23"
- integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==
+object.entries@^1.1.6, object.entries@^1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131"
+ integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==
dependencies:
call-bind "^1.0.2"
- define-properties "^1.1.4"
- es-abstract "^1.20.4"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
-object.fromentries@^2.0.6:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73"
- integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==
+object.fromentries@^2.0.6, object.fromentries@^2.0.7:
+ version "2.0.7"
+ resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616"
+ integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==
dependencies:
call-bind "^1.0.2"
- define-properties "^1.1.4"
- es-abstract "^1.20.4"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
+
+object.groupby@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee"
+ integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
+ get-intrinsic "^1.2.1"
object.hasown@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92"
- integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.3.tgz#6a5f2897bb4d3668b8e79364f98ccf971bda55ae"
+ integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==
dependencies:
- define-properties "^1.1.4"
- es-abstract "^1.20.4"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
-object.values@^1.1.6:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d"
- integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==
+object.values@^1.1.6, object.values@^1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a"
+ integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==
dependencies:
call-bind "^1.0.2"
- define-properties "^1.1.4"
- es-abstract "^1.20.4"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
once@^1.3.0:
version "1.4.0"
@@ -2403,30 +2813,6 @@ once@^1.3.0:
dependencies:
wrappy "1"
-onetime@^5.1.2:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
- integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
- dependencies:
- mimic-fn "^2.1.0"
-
-onetime@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4"
- integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==
- dependencies:
- mimic-fn "^4.0.0"
-
-open@^9.1.0:
- version "9.1.0"
- resolved "https://registry.yarnpkg.com/open/-/open-9.1.0.tgz#684934359c90ad25742f5a26151970ff8c6c80b6"
- integrity sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==
- dependencies:
- default-browser "^4.0.0"
- define-lazy-prop "^3.0.0"
- is-inside-container "^1.0.0"
- is-wsl "^2.2.0"
-
optionator@^0.9.3:
version "0.9.3"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64"
@@ -2480,21 +2866,24 @@ path-is-absolute@^1.0.0:
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
-path-key@^3.0.0, path-key@^3.1.0:
+path-key@^3.1.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
-path-key@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18"
- integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==
-
path-parse@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+path-scurry@^1.10.1:
+ version "1.10.1"
+ resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698"
+ integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==
+ dependencies:
+ lru-cache "^9.1.1 || ^10.0.0"
+ minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+
path-type@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
@@ -2537,12 +2926,12 @@ postcss-js@^4.0.1:
camelcase-css "^2.0.1"
postcss-load-config@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd"
- integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3"
+ integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==
dependencies:
- lilconfig "^2.0.5"
- yaml "^2.1.1"
+ lilconfig "^3.0.0"
+ yaml "^2.3.4"
postcss-nested@^6.0.1:
version "6.0.1"
@@ -2552,9 +2941,9 @@ postcss-nested@^6.0.1:
postcss-selector-parser "^6.0.11"
postcss-selector-parser@^6.0.11:
- version "6.0.13"
- resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b"
- integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==
+ version "6.0.14"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.14.tgz#9d45f1afbebedae6811a17f49d09754f2ad153b3"
+ integrity sha512-65xXYsT40i9GyWzlHQ5ShZoK7JZdySeOozi/tz2EezDo6c04q6+ckYMeoY7idaie1qp2dT5KoYQ2yky6JuoHnA==
dependencies:
cssesc "^3.0.0"
util-deprecate "^1.0.2"
@@ -2564,16 +2953,7 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0:
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
-postcss@8.4.14:
- version "8.4.14"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf"
- integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==
- dependencies:
- nanoid "^3.3.4"
- picocolors "^1.0.0"
- source-map-js "^1.0.2"
-
-postcss@8.4.27, postcss@^8.4.23:
+postcss@8.4.27:
version "8.4.27"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.27.tgz#234d7e4b72e34ba5a92c29636734349e0d9c3057"
integrity sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==
@@ -2582,6 +2962,24 @@ postcss@8.4.27, postcss@^8.4.23:
picocolors "^1.0.0"
source-map-js "^1.0.2"
+postcss@8.4.31:
+ version "8.4.31"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d"
+ integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==
+ dependencies:
+ nanoid "^3.3.6"
+ picocolors "^1.0.0"
+ source-map-js "^1.0.2"
+
+postcss@^8.4.23:
+ version "8.4.32"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.32.tgz#1dac6ac51ab19adb21b8b34fd2d93a86440ef6c9"
+ integrity sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==
+ dependencies:
+ nanoid "^3.3.7"
+ picocolors "^1.0.0"
+ source-map-js "^1.0.2"
+
prelude-ls@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
@@ -2592,7 +2990,7 @@ process-nextick-args@~2.0.0:
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
-prop-types@^15.8.1:
+prop-types@^15.5.8, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1:
version "15.8.1"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
@@ -2602,15 +3000,34 @@ prop-types@^15.8.1:
react-is "^16.13.1"
punycode@^2.1.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
- integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
+ integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
+
+pvtsutils@^1.3.2, pvtsutils@^1.3.5:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/pvtsutils/-/pvtsutils-1.3.5.tgz#b8705b437b7b134cd7fd858f025a23456f1ce910"
+ integrity sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==
+ dependencies:
+ tslib "^2.6.1"
+
+pvutils@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.1.3.tgz#f35fc1d27e7cd3dfbd39c0826d173e806a03f5a3"
+ integrity sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==
queue-microtask@^1.2.2:
version "1.2.3"
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+react-countdown@^2.3.5:
+ version "2.3.5"
+ resolved "https://registry.yarnpkg.com/react-countdown/-/react-countdown-2.3.5.tgz#70c035b5cbc7e8fdb4ad91fe5f44afd7a7933a68"
+ integrity sha512-K26ENYEesMfPxhRRtm1r+Pf70SErrvW3g4CArLi/x6MPFjgfDFYePT4UghEj8p2nI0cqVV7/JjDgjyr//U60Og==
+ dependencies:
+ prop-types "^15.7.2"
+
react-dom@18.2.0:
version "18.2.0"
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d"
@@ -2619,6 +3036,20 @@ react-dom@18.2.0:
loose-envify "^1.1.0"
scheduler "^0.23.0"
+react-dropzone-esm@15.0.1:
+ version "15.0.1"
+ resolved "https://registry.yarnpkg.com/react-dropzone-esm/-/react-dropzone-esm-15.0.1.tgz#8c689638aaa9feb5b2a429dd565acfa6792263e5"
+ integrity sha512-RdeGpqwHnoV/IlDFpQji7t7pTtlC2O1i/Br0LWkRZ9hYtLyce814S71h5NolnCZXsIN5wrZId6+8eQj2EBnEzg==
+ dependencies:
+ prop-types "^15.8.1"
+
+react-easy-swipe@^0.0.21:
+ version "0.0.21"
+ resolved "https://registry.yarnpkg.com/react-easy-swipe/-/react-easy-swipe-0.0.21.tgz#ce9384d576f7a8529dc2ca377c1bf03920bac8eb"
+ integrity sha512-OeR2jAxdoqUMHIn/nS9fgreI5hSpgGoL5ezdal4+oO7YSSgJR8ga+PkYGJrSrJ9MKlPcQjMQXnketrD7WNmNsg==
+ dependencies:
+ prop-types "^15.5.8"
+
react-is@^16.13.1, react-is@^16.7.0:
version "16.13.1"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
@@ -2638,9 +3069,9 @@ react-remove-scroll-bar@^2.3.4:
tslib "^2.0.0"
react-remove-scroll@^2.5.5:
- version "2.5.6"
- resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.5.6.tgz#7510b8079e9c7eebe00e65a33daaa3aa29a10336"
- integrity sha512-bO856ad1uDYLefgArk559IzUNeQ6SWH4QnrevIUjH+GczV56giDfl3h0Idptf2oIKxQmd1p9BN25jleKodTALg==
+ version "2.5.7"
+ resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz#15a1fd038e8497f65a695bf26a4a57970cac1ccb"
+ integrity sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==
dependencies:
react-remove-scroll-bar "^2.3.4"
react-style-singleton "^2.2.1"
@@ -2648,6 +3079,20 @@ react-remove-scroll@^2.5.5:
use-callback-ref "^1.3.0"
use-sidecar "^1.1.2"
+react-responsive-carousel@^3.2.23:
+ version "3.2.23"
+ resolved "https://registry.yarnpkg.com/react-responsive-carousel/-/react-responsive-carousel-3.2.23.tgz#4c0016ff54603e604bb5c1f9e7ef2d1eda133f1d"
+ integrity sha512-pqJLsBaKHWJhw/ItODgbVoziR2z4lpcJg+YwmRlSk4rKH32VE633mAtZZ9kDXjy4wFO+pgUZmDKPsPe1fPmHCg==
+ dependencies:
+ classnames "^2.2.5"
+ prop-types "^15.5.8"
+ react-easy-swipe "^0.0.21"
+
+react-simple-toasts@^5.10.0:
+ version "5.10.0"
+ resolved "https://registry.yarnpkg.com/react-simple-toasts/-/react-simple-toasts-5.10.0.tgz#cfa692cd06fe858ea327adf32e72db2199459fa7"
+ integrity sha512-GIsBaLkZnyqeTzs0fSmXoLr5GtSnHv9C35tEx/2mc8H7/OaTlwXRHjm0ssDP454gvI4rZFS+rnj2HOL5zuiiwA==
+
react-style-singleton@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.1.tgz#f99e420492b2d8f34d38308ff660b60d0b1205b4"
@@ -2666,6 +3111,23 @@ react-textarea-autosize@8.3.4:
use-composed-ref "^1.3.0"
use-latest "^1.2.1"
+react-toastify@^9.1.3:
+ version "9.1.3"
+ resolved "https://registry.yarnpkg.com/react-toastify/-/react-toastify-9.1.3.tgz#1e798d260d606f50e0fab5ee31daaae1d628c5ff"
+ integrity sha512-fPfb8ghtn/XMxw3LkxQBk3IyagNpF/LIKjOBflbexr2AWxAH1MJgvnESwEwBn9liLFXgTKWgBSdZpw9m4OTHTg==
+ dependencies:
+ clsx "^1.1.1"
+
+react-transition-group@4.4.2:
+ version "4.4.2"
+ resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.2.tgz#8b59a56f09ced7b55cbd53c36768b922890d5470"
+ integrity sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==
+ dependencies:
+ "@babel/runtime" "^7.5.5"
+ dom-helpers "^5.0.1"
+ loose-envify "^1.4.0"
+ prop-types "^15.6.2"
+
react@18.2.0:
version "18.2.0"
resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
@@ -2710,19 +3172,31 @@ readdirp@~3.6.0:
dependencies:
picomatch "^2.2.1"
-regenerator-runtime@^0.13.11:
- version "0.13.11"
- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
- integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
-
-regexp.prototype.flags@^1.4.3, regexp.prototype.flags@^1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb"
- integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==
+reflect.getprototypeof@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz#aaccbf41aca3821b87bb71d9dcbc7ad0ba50a3f3"
+ integrity sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==
dependencies:
call-bind "^1.0.2"
define-properties "^1.2.0"
- functions-have-names "^1.2.3"
+ es-abstract "^1.22.1"
+ get-intrinsic "^1.2.1"
+ globalthis "^1.0.3"
+ which-builtin-type "^1.1.3"
+
+regenerator-runtime@^0.14.0:
+ version "0.14.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f"
+ integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
+
+regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e"
+ integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.2.0"
+ set-function-name "^2.0.0"
resolve-from@^4.0.0:
version "4.0.0"
@@ -2734,21 +3208,21 @@ resolve-pkg-maps@^1.0.0:
resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f"
integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==
-resolve@^1.1.7, resolve@^1.19.0, resolve@^1.22.1, resolve@^1.22.2:
- version "1.22.2"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f"
- integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==
+resolve@^1.1.7, resolve@^1.19.0, resolve@^1.22.2, resolve@^1.22.4:
+ version "1.22.8"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
+ integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
dependencies:
- is-core-module "^2.11.0"
+ is-core-module "^2.13.0"
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
resolve@^2.0.0-next.4:
- version "2.0.0-next.4"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660"
- integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==
+ version "2.0.0-next.5"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c"
+ integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==
dependencies:
- is-core-module "^2.9.0"
+ is-core-module "^2.13.0"
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
@@ -2764,13 +3238,6 @@ rimraf@^3.0.2:
dependencies:
glob "^7.1.3"
-run-applescript@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-5.0.0.tgz#e11e1c932e055d5c6b40d98374e0268d9b11899c"
- integrity sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==
- dependencies:
- execa "^5.0.0"
-
run-parallel@^1.1.9:
version "1.2.0"
resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
@@ -2778,13 +3245,13 @@ run-parallel@^1.1.9:
dependencies:
queue-microtask "^1.2.2"
-safe-array-concat@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060"
- integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==
+safe-array-concat@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c"
+ integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==
dependencies:
call-bind "^1.0.2"
- get-intrinsic "^1.2.0"
+ get-intrinsic "^1.2.1"
has-symbols "^1.0.3"
isarray "^2.0.5"
@@ -2809,7 +3276,7 @@ scheduler@^0.23.0:
dependencies:
loose-envify "^1.1.0"
-semver@^6.3.0, semver@^6.3.1:
+semver@^6.3.1:
version "6.3.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
@@ -2821,6 +3288,25 @@ semver@^7.3.7:
dependencies:
lru-cache "^6.0.0"
+set-function-length@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed"
+ integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==
+ dependencies:
+ define-data-property "^1.1.1"
+ get-intrinsic "^1.2.1"
+ gopd "^1.0.1"
+ has-property-descriptors "^1.0.0"
+
+set-function-name@^2.0.0, set-function-name@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a"
+ integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==
+ dependencies:
+ define-data-property "^1.0.1"
+ functions-have-names "^1.2.3"
+ has-property-descriptors "^1.0.0"
+
shebang-command@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
@@ -2842,20 +3328,33 @@ side-channel@^1.0.4:
get-intrinsic "^1.0.2"
object-inspect "^1.9.0"
-signal-exit@^3.0.3, signal-exit@^3.0.7:
- version "3.0.7"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
- integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
+signal-exit@^4.0.1:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
+ integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
slash@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
-slash@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
- integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
+socket.io-client@^4.7.2:
+ version "4.7.2"
+ resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.7.2.tgz#f2f13f68058bd4e40f94f2a1541f275157ff2c08"
+ integrity sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==
+ dependencies:
+ "@socket.io/component-emitter" "~3.1.0"
+ debug "~4.3.2"
+ engine.io-client "~6.5.2"
+ socket.io-parser "~4.2.4"
+
+socket.io-parser@~4.2.4:
+ version "4.2.4"
+ resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83"
+ integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==
+ dependencies:
+ "@socket.io/component-emitter" "~3.1.0"
+ debug "~4.3.1"
source-map-js@^1.0.2:
version "1.0.2"
@@ -2872,46 +3371,65 @@ streamsearch@^1.1.0:
resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764"
integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==
+"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
+
+string-width@^5.0.1, string-width@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
+ integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
+ dependencies:
+ eastasianwidth "^0.2.0"
+ emoji-regex "^9.2.2"
+ strip-ansi "^7.0.1"
+
string.prototype.matchall@^4.0.8:
- version "4.0.8"
- resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3"
- integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==
+ version "4.0.10"
+ resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100"
+ integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==
dependencies:
call-bind "^1.0.2"
- define-properties "^1.1.4"
- es-abstract "^1.20.4"
- get-intrinsic "^1.1.3"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
+ get-intrinsic "^1.2.1"
has-symbols "^1.0.3"
- internal-slot "^1.0.3"
- regexp.prototype.flags "^1.4.3"
+ internal-slot "^1.0.5"
+ regexp.prototype.flags "^1.5.0"
+ set-function-name "^2.0.0"
side-channel "^1.0.4"
-string.prototype.trim@^1.2.7:
- version "1.2.7"
- resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533"
- integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==
+string.prototype.trim@^1.2.8:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd"
+ integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==
dependencies:
call-bind "^1.0.2"
- define-properties "^1.1.4"
- es-abstract "^1.20.4"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
-string.prototype.trimend@^1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533"
- integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==
+string.prototype.trimend@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e"
+ integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==
dependencies:
call-bind "^1.0.2"
- define-properties "^1.1.4"
- es-abstract "^1.20.4"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
-string.prototype.trimstart@^1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4"
- integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==
+string.prototype.trimstart@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298"
+ integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==
dependencies:
call-bind "^1.0.2"
- define-properties "^1.1.4"
- es-abstract "^1.20.4"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
string_decoder@~0.10.x:
version "0.10.31"
@@ -2925,28 +3443,25 @@ string_decoder@~1.1.1:
dependencies:
safe-buffer "~5.1.0"
-strip-ansi@^6.0.1:
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
dependencies:
ansi-regex "^5.0.1"
+strip-ansi@^7.0.1:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
+ integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
+ dependencies:
+ ansi-regex "^6.0.1"
+
strip-bom@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==
-strip-final-newline@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
- integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
-
-strip-final-newline@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd"
- integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==
-
strip-json-comments@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
@@ -2979,13 +3494,13 @@ stylis@4.2.0:
integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==
sucrase@^3.32.0:
- version "3.34.0"
- resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.34.0.tgz#1e0e2d8fcf07f8b9c3569067d92fbd8690fb576f"
- integrity sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==
+ version "3.35.0"
+ resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263"
+ integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==
dependencies:
"@jridgewell/gen-mapping" "^0.3.2"
commander "^4.0.0"
- glob "7.1.6"
+ glob "^10.3.10"
lines-and-columns "^1.1.6"
mz "^2.7.0"
pirates "^4.0.1"
@@ -3010,14 +3525,6 @@ supports-preserve-symlinks-flag@^1.0.0:
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
-synckit@^0.8.5:
- version "0.8.5"
- resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3"
- integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==
- dependencies:
- "@pkgr/utils" "^2.3.1"
- tslib "^2.5.0"
-
tabbable@^6.0.1:
version "6.2.0"
resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97"
@@ -3088,11 +3595,6 @@ through@^2.3.8:
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
-titleize@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53"
- integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==
-
to-fast-properties@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
@@ -3110,10 +3612,10 @@ ts-interface-checker@^0.1.9:
resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
-tsconfig-paths@^3.14.1:
- version "3.14.2"
- resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088"
- integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==
+tsconfig-paths@^3.15.0:
+ version "3.15.0"
+ resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4"
+ integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==
dependencies:
"@types/json5" "^0.0.29"
json5 "^1.0.2"
@@ -3125,10 +3627,10 @@ tslib@^1.8.1:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
-tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.0:
- version "2.6.1"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410"
- integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==
+tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.1, tslib@^2.6.2:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
+ integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
tsutils@^3.21.0:
version "3.21.0"
@@ -3203,15 +3705,15 @@ unbox-primitive@^1.0.2:
has-symbols "^1.0.3"
which-boxed-primitive "^1.0.2"
-untildify@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b"
- integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==
+undici-types@~5.26.4:
+ version "5.26.5"
+ resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
+ integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
-update-browserslist-db@^1.0.11:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940"
- integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==
+update-browserslist-db@^1.0.13:
+ version "1.0.13"
+ resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4"
+ integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==
dependencies:
escalade "^3.1.1"
picocolors "^1.0.0"
@@ -3224,9 +3726,9 @@ uri-js@^4.2.2:
punycode "^2.1.0"
use-callback-ref@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.0.tgz#772199899b9c9a50526fedc4993fc7fa1f7e32d5"
- integrity sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.1.tgz#9be64c3902cbd72b07fe55e56408ae3a26036fd0"
+ integrity sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==
dependencies:
tslib "^2.0.0"
@@ -3260,6 +3762,11 @@ util-deprecate@^1.0.2, util-deprecate@~1.0.1:
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+uuid@^9.0.1:
+ version "9.0.1"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30"
+ integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==
+
watchpack@2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d"
@@ -3268,6 +3775,17 @@ watchpack@2.4.0:
glob-to-regexp "^0.4.1"
graceful-fs "^4.1.2"
+webcrypto-core@^1.7.7:
+ version "1.7.7"
+ resolved "https://registry.yarnpkg.com/webcrypto-core/-/webcrypto-core-1.7.7.tgz#06f24b3498463e570fed64d7cab149e5437b162c"
+ integrity sha512-7FjigXNsBfopEj+5DV2nhNpfic2vumtjjgPmeDKk45z+MJwXKKfhPB7118Pfzrmh4jqOMST6Ch37iPAHoImg5g==
+ dependencies:
+ "@peculiar/asn1-schema" "^2.3.6"
+ "@peculiar/json-schema" "^1.1.12"
+ asn1js "^3.0.1"
+ pvtsutils "^1.3.2"
+ tslib "^2.4.0"
+
which-boxed-primitive@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
@@ -3279,13 +3797,41 @@ which-boxed-primitive@^1.0.2:
is-string "^1.0.5"
is-symbol "^1.0.3"
-which-typed-array@^1.1.10, which-typed-array@^1.1.11:
- version "1.1.11"
- resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a"
- integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==
+which-builtin-type@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b"
+ integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==
+ dependencies:
+ function.prototype.name "^1.1.5"
+ has-tostringtag "^1.0.0"
+ is-async-function "^2.0.0"
+ is-date-object "^1.0.5"
+ is-finalizationregistry "^1.0.2"
+ is-generator-function "^1.0.10"
+ is-regex "^1.1.4"
+ is-weakref "^1.0.2"
+ isarray "^2.0.5"
+ which-boxed-primitive "^1.0.2"
+ which-collection "^1.0.1"
+ which-typed-array "^1.1.9"
+
+which-collection@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906"
+ integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==
+ dependencies:
+ is-map "^2.0.1"
+ is-set "^2.0.1"
+ is-weakmap "^2.0.1"
+ is-weakset "^2.0.1"
+
+which-typed-array@^1.1.11, which-typed-array@^1.1.13, which-typed-array@^1.1.9:
+ version "1.1.13"
+ resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36"
+ integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==
dependencies:
available-typed-arrays "^1.0.5"
- call-bind "^1.0.2"
+ call-bind "^1.0.4"
for-each "^0.3.3"
gopd "^1.0.1"
has-tostringtag "^1.0.0"
@@ -3297,11 +3843,39 @@ which@^2.0.1:
dependencies:
isexe "^2.0.0"
+"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrap-ansi@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
+ integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
+ dependencies:
+ ansi-styles "^6.1.0"
+ string-width "^5.0.1"
+ strip-ansi "^7.0.1"
+
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+ws@~8.11.0:
+ version "8.11.0"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143"
+ integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==
+
+xmlhttprequest-ssl@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67"
+ integrity sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==
+
xtend@~2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b"
@@ -3319,17 +3893,12 @@ yaml@^1.10.0:
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
-yaml@^2.1.1:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b"
- integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==
+yaml@^2.3.2, yaml@^2.3.4:
+ version "2.3.4"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2"
+ integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==
yocto-queue@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
-
-zod@3.21.4:
- version "3.21.4"
- resolved "https://registry.yarnpkg.com/zod/-/zod-3.21.4.tgz#10882231d992519f0a10b5dd58a38c9dabbb64db"
- integrity sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==
diff --git a/zCoba.js b/zCoba.js
new file mode 100644
index 00000000..b87ded68
--- /dev/null
+++ b/zCoba.js
@@ -0,0 +1,27 @@
+const moment = require("moment");
+var fs = require('fs');
+
+// function Coba() {
+// let total = 100;
+// let sisa = 1;
+
+// const hasil = (total - sisa)
+// console.log(hasil)
+// }
+
+// Coba();
+
+// function Coba1() {
+// const fruits = [];
+// const data = 10 - 4
+// fruits.push(data);
+// console.log(fruits);
+// }
+
+// Coba1();
+
+// include node fs module
+
+// delete file named 'sample.txt' Synchronously
+fs.unlinkSync('coba.sh');
+console.log('File deleted!');