You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

211 lines
6.7 KiB

import { useParams, useNavigate } from "react-router-dom";
import { useCustomerOne } from "../../Hooks/Customers";
import {
Form,
Spin,
Watermark,
Space,
Tabs,
Row,
Col,
Input,
Button,
Select,
} from "antd";
import { customerController } from "../../API/LayoutApi/customers";
import Notfound from "../../Utils/Notfound";
import { role } from "../../App";
import { useState } from "react";
// @ts-ignore
import infoIcon from "../../assets/infoIcon.png";
// @ts-ignore
import infoIconActive from "../../assets/infoIconActive.png";
// @ts-ignore
import zippy from "../../assets/zippyicon.svg";
// @ts-ignore
import evo from "../../assets/evoicon.png";
// @ts-ignore
import zeelog from "../../assets/zeelogicon.svg";
// @ts-ignore
import ontime from "../../assets/ontimeicon.svg";
// @ts-ignore
import tt from "../../assets/tticon.svg";
import { useCompanyData } from "../../Hooks/Companies";
const TabPane = Tabs.TabPane;
type params = {
readonly id: any;
};
const CustomerEdit = () => {
const { id } = useParams<params>();
const { data, status } = useCustomerOne(id);
let navigate = useNavigate();
const onSubmit = async (value: any) => {
value.company_id = companyVal;
await customerController.customerPatch(value, id);
window.location.replace("/#/customers/");
};
const ClickDelete = () => {
const shouldDelete = window.confirm(
"Are you sure, you want to delete this Driver?"
);
if (shouldDelete && id !== undefined) {
customerController.deleteCustomerController(id);
navigate(-1);
}
};
const [activeTab, setActiveTab] = useState("1");
const getImageSource = (source: string) => {
switch (source) {
case "Zippy":
return zippy;
case "EVO":
return evo;
case "Ontime":
return ontime;
case "Zeelog":
return zeelog;
case "TT":
return tt;
default:
return tt;
}
};
const [companyName, setCompanyName] = useState<string>("");
const [companyVal, setCompanyVal] = useState<any>();
const { data: companyData } = useCompanyData({
name: companyName,
});
return (
<div>
<Spin size="large" spinning={!data}>
<Watermark style={{ height: "100%" }}>
{status === "loading" ? (
<Spin size="large" spinning={!data} />
) : data ? (
<Spin size="large" spinning={!data}>
<Space
direction="vertical"
size="middle"
style={{ display: "flex" }}
>
<Tabs
defaultActiveKey="1"
activeKey={activeTab}
onChange={(key) => setActiveTab(key)}
>
<TabPane
tab={
<span style={{ display: "flex", alignItems: "center" }}>
<img
style={{ marginRight: 10 }}
src={activeTab === "1" ? infoIconActive : infoIcon}
alt=""
/>
Information
</span>
}
key="1"
>
<Space
direction="vertical"
size="middle"
style={{ display: "flex" }}
>
<Form
name="basic"
layout="vertical"
wrapperCol={{ span: 16 }}
initialValues={{ ...data }}
onFinish={onSubmit}
autoComplete="off"
>
<Row gutter={[16, 10]}>
<Col span={6}>
<Form.Item
wrapperCol={{ span: "100%" }}
label="Company"
>
<Select
showSearch
defaultValue={data?.company?.name}
onSearch={(value: any) => setCompanyName(value)}
onChange={(e: any) => {
setCompanyVal(e);
}}
options={companyData?.map((item) => ({
label: (
<div>
{item?.source && (
<img
style={{
width: 15,
height: 20,
paddingTop: 7,
}}
src={getImageSource(item?.source)}
alt=""
/>
)}{" "}
{item?.name}
</div>
),
value: item?.id,
}))}
filterOption={false}
autoClearSearchValue={false}
allowClear
/>
</Form.Item>
</Col>
<Col span={6}>
<Form.Item
wrapperCol={{ span: "100%" }}
label="Name"
name="name"
>
<Input />
</Form.Item>
</Col>
</Row>
<Form.Item>
{role === "Owner" && (
<Button
onClick={() => ClickDelete()}
type="primary"
style={{ marginRight: 10 }}
danger
>
Delete
</Button>
)}
<Button type="primary" htmlType="submit">
Submit
</Button>
</Form.Item>
</Form>
</Space>
</TabPane>
</Tabs>
</Space>
</Spin>
) : (
<Notfound />
)}
</Watermark>
</Spin>
</div>
);
};
export default CustomerEdit;