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.
145 lines
3.8 KiB
145 lines
3.8 KiB
import { Button, Input, Modal, Space, Table } from "antd";
|
|
import { TCall } from "../../types/CallRequests/TCall";
|
|
import { EditOutlined } from "@ant-design/icons";
|
|
// @ts-ignore
|
|
import tagIcon from "../../assets/tagIcon.png";
|
|
import moment from "moment";
|
|
import { callController } from "../../API/LayoutApi/callrequests";
|
|
import {
|
|
QueryObserverResult,
|
|
RefetchOptions,
|
|
RefetchQueryFilters,
|
|
} from "react-query";
|
|
import { useState } from "react";
|
|
import { TPagination } from "../../types/common/TPagination";
|
|
const CallTable = ({
|
|
data,
|
|
isLoading,
|
|
refetch,
|
|
}: {
|
|
data: TCall[] | undefined;
|
|
isLoading: boolean;
|
|
refetch: <TPageData>(
|
|
options?: (RefetchOptions & RefetchQueryFilters<TPageData>) | undefined
|
|
) => Promise<QueryObserverResult<TPagination<TCall[]>, unknown>>;
|
|
}) => {
|
|
const statusClick = (record: TCall | any) => {
|
|
callController
|
|
.callPatch({ note: undefined, status: "Resolved" }, record.id)
|
|
.then(() => {
|
|
refetch();
|
|
});
|
|
};
|
|
const [modalVisible, setModalVisible] = useState(false);
|
|
const [note, setNote] = useState("");
|
|
const [id, setId] = useState<number>();
|
|
const addNote = (a: any) => {
|
|
setModalVisible(true);
|
|
setId(a.id);
|
|
};
|
|
|
|
const handleOk = () => {
|
|
if (id) {
|
|
callController
|
|
.callPatch({ note: note, status: undefined }, id)
|
|
.then(() => {
|
|
refetch();
|
|
setNote("");
|
|
});
|
|
}
|
|
setModalVisible(false);
|
|
};
|
|
|
|
const handleCancel = () => {
|
|
setModalVisible(false);
|
|
};
|
|
|
|
const handleNoteChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
|
setNote(e.target.value);
|
|
};
|
|
return (
|
|
<div>
|
|
<Table
|
|
loading={isLoading}
|
|
dataSource={data?.map((u, i) => ({
|
|
...u,
|
|
no: i + 1,
|
|
id: u?.id,
|
|
company: u?.company?.name,
|
|
driver: u?.driver?.name,
|
|
time: moment(u?.created_at, "YYYY-MM-DD HH:mm:ss").format(
|
|
"DD.MM.YYYY HH:mm"
|
|
),
|
|
action: u,
|
|
}))}
|
|
columns={[
|
|
{
|
|
title: <img src={tagIcon} alt="" />,
|
|
dataIndex: "no",
|
|
width: "5%",
|
|
},
|
|
{
|
|
title: "Company",
|
|
dataIndex: "company",
|
|
// width: "20%",
|
|
},
|
|
{
|
|
title: "Driver",
|
|
dataIndex: "driver",
|
|
// width: "20%",
|
|
},
|
|
{
|
|
title: "Note",
|
|
dataIndex: "note",
|
|
// width: "15%",
|
|
},
|
|
{
|
|
title: "Requested at",
|
|
dataIndex: "time",
|
|
// width: "15%",
|
|
},
|
|
{
|
|
title: "Actions",
|
|
dataIndex: "action",
|
|
// width: "100px",
|
|
render: (text, record) => {
|
|
return (
|
|
<div>
|
|
{record.status !== "Resolved" && (
|
|
<Button type="primary" onClick={() => statusClick(record)}>
|
|
Resolve
|
|
</Button>
|
|
)}
|
|
<Button
|
|
style={{ marginLeft: 16 }}
|
|
type="primary"
|
|
onClick={(e) => addNote(record)}
|
|
>
|
|
<EditOutlined />
|
|
</Button>
|
|
<Modal
|
|
title="Add note"
|
|
open={modalVisible}
|
|
onOk={handleOk}
|
|
onCancel={handleCancel}
|
|
>
|
|
<Input value={note} onChange={(e) => handleNoteChange(e)} />
|
|
</Modal>
|
|
</div>
|
|
);
|
|
},
|
|
},
|
|
]}
|
|
rowClassName={(record, index) =>
|
|
index % 2 === 0 ? "odd-row" : "even-row"
|
|
}
|
|
scroll={{ x: "768px" }}
|
|
pagination={{ pageSize: 10, size: "default" }}
|
|
bordered
|
|
/>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default CallTable;
|