From 5ead0adb8602530bde932cb06dd773a9a8049c60 Mon Sep 17 00:00:00 2001 From: caturbgs Date: Tue, 21 Dec 2021 15:33:18 +0700 Subject: [PATCH 01/18] feat: add masking password --- src/pages/Membership/MembershipModal.js | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/pages/Membership/MembershipModal.js b/src/pages/Membership/MembershipModal.js index 92faaef..4a21904 100644 --- a/src/pages/Membership/MembershipModal.js +++ b/src/pages/Membership/MembershipModal.js @@ -1,17 +1,16 @@ import React from "react"; -import { Form, Input, Modal, Select } from "antd"; -import { capitalize } from "lodash"; -import { useStore } from "../../utils/useStore"; +import {Form, Input, Modal, Select} from "antd"; +import {useStore} from "../../utils/useStore"; export const MembershipModal = ({ - visible, - onCreate, - onCancel, - initialData, -}) => { - const [form] = Form.useForm(); - const { Option } = Select; - const store = useStore(); + visible, + onCreate, + onCancel, + initialData, + }) => { + const [form] = Form.useForm(); + const {Option} = Select; + const store = useStore(); return ( - + )} {((initialData.id && !initialData.isChangePassword) || From 95abdb5c97cad12f396bf11f6cc31e946dfc8ba7 Mon Sep 17 00:00:00 2001 From: caturbgs Date: Tue, 21 Dec 2021 15:38:36 +0700 Subject: [PATCH 02/18] feat: revert saldo columns in membership --- src/pages/Membership/Membership.js | 57 +++++++++++++++--------------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/src/pages/Membership/Membership.js b/src/pages/Membership/Membership.js index 93d6d33..a972dbd 100644 --- a/src/pages/Membership/Membership.js +++ b/src/pages/Membership/Membership.js @@ -1,28 +1,8 @@ import React, {useContext, useEffect, useState} from "react"; -import { - Button, - Card, - Col, - Divider, - Input, - List, - message, - Modal, - Row, - Space, - Table, - Tag, - Form, - Select, -} from "antd"; +import {Button, Card, Col, Divider, Form, Input, List, message, Modal, Row, Select, Space, Table, Tag,} from "antd"; import {useStore} from "../../utils/useStore"; import {observer} from "mobx-react-lite"; -import { - ExclamationCircleOutlined, - FilterOutlined, - PlusSquareOutlined, - DownloadOutlined, -} from "@ant-design/icons"; +import {DownloadOutlined, ExclamationCircleOutlined, PlusSquareOutlined,} from "@ant-design/icons"; import {MembershipModal} from "./MembershipModal"; import {BreadcumbComponent} from "../../component/BreadcumbComponent"; import {LINKS} from "../../routes/app"; @@ -133,21 +113,40 @@ export const Membership = observer(() => { key: "role", }, { - title: "Saldo", + title: "Saldo di Supplier", dataIndex: ["coa", "amount"], key: ["coa", "amount"], + width: "20%", + render: (text) => ( + new Intl.NumberFormat("id-ID", { + style: "currency", + currency: "IDR", + }).format(text) + ) + }, + { + title: "Saldo di System", + dataIndex: ["coa_undistribute", "amount"], + key: ["coa_undistribute", "amount"], + width: "20%", + render: (text) => ( + new Intl.NumberFormat("id-ID", { + style: "currency", + currency: "IDR", + }).format(text) + ) }, { title: "Status", dataIndex: "isActive", key: "isActive", render: (text, record) => ( - - {record?.isActive === true ? " ACTIVE" : "INACTIVE"} - + + {record?.isActive === true ? " ACTIVE" : "INACTIVE"} + ), }, { From 70bb64803c30410958bde5982140b294a482ecea Mon Sep 17 00:00:00 2001 From: "ajat91.sudrajat" Date: Tue, 21 Dec 2021 15:41:38 +0700 Subject: [PATCH 03/18] No resfresh pages --- src/component/Subcategory.js | 1 - src/pages/App/MenuList.js | 16 +++++++++------- src/pages/Membership/Membership.js | 1 - 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/component/Subcategory.js b/src/component/Subcategory.js index 332552d..22c072d 100644 --- a/src/component/Subcategory.js +++ b/src/component/Subcategory.js @@ -91,7 +91,6 @@ export const SubcategoryComponent = observer((props) => { modalLoader.setLoading(true); try { await store.subcategory.create(data); - await getData(); message.success("Success Add New Category"); } catch (e) { console.log(e, "apa errornya"); diff --git a/src/pages/App/MenuList.js b/src/pages/App/MenuList.js index 56137bb..138e616 100644 --- a/src/pages/App/MenuList.js +++ b/src/pages/App/MenuList.js @@ -15,7 +15,7 @@ import { ShoppingCartOutlined, UserOutlined, AlipayOutlined, - PayCircleOutlined + PayCircleOutlined, } from "@ant-design/icons"; import { observer } from "mobx-react-lite"; import { useStore } from "../../utils/useStore"; @@ -133,12 +133,14 @@ export const MenuList = observer((props) => { Payback To - - - - Payback - - + {store.authentication.userData.role !== "Admin" && ( + + + + Payback + + + )} {store.authentication.userData.role !== "Admin" && ( diff --git a/src/pages/Membership/Membership.js b/src/pages/Membership/Membership.js index 93d6d33..4d22c75 100644 --- a/src/pages/Membership/Membership.js +++ b/src/pages/Membership/Membership.js @@ -254,7 +254,6 @@ export const Membership = observer(() => { try { await store.membership.create(data); message.success("Success Add New Member"); - await getData(); } catch (e) { console.log(e, "apa errornya"); message.error("Failed Add Member"); From 056248a65194724cb0ee0085506679449780fb4c Mon Sep 17 00:00:00 2001 From: caturbgs Date: Tue, 21 Dec 2021 16:04:01 +0700 Subject: [PATCH 04/18] feat: handler modal payback after create and fix payback paging --- src/pages/Payback/Payback.js | 56 ++++++++++++++-------------- src/pages/Payback/PaybackFromUser.js | 28 +------------- src/pages/Payback/PaybackModal.js | 45 +++++++++++----------- src/store/payback.js | 6 +-- 4 files changed, 56 insertions(+), 79 deletions(-) diff --git a/src/pages/Payback/Payback.js b/src/pages/Payback/Payback.js index a87baff..729ccb7 100644 --- a/src/pages/Payback/Payback.js +++ b/src/pages/Payback/Payback.js @@ -158,21 +158,21 @@ export const Payback = observer(() => { columns={columns} dataSource={store.payback.data} bordered - pagination={{ - pageSize: store.payback.page, - total: store.payback.total_data, - current: store.payback.pageSize + 1, - showSizeChanger: true, - simple: false - }} - onChange={async (page) => { - let pageNumber = page.current; - store.payback.pageSize = page.pageSize; - store.payback.page = pageNumber - 1; - modalLoader.setLoading(true); - await store.payback.getData(); - modalLoader.setLoading(false); - }} + // pagination={{ + // pageSize: store.payback.page, + // total: store.payback.total_data, + // current: store.payback.pageSize + 1, + // showSizeChanger: true, + // simple: false + // }} + // onChange={async (page) => { + // let pageNumber = page.current; + // store.payback.pageSize = page.pageSize; + // store.payback.page = pageNumber - 1; + // modalLoader.setLoading(true); + // await store.payback.getData(); + // modalLoader.setLoading(false); + // }} /> )} @@ -180,19 +180,19 @@ export const Payback = observer(() => { { - store.payback.pageSize = page.pageSize; - store.payback.page = page.current; - modalLoader.setLoading(true); - await store.payback.getData(); - modalLoader.setLoading(false); - }, - pageSize: store.payback.pageSize, - total: store.payback.total_data, - current: store.payback.page, - style: {marginBottom: "1rem", marginRight: "1rem"}, - }} + // pagination={{ + // onChange: async (page) => { + // store.payback.pageSize = page.pageSize; + // store.payback.page = page.current; + // modalLoader.setLoading(true); + // await store.payback.getData(); + // modalLoader.setLoading(false); + // }, + // pageSize: store.payback.pageSize, + // total: store.payback.total_data, + // current: store.payback.page, + // style: {marginBottom: "1rem", marginRight: "1rem"}, + // }} dataSource={store.payback.data} style={{padding: 0}} renderItem={(item) => { diff --git a/src/pages/Payback/PaybackFromUser.js b/src/pages/Payback/PaybackFromUser.js index cc258f2..e2a5e1a 100644 --- a/src/pages/Payback/PaybackFromUser.js +++ b/src/pages/Payback/PaybackFromUser.js @@ -12,7 +12,6 @@ const {Search} = Input; export const PaybackFromUser = observer(() => { const store = useStore(); - const [visibleModal, setVisibleModal] = useState(false); const [initialData, setInitialData] = useState({}); const modalLoader = useContext(ModalLoaderContext); @@ -71,23 +70,6 @@ export const PaybackFromUser = observer(() => { }, ]; - const onSubmit = async (data) => { - modalLoader.setLoading(true); - try { - // await store.membership.create(data); - // message.success("Success Add New Member"); - // await store.membership.getData(); - } catch (e) { - console.error(e, "apa errornya"); - message.error("Failed Add Member"); - } - modalLoader.setLoading(false); - setVisibleModal(false); - }; - - const handleAction = async (record, type) => { - }; - return (
@@ -113,7 +95,7 @@ export const PaybackFromUser = observer(() => {
); diff --git a/src/pages/Payback/PaybackModal.js b/src/pages/Payback/PaybackModal.js index 9079ad9..e792c3e 100644 --- a/src/pages/Payback/PaybackModal.js +++ b/src/pages/Payback/PaybackModal.js @@ -6,7 +6,7 @@ import {ModalLoaderContext} from "../../utils/modal"; import {http} from "../../utils/http"; import {appConfig} from "../../config/app"; -export const PaybackModal = ({visible, onCreate, onCancel, initialData}) => { +export const PaybackModal = ({initialData}) => { const [form] = Form.useForm(); const store = useStore(); const [image, setImage] = useState(""); @@ -58,40 +58,51 @@ export const PaybackModal = ({visible, onCreate, onCancel, initialData}) => { ); const handleSubmit = async (data) => { - console.log(data, "isi data2"); + modalLoader.setLoading(true); try { - modalLoader.setLoading(true); - await store.payback.create(data); - modalLoader.setLoading(false); + const request = { + ...data, + destination: store.authentication.profileData.superior?.id + } + await store.payback.create(request); message.success("Success Add Payback"); - await store.payback.getData(); } catch (e) { - modalLoader.setLoading(false); if (e.response?.body?.message) { message.error(e.response.body.message); return; } message.error(e.message); } + modalLoader.setLoading(false); form.resetFields(); + store.payback.visibleModalPayback = false; + setImage(""); + setFileList([]); + setPreviewImage(""); + setPreviewVisible(false); }; + const handleCancel = () => { + form.resetFields(); + store.payback.visibleModalPayback = false; + setImage(""); + setFileList([]); + setPreviewImage(""); + setPreviewVisible(false); + } + return ( { - form.resetFields(); - onCancel(); - }} + onCancel={handleCancel} onOk={() => { form .validateFields() .then((values) => { handleSubmit(values); - console.log(values); form.resetFields(); }) .catch((info) => { @@ -105,14 +116,6 @@ export const PaybackModal = ({visible, onCreate, onCancel, initialData}) => { name="form_in_modal" initialValues={initialData} > - - - Date: Tue, 21 Dec 2021 16:07:47 +0700 Subject: [PATCH 05/18] style: change color tab pane active --- src/index.css | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/index.css b/src/index.css index 8911c18..3c1a8ed 100644 --- a/src/index.css +++ b/src/index.css @@ -63,6 +63,11 @@ code { .ant-menu-submenu-arrow{ padding-right: 40px !important; } -.ant-breadcrumb{ +.ant-breadcrumb { margin-bottom: 10px !important; +} + +.ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn { + color: #ed1f24 !important; + border-color: #ed1f24 !important; } \ No newline at end of file From 88260e97b2221c610f7dd324b0df5a13db4660c4 Mon Sep 17 00:00:00 2001 From: caturbgs Date: Tue, 21 Dec 2021 16:16:27 +0700 Subject: [PATCH 06/18] fix: handler error buy producy --- src/pages/Transaction/Product.js | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/pages/Transaction/Product.js b/src/pages/Transaction/Product.js index 5e23868..ed47dd3 100644 --- a/src/pages/Transaction/Product.js +++ b/src/pages/Transaction/Product.js @@ -61,12 +61,16 @@ export const Product = observer(() => { modalLoader.setLoading(true); try { const response = await store.transaction.buyProduct({productCode: data}); - // if (response.status === 200) { - message.success("Success Buy Product"); - // } else { - //message.error("Failed Buy Product"); - //} + if (response.status === 200) { + message.success("Success Buy Product"); + } else { + message.error("Failed Buy Product", 3); + } } catch (e) { + if (e.response?.body?.message) { + message.error(e.response.body.message); + return; + } console.log(e, "apa errornya"); message.error("Failed Buy Product"); } @@ -148,11 +152,11 @@ export const Product = observer(() => { )} {productData.length !== 0 && ( - - - + + + )} ); From 90d862a47d5a42602af5ab0e71744e76afeb5150 Mon Sep 17 00:00:00 2001 From: caturbgs Date: Tue, 21 Dec 2021 16:17:09 +0700 Subject: [PATCH 07/18] fix: handler error buy producy --- src/pages/Transaction/Product.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/Transaction/Product.js b/src/pages/Transaction/Product.js index ed47dd3..eadaa80 100644 --- a/src/pages/Transaction/Product.js +++ b/src/pages/Transaction/Product.js @@ -61,7 +61,7 @@ export const Product = observer(() => { modalLoader.setLoading(true); try { const response = await store.transaction.buyProduct({productCode: data}); - if (response.status === 200) { + if (response.status === 201) { message.success("Success Buy Product"); } else { message.error("Failed Buy Product", 3); From 69efeca588fde50abfe9549347053740f83046a8 Mon Sep 17 00:00:00 2001 From: caturbgs Date: Tue, 21 Dec 2021 16:28:09 +0700 Subject: [PATCH 08/18] fix: product page --- src/pages/Transaction/Product.js | 82 +++++++++++----------------- src/pages/Transaction/Transaction.js | 12 ++-- 2 files changed, 37 insertions(+), 57 deletions(-) diff --git a/src/pages/Transaction/Product.js b/src/pages/Transaction/Product.js index eadaa80..1bc7a67 100644 --- a/src/pages/Transaction/Product.js +++ b/src/pages/Transaction/Product.js @@ -1,4 +1,4 @@ -import React, {useContext, useEffect, useState} from "react"; +import React, {useContext, useEffect} from "react"; import {useStore} from "../../utils/useStore"; import {Button, Card, Col, Input, message, Modal, Row, Select} from "antd"; import {observer} from "mobx-react-lite"; @@ -10,8 +10,6 @@ const {Option} = Select; export const Product = observer(() => { const store = useStore(); - - const [productData, setProductData] = useState([]); const modalLoader = useContext(ModalLoaderContext); useEffect(() => { @@ -36,20 +34,6 @@ export const Product = observer(() => { init(); }, []); - // data - useEffect(() => { - console.log("⚡ transaction data store", store.transaction.data); - setProductData(store.transaction.data); - }, [store.transaction.data]); - - // Subcategory - useEffect(() => { - console.log( - "⚡ transaction subcategory store", - store.transaction.dataSubCategories - ); - }, [store.transaction.dataSubCategories]); - const handleChangeSubcategory = async (item) => { store.transaction.filterSubCategory = item; modalLoader.setLoading(true); @@ -111,47 +95,47 @@ export const Product = observer(() => { - {productData.length != 0 && ( - - {productData.map((item, index) => ( - - { - Modal.confirm({ - title: `Are you sure buy ${item.name}?`, - icon: , - okText: "Confirm", - cancelText: "Cancel", - okType: "primary", - onOk() { - handleBuyProduct(item.code) - }, - onCancel() { - console.log("Cancel"); - }, - }); - }} - style={{cursor: "pointer"}} - > - {item.name} -
- + {store.transaction.data.length != 0 && ( + + {store.transaction.data.map((item, index) => ( + + { + Modal.confirm({ + title: `Are you sure buy ${item.name}?`, + icon: , + okText: "Confirm", + cancelText: "Cancel", + okType: "primary", + onOk() { + handleBuyProduct(item.code) + }, + onCancel() { + console.log("Cancel"); + }, + }); + }} + style={{cursor: "pointer"}} + > + {item.name} +
+ {new Intl.NumberFormat("id-ID", { style: "currency", currency: "IDR", }).format(item?.currentPrice?.mark_up_price)} -
- - ))} -
+
+ + ))} +
)} - {productData.length !== 0 && ( + {store.transaction.data.length !== 0 && ( + ), + }, ]; const deleteData = async (id) => { diff --git a/src/pages/App/DesktopLayout.js b/src/pages/App/DesktopLayout.js index 0651668..6e2c27a 100644 --- a/src/pages/App/DesktopLayout.js +++ b/src/pages/App/DesktopLayout.js @@ -215,12 +215,14 @@ export const DesktopLayout = observer(() => { Payback To
+ {store.authentication.userData.role !== "Admin" && ( Payback + )} {store.authentication.userData.role !== "Admin" && ( diff --git a/src/pages/Membership/DetailUser.js b/src/pages/Membership/DetailUser.js new file mode 100644 index 0000000..c1eac3e --- /dev/null +++ b/src/pages/Membership/DetailUser.js @@ -0,0 +1,148 @@ +import React, {useContext, useEffect} from "react"; +import {Button, Card, Col, Row, Table, Typography} from "antd"; +import {BreadcumbComponent} from "../../component/BreadcumbComponent"; +import {LINKS} from "../../routes/app"; +import {useStore} from "../../utils/useStore"; +import {observer} from "mobx-react-lite"; +import {FilterOutlined} from "@ant-design/icons"; +import {format, parseISO} from "date-fns"; +import {ModalLoaderContext} from "../../utils/modal"; + +const {Title, Text} = Typography; + +export const DetailUser = observer(() => { + const store = useStore(); + const modalLoader = useContext(ModalLoaderContext); + + const routeData = [ + { + route: LINKS.HOME, + name: "Home", + }, + { + route: LINKS.DETAILUSER, + name: Detail User, + }, + ]; + + useEffect(() => { + (async () => { + modalLoader.setLoading(true); + await Promise.allSettled([ + store.authentication.getProfile(), + store.transaction.getDataHistoryTransaction(), + ]); + modalLoader.setLoading(false); + })() + }, []); + + const columns = [ + { + title: 'Markup Price', + dataIndex: 'mark_up_price', + key: 'mark_up_price', + width: '20%', + }, + { + title: 'Name', + dataIndex: 'name', + key: 'name', + width: '50%', + }, + { + title: 'Transaction Date', + dataIndex: 'created_at', + key: 'created_at', + render: (text, record) => { + return ( + {format(parseISO(record.created_at), 'dd MMMM yyyy HH:mm')} + ) + }, + }, + ] + + 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; + + return ( +
+ + + Detail User + + + + + Name + + + {store.authentication.profileData?.userDetail?.name} + + + Role + + + {store.authentication.profileData?.userDetail?.phone_number} + + + Saldo Supplier + + + {store.authentication.profileData?.username} + + + Saldo System + + + {store.authentication.profileData.roles?.name} + + + Status + + + {store.authentication.profileData.superior?.username} + + + + \ + + + Saldo + + + {store.authentication.profileData?.wallet} + + + + + + +
+ History User Transaction + + + + + + +
+ +
+ ) +}); diff --git a/src/pages/Membership/Membership.js b/src/pages/Membership/Membership.js index f241859..8a4cd62 100644 --- a/src/pages/Membership/Membership.js +++ b/src/pages/Membership/Membership.js @@ -1,16 +1,37 @@ -import React, {useContext, useEffect, useState} from "react"; -import {Button, Card, Col, Divider, Form, Input, List, message, Modal, Row, Select, Space, Table, Tag,} from "antd"; -import {useStore} from "../../utils/useStore"; -import {observer} from "mobx-react-lite"; -import {DownloadOutlined, ExclamationCircleOutlined, PlusSquareOutlined,} from "@ant-design/icons"; -import {MembershipModal} from "./MembershipModal"; -import {BreadcumbComponent} from "../../component/BreadcumbComponent"; -import {LINKS} from "../../routes/app"; -import {ModalLoaderContext} from "../../utils/modal"; +import React, { useContext, useEffect, useState } from "react"; +import { + Button, + Card, + Col, + Divider, + Form, + Input, + List, + message, + Modal, + Row, + Select, + Space, + Table, + Tag, +} from "antd"; +import { useStore } from "../../utils/useStore"; +import { observer } from "mobx-react-lite"; +import { + DownloadOutlined, + ExclamationCircleOutlined, + PlusSquareOutlined, +} from "@ant-design/icons"; +import { MembershipModal } from "./MembershipModal"; +import { BreadcumbComponent } from "../../component/BreadcumbComponent"; +import { LINKS } from "../../routes/app"; +import { Link,useHistory } from "react-router-dom"; +import { ModalLoaderContext } from "../../utils/modal"; -const {Search} = Input; -const {Option} = Select; +const { Search } = Input; +const { Option } = Select; export const Membership = observer(() => { + const history = useHistory(); const [form] = Form.useForm(); const store = useStore(); const [visibleModal, setVisibleModal] = useState(false); @@ -117,36 +138,34 @@ export const Membership = observer(() => { dataIndex: ["coa", "amount"], key: ["coa", "amount"], width: "20%", - render: (text) => ( - new Intl.NumberFormat("id-ID", { - style: "currency", - currency: "IDR", - }).format(text) - ) + render: (text) => + new Intl.NumberFormat("id-ID", { + style: "currency", + currency: "IDR", + }).format(text), }, { title: "Saldo di System", dataIndex: ["coa_undistribute", "amount"], key: ["coa_undistribute", "amount"], width: "20%", - render: (text) => ( - new Intl.NumberFormat("id-ID", { - style: "currency", - currency: "IDR", - }).format(text) - ) + render: (text) => + new Intl.NumberFormat("id-ID", { + style: "currency", + currency: "IDR", + }).format(text), }, { title: "Status", dataIndex: "isActive", key: "isActive", render: (text, record) => ( - - {record?.isActive === true ? " ACTIVE" : "INACTIVE"} - + + {record?.isActive === true ? " ACTIVE" : "INACTIVE"} + ), }, { @@ -167,7 +186,7 @@ export const Membership = observer(() => { setIsVisibleTopUpModal(true); }} > - Top Up Saldo + Top Up Saldo - {/* */} + > + Detail + ), }, @@ -218,7 +238,7 @@ export const Membership = observer(() => { }, { route: "/app/membership", - name: Membership, + name: Membership, }, ]; @@ -264,42 +284,42 @@ export const Membership = observer(() => { } }; - const handleDelete = (record) => { - Modal.confirm({ - title: "Are you sure delete this record?", - icon: , - okText: "Yes", - okType: "primary", - cancelText: "Cancel", - async onOk() { - try { - //TODO: minta apinya ke ka ilham ya, jangan di uncomment kalo pake api reconcile, nanti beneran ke apus datanya - await store.membership.delete(record); - message.success("Success Delete Data"); - await getData(); - } catch (e) { - message.error("Failed Delete Data"); - } - }, - onCancel() { - console.log("Cancel"); - }, - }); + const handleDetail = (record) => { + // Modal.confirm({ + // title: "Are you sure delete this record?", + // icon: , + // okText: "Yes", + // okType: "primary", + // cancelText: "Cancel", + // async onOk() { + // try { + // //TODO: minta apinya ke ka ilham ya, jangan di uncomment kalo pake api reconcile, nanti beneran ke apus datanya + // await store.membership.delete(record); + // message.success("Success Delete Data"); + // await getData(); + // } catch (e) { + // message.error("Failed Delete Data"); + // } + // }, + // onCancel() { + // console.log("Cancel"); + // }, + // }); }; return (
- +
- +
{/* */} - + { setVisibleModal(true); }} > - New + New @@ -358,10 +378,10 @@ export const Membership = observer(() => { pageSize: store.membership.pageSize, total: store.membership.total_data, current: store.membership.page, - style: {marginBottom: "1rem", marginRight: "1rem"}, + style: { marginBottom: "1rem", marginRight: "1rem" }, }} dataSource={store.membership.data} - style={{padding: 0}} + style={{ padding: 0 }} renderItem={(item) => { return (
@@ -383,12 +403,12 @@ export const Membership = observer(() => { description={

- Username : {item.username}
+ Username : {item.username}

} /> -
+

{

- +
); }} @@ -433,7 +453,7 @@ export const Membership = observer(() => { + diff --git a/src/pages/Product/DetailProduct.js b/src/pages/Product/DetailProduct.js new file mode 100644 index 0000000..40640e4 --- /dev/null +++ b/src/pages/Product/DetailProduct.js @@ -0,0 +1,148 @@ +import React, {useContext, useEffect} from "react"; +import {Button, Card, Col, Row, Table, Typography} from "antd"; +import {BreadcumbComponent} from "../../component/BreadcumbComponent"; +import {LINKS} from "../../routes/app"; +import {useStore} from "../../utils/useStore"; +import {observer} from "mobx-react-lite"; +import {FilterOutlined} from "@ant-design/icons"; +import {format, parseISO} from "date-fns"; +import {ModalLoaderContext} from "../../utils/modal"; + +const {Title, Text} = Typography; + +export const DetailProduct = observer(() => { + const store = useStore(); + const modalLoader = useContext(ModalLoaderContext); + + const routeData = [ + { + route: LINKS.HOME, + name: "Home", + }, + { + route: LINKS.DETAILPRODUCT, + name: Detail Product, + }, + ]; + + useEffect(() => { + (async () => { + modalLoader.setLoading(true); + await Promise.allSettled([ + store.authentication.getProfile(), + store.transaction.getDataHistoryTransaction(), + ]); + modalLoader.setLoading(false); + })() + }, []); + + const columns = [ + { + title: 'Markup Price', + dataIndex: 'mark_up_price', + key: 'mark_up_price', + width: '20%', + }, + { + title: 'Name', + dataIndex: 'name', + key: 'name', + width: '50%', + }, + { + title: 'Transaction Date', + dataIndex: 'created_at', + key: 'created_at', + render: (text, record) => { + return ( + {format(parseISO(record.created_at), 'dd MMMM yyyy HH:mm')} + ) + }, + }, + ] + + 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; + + return ( +
+ + + Detail Product + +
+ + + Kode + + + {store.authentication.profileData?.userDetail?.name} + + + Produk + + + {store.authentication.profileData?.userDetail?.phone_number} + + + Harga Beli + + + {store.authentication.profileData?.username} + + + Harga Jual + + + {store.authentication.profileData.roles?.name} + + + Status + + + {store.authentication.profileData.superior?.username} + + + + + + + Saldo + + + {store.authentication.profileData?.wallet} + + + + + + +
+ History User Transaction + + +
+ + + +
+ +
+ ) +}); diff --git a/src/routes/app.js b/src/routes/app.js index 1667fd2..04bc5ab 100644 --- a/src/routes/app.js +++ b/src/routes/app.js @@ -2,7 +2,9 @@ import {Redirect, Route, Switch} from "react-router-dom"; import {Home} from "../pages/Home/Home"; import {About} from "../pages/About/About"; import {Membership} from "../pages/Membership/Membership"; +import {DetailUser} from "../pages/Membership/DetailUser"; import {Product} from "../pages/Product/Product"; +import {DetailProduct} from "../pages/Product/DetailProduct"; import {Transaction} from "../pages/Transaction/Transaction"; import {Profile} from "../pages/Profile/Profile"; import {Commission} from "../pages/Config/Commission"; @@ -27,7 +29,8 @@ export const LINKS = { PAYBACK: "/app/payback", PAYBACKFROMUSER: "/app/payback-from-user", SUBCATEGORY: "/app/subcategory", - + DETAILUSER: "/app/detail-user", + DETAILPRODUCT: "/app/detail-product", }; export const AppRoute = () => { @@ -35,6 +38,12 @@ export const AppRoute = () => { + + + + + + From 06c2ac159383e2c2215f65c704b2a16459e96281 Mon Sep 17 00:00:00 2001 From: "ajat91.sudrajat" Date: Tue, 21 Dec 2021 17:41:08 +0700 Subject: [PATCH 11/18] Detail Product --- src/pages/App/DesktopLayout.js | 2 ++ src/pages/App/MenuList.js | 14 ++++++++------ src/pages/Membership/Membership.js | 26 +++++++++++++++++++------- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/pages/App/DesktopLayout.js b/src/pages/App/DesktopLayout.js index 6e2c27a..ffe6524 100644 --- a/src/pages/App/DesktopLayout.js +++ b/src/pages/App/DesktopLayout.js @@ -209,12 +209,14 @@ export const DesktopLayout = observer(() => { icon={} title="Payback" > + {store.authentication.userData.role !== "Retail" && ( Payback To + )} {store.authentication.userData.role !== "Admin" && ( diff --git a/src/pages/App/MenuList.js b/src/pages/App/MenuList.js index 138e616..8f744c3 100644 --- a/src/pages/App/MenuList.js +++ b/src/pages/App/MenuList.js @@ -127,12 +127,14 @@ export const MenuList = observer((props) => { )} } title="Payback"> - - - - Payback To - - + {store.authentication.userData.role !== "Retail" && ( + + + + Payback To + + + )} {store.authentication.userData.role !== "Admin" && ( diff --git a/src/pages/Membership/Membership.js b/src/pages/Membership/Membership.js index 8a4cd62..821332f 100644 --- a/src/pages/Membership/Membership.js +++ b/src/pages/Membership/Membership.js @@ -25,7 +25,7 @@ import { import { MembershipModal } from "./MembershipModal"; import { BreadcumbComponent } from "../../component/BreadcumbComponent"; import { LINKS } from "../../routes/app"; -import { Link,useHistory } from "react-router-dom"; +import { Link, useHistory } from "react-router-dom"; import { ModalLoaderContext } from "../../utils/modal"; const { Search } = Input; @@ -223,9 +223,9 @@ export const Membership = observer(() => { history.push(LINKS.DETAILUSER.replace(":id", record.id)); //console.log(record.id) }} - > - Detail - + > + Detail + ), }, @@ -399,11 +399,14 @@ export const Membership = observer(() => { >

- Username : {item.username}
+ Role : {item.roleName}
+ Saldo Supplier : {item.amount}{" "} +
+ Saldo System : {item.amount}

} @@ -415,7 +418,16 @@ export const Membership = observer(() => { margin: 0, }} > - {item.username} +

From fc6b61e21c6d2ffa774327dc667e6e0d26d34441 Mon Sep 17 00:00:00 2001 From: "ajat91.sudrajat" Date: Tue, 21 Dec 2021 17:46:44 +0700 Subject: [PATCH 12/18] Pages Detail Product --- src/pages/Membership/DetailUser.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/Membership/DetailUser.js b/src/pages/Membership/DetailUser.js index c1eac3e..fe5bfdc 100644 --- a/src/pages/Membership/DetailUser.js +++ b/src/pages/Membership/DetailUser.js @@ -111,7 +111,7 @@ export const DetailUser = observer(() => { -
\ + Saldo From 9cefac57aeb6b590f07ecdace3e5eb033e3c21ad Mon Sep 17 00:00:00 2001 From: "ajat91.sudrajat" Date: Tue, 21 Dec 2021 19:24:08 +0700 Subject: [PATCH 13/18] Refresh Page --- src/component/CategoryComponent.js | 2 +- src/component/CommissionComponent.js | 2 +- src/component/PartnerComponent.js | 2 +- src/component/ProductComponent.js | 2 +- src/component/Subcategory.js | 11 +++++++---- src/component/SupplierComponent.js | 2 +- src/pages/Membership/Membership.js | 2 +- src/pages/Payback/PaybackFromUser.js | 2 +- src/store/subcategory.js | 4 ++-- 9 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/component/CategoryComponent.js b/src/component/CategoryComponent.js index 753342e..9005485 100644 --- a/src/component/CategoryComponent.js +++ b/src/component/CategoryComponent.js @@ -139,7 +139,7 @@ export const CategoryComponent = observer((props) => { store.category.pageSize = page.pageSize; store.category.page = pageNumber - 1; modalLoader.setLoading(true); - await store.category.getData(); + //await store.category.getData(); modalLoader.setLoading(false); }} /> diff --git a/src/component/CommissionComponent.js b/src/component/CommissionComponent.js index ae730ca..0cf36e8 100644 --- a/src/component/CommissionComponent.js +++ b/src/component/CommissionComponent.js @@ -82,7 +82,7 @@ export const CommissionComponent = observer((props) => { store.commission.pageSize = page.pageSize; store.commission.page = pageNumber - 1; modalLoader.setLoading(true); - await store.commission.getData(); + //await store.commission.getData(); modalLoader.setLoading(false); }} /> diff --git a/src/component/PartnerComponent.js b/src/component/PartnerComponent.js index 7a3afd0..5e49029 100644 --- a/src/component/PartnerComponent.js +++ b/src/component/PartnerComponent.js @@ -211,7 +211,7 @@ export const PartnerComponent = observer((props) => { store.partner.pageSize = page.pageSize; store.partner.page = pageNumber - 1; modalLoader.setLoading(true); - await store.partner.getData(); + //await store.partner.getData(); modalLoader.setLoading(false); }} /> diff --git a/src/component/ProductComponent.js b/src/component/ProductComponent.js index cff586e..53da930 100644 --- a/src/component/ProductComponent.js +++ b/src/component/ProductComponent.js @@ -250,7 +250,7 @@ export const ProductComponent = observer((props) => { store.product.pageSize = page.pageSize; store.product.page = pageNumber - 1; modalLoader.setLoading(true); - await store.product.getData(); + //await store.product.getData(); modalLoader.setLoading(false); }} /> diff --git a/src/component/Subcategory.js b/src/component/Subcategory.js index 22c072d..283aedc 100644 --- a/src/component/Subcategory.js +++ b/src/component/Subcategory.js @@ -1,4 +1,4 @@ -import React, { useContext, useState } from "react"; +import React, { useContext, useState,useEffect } from "react"; import { Button, Form, @@ -23,7 +23,10 @@ export const SubcategoryComponent = observer((props) => { const { Option } = Select; const [idData, setIdData] = useState(""); const modalLoader = useContext(ModalLoaderContext); - + useEffect(() => { + + getData() + }, []) const getData = async () => { await store.category.getData(); await store.subcategory.getData(); @@ -78,7 +81,7 @@ export const SubcategoryComponent = observer((props) => { modalLoader.setLoading(true); try { await store.subcategory.update(idData, data); - await getData(); + //await getData(); message.success("Success Update Data Category"); } catch (e) { message.error("Failed Update Data Category"); @@ -123,7 +126,7 @@ export const SubcategoryComponent = observer((props) => { store.subcategory.pageSize = page.pageSize; store.subcategory.page = pageNumber - 1; modalLoader.setLoading(true); - await getData(); + // await getData(); modalLoader.setLoading(false); }} /> diff --git a/src/component/SupplierComponent.js b/src/component/SupplierComponent.js index 29b1298..3bf915d 100644 --- a/src/component/SupplierComponent.js +++ b/src/component/SupplierComponent.js @@ -207,7 +207,7 @@ export const SupplierComponent = observer((props) => { store.supplier.pageSize = page.pageSize; store.supplier.page = pageNumber - 1; modalLoader.setLoading(true); - await store.supplier.getData(); + //await store.supplier.getData(); modalLoader.setLoading(false); }} /> diff --git a/src/pages/Membership/Membership.js b/src/pages/Membership/Membership.js index 821332f..9126636 100644 --- a/src/pages/Membership/Membership.js +++ b/src/pages/Membership/Membership.js @@ -357,7 +357,7 @@ export const Membership = observer(() => { store.membership.pageSize = page.pageSize; store.membership.page = pageNumber - 1; modalLoader.setLoading(true); - await getData(); + //await getData(); modalLoader.setLoading(false); }} /> diff --git a/src/pages/Payback/PaybackFromUser.js b/src/pages/Payback/PaybackFromUser.js index e2a5e1a..6db5368 100644 --- a/src/pages/Payback/PaybackFromUser.js +++ b/src/pages/Payback/PaybackFromUser.js @@ -122,7 +122,7 @@ export const PaybackFromUser = observer(() => { store.payback.pageSizePaybackUser = page.pageSize; store.payback.pageSizePaybackUser = pageNumber - 1; modalLoader.setLoading(true); - await store.payback.getDataUser(); + //await store.payback.getDataUser(); modalLoader.setLoading(false); }} /> diff --git a/src/store/subcategory.js b/src/store/subcategory.js index 0ffb7c0..e27fa3a 100644 --- a/src/store/subcategory.js +++ b/src/store/subcategory.js @@ -56,7 +56,7 @@ export class Subcategory { async create(data) { try { const response = await http.post('/product/sub-categories').send(data); - await this.getData(); + //await this.getData(); return response; } catch (e) { console.error(e); @@ -66,7 +66,7 @@ export class Subcategory { async update(id, data) { try { const response = await http.put(`/product/sub-categories/${id}`).send(data); - await this.getData(); + //await this.getData(); return response; } catch (e) { console.error(e); From a89566adc17bb651dfd3fa5aa3bd6fda5df25dca Mon Sep 17 00:00:00 2001 From: caturbgs Date: Wed, 22 Dec 2021 11:01:48 +0700 Subject: [PATCH 14/18] fix: change category not default select sub categories --- src/pages/Transaction/Product.js | 13 +++++-------- src/pages/Transaction/Transaction.js | 3 ++- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/pages/Transaction/Product.js b/src/pages/Transaction/Product.js index 1bc7a67..b2c59b2 100644 --- a/src/pages/Transaction/Product.js +++ b/src/pages/Transaction/Product.js @@ -69,14 +69,11 @@ export const Product = observer(() => {
{ - let pageNumber = page.current; - store.supplier.pageSize = page.pageSize; - store.supplier.page = pageNumber - 1; - modalLoader.setLoading(true); - //await store.supplier.getData(); - modalLoader.setLoading(false); - }} - /> + {store.ui.mediaQuery.isDesktop && ( +
{ + let pageNumber = page.current; + store.supplier.pageSize = page.pageSize; + store.supplier.page = pageNumber - 1; + modalLoader.setLoading(true); + //await store.supplier.getData(); + modalLoader.setLoading(false); + }} + /> + )} + {store.ui.mediaQuery.isMobile && ( + { + store.supplier.pageSize = page.pageSize; + store.supplier.page = page.current; + modalLoader.setLoading(true); + await store.supplier.getData(); + modalLoader.setLoading(false); + }, + pageSize: store.supplier.pageSize, + total: store.supplier.total_data, + current: store.supplier.page, + style: { marginBottom: "1rem", marginRight: "1rem" }, + }} + dataSource={store.supplier.data} + style={{ padding: 0 }} + renderItem={(item) => { + return ( +
+ + +

+ Name : {item.name}
+ Saldo Supplier : {item.coa.amount} +
+ + Saldo System : {item.coa_undistribute.amount} + +
+ + + + + {item?.status === true ? " ACTIVE" : "INACTIVE"} + +

+

+
+ } + /> + + + + ); + }} + /> + )} { - + {!idData && ( - + )} - + ); }); diff --git a/src/pages/Config/Supplier.js b/src/pages/Config/Supplier.js index 5c6d60a..fc088b5 100644 --- a/src/pages/Config/Supplier.js +++ b/src/pages/Config/Supplier.js @@ -75,7 +75,7 @@ export const Supplier = observer(() => { placeholder="input search text" style={{ width: store.ui.mediaQuery.isMobile ? 160 : 200, - marginRight: store.ui.mediaQuery.isMobile ? 0 : 10, + marginRight: store.ui.mediaQuery.isMobile ? 10 : 10, marginBottom: store.ui.mediaQuery.isMobile ? 10 : 0, }} onSearch={(value) => console.log(value)} From 81fffe45286a53fa5e34e05581c43c05caca9953 Mon Sep 17 00:00:00 2001 From: caturbgs Date: Wed, 22 Dec 2021 11:09:21 +0700 Subject: [PATCH 16/18] fix: get data sub category on modal product --- src/component/ProductComponent.js | 43 ++++++++++--------------------- src/pages/Product/Product.js | 4 +-- 2 files changed, 16 insertions(+), 31 deletions(-) diff --git a/src/component/ProductComponent.js b/src/component/ProductComponent.js index 53da930..40a6a34 100644 --- a/src/component/ProductComponent.js +++ b/src/component/ProductComponent.js @@ -1,33 +1,18 @@ -import React, { useContext, useState } from "react"; -import { - Button, - Col, - Form, - Input, - message, - Modal, - Row, - Select, - Table, - Divider, - Tag, - Typography, - List, -} from "antd"; -import { observer } from "mobx-react-lite"; -import { ExclamationCircleOutlined } from "@ant-design/icons"; -import { useHistory } from "react-router-dom"; -import { capitalize } from "lodash"; -import { useStore } from "../utils/useStore"; -import { LINKS } from "../routes/app"; -import { ModalLoaderContext } from "../utils/modal"; +import React, {useContext, useState} from "react"; +import {Button, Col, Divider, Form, Input, List, message, Modal, Row, Select, Table, Tag, Typography,} from "antd"; +import {observer} from "mobx-react-lite"; +import {ExclamationCircleOutlined} from "@ant-design/icons"; +import {useHistory} from "react-router-dom"; +import {useStore} from "../utils/useStore"; +import {LINKS} from "../routes/app"; +import {ModalLoaderContext} from "../utils/modal"; -const { Title, Text } = Typography; +const {Title, Text} = Typography; export const ProductComponent = observer((props) => { const store = useStore(); const [form] = Form.useForm(); - const { Option } = Select; + const {Option} = Select; const history = useHistory(); const [idData, setIdData] = useState(""); const [filterSupplier, setFilterSupplier] = useState(null); @@ -397,10 +382,10 @@ export const ProductComponent = observer((props) => { ]} > diff --git a/src/pages/Product/Product.js b/src/pages/Product/Product.js index 95750f5..21539e1 100644 --- a/src/pages/Product/Product.js +++ b/src/pages/Product/Product.js @@ -1,5 +1,5 @@ import React, {useContext, useEffect} from "react"; -import {Button, Card, Col, Input, Row, Upload,message} from "antd"; +import {Button, Card, Col, Input, message, Row, Upload} from "antd"; import {FilterOutlined, PlusSquareOutlined, UploadOutlined,} from "@ant-design/icons"; import {BreadcumbComponent} from "../../component/BreadcumbComponent"; import {useStore} from "../../utils/useStore"; @@ -20,8 +20,8 @@ export const Product = observer(() => { modalLoader.setLoading(true); await Promise.allSettled([ store.supplier.getData(), - store.product.getDataCategories(), store.category.getData(), + store.category.getDataSubCategories(), ]); await store.product.getData(); modalLoader.setLoading(false); From 7cf403f19d82fd3adfdefcee181b1a7477efc1e5 Mon Sep 17 00:00:00 2001 From: caturbgs Date: Wed, 22 Dec 2021 14:43:04 +0700 Subject: [PATCH 17/18] feat: handler modal dynamic --- src/component/ProductComponent.js | 96 +++++++++++++++++-------------- src/pages/Product/Product.js | 2 +- src/store/product.js | 4 +- 3 files changed, 55 insertions(+), 47 deletions(-) diff --git a/src/component/ProductComponent.js b/src/component/ProductComponent.js index 40a6a34..0f12656 100644 --- a/src/component/ProductComponent.js +++ b/src/component/ProductComponent.js @@ -15,9 +15,8 @@ export const ProductComponent = observer((props) => { const {Option} = Select; const history = useHistory(); const [idData, setIdData] = useState(""); - const [filterSupplier, setFilterSupplier] = useState(null); - const [filterCategories, setFilterCategories] = useState(null); - const [filterSubCategories, setFilterSubCategories] = useState(null); + const [filterSupplier, setFilterSupplier] = useState([]); + const [filterSubCategories, setFilterSubCategories] = useState([]); const modalLoader = useContext(ModalLoaderContext); const handleEditButton = (data) => { @@ -163,17 +162,17 @@ export const ProductComponent = observer((props) => { const handleRemoveFilter = async () => { store.product.filterSupplier = null; store.product.filterSubCategory = null; - setFilterSupplier(null); - setFilterCategories(null); - setFilterSubCategories(null); + setFilterSupplier([]); + store.product.filterCategory = null; + setFilterSubCategories([]); await store.product.getData(); store.product.visibleModalFilterProduct = false; }; const handleCancelFilter = () => { - setFilterSupplier(null); - setFilterCategories(null); - setFilterSubCategories(null); + setFilterSupplier([]); + store.product.filterCategory = null; + setFilterSubCategories([]); store.product.visibleModalFilterProduct = false; }; @@ -186,14 +185,24 @@ export const ProductComponent = observer((props) => { store.product.visibleModalFilterProduct = 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 = [ , @@ -403,17 +412,18 @@ export const ProductComponent = observer((props) => { Filter Supplier @@ -422,19 +432,16 @@ export const ProductComponent = observer((props) => { Filter Categories @@ -443,17 +450,18 @@ export const ProductComponent = observer((props) => { Filter Sub-Categories diff --git a/src/pages/Product/Product.js b/src/pages/Product/Product.js index 21539e1..95f4c34 100644 --- a/src/pages/Product/Product.js +++ b/src/pages/Product/Product.js @@ -21,7 +21,7 @@ export const Product = observer(() => { await Promise.allSettled([ store.supplier.getData(), store.category.getData(), - store.category.getDataSubCategories(), + store.product.getDataSubCategories(), ]); await store.product.getData(); modalLoader.setLoading(false); diff --git a/src/store/product.js b/src/store/product.js index e03b223..7c893de 100644 --- a/src/store/product.js +++ b/src/store/product.js @@ -21,7 +21,7 @@ export class Product { pageSizeSubCategories = 10 dataSubCategories = []; total_dataSubCategories = 0; - filterByCategory = null; + filterCategory = null; constructor(ctx) { this.ctx = ctx; @@ -44,7 +44,7 @@ export class Product { async getDataSubCategories() { try { - const response = await http.get(`/product/sub-categories?category=${this.filterByCategory}&page=${this.pageSubCategories}&pageSize=${this.pageSizeSubCategories}`); + const response = await http.get(`/product/sub-categories?category=${this.filterCategory}&page=${this.pageSubCategories}&pageSize=${this.pageSizeSubCategories}`); this.dataSubCategories = response.body.data.map((item, idx) => { item.key = idx; return item From 5039fa736a656da662732348f13a97d5702586a1 Mon Sep 17 00:00:00 2001 From: caturbgs Date: Wed, 22 Dec 2021 14:48:50 +0700 Subject: [PATCH 18/18] fix: column product --- src/component/ProductComponent.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/component/ProductComponent.js b/src/component/ProductComponent.js index 0f12656..96d0668 100644 --- a/src/component/ProductComponent.js +++ b/src/component/ProductComponent.js @@ -36,23 +36,23 @@ export const ProductComponent = observer((props) => { const columns = [ { title: "Kode", - dataIndex: "code", - key: "code", + dataIndex: "product_code", + key: "product_code", }, { title: "Produk", - dataIndex: ["name"], - key: "name", + dataIndex: "product_name", + key: "product_name", }, { title: "Harga Beli", - dataIndex: ["currentPrice", "price"], - key: ["currentPrice", "price"], + dataIndex: "current_price_price", + key: "current_price_price", }, { title: "Harga Jual", - dataIndex: ["currentPrice", "mark_up_price"], - key: ["currentPrice", "mark_up_price"], + dataIndex: "mark_up_price", + key: "mark_up_price", }, // { // title: "Gangguan", @@ -244,7 +244,7 @@ export const ProductComponent = observer((props) => { store.product.pageSize = page.pageSize; store.product.page = pageNumber - 1; modalLoader.setLoading(true); - //await store.product.getData(); + await store.product.getData(); modalLoader.setLoading(false); }} />