From ce2d2e1072b848d9764091ff8b29c3f151824c5b Mon Sep 17 00:00:00 2001 From: "ajat91.sudrajat" Date: Thu, 23 Dec 2021 11:53:07 +0700 Subject: [PATCH 01/22] Config Menu --- src/component/ProductComponent.js | 27 +- src/pages/App/MenuList.js | 28 +- src/pages/Config/Partner.js | 4 +- src/pages/Config/Supplier.js | 4 +- src/pages/Membership/DetailUser.js | 184 +++++----- src/pages/Membership/Membership.js | 181 +++++----- src/pages/Payback/Payback.js | 518 +++++++++++++++------------- src/pages/Payback/PaybackCreated.js | 4 +- src/pages/Product/Category.js | 4 +- src/pages/Product/Product.js | 99 +++--- src/pages/Product/Subcategory.js | 4 +- src/pages/Profile/Profile.js | 2 +- src/pages/Transaction/Product.js | 6 +- src/routes/app.js | 2 +- src/store/membership.js | 10 + src/store/transaction.js | 2 +- 16 files changed, 572 insertions(+), 507 deletions(-) diff --git a/src/component/ProductComponent.js b/src/component/ProductComponent.js index 990b7d8..5490a1d 100644 --- a/src/component/ProductComponent.js +++ b/src/component/ProductComponent.js @@ -1,4 +1,4 @@ -import React, {useContext, useState} from "react"; +import React, { useContext, useState } from "react"; import { Button, Col, @@ -15,19 +15,19 @@ import { 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"; +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([]); @@ -92,6 +92,11 @@ export const ProductComponent = observer((props) => { // // ), // }, + { + title: "Supplier", + dataIndex: "supplier", + key: "supplier", + }, { title: "Tersedia", dataIndex: "tersedia", @@ -120,7 +125,7 @@ export const ProductComponent = observer((props) => { ), }, ]; - + if (store.authentication.userData.role !== "Admin") columns.pop(); const deleteData = async (id) => { try { console.log(id); @@ -289,7 +294,7 @@ export const ProductComponent = observer((props) => { pageSize: store.product.pageSize, total: store.product.total_data, current: store.product.page + 1, - style: {marginBottom: "1rem", marginRight: "1rem"}, + style: { marginBottom: "1rem", marginRight: "1rem" }, }} dataSource={store.product.data} style={{ padding: 0 }} diff --git a/src/pages/App/MenuList.js b/src/pages/App/MenuList.js index 6bd6c96..ce7bf9f 100644 --- a/src/pages/App/MenuList.js +++ b/src/pages/App/MenuList.js @@ -52,14 +52,14 @@ export const MenuList = observer((props) => { - Home + Beranda {store.authentication.userData.role !== "Retail" && ( - Membership + Keanggotaan )} @@ -68,13 +68,13 @@ export const MenuList = observer((props) => { - Partner + Rekanan - Commission + Komisi @@ -90,14 +90,14 @@ export const MenuList = observer((props) => { - Product + Produk {store.authentication.userData.role === "Admin" && ( - Category + Kategori )} @@ -105,7 +105,7 @@ export const MenuList = observer((props) => { - Sub Category + Sub Kategori )} @@ -115,7 +115,7 @@ export const MenuList = observer((props) => { - Product + Produk )} @@ -123,24 +123,24 @@ export const MenuList = observer((props) => { - Transaction + Transaksi )} - } title="Payback"> + } title="Pembayaran"> {store.authentication.userData.role !== "Retail" && ( - - Confirmation + + konfirmasi )} {store.authentication.userData.role !== "Admin" && ( - - Created + + Buat Pembayaran )} diff --git a/src/pages/Config/Partner.js b/src/pages/Config/Partner.js index e1e8b41..4b5f5ce 100644 --- a/src/pages/Config/Partner.js +++ b/src/pages/Config/Partner.js @@ -56,14 +56,14 @@ export const Partner = observer(() => { */} - + /> */} diff --git a/src/pages/Config/Supplier.js b/src/pages/Config/Supplier.js index fc088b5..e009362 100644 --- a/src/pages/Config/Supplier.js +++ b/src/pages/Config/Supplier.js @@ -71,7 +71,7 @@ export const Supplier = observer(() => { */} - { marginBottom: store.ui.mediaQuery.isMobile ? 10 : 0, }} onSearch={(value) => console.log(value)} - /> + /> */} -
+
- ) + ); }); diff --git a/src/pages/Membership/Membership.js b/src/pages/Membership/Membership.js index 526f41e..83de9c3 100644 --- a/src/pages/Membership/Membership.js +++ b/src/pages/Membership/Membership.js @@ -1,32 +1,32 @@ -import React, {useContext, useEffect, useState} from "react"; +import React, { useContext, useEffect, useState } from "react"; import { - Button, - Card, - Col, - Divider, - Form, - Input, - InputNumber, - List, - message, - Modal, - Row, - Select, - Space, - Table, - Tag, + Button, + Card, + Col, + Divider, + Form, + Input, + InputNumber, + List, + message, + Modal, + Row, + Select, + Space, + Table, + Tag, } from "antd"; -import {useStore} from "../../utils/useStore"; -import {observer} from "mobx-react-lite"; -import {DownloadOutlined, PlusSquareOutlined} 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"; +import { useStore } from "../../utils/useStore"; +import { observer } from "mobx-react-lite"; +import { DownloadOutlined, PlusSquareOutlined } 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"; -const {Search} = Input; -const {Option} = Select; +const { Search } = Input; +const { Option } = Select; export const Membership = observer(() => { const history = useHistory(); const [form] = Form.useForm(); @@ -71,14 +71,14 @@ export const Membership = observer(() => { const status = isActive ? "inactive" : "active"; const status2 = isActive ? "Inactivating" : "Activating"; try { - modalLoader.setLoading(true); - const response = await store.membership.changeStatus(id, status); - modalLoader.setLoading(false); + modalLoader.setLoading(true); + const response = await store.membership.changeStatus(id, status); + modalLoader.setLoading(false); - response?.body?.statusCode === 201 - ? message.success(`Success ${status2} Membership`) - : message.error(`Failed ${status2} Membership`); - await getData(); + response?.body?.statusCode === 201 + ? message.success(`Success ${status2} Membership`) + : message.error(`Failed ${status2} Membership`); + await getData(); } catch (err) { modalLoader.setLoading(false); message.error(`Failed ${status2} Membership`); @@ -93,26 +93,26 @@ export const Membership = observer(() => { const handleSubmitTransaction = async (data) => { modalLoader.setLoading(true); try { - data.destination = destination; - if (data.amount) { - data = { - ...data, - amount: Number(data.amount), - }; - } + data.destination = destination; + if (data.amount) { + data = { + ...data, + amount: Number(data.amount), + }; + } - let response = null; + let response = null; - (await store.authentication.userData.role) === "Admin" - ? (response = await store.transaction.distributeAdmin(data)) - : (response = await store.transaction.distribute(data)); + (await store.authentication.userData.role) === "Admin" + ? (response = await store.transaction.distributeAdmin(data)) + : (response = await store.transaction.distribute(data)); - response?.body?.statusCode === 201 - ? message.success("Success Top Up") - : message.error("Failed Top Up"); + response?.body?.statusCode === 201 + ? message.success("Success Top Up") + : message.error("Failed Top Up"); - modalLoader.setLoading(false); - await getData(); + modalLoader.setLoading(false); + await getData(); } catch (e) { console.log(e, "apa errornya"); modalLoader.setLoading(false); @@ -142,30 +142,30 @@ export const Membership = observer(() => { key: ["coa", "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"} - - ), + 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"} + // + // ), + // }, { title: "Action", key: "action", render: (text, record) => ( - - {store.authentication.userData.role === "Admin" && } + } */} + + + + ) : ( + ( - - ), - }, - { - title: "Amount", - dataIndex: "amount", - key: "amount", - width: '20%', - render: (text) => - new Intl.NumberFormat("id-ID", { - style: "currency", - currency: "IDR", - }).format(text), - }, - { - title: "Action", - dataIndex: "amount", - key: "action", - width: '10%', - render: (text, record) => ( - PAYBACK_STATUS[record.status] === PAYBACK_STATUS[0] ? - - - - : - - {PAYBACK_STATUS[record.status]} - - ), - }, + style={{ color: "#4F566B" }} + > + {PAYBACK_STATUS[record.status]} + + ), + }, ]; if (store.authentication.userData.role === "Retail") columns.pop(); const routeData = [ - { - route: LINKS.HOME, - name: "Home", - }, - { - route: LINKS.PAYBACK, - name: Payback Confirmation, - }, + { + route: LINKS.HOME, + name: "Home", + }, + { + route: LINKS.PAYBACK, + name: Payback Confirmation, + }, ]; - const handleAction = async (id, type) => { - modalLoader.setLoading(true); - try { - const response = await store.payback.confirmPayback(id, type); - if (response.body.status !== 201) { - message.error(`Failed ${capitalize(type)} Payback`); - } else { - message.success(`Success ${capitalize(type)} Payback`); - } - } catch (e) { - console.error(e, "apa errornya"); - message.error("Failed Handler Action Payback"); - } - modalLoader.setLoading(false); - }; + const handleAction = async (id, type) => { + modalLoader.setLoading(true); + try { + const response = await store.payback.confirmPayback(id, type); + if (response.body.status !== 201) { + message.error(`Failed ${capitalize(type)} Payback`); + } else { + message.success(`Success ${capitalize(type)} Payback`); + } + } catch (e) { + console.error(e, "apa errornya"); + message.error("Failed Handler Action Payback"); + } + modalLoader.setLoading(false); + }; - return ( -
- - -
- -
- - - - + + +
+ +
+ + + + {/* + /> */} {store.ui.mediaQuery.isDesktop && ( -
{ - let pageNumber = page.current; - store.payback.pageSizeConfirmation = page.pageSize; - store.payback.pageConfirmation = pageNumber - 1; - modalLoader.setLoading(true); - await store.payback.getDataConfirmation(); - modalLoader.setLoading(false); - }} - /> +
{ + let pageNumber = page.current; + store.payback.pageSizeConfirmation = page.pageSize; + store.payback.pageConfirmation = pageNumber - 1; + modalLoader.setLoading(true); + await store.payback.getDataConfirmation(); + modalLoader.setLoading(false); + }} + /> )} {store.ui.mediaQuery.isMobile && ( - { - store.payback.pageSizeConfirmation = page.pageSize; - store.payback.pageConfirmation = page.current - 1; - modalLoader.setLoading(true); - await store.payback.getDataConfirmation(); - modalLoader.setLoading(false); - }, - pageSize: store.payback.pageSizeConfirmation, - total: store.payback.totalDataConfirmation, - current: store.payback.pageConfirmation + 1, - style: {marginBottom: "1rem", marginRight: "1rem"}, - }} - dataSource={store.payback.dataConfirmation} - style={{padding: 0}} - renderItem={(item) => { - return ( -
- - - -
- } - /> -
-

- {item.amount} -

-
- - + { + store.payback.pageSizeConfirmation = page.pageSize; + store.payback.pageConfirmation = page.current - 1; + modalLoader.setLoading(true); + await store.payback.getDataConfirmation(); + modalLoader.setLoading(false); + }, + pageSize: store.payback.pageSizeConfirmation, + total: store.payback.totalDataConfirmation, + current: store.payback.pageConfirmation + 1, + style: { marginBottom: "1rem", marginRight: "1rem" }, + }} + dataSource={store.payback.dataConfirmation} + style={{ padding: 0 }} + renderItem={(item) => { + return ( +
+ + + +
+ } + /> +
+

+ {item.amount} +

+
+ + ); }} diff --git a/src/pages/Payback/PaybackCreated.js b/src/pages/Payback/PaybackCreated.js index 54005ef..ee53c93 100644 --- a/src/pages/Payback/PaybackCreated.js +++ b/src/pages/Payback/PaybackCreated.js @@ -101,14 +101,14 @@ export const PaybackCreated = observer(() => {
- + /> */} {store.authentication.userData.role !== "Admin" && ( - + /> */} - - - -
- - {store.authentication.userData.role === "Admin" && ( + {store.authentication.userData.role !== "Admin" && ( +
+ +
+ + +
{ textAlign: "right", }} > - - - - + + + + {/* */} +
- )} - - - + + + + )} diff --git a/src/pages/Product/Subcategory.js b/src/pages/Product/Subcategory.js index 0ffa767..cc99349 100644 --- a/src/pages/Product/Subcategory.js +++ b/src/pages/Product/Subcategory.js @@ -61,14 +61,14 @@ export const Subcategory = observer(() => { */} - + /> */} - )} + )} */} ); }); diff --git a/src/routes/app.js b/src/routes/app.js index 00ee1cf..9bc009f 100644 --- a/src/routes/app.js +++ b/src/routes/app.js @@ -29,7 +29,7 @@ export const LINKS = { PAYBACK: "/app/payback", PAYBACK_CREATED: "/app/payback-created", SUBCATEGORY: "/app/subcategory", - USER_DETAIL: "/app/user-detail", + USER_DETAIL: "/app/user-detail/:id", PRODUCT_DETAIL: "/app/product-detail", }; diff --git a/src/store/membership.js b/src/store/membership.js index 7b2d44b..8edbee2 100644 --- a/src/store/membership.js +++ b/src/store/membership.js @@ -28,6 +28,16 @@ export class Membership { console.error(e); } } + async getDetail(id) { + try { + const response = await http.get(`/users/`+id); + console.log(response,'Data Detail') + this.data = response.body.data + this.total_data = response?.body?.count ?? 0 + } catch (e) { + console.error(e); + } + } async getDataBySuperior() { try { diff --git a/src/store/transaction.js b/src/store/transaction.js index 307f4bd..390b91d 100644 --- a/src/store/transaction.js +++ b/src/store/transaction.js @@ -84,7 +84,7 @@ export class Transaction { try { console.log("Top up") const response = await http.get(`/transaction/history-deposit?page=${this.pageHistoryTopUp}&user-destination=${id}`); - + console.log(response,"data") this.dataHistoryTopUp = response.body.data ?? [] this.total_dataHistoryTopUp = response?.body?.count ?? 0 } catch (e) { From 4ba8f07f93431e3f753b027a31061259d4e7e0ec Mon Sep 17 00:00:00 2001 From: "ajat91.sudrajat" Date: Thu, 23 Dec 2021 12:05:30 +0700 Subject: [PATCH 02/22] Config Page --- src/pages/Membership/DetailUser.js | 10 +++++----- src/store/membership.js | 3 ++- src/store/transaction.js | 6 ++---- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/pages/Membership/DetailUser.js b/src/pages/Membership/DetailUser.js index d4e84bc..deffce8 100644 --- a/src/pages/Membership/DetailUser.js +++ b/src/pages/Membership/DetailUser.js @@ -85,14 +85,14 @@ export const DetailUser = observer(() => { Name - {store.membership.data.userDetail?.name} + {store.membership.dataDetail.userDetail?.name}Username - {store.membership.data.superior?.username} + {store.membership.dataDetail.superior?.username} @@ -100,21 +100,21 @@ export const DetailUser = observer(() => { - {store.membership.data.roles?.name} + {store.membership.dataDetail.roles?.name} Phone Number- {store.membership.data.userDetail?.phone_number} + {store.membership.dataDetail.userDetail?.phone_number}Status - {store.authentication.profileData.superior?.isActive === true ? "Inaktif": "Aktif"} + {store.membership.dataDetail.isActive === true ? "Aktif": "Inaktif"} diff --git a/src/store/membership.js b/src/store/membership.js index 8edbee2..01bdd34 100644 --- a/src/store/membership.js +++ b/src/store/membership.js @@ -6,6 +6,7 @@ export class Membership { pageSize = 10 data = []; total_data = 0 + dataDetail=[] constructor(ctx) { this.ctx = ctx; @@ -32,7 +33,7 @@ export class Membership { try { const response = await http.get(`/users/`+id); console.log(response,'Data Detail') - this.data = response.body.data + this.dataDetail = response.body.data this.total_data = response?.body?.count ?? 0 } catch (e) { console.error(e); diff --git a/src/store/transaction.js b/src/store/transaction.js index 390b91d..a7032d1 100644 --- a/src/store/transaction.js +++ b/src/store/transaction.js @@ -58,7 +58,6 @@ export class Transaction { async getDataCategories() { try { const response = await http.get(`/product/categories?page=${this.pageCategories}&pageSize=${this.pageSizeCategories}`); - this.dataCategories = response.body.data ?? [] this.total_dataCategories = response?.body?.count ?? 0 if (this.dataCategories.length > 0) { @@ -72,7 +71,6 @@ export class Transaction { async getDataHistoryTransaction() { try { const response = await http.get(`/transaction/history?page=${this.pageHistoryTransaction}&pageSize=${this.pageSizeHistoryTransaction}`); - this.dataHistoryTransaction = response.body.data ?? [] this.total_dataHistoryTransaction = response?.body?.count ?? 0 } catch (e) { @@ -82,9 +80,9 @@ export class Transaction { async getDataHistoryTopUp(id) { try { - console.log("Top up") + //console.log("Top up") const response = await http.get(`/transaction/history-deposit?page=${this.pageHistoryTopUp}&user-destination=${id}`); - console.log(response,"data") + //console.log(response,"data") this.dataHistoryTopUp = response.body.data ?? [] this.total_dataHistoryTopUp = response?.body?.count ?? 0 } catch (e) { From a16f42145b7bb3739a5f346665505beb11ceefd9 Mon Sep 17 00:00:00 2001 From: caturbgs Date: Thu, 23 Dec 2021 12:06:38 +0700 Subject: [PATCH 03/22] fix: detail product --- src/pages/Membership/DetailUser.js | 43 +++++++++++++----------------- src/pages/Membership/Membership.js | 25 ++++++++--------- src/store/transaction.js | 11 ++++---- 3 files changed, 34 insertions(+), 45 deletions(-) diff --git a/src/pages/Membership/DetailUser.js b/src/pages/Membership/DetailUser.js index deffce8..d98c6d4 100644 --- a/src/pages/Membership/DetailUser.js +++ b/src/pages/Membership/DetailUser.js @@ -1,37 +1,26 @@ -import React, { useContext, useEffect, useState } from "react"; -import { - Button, - Card, - Col, - Row, - Table, - Typography, - Tag, - Space, - message, -} 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, DownloadOutlined } from "@ant-design/icons"; -import { format, parseISO } from "date-fns"; -import { ModalLoaderContext } from "../../utils/modal"; -import { useParams } from "react-router-dom"; +import React, {useContext, useEffect, useState} 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"; +import {useParams} from "react-router-dom"; -const { Title, Text } = Typography; +const {Title, Text} = Typography; export const DetailUser = observer(() => { const store = useStore(); const modalLoader = useContext(ModalLoaderContext); - const { id } = useParams(); + const {id} = useParams(); const [visibleModal, setVisibleModal] = useState(false); const [isVisibleTopUpModal, setIsVisibleTopUpModal] = useState(false); const [destination, setDestination] = useState(null); const [initialData, setInitialData] = useState({}); const [confirmLoading, setConfirmLoading] = useState(false); - //console.log(id) useEffect(() => { (async () => { modalLoader.setLoading(true); @@ -69,8 +58,12 @@ export const DetailUser = observer(() => { name: "Home", }, { - route: LINKS.USER_DETAIL, - name: Detail User, + route: "/app/membership", + name: Membership, + }, + { + route: LINKS.USER_DETAIL.replace(":id", id), + name: Detail User, }, ]; return ( diff --git a/src/pages/Membership/Membership.js b/src/pages/Membership/Membership.js index 83de9c3..007210a 100644 --- a/src/pages/Membership/Membership.js +++ b/src/pages/Membership/Membership.js @@ -1,4 +1,4 @@ -import React, { useContext, useEffect, useState } from "react"; +import React, {useContext, useEffect, useState} from "react"; import { Button, Card, @@ -14,19 +14,18 @@ import { Select, Space, Table, - Tag, } from "antd"; -import { useStore } from "../../utils/useStore"; -import { observer } from "mobx-react-lite"; -import { DownloadOutlined, PlusSquareOutlined } 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"; +import {useStore} from "../../utils/useStore"; +import {observer} from "mobx-react-lite"; +import {DownloadOutlined, PlusSquareOutlined} 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"; -const { Search } = Input; -const { Option } = Select; +const {Search} = Input; +const {Option} = Select; export const Membership = observer(() => { const history = useHistory(); const [form] = Form.useForm(); @@ -221,9 +220,7 @@ export const Membership = observer(() => { - - - -
- {/* + + + {store.authentication.userData.role !== "Admin" && ( +
+ +
+ + + +
+ {/* { }} /> */} -
- - - - {/* */} -
-
+ beforeUpload(file)} + customRequest={(args) => uploadHandler(args)} + onRemove={(file) => { + setLoading(false); + }} + > + + + {loadingState} + + diff --git a/src/store/product.js b/src/store/product.js index 5881c38..af5f1d9 100644 --- a/src/store/product.js +++ b/src/store/product.js @@ -107,6 +107,24 @@ export class Product { console.error(e); } } + + async uploadExcel(data) { + try { + const response = await http.upload(data); + return response; + } catch (e) { + console.error(e); + } + } + + async uploadProduct(data) { + try { + const response = await http.post('/product/upload-product').send(data); + return response; + } catch (e) { + console.error(e); + } + } } From 91ecdfb5415864f4acef41f66dddc3f0619ebc45 Mon Sep 17 00:00:00 2001 From: caturbgs Date: Thu, 23 Dec 2021 13:51:05 +0700 Subject: [PATCH 06/22] chore: rewrite function for upload images in payback --- src/pages/Payback/PaybackModal.js | 3 +-- src/store/payback.js | 9 +++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/pages/Payback/PaybackModal.js b/src/pages/Payback/PaybackModal.js index 39ae6b9..1cc8127 100644 --- a/src/pages/Payback/PaybackModal.js +++ b/src/pages/Payback/PaybackModal.js @@ -3,7 +3,6 @@ import {Form, InputNumber, message, Modal, Upload,} from "antd"; import {useStore} from "../../utils/useStore"; import {LoadingOutlined, PlusOutlined} from "@ant-design/icons"; import {ModalLoaderContext} from "../../utils/modal"; -import {http} from "../../utils/http"; import {appConfig} from "../../config/app"; export const PaybackModal = ({initialData}) => { @@ -32,7 +31,7 @@ export const PaybackModal = ({initialData}) => { const uploadHandler = async (args) => { const file = args.file; - const res = await http.upload(file); + const res = await store.payback.uploadImages(file); setImage(`${appConfig.apiUrl}/config/image/${res.body.filename}`); setResponseFilename(res.body.filename); setFileList([{ diff --git a/src/store/payback.js b/src/store/payback.js index d0a5c83..279d56f 100644 --- a/src/store/payback.js +++ b/src/store/payback.js @@ -93,4 +93,13 @@ export class Payback { console.error(e); } } + + async uploadImages(data) { + try { + const response = await http.upload(data); + return response; + } catch (e) { + console.error(e); + } + } } From 8ead48ad2ae9c328de23d6ca7e2c1bb9dd62c915 Mon Sep 17 00:00:00 2001 From: "ajat91.sudrajat" Date: Thu, 23 Dec 2021 15:06:46 +0700 Subject: [PATCH 07/22] Config Page --- src/component/PartnerComponent.js | 36 +++-- src/component/ProductComponent.js | 16 ++- src/pages/Config/Partner.js | 10 +- src/pages/Membership/DetailUser.js | 204 +++++++++++++++++++++++++++-- src/pages/Membership/Membership.js | 77 ++++++----- src/pages/Product/Category.js | 6 +- src/pages/Product/ProductDetail.js | 146 +++++++++++++-------- src/pages/Product/Subcategory.js | 10 +- src/pages/Transaction/Product.js | 111 +++++++++------- src/routes/app.js | 2 +- src/store/product.js | 27 +++- 11 files changed, 463 insertions(+), 182 deletions(-) diff --git a/src/component/PartnerComponent.js b/src/component/PartnerComponent.js index cc2e6b6..b5c7da1 100644 --- a/src/component/PartnerComponent.js +++ b/src/component/PartnerComponent.js @@ -1,11 +1,22 @@ -import React, {useContext, useState} from "react"; -import {Button, Divider, Form, Input, List, message, Modal, Space, Table, Tag,} 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"; +import React, { useContext, useState } from "react"; +import { + Button, + Divider, + Form, + Input, + List, + message, + Modal, + Space, + Table, + Tag, +} 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"; export const PartnerComponent = observer((props) => { const store = useStore(); @@ -151,6 +162,7 @@ export const PartnerComponent = observer((props) => { ? "Failed Change Partner Password" : "Success Update Data Partner" ); + //await store.partner.getData() } catch (e) { modalLoader.setLoading(true); @@ -166,9 +178,11 @@ export const PartnerComponent = observer((props) => { } else { modalLoader.setLoading(true); try { - await store.partner.create(data); - message.success("Success Add New Partner"); + const response = await store.partner.create(data); modalLoader.setLoading(false); + response?.body?.statusCode === 200 + ? message.success("Success Add New Partner") + : message.error("Failed Add Partner"); } catch (e) { console.log(e, "apa errornya"); message.error("Failed Add Partner"); @@ -219,7 +233,7 @@ export const PartnerComponent = observer((props) => { pageSize: store.partner.pageSize, total: store.partner.total_data, current: store.partner.page + 1, - style: {marginBottom: "1rem", marginRight: "1rem"}, + style: { marginBottom: "1rem", marginRight: "1rem" }, }} dataSource={store.partner.data} style={{ padding: 0 }} diff --git a/src/component/ProductComponent.js b/src/component/ProductComponent.js index 5490a1d..1162005 100644 --- a/src/component/ProductComponent.js +++ b/src/component/ProductComponent.js @@ -115,13 +115,15 @@ export const ProductComponent = observer((props) => { key: "action", render: (text, record) => ( + onClick={async () => { + await store.product.getDetail(record.product_id); + await store.product.getDetailProduct(record.product_id); + history.push(LINKS.PRODUCT_DETAIL.replace(":id", record.product_id)); + //console.log(record.product_id); + }} + > + Detail + ), }, ]; diff --git a/src/pages/Config/Partner.js b/src/pages/Config/Partner.js index 4b5f5ce..d7226e9 100644 --- a/src/pages/Config/Partner.js +++ b/src/pages/Config/Partner.js @@ -49,13 +49,13 @@ export const Partner = observer(() => { - - {/* + */} - - + + */} + {/* { useEffect(() => { (async () => { modalLoader.setLoading(true); + await getData(); await Promise.allSettled([ store.transaction.getDataHistoryTopUp(id), store.membership.getDetail(id), @@ -43,6 +45,71 @@ export const DetailUser = observer(() => { })(); }, []); + const getData = async () => { + store.authentication.userData.role === "Admin" + ? await store.membership.getData() + : await store.membership.getDataBySuperior(); + }; + const changeStatus = async (id, isActive) => { + const status = isActive ? "inactive" : "active"; + const status2 = isActive ? "Inactivating" : "Activating"; + try { + modalLoader.setLoading(true); + const response = await store.membership.changeStatus(id, status); + modalLoader.setLoading(false); + + response?.body?.statusCode === 201 + ? message.success(`Success ${status2} Membership`) + : message.error(`Failed ${status2} Membership`); + await getData(); + } catch (err) { + modalLoader.setLoading(false); + message.error(`Failed ${status2} Membership`); + } + }; + + const onSubmit = async (data) => { + data.superior = true; + + if (initialData.id) { + setConfirmLoading(true); + modalLoader.setLoading(true); + try { + await store.membership.update(initialData.id, 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 { + 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"); + } + modalLoader.setLoading(false); + setConfirmLoading(false); + setVisibleModal(false); + setInitialData({}); + } + }; const columns = [ { title: "Amount", @@ -61,6 +128,69 @@ export const DetailUser = observer(() => { ); }, }, + { + title: "Status", + dataIndex: "isActive", + key: "isActive", + render: (text, record) => ( + + {record?.isActive === true ? " ACTIVE" : "INACTIVE"} + + ), + }, + { + title: "Action", + key: "action", + render: (text, record) => ( + + {/* {store.authentication.userData.role === "Admin" && */} + + {/* } */} + {/* {store.authentication.userData.role === "Admin" && */} + + {/* } + {store.authentication.userData.role === "Admin" && */} + + {/* } */} + + ), + }, ]; const routeData = [ @@ -68,6 +198,10 @@ export const DetailUser = observer(() => { route: LINKS.HOME, name: "Home", }, + { + route: LINKS.MEMBERSHIP, + name: Keanggotaan, + }, { route: LINKS.USER_DETAIL, name: Detail User, @@ -91,30 +225,30 @@ export const DetailUser = observer(() => { Username - - {store.membership.dataDetail.superior?.username} - + {store.membership.dataDetail.superior?.username}Role- - {store.membership.dataDetail.roles?.name} - + {store.membership.dataDetail.roles?.name}Phone Number- {store.membership.dataDetail.userDetail?.phone_number} + + {store.membership.dataDetail.userDetail?.phone_number} + Status - {store.membership.dataDetail.isActive === true ? "Aktif": "Inaktif"} + {store.membership.dataDetail.isActive === true + ? "Aktif" + : "Inaktif"} @@ -141,7 +275,7 @@ export const DetailUser = observer(() => { History Top Up - + */}
{
+ {/* { + 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); + }} + onCancel={() => { + setInitialData({}); + setVisibleModal(false); + }} + />
); }); diff --git a/src/pages/Membership/Membership.js b/src/pages/Membership/Membership.js index 83de9c3..9eb9a91 100644 --- a/src/pages/Membership/Membership.js +++ b/src/pages/Membership/Membership.js @@ -147,31 +147,33 @@ export const Membership = observer(() => { currency: "IDR", }).format(text), }, - // { - // title: "Status", - // dataIndex: "isActive", - // key: "isActive", - // render: (text, record) => ( - // - // {record?.isActive === true ? " ACTIVE" : "INACTIVE"} - // - // ), - // }, + { + title: "Status", + dataIndex: "isActive", + key: "isActive", + render: (text, record) => ( + + {record?.isActive === true ? " ACTIVE" : "INACTIVE"} + + ), + }, { title: "Action", key: "action", render: (text, record) => ( - {/* {store.authentication.userData.role === "Admin" && } - - {store.authentication.userData.role === "Admin" && } - {store.authentication.userData.role === "Admin" && } */} + + {/* } */} - + {/* {store.authentication.userData.role === "Admin" && ( */} + + {/* ) */} + {/* } */} ), }, @@ -239,8 +248,8 @@ export const Membership = observer(() => { name: "Home", }, { - route: "/app/membership", - name: Membership, + route: LINKS.MEMBERSHIP, + name: Keanggotaan, }, ]; @@ -300,14 +309,14 @@ export const Membership = observer(() => { */} - + /> */} + {/* - - + */} + {/* { const store = useStore(); + const { id } = useParams(); const modalLoader = useContext(ModalLoaderContext); const routeData = [ @@ -21,11 +23,11 @@ export const ProductDetail = observer(() => { }, { route: LINKS.PRODUCT, - name: Product, + name: Product, }, { route: LINKS.PRODUCT_DETAIL, - name: Product Detail, + name: Product Detail, }, ]; @@ -33,89 +35,121 @@ export const ProductDetail = observer(() => { (async () => { modalLoader.setLoading(true); await Promise.allSettled([ - store.authentication.getProfile(), - store.transaction.getDataHistoryTransaction(), + //store.authentication.getProfile(), + store.product.getDetail(id), + store.product.getDetailProduct(id), ]); modalLoader.setLoading(false); - })() + })(); }, []); + //console.log(id) const columns = [ { - title: 'Markup Price', - dataIndex: 'mark_up_price', - key: 'mark_up_price', - width: '20%', + title: "Markup Price", + dataIndex: "mark_up_price", + key: "mark_up_price", + width: "20%", + render: (text) => + new Intl.NumberFormat("id-ID", { + style: "currency", + currency: "IDR", + }).format(text), }, { - title: 'Name', - dataIndex: 'name', - key: 'name', - width: '50%', + title: "Price", + dataIndex: "price", + key: "price", + width: "50%", + render: (text) => + new Intl.NumberFormat("id-ID", { + style: "currency", + currency: "IDR", + }).format(text), }, { - title: 'Transaction Date', - dataIndex: 'created_at', - key: 'created_at', + title: "Transaction Date", + dataIndex: "startDate", + key: "startDate", render: (text, record) => { return ( - {format(parseISO(record.created_at), 'dd MMMM yyyy HH:mm')} - ) + {format(parseISO(record.startDate), "dd MMMM yyyy")} + ); }, }, - ] + ]; - 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 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 (
- + Product Detail - +
Kode- {store.authentication.profileData?.userDetail?.name} + {store.product.dataDetailProduct.code}- Produk + Nama Produk - - {store.authentication.profileData?.userDetail?.phone_number} + + {store.product.dataDetailProduct.name}Harga Beli- {store.authentication.profileData?.username} + + {new Intl.NumberFormat("id-ID", { + style: "currency", + currency: "IDR", + }).format(store.product.dataDetailProduct.basePrice)} + Harga Jual- {store.authentication.profileData.roles?.name} + + {new Intl.NumberFormat("id-ID", { + style: "currency", + currency: "IDR", + }).format(store.product.dataDetailProduct.price)} + + + + Supplier + + + {store.product.dataDetailProduct.supplier.name}Status- {store.authentication.profileData.superior?.username} + {store.product.dataDetailProduct.status} - + {/* Saldo @@ -124,29 +158,31 @@ export const ProductDetail = observer(() => { {store.authentication.profileData?.wallet} - + */}
- History User Transaction + + Product Price History + - + */}
-
+
- ) + ); }); diff --git a/src/pages/Product/Subcategory.js b/src/pages/Product/Subcategory.js index cc99349..a2c0292 100644 --- a/src/pages/Product/Subcategory.js +++ b/src/pages/Product/Subcategory.js @@ -54,13 +54,13 @@ export const Subcategory = observer(() => { -
- {/* + */} - - + + */} + {/* { const store = useStore(); @@ -18,8 +18,8 @@ export const Product = observer(() => { modalLoader.setLoading(true); await Promise.allSettled([ store.transaction.getDataSubCategories(), - store.transaction.getDataCategories() - ]) + store.transaction.getDataCategories(), + ]); modalLoader.setLoading(false); } catch (e) { modalLoader.setLoading(false); @@ -44,7 +44,9 @@ export const Product = observer(() => { const handleBuyProduct = async (data) => { modalLoader.setLoading(true); try { - const response = await store.transaction.buyProduct({productCode: data}); + const response = await store.transaction.buyProduct({ + productCode: data, + }); if (response.status === 201) { message.success("Success Buy Product"); } else { @@ -64,16 +66,18 @@ export const Product = observer(() => { return (
- Sub Category + + Sub Category +
- + Produk & Nominal - + {store.transaction.data.length != 0 && ( - - {store.transaction.data.map((item, index) => ( - - { - Modal.confirm({ - title: `Are you sure buy ${item.product_name}?`, - icon: , - okText: "Confirm", - cancelText: "Cancel", - okType: "primary", - onOk() { - handleBuyProduct(item.product_code) - }, - onCancel() { - console.log("Cancel"); - }, - }); - }} - style={{cursor: "pointer",marginLeft:10}} - > - {item.product_name} -
- + + {store.transaction.data.map((item, index) => ( +
+ { + Modal.confirm({ + title: `Are you sure buy ${item.product_name}?`, + icon: , + okText: "Confirm", + cancelText: "Cancel", + okType: "primary", + onOk() { + handleBuyProduct(item.product_code); + }, + onCancel() { + console.log("Cancel"); + }, + }); + }} + hoverable + style={{ + cursor: "pointer", + marginLeft: 10, + borderColor: "salmon", + height: 100, + marginBottom: 10, + }} + > + {item.product_name} +
+ {new Intl.NumberFormat("id-ID", { style: "currency", currency: "IDR", }).format(item?.price)} -
- - ))} - + + + ))} + )} {/* {store.transaction.data.length !== 0 && ( diff --git a/src/routes/app.js b/src/routes/app.js index 9bc009f..8df28d0 100644 --- a/src/routes/app.js +++ b/src/routes/app.js @@ -30,7 +30,7 @@ export const LINKS = { PAYBACK_CREATED: "/app/payback-created", SUBCATEGORY: "/app/subcategory", USER_DETAIL: "/app/user-detail/:id", - PRODUCT_DETAIL: "/app/product-detail", + PRODUCT_DETAIL: "/app/product-detail/:id", }; export const AppRoute = () => { diff --git a/src/store/product.js b/src/store/product.js index 5881c38..24fd675 100644 --- a/src/store/product.js +++ b/src/store/product.js @@ -22,6 +22,11 @@ export class Product { dataSubCategories = []; total_dataSubCategories = 0; filterCategory = null; + dataDetail=[] + dataDetailProduct=[] + + pageGetDetail=0 + supplier=null constructor(ctx) { this.ctx = ctx; @@ -31,7 +36,7 @@ export class Product { async getData() { try { const response = await http.get(`/product/all?supplier=${this.filterSupplier}&sub-category=${this.filterSubCategory}&page=${this.page}&pageSize=${this.pageSize}`); - //console.log(response) + console.log(response) this.data = response.body.data.map((item, idx) => { item.key = idx; return item @@ -67,6 +72,26 @@ export class Product { console.error(e); } } + async getDetail(id) { + try { + const response = await http.get(`/product/price-history/${id}?page=${this.pageGetDetail}&supplier=${this.supplier}`); + //console.log(response,' Detail') + this.dataDetail = response.body.data + this.total_data = response?.body?.count ?? 0 + } catch (e) { + console.error(e); + } + } + async getDetailProduct(id) { + try { + const response = await http.get(`/product/${id}`); + //console.log(response,' Detail Product') + this.dataDetailProduct = response.body.data + this.total_data = response?.body?.count ?? 0 + } catch (e) { + console.error(e); + } + } async create(data) { try { From d221a3987d24611f00c87559283c60d891fd065e Mon Sep 17 00:00:00 2001 From: "ajat91.sudrajat" Date: Thu, 23 Dec 2021 15:38:15 +0700 Subject: [PATCH 08/22] Repairing Menu --- src/component/CategoryComponent.js | 16 ++++++++++------ src/component/CommissionComponent.js | 8 +++++--- src/component/PartnerComponent.js | 6 +++--- src/component/ProductComponent.js | 16 ++++++++++------ src/component/SubcategoryComponent.js | 16 ++++++++++------ src/component/SupplierComponent.js | 16 ++++++++++------ src/pages/Membership/Membership.js | 8 +++++--- src/pages/Transaction/Product.js | 6 +++--- 8 files changed, 56 insertions(+), 36 deletions(-) diff --git a/src/component/CategoryComponent.js b/src/component/CategoryComponent.js index 753342e..c0f973c 100644 --- a/src/component/CategoryComponent.js +++ b/src/component/CategoryComponent.js @@ -95,10 +95,12 @@ export const CategoryComponent = observer((props) => { if (idData !== "") { modalLoader.setLoading(true); try { - await store.category.update(idData, data); - message.success("Success Update Data Category"); + const response =await store.category.update(idData, data); + response?.body?.statusCode === 200 + ? message.success("Berhasil Ubah Kategori") + : message.error("Gagal Ubah Kategori"); } catch (e) { - message.error("Failed Update Data Category"); + message.error("Gagal Ubah Data Kategori"); } modalLoader.setLoading(false); store.category.visibleModalCategory = false; @@ -107,11 +109,13 @@ export const CategoryComponent = observer((props) => { } else { modalLoader.setLoading(true); try { - await store.category.create(data); - message.success("Success Add New Category"); + const response=await store.category.create(data); + response?.body?.statusCode === 200 + ? message.success("Berhasil Tambah Kategori") + : message.error("Gagal Tambah Kategori"); } catch (e) { console.log(e, "apa errornya"); - message.error("Failed Add Category"); + message.error("Gagal Tambah Kategori"); } modalLoader.setLoading(false); store.category.visibleModalCategory = false; diff --git a/src/component/CommissionComponent.js b/src/component/CommissionComponent.js index f6bbdfc..1342ac8 100644 --- a/src/component/CommissionComponent.js +++ b/src/component/CommissionComponent.js @@ -52,10 +52,12 @@ export const CommissionComponent = observer((props) => { const handleSubmit = async (data) => { modalLoader.setLoading(true); try { - await store.commission.update(idData, data); - message.success("Success Update Data Member"); + const response=await store.commission.update(idData, data); + response?.body?.statusCode === 200 + ? message.success("Berhasil Ubah Komisi") + : message.error("Gagal Ubah Komisi"); } catch (e) { - message.error("Failed Update Data Member"); + message.error("Gagal Ubah Komisi"); } modalLoader.setLoading(false); store.commission.visibleModalCommission = false; diff --git a/src/component/PartnerComponent.js b/src/component/PartnerComponent.js index b5c7da1..a36c5b3 100644 --- a/src/component/PartnerComponent.js +++ b/src/component/PartnerComponent.js @@ -181,11 +181,11 @@ export const PartnerComponent = observer((props) => { const response = await store.partner.create(data); modalLoader.setLoading(false); response?.body?.statusCode === 200 - ? message.success("Success Add New Partner") - : message.error("Failed Add Partner"); + ? message.success("Berhasil Tambah Partner") + : message.error("Gagal Tambah Partner"); } catch (e) { console.log(e, "apa errornya"); - message.error("Failed Add Partner"); + message.error("Gagal Tambah Partner"); } modalLoader.setLoading(false); store.partner.visibleModalPartner = false; diff --git a/src/component/ProductComponent.js b/src/component/ProductComponent.js index 1162005..2e293f1 100644 --- a/src/component/ProductComponent.js +++ b/src/component/ProductComponent.js @@ -166,10 +166,12 @@ export const ProductComponent = observer((props) => { if (idData !== "") { modalLoader.setLoading(true); try { - await store.product.update(idData, data); - message.success("Success Update Data Member"); + const response=await store.product.update(idData, data); + response?.body?.statusCode === 200 + ? message.success("Berhasil Ubah Data Produk") + : message.error("Gagal Ubah Data Produk"); } catch (e) { - message.error("Failed Update Data Member"); + message.error("Gagal Ubah Data Produk"); } modalLoader.setLoading(false); store.product.visibleModalProduct = false; @@ -178,11 +180,13 @@ export const ProductComponent = observer((props) => { } else { modalLoader.setLoading(true); try { - await store.product.create(data); - message.success("Success Add New Member"); + const response=await store.product.create(data); + response?.body?.statusCode === 200 + ? message.success("Berhasil Tambah Produk") + : message.error("Gagal Tambah Produk"); } catch (e) { console.log(e, "apa errornya"); - message.error("Failed Add Member"); + message.error("Gagal Tambah Produk"); } modalLoader.setLoading(false); store.product.visibleModalProduct = false; diff --git a/src/component/SubcategoryComponent.js b/src/component/SubcategoryComponent.js index db1a7e5..ca27993 100644 --- a/src/component/SubcategoryComponent.js +++ b/src/component/SubcategoryComponent.js @@ -67,11 +67,13 @@ export const SubcategoryComponent = observer((props) => { if (idData !== "") { modalLoader.setLoading(true); try { - await store.subcategory.update(idData, data); + const response=await store.subcategory.update(idData, data); + response?.body?.statusCode === 200 + ? message.success("Berhasil Ubah Data Sub Kategori") + : message.error("Gagal Ubah Data Sub Kategori"); //await getData(); - message.success("Success Update Data Category"); } catch (e) { - message.error("Failed Update Data Category"); + message.error("Gagal Ubah Data Sub Kategori"); } modalLoader.setLoading(false); store.subcategory.visibleModalSubcategory = false; @@ -80,11 +82,13 @@ export const SubcategoryComponent = observer((props) => { } else { modalLoader.setLoading(true); try { - await store.subcategory.create(data); - message.success("Success Add New Category"); + const response =await store.subcategory.create(data); + response?.body?.statusCode === 200 + ? message.success("Berhasil Tambah Sub Kategori") + : message.error("Gagal Tambah Sub Kategori"); } catch (e) { console.log(e, "apa errornya"); - message.error("Failed Add Category"); + message.error("Gagal Tambah Sub Kategori"); } modalLoader.setLoading(false); store.subcategory.visibleModalSubcategory = false; diff --git a/src/component/SupplierComponent.js b/src/component/SupplierComponent.js index 7efd50e..40f1422 100644 --- a/src/component/SupplierComponent.js +++ b/src/component/SupplierComponent.js @@ -160,11 +160,13 @@ export const SupplierComponent = observer((props) => { if (idData !== "") { try { modalLoader.setLoading(true); - await store.supplier.update(idData, data); - message.success("Success Update Data Member"); + const response=await store.supplier.update(idData, data); + response?.body?.statusCode === 200 + ? message.success("Berhasil Ubah Data Supplier") + : message.error("Gagal Ubah Data Supplier"); } catch (e) { modalLoader.setLoading(false); - message.error("Failed Update Data Member"); + message.error("Gagal Ubah Data Supplie"); } modalLoader.setLoading(false); @@ -174,11 +176,13 @@ export const SupplierComponent = observer((props) => { } else { try { modalLoader.setLoading(true); - await store.supplier.create(data); - message.success("Success Add New Member"); + const response=await store.supplier.create(data); + response?.body?.statusCode === 200 + ? message.success("Berhasil Tambah Supplier Baru") + : message.error("Gagal Tambah Supplier Baru"); } catch (e) { console.log(e, "apa errornya"); - message.error("Failed Add Member"); + message.error("Gagal Tambah Supplier Baru"); } modalLoader.setLoading(false); diff --git a/src/pages/Membership/Membership.js b/src/pages/Membership/Membership.js index 9f5ddd1..8b443ca 100644 --- a/src/pages/Membership/Membership.js +++ b/src/pages/Membership/Membership.js @@ -282,12 +282,14 @@ export const Membership = observer(() => { setConfirmLoading(true); modalLoader.setLoading(true); try { - await store.membership.create(data); - message.success("Success Add New Member"); + const response=await store.membership.create(data); + response?.body?.statusCode === 200 + ? message.success("Berhasil Tambah Member Baru") + : message.error("Gagal Tambah Member Baru"); await getData(); } catch (e) { console.log(e, "apa errornya"); - message.error("Failed Add Member"); + message.error("Gagal Tambah Member Baru"); } modalLoader.setLoading(false); setConfirmLoading(false); diff --git a/src/pages/Transaction/Product.js b/src/pages/Transaction/Product.js index b3e3d16..2ac762c 100644 --- a/src/pages/Transaction/Product.js +++ b/src/pages/Transaction/Product.js @@ -48,9 +48,9 @@ export const Product = observer(() => { productCode: data, }); if (response.status === 201) { - message.success("Success Buy Product"); + message.success("Berhasil Beli Produk"); } else { - message.error("Failed Buy Product", 3); + message.error("Gagal Beli Produk", 3); } } catch (e) { if (e.response?.body?.message) { @@ -58,7 +58,7 @@ export const Product = observer(() => { return; } console.log(e, "apa errornya"); - message.error("Failed Buy Product"); + message.error("Gagal Beli Product"); } modalLoader.setLoading(false); }; From 4e2480dc63c395e030fd03b06c2ef58b499f48fd Mon Sep 17 00:00:00 2001 From: "ajat91.sudrajat" Date: Thu, 23 Dec 2021 16:03:57 +0700 Subject: [PATCH 09/22] Repair Menu --- src/component/CategoryComponent.js | 4 ++-- src/component/CommissionComponent.js | 2 +- src/component/PartnerComponent.js | 2 +- src/component/ProductComponent.js | 2 +- src/component/SubcategoryComponent.js | 4 ++-- src/component/SupplierComponent.js | 4 ++-- src/pages/App/DesktopLayout.js | 2 +- src/pages/Membership/Membership.js | 2 +- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/component/CategoryComponent.js b/src/component/CategoryComponent.js index c0f973c..07d9b55 100644 --- a/src/component/CategoryComponent.js +++ b/src/component/CategoryComponent.js @@ -96,7 +96,7 @@ export const CategoryComponent = observer((props) => { modalLoader.setLoading(true); try { const response =await store.category.update(idData, data); - response?.body?.statusCode === 200 + response?.body?.statusCode === 201 ? message.success("Berhasil Ubah Kategori") : message.error("Gagal Ubah Kategori"); } catch (e) { @@ -110,7 +110,7 @@ export const CategoryComponent = observer((props) => { modalLoader.setLoading(true); try { const response=await store.category.create(data); - response?.body?.statusCode === 200 + response?.body?.statusCode === 201 ? message.success("Berhasil Tambah Kategori") : message.error("Gagal Tambah Kategori"); } catch (e) { diff --git a/src/component/CommissionComponent.js b/src/component/CommissionComponent.js index 1342ac8..e9ceec3 100644 --- a/src/component/CommissionComponent.js +++ b/src/component/CommissionComponent.js @@ -53,7 +53,7 @@ export const CommissionComponent = observer((props) => { modalLoader.setLoading(true); try { const response=await store.commission.update(idData, data); - response?.body?.statusCode === 200 + response?.body?.statusCode === 201 ? message.success("Berhasil Ubah Komisi") : message.error("Gagal Ubah Komisi"); } catch (e) { diff --git a/src/component/PartnerComponent.js b/src/component/PartnerComponent.js index a36c5b3..583f5f8 100644 --- a/src/component/PartnerComponent.js +++ b/src/component/PartnerComponent.js @@ -180,7 +180,7 @@ export const PartnerComponent = observer((props) => { try { const response = await store.partner.create(data); modalLoader.setLoading(false); - response?.body?.statusCode === 200 + response?.body?.statusCode === 201 ? message.success("Berhasil Tambah Partner") : message.error("Gagal Tambah Partner"); } catch (e) { diff --git a/src/component/ProductComponent.js b/src/component/ProductComponent.js index 2e293f1..db78249 100644 --- a/src/component/ProductComponent.js +++ b/src/component/ProductComponent.js @@ -181,7 +181,7 @@ export const ProductComponent = observer((props) => { modalLoader.setLoading(true); try { const response=await store.product.create(data); - response?.body?.statusCode === 200 + response?.body?.statusCode === 201 ? message.success("Berhasil Tambah Produk") : message.error("Gagal Tambah Produk"); } catch (e) { diff --git a/src/component/SubcategoryComponent.js b/src/component/SubcategoryComponent.js index ca27993..8be86fb 100644 --- a/src/component/SubcategoryComponent.js +++ b/src/component/SubcategoryComponent.js @@ -68,7 +68,7 @@ export const SubcategoryComponent = observer((props) => { modalLoader.setLoading(true); try { const response=await store.subcategory.update(idData, data); - response?.body?.statusCode === 200 + response?.body?.statusCode === 201 ? message.success("Berhasil Ubah Data Sub Kategori") : message.error("Gagal Ubah Data Sub Kategori"); //await getData(); @@ -83,7 +83,7 @@ export const SubcategoryComponent = observer((props) => { modalLoader.setLoading(true); try { const response =await store.subcategory.create(data); - response?.body?.statusCode === 200 + response?.body?.statusCode === 201 ? message.success("Berhasil Tambah Sub Kategori") : message.error("Gagal Tambah Sub Kategori"); } catch (e) { diff --git a/src/component/SupplierComponent.js b/src/component/SupplierComponent.js index 40f1422..2a30c07 100644 --- a/src/component/SupplierComponent.js +++ b/src/component/SupplierComponent.js @@ -161,7 +161,7 @@ export const SupplierComponent = observer((props) => { try { modalLoader.setLoading(true); const response=await store.supplier.update(idData, data); - response?.body?.statusCode === 200 + response?.body?.statusCode === 201 ? message.success("Berhasil Ubah Data Supplier") : message.error("Gagal Ubah Data Supplier"); } catch (e) { @@ -177,7 +177,7 @@ export const SupplierComponent = observer((props) => { try { modalLoader.setLoading(true); const response=await store.supplier.create(data); - response?.body?.statusCode === 200 + response?.body?.statusCode === 201 ? message.success("Berhasil Tambah Supplier Baru") : message.error("Gagal Tambah Supplier Baru"); } catch (e) { diff --git a/src/pages/App/DesktopLayout.js b/src/pages/App/DesktopLayout.js index 5d77d6b..23c2b32 100644 --- a/src/pages/App/DesktopLayout.js +++ b/src/pages/App/DesktopLayout.js @@ -208,7 +208,7 @@ export const DesktopLayout = observer(() => { } - title="Created" + title="Pembayaran" > {store.authentication.userData.role !== "Retail" && ( diff --git a/src/pages/Membership/Membership.js b/src/pages/Membership/Membership.js index 8b443ca..e1d90b9 100644 --- a/src/pages/Membership/Membership.js +++ b/src/pages/Membership/Membership.js @@ -283,7 +283,7 @@ export const Membership = observer(() => { modalLoader.setLoading(true); try { const response=await store.membership.create(data); - response?.body?.statusCode === 200 + response?.body?.statusCode === 201 ? message.success("Berhasil Tambah Member Baru") : message.error("Gagal Tambah Member Baru"); await getData(); From db6287ca2c5a4f8faa5f89af1dced7350cf9f09c Mon Sep 17 00:00:00 2001 From: "ajat91.sudrajat" Date: Thu, 23 Dec 2021 16:22:23 +0700 Subject: [PATCH 10/22] Reparing Menu --- src/component/CategoryComponent.js | 4 ++-- src/component/CommissionComponent.js | 2 +- src/component/PartnerComponent.js | 2 +- src/component/ProductComponent.js | 4 ++-- src/component/SubcategoryComponent.js | 4 ++-- src/component/SupplierComponent.js | 4 ++-- src/pages/Membership/DetailUser.js | 2 +- src/pages/Membership/Membership.js | 2 +- 8 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/component/CategoryComponent.js b/src/component/CategoryComponent.js index 07d9b55..3a5610f 100644 --- a/src/component/CategoryComponent.js +++ b/src/component/CategoryComponent.js @@ -96,7 +96,7 @@ export const CategoryComponent = observer((props) => { modalLoader.setLoading(true); try { const response =await store.category.update(idData, data); - response?.body?.statusCode === 201 + response?.body?.statusCode === 201 || response?.body?.statusCode === 200 ? message.success("Berhasil Ubah Kategori") : message.error("Gagal Ubah Kategori"); } catch (e) { @@ -110,7 +110,7 @@ export const CategoryComponent = observer((props) => { modalLoader.setLoading(true); try { const response=await store.category.create(data); - response?.body?.statusCode === 201 + response?.body?.statusCode === 201 || response?.body?.statusCode === 200 ? message.success("Berhasil Tambah Kategori") : message.error("Gagal Tambah Kategori"); } catch (e) { diff --git a/src/component/CommissionComponent.js b/src/component/CommissionComponent.js index e9ceec3..97c7e69 100644 --- a/src/component/CommissionComponent.js +++ b/src/component/CommissionComponent.js @@ -53,7 +53,7 @@ export const CommissionComponent = observer((props) => { modalLoader.setLoading(true); try { const response=await store.commission.update(idData, data); - response?.body?.statusCode === 201 + response?.body?.statusCode === 201 || response?.body?.statusCode === 200 ? message.success("Berhasil Ubah Komisi") : message.error("Gagal Ubah Komisi"); } catch (e) { diff --git a/src/component/PartnerComponent.js b/src/component/PartnerComponent.js index 583f5f8..7ed747c 100644 --- a/src/component/PartnerComponent.js +++ b/src/component/PartnerComponent.js @@ -180,7 +180,7 @@ export const PartnerComponent = observer((props) => { try { const response = await store.partner.create(data); modalLoader.setLoading(false); - response?.body?.statusCode === 201 + response?.body?.statusCode === 201 || response?.body?.statusCode === 200 ? message.success("Berhasil Tambah Partner") : message.error("Gagal Tambah Partner"); } catch (e) { diff --git a/src/component/ProductComponent.js b/src/component/ProductComponent.js index db78249..a942cb0 100644 --- a/src/component/ProductComponent.js +++ b/src/component/ProductComponent.js @@ -167,7 +167,7 @@ export const ProductComponent = observer((props) => { modalLoader.setLoading(true); try { const response=await store.product.update(idData, data); - response?.body?.statusCode === 200 + response?.body?.statusCode === 201 || response?.body?.statusCode === 200 ? message.success("Berhasil Ubah Data Produk") : message.error("Gagal Ubah Data Produk"); } catch (e) { @@ -181,7 +181,7 @@ export const ProductComponent = observer((props) => { modalLoader.setLoading(true); try { const response=await store.product.create(data); - response?.body?.statusCode === 201 + response?.body?.statusCode === 201 || response?.body?.statusCode === 200 ? message.success("Berhasil Tambah Produk") : message.error("Gagal Tambah Produk"); } catch (e) { diff --git a/src/component/SubcategoryComponent.js b/src/component/SubcategoryComponent.js index 8be86fb..cec4f97 100644 --- a/src/component/SubcategoryComponent.js +++ b/src/component/SubcategoryComponent.js @@ -68,7 +68,7 @@ export const SubcategoryComponent = observer((props) => { modalLoader.setLoading(true); try { const response=await store.subcategory.update(idData, data); - response?.body?.statusCode === 201 + response?.body?.statusCode === 201 || response?.body?.statusCode === 200 ? message.success("Berhasil Ubah Data Sub Kategori") : message.error("Gagal Ubah Data Sub Kategori"); //await getData(); @@ -83,7 +83,7 @@ export const SubcategoryComponent = observer((props) => { modalLoader.setLoading(true); try { const response =await store.subcategory.create(data); - response?.body?.statusCode === 201 + response?.body?.statusCode === 201 || response?.body?.statusCode === 200 ? message.success("Berhasil Tambah Sub Kategori") : message.error("Gagal Tambah Sub Kategori"); } catch (e) { diff --git a/src/component/SupplierComponent.js b/src/component/SupplierComponent.js index 2a30c07..331f028 100644 --- a/src/component/SupplierComponent.js +++ b/src/component/SupplierComponent.js @@ -161,7 +161,7 @@ export const SupplierComponent = observer((props) => { try { modalLoader.setLoading(true); const response=await store.supplier.update(idData, data); - response?.body?.statusCode === 201 + response?.body?.statusCode === 201 || response?.body?.statusCode === 200 ? message.success("Berhasil Ubah Data Supplier") : message.error("Gagal Ubah Data Supplier"); } catch (e) { @@ -177,7 +177,7 @@ export const SupplierComponent = observer((props) => { try { modalLoader.setLoading(true); const response=await store.supplier.create(data); - response?.body?.statusCode === 201 + response?.body?.statusCode === 201 || response?.body?.statusCode === 200 ? message.success("Berhasil Tambah Supplier Baru") : message.error("Gagal Tambah Supplier Baru"); } catch (e) { diff --git a/src/pages/Membership/DetailUser.js b/src/pages/Membership/DetailUser.js index 7f6f2a7..ad6fb29 100644 --- a/src/pages/Membership/DetailUser.js +++ b/src/pages/Membership/DetailUser.js @@ -57,7 +57,7 @@ export const DetailUser = observer(() => { const response = await store.membership.changeStatus(id, status); modalLoader.setLoading(false); - response?.body?.statusCode === 201 + response?.body?.statusCode === 201 || response?.body?.statusCode === 200 ? message.success(`Success ${status2} Membership`) : message.error(`Failed ${status2} Membership`); await getData(); diff --git a/src/pages/Membership/Membership.js b/src/pages/Membership/Membership.js index e1d90b9..cbfa175 100644 --- a/src/pages/Membership/Membership.js +++ b/src/pages/Membership/Membership.js @@ -283,7 +283,7 @@ export const Membership = observer(() => { modalLoader.setLoading(true); try { const response=await store.membership.create(data); - response?.body?.statusCode === 201 + response?.body?.statusCode === 201 || response?.body?.statusCode === 200 ? message.success("Berhasil Tambah Member Baru") : message.error("Gagal Tambah Member Baru"); await getData(); From 1a0a1756b0496d6b554238d73cc69ffacffd40b6 Mon Sep 17 00:00:00 2001 From: caturbgs Date: Thu, 23 Dec 2021 16:30:03 +0700 Subject: [PATCH 11/22] chore: move action button into detail user --- src/pages/Membership/DetailUser.js | 299 +++++++++--------------- src/pages/Membership/Membership.js | 52 ++--- src/pages/Membership/MembershipModal.js | 190 +++++++-------- src/store/membership.js | 26 ++- 4 files changed, 246 insertions(+), 321 deletions(-) diff --git a/src/pages/Membership/DetailUser.js b/src/pages/Membership/DetailUser.js index ad6fb29..9607112 100644 --- a/src/pages/Membership/DetailUser.js +++ b/src/pages/Membership/DetailUser.js @@ -1,24 +1,13 @@ -import React, { useContext, useEffect, useState } from "react"; -import { - Button, - Card, - Col, - Row, - Table, - Typography, - Tag, - Space, - message, -} 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, DownloadOutlined } from "@ant-design/icons"; -import { format, parseISO } from "date-fns"; -import { ModalLoaderContext } from "../../utils/modal"; -import { useParams } from "react-router-dom"; -import { MembershipModal } from "./MembershipModal"; +import React, {useContext, useEffect, useState} from "react"; +import {Button, Card, Col, message, Row, Space, Table, Tag, 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 {format, parseISO} from "date-fns"; +import {ModalLoaderContext} from "../../utils/modal"; +import {useParams} from "react-router-dom"; +import {MembershipModal} from "./MembershipModal"; const {Title, Text} = Typography; @@ -36,19 +25,24 @@ export const DetailUser = observer(() => { (async () => { modalLoader.setLoading(true); await getData(); - await Promise.allSettled([ - store.transaction.getDataHistoryTopUp(id), - store.membership.getDetail(id), - ]); modalLoader.setLoading(false); })(); + + return () => { + store.membership.dataDetail = {}; + store.transaction.dataHistoryTopUp = []; + }; }, []); const getData = async () => { - store.authentication.userData.role === "Admin" - ? await store.membership.getData() - : await store.membership.getDataBySuperior(); + const isAdmin = store.authentication.userData.role === "Admin"; + await Promise.allSettled([ + store.transaction.getDataHistoryTopUp(id), + store.membership.getDetail(id), + store.role.getData(isAdmin) + ]); }; + const changeStatus = async (id, isActive) => { const status = isActive ? "inactive" : "active"; const status2 = isActive ? "Inactivating" : "Activating"; @@ -69,46 +63,42 @@ export const DetailUser = observer(() => { 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); + } - if (initialData.id) { - setConfirmLoading(true); - modalLoader.setLoading(true); - try { - 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" - ); - await getData(); - modalLoader.setLoading(false); - } catch (e) { - modalLoader.setLoading(true); + initialData.isChangePassword + ? "Success Change Member Password" + : "Success Update Data Member"); + } else { message.error( - initialData.isChangePassword - ? "Failed Update Member Password" - : "Failed Update Data Member" - ); - } - setConfirmLoading(false); - setVisibleModal(false); - } else { - setConfirmLoading(true); - modalLoader.setLoading(true); - 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"); + initialData.isChangePassword + ? "Failed Change Member Password" + : "Failed Update Data Member"); } + await getData(); + } catch (e) { modalLoader.setLoading(false); - setConfirmLoading(false); - setVisibleModal(false); - setInitialData({}); + message.error( + initialData.isChangePassword + ? "Failed Update Member Password" + : "Failed Update Data Member" + ); } + modalLoader.setLoading(false); + setConfirmLoading(false); }; + const columns = [ { title: "Amount", @@ -132,62 +122,12 @@ export const DetailUser = observer(() => { dataIndex: "isActive", key: "isActive", render: (text, record) => ( - - {record?.isActive === true ? " ACTIVE" : "INACTIVE"} - - ), - }, - { - title: "Action", - key: "action", - render: (text, record) => ( - - {/* {store.authentication.userData.role === "Admin" && */} - - {/* } */} - {/* {store.authentication.userData.role === "Admin" && */} - - {/* } - {store.authentication.userData.role === "Admin" && */} - - {/* } */} - + {store.membership.dataDetail.isActive === true ? " ACTIVE" : "INACTIVE"} + ), }, ]; @@ -206,6 +146,7 @@ export const DetailUser = observer(() => { name: Detail User, }, ]; + return (
@@ -224,7 +165,7 @@ export const DetailUser = observer(() => { Username
- {store.membership.dataDetail.superior?.username} + {store.membership.dataDetail.username}Role @@ -246,26 +187,64 @@ export const DetailUser = observer(() => { {store.membership.dataDetail.isActive === true - ? "Aktif" - : "Inaktif"} + ? "Aktif" + : "Inaktif"} - {/* - - - - Saldo - - - - - {store.transaction?.data.amount} - - - - */} + + Action User Detail + + {store.authentication.userData.role === "Admin" && + + } + {store.authentication.userData.role === "Admin" && + + } + {store.authentication.userData.role === "Admin" && + + } + + @@ -273,64 +252,16 @@ export const DetailUser = observer(() => { History Top Up - - {/* */}
- {/* { - 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, "")} - /> - - -
*/} { const history = useHistory(); const [form] = Form.useForm(); @@ -337,11 +319,11 @@ export const Membership = observer(() => { dataSource={store.membership.data} bordered pagination={{ - pageSize: store.membership.pageSize, - total: store.membership.total_data, - current: store.membership.page + 1, - showSizeChanger: true, - simple: false, + pageSize: store.membership.pageSize, + total: store.membership.totalData, + current: store.membership.page + 1, + showSizeChanger: true, + simple: false, }} onChange={async (page) => { let pageNumber = page.current; @@ -359,17 +341,17 @@ export const Membership = observer(() => { itemLayout="horizontal" position={"top"} pagination={{ - onChange: async (page) => { - store.membership.pageSize = page.pageSize; - store.membership.page = page.current - 1; - modalLoader.setLoading(true); - await getData(); - modalLoader.setLoading(false); - }, - pageSize: store.membership.pageSize, - total: store.membership.total_data, - current: store.membership.page + 1, - style: { marginBottom: "1rem", marginRight: "1rem" }, + onChange: async (page) => { + store.membership.pageSize = page.pageSize; + store.membership.page = page.current - 1; + modalLoader.setLoading(true); + await getData(); + modalLoader.setLoading(false); + }, + pageSize: store.membership.pageSize, + total: store.membership.totalData, + current: store.membership.page + 1, + style: {marginBottom: "1rem", marginRight: "1rem"}, }} dataSource={store.membership.data} style={{ padding: 0 }} diff --git a/src/pages/Membership/MembershipModal.js b/src/pages/Membership/MembershipModal.js index 4a21904..f506db8 100644 --- a/src/pages/Membership/MembershipModal.js +++ b/src/pages/Membership/MembershipModal.js @@ -12,100 +12,100 @@ export const MembershipModal = ({ const {Option} = Select; const store = useStore(); - return ( - { - form.resetFields(); - onCancel(); - }} - onOk={() => { - form - .validateFields() - .then((values) => { - let input = values; - if (initialData.id) - input.username = initialData.username; + return ( + { + form.resetFields(); + onCancel(); + }} + onOk={() => { + form + .validateFields() + .then((values) => { + let input = values; + if (initialData.id) + input.username = initialData.username; - onCreate(input); - form.resetFields(); - }) - .catch((info) => { - console.log("Validate Failed:", info); - }); - }} - > -
- {((initialData.id && !initialData.isChangePassword) || - !initialData.id) && ( - - - - )} - {!initialData.id && ( - - - - )} - {((initialData.id && initialData.isChangePassword) || - !initialData.id) && ( - - - - )} - {((initialData.id && !initialData.isChangePassword) || - !initialData.id) && ( - - - - )} - {((initialData.id && !initialData.isChangePassword) || - !initialData.id) && ( - - - - )} - -
- ); + onCreate(input); + form.resetFields(); + }) + .catch((info) => { + console.log("Validate Failed:", info); + }); + }} + > +
+ {((initialData.id && !initialData.isChangePassword) || + !initialData.id) && ( + + + + )} + {!initialData.id && ( + + + + )} + {((initialData.id && initialData.isChangePassword) || + !initialData.id) && ( + + + + )} + {((initialData.id && !initialData.isChangePassword) || + !initialData.id) && ( + + + + )} + {((initialData.id && !initialData.isChangePassword) || + !initialData.id) && ( + + + + )} + +
+ ); }; diff --git a/src/store/membership.js b/src/store/membership.js index 01bdd34..5fb1f9d 100644 --- a/src/store/membership.js +++ b/src/store/membership.js @@ -5,8 +5,9 @@ export class Membership { page = 0; pageSize = 10 data = []; - total_data = 0 - dataDetail=[] + totalData = 0; + + dataDetail = {}; constructor(ctx) { this.ctx = ctx; @@ -19,22 +20,23 @@ export class Membership { this.data = response.body.data.map((item, idx) => { item.key = idx; item.name = item?.user_detail?.name; - item.phone_number = item?.user_detail?.phone_number;item.roleId = item?.roles.id; + item.phone_number = item?.user_detail?.phone_number; + item.roleId = item?.roles.id; item.roleName = item?.roles.name; return item }) ?? [] - this.total_data = response?.body?.count ?? 0 + this.totalData = response?.body?.count ?? 0 } catch (e) { console.error(e); } } + async getDetail(id) { try { const response = await http.get(`/users/`+id); console.log(response,'Data Detail') this.dataDetail = response.body.data - this.total_data = response?.body?.count ?? 0 } catch (e) { console.error(e); } @@ -46,12 +48,13 @@ export class Membership { this.data = response.body.data.map((item, idx) => { item.key = idx; item.name = item?.user_detail?.name; - item.phone_number = item?.user_detail?.phone_number;item.roleId = item?.roles.id; + item.phone_number = item?.user_detail?.phone_number; + item.roleId = item?.roles.id; item.roleName = item?.roles?.name; return item }) ?? [] - this.total_data = response?.body?.count ?? 0 + this.totalData = response?.body?.count ?? 0 } catch (e) { console.error(e); } @@ -75,6 +78,15 @@ export class Membership { } } + async changePassword(id, data) { + try { + const response = await http.put('/users/change-password/' + id).send(data); + return response; + } catch (e) { + console.error(e); + } + } + async delete(id) { try { const response = await http.del('/users/' + id); From 78d00da35d1654e54db09e6410cd75ad47802f72 Mon Sep 17 00:00:00 2001 From: caturbgs Date: Thu, 23 Dec 2021 16:35:56 +0700 Subject: [PATCH 12/22] chore: remove ununsed code to update user --- src/pages/Membership/MembershipModal.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/pages/Membership/MembershipModal.js b/src/pages/Membership/MembershipModal.js index f506db8..169850f 100644 --- a/src/pages/Membership/MembershipModal.js +++ b/src/pages/Membership/MembershipModal.js @@ -32,11 +32,7 @@ export const MembershipModal = ({ form .validateFields() .then((values) => { - let input = values; - if (initialData.id) - input.username = initialData.username; - - onCreate(input); + onCreate(values); form.resetFields(); }) .catch((info) => { From 3be7561c3c51fcb5ef82dbc14525347e6bdeac06 Mon Sep 17 00:00:00 2001 From: caturbgs Date: Thu, 23 Dec 2021 16:48:52 +0700 Subject: [PATCH 13/22] chore: handler errors upload excel product --- src/pages/Product/Product.js | 38 +++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/src/pages/Product/Product.js b/src/pages/Product/Product.js index ee4fd07..8b05cc7 100644 --- a/src/pages/Product/Product.js +++ b/src/pages/Product/Product.js @@ -72,17 +72,21 @@ export const Product = observer(() => { const uploadHandler = async (args) => { const file = args.file; - const responseUpload = await store.product.uploadExcel(file); + try { + const responseUpload = await store.product.uploadExcel(file); + + if (responseUpload.status === 201) { + message.success("Success upload excel!"); + } else { + message.error("Failed upload excel!"); + } - if (responseUpload.status === 201) { - message.success("Success upload excel!"); - } else { - message.error("Failed upload excel!"); setLoading(false); + const responseUploadProduct = await handleUploadProduct(responseUpload); + } catch (e) { + setLoading(false); + message.error("Failed upload excel!"); } - - const responseUploadProduct = await handleUploadProduct(responseUpload); - setLoading(false); }; const handleChange = (info) => { @@ -94,15 +98,21 @@ export const Product = observer(() => { }; const handleUploadProduct = async (data) => { - const response = await store.product.uploadProduct({fileName: data.body.filename}); + try { + const response = await store.product.uploadProduct({fileName: data.body.filename}); - if (response.status === 201) { - message.success("Success Create Product by Excel!"); - } else { - message.error("Failed Create Product by Excel!"); + if (response.status === 201) { + message.success("Success Create Product by Excel!"); + } else { + message.error("Failed Create Product by Excel!"); + } setLoading(false); + await store.product.getData(); + return response; + } catch (e) { + setLoading(false); + message.error("Failed Create Product by Excel!"); } - return response; } const loadingState = ( From 4d40a6f475ed2b310bd460312b2fe2fb8517c4ef Mon Sep 17 00:00:00 2001 From: caturbgs Date: Thu, 23 Dec 2021 16:50:34 +0700 Subject: [PATCH 14/22] feat: force reload if logout --- src/store/authentication.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/store/authentication.js b/src/store/authentication.js index 0edda9e..2d2ee4d 100644 --- a/src/store/authentication.js +++ b/src/store/authentication.js @@ -63,5 +63,6 @@ export class Authentication { TokenUtil.clearAccessToken(); TokenUtil.persistToken(); this.isLoggedIn = false; + window.location.reload(); } } From bd2696efca820114a59a363898178bdf705335f3 Mon Sep 17 00:00:00 2001 From: "ajat91.sudrajat" Date: Thu, 23 Dec 2021 17:05:03 +0700 Subject: [PATCH 15/22] Reparing Menu --- src/component/CategoryComponent.js | 26 ----- src/component/ProductComponent.js | 25 ++--- src/pages/Membership/DetailUser.js | 2 +- src/pages/Membership/Membership.js | 153 ++++++++++------------------- 4 files changed, 61 insertions(+), 145 deletions(-) diff --git a/src/component/CategoryComponent.js b/src/component/CategoryComponent.js index 3a5610f..ffeda10 100644 --- a/src/component/CategoryComponent.js +++ b/src/component/CategoryComponent.js @@ -34,32 +34,6 @@ export const CategoryComponent = observer((props) => { dataIndex: "name", key: "name", }, - // { - // title: "Gangguan", - // dataIndex: "status", - // key: "status", - // render: (text, record) => ( - // - // {capitalize(record?.status)} - // - // ), - // }, - // { - // title: "Tersedia", - // dataIndex: "tersedia", - // key: "tersedia", - // render: (text, record) => ( - // - // {record?.status === "ACTIVE" ? " Ya" : "Tidak"} - // - // ), - // }, { title: "Action", key: "action", diff --git a/src/component/ProductComponent.js b/src/component/ProductComponent.js index a942cb0..5af5ac9 100644 --- a/src/component/ProductComponent.js +++ b/src/component/ProductComponent.js @@ -79,23 +79,16 @@ export const ProductComponent = observer((props) => { currency: "IDR", }).format(text), }, - // { - // title: "Gangguan", - // dataIndex: "status", - // key: "status", - // render: (text, record) => ( - // - // {capitalize(record?.status)} - // - // ), - // }, { title: "Supplier", - dataIndex: "supplier", - key: "supplier", + dataIndex: "supplier_name", + key: "supplier_name", + + }, + { + title: "Sub Category", + dataIndex: "sub_categories_name", + key: "sub_categories_name", }, { title: "Tersedia", @@ -128,6 +121,8 @@ export const ProductComponent = observer((props) => { }, ]; if (store.authentication.userData.role !== "Admin") columns.pop(); + //if (store.authentication.userData.role !== "Admin") columns.shift(); + if (store.authentication.userData.role !== "Admin") delete columns[4]; const deleteData = async (id) => { try { console.log(id); diff --git a/src/pages/Membership/DetailUser.js b/src/pages/Membership/DetailUser.js index 9607112..c0afcee 100644 --- a/src/pages/Membership/DetailUser.js +++ b/src/pages/Membership/DetailUser.js @@ -143,7 +143,7 @@ export const DetailUser = observer(() => { }, { route: LINKS.USER_DETAIL, - name: Detail User, + name: Detail Anggota, }, ]; diff --git a/src/pages/Membership/Membership.js b/src/pages/Membership/Membership.js index e0db3b2..1b8b73e 100644 --- a/src/pages/Membership/Membership.js +++ b/src/pages/Membership/Membership.js @@ -1,13 +1,27 @@ -import React, {useContext, useEffect, useState} from "react"; -import {Button, Card, Col, Divider, Form, InputNumber, List, message, Modal, Row, Space, Table, Tag} from "antd"; -import {useStore} from "../../utils/useStore"; -import {observer} from "mobx-react-lite"; -import {DownloadOutlined, PlusSquareOutlined} 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"; +import React, { useContext, useEffect, useState } from "react"; +import { + Button, + Card, + Col, + Divider, + Form, + InputNumber, + List, + message, + Modal, + Row, + Space, + Table, + Tag, +} from "antd"; +import { useStore } from "../../utils/useStore"; +import { observer } from "mobx-react-lite"; +import { DownloadOutlined, PlusSquareOutlined } 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(); @@ -129,75 +143,11 @@ export const Membership = observer(() => { currency: "IDR", }).format(text), }, - { - title: "Status", - dataIndex: "isActive", - key: "isActive", - render: (text, record) => ( - - {record?.isActive === true ? " ACTIVE" : "INACTIVE"} - - ), - }, { title: "Action", key: "action", render: (text, record) => ( - {/* {store.authentication.userData.role === "Admin" && */} - - {/* } */} - {/* */} - {/* {store.authentication.userData.role === "Admin" && */} - - {/* } - {store.authentication.userData.role === "Admin" && */} - - {/* } */} - {/* {store.authentication.userData.role === "Admin" && ( */} - - {/* ) */} - {/* } */} + ), }, @@ -264,7 +211,7 @@ export const Membership = observer(() => { setConfirmLoading(true); modalLoader.setLoading(true); try { - const response=await store.membership.create(data); + const response = await store.membership.create(data); response?.body?.statusCode === 201 || response?.body?.statusCode === 200 ? message.success("Berhasil Tambah Member Baru") : message.error("Gagal Tambah Member Baru"); @@ -319,11 +266,11 @@ export const Membership = observer(() => { dataSource={store.membership.data} bordered pagination={{ - pageSize: store.membership.pageSize, - total: store.membership.totalData, - current: store.membership.page + 1, - showSizeChanger: true, - simple: false, + pageSize: store.membership.pageSize, + total: store.membership.totalData, + current: store.membership.page + 1, + showSizeChanger: true, + simple: false, }} onChange={async (page) => { let pageNumber = page.current; @@ -341,17 +288,17 @@ export const Membership = observer(() => { itemLayout="horizontal" position={"top"} pagination={{ - onChange: async (page) => { - store.membership.pageSize = page.pageSize; - store.membership.page = page.current - 1; - modalLoader.setLoading(true); - await getData(); - modalLoader.setLoading(false); - }, - pageSize: store.membership.pageSize, - total: store.membership.totalData, - current: store.membership.page + 1, - style: {marginBottom: "1rem", marginRight: "1rem"}, + onChange: async (page) => { + store.membership.pageSize = page.pageSize; + store.membership.page = page.current - 1; + modalLoader.setLoading(true); + await getData(); + modalLoader.setLoading(false); + }, + pageSize: store.membership.pageSize, + total: store.membership.totalData, + current: store.membership.page + 1, + style: { marginBottom: "1rem", marginRight: "1rem" }, }} dataSource={store.membership.data} style={{ padding: 0 }} From 2349912c7376f4e46caa64ed7775d6a2144e324e Mon Sep 17 00:00:00 2001 From: "ajat91.sudrajat" Date: Thu, 23 Dec 2021 17:06:49 +0700 Subject: [PATCH 16/22] Repair Menu --- src/component/ProductComponent.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/component/ProductComponent.js b/src/component/ProductComponent.js index 5af5ac9..0087f07 100644 --- a/src/component/ProductComponent.js +++ b/src/component/ProductComponent.js @@ -121,7 +121,6 @@ export const ProductComponent = observer((props) => { }, ]; if (store.authentication.userData.role !== "Admin") columns.pop(); - //if (store.authentication.userData.role !== "Admin") columns.shift(); if (store.authentication.userData.role !== "Admin") delete columns[4]; const deleteData = async (id) => { try { From 71e6f00fcd8da6f140368b376665fd677e331da7 Mon Sep 17 00:00:00 2001 From: "ajat91.sudrajat" Date: Thu, 23 Dec 2021 17:46:22 +0700 Subject: [PATCH 17/22] Repair Menu --- src/pages/Transaction/Product.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/Transaction/Product.js b/src/pages/Transaction/Product.js index 2ac762c..dffb907 100644 --- a/src/pages/Transaction/Product.js +++ b/src/pages/Transaction/Product.js @@ -95,10 +95,10 @@ export const Product = observer(() => { Produk & Nominal
- + /> */} {store.transaction.data.length != 0 && ( From 5229359425dad31416ded99a7d00f6487510813b Mon Sep 17 00:00:00 2001 From: "ajat91.sudrajat" Date: Thu, 23 Dec 2021 19:18:27 +0700 Subject: [PATCH 18/22] Repair Menu --- src/pages/Membership/Membership.js | 27 +++++++++++++++++++++++++-- src/store/product.js | 2 +- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/pages/Membership/Membership.js b/src/pages/Membership/Membership.js index 1b8b73e..fb81a4b 100644 --- a/src/pages/Membership/Membership.js +++ b/src/pages/Membership/Membership.js @@ -332,6 +332,29 @@ export const Membership = observer(() => { Saldo System : {item.coa.amount} {" "}
+ +

} @@ -343,7 +366,7 @@ export const Membership = observer(() => { margin: 0, }} > - + */}

diff --git a/src/store/product.js b/src/store/product.js index 1ccd96a..65b51f2 100644 --- a/src/store/product.js +++ b/src/store/product.js @@ -36,7 +36,7 @@ export class Product { async getData() { try { const response = await http.get(`/product/all?supplier=${this.filterSupplier}&sub-category=${this.filterSubCategory}&page=${this.page}&pageSize=${this.pageSize}`); - console.log(response) + //console.log(response) this.data = response.body.data.map((item, idx) => { item.key = idx; return item From 884a23ae80754279eac5ec002be8f97b3aca14b0 Mon Sep 17 00:00:00 2001 From: "ajat91.sudrajat" Date: Thu, 23 Dec 2021 19:32:29 +0700 Subject: [PATCH 19/22] Repair Menu --- src/pages/Config/Partner.js | 2 +- src/pages/Payback/Payback.js | 2 +- src/pages/Payback/PaybackCreated.js | 2 +- src/pages/Product/Category.js | 2 +- src/pages/Product/Product.js | 2 +- src/pages/Product/ProductDetail.js | 4 ++-- src/pages/Product/Subcategory.js | 2 +- src/pages/Profile/Profile.js | 2 +- src/pages/Transaction/Transaction.js | 2 +- src/store/product.js | 2 +- 10 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/pages/Config/Partner.js b/src/pages/Config/Partner.js index d7226e9..c43e6b6 100644 --- a/src/pages/Config/Partner.js +++ b/src/pages/Config/Partner.js @@ -40,7 +40,7 @@ export const Partner = observer(() => { }, { route: LINKS.PARTNER, - name: Partner, + name: Rekanan, }, ]; diff --git a/src/pages/Payback/Payback.js b/src/pages/Payback/Payback.js index 79ec6c0..80c0c48 100644 --- a/src/pages/Payback/Payback.js +++ b/src/pages/Payback/Payback.js @@ -167,7 +167,7 @@ export const Payback = observer(() => { }, { route: LINKS.PAYBACK, - name: Payback Confirmation, + name: Konfirmasi Pembayaran, }, ]; diff --git a/src/pages/Payback/PaybackCreated.js b/src/pages/Payback/PaybackCreated.js index ee53c93..8420b1a 100644 --- a/src/pages/Payback/PaybackCreated.js +++ b/src/pages/Payback/PaybackCreated.js @@ -84,7 +84,7 @@ export const PaybackCreated = observer(() => { }, { route: LINKS.PAYBACK_CREATED, - name: Payback Created, + name: Buat Pembayaran, }, ]; diff --git a/src/pages/Product/Category.js b/src/pages/Product/Category.js index c6142ec..c2dd230 100644 --- a/src/pages/Product/Category.js +++ b/src/pages/Product/Category.js @@ -41,7 +41,7 @@ export const Category = observer(() => { }, { route: LINKS.CATEGORY, - name: Category, + name: Kategori, }, ]; diff --git a/src/pages/Product/Product.js b/src/pages/Product/Product.js index 8b05cc7..3f87bcd 100644 --- a/src/pages/Product/Product.js +++ b/src/pages/Product/Product.js @@ -46,7 +46,7 @@ export const Product = observer(() => { }, { route: LINKS.PRODUCT, - name: Product, + name: Produk, }, ]; diff --git a/src/pages/Product/ProductDetail.js b/src/pages/Product/ProductDetail.js index c04179e..cbe2111 100644 --- a/src/pages/Product/ProductDetail.js +++ b/src/pages/Product/ProductDetail.js @@ -23,11 +23,11 @@ export const ProductDetail = observer(() => { }, { route: LINKS.PRODUCT, - name: Product, + name: Produk, }, { route: LINKS.PRODUCT_DETAIL, - name: Product Detail, + name: Detail Produk, }, ]; diff --git a/src/pages/Product/Subcategory.js b/src/pages/Product/Subcategory.js index a2c0292..08e26cb 100644 --- a/src/pages/Product/Subcategory.js +++ b/src/pages/Product/Subcategory.js @@ -45,7 +45,7 @@ export const Subcategory = observer(() => { }, { route: LINKS.SUBCATEGORY, - name: Sub Category, + name: Sub Kategori, }, ]; diff --git a/src/pages/Profile/Profile.js b/src/pages/Profile/Profile.js index 8147a9f..def501f 100644 --- a/src/pages/Profile/Profile.js +++ b/src/pages/Profile/Profile.js @@ -21,7 +21,7 @@ export const Profile = observer(() => { }, { route: LINKS.PROFILE, - name: Profile, + name: Profil, }, ]; diff --git a/src/pages/Transaction/Transaction.js b/src/pages/Transaction/Transaction.js index 4d7a9cc..a71111e 100644 --- a/src/pages/Transaction/Transaction.js +++ b/src/pages/Transaction/Transaction.js @@ -50,7 +50,7 @@ export const Transaction = observer(() => { }, { route: LINKS.TRANSACTION, - name: Transaction, + name: Transaksi, }, ]; diff --git a/src/store/product.js b/src/store/product.js index 65b51f2..1ccd96a 100644 --- a/src/store/product.js +++ b/src/store/product.js @@ -36,7 +36,7 @@ export class Product { async getData() { try { const response = await http.get(`/product/all?supplier=${this.filterSupplier}&sub-category=${this.filterSubCategory}&page=${this.page}&pageSize=${this.pageSize}`); - //console.log(response) + console.log(response) this.data = response.body.data.map((item, idx) => { item.key = idx; return item From 52a75ff081226c487b0e7f0bb977b936c2d68026 Mon Sep 17 00:00:00 2001 From: caturbgs Date: Thu, 23 Dec 2021 21:31:37 +0700 Subject: [PATCH 20/22] feat: move upload into modal --- src/pages/Product/Product.js | 175 +++++++++++++++++++++++++++-------- 1 file changed, 134 insertions(+), 41 deletions(-) diff --git a/src/pages/Product/Product.js b/src/pages/Product/Product.js index 3f87bcd..6e77e97 100644 --- a/src/pages/Product/Product.js +++ b/src/pages/Product/Product.js @@ -1,6 +1,6 @@ import React, {useContext, useEffect, useState} from "react"; -import {Button, Card, Col, Input, message, Row, Upload} from "antd"; -import {FilterOutlined, LoadingOutlined, UploadOutlined,} from "@ant-design/icons"; +import {Button, Card, Col, Form, Input, message, Modal, Row, Select, Upload} from "antd"; +import {FilterOutlined, PlusOutlined, UploadOutlined,} from "@ant-design/icons"; import {BreadcumbComponent} from "../../component/BreadcumbComponent"; import {useStore} from "../../utils/useStore"; import {observer} from "mobx-react-lite"; @@ -9,15 +9,22 @@ import {LINKS} from "../../routes/app"; import {ModalLoaderContext} from "../../utils/modal"; const {Search} = Input; +const {Option} = Select; export const Product = observer(() => { const store = useStore(); const modalLoader = useContext(ModalLoaderContext); const [loading, setLoading] = useState(false); + const [visibleModalUpload, setVisibleModalUpload] = useState(false); + const [excel, setExcel] = useState(""); + const [fileList, setFileList] = useState([]); + const [form] = Form.useForm(); useEffect(() => { const init = async () => { try { + store.supplier.page = 0; + store.supplier.pageSize = 1000; modalLoader.setLoading(true); await Promise.allSettled([ store.supplier.getData(), @@ -37,6 +44,10 @@ export const Product = observer(() => { }; init(); + + return () => { + store.supplier.pageSize = 10; + }; }, []); const routeData = [ @@ -73,16 +84,21 @@ export const Product = observer(() => { const uploadHandler = async (args) => { const file = args.file; try { - const responseUpload = await store.product.uploadExcel(file); + const response = await store.product.uploadExcel(file); - if (responseUpload.status === 201) { + if (response.status === 201) { message.success("Success upload excel!"); } else { message.error("Failed upload excel!"); } - setLoading(false); - const responseUploadProduct = await handleUploadProduct(responseUpload); + setFileList([{ + uid: '-1', + name: response.body.filename, + status: 'done', + url: '', + }]); + setExcel(response.body.filename); } catch (e) { setLoading(false); message.error("Failed upload excel!"); @@ -99,27 +115,40 @@ export const Product = observer(() => { const handleUploadProduct = async (data) => { try { - const response = await store.product.uploadProduct({fileName: data.body.filename}); + const response = await store.product.uploadProduct(data); if (response.status === 201) { message.success("Success Create Product by Excel!"); } else { message.error("Failed Create Product by Excel!"); } - setLoading(false); - await store.product.getData(); return response; } catch (e) { setLoading(false); message.error("Failed Create Product by Excel!"); } - } + }; - const loadingState = ( -
- {loading ? : null} -
- ); + const handleCancel = () => { + form.resetFields(); + setFileList([]); + setExcel(""); + setVisibleModalUpload(false); + }; + + const handleSubmit = async (data) => { + const request = { + fileName: excel, + supplierCode: data.supplierCode + }; + const responseUploadProduct = await handleUploadProduct(request); + + await store.product.getData(); + setLoading(false); + setFileList([]); + setExcel(""); + setVisibleModalUpload(false); + }; return (
@@ -162,35 +191,99 @@ export const Product = observer(() => { textAlign: "right", }} > - beforeUpload(file)} - customRequest={(args) => uploadHandler(args)} - onRemove={(file) => { - setLoading(false); + - - {loadingState} + Tambah Produk +
- - - - )} - - - + + + + )} + + + + { + form.resetFields(); + handleCancel(); + }} + onOk={() => { + form + .validateFields() + .then((values) => { + console.log(values, "isi form"); + handleSubmit(values); + form.resetFields(); + }) + .catch((info) => { + console.error("Validate Failed:", info); + }); + }} + > +
+ + beforeUpload(file)} + customRequest={(args) => uploadHandler(args)} + onRemove={(file) => { + setLoading(false); + setFileList([]); + setExcel(""); + }} + > +
+ +
+
+
+ + + + +
+ ); }); From 097782d791d00401a7a8cd8a01c310975f38ea68 Mon Sep 17 00:00:00 2001 From: caturbgs Date: Thu, 23 Dec 2021 21:51:37 +0700 Subject: [PATCH 21/22] fix: role button new product admin --- src/pages/Product/Product.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/pages/Product/Product.js b/src/pages/Product/Product.js index 6e77e97..7cdd86e 100644 --- a/src/pages/Product/Product.js +++ b/src/pages/Product/Product.js @@ -154,7 +154,6 @@ export const Product = observer(() => {
- {store.authentication.userData.role !== "Admin" && (
@@ -184,7 +183,7 @@ export const Product = observer(() => { }} /> */} -
{ > Tambah Produk -
+ } - )} From 98e7827247bf7d0e13cb4d017590e15c136f0c43 Mon Sep 17 00:00:00 2001 From: caturbgs Date: Thu, 23 Dec 2021 23:16:47 +0700 Subject: [PATCH 22/22] feat: add separated column in date and add pagination on price history on product detail --- src/component/ProductComponent.js | 21 +++---- src/pages/Product/ProductDetail.js | 96 +++++++++++++++--------------- src/store/product.js | 25 ++++---- 3 files changed, 69 insertions(+), 73 deletions(-) diff --git a/src/component/ProductComponent.js b/src/component/ProductComponent.js index 0087f07..293fffa 100644 --- a/src/component/ProductComponent.js +++ b/src/component/ProductComponent.js @@ -1,4 +1,4 @@ -import React, { useContext, useState } from "react"; +import React, {useContext, useState} from "react"; import { Button, Col, @@ -15,19 +15,19 @@ import { 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"; +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([]); @@ -109,10 +109,7 @@ export const ProductComponent = observer((props) => { render: (text, record) => ( - {store.product.dataDetailProduct.code} + {store.product?.dataDetailProduct?.code}Nama Produk- {store.product.dataDetailProduct.name} - - - Harga Beli - - - - {new Intl.NumberFormat("id-ID", { - style: "currency", - currency: "IDR", - }).format(store.product.dataDetailProduct.basePrice)} - - - - Harga Jual - - - - {new Intl.NumberFormat("id-ID", { - style: "currency", - currency: "IDR", - }).format(store.product.dataDetailProduct.price)} - + {store.product?.dataDetailProduct?.name}Supplier- {store.product.dataDetailProduct.supplier.name} + {store.product?.dataDetailProduct?.supplier?.name}Status- {store.product.dataDetailProduct.status} + {store.product?.dataDetailProduct?.status} @@ -174,9 +157,24 @@ export const ProductDetail = observer(() => { Filter */}
{ + let pageNumber = page.current; + store.product.pageSizePriceHistory = page.pageSize; + store.product.pagePriceHistory = pageNumber - 1; + modalLoader.setLoading(true); + await store.product.getPriceHistoryByProduct(id); + modalLoader.setLoading(false); + }} /> diff --git a/src/store/product.js b/src/store/product.js index 1ccd96a..36a8295 100644 --- a/src/store/product.js +++ b/src/store/product.js @@ -13,7 +13,7 @@ export class Product { uploadBtnProduct = false; pageCategories = 0; - pageSizeCategories = 10 + pageSizeCategories = 100; dataCategories = []; total_dataCategories = 0; @@ -22,11 +22,13 @@ export class Product { dataSubCategories = []; total_dataSubCategories = 0; filterCategory = null; - dataDetail=[] - dataDetailProduct=[] - pageGetDetail=0 - supplier=null + dataPriceHistory = []; + totalDataPriceHistory = 0; + pagePriceHistory = 0; + pageSizePriceHistory = 10 + + dataDetailProduct = {}; constructor(ctx) { this.ctx = ctx; @@ -72,22 +74,21 @@ export class Product { console.error(e); } } - async getDetail(id) { + + async getPriceHistoryByProduct(id) { try { - const response = await http.get(`/product/price-history/${id}?page=${this.pageGetDetail}&supplier=${this.supplier}`); - //console.log(response,' Detail') - this.dataDetail = response.body.data - this.total_data = response?.body?.count ?? 0 + const response = await http.get(`/product/price-history/${id}?page=${this.pagePriceHistory}&pageSize${this.pageSizePriceHistory}`); + this.dataPriceHistory = response.body.data + this.totalDataPriceHistory = response?.body?.count ?? 0 } catch (e) { console.error(e); } } + async getDetailProduct(id) { try { const response = await http.get(`/product/${id}`); - //console.log(response,' Detail Product') this.dataDetailProduct = response.body.data - this.total_data = response?.body?.count ?? 0 } catch (e) { console.error(e); }