diff --git a/src/component/PartnerComponent.js b/src/component/PartnerComponent.js index 7dd2f90..29c3a46 100644 --- a/src/component/PartnerComponent.js +++ b/src/component/PartnerComponent.js @@ -391,7 +391,7 @@ export const PartnerComponent = observer((props) => { )} {((idData && isChangePassword) || !idData) && ( { }, { pattern: /^(?:\d*)$/, - message: "Value should contain just number", + message: "Phone number should contain just number", }, { - pattern: /^[\d]{0,12}$/, - message: "Value should be less than 12 character", + pattern: /^[\d]{2,12}$/, + message: "Phone number should be less than 12 character", }, ]} > diff --git a/src/component/ProductComponent.js b/src/component/ProductComponent.js index 0ffcece..a5f6f93 100644 --- a/src/component/ProductComponent.js +++ b/src/component/ProductComponent.js @@ -129,11 +129,11 @@ export const ProductComponent = observer((props) => { }, ]; if (store.authentication.userData.role !== "Admin") columns.pop(); - if (store.authentication.userData.role !== "Admin") delete columns[2]; + if (store.authentication.userData.role === "Admin Partner") delete columns[2]; if (store.authentication.userData.role === "Admin Partner") delete columns[3]; + if (store.authentication.userData.role != "Admin Partner") delete columns[4]; if (store.authentication.userData.role !== "Admin") delete columns[6]; if (store.authentication.userData.role === "Admin Partner") delete columns[7]; - if (store.authentication.userData.role === "Admin") delete columns[4]; if (store.authentication.userData.role !== "Admin") delete columns[8]; if (store.authentication.userData.role === "Admin Partner") delete columns[5]; diff --git a/src/pages/Home/Home.js b/src/pages/Home/Home.js index b3b80d6..696969b 100644 --- a/src/pages/Home/Home.js +++ b/src/pages/Home/Home.js @@ -1,14 +1,96 @@ -import React from "react"; -import { Button, PageHeader, Card, Row, Col } from "antd"; -import { store } from "../../utils/useStore"; +import React, { useContext, useEffect } from "react"; +import { Button, PageHeader, Card, Row, Col, message, Table } from "antd"; +import { useStore } from "../../utils/useStore"; import { observer } from "mobx-react-lite"; import { DropboxOutlined, DollarCircleOutlined, BarChartOutlined, } from "@ant-design/icons"; +import { ModalLoaderContext } from "../../utils/modal"; export const Home = observer(() => { + const modalLoader = useContext(ModalLoaderContext); + const store = useStore(); + useEffect(() => { + const init = async () => { + try { + modalLoader.setLoading(true); + const isAdmin = store.authentication.userData.role === "Admin"; + await getData(); + await store.membership.getDataBySuperior(); + await store.partner.getData(); + await store.transaction.getDataTransaction(); + 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 columns = [ + { + title: "Name", + dataIndex: "name", + key: "name", + render: (text, record) => record?.name ?? record?.username, + }, + { + title: "Role", + dataIndex: "roleName", + 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: "Action", + // key: "action", + // render: (text, record) => ( + // + // + // + // + // ), + // }, + ]; return (
{store.ui.mediaQuery.isDesktop && ( @@ -32,7 +114,9 @@ export const Home = observer(() => { Total Transaksi}> - Total Transaksi : 25 Transaksi +

+

{store.transaction.dataTransaction} Transaksi

+

@@ -84,6 +168,78 @@ export const Home = observer(() => { )} + {store.authentication.userData.role === "Admin" && + store.ui.mediaQuery.isDesktop && ( + + + { + let pageNumber = page.current; + store.membership.pageSize = page.pageSize; + store.membership.page = pageNumber - 1; + modalLoader.setLoading(true); + await getData(); + modalLoader.setLoading(false); + }} + /> + + +
{ + let pageNumber = page.current; + store.membership.pageSize = page.pageSize; + store.membership.page = pageNumber - 1; + modalLoader.setLoading(true); + await getData(); + modalLoader.setLoading(false); + }} + /> + + + )} {store.ui.mediaQuery.isMobile && (
{ Total Transaksi}> - Total Transaksi : 25 Transaksi +

+

{store.transaction.dataTransaction} Transaksi

+

@@ -152,6 +310,75 @@ export const Home = observer(() => {
)} + {store.authentication.userData.role === "Admin" && + store.ui.mediaQuery.isMobile && ( + + +
{ + let pageNumber = page.current; + store.membership.pageSize = page.pageSize; + store.membership.page = pageNumber - 1; + modalLoader.setLoading(true); + await getData(); + modalLoader.setLoading(false); + }} + /> + + +
{ + let pageNumber = page.current; + store.membership.pageSize = page.pageSize; + store.membership.page = pageNumber - 1; + modalLoader.setLoading(true); + await getData(); + modalLoader.setLoading(false); + }} + /> + + + )} ); }); diff --git a/src/pages/Membership/Membership.js b/src/pages/Membership/Membership.js index ae1cd98..161bba5 100644 --- a/src/pages/Membership/Membership.js +++ b/src/pages/Membership/Membership.js @@ -529,7 +529,7 @@ export const Membership = observer(() => { value={filterMembership} > {store.membership.data.map((item) => ( - ))} diff --git a/src/pages/Membership/MembershipModal.js b/src/pages/Membership/MembershipModal.js index c58d4e8..77e3550 100644 --- a/src/pages/Membership/MembershipModal.js +++ b/src/pages/Membership/MembershipModal.js @@ -98,12 +98,12 @@ export const MembershipModal = ({ }, { pattern: /^(?:\d*)$/, - message: "Value should contain just number", + message: "Phone number should contain just number", }, { //pattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*])(?=.{8,})/, - pattern: /^[\d]{0,12}$/, - message: "Value should be less than 12 character", + pattern: /^[\d]{2,12}$/, + message: "Phone number should be less than 12 character", }, ]} > diff --git a/src/pages/Profile/Profile.js b/src/pages/Profile/Profile.js index 58017d7..724c17d 100644 --- a/src/pages/Profile/Profile.js +++ b/src/pages/Profile/Profile.js @@ -66,14 +66,6 @@ export const Profile = observer(() => { }; const handleSubmitFilter = async () => { - // store.product.filterSupplier = filterSupplier; - // store.product.filterSubCategory = filterSubCategories; - // modalLoader.setLoading(true); - // await store.product.getData(); - // modalLoader.setLoading(false); - // store.transaction.visibleModalFilterTransaction = false; - - console.log(form.getFieldsValue(), "Tes"); const data = form.getFieldsValue(); store.transaction.filterStart = data.start_date; store.transaction.filterEnd = data.end_date; @@ -83,16 +75,6 @@ export const Profile = observer(() => { store.transaction.visibleModalFilterTransaction = false; }; - // const handleFilterCategory = async (value) => { - // if (value) { - // store.product.filterCategory = value; - // await store.product.getDataSubCategories(); - // } else { - // store.product.filterCategory = null; - // await store.product.getDataSubCategories(); - // } - // }; - const footerLayoutFilter = [ + @@ -226,30 +230,33 @@ export const Profile = observer(() => { <Col></Col> </Row> </Col> - <Col> - <Row justify={"center"}> - <Col lg={12} xs={12}> - <Title strong level={3} style={styleSaldoTitle}> - Profit - + {store.authentication.userData.role === "Admin" || + (store.authentication.userData.role === "Supervisor" && ( + + + + + Profit + + + + + {new Intl.NumberFormat("id-ID", { + style: "currency", + currency: "IDR", + }).format(store.authentication.profileData?.profit || 0)} + + + + - - - {new Intl.NumberFormat("id-ID", { - style: "currency", - currency: "IDR", - }).format(store.authentication.profileData?.wallet || 0)} - - - - - + ))}
- History User Transaction + History Transaction
- + - + - + - {/* */} - {/* - - Filter Categories - - - - - - Filter Sub-Categories - - - */} diff --git a/src/pages/Transaction/Product.js b/src/pages/Transaction/Product.js index c4558ed..311d29b 100644 --- a/src/pages/Transaction/Product.js +++ b/src/pages/Transaction/Product.js @@ -1,11 +1,11 @@ -import React, {useContext, useEffect, useState} from "react"; -import {useStore} from "../../utils/useStore"; -import {Card, Col, Form, Input, message, Modal, Row, Select} from "antd"; -import {observer} from "mobx-react-lite"; -import {ModalLoaderContext} from "../../utils/modal"; +import React, { useContext, useEffect, useState } from "react"; +import { useStore } from "../../utils/useStore"; +import { Card, Col, Form, Input, message, Modal, Row, Select } from "antd"; +import { observer } from "mobx-react-lite"; +import { ModalLoaderContext } from "../../utils/modal"; -const {Search} = Input; -const {Option} = Select; +const { Search } = Input; +const { Option } = Select; export const Product = observer(() => { const store = useStore(); @@ -72,34 +72,34 @@ export const Product = observer(() => { }; return ( -
- - +
+ + Sub Category - - -
- - - - - + + + + + + + Produk & Nominal @@ -115,7 +115,7 @@ export const Product = observer(() => { { - setVisibleModalBuy(true) + setVisibleModalBuy(true); }} hoverable style={{ @@ -123,12 +123,12 @@ export const Product = observer(() => { marginLeft: 10, borderColor: "salmon", height: 100, - marginBottom: 10 + marginBottom: 10, }} > - {item.product_name} -
- + {item.product_name} +
+ {new Intl.NumberFormat("id-ID", { style: "currency", currency: "IDR", @@ -137,34 +137,47 @@ export const Product = observer(() => {
{ - form.resetFields(); - handleCancel(); - }} - onOk={() => { - form - .validateFields() - .then((values) => { - console.log(values, "isi form"); - handleBuyProduct(values, item.product_code); - form.resetFields(); - }) - .catch((info) => { - console.error("Validate Failed:", info); - }); - }} + visible={visibleModalBuy} + title={`Are you sure buy ${item.product_name}?`} + okText={"Confirm"} + cancelText="Cancel" + onCancel={() => { + form.resetFields(); + handleCancel(); + }} + onOk={() => { + form + .validateFields() + .then((values) => { + console.log(values, "isi form"); + handleBuyProduct(values, item.product_code); + form.resetFields(); + }) + .catch((info) => { + console.error("Validate Failed:", info); + }); + }} >
- +
diff --git a/src/store/authentication.js b/src/store/authentication.js index 2d2ee4d..6cde95a 100644 --- a/src/store/authentication.js +++ b/src/store/authentication.js @@ -2,6 +2,7 @@ import {makeAutoObservable, runInAction} from "mobx"; import {TokenUtil} from "../utils/token"; import {http} from "../utils/http"; + export class Authentication { isLoggedIn = false; isLoginLoading = false; @@ -53,6 +54,7 @@ export class Authentication { async getProfile() { try { const response = await http.get('/auth/profile'); + console.log(response) this.profileData = response.body; } catch (e) { console.error(e); diff --git a/src/store/membership.js b/src/store/membership.js index 197eb89..a9f78cb 100644 --- a/src/store/membership.js +++ b/src/store/membership.js @@ -21,7 +21,7 @@ export class Membership { async getData() { try { - const response = await http.get(`/users?page=${this.page}&pageSize=${this.pageSize}&superrior=${this.filterMembership}&type=${this.filterPartner}`); + const response = await http.get(`/users?page=${this.page}&pageSize=${this.pageSize}&superior=${this.filterMembership}&type=${this.filterPartner}`); // console.log(this.filterMembership) // console.log(this.filterPartner) // console.log(response) diff --git a/src/store/transaction.js b/src/store/transaction.js index 47cba84..32be61d 100644 --- a/src/store/transaction.js +++ b/src/store/transaction.js @@ -30,6 +30,7 @@ export class Transaction { pageSizeHistoryTopUp = 10; dataHistoryTopUp = []; total_dataHistoryTopUp = 0; + dataTransaction=[] //filter visibleModalFilterTransaction = false; @@ -52,6 +53,19 @@ export class Transaction { } } + async getDataTransaction() { + try { + const response = await http.get( + `/transaction/total-order` + ); + //console.log(response) + this.dataTransaction = response.body.data ?? []; + this.total_data = response?.body?.count ?? 0; + } catch (e) { + console.error(e); + } + } + async getDataSubCategories() { try { const response = await http.get(