import BorderBottomItem from "@/components/borderBottomItem"; import ButtonBackHeader from "@/components/buttonBackHeader"; import HeaderRightDiscussionDetail from "@/components/discussion/headerDiscussionDetail"; import ImageUser from "@/components/imageNew"; import { InputForm } from "@/components/inputForm"; import LabelStatus from "@/components/labelStatus"; import Skeleton from "@/components/skeleton"; import SkeletonContent from "@/components/skeletonContent"; import Styles from "@/constants/Styles"; import { apiGetDiscussionOne, apiGetDivisionOneFeature, apiSendDiscussionCommentar, } from "@/lib/api"; import { useAuthSession } from "@/providers/AuthProvider"; import { Ionicons, MaterialIcons } from "@expo/vector-icons"; import { router, Stack, useLocalSearchParams } from "expo-router"; import { useEffect, useState } from "react"; import { Pressable, ScrollView, Text, View } from "react-native"; import { useSelector } from "react-redux"; type Props = { id: string; title: string; desc: string; status: number; createdAt: string; createdBy: string; username: string; user_img: string; isCreator: boolean; isActive: boolean; }; type PropsComment = { id: string; comment: string; createdAt: string; username: string; img: string; }; export default function DiscussionDetail() { const { id, detail } = useLocalSearchParams<{ id: string; detail: string }>(); const [data, setData] = useState(); const [dataComment, setDataComment] = useState([]); const { token, decryptToken } = useAuthSession(); const [komentar, setKomentar] = useState(""); const [loadingSend, setLoadingSend] = useState(false); const update = useSelector((state: any) => state.discussionUpdate); const entityUser = useSelector((state: any) => state.user); const [isMemberDivision, setIsMemberDivision] = useState(false); const [isAdminDivision, setIsAdminDivision] = useState(false); const [isCreator, setIsCreator] = useState(false); const [loading, setLoading] = useState(true) const [loadingKomentar, setLoadingKomentar] = useState(true) const arrSkeleton = Array.from({ length: 3 }) async function handleLoad(loading: boolean) { try { setLoading(loading) const hasil = await decryptToken(String(token?.current)); const response = await apiGetDiscussionOne({ id: detail, user: hasil, cat: "data", }); setData(response.data); setIsCreator(response.data.createdBy == hasil); } catch (error) { console.error(error); } finally { setLoading(false) } } async function handleLoadComment(loading: boolean) { try { setLoadingKomentar(loading) const hasil = await decryptToken(String(token?.current)); const response = await apiGetDiscussionOne({ id: detail, user: hasil, cat: "comment", }); setDataComment(response.data); } catch (error) { console.error(error); } finally { setLoadingKomentar(false) } } async function handleCheckMember() { try { const hasil = await decryptToken(String(token?.current)); const response = await apiGetDivisionOneFeature({ id, user: hasil, cat: "check-member", }); const response2 = await apiGetDivisionOneFeature({ id, user: hasil, cat: "check-admin", }); setIsMemberDivision(response.data); setIsAdminDivision(response2.data); } catch (error) { console.error(error); } } useEffect(() => { handleLoad(false); }, [update.data]); useEffect(() => { handleLoad(true) handleLoadComment(true); handleCheckMember(); }, []); async function handleKomentar() { try { setLoadingSend(true); const hasil = await decryptToken(String(token?.current)); const response = await apiSendDiscussionCommentar({ id: detail, data: { comment: komentar, user: hasil }, }); if (response.success) { setKomentar(""); handleLoadComment(false); } } catch (error) { console.error(error); } finally { setLoadingSend(false); } } return ( <> ( { router.back(); }} /> ), headerTitle: "Diskusi", headerTitleAlign: "center", headerRight: () => (entityUser.role != "user" && entityUser.role != "coadmin") || isAdminDivision || isCreator ? : (<>) , }} /> { loading ? : } title={data?.username} subtitle={ data?.isActive ? ( data?.status == 1 ? ( ) : ( ) ) : ( ) } rightTopInfo={data?.createdAt} desc={data?.desc} leftBottomInfo={ {dataComment.length} Komentar } /> } { loadingKomentar ? arrSkeleton.map((item, index) => ( )) : dataComment.map((item, index) => ( } title={item.username} rightTopInfo={item.createdAt} desc={item.comment} descEllipsize={false} /> )) } { komentar != "" && !loadingSend && data?.status != 2 && data?.isActive && (((entityUser.role == "user" || entityUser.role == "coadmin") && isMemberDivision) || entityUser.role == "admin" || entityUser.role == "superadmin" || entityUser.role == "developer" || entityUser.role == "cosupadmin") && handleKomentar(); }} > } /> ); }