From 11b5e8f7222d8ad09146188fa837f75c1796b19b Mon Sep 17 00:00:00 2001
From: Bagasbanuna02
Date: Mon, 1 Jul 2024 14:26:26 +0800
Subject: [PATCH 1/3] Perbaikan UI pada Forum # style: - Tampilan keseluruhan
forum di ganti menguikuti UI ## No Issue
---
package.json | 2 -
.../sub-detail/report-komentar/[id]/page.tsx | 10 +-
.../forum/sub-menu/report-komentar/page.tsx | 12 +
.../detail/{ => main-detail}/[id]/layout.tsx | 0
.../detail/{ => main-detail}/[id]/loading.tsx | 0
.../detail/{ => main-detail}/[id]/page.tsx | 8 +-
.../detail/report-komentar/[id]/page.tsx | 13 +
.../forum/detail/report-posting/[id]/page.tsx | 12 +
src/app/dev/forum/forumku/[id]/page.tsx | 4 +-
.../dev/forum/report/komentar/[id]/page.tsx | 4 +
.../report/posting-lainnya/[id]/page.tsx | 9 +-
.../dev/forum/report/posting/[id]/page.tsx | 4 +-
src/app/dev/forum/splash/loading.tsx | 9 -
src/app/dev/home/page.tsx | 2 +-
src/app/emotion.tsx | 4 +-
.../lib/router_admin/router_admin_forum.ts | 2 +-
src/app/lib/router_hipmi/router_forum.ts | 6 +-
src/app/zCoba/page.tsx | 13 +-
.../forum/component/detail_one_komentar.tsx | 64 +++
.../forum/component/detail_one_posting.tsx | 8 +-
.../fun/count/fun_count_laporan_komentar.ts | 3 +
.../fun/count/fun_count_laporan_posting.ts | 3 +
.../forum/fun/count/fun_count_publish.ts | 2 +
.../forum/fun/get/get_all_report_komentar.ts | 98 +++++
..._posting.tsx => get_all_report_posting.ts} | 0
.../forum/fun/get/get_one_komentar_by_id.ts | 31 ++
.../forum/fun/get/get_one_posting_by_id.ts | 1 +
src/app_modules/admin/forum/index.tsx | 2 +
.../sub_detail/hasil_report_komentar.tsx | 92 ++++-
.../forum/sub_detail/hasil_report_posting.tsx | 63 ++-
.../forum/sub_menu/table_report_komentar.tsx | 261 ++++++++++++
.../forum/sub_menu/table_report_posting.tsx | 37 +-
src/app_modules/admin/list_page.tsx | 10 +-
src/app_modules/auth/login/view.tsx | 95 ++---
src/app_modules/auth/register/view.tsx | 151 +++----
src/app_modules/auth/splash/view.tsx | 40 +-
src/app_modules/auth/validasi/view.tsx | 125 +++---
src/app_modules/colab/detail/chat/index.tsx | 35 +-
.../component_global/color/color_pallet.ts | 1 +
.../component_layout_tamplate.tsx | 16 +-
.../component_global/loading_page_v2.tsx | 4 +-
.../ui/ui_header_tamplate.tsx | 89 +++++
.../ui/ui_layout_tamplate.tsx | 77 ++++
.../forum/component/beranda/beranda_card.tsx | 99 -----
.../detail_create_komentar.tsx | 119 ++++++
.../detail_component/detail_list_komentar.tsx | 82 ++++
.../detail_component/detail_view.tsx | 81 ++++
.../forumku_header.tsx} | 121 +++---
.../forumku_more_button.tsx} | 228 +++++++----
.../forumku_component/forumku_view.tsx | 88 ++++
.../komentar_author_header_name.tsx | 2 +-
.../komentar_button_more.tsx | 4 +-
.../component/main_component/card_header.tsx | 32 +-
.../main_component/card_more_button.tsx | 52 +--
.../component/main_component/card_view.tsx | 36 +-
.../more_button/posting_button_more.tsx | 6 +-
src/app_modules/forum/create/index.tsx | 15 +-
src/app_modules/forum/create/layout.tsx | 13 +-
.../forum/detail/detail_report_komentar.tsx | 79 ++++
.../forum/detail/detail_report_posting.tsx | 61 +++
src/app_modules/forum/detail/index.tsx | 376 ------------------
src/app_modules/forum/detail/main_detail.tsx | 106 +++++
src/app_modules/forum/edit/posting/index.tsx | 18 +-
src/app_modules/forum/edit/posting/layout.tsx | 12 +-
.../forum/forumku/forum_profile.tsx | 100 +++++
src/app_modules/forum/forumku/index.tsx | 230 +++--------
src/app_modules/forum/forumku/layout.tsx | 17 +-
.../forum/forumku/postingan_pribadi.tsx | 85 ++++
.../fun/create/fun_create_report_komentar.ts | 36 +-
.../fun_create_notifikasi.tsx | 21 +
...tar_by_id.ts => get_all_komentar_by_id.ts} | 2 +-
.../fun/get/get_list_posting_by_author_id.ts | 39 +-
.../forum/fun/get/get_one_kategori_by_id.ts | 2 +-
.../fun/get/get_one_posting_reported_by_id.ts | 46 +++
.../fun/get/get_one_report_komentar_by_id.tsx | 60 +++
src/app_modules/forum/index.ts | 8 +-
src/app_modules/forum/main/beranda.tsx | 41 +-
src/app_modules/forum/main/layout.tsx | 49 ++-
src/app_modules/forum/model/interface.tsx | 17 +-
.../forum/report/komentar/index.tsx | 87 +++-
.../forum/report/komentar/lainnya.tsx | 2 +-
.../forum/report/posting/index.tsx | 5 +-
.../forum/report/posting/lainnya.tsx | 63 ++-
src/app_modules/forum/splash/index.tsx | 45 ++-
src/app_modules/home/layout.tsx | 4 +-
src/app_modules/home/view.tsx | 43 +-
src/app_modules/notif/index.tsx | 17 -
.../fun/create/create_notif_to_admin.tsx | 3 +
src/app_modules/notifikasi/main/index.tsx | 23 +-
src/app_modules/zCoba/index.tsx | 2 +-
yarn.lock | 36 +-
91 files changed, 2711 insertions(+), 1424 deletions(-)
create mode 100644 src/app/dev/admin/forum/sub-menu/report-komentar/page.tsx
rename src/app/dev/forum/detail/{ => main-detail}/[id]/layout.tsx (100%)
rename src/app/dev/forum/detail/{ => main-detail}/[id]/loading.tsx (100%)
rename src/app/dev/forum/detail/{ => main-detail}/[id]/page.tsx (76%)
create mode 100644 src/app/dev/forum/detail/report-komentar/[id]/page.tsx
create mode 100644 src/app/dev/forum/detail/report-posting/[id]/page.tsx
delete mode 100644 src/app/dev/forum/splash/loading.tsx
create mode 100644 src/app_modules/admin/forum/component/detail_one_komentar.tsx
create mode 100644 src/app_modules/admin/forum/fun/get/get_all_report_komentar.ts
rename src/app_modules/admin/forum/fun/get/{get_all_report_posting.tsx => get_all_report_posting.ts} (100%)
create mode 100644 src/app_modules/admin/forum/fun/get/get_one_komentar_by_id.ts
create mode 100644 src/app_modules/admin/forum/sub_menu/table_report_komentar.tsx
create mode 100644 src/app_modules/component_global/ui/ui_header_tamplate.tsx
create mode 100644 src/app_modules/component_global/ui/ui_layout_tamplate.tsx
delete mode 100644 src/app_modules/forum/component/beranda/beranda_card.tsx
create mode 100644 src/app_modules/forum/component/detail_component/detail_create_komentar.tsx
create mode 100644 src/app_modules/forum/component/detail_component/detail_list_komentar.tsx
create mode 100644 src/app_modules/forum/component/detail_component/detail_view.tsx
rename src/app_modules/forum/component/{beranda/beranda_author_header.tsx => forumku_component/forumku_header.tsx} (52%)
rename src/app_modules/forum/component/{beranda/beranda_button_more.tsx => forumku_component/forumku_more_button.tsx} (66%)
create mode 100644 src/app_modules/forum/component/forumku_component/forumku_view.tsx
rename src/app_modules/forum/component/{header => komentar_component}/komentar_author_header_name.tsx (97%)
rename src/app_modules/forum/component/{more_button => komentar_component}/komentar_button_more.tsx (97%)
create mode 100644 src/app_modules/forum/detail/detail_report_komentar.tsx
create mode 100644 src/app_modules/forum/detail/detail_report_posting.tsx
delete mode 100644 src/app_modules/forum/detail/index.tsx
create mode 100644 src/app_modules/forum/detail/main_detail.tsx
create mode 100644 src/app_modules/forum/forumku/forum_profile.tsx
create mode 100644 src/app_modules/forum/forumku/postingan_pribadi.tsx
create mode 100644 src/app_modules/forum/fun/forum_notifikasi/fun_create_notifikasi.tsx
rename src/app_modules/forum/fun/get/{get_komentar_by_id.ts => get_all_komentar_by_id.ts} (89%)
create mode 100644 src/app_modules/forum/fun/get/get_one_posting_reported_by_id.ts
create mode 100644 src/app_modules/forum/fun/get/get_one_report_komentar_by_id.tsx
delete mode 100644 src/app_modules/notif/index.tsx
diff --git a/package.json b/package.json
index 53ba7399..c1cd1e9b 100644
--- a/package.json
+++ b/package.json
@@ -35,7 +35,6 @@
"@types/node": "20.4.5",
"@types/react": "18.2.17",
"@types/react-dom": "18.2.7",
- "@types/react-virtualized": "^9.21.30",
"@types/uuid": "^9.0.4",
"autoprefixer": "10.4.14",
"bufferutil": "^4.0.8",
@@ -67,7 +66,6 @@
"react-responsive-carousel": "^3.2.23",
"react-simple-toasts": "^5.10.0",
"react-toastify": "^9.1.3",
- "react-virtualized": "^9.22.5",
"socket.io-client": "^4.7.2",
"tailwindcss": "3.3.3",
"ts-node": "^10.9.2",
diff --git a/src/app/dev/admin/forum/sub-detail/report-komentar/[id]/page.tsx b/src/app/dev/admin/forum/sub-detail/report-komentar/[id]/page.tsx
index 32d1107c..94f2bd0f 100644
--- a/src/app/dev/admin/forum/sub-detail/report-komentar/[id]/page.tsx
+++ b/src/app/dev/admin/forum/sub-detail/report-komentar/[id]/page.tsx
@@ -1,15 +1,23 @@
import { AdminForum_HasilReportKomentar } from "@/app_modules/admin/forum";
import { adminForum_getListReportKomentarbyId } from "@/app_modules/admin/forum/fun/get/get_list_report_komentar_by_id";
+import adminForum_funGetOneKomentarById from "@/app_modules/admin/forum/fun/get/get_one_komentar_by_id";
export default async function Page({ params }: { params: { id: string } }) {
let komentarId = params.id;
- const listReport = await adminForum_getListReportKomentarbyId({komentarId: komentarId, page: 1});
+ const listReport = await adminForum_getListReportKomentarbyId({
+ komentarId: komentarId,
+ page: 1,
+ });
+ const dataKomentar = await adminForum_funGetOneKomentarById({
+ komentarId: komentarId,
+ });
return (
<>
>
);
diff --git a/src/app/dev/admin/forum/sub-menu/report-komentar/page.tsx b/src/app/dev/admin/forum/sub-menu/report-komentar/page.tsx
new file mode 100644
index 00000000..dfff6d5b
--- /dev/null
+++ b/src/app/dev/admin/forum/sub-menu/report-komentar/page.tsx
@@ -0,0 +1,12 @@
+import adminForum_funGetAllReportKomentar from "@/app_modules/admin/forum/fun/get/get_all_report_komentar";
+import AdminForum_TableReportKomentar from "@/app_modules/admin/forum/sub_menu/table_report_komentar";
+
+export default async function Page() {
+ const listData = await adminForum_funGetAllReportKomentar({ page: 1 });
+
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/forum/detail/[id]/layout.tsx b/src/app/dev/forum/detail/main-detail/[id]/layout.tsx
similarity index 100%
rename from src/app/dev/forum/detail/[id]/layout.tsx
rename to src/app/dev/forum/detail/main-detail/[id]/layout.tsx
diff --git a/src/app/dev/forum/detail/[id]/loading.tsx b/src/app/dev/forum/detail/main-detail/[id]/loading.tsx
similarity index 100%
rename from src/app/dev/forum/detail/[id]/loading.tsx
rename to src/app/dev/forum/detail/main-detail/[id]/loading.tsx
diff --git a/src/app/dev/forum/detail/[id]/page.tsx b/src/app/dev/forum/detail/main-detail/[id]/page.tsx
similarity index 76%
rename from src/app/dev/forum/detail/[id]/page.tsx
rename to src/app/dev/forum/detail/main-detail/[id]/page.tsx
index 106c53ea..325d3b6b 100644
--- a/src/app/dev/forum/detail/[id]/page.tsx
+++ b/src/app/dev/forum/detail/main-detail/[id]/page.tsx
@@ -1,5 +1,5 @@
-import Forum_Detail from "@/app_modules/forum/detail";
-import { forum_getKomentarById } from "@/app_modules/forum/fun/get/get_komentar_by_id";
+import Forum_MainDetail from "@/app_modules/forum/detail/main_detail";
+import { forum_funGetAllKomentarById } from "@/app_modules/forum/fun/get/get_all_komentar_by_id";
import { forum_getOnePostingById } from "@/app_modules/forum/fun/get/get_one_posting_by_id";
import { forum_countOneTotalKomentarById } from "@/app_modules/forum/fun/count/count_one_total_komentar_by_id";
import { user_getOneUserId } from "@/app_modules/fun_global/get_user_token";
@@ -11,13 +11,13 @@ export default async function Page({ params }: { params: { id: string } }) {
const userLoginId = await user_getOneUserId();
const dataPosting = await forum_getOnePostingById(postingId);
- const listKomentar = await forum_getKomentarById(postingId);
+ const listKomentar = await forum_funGetAllKomentarById(postingId);
dataPosting?.isActive === false && redirect(RouterForum.beranda);
return (
<>
-
+
+ >
+ );
+}
diff --git a/src/app/dev/forum/detail/report-posting/[id]/page.tsx b/src/app/dev/forum/detail/report-posting/[id]/page.tsx
new file mode 100644
index 00000000..faa3d24a
--- /dev/null
+++ b/src/app/dev/forum/detail/report-posting/[id]/page.tsx
@@ -0,0 +1,12 @@
+import { Forum_DetailReportPosting } from "@/app_modules/forum";
+import forum_funGetOneReportedPostingById from "@/app_modules/forum/fun/get/get_one_posting_reported_by_id";
+
+export default async function Page({params}: {params: {id: string}}) {
+ const postingId = params.id
+ const dataPosting = await forum_funGetOneReportedPostingById({postingId: postingId})
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/src/app/dev/forum/forumku/[id]/page.tsx b/src/app/dev/forum/forumku/[id]/page.tsx
index ca9e99b3..2432252d 100644
--- a/src/app/dev/forum/forumku/[id]/page.tsx
+++ b/src/app/dev/forum/forumku/[id]/page.tsx
@@ -1,5 +1,5 @@
import { Forum_Forumku } from "@/app_modules/forum";
-import { forum_getListPostingByAuhtorId } from "@/app_modules/forum/fun/get/get_list_posting_by_author_id";
+import { forum_getAllPostingByAuhtorId } from "@/app_modules/forum/fun/get/get_list_posting_by_author_id";
import { forum_countOneTotalKomentarById } from "@/app_modules/forum/fun/count/count_one_total_komentar_by_id";
import { user_getOneUserId } from "@/app_modules/fun_global/get_user_token";
import { user_getOneByUserId } from "@/app_modules/home/fun/get/get_one_user_by_id";
@@ -25,7 +25,7 @@ export default async function Page({ params }: { params: { id: string } }) {
// setTimeout(a, 1000);
// });
- const dataPosting = await forum_getListPostingByAuhtorId(authorId);
+ const dataPosting = await forum_getAllPostingByAuhtorId({authorId: authorId, page: 1});
const totalPosting = await forum_countPostingByAuthorId(authorId);
return (
diff --git a/src/app/dev/forum/report/komentar/[id]/page.tsx b/src/app/dev/forum/report/komentar/[id]/page.tsx
index 64e4a7b4..88717b66 100644
--- a/src/app/dev/forum/report/komentar/[id]/page.tsx
+++ b/src/app/dev/forum/report/komentar/[id]/page.tsx
@@ -1,15 +1,19 @@
import { Forum_ReportKomentar } from "@/app_modules/forum";
import { forum_getMasterKategoriReport } from "@/app_modules/forum/fun/master/get_master_kategori_report";
+import { user_getOneUserId } from "@/app_modules/fun_global/get_user_token";
export default async function Page({ params }: { params: { id: string } }) {
let komentarId = params.id;
const listReport = await forum_getMasterKategoriReport();
+ const userLoginId = await user_getOneUserId();
+
return (
<>
>
);
diff --git a/src/app/dev/forum/report/posting-lainnya/[id]/page.tsx b/src/app/dev/forum/report/posting-lainnya/[id]/page.tsx
index 0d5b8cbd..3039aef6 100644
--- a/src/app/dev/forum/report/posting-lainnya/[id]/page.tsx
+++ b/src/app/dev/forum/report/posting-lainnya/[id]/page.tsx
@@ -1,11 +1,16 @@
import { Forum_ReportPostingLainnya } from "@/app_modules/forum";
+import { user_getOneUserId } from "@/app_modules/fun_global/get_user_token";
export default async function Page({ params }: { params: { id: string } }) {
- let postingIg = params.id;
+ let postingId = params.id;
+ const userLoginId = await user_getOneUserId()
return (
<>
-
+
>
);
}
diff --git a/src/app/dev/forum/report/posting/[id]/page.tsx b/src/app/dev/forum/report/posting/[id]/page.tsx
index aa172433..d52c5827 100644
--- a/src/app/dev/forum/report/posting/[id]/page.tsx
+++ b/src/app/dev/forum/report/posting/[id]/page.tsx
@@ -1,13 +1,11 @@
import { Forum_ReportPosting } from "@/app_modules/forum";
-import { forum_getOnePostingById } from "@/app_modules/forum/fun/get/get_one_posting_by_id";
import { forum_getMasterKategoriReport } from "@/app_modules/forum/fun/master/get_master_kategori_report";
import { user_getOneUserId } from "@/app_modules/fun_global/get_user_token";
export default async function Page({ params }: { params: { id: string } }) {
let postingId = params.id;
const listReport = await forum_getMasterKategoriReport();
- const userLoginId = await user_getOneUserId()
- const dataPosting = await forum_getOnePostingById(postingId)
+ const userLoginId = await user_getOneUserId();
return (
<>
diff --git a/src/app/dev/forum/splash/loading.tsx b/src/app/dev/forum/splash/loading.tsx
deleted file mode 100644
index b1f8b62f..00000000
--- a/src/app/dev/forum/splash/loading.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-import ComponentGlobal_V2_LoadingPage from "@/app_modules/component_global/loading_page_v2";
-
-export default async function Page() {
- return (
- <>
-
- >
- );
-}
diff --git a/src/app/dev/home/page.tsx b/src/app/dev/home/page.tsx
index e70705ff..3469f504 100644
--- a/src/app/dev/home/page.tsx
+++ b/src/app/dev/home/page.tsx
@@ -26,7 +26,7 @@ export default async function Page() {
return (
<>
-
+
>
);
}
diff --git a/src/app/emotion.tsx b/src/app/emotion.tsx
index 478edabf..01572366 100644
--- a/src/app/emotion.tsx
+++ b/src/app/emotion.tsx
@@ -1,11 +1,9 @@
"use client";
-import AppNotif from "@/app_modules/notif";
// import './globals.css'
import { CacheProvider } from "@emotion/react";
-import { Image, MantineProvider, useEmotionCache } from "@mantine/core";
+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({
diff --git a/src/app/lib/router_admin/router_admin_forum.ts b/src/app/lib/router_admin/router_admin_forum.ts
index 9b68b6f9..0957a7b2 100644
--- a/src/app/lib/router_admin/router_admin_forum.ts
+++ b/src/app/lib/router_admin/router_admin_forum.ts
@@ -5,7 +5,7 @@ export const RouterAdminForum = {
// sub menu
table_posting: "/dev/admin/forum/sub-menu/posting",
table_report_posting: "/dev/admin/forum/sub-menu/report-posting",
-
+ table_report_komentar: "/dev/admin/forum/sub-menu/report-komentar",
// detail
detail_posting: "/dev/admin/forum/detail/",
diff --git a/src/app/lib/router_hipmi/router_forum.ts b/src/app/lib/router_hipmi/router_forum.ts
index ee955887..2666cc4b 100644
--- a/src/app/lib/router_hipmi/router_forum.ts
+++ b/src/app/lib/router_hipmi/router_forum.ts
@@ -13,9 +13,11 @@ export const RouterForum = {
edit_komentar: "/dev/forum/edit/komentar/",
//detail
- main_detail: "/dev/forum/detail/",
+ main_detail: "/dev/forum/detail/main-detail/",
+ detail_report_komentar: "/dev/forum/detail/report-komentar/",
+ detail_report_posting: "/dev/forum/detail/report-posting/",
- // komentra
+ // komentar
komentar: "/dev/forum/komentar/",
//report
diff --git a/src/app/zCoba/page.tsx b/src/app/zCoba/page.tsx
index d171ef0a..6cccd737 100644
--- a/src/app/zCoba/page.tsx
+++ b/src/app/zCoba/page.tsx
@@ -1,16 +1,17 @@
+import ComponentGlobal_HeaderTamplate from "@/app_modules/component_global/header_tamplate";
+import ComponentGlobal_UI_LayoutTamplate from "@/app_modules/component_global/ui/ui_layout_tamplate";
import Coba_TestLoading from "@/app_modules/zCoba";
+import { Text } from "@mantine/core";
export default async function Page() {
-
-
- await new Promise((a, b) => {
- setTimeout(a, 3000);
- });
+ await new Promise((a, b) => {
+ setTimeout(a, 3000);
+ });
return (
<>
-
+ {/* */}
>
);
}
diff --git a/src/app_modules/admin/forum/component/detail_one_komentar.tsx b/src/app_modules/admin/forum/component/detail_one_komentar.tsx
new file mode 100644
index 00000000..a2ff9e49
--- /dev/null
+++ b/src/app_modules/admin/forum/component/detail_one_komentar.tsx
@@ -0,0 +1,64 @@
+"use client";
+
+import { MODEL_FORUM_KOMENTAR, MODEL_FORUM_POSTING } from "@/app_modules/forum/model/interface";
+import {
+ Badge,
+ Box,
+ Divider,
+ Group,
+ Paper,
+ Spoiler,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+
+export default function ComponentAdminForum_ViewOneDetailKomentar({
+ dataKomentar,
+}: {
+ dataKomentar: MODEL_FORUM_KOMENTAR;
+}) {
+ return (
+ <>
+
+
+
+ Detail Komentar
+
+
+
+
+
+
+
+
+ Username:{" "}
+
+ {dataKomentar?.Author?.username}
+
+
+
+
+ {/* */}
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/admin/forum/component/detail_one_posting.tsx b/src/app_modules/admin/forum/component/detail_one_posting.tsx
index 74fe370f..13312433 100644
--- a/src/app_modules/admin/forum/component/detail_one_posting.tsx
+++ b/src/app_modules/admin/forum/component/detail_one_posting.tsx
@@ -21,7 +21,7 @@ export default function ComponentAdminForum_ViewOneDetailPosting({
return (
<>
-
+
Detail Posting
@@ -31,9 +31,9 @@ export default function ComponentAdminForum_ViewOneDetailPosting({
-
+
Username:{" "}
-
+
{dataPosting?.Author?.username}
@@ -48,7 +48,7 @@ export default function ComponentAdminForum_ViewOneDetailPosting({
{dataPosting?.ForumMaster_StatusPosting?.status}
-
+ {/* */}
diff --git a/src/app_modules/admin/forum/fun/count/fun_count_laporan_komentar.ts b/src/app_modules/admin/forum/fun/count/fun_count_laporan_komentar.ts
index 9402b709..c78daf1b 100644
--- a/src/app_modules/admin/forum/fun/count/fun_count_laporan_komentar.ts
+++ b/src/app_modules/admin/forum/fun/count/fun_count_laporan_komentar.ts
@@ -6,6 +6,9 @@ export async function adminForum_countLaporanKomentar() {
const count = await prisma.forum_ReportKomentar.count({
where: {
isActive: true,
+ Forum_Komentar: {
+ isActive: true,
+ },
},
});
diff --git a/src/app_modules/admin/forum/fun/count/fun_count_laporan_posting.ts b/src/app_modules/admin/forum/fun/count/fun_count_laporan_posting.ts
index fa673c48..9e88da10 100644
--- a/src/app_modules/admin/forum/fun/count/fun_count_laporan_posting.ts
+++ b/src/app_modules/admin/forum/fun/count/fun_count_laporan_posting.ts
@@ -6,6 +6,9 @@ export async function adminForum_countLaporanPosting() {
const count = await prisma.forum_ReportPosting.count({
where: {
isActive: true,
+ Forum_Posting: {
+ isActive: true,
+ },
},
});
diff --git a/src/app_modules/admin/forum/fun/count/fun_count_publish.ts b/src/app_modules/admin/forum/fun/count/fun_count_publish.ts
index c5fde5de..2042cc7e 100644
--- a/src/app_modules/admin/forum/fun/count/fun_count_publish.ts
+++ b/src/app_modules/admin/forum/fun/count/fun_count_publish.ts
@@ -6,7 +6,9 @@ export async function adminForum_countPublish() {
const count = await prisma.forum_Posting.count({
where: {
isActive: true,
+
},
+
});
return count;
diff --git a/src/app_modules/admin/forum/fun/get/get_all_report_komentar.ts b/src/app_modules/admin/forum/fun/get/get_all_report_komentar.ts
new file mode 100644
index 00000000..e365a254
--- /dev/null
+++ b/src/app_modules/admin/forum/fun/get/get_all_report_komentar.ts
@@ -0,0 +1,98 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import { ceil } from "lodash";
+
+export default async function adminForum_funGetAllReportKomentar({
+ page,
+ search,
+}: {
+ page: number;
+ search?: string;
+}) {
+ const takeData = 10;
+ const skipData = page * takeData - takeData;
+
+ const data = await prisma.forum_ReportKomentar.findMany({
+ take: takeData,
+ skip: skipData,
+ orderBy: {
+ createdAt: "desc",
+ },
+ where: {
+ Forum_Komentar: {
+ isActive: true,
+ komentar: {
+ contains: search,
+ mode: "insensitive",
+ },
+ },
+ },
+ select: {
+ id: true,
+ isActive: true,
+ createdAt: true,
+ deskripsi: true,
+ forumMaster_KategoriReportId: true,
+ ForumMaster_KategoriReport: {
+ select: {
+ id: true,
+ title: true,
+ deskripsi: true,
+ },
+ },
+ forum_KomentarId: true,
+ Forum_Komentar: {
+ select: {
+ id: true,
+ komentar: true,
+ forum_PostingId: true,
+ // Forum_Posting: {
+ // select: {
+ // id: true,
+ // diskusi: true,
+ // ForumMaster_StatusPosting: {
+ // select: {
+ // id: true,
+ // status: true,
+ // },
+ // },
+ // Author: {
+ // select: {
+ // id: true,
+ // username: true,
+ // },
+ // },
+ // },
+ // },
+ },
+ },
+ userId: true,
+ User: {
+ select: {
+ id: true,
+ username: true,
+ },
+ },
+ },
+ });
+
+ const nCount = await prisma.forum_ReportKomentar.count({
+ where: {
+ Forum_Komentar: {
+ isActive: true,
+ komentar: {
+ contains: search,
+ mode: "insensitive",
+ },
+ },
+ },
+ });
+
+ const allData = {
+ data: data,
+ nPage: ceil(nCount / takeData),
+ };
+
+ return allData;
+}
diff --git a/src/app_modules/admin/forum/fun/get/get_all_report_posting.tsx b/src/app_modules/admin/forum/fun/get/get_all_report_posting.ts
similarity index 100%
rename from src/app_modules/admin/forum/fun/get/get_all_report_posting.tsx
rename to src/app_modules/admin/forum/fun/get/get_all_report_posting.ts
diff --git a/src/app_modules/admin/forum/fun/get/get_one_komentar_by_id.ts b/src/app_modules/admin/forum/fun/get/get_one_komentar_by_id.ts
new file mode 100644
index 00000000..f1f0ff57
--- /dev/null
+++ b/src/app_modules/admin/forum/fun/get/get_one_komentar_by_id.ts
@@ -0,0 +1,31 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+
+export default async function adminForum_funGetOneKomentarById({
+ komentarId,
+}: {
+ komentarId: string;
+}) {
+
+ const data = await prisma.forum_Komentar.findFirst({
+ where: {
+ id: komentarId,
+ },
+ select: {
+ id: true,
+ isActive: true,
+ authorId: true,
+ Author: {
+ select: {
+ id: true,
+ username: true,
+ },
+ },
+ komentar: true,
+ forum_PostingId: true,
+ },
+ });
+
+ return data;
+}
diff --git a/src/app_modules/admin/forum/fun/get/get_one_posting_by_id.ts b/src/app_modules/admin/forum/fun/get/get_one_posting_by_id.ts
index 2170f4f5..a84c0949 100644
--- a/src/app_modules/admin/forum/fun/get/get_one_posting_by_id.ts
+++ b/src/app_modules/admin/forum/fun/get/get_one_posting_by_id.ts
@@ -16,6 +16,7 @@ export async function adminForum_getOnePostingById(postingId: string) {
status: true,
},
},
+ authorId: true,
Author: {
select: {
id: true,
diff --git a/src/app_modules/admin/forum/index.tsx b/src/app_modules/admin/forum/index.tsx
index 199053be..df3d8971 100644
--- a/src/app_modules/admin/forum/index.tsx
+++ b/src/app_modules/admin/forum/index.tsx
@@ -4,6 +4,7 @@ import AdminForum_TableReportPosting from "./sub_menu/table_report_posting";
import AdminForum_DetailPosting from "./detail/detail_posting";
import AdminForum_HasilReportPosting from "./sub_detail/hasil_report_posting";
import AdminForum_HasilReportKomentar from "./sub_detail/hasil_report_komentar";
+import AdminForum_TableReportKomentar from "./sub_menu/table_report_komentar";
export {
AdminForum_Main,
@@ -12,4 +13,5 @@ export {
AdminForum_DetailPosting as AdminForum_LihatSemuaKomentar,
AdminForum_HasilReportPosting,
AdminForum_HasilReportKomentar,
+ AdminForum_TableReportKomentar,
};
diff --git a/src/app_modules/admin/forum/sub_detail/hasil_report_komentar.tsx b/src/app_modules/admin/forum/sub_detail/hasil_report_komentar.tsx
index 7ec2e6b9..097ed84f 100644
--- a/src/app_modules/admin/forum/sub_detail/hasil_report_komentar.tsx
+++ b/src/app_modules/admin/forum/sub_detail/hasil_report_komentar.tsx
@@ -6,8 +6,9 @@ import ComponentAdminDonasi_TombolKembali from "@/app_modules/admin/donasi/compo
import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil";
import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal";
import {
+ MODEL_FORUM_KOMENTAR,
MODEL_FORUM_MASTER_REPORT,
- MODEL_FORUM_REPORT,
+ MODEL_FORUM_REPORT_POSTING,
} from "@/app_modules/forum/model/interface";
import {
Badge,
@@ -41,22 +42,38 @@ import { useDisclosure, useShallowEffect } from "@mantine/hooks";
import ComponentAdminGlobal_IsEmptyData from "../../component_global/is_empty_data";
import { adminForum_getListReportKomentarbyId } from "../fun/get/get_list_report_komentar_by_id";
import ComponentAdminGlobal_BackButton from "../../component_global/back_button";
+import ComponentAdminForum_ViewOneDetailKomentar from "../component/detail_one_komentar";
+import adminForum_funGetOneKomentarById from "../fun/get/get_one_komentar_by_id";
+import mqtt_client from "@/util/mqtt_client";
+import adminNotifikasi_funCreateToUser from "../../notifikasi/fun/create/fun_create_notif_user";
export default function AdminForum_HasilReportKomentar({
komentarId,
listReport,
+ dataKomentar,
}: {
komentarId: string;
listReport: any;
+ dataKomentar: MODEL_FORUM_KOMENTAR;
}) {
+ const [data, setData] = useState(dataKomentar);
+ console.log(komentarId);
+
return (
<>
-
+ {
+ setData(val);
+ }}
+ />
+
{/* {JSON.stringify(listReport, null, 2)} */}
@@ -64,23 +81,56 @@ export default function AdminForum_HasilReportKomentar({
);
}
-function ButtonDeleteKomentar({ komentarId }: { komentarId: string }) {
+function ButtonDeleteKomentar({
+ komentarId,
+ data,
+ onSuccess,
+}: {
+ komentarId: string;
+ data: MODEL_FORUM_KOMENTAR;
+ onSuccess: (val: any) => void;
+}) {
const router = useRouter();
const [opened, { open, close }] = useDisclosure(false);
const [loadingDel2, setLoadingDel2] = useState(false);
async function onDelete() {
- await adminForum_funDeleteKomentarById(komentarId).then((res) => {
+ await adminForum_funDeleteKomentarById(komentarId).then(async (res) => {
if (res.status === 200) {
setLoadingDel2(false);
close();
- router.back();
+
+ const dataKomentar = await adminForum_funGetOneKomentarById({
+ komentarId: komentarId,
+ });
+ onSuccess(dataKomentar);
+
+ const dataNotif = {
+ appId: data.id,
+ status: "Report Komentar",
+ userId: data.authorId,
+ pesan: data.komentar,
+ kategoriApp: "FORUM",
+ title: "Komentar anda telah di laporkan",
+ };
+
+ const notif = await adminNotifikasi_funCreateToUser({
+ data: dataNotif as any,
+ });
+ if (notif.status === 201) {
+ mqtt_client.publish(
+ "USER",
+ JSON.stringify({ userId: data.authorId, count: 1 })
+ );
+ }
+
ComponentGlobal_NotifikasiBerhasil(res.message);
} else {
ComponentGlobal_NotifikasiGagal(res.message);
}
});
}
+
return (
<>
@@ -111,17 +161,21 @@ function ButtonDeleteKomentar({ komentarId }: { komentarId: string }) {
- }
- onClick={() => {
- open();
- }}
- >
- Hapus Komentar
-
+ {data.isActive ? (
+ }
+ onClick={() => {
+ open();
+ }}
+ >
+ Hapus Komentar
+
+ ) : (
+ ""
+ )}
>
);
}
@@ -134,7 +188,9 @@ function HasilReportPosting({
komentarId: string;
}) {
const router = useRouter();
- const [data, setData] = useState(listReport.data);
+ const [data, setData] = useState(
+ listReport.data
+ );
const [nPage, setNPage] = useState(listReport.nPage);
const [activePage, setActivePage] = useState(1);
const [isSearch, setSearch] = useState("");
@@ -230,7 +286,7 @@ function HasilReportPosting({
Username
- Title
+ Kategori
|
Deskripsi
diff --git a/src/app_modules/admin/forum/sub_detail/hasil_report_posting.tsx b/src/app_modules/admin/forum/sub_detail/hasil_report_posting.tsx
index bea6c1f9..2f3bcdf5 100644
--- a/src/app_modules/admin/forum/sub_detail/hasil_report_posting.tsx
+++ b/src/app_modules/admin/forum/sub_detail/hasil_report_posting.tsx
@@ -5,7 +5,7 @@ import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_glob
import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal";
import {
MODEL_FORUM_POSTING,
- MODEL_FORUM_REPORT,
+ MODEL_FORUM_REPORT_POSTING,
} from "@/app_modules/forum/model/interface";
import {
Button,
@@ -31,6 +31,8 @@ import ComponentAdminGlobal_IsEmptyData from "../../component_global/is_empty_da
import { adminForum_funDeletePostingById } from "../fun/delete/fun_delete_posting_by_id";
import { adminForum_getListReportPostingById } from "../fun/get/get_list_report_posting_by_id";
import ComponentAdminForum_ViewOneDetailPosting from "../component/detail_one_posting";
+import mqtt_client from "@/util/mqtt_client";
+import adminNotifikasi_funCreateToUser from "../../notifikasi/fun/create/fun_create_notif_user";
export default function AdminForum_HasilReportPosting({
dataPosting,
@@ -45,7 +47,7 @@ export default function AdminForum_HasilReportPosting({
-
+
{
- if (res.status === 200) {
- setLoadingDel2(false);
- setLoadingDel(false);
- close();
- router.back();
- ComponentGlobal_NotifikasiBerhasil(res.message);
- } else {
- ComponentGlobal_NotifikasiGagal(res.message);
+ const del = await adminForum_funDeletePostingById(dataPosting.id);
+ if (del.status === 200) {
+ setLoadingDel2(false);
+ close();
+ router.back();
+
+ const dataNotif = {
+ appId: dataPosting.id,
+ status: "Report Posting",
+ userId: dataPosting.authorId,
+ pesan: dataPosting.diskusi,
+ kategoriApp: "FORUM",
+ title: "Postingan anda telah di laporkan",
+ };
+ const notif = await adminNotifikasi_funCreateToUser({
+ data: dataNotif as any,
+ });
+ if (notif.status === 201) {
+ mqtt_client.publish(
+ "USER",
+ JSON.stringify({ userId: dataPosting.authorId, count: 1 })
+ );
}
- });
+
+ ComponentGlobal_NotifikasiBerhasil(del.message);
+ } else {
+ ComponentGlobal_NotifikasiGagal(del.message);
+ }
}
return (
<>
@@ -93,12 +116,13 @@ function ButtonDeletePosting({ postingId }: { postingId: string }) {
radius={"xl"}
onClick={() => {
close();
- setLoadingDel(false);
}}
>
Batal
|
- Title
+ Kategori
|
Deskripsi
diff --git a/src/app_modules/admin/forum/sub_menu/table_report_komentar.tsx b/src/app_modules/admin/forum/sub_menu/table_report_komentar.tsx
new file mode 100644
index 00000000..acdfde05
--- /dev/null
+++ b/src/app_modules/admin/forum/sub_menu/table_report_komentar.tsx
@@ -0,0 +1,261 @@
+"use client";
+
+import { RouterAdminForum } from "@/app/lib/router_admin/router_admin_forum";
+import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/component_global/header_tamplate";
+import {
+ MODEL_FORUM_REPORT_KOMENTAR,
+ MODEL_FORUM_REPORT_POSTING,
+} from "@/app_modules/forum/model/interface";
+import {
+ Badge,
+ Box,
+ Button,
+ Center,
+ Group,
+ Pagination,
+ Paper,
+ ScrollArea,
+ Spoiler,
+ Stack,
+ Table,
+ Text,
+ TextInput,
+ Title,
+} from "@mantine/core";
+import { IconFlag3, IconSearch } from "@tabler/icons-react";
+import { isEmpty } from "lodash";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import ComponentAdminGlobal_IsEmptyData from "../../component_global/is_empty_data";
+import ComponentAdminForum_ButtonDeletePosting from "../component/button_delete";
+import adminForum_funGetAllReportPosting from "../fun/get/get_all_report_posting";
+import { Forum_Komentar } from "@/app_modules/forum";
+import adminForum_funGetAllReportKomentar from "../fun/get/get_all_report_komentar";
+import { useShallowEffect } from "@mantine/hooks";
+
+export default function AdminForum_TableReportKomentar({
+ listData,
+}: {
+ listData: any;
+}) {
+ return (
+ <>
+
+
+
+ {/* {JSON.stringify(listPublish, null, 2)} */}
+
+ >
+ );
+}
+
+function TableView({ listData }: { listData: any }) {
+ const router = useRouter();
+ const [data, setData] = useState(
+ listData.data
+ );
+ const [nPage, setNPage] = useState(listData.nPage);
+ const [activePage, setActivePage] = useState(1);
+ const [isSearch, setSearch] = useState("");
+
+ useShallowEffect(() => {
+ onLoadData({
+ onLoad(val) {
+ setData(val.data as any);
+ setNPage(val.nPage);
+ setActivePage(1);
+ },
+ });
+ }, [setData, setNPage]);
+
+ async function onLoadData({ onLoad }: { onLoad: (val: any) => void }) {
+ const loadData = await adminForum_funGetAllReportKomentar({ page: 1 });
+ onLoad(loadData);
+
+ // setData(loadData.data as any);
+ // setNPage(loadData.nPage);
+ }
+
+ async function onSearch(s: string) {
+ setSearch(s);
+ setActivePage(1);
+ const loadData = await adminForum_funGetAllReportKomentar({
+ page: 1,
+ search: s,
+ });
+ setData(loadData.data as any);
+ setNPage(loadData.nPage);
+ }
+
+ async function onPageClick(p: any) {
+ setActivePage(p);
+ const loadData = await adminForum_funGetAllReportKomentar({
+ search: isSearch,
+ page: p,
+ });
+ setData(loadData.data as any);
+ setNPage(loadData.nPage);
+ }
+
+ const TableRows = data?.map((e, i) => (
+
+ |
+
+ {e?.User.username}
+
+ |
+
+
+ {e?.forumMaster_KategoriReportId === null ? (
+ Lainnya
+ ) : (
+ {e?.ForumMaster_KategoriReport.title}
+ )}
+
+ |
+
+
+
+
+
+
+
+ |
+
+
+
+
+ {new Intl.DateTimeFormat(["id-ID"], { dateStyle: "medium" }).format(
+ e.createdAt
+ )}
+
+
+ |
+
+
+
+ {/* */}
+
+ {/* {
+ if (val) {
+ onLoadData();
+ }
+ }}
+ /> */}
+
+ |
+
+ ));
+
+ return (
+ <>
+
+
+
+ Report Komentar
+
+ }
+ radius={"xl"}
+ placeholder="Cari postingan"
+ onChange={(val) => {
+ onSearch(val.currentTarget.value);
+ }}
+ />
+
+
+ {isEmpty(data) ? (
+
+ ) : (
+
+
+
+
+
+ |
+ Pelapor
+ |
+
+
+ Jenis Laporan
+ |
+
+
+ Komentar
+ |
+
+
+ Tanggal Report
+ |
+
+
+ Aksi
+ |
+
+
+
+ {TableRows}
+
+
+
+ {
+ onPageClick(val);
+ }}
+ />
+
+
+ )}
+
+ >
+ );
+}
+
+function ButtonLihatReportLainnya({ komentarId }: { komentarId: string }) {
+ const router = useRouter();
+ const [loading, setLoading] = useState(false);
+ return (
+ <>
+ }
+ onClick={() => {
+ setLoading(true);
+ router.push(RouterAdminForum.report_komentar + komentarId);
+ }}
+ >
+ Lihat Report Lain
+
+ >
+ );
+}
diff --git a/src/app_modules/admin/forum/sub_menu/table_report_posting.tsx b/src/app_modules/admin/forum/sub_menu/table_report_posting.tsx
index 481dc1d7..0dac9b93 100644
--- a/src/app_modules/admin/forum/sub_menu/table_report_posting.tsx
+++ b/src/app_modules/admin/forum/sub_menu/table_report_posting.tsx
@@ -1,11 +1,9 @@
"use client";
import { RouterAdminForum } from "@/app/lib/router_admin/router_admin_forum";
-import { RouterForum } from "@/app/lib/router_hipmi/router_forum";
import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/component_global/header_tamplate";
import {
- MODEL_FORUM_POSTING,
- MODEL_FORUM_REPORT,
+ MODEL_FORUM_REPORT_POSTING
} from "@/app_modules/forum/model/interface";
import {
Badge,
@@ -13,7 +11,6 @@ import {
Button,
Center,
Group,
- Modal,
Pagination,
Paper,
ScrollArea,
@@ -22,23 +19,15 @@ import {
Table,
Text,
TextInput,
- Title,
+ Title
} from "@mantine/core";
-import { IconMessageCircle, IconSearch } from "@tabler/icons-react";
-import { IconFlag3 } from "@tabler/icons-react";
-import { IconEyeCheck, IconTrash } from "@tabler/icons-react";
-import _, { isEmpty } from "lodash";
+import { IconFlag3, IconSearch } from "@tabler/icons-react";
+import { isEmpty } from "lodash";
import { useRouter } from "next/navigation";
import { useState } from "react";
-import { adminForum_funDeletePostingById } from "../fun/delete/fun_delete_posting_by_id";
-import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil";
-import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal";
-import { useDisclosure } from "@mantine/hooks";
-import { adminForum_getListPosting } from "../fun/get/get_list_publish";
-import adminJob_getListPublish from "@/app_modules/admin/job/fun/get/get_list_publish";
+import ComponentAdminGlobal_IsEmptyData from "../../component_global/is_empty_data";
import ComponentAdminForum_ButtonDeletePosting from "../component/button_delete";
import adminForum_funGetAllReportPosting from "../fun/get/get_all_report_posting";
-import ComponentAdminGlobal_IsEmptyData from "../../component_global/is_empty_data";
export default function AdminForum_TableReportPosting({
listData,
@@ -58,7 +47,7 @@ export default function AdminForum_TableReportPosting({
function TableView({ listData }: { listData: any }) {
const router = useRouter();
- const [data, setData] = useState(listData.data);
+ const [data, setData] = useState(listData.data);
const [nPage, setNPage] = useState(listData.nPage);
const [activePage, setActivePage] = useState(1);
const [isSearch, setSearch] = useState("");
@@ -109,7 +98,7 @@ function TableView({ listData }: { listData: any }) {
-
+ {/* |
{e?.Forum_Posting.Author.username}
@@ -130,7 +119,7 @@ function TableView({ listData }: { listData: any }) {
/>
- |
+ */}
@@ -160,14 +149,14 @@ function TableView({ listData }: { listData: any }) {
{/* */}
- {
if (val) {
onLoadData();
}
}}
- />
+ /> */}
|
@@ -190,7 +179,7 @@ function TableView({ listData }: { listData: any }) {
radius={"xl"}
placeholder="Cari postingan"
onChange={(val) => {
- // console.log(val.currentTarget.value)
+
onSearch(val.currentTarget.value);
}}
/>
@@ -218,12 +207,12 @@ function TableView({ listData }: { listData: any }) {
Jenis Laporan
|
-
+ {/* |
Author
|
Postingan
- |
+ | */}
Status Posting
|
diff --git a/src/app_modules/admin/list_page.tsx b/src/app_modules/admin/list_page.tsx
index ae9806ee..d7e09358 100644
--- a/src/app_modules/admin/list_page.tsx
+++ b/src/app_modules/admin/list_page.tsx
@@ -236,11 +236,11 @@ export const listAdminPage = [
name: "Report Posting",
path: RouterAdminForum.table_report_posting,
},
- // {
- // id: 74,
- // name: "Laporan Komentar",
- // path: RouterAdminForum.report_komentar,
- // },
+ {
+ id: 74,
+ name: "Report Komentar",
+ path: RouterAdminForum.table_report_komentar,
+ },
],
},
diff --git a/src/app_modules/auth/login/view.tsx b/src/app_modules/auth/login/view.tsx
index 8b8e87c0..d345a9b6 100644
--- a/src/app_modules/auth/login/view.tsx
+++ b/src/app_modules/auth/login/view.tsx
@@ -1,6 +1,7 @@
"use client";
import {
+ BackgroundImage,
Box,
Button,
Center,
@@ -81,56 +82,56 @@ export default function Login() {
return (
<>
-
-
-
- WELCOME TO
-
- HIPMI APPS
+
+
+
+ WELCOME TO
+
+ HIPMI APPS
+
+
+
+
+ Nomor telepon
+
+ {
+ setPhone(val);
+ }}
+ />
+
+ {isError ? (
+
+ ) : (
+ ""
+ )}
+
+ {
+ onLogin();
+ }}
+ >
+ LOGIN
+
+
-
-
-
- Nomor telepon
-
- {
- setPhone(val);
- }}
- />
-
- {isError ? (
-
- ) : (
- ""
- )}
-
- {
- onLogin();
- }}
- >
- LOGIN
-
-
-
+
>
);
}
diff --git a/src/app_modules/auth/register/view.tsx b/src/app_modules/auth/register/view.tsx
index 710d8b0f..59dd2e1f 100644
--- a/src/app_modules/auth/register/view.tsx
+++ b/src/app_modules/auth/register/view.tsx
@@ -10,8 +10,13 @@ import {
Center,
PinInput,
Stack,
+ BackgroundImage,
} from "@mantine/core";
-import { IconCircleLetterH, IconCloudLockOpen, IconUserCircle } from "@tabler/icons-react";
+import {
+ IconCircleLetterH,
+ IconCloudLockOpen,
+ IconUserCircle,
+} from "@tabler/icons-react";
import { gs_nomor } from "../state/state";
import { useAtom } from "jotai";
import { useState } from "react";
@@ -28,7 +33,10 @@ import { IconPencilCheck } from "@tabler/icons-react";
import { RouterHome } from "@/app/lib/router_hipmi/router_home";
import { auth_funEditAktivasiKodeOtpById } from "../fun/fun_edit_aktivasi_kode_otp_by_id";
import ComponentGlobal_ErrorInput from "@/app_modules/component_global/error_input";
-import { AccentColor, MainColor } from "@/app_modules/component_global/color/color_pallet";
+import {
+ AccentColor,
+ MainColor,
+} from "@/app_modules/component_global/color/color_pallet";
export default function Register({ dataOtp }: { dataOtp: any }) {
const router = useRouter();
@@ -72,85 +80,26 @@ export default function Register({ dataOtp }: { dataOtp: any }) {
return (
<>
{/* {JSON.stringify(dataOtp,null,2)} */}
+
+
+
+
+ REGISTRASI
+
-
-
-
- REGISTRASI
-
+
-
-
-
-
- Anda akan terdaftar dengan nomor berikut{" "}
-
- +{nomor}
+
+
+ Anda akan terdaftar dengan nomor berikut{" "}
+
+ +{nomor}
+
-
- 0 && value.length < 5 ? (
-
- ) : _.values(value).includes(" ") ? (
-
-
-
-
- ) : isValue ? (
-
- ) : (
- ""
- )
- }
- onChange={(val) => {
- val.currentTarget.value.length > 0 ? setIsValue(false) : "";
- setValue(val.currentTarget.value);
- }}
- />
-
- {
- onRegistarsi();
- }}
- >
- DAFTAR
-
-
-
-
-
- {/*
-
-
-
-
-
-
- REGISTRASI
- Masukan username anda !
-
-
-
- Anda akan terdaftar dengan nomor berikut{" "}
-
- +{nomor}
-
-
-
-
-
- {
- onRegistarsi();
- }}
- >
- DAFTAR
-
+
+ {
+ onRegistarsi();
+ }}
+ >
+ DAFTAR
+
+
- */}
-
+
+
>
);
}
diff --git a/src/app_modules/auth/splash/view.tsx b/src/app_modules/auth/splash/view.tsx
index b7ae6b7a..5ca2f9d8 100644
--- a/src/app_modules/auth/splash/view.tsx
+++ b/src/app_modules/auth/splash/view.tsx
@@ -1,12 +1,7 @@
"use client";
import { MainColor } from "@/app_modules/component_global/color/color_pallet";
-import {
- Center,
- Image,
- Paper,
- Stack
-} from "@mantine/core";
+import { BackgroundImage, Center, Image, Paper, Stack } from "@mantine/core";
import { useShallowEffect } from "@mantine/hooks";
import { useRouter } from "next/navigation";
@@ -24,21 +19,28 @@ export default function SplashScreen({ data }: { data: any }) {
}, 2000);
}
}, []);
+
return (
<>
-
-
- {/* Welcome to */}
-
-
-
-
-
+
+
+
+ {/* Welcome to */}
+
+
+
+
+
+
>
);
}
diff --git a/src/app_modules/auth/validasi/view.tsx b/src/app_modules/auth/validasi/view.tsx
index bb9c4f00..2b729418 100644
--- a/src/app_modules/auth/validasi/view.tsx
+++ b/src/app_modules/auth/validasi/view.tsx
@@ -11,18 +11,17 @@ import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_glob
import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/component_global/notif_global/notifikasi_peringatan";
import {
ActionIcon,
+ BackgroundImage,
Box,
Button,
Center,
PinInput,
Stack,
Text,
- Title
+ Title,
} from "@mantine/core";
import { useFocusTrap } from "@mantine/hooks";
-import {
- IconChevronLeft
-} from "@tabler/icons-react";
+import { IconChevronLeft } from "@tabler/icons-react";
import { useRouter } from "next/navigation";
import { useState } from "react";
import { auth_funEditAktivasiKodeOtpById } from "../fun/fun_edit_aktivasi_kode_otp_by_id";
@@ -66,64 +65,74 @@ export default function Validasi({ dataOtp }: { dataOtp: any }) {
return (
<>
-
-
- router.back()}>
-
-
-
-
-
-
- Verifikasi Kode OTP
-
-
-
-
- Masukan 4 digit kode otp
-
-
- Yang dikirim ke +{nomor}
-
-
- {
- setInputOtp(val);
- }}
- />
-
-
-
+
+ {
- onVerifikasi();
+ position: "sticky",
+ top: 0,
}}
>
- VERIFIKASI
-
+ router.back()}>
+
+
+
+
+
+
+ Verifikasi Kode OTP
+
+
+
+
+ Masukan 4 digit kode otp
+
+
+ Yang dikirim ke{" "}
+
+ {" "}
+ +{nomor}
+
+
+
+ {
+ setInputOtp(val);
+ }}
+ />
+
+
+ {
+ onVerifikasi();
+ }}
+ >
+ VERIFIKASI
+
+
-
+
>
);
}
diff --git a/src/app_modules/colab/detail/chat/index.tsx b/src/app_modules/colab/detail/chat/index.tsx
index 40e3c30d..4debaea7 100644
--- a/src/app_modules/colab/detail/chat/index.tsx
+++ b/src/app_modules/colab/detail/chat/index.tsx
@@ -1,52 +1,41 @@
"use client";
import { RouterColab } from "@/app/lib/router_hipmi/router_colab";
+import { evnPesan } from "@/util/evn";
+import mqtt_client from "@/util/mqtt_client";
import {
ActionIcon,
Box,
- Button,
- Card,
Center,
- Code,
Grid,
Group,
- Header,
Loader,
Paper,
- ScrollArea,
Stack,
Text,
Textarea,
- Title,
+ Title
} from "@mantine/core";
+import { useShallowEffect } from "@mantine/hooks";
import {
IconChevronLeft,
IconCircle,
IconInfoSquareRounded,
IconSend,
} from "@tabler/icons-react";
-import { useRouter } from "next/navigation";
-import router from "next/router";
-import React, { useRef, useState } from "react";
-import {
- MODEL_COLLABORATION_MESSAGE,
- MODEL_COLLABORATION_ROOM_CHAT,
-} from "../../model/interface";
import _ from "lodash";
-import ComponentColab_IsEmptyData from "../../component/is_empty_data";
-import colab_getMessageByRoomId from "../../fun/get/room_chat/get_message_by_room_id";
-import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal";
-import colab_funCreateMessageByUserId from "../../fun/create/room/fun_create_message_by_user_id";
-import { useShallowEffect } from "@mantine/hooks";
-import mqtt_client from "@/util/mqtt_client";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
import useInfiniteScroll, {
ScrollDirection,
ScrollDirectionBooleanState,
} from "react-easy-infinite-scroll-hook";
-import toast from "react-simple-toasts";
-import colab_getOneMessageById from "../../fun/get/room_chat/get_one_message_by_id";
-import { List } from "react-virtualized";
-import { evnPesan } from "@/util/evn";
+import ComponentColab_IsEmptyData from "../../component/is_empty_data";
+import colab_getMessageByRoomId from "../../fun/get/room_chat/get_message_by_room_id";
+import {
+ MODEL_COLLABORATION_MESSAGE,
+ MODEL_COLLABORATION_ROOM_CHAT,
+} from "../../model/interface";
const list = Array(100).fill(0);
export default function ColabViewChat({
diff --git a/src/app_modules/component_global/color/color_pallet.ts b/src/app_modules/component_global/color/color_pallet.ts
index 9ce5fab0..15f676ba 100644
--- a/src/app_modules/component_global/color/color_pallet.ts
+++ b/src/app_modules/component_global/color/color_pallet.ts
@@ -8,5 +8,6 @@ export const AccentColor = {
blackgray: "#333533",
darkblue: "#002E59",
blue: "#00447D",
+ skyblue: "#00BFFF",
yellow: "#FFD60A",
};
diff --git a/src/app_modules/component_global/component_layout_tamplate.tsx b/src/app_modules/component_global/component_layout_tamplate.tsx
index 627b36c3..135d2079 100644
--- a/src/app_modules/component_global/component_layout_tamplate.tsx
+++ b/src/app_modules/component_global/component_layout_tamplate.tsx
@@ -1,21 +1,9 @@
"use client";
-import { RouterProfile } from "@/app/lib/router_hipmi/router_katalog";
-import { RouterUserSearch } from "@/app/lib/router_hipmi/router_user_search";
import {
Box,
- Center,
- Title,
- SimpleGrid,
- Loader,
- Stack,
- ActionIcon,
- Avatar,
- Text,
+ Stack
} from "@mantine/core";
-import { IconUserSearch, IconUserCircle } from "@tabler/icons-react";
-import router from "next/router";
-import { ComponentGlobal_NotifikasiPeringatan } from "./notif_global/notifikasi_peringatan";
export default function AppComponentGlobal_LayoutTamplate({
children,
@@ -44,7 +32,7 @@ export default function AppComponentGlobal_LayoutTamplate({
{/* Children */}
-
+
{children}
{footer ? (
diff --git a/src/app_modules/component_global/loading_page_v2.tsx b/src/app_modules/component_global/loading_page_v2.tsx
index a36ab160..a2d24ec2 100644
--- a/src/app_modules/component_global/loading_page_v2.tsx
+++ b/src/app_modules/component_global/loading_page_v2.tsx
@@ -47,8 +47,8 @@ export default function ComponentGlobal_V2_LoadingPage() {
<>
>
diff --git a/src/app_modules/component_global/ui/ui_header_tamplate.tsx b/src/app_modules/component_global/ui/ui_header_tamplate.tsx
new file mode 100644
index 00000000..22e2f794
--- /dev/null
+++ b/src/app_modules/component_global/ui/ui_header_tamplate.tsx
@@ -0,0 +1,89 @@
+"use client";
+
+import {
+ Header,
+ Group,
+ ActionIcon,
+ Text,
+ Title,
+ Box,
+ Loader,
+} from "@mantine/core";
+import { IconArrowLeft, IconChevronLeft } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import { AccentColor, MainColor } from "../color/color_pallet";
+
+export default function ComponentGlobal_UI_HeaderTamplate({
+ title,
+ // left button
+ hideButtonLeft,
+ iconLeft,
+ routerLeft,
+ // right button
+ iconRight,
+ routerRight,
+}: {
+ title: string;
+ // left button
+ hideButtonLeft?: boolean;
+ iconLeft?: any;
+ routerLeft?: any;
+ // right button
+ iconRight?: any;
+ routerRight?: any;
+}) {
+ const router = useRouter();
+ const [isLoading, setIsLoading] = useState(false);
+ const [isRightLoading, setRightLoading] = useState(false);
+
+ return (
+ <>
+
+
+ {
+ setIsLoading(true);
+ routerLeft === undefined
+ ? router.back()
+ : router.push(routerLeft);
+ }}
+ >
+ {isLoading ? : iconLeft ? iconLeft : }
+
+
+ {title}
+
+
+ {iconRight === undefined ? (
+
+ ) : routerRight === undefined ? (
+ {iconRight}
+ ) : (
+ {
+ setRightLoading(true);
+ router.push(routerRight);
+ }}
+ >
+ {iconRight}
+
+ )}
+
+
+ >
+ );
+}
diff --git a/src/app_modules/component_global/ui/ui_layout_tamplate.tsx b/src/app_modules/component_global/ui/ui_layout_tamplate.tsx
new file mode 100644
index 00000000..14cc3dd5
--- /dev/null
+++ b/src/app_modules/component_global/ui/ui_layout_tamplate.tsx
@@ -0,0 +1,77 @@
+"use client";
+
+import { BackgroundImage, Box, Center, ScrollArea } from "@mantine/core";
+import { AccentColor, MainColor } from "../color/color_pallet";
+import ComponentGlobal_HeaderTamplate from "../header_tamplate";
+import ComponentGlobal_UI_HeaderTamplate from "./ui_header_tamplate";
+import { RouterHome } from "@/app/lib/router_hipmi/router_home";
+
+export default function ComponentGlobal_UI_LayoutTamplate({
+ children,
+ header,
+ footer,
+}: {
+ children: React.ReactNode;
+ header?: React.ReactNode;
+ footer?: React.ReactNode;
+}) {
+ return (
+ <>
+
+ {/* Header */}
+ {header ? (
+
+ {header}
+
+ ) : (
+ ""
+ )}
+
+ {/* Children */}
+
+
+ {/* {Array.from({ length: 100 }).map((e, i) => (
+
+ {i + 1}
+
+ ))} */}
+ {children}
+
+
+
+ {/* Footer */}
+ {footer ? (
+
+ {footer}
+
+ ) : (
+ ""
+ )}
+
+ >
+ );
+}
diff --git a/src/app_modules/forum/component/beranda/beranda_card.tsx b/src/app_modules/forum/component/beranda/beranda_card.tsx
deleted file mode 100644
index d0c4d57d..00000000
--- a/src/app_modules/forum/component/beranda/beranda_card.tsx
+++ /dev/null
@@ -1,99 +0,0 @@
-"use client";
-
-import { RouterForum } from "@/app/lib/router_hipmi/router_forum";
-import { Stack, Card, Group, ActionIcon, Divider, Text } from "@mantine/core";
-import { IconMessageCircle, IconMessageCircleOff } from "@tabler/icons-react";
-
-
-
-import { useState } from "react";
-import { useShallowEffect } from "@mantine/hooks";
-import { useRouter } from "next/navigation";
-import { useAtom } from "jotai";
-
-
-import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/component_global/notif_global/notifikasi_peringatan";
-import { IconMessageCircleX } from "@tabler/icons-react";
-import { MODEL_FORUM_POSTING } from "../../model/interface";
-import ComponentForum_BerandaAuthorNameOnHeader from "./beranda_author_header";
-
-export default function ComponentForum_BerandaCardView({
- data,
- setData,
- setLoadingKomen,
- setLoadingDetail,
- userLoginId,
-}: {
- data: MODEL_FORUM_POSTING[];
- setData: any;
- setLoadingKomen: any;
- setLoadingDetail: any;
- userLoginId: any;
-}) {
- const router = useRouter();
- return (
- <>
-
- {data.map((e, i) => (
-
-
-
-
-
- {
- setLoadingDetail(true);
- router.push(RouterForum.main_detail + e.id);
- }}
- >
-
-
-
-
-
-
-
-
- {
- (e?.ForumMaster_StatusPosting.id as any) === 1
- ? (router.push(RouterForum.komentar + e?.id),
- setLoadingKomen(true))
- : router.push(RouterForum.main_detail + e?.id);
- }}
- >
- {(e?.ForumMaster_StatusPosting?.id as any) === 1 ? (
-
- ) : (
-
- )}
-
-
- {/* */}
-
- {e?._count}
-
-
-
-
-
- ))}
-
- >
- );
-}
diff --git a/src/app_modules/forum/component/detail_component/detail_create_komentar.tsx b/src/app_modules/forum/component/detail_component/detail_create_komentar.tsx
new file mode 100644
index 00000000..64e44782
--- /dev/null
+++ b/src/app_modules/forum/component/detail_component/detail_create_komentar.tsx
@@ -0,0 +1,119 @@
+"use client"
+
+import ComponentGlobal_InputCountDown from "@/app_modules/component_global/input_countdown";
+import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil";
+import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal";
+import notifikasiToUser_funCreate from "@/app_modules/notifikasi/fun/create/create_notif_to_user";
+import { Stack, Paper, Group, Button, Divider } from "@mantine/core";
+import { useState } from "react";
+import dynamic from "next/dynamic";
+const ReactQuill = dynamic(
+ () => {
+ return import("react-quill");
+ },
+ { ssr: false }
+);
+import { forum_funCreateKomentar } from "../../fun/create/fun_create_komentar";
+import { forum_funGetAllKomentarById } from "../../fun/get/get_all_komentar_by_id";
+import { MODEL_FORUM_POSTING } from "../../model/interface";
+import { useRouter } from "next/navigation";
+
+export default function ComponentForum_DetailCreateKomentar({
+ postingId,
+ onSetKomentar,
+ data,
+ userLoginId,
+}: {
+ postingId: string;
+ onSetKomentar: (val: any) => void;
+ data: MODEL_FORUM_POSTING;
+ userLoginId: string;
+}) {
+ const router = useRouter();
+ const [value, setValue] = useState("");
+ const [loading, setLoading] = useState(false);
+ const [isEmpty, setIsEmpty] = useState(false);
+
+ async function onComment() {
+ if (value.length > 500) {
+ return null;
+ }
+
+ const createComment = await forum_funCreateKomentar(postingId, value);
+ if (createComment.status === 201) {
+ const loadKomentar = await forum_funGetAllKomentarById(data.id);
+ onSetKomentar(loadKomentar);
+
+ setValue("");
+ setIsEmpty(true);
+ ComponentGlobal_NotifikasiBerhasil(createComment.message, 2000);
+
+ if (userLoginId !== data.Author.id) {
+ const dataNotif = {
+ appId: data.id,
+ userId: data.authorId,
+ pesan: value,
+ kategoriApp: "FORUM",
+ title: "Komentar baru",
+ };
+
+ const createNotifikasi = await notifikasiToUser_funCreate({
+ data: dataNotif as any,
+ });
+
+ if (createNotifikasi.status === 201) {
+ mqtt_client.publish(
+ "USER",
+ JSON.stringify({
+ userId: dataNotif.userId,
+ count: 1,
+ })
+ );
+ }
+ }
+ } else {
+ ComponentGlobal_NotifikasiGagal(createComment.message);
+ }
+ }
+
+ return (
+ <>
+
+
+ {
+ setValue(val);
+ }}
+ />
+
+
+
+
+
" || value.length > 500
+ ? true
+ : false
+ }
+ loaderPosition="center"
+ loading={loading ? true : false}
+ radius={"xl"}
+ onClick={() => onComment()}
+ >
+ Balas
+
+
+
+
+ >
+ );
+}
\ No newline at end of file
diff --git a/src/app_modules/forum/component/detail_component/detail_list_komentar.tsx b/src/app_modules/forum/component/detail_component/detail_list_komentar.tsx
new file mode 100644
index 00000000..c2b8eeeb
--- /dev/null
+++ b/src/app_modules/forum/component/detail_component/detail_list_komentar.tsx
@@ -0,0 +1,82 @@
+"use client"
+
+import { Stack, Center, Box, Card, Spoiler, Divider, Text } from "@mantine/core";
+import _ from "lodash";
+import { MODEL_FORUM_KOMENTAR } from "../../model/interface";
+import ComponentForum_KomentarAuthorNameOnHeader from "../komentar_component/komentar_author_header_name";
+
+export default function ComponentForum_ListKomentarView({
+ listKomentar,
+ setKomentar,
+ postingId,
+ userLoginId,
+}: {
+ listKomentar: MODEL_FORUM_KOMENTAR[];
+ setKomentar: any;
+ postingId: string;
+ userLoginId: string;
+}) {
+ return (
+ <>
+
+ {_.isEmpty(listKomentar) ? (
+
+
+ Belum ada komentar
+
+
+ ) : (
+
+
+
+ {" "}
+ Komentar
+
+
+ {listKomentar.map((e, i) => (
+
+
+
+
+
+
+
+ {e.komentar ? (
+
+
+
+ ) : (
+ ""
+ )}
+
+
+
+
+
+
+
+
+
+ ))}
+
+ )}
+
+ >
+ );
+}
\ No newline at end of file
diff --git a/src/app_modules/forum/component/detail_component/detail_view.tsx b/src/app_modules/forum/component/detail_component/detail_view.tsx
new file mode 100644
index 00000000..09776292
--- /dev/null
+++ b/src/app_modules/forum/component/detail_component/detail_view.tsx
@@ -0,0 +1,81 @@
+"use client";
+
+import { Card, Stack, Group, Text } from "@mantine/core";
+import { IconMessageCircle, IconMessageCircleX } from "@tabler/icons-react";
+import { MODEL_FORUM_POSTING } from "../../model/interface";
+import ComponentForum_DetailHeader from "./detail_header";
+
+export default function ComponentForum_DetailForumView({
+ data,
+ totalKomentar,
+ userLoginId,
+ onLoadData,
+}: {
+ data: MODEL_FORUM_POSTING;
+ totalKomentar: number;
+ userLoginId: string;
+ onLoadData: (val: any) => void;
+}) {
+ return (
+ <>
+
+ {/* {JSON.stringify(data, null, 2)} */}
+
+ {/* HEADER */}
+
+ {
+ onLoadData(val);
+ }}
+ />
+
+
+ {/* CONTENT */}
+
+
+
+ {data?.diskusi ? (
+
+ ) : (
+ ""
+ )}
+
+
+
+
+ {/* FOOTER */}
+
+
+
+
+ {(data?.ForumMaster_StatusPosting?.id as any) === 1 ? (
+
+ ) : (
+
+ )}
+ {totalKomentar}
+
+
+
+ {new Date(data?.createdAt).toLocaleTimeString()}
+ {/* {new Intl.RelativeTimeFormat("id", {style: "short"}).format(-1,"day")} */}
+
+
+ {data?.createdAt
+ ? new Date(data?.createdAt).toLocaleDateString(["id-ID"], {
+ dateStyle: "medium",
+ })
+ : new Date().toLocaleDateString(["id-ID"], {
+ dateStyle: "medium",
+ })}
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/forum/component/beranda/beranda_author_header.tsx b/src/app_modules/forum/component/forumku_component/forumku_header.tsx
similarity index 52%
rename from src/app_modules/forum/component/beranda/beranda_author_header.tsx
rename to src/app_modules/forum/component/forumku_component/forumku_header.tsx
index 77ddba69..89783932 100644
--- a/src/app_modules/forum/component/beranda/beranda_author_header.tsx
+++ b/src/app_modules/forum/component/forumku_component/forumku_header.tsx
@@ -1,79 +1,48 @@
"use client";
-import { RouterProfile } from "@/app/lib/router_hipmi/router_katalog";
-import {
- Stack,
- Grid,
- Avatar,
- Divider,
- Text,
- Group,
- Badge,
- Loader,
-} from "@mantine/core";
-import { useRouter } from "next/navigation";
-import moment from "moment";
-import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/component_global/notif_global/notifikasi_peringatan";
import { RouterForum } from "@/app/lib/router_hipmi/router_forum";
-import {
- IconCircleFilled,
- IconDots,
- IconEdit,
- IconFlag3,
- IconMessageCircle,
- IconTrash,
-} from "@tabler/icons-react";
+import { RouterProfile } from "@/app/lib/router_hipmi/router_katalog";
+import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/component_global/notif_global/notifikasi_peringatan";
+import { Avatar, Badge, Grid, Group, Loader, Stack, Text } from "@mantine/core";
import { IconCircle } from "@tabler/icons-react";
-import { IoIosMore } from "react-icons/io";
-import { useDisclosure } from "@mantine/hooks";
+import { useRouter } from "next/navigation";
import { useState } from "react";
-import ComponentForum_PostingButtonMore from "../more_button/posting_button_more";
-import ComponentGlobal_V2_LoadingPage from "@/app_modules/component_global/loading_page_v2";
-import { data } from "autoprefixer";
-import ComponentForum_BerandaButtonMore from "./beranda_button_more";
+import { MODEL_FORUM_POSTING } from "../../model/interface";
+import ComponentForum_ForumkuMoreButton from "./forumku_more_button";
-export default function ComponentForum_BerandaAuthorNameOnHeader({
- authorId,
- postingId,
- imagesId,
- authorName,
- tglPublish,
- isPembatas,
+
+export default function ComponentForum_ForumkuHeaderCard({
+ data,
isMoreButton,
- statusId,
userLoginId,
- setData,
+ onLoadData,
+ allData,
}: {
- authorId?: string;
- postingId?: string;
- imagesId?: string;
- authorName?: string;
- tglPublish?: Date;
- isPembatas?: boolean;
- isMoreButton?: boolean;
- statusId?: string;
+ data: MODEL_FORUM_POSTING;
+ isMoreButton: boolean;
userLoginId: string;
- setData?: any;
+ onLoadData: (val: any) => void;
+ allData: any[];
}) {
const router = useRouter();
- const [loading, setLoading] = useState(false);
+ const [isLoading, setIsLoading] = useState(false);
return (
<>
-
+
{
- if (authorId) {
- setLoading(true);
- router.push(RouterForum.forumku + authorId);
+ if (data.Author.id) {
+ setIsLoading(true);
+ router.push(RouterForum.forumku + data.Author.id);
} else {
ComponentGlobal_NotifikasiPeringatan("Id tidak ditemukan");
}
}}
>
- {loading ? (
+ {isLoading ? (
) : (
@@ -91,23 +61,28 @@ export default function ComponentForum_BerandaAuthorNameOnHeader({
-
+
-
- {authorName ? authorName : "Nama author "}
+
+ {data.Author.username
+ ? data.Author.username
+ : "Nama author "}
+
-
- {(statusId as any) === 1 ? "Open" : "Close"}
-
+ {data?.ForumMaster_StatusPosting.status}
@@ -115,9 +90,9 @@ export default function ComponentForum_BerandaAuthorNameOnHeader({
-
- {tglPublish
- ? tglPublish.toLocaleDateString(["id-ID"], {
+
+ {data.createdAt !== undefined && data?.createdAt
+ ? new Date(data?.createdAt).toLocaleDateString(["id-ID"], {
day: "numeric",
month: "short",
})
@@ -125,9 +100,10 @@ export default function ComponentForum_BerandaAuthorNameOnHeader({
day: "numeric",
month: "short",
})}
+
@@ -135,12 +111,13 @@ export default function ComponentForum_BerandaAuthorNameOnHeader({
{isMoreButton ? (
-
) : (
@@ -149,7 +126,7 @@ export default function ComponentForum_BerandaAuthorNameOnHeader({
- {isPembatas ? : ""}
+ {/* {isPembatas ? : ""} */}
>
);
diff --git a/src/app_modules/forum/component/beranda/beranda_button_more.tsx b/src/app_modules/forum/component/forumku_component/forumku_more_button.tsx
similarity index 66%
rename from src/app_modules/forum/component/beranda/beranda_button_more.tsx
rename to src/app_modules/forum/component/forumku_component/forumku_more_button.tsx
index 2764b5ef..7d856de2 100644
--- a/src/app_modules/forum/component/beranda/beranda_button_more.tsx
+++ b/src/app_modules/forum/component/forumku_component/forumku_more_button.tsx
@@ -3,55 +3,50 @@
import { RouterForum } from "@/app/lib/router_hipmi/router_forum";
import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil";
import {
- Drawer,
- Stack,
- Grid,
- Button,
- Modal,
- Title,
- Group,
ActionIcon,
- Text,
- Box,
- Center,
+ Button,
+ Drawer,
+ Grid,
+ Group,
Loader,
+ Modal,
+ Stack,
+ Text,
+ Title,
} from "@mantine/core";
-import { useDisclosure, useShallowEffect } from "@mantine/hooks";
+import { useDisclosure } from "@mantine/hooks";
import {
- IconTrash,
+ IconDots,
IconEdit,
IconFlag3,
- IconDots,
- IconSquareRoundedX,
IconSquareCheck,
+ IconSquareRoundedX,
+ IconTrash,
} from "@tabler/icons-react";
import { useRouter } from "next/navigation";
import { useState } from "react";
-import { createStyles } from "@mantine/core";
-import ComponentGlobal_V2_LoadingPage from "@/app_modules/component_global/loading_page_v2";
-import { useAtom } from "jotai";
-import { gs_forum_loading_edit_posting } from "../../global_state";
-import ComponentForum_LoadingDrawer from "../loading_drawer";
-import { user_getOneUserId } from "@/app_modules/fun_global/get_user_token";
-import { forum_funDeletePostingById } from "../../fun/delete/fun_delete_posting_by_id";
import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal";
+import mqtt_client from "@/util/mqtt_client";
+import _ from "lodash";
+import { forum_funDeletePostingById } from "../../fun/delete/fun_delete_posting_by_id";
import { forum_funEditStatusPostingById } from "../../fun/edit/fun_edit_status_posting_by_id";
-import { forum_getListAllPosting } from "../../fun/get/get_list_all_posting";
-import { forum_getListPostingByAuhtorId } from "../../fun/get/get_list_posting_by_author_id";
+import { MODEL_FORUM_POSTING } from "../../model/interface";
-export default function ComponentForum_BerandaButtonMore({
+export default function ComponentForum_ForumkuMoreButton({
authorId,
postingId,
statusId,
userLoginId,
- setData,
+ onLoadData,
+ allData,
}: {
authorId: any;
postingId?: any;
statusId?: any;
userLoginId: any;
- setData: any;
+ onLoadData: (val: any) => void;
+ allData: any[];
}) {
const router = useRouter();
@@ -177,8 +172,12 @@ export default function ComponentForum_BerandaButtonMore({
{
+ onLoadData(val);
+ }}
+ allData={allData}
/>
+ {/* {JSON.stringify(allData, null, 2)} */}
{
+ onLoadData(val);
+ }}
userLoginId={userLoginId}
authorId={authorId}
+ allData={allData}
/>
- open()}>
+ open()}>
>
@@ -207,11 +209,13 @@ export default function ComponentForum_BerandaButtonMore({
function ButtonDelete({
postingId,
setOpenDel,
- setData,
+ onLoadData,
+ allData,
}: {
postingId?: string;
setOpenDel: any;
- setData: any;
+ onLoadData: (val: any) => void;
+ allData: MODEL_FORUM_POSTING[];
}) {
const [loading, setLoading] = useState(false);
@@ -219,14 +223,22 @@ function ButtonDelete({
setOpenDel(false);
await forum_funDeletePostingById(postingId as any).then(async (res) => {
if (res.status === 200) {
- // ComponentGlobal_NotifikasiBerhasil(`Postingan Terhapus`, 2000);
+ ComponentGlobal_NotifikasiBerhasil(`Postingan Terhapus`, 2000);
setLoading(true);
- const listForum = await forum_getListAllPosting();
- setData(listForum);
- return null;
+
+ const cloneData = _.clone(allData);
+ const hapusData = cloneData.filter((e) => e.id !== postingId);
+
+ onLoadData(hapusData);
+
+ mqtt_client.publish(
+ "Forum_hapus_data",
+ JSON.stringify({
+ data: hapusData,
+ })
+ );
} else {
- // ComponentGlobal_NotifikasiGagal(res.message);
- return null;
+ ComponentGlobal_NotifikasiGagal(res.message);
}
});
}
@@ -259,16 +271,18 @@ function ButtonStatus({
postingId,
setOpenStatus,
statusId,
- setData,
+ onLoadData,
userLoginId,
authorId,
+ allData,
}: {
postingId?: string;
setOpenStatus: any;
statusId?: any;
- setData: any;
+ onLoadData: (val: any) => void;
userLoginId: string;
authorId: string;
+ allData: MODEL_FORUM_POSTING[];
}) {
const [loading, setLoading] = useState(false);
@@ -280,48 +294,116 @@ function ButtonStatus({
2
);
if (upateStatusClose.status === 200) {
- const loadData = await forum_getListAllPosting();
- // ComponentGlobal_NotifikasiBerhasil(`Forum Ditutup`, 2000);
- setData(loadData);
+ ComponentGlobal_NotifikasiBerhasil(`Forum Ditutup`, 2000);
setLoading(true);
- return null;
- } else {
- // ComponentGlobal_NotifikasiGagal(upateStatusClose.message);
- return null;
- }
- // await forum_funEditStatusPostingById(postingId as any, 2).then(
- // async (res) => {
- // if (res.status === 200) {
- // await forum_getListAllPosting().then((val) => {
- // setData(val as any);
- // ComponentGlobal_NotifikasiBerhasil(`Forum Ditutup`, 2000);
- // setLoading(true);
- // });
- // } else {
- // ComponentGlobal_NotifikasiGagal(res.message);
- // }
- // }
- // );
+ const cloneData = _.clone(allData);
+ const loadData = cloneData.map(
+ (e) => (
+ e.id === postingId,
+ {
+ ...e,
+ ForumMaster_StatusPosting: {
+ id: e.id === postingId ? 2 : e.ForumMaster_StatusPosting.id,
+ status:
+ e.id === postingId
+ ? "Close"
+ : e.ForumMaster_StatusPosting.status,
+ },
+ }
+ )
+ );
+ onLoadData(loadData);
+
+ //
+ mqtt_client.publish(
+ "Forum_ganti_status",
+ JSON.stringify({
+ id: postingId,
+ data: loadData,
+ })
+ );
+
+ const findData = cloneData.find((val) => val.id === postingId);
+ const updateDetail = {
+ ...findData,
+ ForumMaster_StatusPosting: {
+ id: 2,
+ status: "Close",
+ },
+ };
+
+ mqtt_client.publish(
+ "Forum_detail_ganti_status",
+ JSON.stringify({
+ id: postingId,
+ data: updateDetail.ForumMaster_StatusPosting,
+ })
+ );
+ } else {
+ ComponentGlobal_NotifikasiGagal(upateStatusClose.message);
+ }
}
async function onBukaForum() {
setOpenStatus(false);
- await forum_funEditStatusPostingById(postingId as any, 1).then(
- async (res) => {
- if (res.status === 200) {
- await forum_getListAllPosting().then((val) => {
- setData(val as any);
-
- ComponentGlobal_NotifikasiBerhasil(`Forum Dibuka`, 2000);
- setLoading(true);
- });
- } else {
- ComponentGlobal_NotifikasiGagal(res.message);
- }
- }
+ const updateStatusOpen = await forum_funEditStatusPostingById(
+ postingId as any,
+ 1
);
+ if (updateStatusOpen.status === 200) {
+ ComponentGlobal_NotifikasiBerhasil(`Forum Dibuka`, 2000);
+ setLoading(true);
+
+ const cloneData = _.clone(allData);
+ const loadData = cloneData.map(
+ (e) => (
+ e.id === postingId,
+ {
+ ...e,
+ ForumMaster_StatusPosting: {
+ id: e.id === postingId ? 1 : e.ForumMaster_StatusPosting.id,
+ status:
+ e.id === postingId
+ ? "Open"
+ : e.ForumMaster_StatusPosting.status,
+ },
+ }
+ )
+ );
+
+ mqtt_client.publish(
+ "Forum_ganti_status",
+ JSON.stringify({
+ id: postingId,
+ data: loadData,
+ })
+ );
+
+ onLoadData(loadData);
+
+ const findData = cloneData.find((val) => val.id === postingId);
+ const updateDetail = {
+ ...findData,
+ ForumMaster_StatusPosting: {
+ id: 1,
+ status: "Open",
+ },
+ };
+
+ console.log(updateDetail.ForumMaster_StatusPosting);
+
+ mqtt_client.publish(
+ "Forum_detail_ganti_status",
+ JSON.stringify({
+ id: postingId,
+ data: updateDetail.ForumMaster_StatusPosting,
+ })
+ );
+ } else {
+ ComponentGlobal_NotifikasiGagal(updateStatusOpen.message);
+ }
}
return (
diff --git a/src/app_modules/forum/component/forumku_component/forumku_view.tsx b/src/app_modules/forum/component/forumku_component/forumku_view.tsx
new file mode 100644
index 00000000..ed4be128
--- /dev/null
+++ b/src/app_modules/forum/component/forumku_component/forumku_view.tsx
@@ -0,0 +1,88 @@
+"use client";
+
+import { RouterForum } from "@/app/lib/router_hipmi/router_forum";
+import { ActionIcon, Card, Divider, Group, Stack, Text } from "@mantine/core";
+import { IconMessageCircle, IconMessageCircleX } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import { MODEL_FORUM_POSTING } from "../../model/interface";
+import ComponentForum_ForumkuHeaderCard from "./forumku_header";
+import { AccentColor, MainColor } from "@/app_modules/component_global/color/color_pallet";
+
+
+export default function ComponentForum_ForumkuMainCardView({
+ data,
+ userLoginId,
+ onLoadData,
+ allData,
+}: {
+ data: MODEL_FORUM_POSTING;
+ userLoginId: string;
+ onLoadData: (val: any) => void;
+ allData: any[];
+}) {
+ const router = useRouter();
+ const [loadingKomen, setLoadingKomen] = useState(false);
+ const [loadingDetail, setLoadingDetail] = useState(false);
+
+ const [postingId, setPostingId] = useState("");
+
+ return (
+ <>
+ {/* {JSON.stringify(data, null,2)} */}
+
+
+
+
+
+ {
+ router.push(RouterForum.main_detail + data?.id);
+ }}
+ >
+
+
+
+
+
+
+
+
+
+ {(data?.ForumMaster_StatusPosting?.id as any) === 1 ? (
+
+ ) : (
+
+ )}
+
+
+ {/* */}
+
+ {data?.Forum_Komentar.length}
+
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/forum/component/header/komentar_author_header_name.tsx b/src/app_modules/forum/component/komentar_component/komentar_author_header_name.tsx
similarity index 97%
rename from src/app_modules/forum/component/header/komentar_author_header_name.tsx
rename to src/app_modules/forum/component/komentar_component/komentar_author_header_name.tsx
index afc468a1..ba5f877b 100644
--- a/src/app_modules/forum/component/header/komentar_author_header_name.tsx
+++ b/src/app_modules/forum/component/komentar_component/komentar_author_header_name.tsx
@@ -19,7 +19,7 @@ import { IoIosMore } from "react-icons/io";
import { useDisclosure } from "@mantine/hooks";
import { useState } from "react";
import ComponentForum_PostingButtonMore from "../more_button/posting_button_more";
-import ComponentForum_KomentarButtonMore from "../more_button/komentar_button_more";
+import ComponentForum_KomentarButtonMore from "./komentar_button_more";
export default function ComponentForum_KomentarAuthorNameOnHeader({
userId,
diff --git a/src/app_modules/forum/component/more_button/komentar_button_more.tsx b/src/app_modules/forum/component/komentar_component/komentar_button_more.tsx
similarity index 97%
rename from src/app_modules/forum/component/more_button/komentar_button_more.tsx
rename to src/app_modules/forum/component/komentar_component/komentar_button_more.tsx
index cf19e190..225e2ffd 100644
--- a/src/app_modules/forum/component/more_button/komentar_button_more.tsx
+++ b/src/app_modules/forum/component/komentar_component/komentar_button_more.tsx
@@ -30,7 +30,7 @@ import { user_getOneUserId } from "@/app_modules/fun_global/get_user_token";
import { forum_funDeletePostingById } from "../../fun/delete/fun_delete_posting_by_id";
import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal";
import { forum_funDeleteKomentarById } from "../../fun/delete/fun_delete_komentar_by_id";
-import { forum_getKomentarById } from "../../fun/get/get_komentar_by_id";
+import { forum_funGetAllKomentarById } from "../../fun/get/get_all_komentar_by_id";
export default function ComponentForum_KomentarButtonMore({
userId,
@@ -178,7 +178,7 @@ function ButtonDelete({
async function onDelete() {
await forum_funDeleteKomentarById(komentarId as any).then(async (res) => {
if (res.status === 200) {
- await forum_getKomentarById(postingId as any).then((val) => {
+ await forum_funGetAllKomentarById(postingId as any).then((val) => {
setKomentar(val);
setOpenDel(false);
setLoading(true);
diff --git a/src/app_modules/forum/component/main_component/card_header.tsx b/src/app_modules/forum/component/main_component/card_header.tsx
index 23683649..c82ae3be 100644
--- a/src/app_modules/forum/component/main_component/card_header.tsx
+++ b/src/app_modules/forum/component/main_component/card_header.tsx
@@ -1,28 +1,24 @@
"use client";
-import loading from "@/app/dev/home/loading";
import { RouterForum } from "@/app/lib/router_hipmi/router_forum";
import { RouterProfile } from "@/app/lib/router_hipmi/router_katalog";
import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/component_global/notif_global/notifikasi_peringatan";
import {
- Stack,
- Loader,
Avatar,
Badge,
- Group,
- Divider,
Grid,
- Text,
+ Group,
+ Loader,
+ Stack,
+ Text
} from "@mantine/core";
import { IconCircle } from "@tabler/icons-react";
-import ComponentForum_BerandaButtonMore from "../beranda/beranda_button_more";
-import { MODEL_USER } from "@/app_modules/home/model/interface";
import { useRouter } from "next/navigation";
import { useState } from "react";
import { MODEL_FORUM_POSTING } from "../../model/interface";
-import ComponentForum_V2_CardMoreButton from "./card_more_button";
+import ComponentForum_BerandaMoreButton from "./card_more_button";
-export default function ComponentForum_V2_HeaderCard({
+export default function ComponentForum_BerandaHeaderCard({
data,
isMoreButton,
userLoginId,
@@ -58,7 +54,11 @@ export default function ComponentForum_V2_HeaderCard({
) : (
-
+
{data.Author.username
? data.Author.username
: "Nama author "}
@@ -86,7 +86,7 @@ export default function ComponentForum_V2_HeaderCard({
-
+
{data.createdAt !== undefined && data?.createdAt
? new Date(data?.createdAt).toLocaleDateString(["id-ID"], {
day: "numeric",
@@ -114,7 +114,7 @@ export default function ComponentForum_V2_HeaderCard({
@@ -122,7 +122,7 @@ export default function ComponentForum_V2_HeaderCard({
{isMoreButton ? (
- ;
-
return (
<>
+ {
+ setLoadingEdit(true);
+ router.push(RouterForum.edit_posting + postingId);
+ }}
+ >
+
+
+
+
+
+ Edit posting{" "}
+ {loadingEdit ? : ""}
+
+
+
{
close();
@@ -112,23 +136,6 @@ export default function ComponentForum_V2_CardMoreButton({
Hapus
-
- {
- setLoadingEdit(true);
- router.push(RouterForum.edit_posting + postingId);
- }}
- >
-
-
-
-
-
- Edit posting{" "}
- {loadingEdit ? : ""}
-
-
-
)}
@@ -199,7 +206,7 @@ export default function ComponentForum_V2_CardMoreButton({
/>
- open()}>
+ open()}>
>
@@ -237,7 +244,6 @@ function ButtonDelete({
data: hapusData,
})
);
-
} else {
ComponentGlobal_NotifikasiGagal(res.message);
}
diff --git a/src/app_modules/forum/component/main_component/card_view.tsx b/src/app_modules/forum/component/main_component/card_view.tsx
index 109801b0..3cdae028 100644
--- a/src/app_modules/forum/component/main_component/card_view.tsx
+++ b/src/app_modules/forum/component/main_component/card_view.tsx
@@ -6,9 +6,13 @@ import { IconMessageCircle, IconMessageCircleX } from "@tabler/icons-react";
import { useRouter } from "next/navigation";
import { useState } from "react";
import { MODEL_FORUM_POSTING } from "../../model/interface";
-import ComponentForum_V2_HeaderCard from "./card_header";
+import ComponentForum_BerandaHeaderCard from "./card_header";
+import {
+ AccentColor,
+ MainColor,
+} from "@/app_modules/component_global/color/color_pallet";
-export default function ComponentForum_V2_MainCardView({
+export default function ComponentForum_BerandaCardView({
data,
userLoginId,
onLoadData,
@@ -27,10 +31,18 @@ export default function ComponentForum_V2_MainCardView({
return (
<>
- {/* {JSON.stringify(data, null,2)} */}
-
+ {/* {JSON.stringify(data, null,2)} */}
+
-
-
+
@@ -58,16 +70,9 @@ export default function ComponentForum_V2_MainCardView({
loading={loadingKomen && data?.id === postingId ? true : false}
variant="transparent"
sx={{ zIndex: 1 }}
- // onClick={() => {
- // setPostingId(data?.id),
- // (data?.ForumMaster_StatusPosting.id as any) === 1
- // ? (router.push(RouterForum.komentar + data?.id),
- // setLoadingKomen(true))
- // : router.push(RouterForum.main_detail + data?.id);
- // }}
>
{(data?.ForumMaster_StatusPosting?.id as any) === 1 ? (
-
+
) : (
)}
@@ -75,9 +80,8 @@ export default function ComponentForum_V2_MainCardView({
{/* */}
- {data?.Forum_Komentar.length}
+ {data?.Forum_Komentar.length}
-
diff --git a/src/app_modules/forum/component/more_button/posting_button_more.tsx b/src/app_modules/forum/component/more_button/posting_button_more.tsx
index a43a40c6..e319b6ce 100644
--- a/src/app_modules/forum/component/more_button/posting_button_more.tsx
+++ b/src/app_modules/forum/component/more_button/posting_button_more.tsx
@@ -38,7 +38,7 @@ import { forum_funDeletePostingById } from "../../fun/delete/fun_delete_posting_
import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal";
import { forum_funEditStatusPostingById } from "../../fun/edit/fun_edit_status_posting_by_id";
import { forum_getListAllPosting } from "../../fun/get/get_list_all_posting";
-import { forum_getListPostingByAuhtorId } from "../../fun/get/get_list_posting_by_author_id";
+import { forum_getAllPostingByAuhtorId } from "../../fun/get/get_list_posting_by_author_id";
export default function ComponentForum_PostingButtonMore({
authorId,
@@ -277,7 +277,7 @@ function ButtonStatus({
async (res) => {
if (res.status === 200) {
if (userLoginId === authorId) {
- await forum_getListPostingByAuhtorId(authorId).then((val: any) =>
+ await forum_getAllPostingByAuhtorId({authorId: authorId, page: 1}).then((val: any) =>
setData(val)
);
} else {
@@ -299,7 +299,7 @@ function ButtonStatus({
async (res) => {
if (res.status === 200) {
if (userLoginId === authorId) {
- await forum_getListPostingByAuhtorId(authorId).then((val: any) =>
+ await forum_getAllPostingByAuhtorId({authorId: authorId, page: 1}).then((val: any) =>
setData(val)
);
} else {
diff --git a/src/app_modules/forum/create/index.tsx b/src/app_modules/forum/create/index.tsx
index c3022f64..7527041f 100644
--- a/src/app_modules/forum/create/index.tsx
+++ b/src/app_modules/forum/create/index.tsx
@@ -36,6 +36,10 @@ const ReactQuill = dynamic(
);
import mqtt_client from "@/util/mqtt_client";
+import {
+ AccentColor,
+ MainColor,
+} from "@/app_modules/component_global/color/color_pallet";
export default function Forum_Create() {
const [value, setValue] = useState("");
@@ -95,8 +99,10 @@ function ButtonAction({ value }: { value: string }) {
ComponentGlobal_NotifikasiBerhasil(create.message);
setTimeout(() => router.back(), 1000);
- mqtt_client.publish("Forum_create_new", JSON.stringify({isNewPost: true, count: 1 }));
-
+ mqtt_client.publish(
+ "Forum_create_new",
+ JSON.stringify({ isNewPost: true, count: 1 })
+ );
} else {
ComponentGlobal_NotifikasiGagal(create.message);
}
@@ -106,7 +112,12 @@ function ButtonAction({ value }: { value: string }) {
" || value === "" || value.length > 500
+ ? ""
+ : `1px solid ${AccentColor.yellow}`,
}}
+ bg={MainColor.yellow}
disabled={
value === "
" || value === "" || value.length > 500
? true
diff --git a/src/app_modules/forum/create/layout.tsx b/src/app_modules/forum/create/layout.tsx
index e57ee62b..5b9be6e3 100644
--- a/src/app_modules/forum/create/layout.tsx
+++ b/src/app_modules/forum/create/layout.tsx
@@ -4,6 +4,8 @@ import { AppShell } from "@mantine/core";
import React from "react";
import ComponentForum_HeaderTamplate from "../component/header/header_tamplate";
import AppComponentGlobal_LayoutTamplate from "@/app_modules/component_global/component_layout_tamplate";
+import ComponentGlobal_UI_LayoutTamplate from "@/app_modules/component_global/ui/ui_layout_tamplate";
+import ComponentGlobal_UI_HeaderTamplate from "@/app_modules/component_global/ui/ui_header_tamplate";
export default function LayoutForum_Create({
children,
@@ -12,9 +14,16 @@ export default function LayoutForum_Create({
}) {
return (
<>
- }>
+ }
+ >
+ {children}
+
+
+
+ {/* }>
{children}
-
+ */}
>
);
}
diff --git a/src/app_modules/forum/detail/detail_report_komentar.tsx b/src/app_modules/forum/detail/detail_report_komentar.tsx
new file mode 100644
index 00000000..85bc8a68
--- /dev/null
+++ b/src/app_modules/forum/detail/detail_report_komentar.tsx
@@ -0,0 +1,79 @@
+"use client";
+
+import AppComponentGlobal_LayoutTamplate from "@/app_modules/component_global/component_layout_tamplate";
+import ComponentForum_HeaderTamplate from "../component/header/header_tamplate";
+import {
+ Box,
+ Center,
+ Group,
+ List,
+ Paper,
+ Stack,
+ Text,
+ Title,
+} from "@mantine/core";
+import { MODEL_FORUM_KOMENTAR, MODEL_FORUM_POSTING } from "../model/interface";
+import { useState } from "react";
+
+export default function Forum_DetailReportKomentar({
+ dataKomentar,
+}: {
+ dataKomentar: any;
+}) {
+ return (
+ <>
+ }
+ >
+ {}
+
+ >
+ );
+}
+
+function View({ dataKomentar }: { dataKomentar: any }) {
+ const [data, setData] = useState(dataKomentar.data);
+ const [list, setList] = useState(dataKomentar.list);
+ return (
+ <>
+
+
+ Komentar anda telah dihapus dari sebuah postingan oleh ADMIN, karena
+ memiliki beberapa laporan dari pengguna lain !
+
+
+
+ Komentar anda
+
+
+
+
+
+
+
+
+
+ Pada postingan : {data.Forum_Posting.Author.username}
+
+
+
+
+
+
+
+
+ Laporan yang diterima :
+
+ {list.map((x, i) => (
+ {x}
+ ))}
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/forum/detail/detail_report_posting.tsx b/src/app_modules/forum/detail/detail_report_posting.tsx
new file mode 100644
index 00000000..0f3f993c
--- /dev/null
+++ b/src/app_modules/forum/detail/detail_report_posting.tsx
@@ -0,0 +1,61 @@
+"use client";
+
+import AppComponentGlobal_LayoutTamplate from "@/app_modules/component_global/component_layout_tamplate";
+import ComponentForum_HeaderTamplate from "../component/header/header_tamplate";
+import { List, Paper, Stack, Text } from "@mantine/core";
+import { MODEL_FORUM_POSTING } from "../model/interface";
+import { useState } from "react";
+
+export default function Forum_DetailReportPosting({
+ dataPosting,
+}: {
+ dataPosting: any;
+}) {
+ return (
+ <>
+ }
+ >
+
+
+ >
+ );
+}
+
+function View({ dataPosting }: { dataPosting: any }) {
+ const [data, setData] = useState(dataPosting.data);
+ const [list, setList] = useState(dataPosting.list);
+
+ return (
+ <>
+
+
+ Postingan anda telah dihapus dari beranda oleh ADMIN, karena memiliki
+ beberapa laporan dari pengguna lain !
+
+
+
+ Pada postingan
+
+
+
+
+
+
+
+
+ Laporan yang diterima :
+
+ {list.map((x, i) => (
+ {x}
+ ))}
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/forum/detail/index.tsx b/src/app_modules/forum/detail/index.tsx
deleted file mode 100644
index 7fa23b11..00000000
--- a/src/app_modules/forum/detail/index.tsx
+++ /dev/null
@@ -1,376 +0,0 @@
-"use client";
-
-import { RouterForum } from "@/app/lib/router_hipmi/router_forum";
-import {
- ActionIcon,
- Box,
- Button,
- Card,
- Center,
- Divider,
- Group,
- Paper,
- Spoiler,
- Stack,
- Text,
-} from "@mantine/core";
-import { IconMessageCircle, IconMessageCircleX } from "@tabler/icons-react";
-import ComponentForum_PostingAuthorNameOnHeader from "../component/header/posting_author_header_name";
-import ComponentForum_DetailOnHeaderAuthorName from "../component/header/detail_author_header_name";
-import { useRouter } from "next/navigation";
-import { MODEL_FORUM_KOMENTAR, MODEL_FORUM_POSTING } from "../model/interface";
-import ComponentForum_KomentarAuthorNameOnHeader from "../component/header/komentar_author_header_name";
-import _ from "lodash";
-
-import dynamic from "next/dynamic";
-import React, { useState } from "react";
-import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil";
-import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal";
-import { forum_funCreateKomentar } from "../fun/create/fun_create_komentar";
-const ReactQuill = dynamic(
- () => {
- return import("react-quill");
- },
- { ssr: false }
-);
-import "react-quill/dist/quill.bubble.css";
-import { forum_getKomentarById } from "../fun/get/get_komentar_by_id";
-import ComponentGlobal_InputCountDown from "@/app_modules/component_global/input_countdown";
-import ComponentForum_DetailHeader from "../component/detail_component/detail_header";
-import { useShallowEffect } from "@mantine/hooks";
-import mqtt_client from "@/util/mqtt_client";
-import { MODEL_NOTIFIKASI } from "@/app_modules/notifikasi/model/interface";
-import notifikasiToUser_funCreate from "@/app_modules/notifikasi/fun/create/create_notif_to_user";
-
-export default function Forum_Detail({
- dataPosting,
- listKomentar,
- userLoginId,
-}: {
- dataPosting: MODEL_FORUM_POSTING;
- listKomentar: MODEL_FORUM_KOMENTAR[];
- userLoginId: string;
-}) {
- const [data, setData] = useState(dataPosting);
- const [komentar, setKomentar] = useState(listKomentar);
-
- // useShallowEffect(() => {
- // onLoadKomentar({
- // onLoad(val) {
- // setKomentar(val);
- // },
- // });
- // }, [setKomentar]);
-
- // async function onLoadKomentar({ onLoad }: { onLoad: (val: any) => void }) {
- // const loadKomentar = await forum_getKomentarById(data.id);
- // onLoad(loadKomentar);
- // }
-
- useShallowEffect(() => {
- mqtt_client.subscribe("Forum_detail_ganti_status");
-
- mqtt_client.on("message", (topic: any, message: any) => {
- const newData = JSON.parse(message.toString());
- if (newData.id === data.id) {
- const cloneData = _.clone(data);
-
- // console.log(newData.data);
- const updateData = {
- ...cloneData,
- ForumMaster_StatusPosting: {
- id: newData.data.id,
- status: newData.data.status,
- },
- };
-
- setData(updateData as any);
- }
- });
- }, [data]);
-
- return (
- <>
-
- {
- setData(val);
- }}
- />
- {(data?.ForumMaster_StatusPosting?.id as any) === 1 ? (
- {
- setKomentar(val);
- }}
- data={data}
- userLoginId={userLoginId}
- />
- ) : (
- ""
- )}
-
-
- >
- );
-}
-
-function ForumView({
- data,
- totalKomentar,
- userLoginId,
- onLoadData,
-}: {
- data: MODEL_FORUM_POSTING;
- totalKomentar: number;
- userLoginId: string;
- onLoadData: (val: any) => void;
-}) {
- return (
- <>
-
- {/* {JSON.stringify(data, null, 2)} */}
-
- {/* HEADER */}
-
- {
- onLoadData(val);
- }}
- />
-
-
- {/* CONTENT */}
-
-
-
- {data?.diskusi ? (
-
- ) : (
- ""
- )}
-
-
-
-
- {/* FOOTER */}
-
-
-
-
- {(data?.ForumMaster_StatusPosting?.id as any) === 1 ? (
-
- ) : (
-
- )}
- {totalKomentar}
-
-
-
- {new Date(data?.createdAt).toLocaleTimeString()}
- {/* {new Intl.RelativeTimeFormat("id", {style: "short"}).format(-1,"day")} */}
-
-
- {data?.createdAt
- ? new Date(data?.createdAt).toLocaleDateString(["id-ID"], {
- dateStyle: "medium",
- })
- : new Date().toLocaleDateString(["id-ID"], {
- dateStyle: "medium",
- })}
-
-
-
-
-
-
-
- >
- );
-}
-
-function CreateKomentar({
- postingId,
- onSetKomentar,
- data,
- userLoginId,
-}: {
- postingId: string;
- onSetKomentar: (val: any) => void;
- data: MODEL_FORUM_POSTING;
- userLoginId: string;
-}) {
- const router = useRouter();
- const [value, setValue] = useState("");
- const [loading, setLoading] = useState(false);
- const [isEmpty, setIsEmpty] = useState(false);
-
- async function onComment() {
- if (value.length > 500) {
- return null;
- }
-
- const createComment = await forum_funCreateKomentar(postingId, value);
- if (createComment.status === 201) {
- const loadKomentar = await forum_getKomentarById(data.id);
- onSetKomentar(loadKomentar);
-
- setValue("");
- setIsEmpty(true);
- ComponentGlobal_NotifikasiBerhasil(createComment.message, 2000);
-
- if (userLoginId !== data.Author.id) {
- const dataNotif = {
- appId: data.id,
- userId: data.authorId,
- pesan: value,
- kategoriApp: "FORUM",
- title: "Komentar baru",
- };
-
- const createNotifikasi = await notifikasiToUser_funCreate({
- data: dataNotif as any,
- });
-
- if (createNotifikasi.status === 201) {
- mqtt_client.publish(
- "USER",
- JSON.stringify({
- userId: dataNotif.userId,
- count: 1,
- })
- );
- }
- }
- } else {
- ComponentGlobal_NotifikasiGagal(createComment.message);
- }
- }
-
- return (
- <>
-
-
- {
- setValue(val);
- }}
- />
-
-
-
-
-
" || value.length > 500
- ? true
- : false
- }
- loaderPosition="center"
- loading={loading ? true : false}
- radius={"xl"}
- onClick={() => onComment()}
- >
- Balas
-
-
-
-
- >
- );
-}
-
-function KomentarView({
- listKomentar,
- setKomentar,
- postingId,
- userLoginId,
-}: {
- listKomentar: MODEL_FORUM_KOMENTAR[];
- setKomentar: any;
- postingId: string;
- userLoginId: string;
-}) {
- return (
- <>
-
- {_.isEmpty(listKomentar) ? (
-
-
- Belum ada komentar
-
-
- ) : (
-
-
-
- {" "}
- Komentar
-
-
- {listKomentar.map((e, i) => (
-
-
-
-
-
-
-
- {e.komentar ? (
-
-
-
- ) : (
- ""
- )}
-
-
-
-
-
-
-
-
-
- ))}
-
- )}
-
- >
- );
-}
diff --git a/src/app_modules/forum/detail/main_detail.tsx b/src/app_modules/forum/detail/main_detail.tsx
new file mode 100644
index 00000000..504b24c8
--- /dev/null
+++ b/src/app_modules/forum/detail/main_detail.tsx
@@ -0,0 +1,106 @@
+"use client";
+
+import {
+ Stack
+} from "@mantine/core";
+import _ from "lodash";
+import { MODEL_FORUM_KOMENTAR, MODEL_FORUM_POSTING } from "../model/interface";
+
+import mqtt_client from "@/util/mqtt_client";
+import { useShallowEffect } from "@mantine/hooks";
+import { useState } from "react";
+import "react-quill/dist/quill.bubble.css";
+import ComponentForum_DetailCreateKomentar from "../component/detail_component/detail_create_komentar";
+import ComponentForum_ListKomentarView from "../component/detail_component/detail_list_komentar";
+import ComponentForum_DetailForumView from "../component/detail_component/detail_view";
+
+
+export default function Forum_MainDetail({
+ dataPosting,
+ listKomentar,
+ userLoginId,
+}: {
+ dataPosting: MODEL_FORUM_POSTING;
+ listKomentar: MODEL_FORUM_KOMENTAR[];
+ userLoginId: string;
+}) {
+ const [data, setData] = useState(dataPosting);
+ const [komentar, setKomentar] = useState(listKomentar);
+
+ // useShallowEffect(() => {
+ // onLoadKomentar({
+ // onLoad(val) {
+ // setKomentar(val);
+ // },
+ // });
+ // }, [setKomentar]);
+
+ // async function onLoadKomentar({ onLoad }: { onLoad: (val: any) => void }) {
+ // const loadKomentar = await forum_getKomentarById(data.id);
+ // onLoad(loadKomentar);
+ // }
+
+ useShallowEffect(() => {
+ mqtt_client.subscribe("Forum_detail_ganti_status");
+
+ mqtt_client.on("message", (topic: any, message: any) => {
+ const newData = JSON.parse(message.toString());
+ if (newData.id === data.id) {
+ const cloneData = _.clone(data);
+
+ // console.log(newData.data);
+ const updateData = {
+ ...cloneData,
+ ForumMaster_StatusPosting: {
+ id: newData.data.id,
+ status: newData.data.status,
+ },
+ };
+
+ setData(updateData as any);
+ }
+ });
+ }, [data]);
+
+ return (
+ <>
+
+ {
+ setData(val);
+ }}
+ />
+
+ {(data?.ForumMaster_StatusPosting?.id as any) === 1 ? (
+ {
+ setKomentar(val);
+ }}
+ data={data}
+ userLoginId={userLoginId}
+ />
+ ) : (
+ ""
+ )}
+
+
+
+
+ >
+ );
+}
+
+
+
+
+
+
diff --git a/src/app_modules/forum/edit/posting/index.tsx b/src/app_modules/forum/edit/posting/index.tsx
index 65b67a2d..cf52fdfc 100644
--- a/src/app_modules/forum/edit/posting/index.tsx
+++ b/src/app_modules/forum/edit/posting/index.tsx
@@ -26,6 +26,10 @@ import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_glob
import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal";
import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/component_global/notif_global/notifikasi_peringatan";
import ComponentGlobal_InputCountDown from "@/app_modules/component_global/input_countdown";
+import {
+ AccentColor,
+ MainColor,
+} from "@/app_modules/component_global/color/color_pallet";
const ReactQuill = dynamic(
() => {
return import("react-quill");
@@ -114,6 +118,17 @@ function ButtonAction({
return (
<>
" || diskusi === "" || diskusi.length > 500
+ ? ""
+ : `1px solid ${AccentColor.yellow}`,
+ backgroundColor:
+ diskusi === "
" || diskusi === "" || diskusi.length > 500
+ ? ""
+ : MainColor.yellow,
+ }}
disabled={
diskusi === "
" || diskusi === "" || diskusi.length > 500
? true
@@ -122,9 +137,6 @@ function ButtonAction({
loaderPosition="center"
loading={loading ? true : false}
radius={"xl"}
- style={{
- transition: "0.5s",
- }}
onClick={() => {
onUpdate();
}}
diff --git a/src/app_modules/forum/edit/posting/layout.tsx b/src/app_modules/forum/edit/posting/layout.tsx
index 64b69331..9e6c286b 100644
--- a/src/app_modules/forum/edit/posting/layout.tsx
+++ b/src/app_modules/forum/edit/posting/layout.tsx
@@ -4,6 +4,8 @@ import { AppShell } from "@mantine/core";
import React from "react";
import ComponentForum_HeaderTamplate from "../../component/header/header_tamplate";
import AppComponentGlobal_LayoutTamplate from "@/app_modules/component_global/component_layout_tamplate";
+import ComponentGlobal_UI_LayoutTamplate from "@/app_modules/component_global/ui/ui_layout_tamplate";
+import ComponentGlobal_UI_HeaderTamplate from "@/app_modules/component_global/ui/ui_header_tamplate";
export default function LayoutForum_EditPosting({
children,
@@ -12,11 +14,17 @@ export default function LayoutForum_EditPosting({
}) {
return (
<>
- }
+ >
+ {children}
+
+
+ {/* }
>
{children}
-
+ */}
>
);
}
diff --git a/src/app_modules/forum/forumku/forum_profile.tsx b/src/app_modules/forum/forumku/forum_profile.tsx
new file mode 100644
index 00000000..16a34f70
--- /dev/null
+++ b/src/app_modules/forum/forumku/forum_profile.tsx
@@ -0,0 +1,100 @@
+"use client";
+
+import { RouterProfile } from "@/app/lib/router_hipmi/router_katalog";
+import {
+ AccentColor,
+ MainColor,
+} from "@/app_modules/component_global/color/color_pallet";
+import { MODEL_USER } from "@/app_modules/home/model/interface";
+import {
+ Center,
+ Avatar,
+ Stack,
+ Button,
+ Divider,
+ Grid,
+ Text,
+} from "@mantine/core";
+import { IconCircleFilled } from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+
+import { useState } from "react";
+
+export default function ComponentForum_ViewForumProfile({
+ auhtorSelectedData,
+ totalPosting,
+}: {
+ auhtorSelectedData: MODEL_USER;
+ totalPosting: number;
+}) {
+ const router = useRouter();
+ const [loading, setLoading] = useState(false);
+
+ // if (loading) return ;
+
+ return (
+ <>
+
+
+
+
+
+
+
+ {auhtorSelectedData?.Profile?.name}
+
+
+
+
+ {totalPosting} Posting
+
+
+
+
+ @{auhtorSelectedData?.username}
+ {""}
+
+
+
+
+
+
+
+ {
+ setLoading(true);
+ router.push(
+ RouterProfile.katalog + auhtorSelectedData?.Profile?.id
+ );
+ }}
+ >
+ Kunjungi Profile
+
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/forum/forumku/index.tsx b/src/app_modules/forum/forumku/index.tsx
index e246717e..065586dd 100644
--- a/src/app_modules/forum/forumku/index.tsx
+++ b/src/app_modules/forum/forumku/index.tsx
@@ -1,28 +1,28 @@
"use client";
import { RouterForum } from "@/app/lib/router_hipmi/router_forum";
-import { RouterProfile } from "@/app/lib/router_hipmi/router_katalog";
-import ComponentGlobal_V2_LoadingPage from "@/app_modules/component_global/loading_page_v2";
import { MODEL_USER } from "@/app_modules/home/model/interface";
import {
ActionIcon,
Affix,
- Avatar,
- Button,
Center,
- Divider,
- Grid,
+ Loader,
Stack,
Text,
rem,
} from "@mantine/core";
import { useWindowScroll } from "@mantine/hooks";
-import { IconCircleFilled, IconPencilPlus } from "@tabler/icons-react";
+import { IconPencilPlus, IconSearchOff } from "@tabler/icons-react";
import _ from "lodash";
import { useRouter } from "next/navigation";
import { useState } from "react";
-import ComponentForum_MainCardView from "../component/main_card_view";
import { MODEL_FORUM_POSTING } from "../model/interface";
+import ComponentForum_ViewForumProfile from "./forum_profile";
+import ComponentForum_PostinganPribadi from "./postingan_pribadi";
+import { ScrollOnly } from "next-scroll-loader";
+import { forum_getAllPostingByAuhtorId } from "../fun/get/get_list_posting_by_author_id";
+import ComponentForum_ForumkuMainCardView from "../component/forumku_component/forumku_view";
+import { AccentColor } from "@/app_modules/component_global/color/color_pallet";
export default function Forum_Forumku({
auhtorSelectedData,
@@ -36,6 +36,9 @@ export default function Forum_Forumku({
userLoginId: string;
}) {
const router = useRouter();
+ const [data, setData] = useState(dataPosting);
+ const [activePage, setActivePage] = useState(1);
+
const [scroll, scrollTo] = useWindowScroll();
const [loadingCreate, setLoadingCreate] = useState(false);
@@ -44,21 +47,25 @@ export default function Forum_Forumku({
{userLoginId === auhtorSelectedData.id ? (
0 ? 0.5 : ""}
style={{
transition: "0.5s",
+ border: `1px solid ${AccentColor.skyblue}`,
}}
size={"xl"}
radius={"xl"}
variant="transparent"
- bg={"blue"}
+ bg={AccentColor.blue}
onClick={() => {
setLoadingCreate(true);
router.push(RouterForum.create);
}}
>
-
+ {loadingCreate ? (
+
+ ) : (
+
+ )}
) : (
@@ -66,171 +73,54 @@ export default function Forum_Forumku({
)}
-
- {_.isEmpty(dataPosting) ? (
-
-
- Belum ada posting
-
-
+
+ {_.isEmpty(data) ? (
+
+
+
+
+ Tidak ada data
+
+
+
) : (
-
+ // --- Main component --- //
+ (
+
+
+
+ )}
+ data={data}
+ setData={setData}
+ moreData={async () => {
+ const loadData = await forum_getAllPostingByAuhtorId({
+ page: activePage + 1,
+ authorId: auhtorSelectedData.id,
+ });
+ setActivePage((val) => val + 1);
+
+ return loadData;
+ }}
+ >
+ {(item) => (
+ {
+ setData(val);
+ }}
+ allData={data}
+ />
+ )}
+
)}
>
);
}
-
-function ForumProfile({
- auhtorSelectedData,
- totalPosting,
-}: {
- auhtorSelectedData: MODEL_USER;
- totalPosting: number;
-}) {
- const router = useRouter();
- const [loading, setLoading] = useState(false);
-
- // if (loading) return ;
-
- return (
- <>
-
-
-
-
-
-
-
- {auhtorSelectedData?.Profile?.name}
-
-
-
-
- {totalPosting} Posting
-
-
-
-
- @{auhtorSelectedData?.username}
- {""}
-
-
-
-
-
-
-
- {
- setLoading(true);
- router.push(
- RouterProfile.katalog + auhtorSelectedData?.Profile?.id
- );
- }}
- >
- Kunjungi Profile
-
-
-
-
-
-
- >
- );
-}
-
-function ForumPosting({
- dataPosting,
- userLoginId,
-}: {
- dataPosting: MODEL_FORUM_POSTING[];
- userLoginId: any;
-}) {
- const router = useRouter();
- const [data, setData] = useState(dataPosting);
- const [loadingDetail, setLoadingDetail] = useState(false);
- const [loadingKomen, setLoadingKomen] = useState(false);
-
- if (loadingDetail) return ;
- if (loadingKomen) return ;
- return (
- <>
-
-
- {/*
- {dataPosting.map((e, i) => (
-
-
-
-
- {
- // console.log("halaman forum");
- setLoadingDetail(true);
- router.push(RouterForum.main_detail + i);
- }}
- >
-
-
- Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ad,
- vitae. Quisquam aspernatur, eius consequatur dicta repellendus
- facere vero recusandae deleniti voluptas quod architecto,
- tenetur totam excepturi rem nam iusto earum.
-
-
-
-
-
-
- {
- setLoadingKomen(true);
- router.push(RouterForum.komentar + i);
- }}
- >
-
-
- 1
-
-
-
-
-
- ))}
- */}
- >
- );
-}
diff --git a/src/app_modules/forum/forumku/layout.tsx b/src/app_modules/forum/forumku/layout.tsx
index a89824b6..2ea05fa3 100644
--- a/src/app_modules/forum/forumku/layout.tsx
+++ b/src/app_modules/forum/forumku/layout.tsx
@@ -6,6 +6,8 @@ import ComponentForum_HeaderTamplate from "../component/header/header_tamplate";
import { MODEL_USER } from "@/app_modules/home/model/interface";
import { IconX } from "@tabler/icons-react";
import AppComponentGlobal_LayoutTamplate from "@/app_modules/component_global/component_layout_tamplate";
+import ComponentGlobal_UI_LayoutTamplate from "@/app_modules/component_global/ui/ui_layout_tamplate";
+import ComponentGlobal_UI_HeaderTamplate from "@/app_modules/component_global/ui/ui_header_tamplate";
export default function LayoutForum_Forumku({
children,
@@ -16,7 +18,18 @@ export default function LayoutForum_Forumku({
}) {
return (
<>
- }
+ />
+ }
+ >
+ {children}
+
+
+ {/*
{children}
-
+ */}
>
);
}
diff --git a/src/app_modules/forum/forumku/postingan_pribadi.tsx b/src/app_modules/forum/forumku/postingan_pribadi.tsx
new file mode 100644
index 00000000..8d654861
--- /dev/null
+++ b/src/app_modules/forum/forumku/postingan_pribadi.tsx
@@ -0,0 +1,85 @@
+"use client"
+
+import ComponentGlobal_V2_LoadingPage from "@/app_modules/component_global/loading_page_v2";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import ComponentForum_MainCardView from "../component/main_card_view";
+import { MODEL_FORUM_POSTING } from "../model/interface";
+import ComponentForum_ForumkuMainCardView from "../component/forumku_component/forumku_view";
+
+export default function ComponentForum_PostinganPribadi({
+ dataPosting,
+ userLoginId,
+}: {
+ dataPosting: MODEL_FORUM_POSTING[];
+ userLoginId: any;
+}) {
+ const router = useRouter();
+ const [data, setData] = useState(dataPosting);
+ const [loadingDetail, setLoadingDetail] = useState(false);
+ const [loadingKomen, setLoadingKomen] = useState(false);
+
+// if (loadingDetail) return ;
+// if (loadingKomen) return ;
+
+ return (
+ <>
+
+
+ {/* */}
+
+ {/*
+ {dataPosting.map((e, i) => (
+
+
+
+
+ {
+ // console.log("halaman forum");
+ setLoadingDetail(true);
+ router.push(RouterForum.main_detail + i);
+ }}
+ >
+
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ad,
+ vitae. Quisquam aspernatur, eius consequatur dicta repellendus
+ facere vero recusandae deleniti voluptas quod architecto,
+ tenetur totam excepturi rem nam iusto earum.
+
+
+
+
+
+
+ {
+ setLoadingKomen(true);
+ router.push(RouterForum.komentar + i);
+ }}
+ >
+
+
+ 1
+
+
+
+
+
+ ))}
+ */}
+ >
+ );
+}
\ No newline at end of file
diff --git a/src/app_modules/forum/fun/create/fun_create_report_komentar.ts b/src/app_modules/forum/fun/create/fun_create_report_komentar.ts
index 9b33e379..e775f7e4 100644
--- a/src/app_modules/forum/fun/create/fun_create_report_komentar.ts
+++ b/src/app_modules/forum/fun/create/fun_create_report_komentar.ts
@@ -3,27 +3,35 @@
import prisma from "@/app/lib/prisma";
import { user_getOneUserId } from "@/app_modules/fun_global/get_user_token";
-export async function forum_funCreateReportKomentar(
- komentarId: string,
- value: string
-) {
+export async function forum_funCreateReportKomentar({
+ komentarId,
+ kategoriId,
+}: {
+ komentarId: string;
+ kategoriId: any;
+}) {
const authorId = await user_getOneUserId();
const cekId = await prisma.forumMaster_KategoriReport.findFirst({
where: {
- title: value,
+ title: kategoriId,
},
});
- const createReport = await prisma.forum_ReportKomentar.create({
- data: {
- userId: authorId,
- forumMaster_KategoriReportId: cekId?.id,
- forum_KomentarId: komentarId,
- },
- });
+ try {
+ const createReport = await prisma.forum_ReportKomentar.create({
+ data: {
+ userId: authorId,
+ forumMaster_KategoriReportId: cekId?.id,
+ forum_KomentarId: komentarId,
+ },
+ });
+
+ if (!createReport)
+ return { status: 400, message: "Gagal menambahkan report komentar !" };
+ } catch (error) {
+ console.log(error);
+ }
- if (!createReport)
- return { status: 400, message: "Gagal menambahkan report komentar !" };
return { status: 201, message: "Berhasil me-report komentar !" };
}
diff --git a/src/app_modules/forum/fun/forum_notifikasi/fun_create_notifikasi.tsx b/src/app_modules/forum/fun/forum_notifikasi/fun_create_notifikasi.tsx
new file mode 100644
index 00000000..d0219a03
--- /dev/null
+++ b/src/app_modules/forum/fun/forum_notifikasi/fun_create_notifikasi.tsx
@@ -0,0 +1,21 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import { MODEL_NOTIFIKASI } from "@/app_modules/notifikasi/model/interface";
+
+export default async function forum_funCreateNotifikasiToAdmin({
+ data,
+}: {
+ data: MODEL_NOTIFIKASI;
+}) {
+ console.log(data);
+
+ // const getAdmin = await prisma.user.findMany({
+ // where: {
+ // active: true,
+ // masterUserRoleId: "2",
+ // },
+ // });
+
+ return { status: 201 };
+}
diff --git a/src/app_modules/forum/fun/get/get_komentar_by_id.ts b/src/app_modules/forum/fun/get/get_all_komentar_by_id.ts
similarity index 89%
rename from src/app_modules/forum/fun/get/get_komentar_by_id.ts
rename to src/app_modules/forum/fun/get/get_all_komentar_by_id.ts
index c60c6440..4e9bdf4e 100644
--- a/src/app_modules/forum/fun/get/get_komentar_by_id.ts
+++ b/src/app_modules/forum/fun/get/get_all_komentar_by_id.ts
@@ -2,7 +2,7 @@
import prisma from "@/app/lib/prisma";
-export async function forum_getKomentarById(postingId: string) {
+export async function forum_funGetAllKomentarById(postingId: string) {
const data = await prisma.forum_Komentar.findMany({
orderBy: {
createdAt: "desc",
diff --git a/src/app_modules/forum/fun/get/get_list_posting_by_author_id.ts b/src/app_modules/forum/fun/get/get_list_posting_by_author_id.ts
index 7b4bd9de..bfbbb073 100644
--- a/src/app_modules/forum/fun/get/get_list_posting_by_author_id.ts
+++ b/src/app_modules/forum/fun/get/get_list_posting_by_author_id.ts
@@ -4,8 +4,19 @@ import prisma from "@/app/lib/prisma";
import { user_getOneUserId } from "@/app_modules/fun_global/get_user_token";
import _ from "lodash";
-export async function forum_getListPostingByAuhtorId(authorId: string) {
+export async function forum_getAllPostingByAuhtorId({
+ authorId,
+ page,
+}: {
+ authorId: string;
+ page: any;
+}) {
+ const takeData = 5;
+ const skipData = page * takeData - takeData;
+
const get = await prisma.forum_Posting.findMany({
+ take: takeData,
+ skip: skipData,
orderBy: {
createdAt: "desc",
},
@@ -22,7 +33,13 @@ export async function forum_getListPostingByAuhtorId(authorId: string) {
Author: {
select: {
id: true,
- Profile: true,
+ username: true,
+ Profile: {
+ select: {
+ id: true,
+ imagesId: true,
+ },
+ },
},
},
Forum_Komentar: {
@@ -30,14 +47,20 @@ export async function forum_getListPostingByAuhtorId(authorId: string) {
isActive: true,
},
},
- ForumMaster_StatusPosting: true
+ ForumMaster_StatusPosting: {
+ select: {
+ id: true,
+ status: true,
+ },
+ },
+ forumMaster_StatusPostingId: true,
},
});
- const data = get.map((val) => ({
- ..._.omit(val, ["Forum_Komentar"]),
- _count: val.Forum_Komentar.length,
- }));
+ // const data = get.map((val) => ({
+ // ..._.omit(val, ["Forum_Komentar"]),
+ // _count: val.Forum_Komentar.length,
+ // }));
- return data;
+ return get;
}
diff --git a/src/app_modules/forum/fun/get/get_one_kategori_by_id.ts b/src/app_modules/forum/fun/get/get_one_kategori_by_id.ts
index 2acabf36..e32ce4c4 100644
--- a/src/app_modules/forum/fun/get/get_one_kategori_by_id.ts
+++ b/src/app_modules/forum/fun/get/get_one_kategori_by_id.ts
@@ -13,5 +13,5 @@ export default async function forum_getOneKategoriById({
},
});
- return cekData
+ return cekData;
}
diff --git a/src/app_modules/forum/fun/get/get_one_posting_reported_by_id.ts b/src/app_modules/forum/fun/get/get_one_posting_reported_by_id.ts
new file mode 100644
index 00000000..7ea057dc
--- /dev/null
+++ b/src/app_modules/forum/fun/get/get_one_posting_reported_by_id.ts
@@ -0,0 +1,46 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import _ from "lodash";
+
+export default async function forum_funGetOneReportedPostingById({
+ postingId,
+}: {
+ postingId: string;
+}) {
+ const data = await prisma.forum_Posting.findFirst({
+ where: {
+ id: postingId,
+ },
+ select: {
+ id: true,
+ diskusi: true,
+ Forum_ReportPosting: {
+ select: {
+ id: true,
+ deskripsi: true,
+ forumMaster_KategoriReportId: true,
+ ForumMaster_KategoriReport: true,
+ },
+ },
+ },
+ });
+
+ // console.log(data)
+
+ const group = _.groupBy(
+ data?.Forum_ReportPosting,
+ (val) => val.ForumMaster_KategoriReport?.title
+ );
+ const getKey = _.keys(group);
+ const filterGroup = getKey.map((e) => e.replace("undefined", "Lainnya"));
+
+ const allData = {
+ data: data,
+ list: filterGroup,
+ };
+
+ // console.log(allData);
+
+ return allData;
+}
diff --git a/src/app_modules/forum/fun/get/get_one_report_komentar_by_id.tsx b/src/app_modules/forum/fun/get/get_one_report_komentar_by_id.tsx
new file mode 100644
index 00000000..36993d76
--- /dev/null
+++ b/src/app_modules/forum/fun/get/get_one_report_komentar_by_id.tsx
@@ -0,0 +1,60 @@
+"use server";
+
+import prisma from "@/app/lib/prisma";
+import _ from "lodash";
+import { MODEL_FORUM_KOMENTAR } from "../../model/interface";
+import { group } from "console";
+
+export default async function forum_funGetOneReportKomentarById({
+ komentarId,
+}: {
+ komentarId: string;
+}) {
+ const data = await prisma.forum_Komentar.findFirst({
+ where: {
+ id: komentarId,
+ },
+ select: {
+ id: true,
+ komentar: true,
+ Forum_Posting: {
+ select: {
+ id: true,
+ diskusi: true,
+ Author: {
+ select: {
+ username: true,
+ },
+ },
+ },
+ },
+
+ Forum_ReportKomentar: {
+ select: {
+ deskripsi: true,
+ ForumMaster_KategoriReport: {
+ select: {
+ id: true,
+ title: true,
+ },
+ },
+ },
+ },
+ },
+ });
+
+ const group = _.groupBy(
+ data?.Forum_ReportKomentar,
+ (v) => v.ForumMaster_KategoriReport?.title
+ );
+
+ const getKey = _.keys(group);
+ const filterGroup = getKey.map((e) => e.replace("undefined", "Lainnya"));
+
+ const allData = {
+ data: data,
+ list: filterGroup,
+ };
+
+ return allData;
+}
diff --git a/src/app_modules/forum/index.ts b/src/app_modules/forum/index.ts
index 45d85403..99bd696a 100644
--- a/src/app_modules/forum/index.ts
+++ b/src/app_modules/forum/index.ts
@@ -5,7 +5,7 @@ import Forum_Forumku from "./forumku";
import Forum_Create from "./create";
import LayoutForum_Create from "./create/layout";
import LayoutForum_Forumku from "./forumku/layout";
-import Forum_Detail from "./detail";
+import Forum_MainDetail from "./detail/main_detail";
import LayoutForum_Detail from "./detail/layout";
import Forum_Komentar from "./komentar";
import LayoutForum_Komentar from "./komentar/layout";
@@ -19,6 +19,8 @@ import Forum_ReportKomentar from "./report/komentar";
import LayoutForum_ReportKomentar from "./report/komentar/layout";
import Forum_ReportPostingLainnya from "./report/posting/lainnya";
import Forum_ReportKomentarLainnya from "./report/komentar/lainnya";
+import Forum_DetailReportKomentar from "./detail/detail_report_komentar";
+import Forum_DetailReportPosting from "./detail/detail_report_posting";
export {
Forum_Splash,
@@ -28,7 +30,7 @@ export {
Forum_Create,
LayoutForum_Create,
LayoutForum_Forumku,
- Forum_Detail,
+ Forum_MainDetail as Forum_Detail,
LayoutForum_Detail,
Forum_Komentar,
LayoutForum_Komentar,
@@ -42,4 +44,6 @@ export {
LayoutForum_ReportKomentar,
Forum_ReportPostingLainnya,
Forum_ReportKomentarLainnya,
+ Forum_DetailReportKomentar,
+ Forum_DetailReportPosting,
};
diff --git a/src/app_modules/forum/main/beranda.tsx b/src/app_modules/forum/main/beranda.tsx
index b83e5f04..6a1c0789 100644
--- a/src/app_modules/forum/main/beranda.tsx
+++ b/src/app_modules/forum/main/beranda.tsx
@@ -11,20 +11,21 @@ import {
Stack,
Text,
TextInput,
- rem
+ rem,
} from "@mantine/core";
import { useShallowEffect, useWindowScroll } from "@mantine/hooks";
-import {
- IconPencilPlus,
- IconSearchOff
-} from "@tabler/icons-react";
+import { IconPencilPlus, IconSearchOff } from "@tabler/icons-react";
import _ from "lodash";
import { ScrollOnly } from "next-scroll-loader";
import { useRouter } from "next/navigation";
import { useState } from "react";
-import ComponentForum_V2_MainCardView from "../component/main_component/card_view";
+import ComponentForum_BerandaCardView from "../component/main_component/card_view";
import { forum_new_getAllPosting } from "../fun/get/new_get_all_posting";
import { MODEL_FORUM_POSTING } from "../model/interface";
+import {
+ AccentColor,
+ MainColor,
+} from "@/app_modules/component_global/color/color_pallet";
export default function Forum_Beranda({
listForum,
@@ -121,7 +122,7 @@ export default function Forum_Beranda({
return (
<>
{isNewPost && (
-
+
setData(val)}
@@ -138,25 +139,29 @@ export default function Forum_Beranda({
{/* {JSON.stringify(listForum, null, 2)} */}
0 ? 0.5 : ""}
style={{
transition: "0.5s",
+ border: `1px solid ${AccentColor.skyblue}`,
}}
size={"xl"}
radius={"xl"}
variant="transparent"
- bg={"blue"}
+ bg={AccentColor.blue}
onClick={() => {
setLoadingCreate(true);
router.push(RouterForum.create);
}}
>
-
+ {loadingCreate ? (
+
+ ) : (
+
+ )}
-
+
+
{_.isEmpty(data) ? (
-
+
-
+
Tidak ada data
@@ -176,7 +182,7 @@ export default function Forum_Beranda({
) : (
// --- Main component --- //
(
@@ -195,7 +201,7 @@ export default function Forum_Beranda({
}}
>
{(item) => (
- {
@@ -241,6 +247,11 @@ function ButtonUpdateBeranda({
<>
;
-
const listFooter = [
{
id: 1,
@@ -57,7 +58,46 @@ export default function LayoutForum_Main({
return (
<>
- {
+ setLoading(true);
+ router.push(RouterForum.forumku + dataAuthor?.id);
+ }}
+ >
+ {loading ? (
+
+ ) : (
+
+ )}
+
+ }
+ />
+ }
+ >
+ {children}
+
+
+ {/*
@@ -72,6 +112,7 @@ export default function LayoutForum_Main({
Forum
+
{children}
-
+ */}
>
);
}
diff --git a/src/app_modules/forum/model/interface.tsx b/src/app_modules/forum/model/interface.tsx
index b512259a..5210898f 100644
--- a/src/app_modules/forum/model/interface.tsx
+++ b/src/app_modules/forum/model/interface.tsx
@@ -23,6 +23,7 @@ export interface MODEL_FORUM_KOMENTAR {
updatedAt: Date;
komentar: string;
forum_PostingId: string;
+ Forum_Posting: MODEL_FORUM_POSTING;
authorId: string;
Author: MODEL_USER;
Forum_ReportKomentar: MODEL_FORUM_MASTER_REPORT[];
@@ -45,7 +46,7 @@ export interface MODEL_FORUM_MASTER_STATUS {
status: string;
}
-export interface MODEL_FORUM_REPORT {
+export interface MODEL_FORUM_REPORT_POSTING {
id: string;
isActive: boolean;
createdAt: Date;
@@ -58,3 +59,17 @@ export interface MODEL_FORUM_REPORT {
userId: string;
User: MODEL_USER;
}
+
+export interface MODEL_FORUM_REPORT_KOMENTAR {
+ id: string;
+ isActive: boolean;
+ createdAt: Date;
+ updatedAt: Date;
+ deskripsi: string;
+ ForumMaster_KategoriReport: MODEL_FORUM_MASTER_REPORT;
+ forumMaster_KategoriReportId: string;
+ forum_KomentarId: string,
+ Forum_Komentar: MODEL_FORUM_KOMENTAR;
+ userId: string;
+ User: MODEL_USER;
+}
diff --git a/src/app_modules/forum/report/komentar/index.tsx b/src/app_modules/forum/report/komentar/index.tsx
index 2cc2fe7d..5a86b139 100644
--- a/src/app_modules/forum/report/komentar/index.tsx
+++ b/src/app_modules/forum/report/komentar/index.tsx
@@ -1,28 +1,40 @@
"use client";
-import { Box, Button, Paper, Radio, Stack, Text, Title } from "@mantine/core";
-import { MODEL_FORUM_MASTER_REPORT } from "../../model/interface";
-import { useState } from "react";
-import { forum_funCreateReportPosting } from "../../fun/create/fun_create_report_posting";
-import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil";
-import { useRouter } from "next/navigation";
-import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal";
import { RouterForum } from "@/app/lib/router_hipmi/router_forum";
+import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil";
+import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal";
+import mqtt_client from "@/util/mqtt_client";
+import { Button, Radio, Stack, Text, Title } from "@mantine/core";
+import { toNumber } from "lodash";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
import { forum_funCreateReportKomentar } from "../../fun/create/fun_create_report_komentar";
+import forum_funCreateNotifikasiToAdmin from "../../fun/forum_notifikasi/fun_create_notifikasi";
+
+import { MODEL_FORUM_MASTER_REPORT } from "../../model/interface";
+import forum_getOneKategoriById from "../../fun/get/get_one_kategori_by_id";
+import getMaster_NamaBank from "@/app_modules/investasi/fun/master/get_nama_bank";
export default function Forum_ReportKomentar({
komentarId,
listReport,
+ userLoginId,
}: {
komentarId: string;
listReport: MODEL_FORUM_MASTER_REPORT[];
+ userLoginId: string;
}) {
const [reportValue, setReportValue] = useState("Kebencian");
return (
<>
-
+ {
+ setReportValue(val);
+ }}
+ >
{listReport.map((e) => (
@@ -35,32 +47,67 @@ export default function Forum_ReportKomentar({
))}
-
+
>
);
}
function ButtonAction({
- value,
+ kategoriId,
komentarId,
+ userLoginId,
}: {
- value: string;
+ kategoriId: string;
komentarId: string;
+ userLoginId: string;
}) {
const router = useRouter();
const [loading, setLoading] = useState(false);
async function onReport() {
- await forum_funCreateReportKomentar(komentarId, value).then((res) => {
- if (res.status === 201) {
- ComponentGlobal_NotifikasiBerhasil(res.message, 2000);
- setLoading(true);
- router.back();
- } else {
- ComponentGlobal_NotifikasiGagal(res.message);
- }
+ const report = await forum_funCreateReportKomentar({
+ komentarId: komentarId,
+ kategoriId: kategoriId,
});
+
+ if (report.status === 201) {
+ ComponentGlobal_NotifikasiBerhasil(report.message, 2000);
+ setLoading(true);
+ router.back();
+
+ // const get = await getMaster_NamaBank();
+ // console.log(get);
+
+ // await forum_getOneKategoriById({
+ // kategoriId: kategoriId,
+ // });
+
+ // console.log(getKategori);
+
+ // const dataNotif = {
+ // appId: komentarId,
+ // pesan: getKategori?.deskripsi,
+ // kategoriApp: "FORUM",
+ // title: getKategori?.title,
+ // userId: userLoginId,
+ // status: "Report Komentar",
+ // };
+
+ // const createNotif = await forum_funCreateNotifikasiToAdmin({
+ // data: dataNotif as any,
+ // });
+
+ // if (createNotif.status === 201) {
+ // mqtt_client.publish("ADMIN", JSON.stringify({ count: 1 }));
+ // }
+ } else {
+ ComponentGlobal_NotifikasiGagal(report.message);
+ }
}
return (
<>
@@ -75,7 +122,7 @@ function ButtonAction({
onReport()}
diff --git a/src/app_modules/forum/report/komentar/lainnya.tsx b/src/app_modules/forum/report/komentar/lainnya.tsx
index a25ae24f..9af12274 100644
--- a/src/app_modules/forum/report/komentar/lainnya.tsx
+++ b/src/app_modules/forum/report/komentar/lainnya.tsx
@@ -61,7 +61,7 @@ function ButtonAction({
>
Batal
- onReport()}>
+ onReport()}>
Report
diff --git a/src/app_modules/forum/report/posting/index.tsx b/src/app_modules/forum/report/posting/index.tsx
index 650f86b6..4836e4b6 100644
--- a/src/app_modules/forum/report/posting/index.tsx
+++ b/src/app_modules/forum/report/posting/index.tsx
@@ -77,10 +77,9 @@ function ButtonAction({
const getKategori = await forum_getOneKategoriById({
kategoriId: toNumber(kategoriId),
});
- console.log(getKategori);
+ // console.log(getKategori);
ComponentGlobal_NotifikasiBerhasil(report.message, 2000);
- setLoading(true);
router.back();
const dataNotif = {
@@ -99,6 +98,8 @@ function ButtonAction({
if (createNotifikasi.status === 201) {
mqtt_client.publish("ADMIN", JSON.stringify({ count: 1 }));
}
+ setLoading(true);
+
} else {
ComponentGlobal_NotifikasiGagal(report.message);
}
diff --git a/src/app_modules/forum/report/posting/lainnya.tsx b/src/app_modules/forum/report/posting/lainnya.tsx
index de89b6c8..4b1fe678 100644
--- a/src/app_modules/forum/report/posting/lainnya.tsx
+++ b/src/app_modules/forum/report/posting/lainnya.tsx
@@ -8,11 +8,15 @@ import { forum_funCreateReportPosting } from "../../fun/create/fun_create_report
import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil";
import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal";
import { forum_funCreateReportPostingLainnya } from "../../fun/create/fun_create_report_posting_lainnya";
+import mqtt_client from "@/util/mqtt_client";
+import notifikasiToAdmin_funCreate from "@/app_modules/notifikasi/fun/create/create_notif_to_admin";
export default function Forum_ReportPostingLainnya({
- postingIg,
+ postingId,
+ userLoginId,
}: {
- postingIg: string;
+ postingId: string;
+ userLoginId: string;
}) {
const [deskripsi, setDeskripsi] = useState("");
return (
@@ -26,46 +30,69 @@ export default function Forum_ReportPostingLainnya({
setDeskripsi(val.currentTarget.value);
}}
/>
-
+
>
);
}
function ButtonAction({
- postingIg,
+ postingId,
deskripsi,
+ userLoginId,
}: {
- postingIg: string;
+ postingId: string;
deskripsi: string;
+ userLoginId: string;
}) {
const router = useRouter();
async function onReport() {
- await forum_funCreateReportPostingLainnya(postingIg, deskripsi).then(
- (res) => {
- if (res.status === 201) {
- ComponentGlobal_NotifikasiBerhasil(res.message);
- router.back();
- } else {
- ComponentGlobal_NotifikasiGagal(res.message);
- }
- }
+ const report = await forum_funCreateReportPostingLainnya(
+ postingId,
+ deskripsi
);
+ if (report.status === 201) {
+ ComponentGlobal_NotifikasiBerhasil(report.message);
+ router.back();
+
+ const dataNotif = {
+ appId: postingId,
+ pesan: deskripsi,
+ kategoriApp: "FORUM",
+ title: "Lainnya",
+ userId: userLoginId,
+ status: "Report Posting",
+ };
+
+ const createNotifikasi = await notifikasiToAdmin_funCreate({
+ data: dataNotif as any,
+ });
+
+ if (createNotifikasi.status === 201) {
+ mqtt_client.publish("ADMIN", JSON.stringify({ count: 1 }));
+ }
+ } else {
+ ComponentGlobal_NotifikasiGagal(report.message);
+ }
}
return (
<>
router.replace(RouterForum.report_posting + postingIg)}
+ onClick={() => router.replace(RouterForum.report_posting + postingId)}
>
Batal
{
- setTimeout(() => {
- // setHotMenu(1);
- // setStatus("Publish");
- router.replace(RouterForum.beranda);
- }, 1000);
- }, []);
+ const router = useRouter();
+ useShallowEffect(() => {
+ setTimeout(() => {
+ router.replace(RouterForum.beranda);
+ }, 1000);
+ }, []);
return (
<>
-
-
-
-
-
+
+
+
+ >
+ );
+}
+
+function ViewSplash() {
+ return (
+ <>
+
+
+
+
+
>
);
}
diff --git a/src/app_modules/home/layout.tsx b/src/app_modules/home/layout.tsx
index 75784e11..06620b75 100644
--- a/src/app_modules/home/layout.tsx
+++ b/src/app_modules/home/layout.tsx
@@ -92,7 +92,7 @@ export default function HomeLayout({
mqtt_client.subscribe("USER");
mqtt_client.on("message", (topic: any, message: any) => {
- console.log(topic);
+ // console.log(topic);
const data = JSON.parse(message.toString());
if (data.userId === dataUser.id) {
@@ -172,7 +172,7 @@ export default function HomeLayout({
{countNotif}}
+ label={{countNotif}}
>
diff --git a/src/app_modules/home/view.tsx b/src/app_modules/home/view.tsx
index 21ce749b..b84d6a13 100644
--- a/src/app_modules/home/view.tsx
+++ b/src/app_modules/home/view.tsx
@@ -2,55 +2,38 @@
import {
ActionIcon,
- BackgroundImage,
Box,
- Center,
- Flex,
Group,
Image,
- Loader,
- LoadingOverlay,
Paper,
- ScrollArea,
SimpleGrid,
- Skeleton,
Stack,
- Text,
- ThemeIcon,
- Title,
+ Text
} from "@mantine/core";
import {
IconAffiliate,
IconBriefcase,
IconHeartHandshake,
- IconMap2,
- IconMessages,
IconPackageImport,
IconPresentation,
- IconShoppingBag,
- IconUserCircle,
- IconUserSearch,
+ IconUserSearch
} from "@tabler/icons-react";
-import toast from "react-simple-toasts";
-import { useRouter } from "next/navigation";
-import { MODEL_PROFILE_OLD } from "./model/user_profile";
-import AppNotif from "../notif";
-import { RouterEvent } from "@/app/lib/router_hipmi/router_event";
-import { RouterVote } from "@/app/lib/router_hipmi/router_vote";
-import { MODEL_USER } from "./model/interface";
-import { ComponentGlobal_NotifikasiPeringatan } from "../component_global/notif_global/notifikasi_peringatan";
-import { RouterJob } from "@/app/lib/router_hipmi/router_job";
-import { useState } from "react";
-import { useDisclosure } from "@mantine/hooks";
-import { RouterForum } from "@/app/lib/router_hipmi/router_forum";
-import ComponentGlobal_V2_LoadingPage from "../component_global/loading_page_v2";
import { RouterColab } from "@/app/lib/router_hipmi/router_colab";
-import { AccentColor, MainColor } from "../component_global/color/color_pallet";
-import { MODEL_JOB } from "../job/model/interface";
+import { RouterEvent } from "@/app/lib/router_hipmi/router_event";
+import { RouterJob } from "@/app/lib/router_hipmi/router_job";
+import { RouterVote } from "@/app/lib/router_hipmi/router_vote";
+import { useDisclosure } from "@mantine/hooks";
import _ from "lodash";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import { AccentColor, MainColor } from "../component_global/color/color_pallet";
import ComponentGlobal_IsEmptyData from "../component_global/is_empty_data";
+import ComponentGlobal_V2_LoadingPage from "../component_global/loading_page_v2";
+import { ComponentGlobal_NotifikasiPeringatan } from "../component_global/notif_global/notifikasi_peringatan";
+import { MODEL_JOB } from "../job/model/interface";
+import { MODEL_USER } from "./model/interface";
export default function HomeView({
dataUser,
diff --git a/src/app_modules/notif/index.tsx b/src/app_modules/notif/index.tsx
deleted file mode 100644
index 6dc0240d..00000000
--- a/src/app_modules/notif/index.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-"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/app_modules/notifikasi/fun/create/create_notif_to_admin.tsx b/src/app_modules/notifikasi/fun/create/create_notif_to_admin.tsx
index b3809973..b0260166 100644
--- a/src/app_modules/notifikasi/fun/create/create_notif_to_admin.tsx
+++ b/src/app_modules/notifikasi/fun/create/create_notif_to_admin.tsx
@@ -8,6 +8,7 @@ export default async function notifikasiToAdmin_funCreate({
}: {
data: MODEL_NOTIFIKASI;
}) {
+
const getAdmin = await prisma.user.findMany({
where: {
active: true,
@@ -15,6 +16,8 @@ export default async function notifikasiToAdmin_funCreate({
},
});
+ // console.log(getAdmin);
+
for (let a of getAdmin) {
const create = await prisma.notifikasi.create({
data: {
diff --git a/src/app_modules/notifikasi/main/index.tsx b/src/app_modules/notifikasi/main/index.tsx
index 2a8ad163..8ca7e69a 100644
--- a/src/app_modules/notifikasi/main/index.tsx
+++ b/src/app_modules/notifikasi/main/index.tsx
@@ -29,6 +29,7 @@ import ComponentGlobal_IsEmptyData from "@/app_modules/component_global/is_empty
import { RouterForum } from "@/app/lib/router_hipmi/router_forum";
import notifikasi_getByUserId from "../fun/get/get_notifiaksi_by_id";
import { useShallowEffect } from "@mantine/hooks";
+import { data } from "autoprefixer";
export default function Notifikasi_MainView({
listNotifikasi,
@@ -104,7 +105,7 @@ function MainView({ listNotifikasi }: { listNotifikasi: MODEL_NOTIFIKASI[] }) {
e?.kategoriApp === "FORUM" &&
redirectDetailForumPage({
- appId: e.appId,
+ data: e,
router: router,
});
@@ -212,12 +213,24 @@ function redirectJobPage({
}
function redirectDetailForumPage({
- appId,
+ data,
router,
}: {
- appId: string;
+ data: MODEL_NOTIFIKASI;
router: AppRouterInstance;
}) {
- const path = RouterForum.main_detail + appId;
- router.push(path);
+ if (data.status === null) {
+ const path = RouterForum.main_detail + data.appId;
+ router.push(path);
+ }
+
+ if (data.status === "Report Komentar") {
+ const path = RouterForum.detail_report_komentar + data.appId;
+ router.push(path);
+ }
+
+ if (data.status === "Report Posting") {
+ const path = RouterForum.detail_report_posting + data.appId;
+ router.push(path);
+ }
}
diff --git a/src/app_modules/zCoba/index.tsx b/src/app_modules/zCoba/index.tsx
index 2d2f6607..d42574b6 100644
--- a/src/app_modules/zCoba/index.tsx
+++ b/src/app_modules/zCoba/index.tsx
@@ -75,7 +75,7 @@ export default function Coba_TestLoading() {
return (
<>
- Apa
+
>
);
diff --git a/yarn.lock b/yarn.lock
index 64605bc4..05af251e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -277,13 +277,6 @@
dependencies:
regenerator-runtime "^0.14.0"
-"@babel/runtime@^7.7.2":
- version "7.24.5"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.5.tgz#230946857c053a36ccc66e1dd03b17dd0c4ed02c"
- integrity sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==
- dependencies:
- regenerator-runtime "^0.14.0"
-
"@babel/template@^7.24.6":
version "7.24.6"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.6.tgz#048c347b2787a6072b24c723664c8d02b67a44f9"
@@ -1359,14 +1352,6 @@
dependencies:
"@types/react" "*"
-"@types/react-virtualized@^9.21.30":
- version "9.21.30"
- resolved "https://registry.yarnpkg.com/@types/react-virtualized/-/react-virtualized-9.21.30.tgz#ba39821bcb2487512a8a2cdd9fbdb5e6fc87fedb"
- integrity sha512-4l2TFLQ8BCjNDQlvH85tU6gctuZoEdgYzENQyZHpgTHU7hoLzYgPSOALMAeA58LOWua8AzC6wBivPj1lfl6JgQ==
- dependencies:
- "@types/prop-types" "*"
- "@types/react" "*"
-
"@types/react@*":
version "18.2.57"
resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.57.tgz#147b516d8bdb2900219acbfc6f939bdeecca7691"
@@ -1931,7 +1916,7 @@ clsx@1.1.1:
resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188"
integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==
-clsx@^1.0.4, clsx@^1.1.1:
+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==
@@ -2177,7 +2162,7 @@ doctrine@^3.0.0:
dependencies:
esutils "^2.0.2"
-dom-helpers@^5.0.1, dom-helpers@^5.1.3:
+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==
@@ -4374,11 +4359,6 @@ react-is@^16.13.1, react-is@^16.7.0:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
-react-lifecycles-compat@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
- integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
-
react-property@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/react-property/-/react-property-2.0.0.tgz#2156ba9d85fa4741faf1918b38efc1eae3c6a136"
@@ -4461,18 +4441,6 @@ react-transition-group@4.4.2:
loose-envify "^1.4.0"
prop-types "^15.6.2"
-react-virtualized@^9.22.5:
- version "9.22.5"
- resolved "https://registry.yarnpkg.com/react-virtualized/-/react-virtualized-9.22.5.tgz#bfb96fed519de378b50d8c0064b92994b3b91620"
- integrity sha512-YqQMRzlVANBv1L/7r63OHa2b0ZsAaDp1UhVNEdUaXI8A5u6hTpA5NYtUueLH2rFuY/27mTGIBl7ZhqFKzw18YQ==
- dependencies:
- "@babel/runtime" "^7.7.2"
- clsx "^1.0.4"
- dom-helpers "^5.1.3"
- loose-envify "^1.4.0"
- prop-types "^15.7.2"
- react-lifecycles-compat "^3.0.4"
-
react@18.2.0:
version "18.2.0"
resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
From bca5a2ac15bb9b7f81353d74871210258fff43ce Mon Sep 17 00:00:00 2001
From: Bagasbanuna02
Date: Tue, 2 Jul 2024 17:38:13 +0800
Subject: [PATCH 2/3] UI Forum untuk user - UI selesai - Realtime dan
notifikasi selesai ## No Issuee
---
src/app/dev/forum/create/loading.tsx | 9 --
.../forum/detail/main-detail/[id]/loading.tsx | 9 --
.../forum/detail/main-detail/[id]/page.tsx | 9 +-
.../dev/forum/edit/posting/[id]/loading.tsx | 9 --
src/app/dev/forum/forumku/[id]/loading.tsx | 9 --
src/app/dev/forum/main/loading.tsx | 9 --
.../report/komentar-lainnya/[id]/loading.tsx | 9 --
.../report/komentar-lainnya/[id]/page.tsx | 7 +-
.../forum/report/komentar/[id]/loading.tsx | 9 --
.../report/posting-lainnya/[id]/loading.tsx | 9 --
.../dev/forum/report/posting/[id]/loading.tsx | 9 --
.../sub_detail/hasil_report_komentar.tsx | 31 ++--
.../admin/notifikasi/route_setting/forum.ts | 23 ++-
.../ui/ui_header_tamplate.tsx | 41 ++++--
.../ui/ui_layout_tamplate.tsx | 1 -
.../detail_create_komentar.tsx | 19 ++-
.../detail_component/detail_header.tsx | 131 ++++++++++-------
.../detail_component/detail_list_komentar.tsx | 112 ++++++++-------
.../detail_component/detail_view.tsx | 36 +++--
.../forumku_component/forumku_more_button.tsx | 134 +++++++++++-------
.../forumku_component/forumku_view.tsx | 1 -
.../komentar_author_header_name.tsx | 18 +--
.../komentar_button_more.tsx | 82 +++++------
.../main_component/card_more_button.tsx | 106 ++++++++------
.../component/main_component/card_view.tsx | 11 +-
src/app_modules/forum/detail/layout.tsx | 13 +-
src/app_modules/forum/detail/main_detail.tsx | 62 +++++---
.../forum/forumku/forum_profile.tsx | 15 +-
src/app_modules/forum/forumku/index.tsx | 18 +--
.../fun/count/count_total_komentar_by_id.ts | 30 ++--
.../fun/create/fun_create_report_komentar.ts | 13 +-
.../fun_create_notifikasi.tsx | 21 ---
.../forum/fun/get/get_all_komentar_by_id.ts | 14 +-
.../forum/fun/get/get_list_all_posting.ts | 4 +-
src/app_modules/forum/main/beranda.tsx | 7 +-
src/app_modules/forum/main/layout.tsx | 15 --
.../forum/report/komentar/index.tsx | 94 ++++++------
.../forum/report/komentar/lainnya.tsx | 64 +++++++--
.../forum/report/komentar/layout.tsx | 21 +--
.../forum/report/posting/index.tsx | 57 +++++---
.../forum/report/posting/layout.tsx | 16 +--
src/app_modules/forum/splash/index.tsx | 26 ++--
src/app_modules/home/view.tsx | 24 ++--
43 files changed, 719 insertions(+), 638 deletions(-)
delete mode 100644 src/app/dev/forum/create/loading.tsx
delete mode 100644 src/app/dev/forum/detail/main-detail/[id]/loading.tsx
delete mode 100644 src/app/dev/forum/edit/posting/[id]/loading.tsx
delete mode 100644 src/app/dev/forum/forumku/[id]/loading.tsx
delete mode 100644 src/app/dev/forum/main/loading.tsx
delete mode 100644 src/app/dev/forum/report/komentar-lainnya/[id]/loading.tsx
delete mode 100644 src/app/dev/forum/report/komentar/[id]/loading.tsx
delete mode 100644 src/app/dev/forum/report/posting-lainnya/[id]/loading.tsx
delete mode 100644 src/app/dev/forum/report/posting/[id]/loading.tsx
delete mode 100644 src/app_modules/forum/fun/forum_notifikasi/fun_create_notifikasi.tsx
diff --git a/src/app/dev/forum/create/loading.tsx b/src/app/dev/forum/create/loading.tsx
deleted file mode 100644
index b1f8b62f..00000000
--- a/src/app/dev/forum/create/loading.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-import ComponentGlobal_V2_LoadingPage from "@/app_modules/component_global/loading_page_v2";
-
-export default async function Page() {
- return (
- <>
-
- >
- );
-}
diff --git a/src/app/dev/forum/detail/main-detail/[id]/loading.tsx b/src/app/dev/forum/detail/main-detail/[id]/loading.tsx
deleted file mode 100644
index b1f8b62f..00000000
--- a/src/app/dev/forum/detail/main-detail/[id]/loading.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-import ComponentGlobal_V2_LoadingPage from "@/app_modules/component_global/loading_page_v2";
-
-export default async function Page() {
- return (
- <>
-
- >
- );
-}
diff --git a/src/app/dev/forum/detail/main-detail/[id]/page.tsx b/src/app/dev/forum/detail/main-detail/[id]/page.tsx
index 325d3b6b..0c764797 100644
--- a/src/app/dev/forum/detail/main-detail/[id]/page.tsx
+++ b/src/app/dev/forum/detail/main-detail/[id]/page.tsx
@@ -5,22 +5,29 @@ import { forum_countOneTotalKomentarById } from "@/app_modules/forum/fun/count/c
import { user_getOneUserId } from "@/app_modules/fun_global/get_user_token";
import { RouterForum } from "@/app/lib/router_hipmi/router_forum";
import { redirect } from "next/navigation";
+import { forum_countTotalKomenById } from "@/app_modules/forum/fun/count/count_total_komentar_by_id";
export default async function Page({ params }: { params: { id: string } }) {
let postingId = params.id;
const userLoginId = await user_getOneUserId();
const dataPosting = await forum_getOnePostingById(postingId);
- const listKomentar = await forum_funGetAllKomentarById(postingId);
+ const listKomentar = await forum_funGetAllKomentarById({
+ postingId: postingId,
+ page: 1,
+ });
dataPosting?.isActive === false && redirect(RouterForum.beranda);
+ const countKomentar = await forum_countTotalKomenById(postingId);
+
return (
<>
>
);
diff --git a/src/app/dev/forum/edit/posting/[id]/loading.tsx b/src/app/dev/forum/edit/posting/[id]/loading.tsx
deleted file mode 100644
index b1f8b62f..00000000
--- a/src/app/dev/forum/edit/posting/[id]/loading.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-import ComponentGlobal_V2_LoadingPage from "@/app_modules/component_global/loading_page_v2";
-
-export default async function Page() {
- return (
- <>
-
- >
- );
-}
diff --git a/src/app/dev/forum/forumku/[id]/loading.tsx b/src/app/dev/forum/forumku/[id]/loading.tsx
deleted file mode 100644
index b1f8b62f..00000000
--- a/src/app/dev/forum/forumku/[id]/loading.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-import ComponentGlobal_V2_LoadingPage from "@/app_modules/component_global/loading_page_v2";
-
-export default async function Page() {
- return (
- <>
-
- >
- );
-}
diff --git a/src/app/dev/forum/main/loading.tsx b/src/app/dev/forum/main/loading.tsx
deleted file mode 100644
index 874bc4a9..00000000
--- a/src/app/dev/forum/main/loading.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-import ComponentGlobal_V2_LoadingPage from "@/app_modules/component_global/loading_page_v2";
-
-export default async function Page() {
- return (
- <>
-
- >
- );
-}
diff --git a/src/app/dev/forum/report/komentar-lainnya/[id]/loading.tsx b/src/app/dev/forum/report/komentar-lainnya/[id]/loading.tsx
deleted file mode 100644
index b1f8b62f..00000000
--- a/src/app/dev/forum/report/komentar-lainnya/[id]/loading.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-import ComponentGlobal_V2_LoadingPage from "@/app_modules/component_global/loading_page_v2";
-
-export default async function Page() {
- return (
- <>
-
- >
- );
-}
diff --git a/src/app/dev/forum/report/komentar-lainnya/[id]/page.tsx b/src/app/dev/forum/report/komentar-lainnya/[id]/page.tsx
index 1f34498e..4c4b9439 100644
--- a/src/app/dev/forum/report/komentar-lainnya/[id]/page.tsx
+++ b/src/app/dev/forum/report/komentar-lainnya/[id]/page.tsx
@@ -1,11 +1,16 @@
import { Forum_ReportKomentarLainnya } from "@/app_modules/forum";
+import { user_getOneUserId } from "@/app_modules/fun_global/get_user_token";
export default async function Page({ params }: { params: { id: string } }) {
let komentarId = params.id;
+ const userLoginId = await user_getOneUserId();
return (
<>
-
+
>
);
}
diff --git a/src/app/dev/forum/report/komentar/[id]/loading.tsx b/src/app/dev/forum/report/komentar/[id]/loading.tsx
deleted file mode 100644
index b1f8b62f..00000000
--- a/src/app/dev/forum/report/komentar/[id]/loading.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-import ComponentGlobal_V2_LoadingPage from "@/app_modules/component_global/loading_page_v2";
-
-export default async function Page() {
- return (
- <>
-
- >
- );
-}
diff --git a/src/app/dev/forum/report/posting-lainnya/[id]/loading.tsx b/src/app/dev/forum/report/posting-lainnya/[id]/loading.tsx
deleted file mode 100644
index b1f8b62f..00000000
--- a/src/app/dev/forum/report/posting-lainnya/[id]/loading.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-import ComponentGlobal_V2_LoadingPage from "@/app_modules/component_global/loading_page_v2";
-
-export default async function Page() {
- return (
- <>
-
- >
- );
-}
diff --git a/src/app/dev/forum/report/posting/[id]/loading.tsx b/src/app/dev/forum/report/posting/[id]/loading.tsx
deleted file mode 100644
index b1f8b62f..00000000
--- a/src/app/dev/forum/report/posting/[id]/loading.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-import ComponentGlobal_V2_LoadingPage from "@/app_modules/component_global/loading_page_v2";
-
-export default async function Page() {
- return (
- <>
-
- >
- );
-}
diff --git a/src/app_modules/admin/forum/sub_detail/hasil_report_komentar.tsx b/src/app_modules/admin/forum/sub_detail/hasil_report_komentar.tsx
index 097ed84f..3e65bfb8 100644
--- a/src/app_modules/admin/forum/sub_detail/hasil_report_komentar.tsx
+++ b/src/app_modules/admin/forum/sub_detail/hasil_report_komentar.tsx
@@ -1,18 +1,14 @@
"use client";
-import { RouterAdminForum } from "@/app/lib/router_admin/router_admin_forum";
import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/component_global/header_tamplate";
-import ComponentAdminDonasi_TombolKembali from "@/app_modules/admin/donasi/component/tombol_kembali";
import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil";
import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal";
import {
MODEL_FORUM_KOMENTAR,
- MODEL_FORUM_MASTER_REPORT,
- MODEL_FORUM_REPORT_POSTING,
+ MODEL_FORUM_REPORT_POSTING
} from "@/app_modules/forum/model/interface";
+import mqtt_client from "@/util/mqtt_client";
import {
- Badge,
- Box,
Button,
Center,
Group,
@@ -24,28 +20,22 @@ import {
Stack,
Table,
Text,
- TextInput,
- Title,
+ Title
} from "@mantine/core";
+import { useDisclosure } from "@mantine/hooks";
import {
- IconMessageCircle,
- IconFlag3,
- IconTrash,
- IconSearch,
+ IconTrash
} from "@tabler/icons-react";
import _ from "lodash";
import { useRouter } from "next/navigation";
import { useState } from "react";
-import { adminForum_funDeletePostingById } from "../fun/delete/fun_delete_posting_by_id";
-import { adminForum_funDeleteKomentarById } from "../fun/delete/fun_delete_komentar_by_id";
-import { useDisclosure, useShallowEffect } from "@mantine/hooks";
-import ComponentAdminGlobal_IsEmptyData from "../../component_global/is_empty_data";
-import { adminForum_getListReportKomentarbyId } from "../fun/get/get_list_report_komentar_by_id";
import ComponentAdminGlobal_BackButton from "../../component_global/back_button";
-import ComponentAdminForum_ViewOneDetailKomentar from "../component/detail_one_komentar";
-import adminForum_funGetOneKomentarById from "../fun/get/get_one_komentar_by_id";
-import mqtt_client from "@/util/mqtt_client";
+import ComponentAdminGlobal_IsEmptyData from "../../component_global/is_empty_data";
import adminNotifikasi_funCreateToUser from "../../notifikasi/fun/create/fun_create_notif_user";
+import ComponentAdminForum_ViewOneDetailKomentar from "../component/detail_one_komentar";
+import { adminForum_funDeleteKomentarById } from "../fun/delete/fun_delete_komentar_by_id";
+import { adminForum_getListReportKomentarbyId } from "../fun/get/get_list_report_komentar_by_id";
+import adminForum_funGetOneKomentarById from "../fun/get/get_one_komentar_by_id";
export default function AdminForum_HasilReportKomentar({
komentarId,
@@ -108,6 +98,7 @@ function ButtonDeleteKomentar({
const dataNotif = {
appId: data.id,
status: "Report Komentar",
+ // userId harus sama seperti author
userId: data.authorId,
pesan: data.komentar,
kategoriApp: "FORUM",
diff --git a/src/app_modules/admin/notifikasi/route_setting/forum.ts b/src/app_modules/admin/notifikasi/route_setting/forum.ts
index 279c5dc4..99dd044a 100644
--- a/src/app_modules/admin/notifikasi/route_setting/forum.ts
+++ b/src/app_modules/admin/notifikasi/route_setting/forum.ts
@@ -13,10 +13,21 @@ export default async function adminNotifikasi_findRouterForum({
onChangeNavbar: (val: any) => void;
onToggleNavbar: (val: any) => void;
}) {
- const routeName = RouterAdminForum.table_report_posting;
- router.push(routeName);
- onChangeNavbar({
- id: 7,
- childId: 73,
- });
+ if (data.status === "Report Posting") {
+ const routeName = RouterAdminForum.table_report_posting;
+ router.push(routeName);
+ onChangeNavbar({
+ id: 7,
+ childId: 73,
+ });
+ }
+
+ if (data.status === "Report Komentar") {
+ const routeName = RouterAdminForum.table_report_komentar;
+ router.push(routeName);
+ onChangeNavbar({
+ id: 7,
+ childId: 74,
+ });
+ }
}
diff --git a/src/app_modules/component_global/ui/ui_header_tamplate.tsx b/src/app_modules/component_global/ui/ui_header_tamplate.tsx
index 22e2f794..00104819 100644
--- a/src/app_modules/component_global/ui/ui_header_tamplate.tsx
+++ b/src/app_modules/component_global/ui/ui_header_tamplate.tsx
@@ -16,6 +16,7 @@ import { AccentColor, MainColor } from "../color/color_pallet";
export default function ComponentGlobal_UI_HeaderTamplate({
title,
+ posotion,
// left button
hideButtonLeft,
iconLeft,
@@ -25,6 +26,7 @@ export default function ComponentGlobal_UI_HeaderTamplate({
routerRight,
}: {
title: string;
+ posotion?: any;
// left button
hideButtonLeft?: boolean;
iconLeft?: any;
@@ -48,20 +50,31 @@ export default function ComponentGlobal_UI_HeaderTamplate({
}}
bg={MainColor.darkblue}
>
-
- {
- setIsLoading(true);
- routerLeft === undefined
- ? router.back()
- : router.push(routerLeft);
- }}
- >
- {isLoading ? : iconLeft ? iconLeft : }
-
+
+ {hideButtonLeft ? (
+
+ ) : (
+ {
+ setIsLoading(true);
+ routerLeft === undefined
+ ? router.back()
+ : router.push(routerLeft);
+ }}
+ >
+ {isLoading ? (
+
+ ) : iconLeft ? (
+ iconLeft
+ ) : (
+
+ )}
+
+ )}
+
{title}
diff --git a/src/app_modules/component_global/ui/ui_layout_tamplate.tsx b/src/app_modules/component_global/ui/ui_layout_tamplate.tsx
index 14cc3dd5..17446934 100644
--- a/src/app_modules/component_global/ui/ui_layout_tamplate.tsx
+++ b/src/app_modules/component_global/ui/ui_layout_tamplate.tsx
@@ -20,7 +20,6 @@ export default function ComponentGlobal_UI_LayoutTamplate({
{/* Header */}
{header ? (
diff --git a/src/app_modules/forum/component/detail_component/detail_create_komentar.tsx b/src/app_modules/forum/component/detail_component/detail_create_komentar.tsx
index 64e44782..4840bc18 100644
--- a/src/app_modules/forum/component/detail_component/detail_create_komentar.tsx
+++ b/src/app_modules/forum/component/detail_component/detail_create_komentar.tsx
@@ -1,4 +1,4 @@
-"use client"
+"use client";
import ComponentGlobal_InputCountDown from "@/app_modules/component_global/input_countdown";
import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil";
@@ -17,7 +17,8 @@ import { forum_funCreateKomentar } from "../../fun/create/fun_create_komentar";
import { forum_funGetAllKomentarById } from "../../fun/get/get_all_komentar_by_id";
import { MODEL_FORUM_POSTING } from "../../model/interface";
import { useRouter } from "next/navigation";
-
+import { MainColor } from "@/app_modules/component_global/color/color_pallet";
+import mqtt_client from "@/util/mqtt_client";
export default function ComponentForum_DetailCreateKomentar({
postingId,
onSetKomentar,
@@ -41,8 +42,13 @@ export default function ComponentForum_DetailCreateKomentar({
const createComment = await forum_funCreateKomentar(postingId, value);
if (createComment.status === 201) {
- const loadKomentar = await forum_funGetAllKomentarById(data.id);
- onSetKomentar(loadKomentar);
+ // const loadKomentar = await forum_funGetAllKomentarById(data.id);
+
+ const loadData = await forum_funGetAllKomentarById({
+ postingId: data.id,
+ page: 1,
+ });
+ onSetKomentar(loadData);
setValue("");
setIsEmpty(true);
@@ -104,6 +110,8 @@ export default function ComponentForum_DetailCreateKomentar({
? true
: false
}
+ bg={MainColor.yellow}
+ color={"yellow"}
loaderPosition="center"
loading={loading ? true : false}
radius={"xl"}
@@ -112,8 +120,7 @@ export default function ComponentForum_DetailCreateKomentar({
Balas
-
>
);
-}
\ No newline at end of file
+}
diff --git a/src/app_modules/forum/component/detail_component/detail_header.tsx b/src/app_modules/forum/component/detail_component/detail_header.tsx
index 63ec8d26..f241bd35 100644
--- a/src/app_modules/forum/component/detail_component/detail_header.tsx
+++ b/src/app_modules/forum/component/detail_component/detail_header.tsx
@@ -44,6 +44,7 @@ import { forum_funDeletePostingById } from "../../fun/delete/fun_delete_posting_
import { forum_funEditStatusPostingById } from "../../fun/edit/fun_edit_status_posting_by_id";
import { forum_getOnePostingById } from "../../fun/get/get_one_posting_by_id";
import mqtt_client from "@/util/mqtt_client";
+import { AccentColor, MainColor } from "@/app_modules/component_global/color/color_pallet";
export default function ComponentForum_DetailHeader({
data,
@@ -85,13 +86,13 @@ export default function ComponentForum_DetailHeader({
-
-
+
+
{data?.Author.username ? data?.Author.username : "Nama author "}
{userLoginId != authorId ? (
- ""
+ {
+ setLoadingReport(true);
+ router.push(RouterForum.report_posting + postingId);
+ }}
+ >
+
+
+
+
+
+
+ Laporkan posting
+ {" "}
+ {loadingReport ? : ""}
+
+
+
) : (
+ {
+ setLoadingEdit(true);
+ router.push(RouterForum.edit_posting + postingId);
+ }}
+ >
+
+
+
+
+
+ Edit posting{" "}
+ {loadingEdit ? : ""}
+
+
+
+
{
close();
@@ -173,16 +214,16 @@ function ComponentForum_DetailButtonMore_V2({
>
{statusId === 1 ? (
-
+
) : (
-
+
)}
{statusId === 1 ? (
- Tutup forum
+ Tutup forum
) : (
- Buka forum
+ Buka forum
)}
@@ -200,56 +241,30 @@ function ComponentForum_DetailButtonMore_V2({
Hapus
-
- {
- setLoadingEdit(true);
- router.push(RouterForum.edit_posting + postingId);
- }}
- >
-
-
-
-
-
- Edit posting{" "}
- {loadingEdit ? : ""}
-
-
-
)}
- {userLoginId == authorId ? (
- ""
- ) : (
- {
- setLoadingReport(true);
- router.push(RouterForum.report_posting + postingId);
- }}
- >
-
-
-
-
-
-
- Laporkan posting
- {" "}
- {loadingReport ? : ""}
-
-
-
- )}
-
-
+
Batal
{
setOpenDel(false);
@@ -261,6 +276,12 @@ function ComponentForum_DetailButtonMore_V2({
setOpenStatusClose(false)}
centered
@@ -276,7 +297,7 @@ function ComponentForum_DetailButtonMore_V2({
/>
- open()}>
+ open()}>
>
@@ -317,7 +338,7 @@ function ButtonDelete({
return (
<>
- Yakin menghapus posting ini ?
+ Yakin menghapus posting ini ?
setOpenDel(false)}>
Batal
@@ -425,9 +446,13 @@ function ButtonStatus({
<>
{statusId === 1 ? (
- Yakin menutup forum ini ?
+
+ Yakin menutup forum ini ?
+
) : (
- Yakin membuka forum ini ?
+
+ Yakin membuka forum ini ?
+
)}
setOpenStatus(false)}>
diff --git a/src/app_modules/forum/component/detail_component/detail_list_komentar.tsx b/src/app_modules/forum/component/detail_component/detail_list_komentar.tsx
index c2b8eeeb..160edf66 100644
--- a/src/app_modules/forum/component/detail_component/detail_list_komentar.tsx
+++ b/src/app_modules/forum/component/detail_component/detail_list_komentar.tsx
@@ -1,82 +1,92 @@
-"use client"
+"use client";
-import { Stack, Center, Box, Card, Spoiler, Divider, Text } from "@mantine/core";
+import {
+ Stack,
+ Center,
+ Box,
+ Card,
+ Spoiler,
+ Divider,
+ Text,
+} from "@mantine/core";
import _ from "lodash";
import { MODEL_FORUM_KOMENTAR } from "../../model/interface";
import ComponentForum_KomentarAuthorNameOnHeader from "../komentar_component/komentar_author_header_name";
+import { MainColor } from "@/app_modules/component_global/color/color_pallet";
-export default function ComponentForum_ListKomentarView({
- listKomentar,
+export default function ComponentForum_KomentarView({
+ data,
setKomentar,
postingId,
userLoginId,
}: {
- listKomentar: MODEL_FORUM_KOMENTAR[];
+ data: MODEL_FORUM_KOMENTAR;
setKomentar: any;
postingId: string;
userLoginId: string;
}) {
return (
<>
-
- {_.isEmpty(listKomentar) ? (
+
+
+
+
+
+
+
+ {data.komentar ? (
+
+
+
+ ) : (
+ ""
+ )}
+
+
+
+
+
+
+
+
+
+
+
+ {/*
+ {_.isEmpty(data) ? (
-
+
Belum ada komentar
) : (
-
+
{" "}
Komentar
- {listKomentar.map((e, i) => (
-
-
-
-
-
-
-
- {e.komentar ? (
-
-
-
- ) : (
- ""
- )}
-
-
-
-
-
-
-
-
-
+ {data.map((e, i) => (
+
))}
)}
-
+ */}
>
);
-}
\ No newline at end of file
+}
diff --git a/src/app_modules/forum/component/detail_component/detail_view.tsx b/src/app_modules/forum/component/detail_component/detail_view.tsx
index 09776292..e75938ab 100644
--- a/src/app_modules/forum/component/detail_component/detail_view.tsx
+++ b/src/app_modules/forum/component/detail_component/detail_view.tsx
@@ -4,6 +4,10 @@ import { Card, Stack, Group, Text } from "@mantine/core";
import { IconMessageCircle, IconMessageCircleX } from "@tabler/icons-react";
import { MODEL_FORUM_POSTING } from "../../model/interface";
import ComponentForum_DetailHeader from "./detail_header";
+import {
+ AccentColor,
+ MainColor,
+} from "@/app_modules/component_global/color/color_pallet";
export default function ComponentForum_DetailForumView({
data,
@@ -18,7 +22,15 @@ export default function ComponentForum_DetailForumView({
}) {
return (
<>
-
+
{/* {JSON.stringify(data, null, 2)} */}
{/* HEADER */}
@@ -33,9 +45,9 @@ export default function ComponentForum_DetailForumView({
{/* CONTENT */}
-
+
-
+
{data?.diskusi ? (
) : (
@@ -49,20 +61,28 @@ export default function ComponentForum_DetailForumView({
-
+
{(data?.ForumMaster_StatusPosting?.id as any) === 1 ? (
-
+
) : (
)}
- {totalKomentar}
+
+ {totalKomentar}
+
-
+
{new Date(data?.createdAt).toLocaleTimeString()}
{/* {new Intl.RelativeTimeFormat("id", {style: "short"}).format(-1,"day")} */}
-
+
{data?.createdAt
? new Date(data?.createdAt).toLocaleDateString(["id-ID"], {
dateStyle: "medium",
diff --git a/src/app_modules/forum/component/forumku_component/forumku_more_button.tsx b/src/app_modules/forum/component/forumku_component/forumku_more_button.tsx
index 7d856de2..5f2b4caf 100644
--- a/src/app_modules/forum/component/forumku_component/forumku_more_button.tsx
+++ b/src/app_modules/forum/component/forumku_component/forumku_more_button.tsx
@@ -32,6 +32,10 @@ import _ from "lodash";
import { forum_funDeletePostingById } from "../../fun/delete/fun_delete_posting_by_id";
import { forum_funEditStatusPostingById } from "../../fun/edit/fun_edit_status_posting_by_id";
import { MODEL_FORUM_POSTING } from "../../model/interface";
+import {
+ AccentColor,
+ MainColor,
+} from "@/app_modules/component_global/color/color_pallet";
export default function ComponentForum_ForumkuMoreButton({
authorId,
@@ -59,12 +63,15 @@ export default function ComponentForum_ForumkuMoreButton({
const [loadingEdit, setLoadingEdit] = useState(false);
const [loadingReport, setLoadingReport] = useState(false);
- // if (loadingEdit) return ;
-
return (
<>
{userLoginId != authorId ? (
- ""
+ {
+ setLoadingReport(true);
+ router.push(RouterForum.report_posting + postingId);
+ }}
+ >
+
+
+
+
+
+
+ Laporkan posting
+ {" "}
+ {loadingReport ? : ""}
+
+
+
) : (
+ {
+ setLoadingEdit(true);
+ router.push(RouterForum.edit_posting + postingId);
+ }}
+ >
+
+
+
+
+
+ Edit posting{" "}
+ {loadingEdit ? : ""}
+
+
+
+
{
close();
@@ -85,16 +126,16 @@ export default function ComponentForum_ForumkuMoreButton({
>
{statusId === 1 ? (
-
+
) : (
-
+
)}
{statusId === 1 ? (
- Tutup forum
+ Tutup forum
) : (
- Buka forum
+ Buka forum
)}
@@ -112,56 +153,30 @@ export default function ComponentForum_ForumkuMoreButton({
Hapus
-
- {
- setLoadingEdit(true);
- router.push(RouterForum.edit_posting + postingId);
- }}
- >
-
-
-
-
-
- Edit posting{" "}
- {loadingEdit ? : ""}
-
-
-
)}
- {userLoginId == authorId ? (
- ""
- ) : (
- {
- setLoadingReport(true);
- router.push(RouterForum.report_posting + postingId);
- }}
- >
-
-
-
-
-
-
- Laporkan posting
- {" "}
- {loadingReport ? : ""}
-
-
-
- )}
-
-
+
Batal
{
setOpenDel(false);
@@ -177,10 +192,15 @@ export default function ComponentForum_ForumkuMoreButton({
}}
allData={allData}
/>
- {/* {JSON.stringify(allData, null, 2)} */}
setOpenStatusClose(false)}
centered
@@ -245,7 +265,9 @@ function ButtonDelete({
return (
<>
- Yakin menghapus posting ini ?
+
+ Yakin menghapus posting ini ?
+
setOpenDel(false)}>
Batal
@@ -392,8 +414,6 @@ function ButtonStatus({
},
};
- console.log(updateDetail.ForumMaster_StatusPosting);
-
mqtt_client.publish(
"Forum_detail_ganti_status",
JSON.stringify({
@@ -410,9 +430,13 @@ function ButtonStatus({
<>
{statusId === 1 ? (
- Yakin menutup forum ini ?
+
+ Yakin menutup forum ini ?
+
) : (
- Yakin membuka forum ini ?
+
+ Yakin membuka forum ini ?
+
)}
setOpenStatus(false)}>
diff --git a/src/app_modules/forum/component/forumku_component/forumku_view.tsx b/src/app_modules/forum/component/forumku_component/forumku_view.tsx
index ed4be128..e12395b6 100644
--- a/src/app_modules/forum/component/forumku_component/forumku_view.tsx
+++ b/src/app_modules/forum/component/forumku_component/forumku_view.tsx
@@ -29,7 +29,6 @@ export default function ComponentForum_ForumkuMainCardView({
return (
<>
- {/* {JSON.stringify(data, null,2)} */}
-
- {authorName
- ? authorName
- : "Nama author coba di berikan panjang "}
+
+ {authorName ? authorName : "Nama author "}
- {/*
-
- {username ? username : "@username "}
-
- */}
-
-
+
{tglPublish
? tglPublish.toLocaleDateString(["id-ID"], {
day: "numeric",
@@ -107,7 +99,7 @@ export default function ComponentForum_KomentarAuthorNameOnHeader({
diff --git a/src/app_modules/forum/component/komentar_component/komentar_button_more.tsx b/src/app_modules/forum/component/komentar_component/komentar_button_more.tsx
index 225e2ffd..c8068800 100644
--- a/src/app_modules/forum/component/komentar_component/komentar_button_more.tsx
+++ b/src/app_modules/forum/component/komentar_component/komentar_button_more.tsx
@@ -31,6 +31,10 @@ import { forum_funDeletePostingById } from "../../fun/delete/fun_delete_posting_
import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal";
import { forum_funDeleteKomentarById } from "../../fun/delete/fun_delete_komentar_by_id";
import { forum_funGetAllKomentarById } from "../../fun/get/get_all_komentar_by_id";
+import {
+ AccentColor,
+ MainColor,
+} from "@/app_modules/component_global/color/color_pallet";
export default function ComponentForum_KomentarButtonMore({
userId,
@@ -43,7 +47,7 @@ export default function ComponentForum_KomentarButtonMore({
komentarId: any;
setKomentar?: any;
postingId?: string;
- userLoginId: string
+ userLoginId: string;
}) {
const router = useRouter();
const [opened, { open, close }] = useDisclosure(false);
@@ -53,14 +57,19 @@ export default function ComponentForum_KomentarButtonMore({
const [loadingEdit, setLoadingEdit] = useState(false);
const [loadingReport, setLoadingReport] = useState(false);
- // if (loadingEdit) return ;
-
-
-
return (
<>
- {userLoginId != userId ? (
- ""
- ) : (
+ {userLoginId == userId ? (
{
@@ -86,30 +93,7 @@ export default function ComponentForum_KomentarButtonMore({
Hapus
-
- {/* {
- setLoadingEdit(true);
- router.push(RouterForum.edit_komentar + komentarId);
- }}
- >
-
-
-
-
-
-
- Edit komentar
- {" "}
- {loadingEdit ? : ""}
-
-
- */}
- )}
-
- {userLoginId == userId ? (
- ""
) : (
{
@@ -118,11 +102,11 @@ export default function ComponentForum_KomentarButtonMore({
}}
>
-
+
-
+
Laporkan komentar
{" "}
{loadingReport ? : ""}
@@ -131,13 +115,27 @@ export default function ComponentForum_KomentarButtonMore({
)}
-
+
Batal
{
setOpenDel(false);
@@ -153,7 +151,7 @@ export default function ComponentForum_KomentarButtonMore({
/>
- open()}>
+ open()}>
>
@@ -188,19 +186,11 @@ function ButtonDelete({
ComponentGlobal_NotifikasiGagal(res.message);
}
});
-
- // await forum_funDeletePostingById(komentarId as any).then((res) => {
- // if (res.status === 200) {
- // ComponentGlobal_NotifikasiBerhasil(`Postingan Terhapus`, 2000);
- // } else {
- // ComponentGlobal_NotifikasiGagal(res.message);
- // }
- // });
}
return (
<>
- Yakin menghapus komentar ini ?
+ Yakin menghapus komentar ini ?
setOpenDel(false)}>
Batal
@@ -208,7 +198,7 @@ function ButtonDelete({
{
onDelete();
diff --git a/src/app_modules/forum/component/main_component/card_more_button.tsx b/src/app_modules/forum/component/main_component/card_more_button.tsx
index e8dea597..67ad667d 100644
--- a/src/app_modules/forum/component/main_component/card_more_button.tsx
+++ b/src/app_modules/forum/component/main_component/card_more_button.tsx
@@ -67,12 +67,12 @@ export default function ComponentForum_BerandaMoreButton({
return (
<>
{userLoginId != authorId ? (
- ""
+ {
+ setLoadingReport(true);
+ router.push(RouterForum.report_posting + postingId);
+ }}
+ >
+
+
+
+
+
+
+ Laporkan posting
+ {" "}
+ {loadingReport ? : ""}
+
+
+
) : (
-
+
- Edit posting{" "}
+ Edit posting{" "}
{loadingEdit ? : ""}
@@ -109,16 +126,16 @@ export default function ComponentForum_BerandaMoreButton({
>
{statusId === 1 ? (
-
+
) : (
-
+
)}
{statusId === 1 ? (
- Tutup forum
+ Tutup forum
) : (
- Buka forum
+ Buka forum
)}
@@ -139,36 +156,27 @@ export default function ComponentForum_BerandaMoreButton({
)}
- {userLoginId == authorId ? (
- ""
- ) : (
- {
- setLoadingReport(true);
- router.push(RouterForum.report_posting + postingId);
- }}
- >
-
-
-
-
-
-
- Laporkan posting
- {" "}
- {loadingReport ? : ""}
-
-
-
- )}
-
-
- Batal
+
+ Batal
{
setOpenDel(false);
@@ -188,6 +196,12 @@ export default function ComponentForum_BerandaMoreButton({
setOpenStatusClose(false)}
centered
@@ -252,7 +266,9 @@ function ButtonDelete({
return (
<>
- Yakin menghapus posting ini ?
+
+ Yakin menghapus posting ini ?
+
setOpenDel(false)}>
Batal
@@ -340,8 +356,6 @@ function ButtonStatus({
},
};
- console.log(updateDetail);
-
mqtt_client.publish(
"Forum_detail_ganti_status",
JSON.stringify({
@@ -401,8 +415,6 @@ function ButtonStatus({
},
};
- console.log(updateDetail.ForumMaster_StatusPosting);
-
mqtt_client.publish(
"Forum_detail_ganti_status",
JSON.stringify({
@@ -419,9 +431,13 @@ function ButtonStatus({
<>
{statusId === 1 ? (
- Yakin menutup forum ini ?
+
+ Yakin menutup forum ini ?
+
) : (
- Yakin membuka forum ini ?
+
+ Yakin membuka forum ini ?
+
)}
setOpenStatus(false)}>
diff --git a/src/app_modules/forum/component/main_component/card_view.tsx b/src/app_modules/forum/component/main_component/card_view.tsx
index 3cdae028..dafe9ad3 100644
--- a/src/app_modules/forum/component/main_component/card_view.tsx
+++ b/src/app_modules/forum/component/main_component/card_view.tsx
@@ -1,16 +1,16 @@
"use client";
import { RouterForum } from "@/app/lib/router_hipmi/router_forum";
-import { ActionIcon, Card, Divider, Group, Stack, Text } from "@mantine/core";
+import {
+ AccentColor,
+ MainColor,
+} from "@/app_modules/component_global/color/color_pallet";
+import { ActionIcon, Card, Group, Stack, Text } from "@mantine/core";
import { IconMessageCircle, IconMessageCircleX } from "@tabler/icons-react";
import { useRouter } from "next/navigation";
import { useState } from "react";
import { MODEL_FORUM_POSTING } from "../../model/interface";
import ComponentForum_BerandaHeaderCard from "./card_header";
-import {
- AccentColor,
- MainColor,
-} from "@/app_modules/component_global/color/color_pallet";
export default function ComponentForum_BerandaCardView({
data,
@@ -31,7 +31,6 @@ export default function ComponentForum_BerandaCardView({
return (
<>
- {/* {JSON.stringify(data, null,2)} */}
- }
+ >
+ {children}
+
+
+ {/*
@@ -31,7 +39,6 @@ export default function LayoutForum_Detail({
variant="transparent"
onClick={() => {
setLoading(true);
- // revalidatePath("/dev/forum/main");
router.back();
}}
>
@@ -43,7 +50,7 @@ export default function LayoutForum_Detail({
}
>
{children}
-
+ */}
>
);
}
diff --git a/src/app_modules/forum/detail/main_detail.tsx b/src/app_modules/forum/detail/main_detail.tsx
index 504b24c8..1c70379f 100644
--- a/src/app_modules/forum/detail/main_detail.tsx
+++ b/src/app_modules/forum/detail/main_detail.tsx
@@ -1,8 +1,6 @@
"use client";
-import {
- Stack
-} from "@mantine/core";
+import { Center, Loader, Stack } from "@mantine/core";
import _ from "lodash";
import { MODEL_FORUM_KOMENTAR, MODEL_FORUM_POSTING } from "../model/interface";
@@ -11,21 +9,26 @@ import { useShallowEffect } from "@mantine/hooks";
import { useState } from "react";
import "react-quill/dist/quill.bubble.css";
import ComponentForum_DetailCreateKomentar from "../component/detail_component/detail_create_komentar";
-import ComponentForum_ListKomentarView from "../component/detail_component/detail_list_komentar";
+import ComponentForum_KomentarView from "../component/detail_component/detail_list_komentar";
import ComponentForum_DetailForumView from "../component/detail_component/detail_view";
-
+import { ScrollOnly } from "next-scroll-loader";
+import { forum_funGetAllKomentarById } from "../fun/get/get_all_komentar_by_id";
export default function Forum_MainDetail({
dataPosting,
listKomentar,
userLoginId,
+ countKomentar,
}: {
dataPosting: MODEL_FORUM_POSTING;
listKomentar: MODEL_FORUM_KOMENTAR[];
userLoginId: string;
+ countKomentar: number
}) {
const [data, setData] = useState(dataPosting);
- const [komentar, setKomentar] = useState(listKomentar);
+ const [lsKomentar, setLsKomentar] = useState(listKomentar);
+
+ const [activePage, setActivePage] = useState(1);
// useShallowEffect(() => {
// onLoadKomentar({
@@ -64,10 +67,10 @@ export default function Forum_MainDetail({
return (
<>
-
+
{
setData(val);
@@ -78,7 +81,7 @@ export default function Forum_MainDetail({
{
- setKomentar(val);
+ setLsKomentar(val);
}}
data={data}
userLoginId={userLoginId}
@@ -87,20 +90,35 @@ export default function Forum_MainDetail({
""
)}
-
-
+ (
+
+
+
+ )}
+ data={lsKomentar}
+ setData={setLsKomentar}
+ moreData={async () => {
+ const loadData = await forum_funGetAllKomentarById({
+ postingId: data.id,
+ page: activePage + 1,
+ });
+ setActivePage((val) => val + 1);
+
+ return loadData;
+ }}
+ >
+ {(item) => (
+
+ )}
+
>
);
}
-
-
-
-
-
-
diff --git a/src/app_modules/forum/forumku/forum_profile.tsx b/src/app_modules/forum/forumku/forum_profile.tsx
index 16a34f70..10fb9208 100644
--- a/src/app_modules/forum/forumku/forum_profile.tsx
+++ b/src/app_modules/forum/forumku/forum_profile.tsx
@@ -6,15 +6,7 @@ import {
MainColor,
} from "@/app_modules/component_global/color/color_pallet";
import { MODEL_USER } from "@/app_modules/home/model/interface";
-import {
- Center,
- Avatar,
- Stack,
- Button,
- Divider,
- Grid,
- Text,
-} from "@mantine/core";
+import { Avatar, Button, Center, Grid, Stack, Text } from "@mantine/core";
import { IconCircleFilled } from "@tabler/icons-react";
import { useRouter } from "next/navigation";
@@ -30,17 +22,16 @@ export default function ComponentForum_ViewForumProfile({
const router = useRouter();
const [loading, setLoading] = useState(false);
- // if (loading) return ;
-
return (
<>
+
(
-
+
)}
data={data}
diff --git a/src/app_modules/forum/fun/count/count_total_komentar_by_id.ts b/src/app_modules/forum/fun/count/count_total_komentar_by_id.ts
index 3dbf6ce9..d6a5f9d6 100644
--- a/src/app_modules/forum/fun/count/count_total_komentar_by_id.ts
+++ b/src/app_modules/forum/fun/count/count_total_komentar_by_id.ts
@@ -2,31 +2,19 @@
import prisma from "@/app/lib/prisma";
-
-// PERCOBAAN
-export async function forum_countTotalKomenById(postingId: any[]) {
+// PERCOBAAN
+export async function forum_countTotalKomenById(postingId: string) {
// console.log(postingId)
- const data = postingId.map(async (e) => {
- const get = await prisma.forum_Komentar.count({
- where: {
- forum_PostingId: e,
- isActive: true,
- },
- select: {
- forum_PostingId: true,
+ const get = await prisma.forum_Komentar.count({
+ where: {
+ forum_PostingId: postingId,
+ isActive: true,
+ },
- },
- });
- console.log(get);
});
- // const data = await prisma.forum_Komentar.count({
- // where: {
- // forum_PostingId: postingId,
- // isActive: true,
- // },
- // });
+ // console.log(get);
- // return data;
+ return get;
}
diff --git a/src/app_modules/forum/fun/create/fun_create_report_komentar.ts b/src/app_modules/forum/fun/create/fun_create_report_komentar.ts
index e775f7e4..932a921b 100644
--- a/src/app_modules/forum/fun/create/fun_create_report_komentar.ts
+++ b/src/app_modules/forum/fun/create/fun_create_report_komentar.ts
@@ -11,18 +11,19 @@ export async function forum_funCreateReportKomentar({
kategoriId: any;
}) {
const authorId = await user_getOneUserId();
+ // console.log(kategoriId);
- const cekId = await prisma.forumMaster_KategoriReport.findFirst({
- where: {
- title: kategoriId,
- },
- });
+ // const cekId = await prisma.forumMaster_KategoriReport.findFirst({
+ // where: {
+ // title: kategoriId,
+ // },
+ // });
try {
const createReport = await prisma.forum_ReportKomentar.create({
data: {
userId: authorId,
- forumMaster_KategoriReportId: cekId?.id,
+ forumMaster_KategoriReportId: kategoriId,
forum_KomentarId: komentarId,
},
});
diff --git a/src/app_modules/forum/fun/forum_notifikasi/fun_create_notifikasi.tsx b/src/app_modules/forum/fun/forum_notifikasi/fun_create_notifikasi.tsx
deleted file mode 100644
index d0219a03..00000000
--- a/src/app_modules/forum/fun/forum_notifikasi/fun_create_notifikasi.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-"use server";
-
-import prisma from "@/app/lib/prisma";
-import { MODEL_NOTIFIKASI } from "@/app_modules/notifikasi/model/interface";
-
-export default async function forum_funCreateNotifikasiToAdmin({
- data,
-}: {
- data: MODEL_NOTIFIKASI;
-}) {
- console.log(data);
-
- // const getAdmin = await prisma.user.findMany({
- // where: {
- // active: true,
- // masterUserRoleId: "2",
- // },
- // });
-
- return { status: 201 };
-}
diff --git a/src/app_modules/forum/fun/get/get_all_komentar_by_id.ts b/src/app_modules/forum/fun/get/get_all_komentar_by_id.ts
index 4e9bdf4e..ad1d5cc8 100644
--- a/src/app_modules/forum/fun/get/get_all_komentar_by_id.ts
+++ b/src/app_modules/forum/fun/get/get_all_komentar_by_id.ts
@@ -2,8 +2,19 @@
import prisma from "@/app/lib/prisma";
-export async function forum_funGetAllKomentarById(postingId: string) {
+export async function forum_funGetAllKomentarById({
+ postingId,
+ page,
+}: {
+ postingId: string;
+ page: number;
+}) {
+ const takeData = 5;
+ const skipData = page * takeData - takeData;
+
const data = await prisma.forum_Komentar.findMany({
+ take: takeData,
+ skip: skipData,
orderBy: {
createdAt: "desc",
},
@@ -19,6 +30,7 @@ export async function forum_funGetAllKomentarById(postingId: string) {
Author: {
select: {
id: true,
+ username: true,
Profile: {
select: {
name: true,
diff --git a/src/app_modules/forum/fun/get/get_list_all_posting.ts b/src/app_modules/forum/fun/get/get_list_all_posting.ts
index 59eed9e9..07c16404 100644
--- a/src/app_modules/forum/fun/get/get_list_all_posting.ts
+++ b/src/app_modules/forum/fun/get/get_list_all_posting.ts
@@ -1,9 +1,7 @@
"use server";
-import _ from "lodash";
import prisma from "@/app/lib/prisma";
-import { forum_countOneTotalKomentarById } from "../count/count_one_total_komentar_by_id";
-import { forum_countTotalKomenById } from "../count/count_total_komentar_by_id";
+import _ from "lodash";
export async function forum_getListAllPosting() {
const get = await prisma.forum_Posting.findMany({
diff --git a/src/app_modules/forum/main/beranda.tsx b/src/app_modules/forum/main/beranda.tsx
index 6a1c0789..18968c7f 100644
--- a/src/app_modules/forum/main/beranda.tsx
+++ b/src/app_modules/forum/main/beranda.tsx
@@ -1,6 +1,7 @@
"use client";
import { RouterForum } from "@/app/lib/router_hipmi/router_forum";
+import { AccentColor } from "@/app_modules/component_global/color/color_pallet";
import mqtt_client from "@/util/mqtt_client";
import {
ActionIcon,
@@ -22,10 +23,6 @@ import { useState } from "react";
import ComponentForum_BerandaCardView from "../component/main_component/card_view";
import { forum_new_getAllPosting } from "../fun/get/new_get_all_posting";
import { MODEL_FORUM_POSTING } from "../model/interface";
-import {
- AccentColor,
- MainColor,
-} from "@/app_modules/component_global/color/color_pallet";
export default function Forum_Beranda({
listForum,
@@ -185,7 +182,7 @@ export default function Forum_Beranda({
height="83vh"
renderLoading={() => (
-
+
)}
data={data}
diff --git a/src/app_modules/forum/main/layout.tsx b/src/app_modules/forum/main/layout.tsx
index f7bfb5e6..39e9266e 100644
--- a/src/app_modules/forum/main/layout.tsx
+++ b/src/app_modules/forum/main/layout.tsx
@@ -40,21 +40,6 @@ export default function LayoutForum_Main({
const [hotMenu, setHotMenu] = useState(1);
const [loading, setLoading] = useState(false);
- const listFooter = [
- {
- id: 1,
- name: "Beranda",
- path: RouterForum.beranda,
- icon: ,
- },
-
- {
- id: 2,
- name: "ForumKu",
- path: RouterForum.forumku,
- icon: ,
- },
- ];
return (
<>
diff --git a/src/app_modules/forum/report/komentar/index.tsx b/src/app_modules/forum/report/komentar/index.tsx
index 5a86b139..dc98a477 100644
--- a/src/app_modules/forum/report/komentar/index.tsx
+++ b/src/app_modules/forum/report/komentar/index.tsx
@@ -9,11 +9,14 @@ import { toNumber } from "lodash";
import { useRouter } from "next/navigation";
import { useState } from "react";
import { forum_funCreateReportKomentar } from "../../fun/create/fun_create_report_komentar";
-import forum_funCreateNotifikasiToAdmin from "../../fun/forum_notifikasi/fun_create_notifikasi";
-import { MODEL_FORUM_MASTER_REPORT } from "../../model/interface";
+import {
+ AccentColor,
+ MainColor,
+} from "@/app_modules/component_global/color/color_pallet";
+import notifikasiToAdmin_funCreate from "@/app_modules/notifikasi/fun/create/create_notif_to_admin";
import forum_getOneKategoriById from "../../fun/get/get_one_kategori_by_id";
-import getMaster_NamaBank from "@/app_modules/investasi/fun/master/get_nama_bank";
+import { MODEL_FORUM_MASTER_REPORT } from "../../model/interface";
export default function Forum_ReportKomentar({
komentarId,
@@ -24,12 +27,21 @@ export default function Forum_ReportKomentar({
listReport: MODEL_FORUM_MASTER_REPORT[];
userLoginId: string;
}) {
- const [reportValue, setReportValue] = useState("Kebencian");
+ const [reportValue, setReportValue] = useState("1");
return (
<>
-
+
{
setReportValue(val);
@@ -37,10 +49,14 @@ export default function Forum_ReportKomentar({
>
{listReport.map((e) => (
-
+
{e.title}}
+ value={e?.id.toString()}
+ label={
+
+ {e.title}
+
+ }
/>
{e.deskripsi}
@@ -48,7 +64,7 @@ export default function Forum_ReportKomentar({
@@ -62,12 +78,13 @@ function ButtonAction({
komentarId,
userLoginId,
}: {
- kategoriId: string;
+ kategoriId: number;
komentarId: string;
userLoginId: string;
}) {
const router = useRouter();
const [loading, setLoading] = useState(false);
+ const [isLoadingLain, setIsLoadingLain] = useState(false);
async function onReport() {
const report = await forum_funCreateReportKomentar({
@@ -76,35 +93,29 @@ function ButtonAction({
});
if (report.status === 201) {
- ComponentGlobal_NotifikasiBerhasil(report.message, 2000);
+ const getKategori = await forum_getOneKategoriById({
+ kategoriId: kategoriId,
+ });
+ // console.log(getKategori);
+ const dataNotif = {
+ appId: komentarId,
+ pesan: getKategori?.deskripsi,
+ kategoriApp: "FORUM",
+ title: getKategori?.title,
+ userId: userLoginId,
+ status: "Report Komentar",
+ };
+ const createNotif = await notifikasiToAdmin_funCreate({
+ data: dataNotif as any,
+ });
+
+ if (createNotif.status === 201) {
+ mqtt_client.publish("ADMIN", JSON.stringify({ count: 1 }));
+ }
+
setLoading(true);
router.back();
-
- // const get = await getMaster_NamaBank();
- // console.log(get);
-
- // await forum_getOneKategoriById({
- // kategoriId: kategoriId,
- // });
-
- // console.log(getKategori);
-
- // const dataNotif = {
- // appId: komentarId,
- // pesan: getKategori?.deskripsi,
- // kategoriApp: "FORUM",
- // title: getKategori?.title,
- // userId: userLoginId,
- // status: "Report Komentar",
- // };
-
- // const createNotif = await forum_funCreateNotifikasiToAdmin({
- // data: dataNotif as any,
- // });
-
- // if (createNotif.status === 201) {
- // mqtt_client.publish("ADMIN", JSON.stringify({ count: 1 }));
- // }
+ return ComponentGlobal_NotifikasiBerhasil(report.message, 2000);
} else {
ComponentGlobal_NotifikasiGagal(report.message);
}
@@ -113,10 +124,13 @@ function ButtonAction({
<>
- router.replace(RouterForum.report_komentar_lainnya + komentarId)
- }
+ onClick={() => {
+ setIsLoadingLain(true);
+ router.replace(RouterForum.report_komentar_lainnya + komentarId);
+ }}
>
Lainnya
diff --git a/src/app_modules/forum/report/komentar/lainnya.tsx b/src/app_modules/forum/report/komentar/lainnya.tsx
index 9af12274..cd027a3e 100644
--- a/src/app_modules/forum/report/komentar/lainnya.tsx
+++ b/src/app_modules/forum/report/komentar/lainnya.tsx
@@ -9,8 +9,16 @@ import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_glob
import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal";
import { forum_funCreateReportPostingLainnya } from "../../fun/create/fun_create_report_posting_lainnya";
import { forum_funCreateReportKomentarLainnya } from "../../fun/create/fun_create_report_komentar_lainnya";
+import mqtt_client from "@/util/mqtt_client";
+import notifikasiToAdmin_funCreate from "@/app_modules/notifikasi/fun/create/create_notif_to_admin";
-export default function Forum_ReportKomentarLainnya({ komentarId }: { komentarId: string }) {
+export default function Forum_ReportKomentarLainnya({
+ komentarId,
+ userLoginId,
+}: {
+ komentarId: string;
+ userLoginId: string;
+}) {
const [deskripsi, setDeskripsi] = useState("");
return (
<>
@@ -23,7 +31,11 @@ export default function Forum_ReportKomentarLainnya({ komentarId }: { komentarId
setDeskripsi(val.currentTarget.value);
}}
/>
-
+
>
);
@@ -32,23 +44,43 @@ export default function Forum_ReportKomentarLainnya({ komentarId }: { komentarId
function ButtonAction({
komentarId,
deskripsi,
+ userLoginId,
}: {
komentarId: string;
deskripsi: string;
+ userLoginId: string;
}) {
const router = useRouter();
async function onReport() {
- await forum_funCreateReportKomentarLainnya(komentarId, deskripsi).then(
- (res) => {
- if (res.status === 201) {
- ComponentGlobal_NotifikasiBerhasil(res.message);
- router.back();
- } else {
- ComponentGlobal_NotifikasiGagal(res.message);
- }
- }
+ const report = await forum_funCreateReportKomentarLainnya(
+ komentarId,
+ deskripsi
);
+
+ if (report.status === 201) {
+ const dataNotif = {
+ appId: komentarId,
+ pesan: deskripsi,
+ kategoriApp: "FORUM",
+ title: "Lainnya",
+ userId: userLoginId,
+ status: "Report Komentar",
+ };
+
+ const createNotifikasi = await notifikasiToAdmin_funCreate({
+ data: dataNotif as any,
+ });
+
+ if (createNotifikasi.status === 201) {
+ mqtt_client.publish("ADMIN", JSON.stringify({ count: 1 }));
+ }
+
+ ComponentGlobal_NotifikasiBerhasil(report.message);
+ router.back();
+ } else {
+ ComponentGlobal_NotifikasiGagal(report.message);
+ }
}
return (
<>
@@ -61,7 +93,15 @@ function ButtonAction({
>
Batal
- onReport()}>
+ onReport()}
+ >
Report
diff --git a/src/app_modules/forum/report/komentar/layout.tsx b/src/app_modules/forum/report/komentar/layout.tsx
index fd72b2ef..f131b935 100644
--- a/src/app_modules/forum/report/komentar/layout.tsx
+++ b/src/app_modules/forum/report/komentar/layout.tsx
@@ -1,12 +1,10 @@
"use client";
-import { ActionIcon, AppShell, Group, Header, Title } from "@mantine/core";
-import React from "react";
-import ComponentForum_HeaderTamplate from "../../component/header/header_tamplate";
-import { IconChevronLeft, IconX } from "@tabler/icons-react";
-import router from "next/router";
-import ComponentForum_HeaderRataKiri from "../../component/header/header_rata_kiri";
import AppComponentGlobal_LayoutTamplate from "@/app_modules/component_global/component_layout_tamplate";
+import React from "react";
+import ComponentForum_HeaderRataKiri from "../../component/header/header_rata_kiri";
+import ComponentGlobal_UI_LayoutTamplate from "@/app_modules/component_global/ui/ui_layout_tamplate";
+import ComponentGlobal_UI_HeaderTamplate from "@/app_modules/component_global/ui/ui_header_tamplate";
export default function LayoutForum_ReportKomentar({
children,
@@ -15,13 +13,20 @@ export default function LayoutForum_ReportKomentar({
}) {
return (
<>
-
+ }
+ >
+ {children}
+
+ {/*
}
>
{children}
-
+ */}
>
);
}
diff --git a/src/app_modules/forum/report/posting/index.tsx b/src/app_modules/forum/report/posting/index.tsx
index 4836e4b6..47e4cbc6 100644
--- a/src/app_modules/forum/report/posting/index.tsx
+++ b/src/app_modules/forum/report/posting/index.tsx
@@ -1,18 +1,21 @@
"use client";
-import { Box, Button, Paper, Radio, Stack, Text, Title } from "@mantine/core";
-import { MODEL_FORUM_MASTER_REPORT } from "../../model/interface";
+import { RouterForum } from "@/app/lib/router_hipmi/router_forum";
+import {
+ AccentColor,
+ MainColor,
+} from "@/app_modules/component_global/color/color_pallet";
+import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil";
+import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal";
+import notifikasiToAdmin_funCreate from "@/app_modules/notifikasi/fun/create/create_notif_to_admin";
+import mqtt_client from "@/util/mqtt_client";
+import { Button, Radio, Stack, Text, Title } from "@mantine/core";
+import { toNumber } from "lodash";
+import { useRouter } from "next/navigation";
import { useState } from "react";
import { forum_funCreateReportPosting } from "../../fun/create/fun_create_report_posting";
-import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil";
-import { useRouter } from "next/navigation";
-import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal";
-import { RouterForum } from "@/app/lib/router_hipmi/router_forum";
-import mqtt_client from "@/util/mqtt_client";
-import adminNotifikasi_funCreateToUser from "@/app_modules/admin/notifikasi/fun/create/fun_create_notif_user";
-import notifikasiToAdmin_funCreate from "@/app_modules/notifikasi/fun/create/create_notif_to_admin";
import forum_getOneKategoriById from "../../fun/get/get_one_kategori_by_id";
-import { toNumber } from "lodash";
+import { MODEL_FORUM_MASTER_REPORT } from "../../model/interface";
export default function Forum_ReportPosting({
postingId,
@@ -27,8 +30,17 @@ export default function Forum_ReportPosting({
return (
<>
-
+
{
setReportValue(val);
@@ -39,7 +51,11 @@ export default function Forum_ReportPosting({
{e.title}}
+ label={
+
+ {e.title}
+
+ }
/>
{e.deskripsi}
@@ -66,7 +82,8 @@ function ButtonAction({
userLoginId: string;
}) {
const router = useRouter();
- const [loading, setLoading] = useState(false);
+ const [isLoading, setIsLoading] = useState(false);
+ const [isLoadingLain, setIsLoadingLain] = useState(false);
async function onReport() {
const report = await forum_funCreateReportPosting({
@@ -98,8 +115,7 @@ function ButtonAction({
if (createNotifikasi.status === 201) {
mqtt_client.publish("ADMIN", JSON.stringify({ count: 1 }));
}
- setLoading(true);
-
+ setIsLoading(true);
} else {
ComponentGlobal_NotifikasiGagal(report.message);
}
@@ -108,10 +124,13 @@ function ButtonAction({
<>
- router.replace(RouterForum.report_posting_lainnya + postingId)
- }
+ onClick={() => {
+ setIsLoadingLain(true);
+ router.replace(RouterForum.report_posting_lainnya + postingId);
+ }}
>
Lainnya
@@ -119,7 +138,7 @@ function ButtonAction({
radius={"xl"}
color="orange"
loaderPosition="center"
- loading={loading ? true : false}
+ loading={isLoading ? true : false}
onClick={() => onReport()}
>
Report
diff --git a/src/app_modules/forum/report/posting/layout.tsx b/src/app_modules/forum/report/posting/layout.tsx
index 888c3fcd..0b9b250b 100644
--- a/src/app_modules/forum/report/posting/layout.tsx
+++ b/src/app_modules/forum/report/posting/layout.tsx
@@ -1,12 +1,8 @@
"use client";
-import { ActionIcon, AppShell, Group, Header, Title } from "@mantine/core";
+import ComponentGlobal_UI_HeaderTamplate from "@/app_modules/component_global/ui/ui_header_tamplate";
+import ComponentGlobal_UI_LayoutTamplate from "@/app_modules/component_global/ui/ui_layout_tamplate";
import React from "react";
-import ComponentForum_HeaderTamplate from "../../component/header/header_tamplate";
-import { IconChevronLeft, IconX } from "@tabler/icons-react";
-import router from "next/router";
-import ComponentForum_HeaderRataKiri from "../../component/header/header_rata_kiri";
-import AppComponentGlobal_LayoutTamplate from "@/app_modules/component_global/component_layout_tamplate";
export default function LayoutForum_ReportPosting({
children,
@@ -15,13 +11,15 @@ export default function LayoutForum_ReportPosting({
}) {
return (
<>
-
+
}
>
{children}
-
+
+
+
>
);
}
diff --git a/src/app_modules/forum/splash/index.tsx b/src/app_modules/forum/splash/index.tsx
index 57888ab5..fc828945 100644
--- a/src/app_modules/forum/splash/index.tsx
+++ b/src/app_modules/forum/splash/index.tsx
@@ -2,8 +2,17 @@
import { RouterForum } from "@/app/lib/router_hipmi/router_forum";
import ComponentGlobal_UI_LayoutTamplate from "@/app_modules/component_global/ui/ui_layout_tamplate";
-import { Center, Image, Paper, Stack } from "@mantine/core";
+import {
+ Avatar,
+ Center,
+ Image,
+ Loader,
+ Paper,
+ Stack,
+ Text,
+} from "@mantine/core";
import { useShallowEffect } from "@mantine/hooks";
+import { IconMessages } from "@tabler/icons-react";
import { useRouter } from "next/navigation";
export default function Forum_Splash() {
@@ -26,18 +35,9 @@ export default function Forum_Splash() {
function ViewSplash() {
return (
<>
-
-
-
-
+
+
+
>
);
diff --git a/src/app_modules/home/view.tsx b/src/app_modules/home/view.tsx
index b84d6a13..04fde044 100644
--- a/src/app_modules/home/view.tsx
+++ b/src/app_modules/home/view.tsx
@@ -3,12 +3,16 @@
import {
ActionIcon,
Box,
+ Center,
Group,
Image,
+ Loader,
+ LoadingOverlay,
+ Overlay,
Paper,
SimpleGrid,
Stack,
- Text
+ Text,
} from "@mantine/core";
import {
@@ -17,20 +21,18 @@ import {
IconHeartHandshake,
IconPackageImport,
IconPresentation,
- IconUserSearch
+ IconUserSearch,
} from "@tabler/icons-react";
import { RouterColab } from "@/app/lib/router_hipmi/router_colab";
import { RouterEvent } from "@/app/lib/router_hipmi/router_event";
import { RouterJob } from "@/app/lib/router_hipmi/router_job";
import { RouterVote } from "@/app/lib/router_hipmi/router_vote";
-import { useDisclosure } from "@mantine/hooks";
import _ from "lodash";
import { useRouter } from "next/navigation";
import { useState } from "react";
import { AccentColor, MainColor } from "../component_global/color/color_pallet";
import ComponentGlobal_IsEmptyData from "../component_global/is_empty_data";
-import ComponentGlobal_V2_LoadingPage from "../component_global/loading_page_v2";
import { ComponentGlobal_NotifikasiPeringatan } from "../component_global/notif_global/notifikasi_peringatan";
import { MODEL_JOB } from "../job/model/interface";
import { MODEL_USER } from "./model/interface";
@@ -43,8 +45,8 @@ export default function HomeView({
dataJob: MODEL_JOB[];
}) {
const router = useRouter();
- const [loading, setLoading] = useState(false);
- const [visible, { toggle }] = useDisclosure(false);
+ const [isLoading, setIsLoading] = useState(false);
+ const [pageId, setPageId] = useState(0);
const listPageOnBox = [
{
@@ -83,8 +85,6 @@ export default function HomeView({
return (
<>
- {visible ? : ""}
-
- {e.icon}
+ {isLoading && e.id === pageId ? : e.icon}
{e.name}
@@ -172,7 +173,6 @@ export default function HomeView({
"Cooming Soon !!"
);
} else {
- toggle();
return router.push(routePageJob.link);
}
}
From ac12dd4a98abaf2332e50f7836073a76ae178e7f Mon Sep 17 00:00:00 2001
From: Bagasbanuna02
Date: Fri, 5 Jul 2024 16:29:54 +0800
Subject: [PATCH 3/3] UI Job # style - UI Job di bagian user selesai
# fix
- Scroll data untuk beranda dan tampilan yang lain selesi
## No issue
---
.../80b01061-3161-414e-980e-2fc3ac8ee1d3.jpg | Bin 0 -> 9709 bytes
.../a2486cad-442a-4f4b-b09c-9c0aa7a54cab.jpg | Bin 0 -> 12041 bytes
.../e5700057-a462-4085-84a4-c2a5acb36b4c.png | Bin 0 -> 77324 bytes
src/app/dev/job/create/loading.tsx | 9 -
src/app/dev/job/detail/arsip/[id]/loading.tsx | 9 -
src/app/dev/job/detail/arsip/[id]/page.tsx | 4 +-
src/app/dev/job/detail/draft/[id]/loading.tsx | 9 -
src/app/dev/job/detail/draft/[id]/page.tsx | 4 +-
src/app/dev/job/detail/main/[id]/loading.tsx | 9 -
src/app/dev/job/detail/main/[id]/page.tsx | 4 +-
.../dev/job/detail/publish/[id]/loading.tsx | 9 -
src/app/dev/job/detail/publish/[id]/page.tsx | 4 +-
.../dev/job/detail/reject/[id]/loading.tsx | 9 -
src/app/dev/job/detail/reject/[id]/page.tsx | 4 +-
.../dev/job/detail/review/[id]/loading.tsx | 9 -
src/app/dev/job/detail/review/[id]/page.tsx | 4 +-
src/app/dev/job/edit/[id]/loading.tsx | 9 -
src/app/dev/job/edit/[id]/page.tsx | 4 +-
src/app/dev/job/main/arsip/page.tsx | 6 +-
src/app/dev/job/main/beranda/page.tsx | 8 +-
src/app/dev/job/main/loading.tsx | 9 -
src/app/dev/job/main/status/page.tsx | 15 +-
.../dev/job/non_user_view/[id]/loading.tsx | 9 -
src/app/dev/job/non_user_view/[id]/page.tsx | 6 +-
src/app/dev/job/splash/loading.tsx | 9 -
src/app/dev/job/splash/page.tsx | 4 +-
src/app/emotion.tsx | 29 ++-
src/app/layout.tsx | 1 +
src/app/makuro/page.tsx | 2 +-
.../author_name_on_header.tsx | 18 +-
.../component_global/box_information.tsx | 52 +++++
.../component_global/is_empty_data.tsx | 12 +-
.../component_global/loading_card.tsx | 4 +-
.../component_global/splash/splash_global.tsx | 20 ++
.../component_global/ui/ui_drawer.tsx | 72 +++++++
.../ui/ui_header_tamplate.tsx | 10 +-
.../ui/ui_layout_tamplate.tsx | 59 +++---
.../component_global/ui/ui_modal.tsx | 45 +++++
src/app_modules/forum/detail/main_detail.tsx | 61 +++---
src/app_modules/forum/main/beranda.tsx | 2 +-
src/app_modules/forum/splash/index.tsx | 16 +-
src/app_modules/home/layout.tsx | 173 ++++++++---------
src/app_modules/home/view.tsx | 14 +-
.../job/component/beranda/card_view.tsx | 70 +++++++
.../job/component/button/create_button.tsx | 66 +++++++
.../job/component/card/card_view.tsx | 59 ++++++
.../job/component/card_view_status.tsx | 27 +--
.../job/component/default_value.ts | 10 -
.../job/component/detail/detail_data.tsx | 15 +-
.../job/component/is_empty_data.tsx | 2 +-
src/app_modules/job/create/layout.tsx | 11 +-
src/app_modules/job/create/view.tsx | 81 +++++---
src/app_modules/job/detail/arsip/layout.tsx | 11 +-
src/app_modules/job/detail/arsip/view.tsx | 40 +++-
src/app_modules/job/detail/draft/layout.tsx | 58 +++++-
src/app_modules/job/detail/draft/view.tsx | 180 +++++++++++++++---
src/app_modules/job/detail/main/layout.tsx | 11 +-
src/app_modules/job/detail/main/view.tsx | 14 +-
src/app_modules/job/detail/publish/layout.tsx | 11 +-
src/app_modules/job/detail/publish/view.tsx | 102 ++++++++--
src/app_modules/job/detail/reject/layout.tsx | 10 +-
src/app_modules/job/detail/reject/view.tsx | 123 ++++++++----
src/app_modules/job/detail/review/layout.tsx | 11 +-
src/app_modules/job/detail/review/view.tsx | 36 +++-
src/app_modules/job/edit/layout.tsx | 12 +-
src/app_modules/job/edit/view.tsx | 71 +++++--
...get_list_all_arsip.ts => get_all_arsip.ts} | 12 +-
.../job/fun/get/get_all_publish.ts | 45 +++++
.../fun/get/get_list_status_by_status_id.ts | 68 -------
src/app_modules/job/fun/get/get_one_by_id.ts | 2 +-
.../job/fun/get/status/get_list_draft.ts | 29 +++
.../get_list_publish.ts} | 22 ++-
.../job/fun/get/status/get_list_reject.ts | 29 +++
..._get_list_reject.ts => get_list_review.ts} | 15 +-
src/app_modules/job/index.ts | 16 +-
src/app_modules/job/main/arsip.tsx | 16 --
src/app_modules/job/main/arsip/ui_arsip.tsx | 55 ++++++
src/app_modules/job/main/arsip/view_arsip.tsx | 11 ++
src/app_modules/job/main/beranda.tsx | 120 ------------
.../job/main/beranda/ui_beranda.tsx | 75 ++++++++
.../job/main/beranda/view_beranda.tsx | 10 +
src/app_modules/job/main/layout.tsx | 133 +++++++------
src/app_modules/job/main/status/draft.tsx | 50 ++++-
src/app_modules/job/main/status/publish.tsx | 50 ++++-
src/app_modules/job/main/status/reject.tsx | 47 ++++-
src/app_modules/job/main/status/review.tsx | 48 ++++-
.../main/status/{view.tsx => ui_status.tsx} | 57 ++++--
.../job/main/status/view_status.tsx | 24 +++
src/app_modules/job/non_user_view/layout.tsx | 15 +-
src/app_modules/job/non_user_view/view.tsx | 16 +-
.../job/splash/{view.tsx => ui_splash.tsx} | 22 +--
src/app_modules/job/splash/view_splash.tsx | 9 +
src/app_modules/zCoba/index.tsx | 126 +++++++++++-
93 files changed, 2008 insertions(+), 901 deletions(-)
create mode 100644 public/job/80b01061-3161-414e-980e-2fc3ac8ee1d3.jpg
create mode 100644 public/job/a2486cad-442a-4f4b-b09c-9c0aa7a54cab.jpg
create mode 100644 public/job/e5700057-a462-4085-84a4-c2a5acb36b4c.png
delete mode 100644 src/app/dev/job/create/loading.tsx
delete mode 100644 src/app/dev/job/detail/arsip/[id]/loading.tsx
delete mode 100644 src/app/dev/job/detail/draft/[id]/loading.tsx
delete mode 100644 src/app/dev/job/detail/main/[id]/loading.tsx
delete mode 100644 src/app/dev/job/detail/publish/[id]/loading.tsx
delete mode 100644 src/app/dev/job/detail/reject/[id]/loading.tsx
delete mode 100644 src/app/dev/job/detail/review/[id]/loading.tsx
delete mode 100644 src/app/dev/job/edit/[id]/loading.tsx
delete mode 100644 src/app/dev/job/main/loading.tsx
delete mode 100644 src/app/dev/job/non_user_view/[id]/loading.tsx
delete mode 100644 src/app/dev/job/splash/loading.tsx
create mode 100644 src/app_modules/component_global/box_information.tsx
create mode 100644 src/app_modules/component_global/splash/splash_global.tsx
create mode 100644 src/app_modules/component_global/ui/ui_drawer.tsx
create mode 100644 src/app_modules/component_global/ui/ui_modal.tsx
create mode 100644 src/app_modules/job/component/beranda/card_view.tsx
create mode 100644 src/app_modules/job/component/button/create_button.tsx
create mode 100644 src/app_modules/job/component/card/card_view.tsx
rename src/app_modules/job/fun/get/{get_list_all_arsip.ts => get_all_arsip.ts} (55%)
create mode 100644 src/app_modules/job/fun/get/get_all_publish.ts
delete mode 100644 src/app_modules/job/fun/get/get_list_status_by_status_id.ts
create mode 100644 src/app_modules/job/fun/get/status/get_list_draft.ts
rename src/app_modules/job/fun/get/{get_list_all_publish.ts => status/get_list_publish.ts} (55%)
create mode 100644 src/app_modules/job/fun/get/status/get_list_reject.ts
rename src/app_modules/job/fun/get/status/{new_get_list_reject.ts => get_list_review.ts} (53%)
delete mode 100644 src/app_modules/job/main/arsip.tsx
create mode 100644 src/app_modules/job/main/arsip/ui_arsip.tsx
create mode 100644 src/app_modules/job/main/arsip/view_arsip.tsx
delete mode 100644 src/app_modules/job/main/beranda.tsx
create mode 100644 src/app_modules/job/main/beranda/ui_beranda.tsx
create mode 100644 src/app_modules/job/main/beranda/view_beranda.tsx
rename src/app_modules/job/main/status/{view.tsx => ui_status.tsx} (59%)
create mode 100644 src/app_modules/job/main/status/view_status.tsx
rename src/app_modules/job/splash/{view.tsx => ui_splash.tsx} (65%)
create mode 100644 src/app_modules/job/splash/view_splash.tsx
diff --git a/public/job/80b01061-3161-414e-980e-2fc3ac8ee1d3.jpg b/public/job/80b01061-3161-414e-980e-2fc3ac8ee1d3.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..bad7a5395426aaff928ef6a9777e06739124b5c6
GIT binary patch
literal 9709
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
literal 0
HcmV?d00001
diff --git a/public/job/e5700057-a462-4085-84a4-c2a5acb36b4c.png b/public/job/e5700057-a462-4085-84a4-c2a5acb36b4c.png
new file mode 100644
index 0000000000000000000000000000000000000000..f1aa5b433596398193ea71fb54819dd573e73d18
GIT binary patch
literal 77324
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