diff --git a/src/Components/Tasks/ShiftAndCoDriverModal.tsx b/src/Components/Tasks/ShiftInfo/ShiftAndCoDriverCreateModal.tsx similarity index 74% rename from src/Components/Tasks/ShiftAndCoDriverModal.tsx rename to src/Components/Tasks/ShiftInfo/ShiftAndCoDriverCreateModal.tsx index c1b07cd..d6ba72e 100644 --- a/src/Components/Tasks/ShiftAndCoDriverModal.tsx +++ b/src/Components/Tasks/ShiftInfo/ShiftAndCoDriverCreateModal.tsx @@ -1,23 +1,19 @@ import { Modal, Form, Input, DatePicker, Switch } from "antd"; import { useState } from "react"; import dayjs from "dayjs"; -import { TTask } from "../../types/Tasks/TTasks"; +import { TTask } from "../../../types/Tasks/TTasks"; -interface ShiftAndCoDriverModalProps { +interface ShiftAndCoDriverCreateModalProps { open: boolean; onOk: (values: any) => void; onCancel: () => void; - recordTask?: TTask; + recordTask?: TTask | any; } -const ShiftAndCoDriverModal: React.FC = ({ - open, - onOk, - onCancel, - recordTask, -}) => { +const ShiftAndCoDriverCreateModal: React.FC< + ShiftAndCoDriverCreateModalProps +> = ({ open, onOk, onCancel, recordTask }) => { const [form] = Form.useForm(); - const [needsCycle, setNeedsCycle] = useState(false); const [needsDriver, setNeedsDriver] = useState(false); const [needsPickUp, setNeedsPickUp] = useState(false); @@ -62,8 +58,8 @@ const ShiftAndCoDriverModal: React.FC = ({ > @@ -75,6 +71,28 @@ const ShiftAndCoDriverModal: React.FC = ({ + {/* Cycle info */} + + + + + + + + + {/* Pick Up */} @@ -98,8 +116,8 @@ const ShiftAndCoDriverModal: React.FC = ({ > @@ -113,44 +131,6 @@ const ShiftAndCoDriverModal: React.FC = ({ )} - {/* Cycle info */} - - - { - setNeedsCycle(checked); - if (!checked) { - form.resetFields(["cycle_date", "cycle_location"]); - } - }} - /> - - - {needsCycle && ( - <> - - - - - - - - - )} - {/* DRIVER INFO */} @@ -189,8 +169,8 @@ const ShiftAndCoDriverModal: React.FC = ({ > @@ -211,8 +191,8 @@ const ShiftAndCoDriverModal: React.FC = ({ > = ({ ); }; -export default ShiftAndCoDriverModal; +export default ShiftAndCoDriverCreateModal; diff --git a/src/Components/Tasks/ShiftInfo/ShiftAndCoDriverEditModal.tsx b/src/Components/Tasks/ShiftInfo/ShiftAndCoDriverEditModal.tsx new file mode 100644 index 0000000..c35c570 --- /dev/null +++ b/src/Components/Tasks/ShiftInfo/ShiftAndCoDriverEditModal.tsx @@ -0,0 +1,168 @@ +import React, { useEffect } from "react"; +import { Modal, Form, Input, DatePicker } from "antd"; +import dayjs from "dayjs"; +import { taskController } from "../../../API/LayoutApi/tasks"; + +interface ShiftAndCoDriverEditModalProps { + open: boolean; + onCancel: () => void; + recordTask?: any; +} + +const ShiftAndCoDriverEditModal: React.FC = ({ + open, + onCancel, + recordTask, +}) => { + const [form] = Form.useForm(); + + useEffect(() => { + if (recordTask) { + form.setFieldsValue({ + shift_date: recordTask.shift_date ? dayjs(recordTask.shift_date) : null, + shift_location: recordTask.shift_location, + + cycle_date: recordTask.cycle_date ? dayjs(recordTask.cycle_date) : null, + cycle_location: recordTask.cycle_location, + + pickup_date: recordTask.pickup_date + ? dayjs(recordTask.pickup_date) + : null, + pickup_location: recordTask.pickup_location, + + driver_name: recordTask.driver_name, + co_driver_name: recordTask.co_driver_name, + co_driver_pickup_location: recordTask.co_driver_pickup_location, + co_driver_pickup_date: recordTask.co_driver_pickup_date + ? dayjs(recordTask.co_driver_pickup_date) + : null, + co_driver_drop_date: recordTask.co_driver_drop_date + ? dayjs(recordTask.co_driver_drop_date) + : null, + co_driver_drop_location: recordTask.co_driver_drop_location, + }); + } + }, [recordTask, form]); + + const handleOk = async () => { + try { + const values = await form.validateFields(); + // Date fieldlarni string formatga o'tkazib yuboramiz + const formattedValues = { + ...values, + shift_date: values.shift_date ? values.shift_date.toISOString() : null, + pickup_date: values.pickup_date + ? values.pickup_date.toISOString() + : null, + cycle_date: values.cycle_date ? values.cycle_date.toISOString() : null, + co_driver_pickup_date: values.co_driver_pickup_date + ? values.co_driver_pickup_date.toISOString() + : null, + co_driver_drop_date: values.co_driver_drop_date + ? values.co_driver_drop_date.toISOString() + : null, + }; + taskController.taskPatch(formattedValues, recordTask.id); + onCancel(); + form.resetFields(); + } catch (error) { + console.log("Validation Failed:", error); + } + }; + + return ( + +
+ {/* shift */} + + + + + + + + + {/* cycle */} + + + + + + + + + + {/* pick up */} + + + + + + + + + + {/* co driver */} + + + + + + + + + + + + + + + + + + + + + + + +
+
+ ); +}; + +export default ShiftAndCoDriverEditModal; diff --git a/src/Components/Tasks/ShiftInfo/ShiftDataTab.tsx b/src/Components/Tasks/ShiftInfo/ShiftDataTab.tsx new file mode 100644 index 0000000..f22dafc --- /dev/null +++ b/src/Components/Tasks/ShiftInfo/ShiftDataTab.tsx @@ -0,0 +1,175 @@ +import { Button, Card, message } from "antd"; +import { CopyOutlined, EditOutlined } from "@ant-design/icons"; +import dayjs from "dayjs"; +import { useState } from "react"; +import ShiftAndCoDriverEditModal from "./ShiftAndCoDriverEditModal"; + +interface ShiftDataTabProps { + recordTask?: any; +} + +const ShiftDataTab: React.FC = ({ recordTask }) => { + const [isModalOpen, setIsModalOpen] = useState(false); + + const formatDateTime = (date?: string) => + date ? dayjs(date).format("MM-DD-YYYY hh:mm:ss A") : null; + + const displayValue = (val?: string | null) => val ?? "—"; + + const shiftInfo = { + pickUpDate: formatDateTime(recordTask?.pickup_date), + pickUpLocation: recordTask?.pickup_location ?? null, + shiftDate: formatDateTime(recordTask?.shift_date), + shiftLocation: recordTask?.shift_location ?? null, + cycleDate: formatDateTime(recordTask?.cycle_date), + cycleLocation: recordTask?.cycle_location ?? null, + }; + + const coDriverInfo = { + driverName: recordTask?.driver_name ?? null, + coDriverName: recordTask?.co_driver_name ?? null, + coDriverPickUpLocation: recordTask?.co_driver_pickup_location ?? null, + coDriverPickUpDate: formatDateTime(recordTask?.co_driver_pickup_date), + coDriverDropLocation: recordTask?.co_driver_drop_location ?? null, + coDriverDropDate: formatDateTime(recordTask?.co_driver_drop_date), + }; + + const buildTextBlock = (title: string, items: [string, string | null][]) => { + const lines = items + .filter(([, value]) => value) + .map(([label, value]) => `${label}: ${value}`); + return lines.length ? `${title}\n${lines.join("\n")}` : ""; + }; + + const handleCopy = (lang: "en" | "ru") => { + let text = ""; + + if (lang === "en") { + text = [ + buildTextBlock("SHIFT INFO", [ + ["Shift Date", shiftInfo.shiftDate], + ["Shift Location", shiftInfo.shiftLocation], + ["Pick up Date", shiftInfo.pickUpDate], + ["Pick Up Location", shiftInfo.pickUpLocation], + ["Cycle Date", shiftInfo.cycleDate], + ["Cycle Location", shiftInfo.cycleLocation], + ]), + buildTextBlock("CO DRIVER INFO", [ + ["Driver's name", coDriverInfo.driverName], + ["Co-Driver's name", coDriverInfo.coDriverName], + ["Co-driver pickup date", coDriverInfo.coDriverPickUpDate], + ["Co-driver pickup location", coDriverInfo.coDriverPickUpLocation], + ["Co-driver drop date", coDriverInfo.coDriverDropDate], + ["Co-driver drop location", coDriverInfo.coDriverDropLocation], + ]), + ] + .filter(Boolean) + .join("\n\n"); + } else { + text = [ + buildTextBlock("ИНФОРМАЦИЯ О СМЕНЕ", [ + ["Дата пикапа", shiftInfo.pickUpDate], + ["Место пикапа", shiftInfo.pickUpLocation], + ["Дата шифта", shiftInfo.shiftDate], + ["Место шифта", shiftInfo.shiftLocation], + ["Дата сайкла", shiftInfo.cycleDate], + ["Место сайкла", shiftInfo.cycleLocation], + ]), + buildTextBlock("ИНФОРМАЦИЯ О СО-ВОДИТЕЛЕ", [ + ["Имя драйвера", coDriverInfo.driverName], + ["Имя ко-драйвера", coDriverInfo.coDriverName], + ["Время пикапа ко-драйвера", coDriverInfo.coDriverPickUpDate], + ["Место пикапа ко-драйвера", coDriverInfo.coDriverPickUpLocation], + ["Время высадки ко-драйвера", coDriverInfo.coDriverDropDate], + ["Место высадки ко-драйвера", coDriverInfo.coDriverDropLocation], + ]), + ] + .filter(Boolean) + .join("\n\n"); + } + + if (!text) { + message.warning("Nothing to copy!"); + return; + } + + navigator.clipboard + .writeText(text) + .then(() => message.success("Data copied successfully!")) + .catch(() => message.error("Failed to copy!")); + }; + + return ( + <> + + + + + + } + style={{ width: "100%", marginBottom: 20 }} + > +

SHIFT INFO

+

Shift Date: {shiftInfo.shiftDate}

+

Shift Location: {shiftInfo.shiftLocation}

+

Pick up Date: {shiftInfo.pickUpDate}

+

Pick Up Location: {shiftInfo.pickUpLocation}

+

Cycle Date: {shiftInfo.cycleDate}

+

Cycle Location: {shiftInfo.cycleLocation}

+ +

CO-DRIVER INFO

+

Driver's name: {coDriverInfo.driverName}

+

Co-driver's name: {coDriverInfo.coDriverName}

+

Co-driver pickup date: {coDriverInfo.coDriverPickUpDate}

+

Co-driver pickup location: {coDriverInfo.coDriverPickUpLocation}

+

Co-driver drop date: {coDriverInfo.coDriverDropDate}

+

Co-driver drop location: {coDriverInfo.coDriverDropLocation}

+
+ + } onClick={() => handleCopy("ru")}> + Copy + + } + style={{ width: "100%" }} + > +

ИНФОРМАЦИЯ О СМЕНЕ

+

Дата шифта: {shiftInfo.shiftDate}

+

Место шифта: {shiftInfo.shiftLocation}

+

Дата сайкла: {shiftInfo.cycleDate}

+

Место сайкла: {shiftInfo.cycleLocation}

+

Дата пикапа: {shiftInfo.pickUpDate}

+

Место пикапа: {shiftInfo.pickUpLocation}

+ +

ИНФОРМАЦИЯ О СО-ВОДИТЕЛЕ

+

Имя драйвера: {coDriverInfo.driverName}

+

Имя ко-драйвера: {coDriverInfo.coDriverName}

+

Место пикапа ко-драйвера: {coDriverInfo.coDriverPickUpLocation}

+

Время пикапа ко-драйвера: {coDriverInfo.coDriverPickUpDate}

+

Место высадки ко-драйвера: {coDriverInfo.coDriverDropLocation}

+

Время высадки ко-драйвера: {coDriverInfo.coDriverDropDate}

+
+ + setIsModalOpen(false)} + /> + + ); +}; + +export default ShiftDataTab; diff --git a/src/Components/Tasks/TaskModal.tsx b/src/Components/Tasks/TaskModal.tsx index e24c1e7..de6b9f7 100644 --- a/src/Components/Tasks/TaskModal.tsx +++ b/src/Components/Tasks/TaskModal.tsx @@ -28,6 +28,9 @@ import { RotateRightOutlined, UploadOutlined, } from "@ant-design/icons"; + +import ShiftAndCoDriverCreateModal from "./ShiftInfo/ShiftAndCoDriverCreateModal"; + import { TSocket } from "../../types/common/TSocket"; // @ts-ignore import closeIcon from "../../assets/closeIcon.png"; @@ -64,8 +67,7 @@ import driverIcon from "../../assets/drivericon.png"; // @ts-ignore import userIcon from "../../assets/userIcon.png"; -import ShiftAndCoDriverModal from "./ShiftAndCoDriverModal"; -import CopyCard from "./shiftInfoTab"; +import ShiftDataTab from "./ShiftInfo/ShiftDataTab"; const TaskModal = ({ modalOpen, @@ -495,25 +497,26 @@ const TaskModal = ({ - - - - + {recordTask?.company?.needs_extra_info && ( + + + + + Shift & Driver Data - Shift & Driver Data - - } - key="2" - > - - + } + key="2" + > + + + )} - { diff --git a/src/Components/Tasks/TaskTable.tsx b/src/Components/Tasks/TaskTable.tsx index 353e4d7..dbe3264 100644 --- a/src/Components/Tasks/TaskTable.tsx +++ b/src/Components/Tasks/TaskTable.tsx @@ -1,4 +1,4 @@ -import { Button, Modal, Space, Table, Tooltip } from "antd"; +import { Button, message, Modal, Space, Table, Tooltip } from "antd"; import "../../App.css"; import { useEffect, useMemo, useState } from "react"; import { taskController } from "../../API/LayoutApi/tasks"; @@ -24,6 +24,8 @@ import webIcon from "../../assets/web.png"; import { isMobile, role } from "../../App"; import { theme } from "antd"; +import dayjs from "dayjs"; +import ShiftAndCoDriverCreateModal from "./ShiftInfo/ShiftAndCoDriverCreateModal"; const admin_id = localStorage.getItem("admin_id"); const TaskTable = ({ @@ -42,7 +44,11 @@ const TaskTable = ({ setErrorModal: React.Dispatch>; }) => { const moment = require("moment"); - const statusClick = (record: any) => { + + const [isModalOpen, setIsModalOpen] = useState(false); + const [recordTask, setRecordTask] = useState(null); + + const statusClick = async (record: any) => { if (record.status === "New") { Modal.confirm({ title: "Confirmation", @@ -59,19 +65,54 @@ const TaskTable = ({ }, }); } + // if (record.status === "Checking") { + // Modal.confirm({ + // title: "Confirmation", + // content: `Are you sure you want to finish this task?`, + // onOk: () => { + // const value = { + // status: "Done", + // }; + // taskController.taskPatch(value, record.id).then(() => { + // setErrorModal(false); + // }); + // }, + // }); + // } + if (record.status === "Checking") { - Modal.confirm({ - title: "Confirmation", - content: `Are you sure you want to finish this task?`, - onOk: () => { - const value = { - status: "Done", - }; - taskController.taskPatch(value, record.id).then(() => { - setErrorModal(false); - }); - }, - }); + // 1) Break / PTI holati + if ( + record?.service?.title === "Break" || + record?.service?.title === "PTI" + ) { + const response = await taskController.taskPatch( + { status: "Done" }, + record.id + ); + if (response?.status === 400) { + setRecordTask(record); + setIsModalOpen(true); // ❌ error qaytsa modal ochiladi + } + return; + } + + // 2) needs_extra_info false bo‘lsa + if (record?.company?.needs_extra_info === false) { + const response = await taskController.taskPatch( + { status: "Done" }, + record.id + ); + if (response?.status === 400) { + setRecordTask(record); + setIsModalOpen(true); // ❌ error qaytsa modal ochiladi + } + return; + } + + // 3) boshqa hollarda -> bevosita modal + setRecordTask(record); + setIsModalOpen(true); } }; const ptiPatch = (record: TTask) => { @@ -139,6 +180,90 @@ const TaskTable = ({ return ""; }; + const formatDateTime = (date?: string) => + date ? dayjs(date).format("MM-DD-YYYY hh:mm:ss A") : null; + + const handleCopy = (record: any, lang: "en" | "ru") => { + const shiftInfo = { + pickUpDate: formatDateTime(record?.pickup_date), + pickUpLocation: record?.pickup_location ?? null, + shiftDate: formatDateTime(record?.shift_date), + shiftLocation: record?.shift_location ?? null, + cycleDate: formatDateTime(record?.cycle_date), + cycleLocation: record?.cycle_location ?? null, + }; + + const coDriverInfo = { + driverName: record?.driver_name ?? null, + coDriverName: record?.co_driver_name ?? null, + coDriverPickUpLocation: record?.co_driver_pickup_location ?? null, + coDriverPickUpDate: formatDateTime(record?.co_driver_pickup_date), + coDriverDropLocation: record?.co_driver_drop_location ?? null, + coDriverDropDate: formatDateTime(record?.co_driver_drop_date), + }; + + const buildTextBlock = ( + title: string, + items: [string, string | null][] + ) => { + const lines = items + .filter(([, value]) => value) + .map(([label, value]) => `${label}: ${value}`); + return lines.length ? `${title}\n${lines.join("\n")}` : ""; + }; + + let text = ""; + + if (lang === "en") { + text = [ + buildTextBlock("SHIFT INFO", [ + ["Shift Date", shiftInfo.shiftDate], + ["Shift Location", shiftInfo.shiftLocation], + ["Pick up Date", shiftInfo.pickUpDate], + ["Pick Up Location", shiftInfo.pickUpLocation], + ["Cycle Date", shiftInfo.cycleDate], + ["Cycle Location", shiftInfo.cycleLocation], + ]), + buildTextBlock("CO DRIVER INFO", [ + ["Driver's name", coDriverInfo.driverName], + ["Co-Driver's name", coDriverInfo.coDriverName], + ["Co-driver pickup date", coDriverInfo.coDriverPickUpDate], + ["Co-driver pickup location", coDriverInfo.coDriverPickUpLocation], + ["Co-driver drop date", coDriverInfo.coDriverDropDate], + ["Co-driver drop location", coDriverInfo.coDriverDropLocation], + ]), + ] + .filter(Boolean) + .join("\n\n"); + } else { + text = [ + buildTextBlock("ИНФОРМАЦИЯ О СМЕНЕ", [ + ["Дата пикапа", shiftInfo.pickUpDate], + ["Место пикапа", shiftInfo.pickUpLocation], + ["Дата шифта", shiftInfo.shiftDate], + ["Место шифта", shiftInfo.shiftLocation], + ["Дата сайкла", shiftInfo.cycleDate], + ["Место сайкла", shiftInfo.cycleLocation], + ]), + buildTextBlock("ИНФОРМАЦИЯ О СО-ВОДИТЕЛЕ", [ + ["Имя драйвера", coDriverInfo.driverName], + ["Имя ко-драйвера", coDriverInfo.coDriverName], + ["Время пикапа ко-драйвера", coDriverInfo.coDriverPickUpDate], + ["Место пикапа ко-драйвера", coDriverInfo.coDriverPickUpLocation], + ["Время высадки ко-драйвера", coDriverInfo.coDriverDropDate], + ["Место высадки ко-драйвера", coDriverInfo.coDriverDropLocation], + ]), + ] + .filter(Boolean) + .join("\n\n"); + } + + navigator.clipboard + .writeText(text) + .then(() => message.success("Data copied successfully!")) + .catch(() => message.error("Failed to copy!")); + }; + const columns = useMemo(() => { const columns = [ // { @@ -370,6 +495,38 @@ const TaskTable = ({ ), }, + { + title: ( + + Copy + + ), + width: "8%", + render: (text: any, record: TTask) => ( + <> + {record?.company?.needs_extra_info && record?.status === "Done" && ( + <> + + + + )} + + ), + }, { title: "Actions", dataIndex: "action", @@ -379,47 +536,49 @@ const TaskTable = ({ render: (text: string, record: TTask) => { return (
- {role === "Checker" ? ( - - {record.status === "New" && ( - - )} - {record.status === "Checking" && - !!admin_id && - record?.in_charge?.id === +admin_id && ( + + {role === "Checker" ? ( + <> + {record.status === "New" && ( )} - - ) : ( - - - - )} + {record.status === "Checking" && + !!admin_id && + record?.in_charge?.id === +admin_id && ( + + )} + + ) : ( + <> + + + )} +
); }, @@ -462,24 +621,28 @@ const TaskTable = ({ rowClassName={rowClassName} scroll={{ x: "800px" }} bordered - // pagination={{ - // pageSize: 10, - // size: "default", - // style: { - // margin: 0, - // justifyContent: "end", - // position: "fixed", - // bottom: 0, - // left: 0, - // width: "100%", - // backgroundColor: token.colorBgContainer, - // boxShadow: "0 4px 8px rgba(0, 0, 0, 0.4)", - // padding: "10px 0", - // zIndex: 1000, - // }, - // }} pagination={false} /> + + { + if (recordTask?.id) { + const payload = { status: "Done", ...values }; + taskController + .taskPatch(payload, recordTask.id) + .then((response: any) => { + if (response?.status == 403) { + showErrorModal(response); + } else { + setIsModalOpen(false); + } + }); + } + }} + onCancel={() => setIsModalOpen(false)} + /> ); }; diff --git a/src/Components/Tasks/shiftInfoTab.tsx b/src/Components/Tasks/shiftInfoTab.tsx deleted file mode 100644 index 2f18206..0000000 --- a/src/Components/Tasks/shiftInfoTab.tsx +++ /dev/null @@ -1,141 +0,0 @@ -import { Button, Card, message } from "antd"; -import { CopyOutlined } from "@ant-design/icons"; -import dayjs from "dayjs"; - -interface CopyCardProps { - recordTask?: any; -} - -const CopyCard: React.FC = ({ recordTask }) => { - const formatDateTime = (date?: string) => - date ? dayjs(date).format("DD MMM YYYY HH:mm:ss") : "—"; - - const shiftInfo = { - pickUpDate: formatDateTime(recordTask?.pickup_date) || "—", - pickUpLocation: recordTask?.pickup_location || "—", - shiftDate: formatDateTime(recordTask?.shift_date) || "—", - shiftLocation: recordTask?.shift_location || "—", - cycleDate: formatDateTime(recordTask?.cycle_date) || "—", - cycleLocation: recordTask?.cycle_location || "—", - }; - - const coDriverInfo = { - driverName: recordTask?.driver_name || "—", - coDriverName: recordTask?.co_driver_name || "—", - coDriverPickUpLocation: recordTask?.co_driver_pickup_location || "—", - coDriverPickUpDate: - formatDateTime(recordTask?.co_driver_pickup_date) || "—", - coDriverDropLocation: recordTask?.co_driver_drop_location || "—", - coDriverDropDate: formatDateTime(recordTask?.co_driver_drop_date) || "—", - }; - - const handleCopy = (text: string) => { - navigator.clipboard - .writeText(text) - .then(() => message.success("Data copied successfully!")) - .catch(() => message.error("Failed to copy!")); - }; - - const text = ` -SHIFT INFO -Shift Date: ${shiftInfo.shiftDate} -Shift Location: ${shiftInfo.shiftLocation} - -Pick up Date: ${shiftInfo.pickUpDate} -Pick Up Location: ${shiftInfo.pickUpLocation} - -Cycle Date: ${shiftInfo.cycleDate} -Cycle Location: ${shiftInfo.cycleLocation} - - -CO DRIVER INFO -Driver's name: ${coDriverInfo.driverName} -Co-Driver's name: ${coDriverInfo.coDriverName} - -Co-driver pickup date: ${coDriverInfo.coDriverPickUpDate} -Co-driver pickup location: ${coDriverInfo.coDriverPickUpLocation} - -Co-driver drop date: ${coDriverInfo.coDriverDropDate} -Co-driver drop location: ${coDriverInfo.coDriverDropLocation} - `.trim(); - - const textRu = ` -ИНФОРМАЦИЯ О СМЕНЕ -Дата пикапа: ${shiftInfo.pickUpDate} -Место пикапа: ${shiftInfo.pickUpLocation} - -Дата шифта: ${shiftInfo.shiftDate} -Место шифта: ${shiftInfo.shiftLocation} - -Дата сайкла: ${shiftInfo.cycleDate} -Место сайкла: ${shiftInfo.cycleLocation} - -ИНФОРМАЦИЯ О СО-ВОДИТЕЛЕ -Имя драйвера: ${coDriverInfo.driverName} -Имя ко-драйвера: ${coDriverInfo.coDriverName} - -Время пикапа ко-драйвера: ${coDriverInfo.coDriverPickUpDate} -Место пикапа ко-драйвера: ${coDriverInfo.coDriverPickUpLocation} - -Время высадки ко-драйвера: ${coDriverInfo.coDriverDropDate} -Место высадки ко-драйвера: ${coDriverInfo.coDriverDropLocation} - `.trim(); - - return ( - <> - } onClick={() => handleCopy(text)}> - Copy - - } - style={{ width: "100%", marginBottom: 20 }} - > -

SHIFT INFO

-

Shift Date: {shiftInfo.shiftDate}

-

Shift Location: {shiftInfo.shiftLocation}

-

Pick up Date: {shiftInfo.pickUpDate}

-

Pick Up Location: {shiftInfo.pickUpLocation}

-

Cycle Date: {shiftInfo.cycleDate}

-

Cycle Location: {shiftInfo.cycleLocation}

- -

CO-DRIVER INFO

-

Driver's name: {coDriverInfo.driverName}

-

Co-driver's name: {coDriverInfo.coDriverName}

-

Co-driver pickup date: {coDriverInfo.coDriverPickUpDate}

-

Co-driver pickup location: {coDriverInfo.coDriverPickUpLocation}

-

Co-driver drop date: {coDriverInfo.coDriverDropDate}

-

Co-driver drop location: {coDriverInfo.coDriverDropLocation}

-
- - } onClick={() => handleCopy(textRu)}> - Copy - - } - style={{ width: "100%" }} - > -

ИНФОРМАЦИЯ О СМЕНЕ

-

Дата шифта: {shiftInfo.shiftDate}

-

Место шифта: {shiftInfo.shiftLocation}

-

Дата сайкла: {shiftInfo.cycleDate}

-

Место сайкла: {shiftInfo.cycleLocation}

-

Дата пикапа: {shiftInfo.pickUpDate}

-

Место пикапа: {shiftInfo.pickUpLocation}

- -

ИНФОРМАЦИЯ О СО-ВОДИТЕЛЕ

-

Имя драйвера: {coDriverInfo.driverName}

-

Имя ко-драйвера: {coDriverInfo.coDriverName}

-

Место пикапа ко-драйвера: {coDriverInfo.coDriverPickUpLocation}

-

Время пикапа ко-драйвера {coDriverInfo.coDriverPickUpDate}

-

Место высадки ко-драйвера:{coDriverInfo.coDriverDropLocation}

-

Время высадки ко-драйвера: {coDriverInfo.coDriverDropDate}

-
- - ); -}; - -export default CopyCard;