import React, { useContext, useEffect, useState } from "react"; import { Button, Card, Col, message, Row, Space, Table, Typography, Tabs, List, Tag, Divider, Image, Modal, Form, DatePicker, } from "antd"; import { UserOutlined, FilterOutlined } from "@ant-design/icons"; import { BreadcumbComponent } from "../../component/BreadcumbComponent"; import { LINKS } from "../../routes/app"; import { useStore } from "../../utils/useStore"; import { observer } from "mobx-react-lite"; import { format, parseISO } from "date-fns"; import { ModalLoaderContext } from "../../utils/modal"; import { useParams } from "react-router-dom"; import { appConfig } from "../../config/app"; import { MembershipModal } from "./MembershipModal"; import moment from "moment"; const { Title, Text } = Typography; const { TabPane } = Tabs; export const DetailUser = observer(() => { const store = useStore(); const [form] = Form.useForm(); const modalLoader = useContext(ModalLoaderContext); const { id } = useParams(); const [visibleModal, setVisibleModal] = useState(false); const [initialData, setInitialData] = useState({}); const [confirmLoading, setConfirmLoading] = useState(false); const [filterStart, setFilterStart] = useState([]); const [filterEnd, setFilterEnd] = useState([]); const [visibleHis, setVisibleHis] = useState(true); const [actionFilter, setAction] = useState(false); useEffect(() => { (async () => { modalLoader.setLoading(true); await getData(); modalLoader.setLoading(false); })(); return () => { store.membership.dataDetail = {}; store.transaction.dataHistoryTopUp = []; store.authentication.dataProfit = []; store.transaction.dataDetailHistoryTransaction = []; }; }, []); const getData = async () => { const isAdmin = store.authentication.userData.role === "Admin"; await Promise.allSettled([ store.transaction.getDataHistoryTopUp(id), store.authentication.getProfit(id), store.authentication.getProfile(), store.transaction.getDetailHistoryTransaction(id), store.membership.getDetail(id), store.role.getData(isAdmin), ]); }; const changeStatus = async (id, is_active) => { let status = is_active ? "inactive" : "active"; let status2 = is_active ? "Inactivating" : "Activating"; console.log(status, "status terbaru"); try { modalLoader.setLoading(true); const response = await store.membership.changeStatus(id, status); modalLoader.setLoading(false); response?.body?.statusCode === 201 || response?.body?.statusCode === 200 ? message.success(`Success ${status2} Membership`) : message.error(`Failed ${status2} Membership`); await getData(); } catch (err) { modalLoader.setLoading(false); message.error(`Failed ${status2} Membership`); } }; const withdrawProfit = async (id) => { try { modalLoader.setLoading(true); const response = await store.membership.withdrawProfit(id); modalLoader.setLoading(false); response?.body?.statusCode === 201 || response?.body?.statusCode === 200 ? message.success(`Success Withdraw Profit`) : message.error(`Failed Withdraw Profit`); await getData(); } catch (err) { modalLoader.setLoading(false); message.error(`Failed Withdraw Profit`); } }; const onSubmit = async (data) => { data.superior = true; setConfirmLoading(true); modalLoader.setLoading(true); try { let response; if (initialData.isChangePassword) { response = await store.membership.changePassword(initialData.id, data); } else { response = await store.membership.update(initialData.id, data); } setVisibleModal(false); if (response?.body?.statusCode === 200) { message.success( initialData.isChangePassword ? "Success Change Member Password" : "Success Update Data Member" ); } else { message.error( initialData.isChangePassword ? "Failed Change Member Password" : "Failed Update Data Member" ); } await getData(); } catch (e) { modalLoader.setLoading(false); message.error( initialData.isChangePassword ? "Failed Update Member Password" : "Failed Update Data Member" ); } modalLoader.setLoading(false); setConfirmLoading(false); }; const handleResend = async (id) => { modalLoader.setLoading(true); try { const response = await store.approval.resendUser(id); console.log(response); response.body.statusCode !== 201 && response.body.statusCode !== 200 ? message.error(response?.body?.message || `Failed Approve`) : message.success(response?.body?.message || `Success Approve`); await getData(); } catch (e) { console.error(e, "apa errornya"); message.error(e.response?.body?.message || "Fail Approve"); } modalLoader.setLoading(false); }; const columns = [ { title: "Pengirim", dataIndex: "sender_name", key: "sender_name", }, { title: "Nominal", dataIndex: "amount", key: "amount", render: (text) => new Intl.NumberFormat("id-ID", { style: "currency", currency: "IDR", }).format(text), }, { title: "Tanggal Transaksi", dataIndex: "transaction_date", key: "transaction_date", render: (text, record) => { return ( {format(parseISO(record.transaction_date), "dd MMMM yyyy")} ); }, }, ]; const column = [ { title: "Nama Produk", dataIndex: "name", key: "name", }, { title: "Supplier", dataIndex: "supplier_name", key: "supplier_name", }, { title: "Profit Produk", dataIndex: "profit_produk", key: "", render: (text, record) => record.price - record.product_price }, { title: "Harga", dataIndex: "price", key: "price", render: (text) => new Intl.NumberFormat("id-ID", { style: "currency", currency: "IDR", }).format(text), }, { title: "Sisa Saldo", dataIndex: "balance_remaining", key: "balance_remaining", render: (text) => new Intl.NumberFormat("id-ID", { style: "currency", currency: "IDR", }).format(text), }, { title: "Pembeli", dataIndex: "buyer", key: "buyer", }, { title: "Tujuan", dataIndex: "transaction_destination", key: "transaction_destination", }, { title: "Kode Transaksi", dataIndex: "transaction_code", key: "transaction_code", }, { title: "Status", dataIndex: "status", key: "status", render: (text, record) => { return ( {record.status === 1 ? "Success" : record.status === 0 ? "Pending" : "Failed"} ); }, }, { title: "No Seri", dataIndex: "seri_number", key: "seri_number", }, { title: "IDTrx Mitra", dataIndex: "partner_transaction_code", key: "partner_transaction_code", }, { title: "Tanggal Transaksi", dataIndex: "created_at", key: "created_at", width: "15%", render: (text, record) => { return ( {format(parseISO(record.created_at), "dd-MM-yyyy HH:mm:ss")} ); }, }, { title: "Alasan Gagal", dataIndex: "failed_reason", key: "failed_reason", }, ]; if (store.authentication.userData.role !== "Admin") delete column[1]; if (store.authentication.userData.role !== "Admin") delete column[2]; if (store.authentication.userData.role !== "Admin") delete column[4]; const routeData = [ { route: LINKS.HOME, name: "Beranda", }, { route: LINKS.MEMBERSHIP, name: Keanggotaan, }, { route: LINKS.USER_DETAIL.replace(":id", id), name: Detail User, }, ]; const dataRoute = [ { route: LINKS.MEMBERSHIP, name: "Keanggotaan", }, { route: LINKS.USER_DETAIL.replace(":id", id), name: Detail User, }, ]; const styleSaldoTitle = store.ui.mediaQuery.isDesktop ? { display: "flex", justifyContent: "center", } : { fontSize: "0.75rem" }; const styleSaldoContent = store.ui.mediaQuery.isDesktop ? { fontSize: "1.25rem", display: "flex", justifyContent: "center", } : null; const data = store.authentication.listImage; console.log(data, "ini data"); console.log( store.authentication.dataProfit.userDetail?.image_identity, "detail" ); const handleRemoveFilter = async () => { store.transaction.filterStart = null; store.transaction.filterEnd = null; form.resetFields(); setFilterStart([]); setFilterEnd([]); actionFilter === true ? await store.transaction.getDataHistoryTopUp(id) : await store.transaction.getDetailHistoryTransaction( store.authentication.dataProfit.id ); // await store.transaction.getDetailHistoryTransaction( // store.authentication.dataProfit.id // ); store.transaction.visibleModalFilterTransaction = false; setAction(false); }; const handleCancelFilter = async () => { store.transaction.filterStart = null; store.transaction.filterEnd = null; store.transaction.visibleModalFilterTransaction = false; actionFilter === true ? await store.transaction.getDataHistoryTopUp(id) : await store.transaction.getDetailHistoryTransaction( store.authentication.dataProfit.id ); // await store.transaction.getDetailHistoryTransaction( // store.authentication.dataProfit.id // ); setAction(false); }; const handleSubmitFilter = async () => { const data = form.getFieldsValue(); store.transaction.filterStart = moment(data.start_date).format( "YYYY-MM-DD HH:mm:ss" ); store.transaction.filterEnd = moment(data.end_date).format( "YYYY-MM-DD HH:mm:ss" ); modalLoader.setLoading(true); actionFilter === true ? await store.transaction.getDataHistoryTopUp(id) : await store.transaction.getDetailHistoryTransaction( store.authentication.dataProfit.id ); modalLoader.setLoading(false); store.transaction.filterStart = null; store.transaction.filterEnd = null; store.transaction.visibleModalFilterTransaction = false; setAction(false); }; const footerLayoutFilter = [ , , , ]; return (
Detail User {store.authentication.userData.role === "Admin" && ( )} {((store.authentication.userData.role === "Sales" && store.membership.dataDetail.is_rejected === true && store.membership.dataDetail.is_active === false) || (store.authentication.userData.role === "Supervisor" && store.membership.dataDetail.is_rejected === true && store.membership.dataDetail.is_active === false)) && ( )} {store.authentication.userData.role === "Admin" && ( )} Name {store.authentication.dataProfit.userDetail?.name} Username {store.authentication.dataProfit.username} {/* Role {store.authentication.dataProfit.roles?.name} */} Phone Number {store.authentication.dataProfit.userDetail?.phone_number} Id Number {store.authentication.dataProfit.userDetail?.identity_number} Code {store.authentication.dataProfit.partner?.code} Status {store.authentication.dataProfit.is_active === true ? "Aktif" : "Inaktif"} {store.authentication.userData.role === "Admin" && store.authentication.dataProfit.roles?.name !== "Admin Partner" && ( Foto Identitas {store.authentication.dataProfit.roles?.name === "Retail" && ( Foto Toko {store.authentication.listImage ? store.authentication.listImage.map( (item, index) => ( ) ) : ""} )} )} {store.authentication.userData.role === "Sales" && ( Foto Identitas Foto Toko {store.authentication.listImage ? store.authentication.listImage.map( (item, index) => ( ) ) : ""} )} {store.authentication.userData.role === "Supervisor" && ( Foto Identitas )} Saldo {new Intl.NumberFormat("id-ID", { style: "currency", currency: "IDR", }).format( store.authentication.dataProfit.wallet || 0 )} Keuntungan {new Intl.NumberFormat("id-ID", { style: "currency", currency: "IDR", }).format( store.authentication.dataProfit?.profit || 0 )} {store.ui.mediaQuery.isDesktop && (
{ let pageNumber = page.current; store.transaction.pageSize = page.pageSize; store.transaction.page = pageNumber - 1; modalLoader.setLoading(true); await getData(); modalLoader.setLoading(false); }} /> )} {store.ui.mediaQuery.isMobile && (
{ store.transaction.pageSize = pageSize; store.transaction.page = page - 1; modalLoader.setLoading(true); await getData(); modalLoader.setLoading(false); }, pageSize: store.transaction.pageSize, total: store.transaction.total_data, current: store.transaction.page + 1, style: { marginBottom: "1rem", marginRight: "1rem" }, }} dataSource={store.transaction.dataHistoryTopUp} style={{ padding: 0 }} renderItem={(item) => { return (

Amount :{" "} {new Intl.NumberFormat("id-ID", { style: "currency", currency: "IDR", }).format(item.amount || 0)} {" "}
Transaction Date :{" "} {format( parseISO(item.transaction_date), "dd-MM-yyyy hh:mm:ss" )} {" "}

} />
); }} /> )} {store.ui.mediaQuery.isDesktop && (
{ let pageNumber = page.current; store.transaction.pageSize = page.pageSize; store.transaction.page = pageNumber - 1; modalLoader.setLoading(true); await getData(); modalLoader.setLoading(false); }} /> )} {store.ui.mediaQuery.isMobile && (
{ store.transaction.pageSize = pageSize; store.transaction.page = page - 1; modalLoader.setLoading(true); await getData(); modalLoader.setLoading(false); }, pageSize: store.transaction.pageSize, total: store.transaction.total_data, current: store.transaction.page + 1, style: { marginBottom: "1rem", marginRight: "1rem" }, }} dataSource={ store.transaction.dataDetailHistoryTransactionDetailUser } style={{ padding: 0 }} renderItem={(item) => { return (

Pembeli : {item.buyer}{" "}
Price : {item.price}
Tujuan : {item.transaction_destination} {" "}
Kode Transaksi : {item.transaction_code} {" "}
Status :{" "} { {item.status === 1 ? "Success" : item.status === 0 ? "Pending" : "Failed"} } {" "}
No.Seri : {item.seri_number} {" "}
IDTrx Mitra :{" "} {item.partner_transaction_code} {" "}
Transaction Date :{" "} {format( parseISO(item.created_at), "dd-MM-yyyy hh:mm:ss" )} {" "}

} />
); }} /> )}
{ onSubmit(data); }} onCancel={() => { setInitialData({}); setVisibleModal(false); }} /> { //form.resetFields(); store.transaction.filterStart = null; store.transaction.filterEnd = null; store.transaction.visibleModalFilterTransaction = false; actionFilter === true ? await store.transaction.getDataHistoryTopUp(id) : await store.transaction.getDetailHistoryTransaction( store.authentication.dataProfit.id ); //await store.transaction.getDetailHistoryTransaction(); }} >
); });