From 0262423c503a419c86e3fab0335079179d48ea6c Mon Sep 17 00:00:00 2001 From: bagasbanuna Date: Mon, 19 Jan 2026 17:46:54 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20notification=20to=20report=20comment=20Fi?= =?UTF-8?q?x:=20User=20=E2=80=93=20Forum=20(Reporting=20&=20Preview)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit app/(application)/(user)/forum/[id]/other-report-commentar.tsx app/(application)/(user)/forum/[id]/other-report-posting.tsx app/(application)/(user)/forum/[id]/preview-report-posting.tsx app/(application)/(user)/forum/[id]/report-commentar.tsx app/(application)/(user)/forum/[id]/report-posting.tsx Admin – Forum Moderation app/(application)/admin/forum/[id]/list-report-comment.tsx app/(application)/admin/forum/report-posting.tsx Layout app/(application)/(user)/_layout.tsx API Client & Admin service/api-admin/api-admin-forum.ts service/api-client/api-forum.ts service/api-client/api-master.ts Utils utils/badWordsIndonesia.ts ### No Issue --- app/(application)/(user)/_layout.tsx | 13 ++- .../forum/[id]/other-report-commentar.tsx | 2 +- .../forum/[id]/other-report-posting.tsx | 2 +- .../forum/[id]/preview-report-comment.tsx | 91 +++++++++++++++++++ .../forum/[id]/preview-report-posting.tsx | 76 +++++++++++++--- .../(user)/forum/[id]/report-commentar.tsx | 3 +- .../(user)/forum/[id]/report-posting.tsx | 2 +- .../admin/forum/[id]/list-report-comment.tsx | 63 +++++++------ .../admin/forum/report-posting.tsx | 2 +- service/api-admin/api-admin-forum.ts | 14 ++- service/api-client/api-forum.ts | 50 ++++++++++ service/api-client/api-master.ts | 40 -------- utils/badWordsIndonesia.ts | 17 ++-- 13 files changed, 273 insertions(+), 102 deletions(-) create mode 100644 app/(application)/(user)/forum/[id]/preview-report-comment.tsx diff --git a/app/(application)/(user)/_layout.tsx b/app/(application)/(user)/_layout.tsx index f6779c5..c86ae22 100644 --- a/app/(application)/(user)/_layout.tsx +++ b/app/(application)/(user)/_layout.tsx @@ -616,15 +616,20 @@ export default function UserLayout() { headerLeft: () => , }} /> - , + }} + /> + , }} /> - - {/* ========== Maps Section ========= */} (null); + const [listData, setListData] = useState(null); + const [loading, setLoading] = useState(false); + // Status + + useFocusEffect( + useCallback(() => { + onLoadData(id as string); + }, [id]) + ); + + const onLoadData = async (id: string) => { + try { + setLoading(true); + const response = await apiForumGetReportComment({ id }); + setData(response.data); + setListData(response?.data?.Forum_ReportKomentar); + } catch (error) { + console.log("[ERROR]", error); + } finally { + setLoading(false); + } + }; + + return ( + <> + + + + Komentar anda telah melanggar aturan forum ! Admin mengambil + tindakan untuk menghapus komentar anda! + + {loading ? ( + + ) : ( + + "{data?.komentar ? data?.komentar : "-"}" + + )} + + + + Beberapa laporan yang telah diterima + + + {loading ? ( + + ) : _.isEmpty(listData) ? ( + + ) : ( + listData?.map((e: any, index: number) => ( + + {e?.deskripsi ? ( + + Laporan Lainnya + {e?.deskripsi} + + ) : ( + + + {e?.ForumMaster_KategoriReport?.title} + + + {e?.ForumMaster_KategoriReport?.deskripsi} + + + )} + + )) + )} + + + ); +} diff --git a/app/(application)/(user)/forum/[id]/preview-report-posting.tsx b/app/(application)/(user)/forum/[id]/preview-report-posting.tsx index 8e1e20a..c732637 100644 --- a/app/(application)/(user)/forum/[id]/preview-report-posting.tsx +++ b/app/(application)/(user)/forum/[id]/preview-report-posting.tsx @@ -1,16 +1,23 @@ -import { NewWrapper, TextCustom } from "@/components"; -import { useAuth } from "@/hooks/use-auth"; import { - apiForumGetOne, - apiForumGetReportPosting, -} from "@/service/api-client/api-forum"; + BaseBox, + NewWrapper, + Spacing, + StackCustom, + TextCustom, +} from "@/components"; +import ListSkeletonComponent from "@/components/_ShareComponent/ListSkeletonComponent"; +import NoDataText from "@/components/_ShareComponent/NoDataText"; +import CustomSkeleton from "@/components/_ShareComponent/SkeletonCustom"; +import { apiForumGetReportPosting } from "@/service/api-client/api-forum"; import { useFocusEffect, useLocalSearchParams } from "expo-router"; +import _ from "lodash"; import { useCallback, useState } from "react"; export default function ForumPreviewReportPosting() { const { id } = useLocalSearchParams(); - const { user } = useAuth(); const [data, setData] = useState(null); + const [listData, setListData] = useState(null); + const [loading, setLoading] = useState(false); // Status useFocusEffect( @@ -21,23 +28,64 @@ export default function ForumPreviewReportPosting() { const onLoadData = async (id: string) => { try { + setLoading(true); const response = await apiForumGetReportPosting({ id }); setData(response.data); + setListData(response?.data?.Forum_ReportPosting); } catch (error) { console.log("[ERROR]", error); + } finally { + setLoading(false); } }; return ( - <> + <> + + + + Postingan anda telah melanggar aturan forum ! Admin mengambil + tindakan untuk menghapus komentar anda! + + {loading ? ( + + ) : ( + + "{data?.diskusi ? data?.diskusi : "-"}" + + )} + - - Halaman preview repost posting - {JSON.stringify(data, null, 2)} + + Beberapa laporan yang telah diterima + - untuk report jomentar beda halaman - - - + {loading ? ( + + ) : _.isEmpty(listData) ? ( + + ) : ( + listData?.map((e: any) => ( + + {e?.deskripsi ? ( + + Laporan Lainnya + {e?.deskripsi} + + ) : ( + + + {e?.ForumMaster_KategoriReport?.title} + + + {e?.ForumMaster_KategoriReport?.deskripsi} + + + )} + + )) + )} + + ); } diff --git a/app/(application)/(user)/forum/[id]/report-commentar.tsx b/app/(application)/(user)/forum/[id]/report-commentar.tsx index b3fe93e..2b23183 100644 --- a/app/(application)/(user)/forum/[id]/report-commentar.tsx +++ b/app/(application)/(user)/forum/[id]/report-commentar.tsx @@ -8,7 +8,8 @@ import { import { AccentColor, MainColor } from "@/constants/color-palet"; import { useAuth } from "@/hooks/use-auth"; import Forum_ReportListSection from "@/screens/Forum/ReportListSection"; -import { apiForumCreateReportCommentar, apiMasterForumReportList } from "@/service/api-client/api-master"; +import { apiForumCreateReportCommentar } from "@/service/api-client/api-forum"; +import { apiMasterForumReportList } from "@/service/api-client/api-master"; import { router, useLocalSearchParams } from "expo-router"; import { useState, useEffect } from "react"; import Toast from "react-native-toast-message"; diff --git a/app/(application)/(user)/forum/[id]/report-posting.tsx b/app/(application)/(user)/forum/[id]/report-posting.tsx index 5947fb6..209f271 100644 --- a/app/(application)/(user)/forum/[id]/report-posting.tsx +++ b/app/(application)/(user)/forum/[id]/report-posting.tsx @@ -9,8 +9,8 @@ import { import { AccentColor, MainColor } from "@/constants/color-palet"; import { useAuth } from "@/hooks/use-auth"; import Forum_ReportListSection from "@/screens/Forum/ReportListSection"; +import { apiForumCreateReportPosting } from "@/service/api-client/api-forum"; import { - apiForumCreateReportPosting, apiMasterForumReportList, } from "@/service/api-client/api-master"; import { router, useLocalSearchParams } from "expo-router"; diff --git a/app/(application)/admin/forum/[id]/list-report-comment.tsx b/app/(application)/admin/forum/[id]/list-report-comment.tsx index 935c707..a5915fe 100644 --- a/app/(application)/admin/forum/[id]/list-report-comment.tsx +++ b/app/(application)/admin/forum/[id]/list-report-comment.tsx @@ -15,12 +15,11 @@ import { IconDot, IconView } from "@/components/_Icon/IconComponent"; import { IconTrash } from "@/components/_Icon/IconTrash"; import AdminBackButtonAntTitle from "@/components/_ShareComponent/Admin/BackButtonAntTitle"; import AdminComp_BoxTitle from "@/components/_ShareComponent/Admin/BoxTitlePage"; -import AdminTitleTable from "@/components/_ShareComponent/Admin/TableTitle"; -import AdminTableValue from "@/components/_ShareComponent/Admin/TableValue"; import { GridSpan_4_8 } from "@/components/_ShareComponent/GridSpan_4_8"; import { GridSpan_NewComponent } from "@/components/_ShareComponent/GridSpan_NewComponent"; import { MainColor } from "@/constants/color-palet"; import { ICON_SIZE_BUTTON } from "@/constants/constans-value"; +import { useAuth } from "@/hooks/use-auth"; import { apiAdminForumCommentById, apiAdminForumDeactivateComment, @@ -35,6 +34,7 @@ import Toast from "react-native-toast-message"; export default function AdminForumReportComment() { const { id } = useLocalSearchParams(); + const { user } = useAuth(); const [data, setData] = useState(null); const [listReport, setListReport] = useState(null); const [loadList, setLoadList] = useState(false); @@ -111,9 +111,13 @@ export default function AdminForumReportComment() { - + Aksi} + text1={ + + Aksi + + } text2={Pelapor} text3={Kategori Report} /> @@ -129,22 +133,24 @@ export default function AdminForumReportComment() { - } - onPress={() => { - setOpenDrawerAction(true); - setSelectedReport({ - id: item.id, - username: item.User?.username, - kategori: item.ForumMaster_KategoriReport?.title, - keterangan: - item.ForumMaster_KategoriReport?.deskripsi, - deskripsi: item.deskripsi, - }); - }} - /> - + + + } + onPress={() => { + setOpenDrawerAction(true); + setSelectedReport({ + id: item.id, + username: item.User?.username, + kategori: item.ForumMaster_KategoriReport?.title, + keterangan: + item.ForumMaster_KategoriReport?.deskripsi, + deskripsi: item.deskripsi, + }); + }} + /> + } text2={ @@ -188,15 +194,18 @@ export default function AdminForumReportComment() { onPressRight: async () => { const deleteComment = await apiAdminForumDeactivateComment({ id: id as string, + data: { + senderId: user?.id as string, + }, }); - if (!deleteComment.success) { - Toast.show({ - type: "error", - text1: "Komentar gagal dihapus", - }); - return; - } + // if (!deleteComment.success) { + // Toast.show({ + // type: "error", + // text1: "Komentar gagal dihapus", + // }); + // return; + // } setOpenDrawer(false); Toast.show({ diff --git a/app/(application)/admin/forum/report-posting.tsx b/app/(application)/admin/forum/report-posting.tsx index 6d5ff57..a819676 100644 --- a/app/(application)/admin/forum/report-posting.tsx +++ b/app/(application)/admin/forum/report-posting.tsx @@ -73,7 +73,7 @@ export default function AdminForumReportPosting() { - Username + Pelapor } text2={ diff --git a/service/api-admin/api-admin-forum.ts b/service/api-admin/api-admin-forum.ts index 9306525..c48a134 100644 --- a/service/api-admin/api-admin-forum.ts +++ b/service/api-admin/api-admin-forum.ts @@ -57,9 +57,19 @@ export async function apiAdminForumListReportCommentById({ } } -export async function apiAdminForumDeactivateComment({ id }: { id: string }) { +export async function apiAdminForumDeactivateComment({ + id, + data, +}: { + id: string; + data: { senderId: string }; +}) { + + console.log("data", data) try { - const response = await apiConfig.put(`/mobile/admin/forum/${id}/comment`); + const response = await apiConfig.put(`/mobile/admin/forum/${id}/comment`, { + data: data, + }); return response.data; } catch (error) { throw error; diff --git a/service/api-client/api-forum.ts b/service/api-client/api-forum.ts index 17c6dc9..28c60f3 100644 --- a/service/api-client/api-forum.ts +++ b/service/api-client/api-forum.ts @@ -127,4 +127,54 @@ export async function apiForumGetReportPosting({id}: {id:string}) { } catch (error) { throw error; } +} + +export async function apiForumGetReportComment({id}: {id:string}) { + try { + const response = await apiConfig.get(`/mobile/forum/${id}/preview-report-comment`); + return response.data; + } catch (error) { + throw error; + } +} + + +export async function apiForumCreateReportPosting({ + id, + data, +}: { + id: string; + data: any; +}) { + try { + const response = await apiConfig.post( + `/mobile/forum/${id}/report-posting`, + { + data: data, + } + ); + return response.data; + } catch (error) { + throw error; + } +} + +export async function apiForumCreateReportCommentar({ + id, + data, +}: { + id: string; + data: any; +}) { + try { + const response = await apiConfig.post( + `/mobile/forum/${id}/report-commentar`, + { + data: data, + } + ); + return response.data; + } catch (error) { + throw error; + } } \ No newline at end of file diff --git a/service/api-client/api-master.ts b/service/api-client/api-master.ts index c3b8689..530a460 100644 --- a/service/api-client/api-master.ts +++ b/service/api-client/api-master.ts @@ -77,46 +77,6 @@ export async function apiMasterForumReportList() { // ================== END MASTER FORUM ================== // -export async function apiForumCreateReportPosting({ - id, - data, -}: { - id: string; - data: any; -}) { - try { - const response = await apiConfig.post( - `/mobile/forum/${id}/report-posting`, - { - data: data, - } - ); - return response.data; - } catch (error) { - throw error; - } -} - -export async function apiForumCreateReportCommentar({ - id, - data, -}: { - id: string; - data: any; -}) { - try { - const response = await apiConfig.post( - `/mobile/forum/${id}/report-commentar`, - { - data: data, - } - ); - return response.data; - } catch (error) { - throw error; - } -} - // ================== START MASTER INVESTMENT ================== // export async function apiMasterInvestment({ diff --git a/utils/badWordsIndonesia.ts b/utils/badWordsIndonesia.ts index 82b60c1..d1d48cc 100644 --- a/utils/badWordsIndonesia.ts +++ b/utils/badWordsIndonesia.ts @@ -5,11 +5,11 @@ const badWordsIndonesia = [ 'anjing', 'babi', 'bangsat', 'bodoh', 'goblok', 'idiot', 'jancok', 'jembut', 'kampret', 'kontol', 'memek', 'ngentot', 'peler', 'puki', 'sialan', 'tai', 'tolol', 'wibu', 'anjingg', 'babbii', 'bangsaat', 'gobllokk', 'jancokk', 'kontoll', 'memekk', 'ngentott', - 'pelerr', 'puuki', 'sialann', 'taii', 'tololl', 'wibuu', + 'pelerr', 'puuki', 'sialann', 'taii', 'tololl', 'wibuu', 'cicing', // 🔥 Kata Sindiran & Penghinaan 'bego', 'dungu', 'edan', 'gila', 'goblog', 'kampang', 'kampret', 'keparat', 'lonte', - 'main mata', 'monyet', 'najis', 'ngeyel', 'ngibul', 'ngomong seenaknya', 'ngurangin', + 'monyet', 'najis', 'ngeyel', 'ngibul', 'ngomong seenaknya', 'ngurangin', 'ngutang', 'ngurusin urusan orang', 'pemalas', 'pengecut', 'penipu', 'sinting', 'begoo', 'dunguu', 'goblogg', 'kampangg', 'keparatt', 'lontee', 'monyyet', 'najiss', 'ngeyell', 'ngibull', 'ngomongg seenaknya', 'nguranginn', 'ngutangg', 'pemalass', @@ -23,18 +23,17 @@ const badWordsIndonesia = [ // 💸 Kata Spam / Promosi Ilegal 'judi', 'togel', 'slot', 'casino', 'poker', 'qq', 'bandar', 'agen', 'link', 'wa', - 'whatsapp', 'telepon', 'nomor', 'hp', 'sms', 'grup', 'join', 'daftar', 'bonus', - 'deposit', 'withdraw', 'uang', 'duit', 'rp', 'ratusan', 'juta', 'milyar', + 'deposit', 'withdraw', 'judii', 'togell', 'slotss', 'casinoo', 'pokerr', 'qqq', 'bandarr', 'agenn', 'linkk', - 'waa', 'whatsappp', 'teleponn', 'nomorr', 'hpp', 'smss', 'grupp', 'jooin', 'daftarr', - 'bonuss', 'depositt', 'withdraww', 'uangs', 'duitt', 'rpp', 'ratusann', 'jutaa', 'milyarr', + 'waa', + 'depositt', 'withdraww', 'rpp', // 🧩 Variasi Penulisan (Bypass Filter) 'a*njing', 'b*b*i', 'b*ngsat', 'g*blok', 'k*nt*l', 'm*m*k', 'n*g*nt*t', 'p*l*r', - 't*i', 't*l*l', 'j*n*c*k', 'j*m*b*t', 'k*m*p*r*t', 's*i*l*a*n', 'w*b*u', + 't*i', 't*l*l', 'j*n*c*k', 'j*m*b*t', 'k*m*p*r*t', 's*i*l*a*n', 'w*b*u', 'a.n.j.i.n.g', 'b.a.b.i', 'b.a.n.g.s.a.t', 'g.o.b.l.o.k', 'k.o.n.t.o.l', 'm.e.m.e.k', 'n.g.e.n.t.o.t', 'p.e.l.e.r', 't.a.i', 't.o.l.o.l', 'j.a.n.c.o.k', 'j.e.m.b.u.t', - 'k.a.m.p.r.e.t', 's.i.a.l.a.n', 'w.i.b.u', + 'k.a.m.p.r.e.t', 's.i.a.l.a.n', 'w.i.b.u', 'c.i.c.i.n.g', // 📱 Variasi dengan Angka & Simbol '4nj1ng', 'b4b1', 'b4ngs4t', 'g0bl0k', 'k0nt0l', 'm3m3k', 'ng3nt0t', 'p3l3r', @@ -43,8 +42,6 @@ const badWordsIndonesia = [ 'p3l3rr', 't4ii', 't0l0ll', 'j4nc0kk', 'j3mbutt', 'k4mpr3tt', 's14l4nn', 'w1buu', // 🗣️ Kata yang Sering Digunakan dalam Konteks Negatif - 'dasar', 'kamu', 'kau', 'lu', 'lo', 'gue', 'gua', 'kita', 'kami', 'mereka', - 'dasarr', 'kamuu', 'kauu', 'luu', 'loo', 'guee', 'guua', 'kitaa', 'kamii', 'merekaa', 'dasar bodoh', 'dasar goblok', 'dasar bangsat', 'dasar idiot', 'dasar sialan', 'dasar bego', 'dasar dungu', 'dasar edan', 'dasar gila', 'dasar sinting', 'dasar pemalas', 'dasar pengecut', 'dasar penipu', 'dasar najis', 'dasar kampret',