feat: add modal loader for each API request

This commit is contained in:
Hasta Ragil Saputra
2021-12-21 09:00:31 +07:00
parent 178d52f5cc
commit 47578366a8
21 changed files with 1094 additions and 1110 deletions

View File

@@ -1,41 +1,27 @@
import React, {useEffect, useState} from "react";
import React, {useContext, useEffect, useState} from "react";
import {Button, Form, Input, message, Modal, Select, 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();
const [form] = Form.useForm();
const {Option} = Select;
const history = useHistory();
const [idData, setIdData] = useState("");
const [isChangePassword, setIsChangePassword] = useState(false);
const [confirmLoading, setConfirmLoading] = useState(false);
const [isLoading, setIsLoading] = useState(false);
useEffect(() => {
const init = async () => {
try {
setIsLoading(true);
await store.partner.getData();
setIsLoading(false);
} catch (e) {
setIsLoading(false);
}
};
init();
}, []);
const modalLoader = useContext(ModalLoaderContext);
const changeStatus = async (id, isActive) => {
const status = isActive ? "inactive" : "active";
const status2 = isActive ? "Inactivating" : "Activating";
modalLoader.setLoading(true);
try {
const response = await store.partner.changeStatus(id, status);
modalLoader.setLoading(false);
response?.body?.statusCode === 201
? message.success(`Success ${status2} Partner`)
: message.error(`Failed ${status2} Partner`);
@@ -92,7 +78,7 @@ export const PartnerComponent = observer((props) => {
render: (text, record) => (
<Tag
color={record?.status === true ? "processing" : "#E3E8EE"}
style={{ color: "#4F566B", cursor: "pointer" }}
style={{color: "#4F566B", cursor: "pointer"}}
>
{record?.status === true ? " ACTIVE" : "INACTIVE"}
</Tag>
@@ -121,8 +107,9 @@ export const PartnerComponent = observer((props) => {
const deleteData = async (id) => {
try {
console.log(id);
modalLoader.setLoading(true);
await store.partner.delete(id);
modalLoader.setLoading(false);
message.success("Data Berhasil Dihapus");
history.push(LINKS.PARTNER);
} catch (err) {
@@ -134,7 +121,7 @@ export const PartnerComponent = observer((props) => {
const handleDelete = (id) => {
Modal.confirm({
title: "Are you sure delete this record?",
icon: <ExclamationCircleOutlined />,
icon: <ExclamationCircleOutlined/>,
okText: "Yes",
okType: "primary",
cancelText: "Cancel",
@@ -155,9 +142,10 @@ export const PartnerComponent = observer((props) => {
const handleSubmit = async (data) => {
console.log(data, "isi data2");
if (idData !== "") {
setConfirmLoading(true);
modalLoader.setLoading(true);
try {
await store.partner.update(idData, data);
modalLoader.setLoading(false);
message.success(
isChangePassword
? "Failed Change Partner Password"
@@ -165,27 +153,27 @@ export const PartnerComponent = observer((props) => {
);
//await store.partner.getData()
} catch (e) {
modalLoader.setLoading(true);
message.error(
isChangePassword
? "Failed Change Partner Password"
: "Failed Update Data Partner"
);
}
setConfirmLoading(false);
store.partner.visibleModalPartner = false;
setIdData("");
form.resetFields();
} else {
setConfirmLoading(true);
modalLoader.setLoading(true);
try {
await store.partner.create(data);
message.success("Success Add New Partner");
//await store.partner.getData()
modalLoader.setLoading(false);
} catch (e) {
console.log(e, "apa errornya");
message.error("Failed Add Partner");
}
setConfirmLoading(false);
modalLoader.setLoading(false);
store.partner.visibleModalPartner = false;
setIdData("");
form.resetFields();
@@ -194,7 +182,7 @@ export const PartnerComponent = observer((props) => {
return (
<div>
<Table
style={{ textAlign: "center" }}
style={{textAlign: "center"}}
columns={columns}
dataSource={store.partner.data}
bordered
@@ -209,9 +197,9 @@ export const PartnerComponent = observer((props) => {
let pageNumber = page.current;
store.partner.pageSize = page.pageSize;
store.partner.page = pageNumber - 1;
//store.membership.isLoading = true;
modalLoader.setLoading(true);
await store.partner.getData();
// store.membership.isLoading = false;
modalLoader.setLoading(false);
}}
/>
@@ -221,8 +209,8 @@ export const PartnerComponent = observer((props) => {
isChangePassword
? "Change Member Password"
: idData
? "Edit Partner"
: "Create a new partner"
? "Edit Partner"
: "Create a new partner"
}
okText={idData ? "Edit" : "Create"}
cancelText="Cancel"
@@ -250,11 +238,11 @@ export const PartnerComponent = observer((props) => {
label="Name"
rules={[
idData
? { required: false }
: { required: true, message: "Please input password name!" },
? {required: false}
: {required: true, message: "Please input password name!"},
]}
>
<Input />
<Input/>
</Form.Item>
)}
{!idData && (
@@ -263,11 +251,11 @@ export const PartnerComponent = observer((props) => {
label="Owner"
rules={[
idData
? { required: false }
: { required: true, message: "Please input password owner!" },
? {required: false}
: {required: true, message: "Please input password owner!"},
]}
>
<Input />
<Input/>
</Form.Item>
)}
{((idData && isChangePassword) || !idData) && (
@@ -276,27 +264,27 @@ export const PartnerComponent = observer((props) => {
label="Password Account"
rules={[
idData
? { required: false }
? {required: false}
: {
required: true,
message: "Please input password account!",
},
required: true,
message: "Please input password account!",
},
]}
>
<Input />
<Input/>
</Form.Item>
)}
{!idData && (
{!idData && (
<Form.Item
name="phone_number"
label="Phone Number"
rules={[
idData
? { required: false }
: { required: true, message: "Please input password phone number!" },
? {required: false}
: {required: true, message: "Please input password phone number!"},
]}
>
<Input />
<Input/>
</Form.Item>
)}
{!isChangePassword && (
@@ -306,25 +294,25 @@ export const PartnerComponent = observer((props) => {
label="Npwp"
rules={[
idData
? { required: false }
: { required: true, message: "Please input npwp!" },
? {required: false}
: {required: true, message: "Please input npwp!"},
]}
>
<Input />
<Input/>
</Form.Item>
<Form.Item
name="address"
label="Address"
rules={[
idData
? { required: false }
? {required: false}
: {
required: true,
message: "Please input address!",
},
required: true,
message: "Please input address!",
},
]}
>
<Input />
<Input/>
</Form.Item>
</>
)}