import React, { useContext, useEffect, useState } from "react"; import { Button, Card, Col, Divider, Form, InputNumber, List, message, Modal, Row, Space, Table, Tag, Select, Option, Typography, } from "antd"; import { useStore } from "../../utils/useStore"; import { observer } from "mobx-react-lite"; import { DownloadOutlined, PlusSquareOutlined, FilterOutlined, } from "@ant-design/icons"; import { MembershipModal } from "./MembershipModal"; import { BreadcumbComponent } from "../../component/BreadcumbComponent"; import { LINKS } from "../../routes/app"; import { useHistory } from "react-router-dom"; import { ModalLoaderContext } from "../../utils/modal"; export const Membership = observer(() => { const history = useHistory(); const { Option } = Select; const { Title } = Typography; const [form] = Form.useForm(); const store = useStore(); const [visibleModal, setVisibleModal] = useState(false); const [isVisibleTopUpModal, setIsVisibleTopUpModal] = useState(false); const [destination, setDestination] = useState(null); const [initialData, setInitialData] = useState({}); const [confirmLoading, setConfirmLoading] = useState(false); const modalLoader = useContext(ModalLoaderContext); const [filterMembership, setFilterMembership] = useState([]); const [filterPartner, setFilterPartner] = useState([]); useEffect(() => { const init = async () => { try { modalLoader.setLoading(true); const isAdmin = store.authentication.userData.role === "Admin"; await getData(); await store.membership.getData(); await store.membership.getDataBySuperior(); await store.partner.getData(); await store.role.getData(isAdmin); modalLoader.setLoading(false); } catch (e) { console.error(e); modalLoader.setLoading(false); if (e.response?.body?.message) { message.error(e.response.body.message); return; } message.error(e.message); } }; init(); }, []); const getData = async () => { store.authentication.userData.role === "Admin" ? await store.membership.getData() : await store.membership.getDataBySuperior(); }; const handleRemoveFilter = async () => { store.membership.filterMembership = null; store.membership.filterPartner = null; setFilterMembership([]); setFilterPartner([]); store.membership.visibleModalFilterMembership = false; await store.membership.getData(); }; const handleCancelFilter = async () => { store.membership.filterMembership = null; store.membership.filterPartner = null; store.membership.visibleModalFilterMembership = false; await store.membership.getData(); }; const handleSubmitFilter = async () => { store.membership.filterMembership = filterMembership; store.membership.filterPartner = filterPartner; modalLoader.setLoading(true); await store.membership.getData(); modalLoader.setLoading(false); setFilterMembership([]); setFilterPartner([]); store.membership.visibleModalFilterMembership = false; }; const footerLayoutFilter = [ , , , ]; const handleCancelTransaction = () => { setIsVisibleTopUpModal(false); setDestination(null); }; const handleSubmitTransaction = async (data) => { modalLoader.setLoading(true); try { data.destination = destination; if (data.amount) { data = { ...data, amount: Number(data.amount), }; } let response = null; (await store.authentication.userData.role) === "Admin" ? (response = await store.transaction.distributeAdmin(data)) : (response = await store.transaction.distribute(data)); response?.body?.statusCode === 201 ? message.success("Sukses Top Up") : message.error("Saldo Tidak Mencukupi"); modalLoader.setLoading(false); await getData(); } catch (e) { console.log(e, "apa errornya"); modalLoader.setLoading(false); message.error("Gagal Top Up"); } setConfirmLoading(false); setIsVisibleTopUpModal(false); form.resetFields(); setDestination(null); }; const columns = [ { title: "Nama", dataIndex: "name", key: "name", render: (text, record) => record?.name ?? record?.username, }, { title: "Username", dataIndex: "username", key: "username", render: (text, record) => record?.name ?? record?.username, }, { title: "Role", dataIndex: ["roles", "name"], key: "role", }, { title: "Saldo", dataIndex: ["coa", "amount"], key: ["coa", "amount"], width: "20%", render: (text) => new Intl.NumberFormat("id-ID", { style: "currency", currency: "IDR", }).format(text), }, { title: "Tindakan", key: "action", render: (text, record) => ( ), }, ]; const routeData = [ { route: LINKS.HOME, name: "Beranda", }, { route: LINKS.MEMBERSHIP, name: Keanggotaan, }, ]; const dataRoute = [ { route: LINKS.MEMBERSHIP, name: "Keanggotaan", }, ]; const onSubmit = async (data, image, imageStore) => { data.superior = true; console.log(imageStore, "Apa imageStore"); if (!imageStore) { imageStore = []; } if (initialData.id) { data.image_identity = image; data.image_store = imageStore; } if (initialData.id) { setConfirmLoading(true); modalLoader.setLoading(true); try { console.log(data, "edit data"); const request = { ...data, image_identity: image, image_store: imageStore, }; await store.membership.update(initialData.id, request); console.log(data, "edit data"); message.success( initialData.isChangePassword ? "Success Change Member Password" : "Success Update Data Member" ); await getData(); modalLoader.setLoading(false); } catch (e) { modalLoader.setLoading(true); message.error( initialData.isChangePassword ? "Failed Update Member Password" : "Failed Update Data Member" ); } setConfirmLoading(false); setVisibleModal(false); } else { setConfirmLoading(true); modalLoader.setLoading(true); try { console.log(data, "data member"); const request = { ...data, image_identity: image, image_store: JSON.stringify(imageStore), }; const response = await store.membership.create(request); response?.body?.statusCode === 201 || response?.body?.statusCode === 200 ? message.success( response?.body?.message || "Berhasil Tambah Member Baru" ) : message.error(response?.body?.error || "Gagal"); await getData(); } catch (e) { console.log(e, "apa errornya"); message.error(e.response?.body?.message || "Gagal Tambah Member Baru"); } modalLoader.setLoading(false); setConfirmLoading(false); setVisibleModal(false); setInitialData({}); form.resetFields(); } }; return (
{store.authentication.userData.role === "Admin" && ( )} {/* */} {store.authentication.userData.role !== "Customer Service" && ( )} {store.ui.mediaQuery.isDesktop && ( { let pageNumber = page.current; store.membership.pageSize = page.pageSize; store.membership.page = pageNumber - 1; modalLoader.setLoading(true); await store.membership.getData(); await getData(); modalLoader.setLoading(false); }} /> )} {store.ui.mediaQuery.isMobile && ( { store.membership.pageSize = pageSize; store.membership.page = page - 1; modalLoader.setLoading(true); await getData(); modalLoader.setLoading(false); }, pageSize: store.membership.pageSize, total: store.authentication.userData.role === "Admin" ? store.membership.dataTotal : store.membership.total_data, current: store.membership.page + 1, style: { marginBottom: "1rem", marginRight: "1rem" }, }} dataSource={ store.authentication.userData.role === "Admin" ? store.membership.dataMember : store.membership.data } style={{ padding: 0 }} renderItem={(item) => { return (

Username : {item.username}
Role : {item.roles?.name}
Saldo : {item.coa?.amount}

} />

{/* */}

); }} /> )} { form.resetFields(); handleCancelTransaction(); }} onOk={() => { form .validateFields() .then((values) => { console.log(values, "isi form"); handleSubmitTransaction(values); form.resetFields(); }) .catch((info) => { console.error("Validate Failed:", info); }); }} >
`Rp. ${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, ",") } parser={(value) => value.replace(/\Rp.\s?|(,*)/g, "")} />
{ onSubmit(data, image, imageStore); }} onCancel={async () => { setInitialData({}); setVisibleModal(false); await store.membership.getData(); }} /> { // setFilterMembership([]); // setFilterPartner([]); store.membership.filterMembership = null; store.membership.filterPartner = null; store.membership.visibleModalFilterMembership = false; await store.membership.getData(); }} >
Atasan/Superior Type ); });