diff --git a/web-app/src/Components/Pages/IssuesPage/Components/LensIssueFormModal/LensIssueFormModal.jsx b/web-app/src/Components/Pages/IssuesPage/Components/LensIssueFormModal/LensIssueFormModal.jsx new file mode 100644 index 0000000..fbb54ba --- /dev/null +++ b/web-app/src/Components/Pages/IssuesPage/Components/LensIssueFormModal/LensIssueFormModal.jsx @@ -0,0 +1,245 @@ +import { + Modal, Input, Button, Typography, Collapse, Steps, Row, Alert, Col, DatePicker, Spin +} from "antd"; +import PropTypes from "prop-types"; +import useLensIssueFormModal from "./useLensIssueFormModal.js"; +import useLensIssueFormModalUI from "./useLensIssueFormModalUI.js"; + +const LensIssueFormModal = ({visible, onCancel, onSubmit}) => { + const lensIssueFormModalData = useLensIssueFormModal(); + const lensIssueFormModalUI = useLensIssueFormModalUI(visible, onCancel, onSubmit, lensIssueFormModalData.patients, lensIssueFormModalData.lenses); + + const patientsItems = lensIssueFormModalUI.filteredPatients.map((patient) => ({ + key: patient.id, + label: `${patient.last_name} ${patient.first_name} (${lensIssueFormModalUI.getDateString(patient.birthday)})`, + children:
+

Пациент: {patient.last_name} {patient.first_name}

+

Дата рождения: {lensIssueFormModalUI.getDateString(patient.birthday)}

+

Диагноз: {patient.diagnosis}

+

Email: {patient.email}

+

Телефон: {patient.phone}

+ +
, + })); + + const lensesItems = lensIssueFormModalUI.filteredLenses.map((lens) => ({ + key: lens.id, label: `Линза ${lens.side} ${lens.diameter} мм`, children:
+

Диаметр: {lens.diameter}

+

Тор: {lens.tor}

+

Пресетная рефракция: {lens.preset_refraction}

+

Диаметр: {lens.diameter}

+

FVC: {lens.fvc}

+

Острота зрения (Trial): {lens.trial}

+

Периферийная торичность: {lens.periphery_toricity}

+

Сторона: {lens.side}

+

Esa: {lens.esa}

+ +
, + })); + + const SelectPatientStep = () => { + return lensIssueFormModalUI.selectedPatient ? ( +
+ + {lensIssueFormModalUI.selectedPatient.last_name} {lensIssueFormModalUI.selectedPatient.first_name} + +

Дата + рождения: {lensIssueFormModalUI.getSelectedPatientBirthdayString()} +

+

Email: {lensIssueFormModalUI.selectedPatient.email}

+

Телефон: {lensIssueFormModalUI.selectedPatient.phone}

+ +
+ ) : ( + <> + + +
+ +
+ + ); + }; + + const SelectLensStep = () => { + return lensIssueFormModalUI.selectedLens ? ( +
+ + {lensIssueFormModalUI.selectedLens.diameter} {lensIssueFormModalUI.selectedLens.tor} {lensIssueFormModalUI.selectedLens.preset_refraction} + +

Диаметр: {lensIssueFormModalUI.selectedLens.diameter}

+

Тор: {lensIssueFormModalUI.selectedLens.tor}

+

Пресетная рефракция: {lensIssueFormModalUI.selectedLens.preset_refraction}

+

Диаметр: {lensIssueFormModalUI.selectedLens.diameter}

+

FVC: {lensIssueFormModalUI.selectedLens.fvc}

+

Острота зрения (Trial): {lensIssueFormModalUI.selectedLens.trial}

+

Периферийная торичность: {lensIssueFormModalUI.selectedLens.periphery_toricity}

+

Сторона: {lensIssueFormModalUI.selectedLens.side}

+

Esa: {lensIssueFormModalUI.selectedLens.esa}

+ +
) : (<> + + +
+ +
+ + ); + }; + + const ConfirmStep = () => { + return ( + <> + + + + + + Дата выдачи: {lensIssueFormModalUI.issueDate?.toDate().toLocaleDateString("ru-RU")} + + + + lensIssueFormModalUI.setIssueDate(date)} + format="DD.MM.YYYY" + style={lensIssueFormModalUI.datePickerStyle} + /> + + + +
+ + {lensIssueFormModalUI.selectedPatient.last_name} {lensIssueFormModalUI.selectedPatient.first_name} + +

Дата + рождения: {lensIssueFormModalUI.getSelectedPatientBirthdayString()} +

+

Email: {lensIssueFormModalUI.selectedPatient.email}

+

Телефон: {lensIssueFormModalUI.selectedPatient.phone}

+

+ Линза: {lensIssueFormModalUI.selectedLens.diameter} {lensIssueFormModalUI.selectedLens.tor} {lensIssueFormModalUI.selectedLens.preset_refraction} +

+
+ +
+ + {lensIssueFormModalUI.selectedLens.diameter} {lensIssueFormModalUI.selectedLens.tor} {lensIssueFormModalUI.selectedLens.preset_refraction} + +

Диаметр: {lensIssueFormModalUI.selectedLens.diameter}

+

Тор: {lensIssueFormModalUI.selectedLens.tor}

+

Пресетная рефракция: {lensIssueFormModalUI.selectedLens.preset_refraction}

+

Диаметр: {lensIssueFormModalUI.selectedLens.diameter}

+

FVC: {lensIssueFormModalUI.selectedLens.fvc}

+

Острота зрения (Trial): {lensIssueFormModalUI.selectedLens.trial}

+

Периферийная торичность: {lensIssueFormModalUI.selectedLens.periphery_toricity}

+

Сторона: {lensIssueFormModalUI.selectedLens.side}

+

Esa: {lensIssueFormModalUI.selectedLens.esa}

+
+ + ); + }; + + const steps = [{ + title: 'Выбор пациента', content: , + }, { + title: 'Выбор линзы', content: , + }, { + title: 'Подтверждение', content: , + }]; + + return ( + + {lensIssueFormModalData.loading ? ( +
+ +
+ ) : ( +
+ {steps[lensIssueFormModalUI.currentStep].content} +
+ )} + + + {lensIssueFormModalUI.screenXS && ( + + )} + + + + + +
+ ); +}; + +LensIssueFormModal.propTypes = { + visible: PropTypes.bool.isRequired, + onCancel: PropTypes.func.isRequired, + onSubmit: PropTypes.func.isRequired, +}; + +export default LensIssueFormModal; diff --git a/web-app/src/Components/Pages/IssuesPage/Components/LensIssueFormModal/useLensIssueFormModal.js b/web-app/src/Components/Pages/IssuesPage/Components/LensIssueFormModal/useLensIssueFormModal.js new file mode 100644 index 0000000..fefb05e --- /dev/null +++ b/web-app/src/Components/Pages/IssuesPage/Components/LensIssueFormModal/useLensIssueFormModal.js @@ -0,0 +1,17 @@ +import {useGetPatientsQuery} from "../../../../../Api/patientsApi.js"; +import {useGetLensesQuery} from "../../../../../Api/lensesApi.js"; + + +const useLensIssueFormModal = () => { + const {data: patients = [], isLoading: isLoadingPatients, isError: isErrorPatients} = useGetPatientsQuery(undefined); + const {data: lenses = [], isLoading: isLoadingLenses, isError: isErrorLenses} = useGetLensesQuery(undefined); + + return { + patients, + lenses, + isLoading: isLoadingPatients || isLoadingLenses, + isError: isErrorPatients || isErrorLenses, + }; +}; + +export default useLensIssueFormModal; \ No newline at end of file diff --git a/web-app/src/Components/Pages/IssuesPage/Components/LensIssueFormModal/useLensIssueFormModalUI.js b/web-app/src/Components/Pages/IssuesPage/Components/LensIssueFormModal/useLensIssueFormModalUI.js new file mode 100644 index 0000000..b89a158 --- /dev/null +++ b/web-app/src/Components/Pages/IssuesPage/Components/LensIssueFormModal/useLensIssueFormModalUI.js @@ -0,0 +1,198 @@ +import {useMemo, useState} from "react"; +import dayjs from "dayjs"; +import {Grid, notification} from "antd"; + +const {useBreakpoint} = Grid; + +const useLensIssueFormModalUI = (visible, onCancel, onSubmit, patients, lenses) => { + const screens = useBreakpoint(); + + const [searchPatientString, setSearchPatientString] = useState(""); + const [searchLensString, setSearchLensString] = useState(""); + const [issueDate, setIssueDate] = useState(dayjs(new Date())); + + const [selectedPatient, setSelectedPatient] = useState(null); + const [selectedLens, setSelectedLens] = useState(null); + + const [currentStep, setCurrentStep] = useState(0); + + const blockStepStyle = {padding: "10px", background: "#f5f5f5", borderRadius: 5, marginBottom: 15}; + const searchInputStyle = {marginBottom: 16}; + const chooseContainerStyle = {maxHeight: 300, overflowY: "auto", border: "1px solid #d9d9d9", padding: 8}; + const alertStyle = {marginBottom: 15}; + const issueDateContainerStyle = {display: "flex", alignItems: "center"}; + const datePickerStyle = {width: "100%"}; + const loadingContainerStyle = {display: "flex", justifyContent: "center", alignItems: "center", height: "70vh"}; + const stepsContentStyle = {maxHeight: "70vh", overflowY: "auto", padding: "10px"}; + const stepsIndicatorStyle = {marginTop: 16}; + const footerRowStyle = {marginTop: 20}; + const footerButtonStyle = {marginRight: 8}; + + const filteredPatients = useMemo(() => patients.filter((patient) => { + const searchLower = searchPatientString.toLowerCase(); + + return Object.values(patient) + .filter(value => typeof value === "string") + .some(value => value.toLowerCase().includes(searchLower)); + }), [patients, searchPatientString]); + + const filteredLenses = useMemo(() => lenses.filter((lens) => { + const searchLower = searchLensString.toLowerCase(); + + return Object.values(lens) + .some(value => value.toString().toLowerCase().includes(searchLower)); + }), [lenses, searchLensString]); + + const resetPatient = () => setSelectedPatient(null); + const resetLens = () => setSelectedLens(null); + + const screenXS = useMemo(() => screens.xs, [screens]); + const direction = useMemo(() => screenXS ? "horizontal" : "vertical", [screenXS]); + const modalWidth = useMemo(() => screenXS ? 700 : "90%", [screenXS]); + + const nextButtonText = useMemo(() => { + if (currentStep === 2) { + return "Создать"; + } else { + return "Далее"; + } + }, [currentStep]); + + const handleSetSearchPatientString = (e) => setSearchPatientString(e.target.value); + const handleSetSearchLensString = (e) => setSearchLensString(e.target.value); + + const handleOk = async () => { + try { + setCurrentStep(0); + onSubmit(issueDate.format("YYYY-MM-DD"), selectedPatient.id, selectedLens.id); + setSelectedPatient(null); + setSelectedLens(null); + setIssueDate(dayjs(new Date())); + } catch (errorInfo) { + console.error("Validation Failed:", errorInfo); + notification.error({ + message: "Ошибка валидации", + description: "Проверьте правильность заполнения полей.", + placement: "topRight", + }); + } + }; + + const isActiveNextButton = useMemo(() => { + if (currentStep === 0 && !selectedPatient) { + return false; + } + + return !(currentStep === 1 && !selectedLens); + }, [currentStep, selectedPatient, selectedLens]); + + const isActivePrevButton = useMemo(() => { + return currentStep > 0; + }, [currentStep]); + + const cancelModal = () => { + setSelectedPatient(null); + setSelectedLens(null); + setCurrentStep(0); + setIssueDate(dayjs(new Date())); + onCancel(); + }; + + const handleClickBackButton = () => { + setCurrentStep(currentStep - 1); + }; + + const isActiveFinishButton = useMemo(() => { + return currentStep === 2; + }, [currentStep]); + + const handleClickNextButton = async () => { + if (isActiveFinishButton) { + + if (!validateIssue()) { + notification.error({ + message: "Ошибка валидации", + description: "Проверьте правильность заполнения полей.", + placement: "topRight", + }); + return; + } + + await handleOk().then(reset); + } else { + setCurrentStep(currentStep + 1); + } + }; + + const validateIssue = () => { + return issueDate && selectedPatient && selectedLens; + }; + + const getDateString = (date) => { + return new Date(date).toLocaleDateString('ru-RU'); + }; + + const getSelectedPatientBirthdayString = () => { + if (!selectedPatient) { + return ""; + } + + return getDateString(selectedPatient.birthday); + }; + + const reset = () => { + setSelectedPatient(null); + setSelectedLens(null); + setCurrentStep(0); + setIssueDate(dayjs(new Date())); + }; + + const disableBackButton = useMemo(() => !isActivePrevButton, [isActivePrevButton]); + const disableNextButton = useMemo(() => !isActiveNextButton && !isActiveFinishButton, [isActiveFinishButton, isActiveNextButton]); + + return { + filteredPatients, + filteredLenses, + searchPatientString, + setSearchPatientString, + searchLensString, + setSearchLensString, + issueDate, + setIssueDate, + selectedPatient, + setSelectedPatient, + selectedLens, + setSelectedLens, + currentStep, + setCurrentStep, + disableBackButton, + disableNextButton, + nextButtonText, + blockStepStyle, + searchInputStyle, + chooseContainerStyle, + alertStyle, + issueDateContainerStyle, + datePickerStyle, + loadingContainerStyle, + stepsContentStyle, + stepsIndicatorStyle, + footerRowStyle, + footerButtonStyle, + screenXS, + direction, + modalWidth, + handleOk, + cancelModal, + handleClickBackButton, + handleClickNextButton, + resetPatient, + resetLens, + getDateString, + handleSetSearchPatientString, + handleSetSearchLensString, + getSelectedPatientBirthdayString, + }; +}; + +export default useLensIssueFormModalUI; \ No newline at end of file diff --git a/web-app/src/Components/Widgets/LensIssueViewModal.jsx b/web-app/src/Components/Pages/IssuesPage/Components/LensIssueViewModal/LensIssueViewModal.jsx similarity index 97% rename from web-app/src/Components/Widgets/LensIssueViewModal.jsx rename to web-app/src/Components/Pages/IssuesPage/Components/LensIssueViewModal/LensIssueViewModal.jsx index 4064fb6..f1f2b12 100644 --- a/web-app/src/Components/Widgets/LensIssueViewModal.jsx +++ b/web-app/src/Components/Pages/IssuesPage/Components/LensIssueViewModal/LensIssueViewModal.jsx @@ -1,6 +1,6 @@ import {Collapse, Modal} from "antd"; import PropTypes from "prop-types"; -import {LensIssuePropType} from "../../Types/lensIssuePropType.js"; +import {LensIssuePropType} from "../../../../../Types/lensIssuePropType.js"; const LensIssueViewModal = ({visible, onCancel, lensIssue}) => { diff --git a/web-app/src/Components/Pages/IssuesPage/IssuesPage.jsx b/web-app/src/Components/Pages/IssuesPage/IssuesPage.jsx index 5645a69..4699408 100644 --- a/web-app/src/Components/Pages/IssuesPage/IssuesPage.jsx +++ b/web-app/src/Components/Pages/IssuesPage/IssuesPage.jsx @@ -13,9 +13,9 @@ import { Pagination, Result } from "antd"; import {DatabaseOutlined, PlusOutlined, UnorderedListOutlined} from "@ant-design/icons"; -import LensIssueViewModal from "../../Widgets/LensIssueViewModal.jsx"; +import LensIssueViewModal from "./Components/LensIssueViewModal/LensIssueViewModal.jsx"; import dayjs from "dayjs"; -import LensIssueFormModal from "../../Widgets/LensIssueFormModal.jsx"; +import LensIssueFormModal from "./Components/LensIssueFormModal/LensIssueFormModal.jsx"; import SelectViewMode from "../../Widgets/SelectViewMode.jsx"; import LoadingIndicator from "../../Widgets/LoadingIndicator.jsx"; import useIssues from "./useIssues.js"; diff --git a/web-app/src/Components/Pages/LensesPage/useLensesUI.js b/web-app/src/Components/Pages/LensesPage/useLensesUI.js index fc4a716..9c2ae1e 100644 --- a/web-app/src/Components/Pages/LensesPage/useLensesUI.js +++ b/web-app/src/Components/Pages/LensesPage/useLensesUI.js @@ -1,4 +1,4 @@ -import {useEffect} from "react"; +import {useEffect, useMemo} from "react"; import {getCachedInfo} from "../../../Utils/cachedInfoUtils.js"; import { closeModal, @@ -30,10 +30,10 @@ const useLensesUI = (lenses) => { if (cachedViewMode) dispatch(setViewMode(cachedViewMode)); }, [dispatch]); - const containerStyle = { padding: 20 }; - const filterBarStyle = { marginBottom: 20 }; - const formItemStyle = { width: "100%" }; - const viewModIconStyle = { marginRight: 8 }; + const containerStyle = {padding: 20}; + const filterBarStyle = {marginBottom: 20}; + const formItemStyle = {width: "100%"}; + const viewModIconStyle = {marginRight: 8}; const tableActionButtonsStyle = {display: "flex", gap: "8px"}; const handleSetSearchText = (value) => dispatch(setSearchText(value)); @@ -57,7 +57,7 @@ const useLensesUI = (lenses) => { }; const toggleAdvancedSearch = () => { - dispatch(setShowAdvancedSearch(!showAdvancedSearch)); + dispatch(setShowAdvancedSearch(!showAdvancedSearch)); }; const handlePaginationChange = (page, pageSize) => { @@ -65,27 +65,29 @@ const useLensesUI = (lenses) => { handleSetPageSize(pageSize); }; - const filteredLenses = lenses.filter((lens) => { - const textMatch = Object.values(lens).some((value) => - value?.toString().toLowerCase().includes(searchText.toLowerCase()) - ); + const filteredLenses = useMemo(() => { + return lenses.filter((lens) => { + const textMatch = Object.values(lens).some((value) => + value?.toString().toLowerCase().includes(searchText.toLowerCase()) + ); - const advancedMatch = Object.entries(searchParams).every(([key, value]) => { - if (value === null || value === '') return true; - if (key === 'side') { - if (value === 'all') return true; - return lens.side === value; - } - if (key === 'issued') { - return lens.issued === value || value === "all"; - } - return lens[key] === value; + const advancedMatch = Object.entries(searchParams).every(([key, value]) => { + if (value === null || value === '') return true; + if (key === 'side') { + if (value === 'all') return true; + return lens.side === value; + } + if (key === 'issued') { + return lens.issued === value || value === "all"; + } + return lens[key] === value; + }); + + return textMatch && advancedMatch && (searchParams.issued || lens.issued === false); + }).sort((a, b) => { + return a.preset_refraction - b.preset_refraction; }); - - return textMatch && advancedMatch && (searchParams.issued || lens.issued === false); - }).sort((a, b) => { - return a.preset_refraction - b.preset_refraction; - }); + }, [lenses, searchText, searchParams]); const pagination = { currentPage: currentPage, diff --git a/web-app/src/Components/Widgets/LensIssueFormModal.jsx b/web-app/src/Components/Widgets/LensIssueFormModal.jsx deleted file mode 100644 index c35d7af..0000000 --- a/web-app/src/Components/Widgets/LensIssueFormModal.jsx +++ /dev/null @@ -1,318 +0,0 @@ -import {useEffect, useState} from "react"; -import { - Modal, Input, Button, notification, Typography, Collapse, Steps, Row, Alert, Col, DatePicker, Spin, Grid -} from "antd"; -import PropTypes from "prop-types"; -import getAllPatients from "../../old_api/patients/getAllPatients.js"; -import {useAuth} from "../../Hooks/AuthContext.jsx"; -import dayjs from "dayjs"; -import getNotIssuedLenses from "../../old_api/lenses/getNotIssuedLenses.js"; - -const {useBreakpoint} = Grid; - -const LensIssueFormModal = ({visible, onCancel, onSubmit}) => { - const {api} = useAuth(); - const screens = useBreakpoint(); - - const [patients, setPatients] = useState([]); - const [lenses, setLenses] = useState([]); - - const [searchPatientString, setSearchPatientString] = useState(""); - const [searchLensString, setSearchLensString] = useState(""); - const [issueDate, setIssueDate] = useState(dayjs(new Date())); - - const [selectedPatient, setSelectedPatient] = useState(null); - const [selectedLens, setSelectedLens] = useState(null); - - const [loading, setLoading] = useState(false); - - const [currentStep, setCurrentStep] = useState(0); - - useEffect(() => { - if (visible) { - fetchPatients(); - fetchLenses(); - } - }, [visible]); - - const fetchPatients = async () => { - const data = await getAllPatients(api); - setPatients(data); - }; - - const fetchLenses = async () => { - const data = await getNotIssuedLenses(api); - setLenses(data); - }; - - const handleOk = async () => { - try { - setLoading(true); - setCurrentStep(0); - onSubmit(issueDate.format("YYYY-MM-DD"), selectedPatient.id, selectedLens.id); - setSelectedPatient(null); - setSelectedLens(null); - setIssueDate(dayjs(new Date())); - setLoading(false); - } catch (errorInfo) { - console.error("Validation Failed:", errorInfo); - } - }; - - const filteredPatients = patients - .filter((patient) => { - const searchLower = searchPatientString.toLowerCase(); - - return Object.values(patient) - .filter(value => typeof value === "string") - .some(value => value.toLowerCase().includes(searchLower)); - }); - - const patientsItems = filteredPatients.map((patient) => ({ - key: patient.id, - label: `${patient.last_name} ${patient.first_name} (${new Date(patient.birthday).toLocaleDateString("ru-RU")})`, - children:
-

Пациент: {patient.last_name} {patient.first_name}

-

Дата рождения: {new Date(patient.birthday).toLocaleDateString("ru-RU")}

-

Диагноз: {patient.diagnosis}

-

Email: {patient.email}

-

Телефон: {patient.phone}

- -
, - })); - - const filteredLenses = lenses.filter((lens) => { - const searchLower = searchLensString.toLowerCase(); - - return Object.values(lens) - .filter(value => typeof value === "string") - .some(value => value.toLowerCase().includes(searchLower)); - }) - - const lensesItems = filteredLenses.map((lens) => ({ - key: lens.id, label: `Линза ${lens.side} ${lens.diameter} мм`, children:
-

Диаметр: {lens.diameter}

-

Тор: {lens.tor}

-

Пресетная рефракция: {lens.preset_refraction}

-

Диаметр: {lens.diameter}

-

FVC: {lens.fvc}

-

Острота зрения (Trial): {lens.trial}

-

Периферийная торичность: {lens.periphery_toricity}

-

Сторона: {lens.side}

-

Esa: {lens.esa}

- -
, - })); - - const SelectPatientStep = () => { - return selectedPatient ? ( -
- - {selectedPatient.last_name} {selectedPatient.first_name} - -

Дата рождения: {new Date(selectedPatient.birthday).toLocaleDateString("ru-RU")}

-

Email: {selectedPatient.email}

-

Телефон: {selectedPatient.phone}

- -
) : (<> - setSearchPatientString(e.target.value)} - style={{marginBottom: 16}} - allowClear - /> - -
- -
- ) - }; - - const SelectLensStep = () => { - return selectedLens ? (
- - {selectedLens.diameter} {selectedLens.tor} {selectedLens.preset_refraction} - -

Диаметр: {selectedLens.diameter}

-

Тор: {selectedLens.tor}

-

Пресетная рефракция: {selectedLens.preset_refraction}

-

Диаметр: {selectedLens.diameter}

-

FVC: {selectedLens.fvc}

-

Острота зрения (Trial): {selectedLens.trial}

-

Периферийная торичность: {selectedLens.periphery_toricity}

-

Сторона: {selectedLens.side}

-

Esa: {selectedLens.esa}

- -
) : (<> - setSearchLensString(e.target.value)} - style={{marginBottom: 16}} - allowClear - /> - -
- -
- ) - }; - - const ConfirmStep = () => { - return (<> - - - - - - Дата выдачи: {issueDate?.toDate().toLocaleDateString("ru-RU")} - - - - setIssueDate(date)} - format="DD.MM.YYYY" - style={{width: "100%"}} - /> - - - -
- - {selectedPatient.last_name} {selectedPatient.first_name} - -

Дата рождения: {new Date(selectedPatient.birthday).toLocaleDateString("ru-RU")}

-

Email: {selectedPatient.email}

-

Телефон: {selectedPatient.phone}

-

Линза: {selectedLens.diameter} {selectedLens.tor} {selectedLens.preset_refraction}

-
- -
- - {selectedLens.diameter} {selectedLens.tor} {selectedLens.preset_refraction} - -

Диаметр: {selectedLens.diameter}

-

Тор: {selectedLens.tor}

-

Пресетная рефракция: {selectedLens.preset_refraction}

-

Диаметр: {selectedLens.diameter}

-

FVC: {selectedLens.fvc}

-

Острота зрения (Trial): {selectedLens.trial}

-

Периферийная торичность: {selectedLens.periphery_toricity}

-

Сторона: {selectedLens.side}

-

Esa: {selectedLens.esa}

-
- ); - }; - - const steps = [{ - title: 'Выбор пациента', content: , - }, { - title: 'Выбор линзы', content: , - }, { - title: 'Подтверждение', content: , - },]; - - const isActiveNextButton = () => { - if (currentStep === 0 && !selectedPatient) { - return false; - } - - return !(currentStep === 1 && !selectedLens); - }; - - const isActivePrevButton = () => { - return currentStep > 0; - }; - - const isActiveFinishButton = () => { - return currentStep === steps.length - 1; - }; - - return ( { - setSelectedPatient(null); - setSelectedLens(null); - setCurrentStep(0); - setIssueDate(dayjs(new Date())); - onCancel(); - }} - footer={null} - maskClosable={false} - width={!screens.xs ? 700 : "90%"} - centered - > - {loading ? (
- -
) : (
- {steps[currentStep].content} -
)} - - - {!screens.xs && ()} - - - - - -
); -}; - -LensIssueFormModal.propTypes = { - visible: PropTypes.bool.isRequired, - onCancel: PropTypes.func.isRequired, - onSubmit: PropTypes.func.isRequired, -}; - -export default LensIssueFormModal;