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;