front-hub/src/pages/AccountSettings/DocumentsDialog/NkoDocumentsDialog.tsx

142 lines
5.1 KiB
TypeScript
Raw Normal View History

import { Box, Button, Dialog, IconButton, Typography } from "@mui/material";
2023-06-02 08:22:14 +00:00
import CloseSmallIcon from "@root/components/icons/CloseSmallIcon";
import { closeDocumentsDialog, setDocument, useUserStore } from "@root/stores/user";
2023-06-02 08:22:14 +00:00
import DocumentUploadItem from "./DocumentUploadItem";
import DocumentItem from "./DocumentItem";
2023-07-06 21:52:07 +00:00
import { verify } from "../helper";
2023-07-25 22:31:04 +00:00
import { VerificationStatus } from "@root/model/account";
import { sendDocuments } from "@root/api/verification";
2023-07-13 13:30:47 +00:00
import { readFile } from "@root/utils/readFile";
2023-06-02 08:22:14 +00:00
export default function NkoDocumentsDialog() {
const isOpen = useUserStore((state) => state.isDocumentsDialogOpen);
const verificationStatus = useUserStore((state) => state.verificationStatus);
const documents = useUserStore((state) => state.documents);
const documentsUrl = useUserStore((state) => state.documentsUrl);
const userId = useUserStore((state) => state.userId) ?? "";
2023-06-02 08:22:14 +00:00
const sendUploadedDocuments = async () => {
closeDocumentsDialog();
2023-07-06 21:52:07 +00:00
if (!documents["ИНН"].file || !documents["Устав"].file || !documents["Свидетельство о регистрации НКО"].file)
return;
2023-07-06 21:52:07 +00:00
const inn = await readFile(documents["ИНН"].file, "binary");
const rule = await readFile(documents["Устав"].file, "binary");
const certificate = await readFile(documents["Свидетельство о регистрации НКО"].file, "binary");
2023-07-06 21:52:07 +00:00
await sendDocuments({ status: "nko", inn, rule, certificate });
2023-07-06 21:52:07 +00:00
setDocument("ИНН", null);
setDocument("Устав", null);
setDocument("Свидетельство о регистрации НКО", null);
2023-07-06 21:52:07 +00:00
await verify(userId);
};
2023-07-06 21:52:07 +00:00
const documentElements =
verificationStatus === VerificationStatus.VERIFICATED ? (
<>
<DocumentItem
text="1. Свидетельство о регистрации НКО"
documentUrl={documentsUrl["Свидетельство о регистрации НКО"]}
/>
<DocumentItem text="2. Скан ИНН организации НКО (выписка из ЕГЮРЛ)" documentUrl={documentsUrl["ИНН"]} />
<DocumentItem text="3. Устав организации" documentUrl={documentsUrl["Устав"]} />
</>
) : (
<>
<DocumentUploadItem
text="1. Свидетельство о регистрации НКО"
accept="application/pdf"
document={documents["Свидетельство о регистрации НКО"]}
documentUrl={documentsUrl["Свидетельство о регистрации НКО"]}
onFileChange={(e) => setDocument("Свидетельство о регистрации НКО", e.target?.files?.[0] || null)}
/>
<DocumentUploadItem
text="2. Скан ИНН организации НКО (выписка из ЕГЮРЛ)"
accept="application/pdf"
document={documents["ИНН"]}
documentUrl={documentsUrl["ИНН"]}
onFileChange={(e) => setDocument("ИНН", e.target?.files?.[0] || null)}
/>
<DocumentUploadItem
text="3. Устав организации"
accept="application/pdf"
document={documents["Устав"]}
documentUrl={documentsUrl["Устав"]}
onFileChange={(e) => setDocument("Устав", e.target?.files?.[0] || null)}
/>
</>
);
2023-06-02 08:22:14 +00:00
return (
<Dialog
open={isOpen}
onClose={closeDocumentsDialog}
PaperProps={{
sx: {
width: "600px",
maxWidth: "600px",
backgroundColor: "white",
position: "relative",
display: "flex",
flexDirection: "column",
p: "20px",
gap: "20px",
borderRadius: "12px",
boxShadow: "none",
},
}}
slotProps={{
backdrop: { style: { backgroundColor: "rgb(0 0 0 / 0.7)" } },
}}
>
<IconButton
onClick={closeDocumentsDialog}
sx={{
position: "absolute",
right: "7px",
top: "7px",
}}
>
<CloseSmallIcon />
</IconButton>
<Box
sx={{
p: "20px",
}}
>
<Typography variant="h5" lineHeight="100%">
{verificationStatus === VerificationStatus.VERIFICATED ? "Ваши документы" : "Загрузите документы"}
</Typography>
<Typography
sx={{
fontWeight: 400,
fontSize: "16px",
lineHeight: "100%",
mt: "12px",
}}
2023-07-06 21:52:07 +00:00
>
для верификации НКО в формате PDF
</Typography>
<Box
sx={{
mt: "30px",
display: "flex",
flexDirection: "column",
gap: "25px",
}}
>
{documentElements}
</Box>
</Box>
{verificationStatus === VerificationStatus.NOT_VERIFICATED && (
<Button onClick={sendUploadedDocuments} variant="pena-contained-dark" sx={{ alignSelf: "end" }}>
Отправить
</Button>
)}
</Dialog>
);
2023-07-06 21:52:07 +00:00
}