From 3a616e237cbac1e1aac8c4b2457b3938197c4b95 Mon Sep 17 00:00:00 2001 From: sardq Date: Thu, 11 Jan 2024 18:47:05 +0400 Subject: [PATCH] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B8=20=D0=BE=D1=82=D1=87=D0=B5?= =?UTF-8?q?=D1=82=20=D0=BF=D0=BE=205=20=D0=BB=D0=B0=D0=B1=D0=BE=D1=80?= =?UTF-8?q?=D0=B0=D1=82=D0=BE=D1=80=D0=BD=D0=BE=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 5 lab/src/assets/a.png | Bin 0 -> 6922 bytes 5 lab/src/assets/nick.png | Bin 0 -> 14057 bytes 5 lab/src/assets/p.png | Bin 0 -> 14878 bytes .../src/components/information/form/Info.jsx | 46 ++++++++++++++ .../components/information/form/InfoModal.jsx | 18 ++++++ .../information/hooks/HelpFormModalHook.js | 45 ++++++++++++++ .../components/messages/form/MessagesForm.jsx | 33 +++++++++++ .../messages/form/MessagesItemForm.jsx | 26 ++++++++ .../components/messages/hooks/MessagesHook.js | 29 +++++++++ .../messages/hooks/MessagesItemFormHook.js | 56 ++++++++++++++++++ .../messages/hooks/MessagesItemHook.js | 38 ++++++++++++ .../messages/service/MessagesApiService.js | 5 ++ 5 lab/src/components/messages/table/Line.jsx | 38 ++++++++++++ .../components/messages/table/LinesTable.jsx | 30 ++++++++++ .../messages/table/LinesTableRow.jsx | 24 ++++++++ Отчеты/Otchet5_IP_Razubaev_PIbd-21.odt | Bin 0 -> 18733 bytes 16 files changed, 388 insertions(+) create mode 100644 5 lab/src/assets/a.png create mode 100644 5 lab/src/assets/nick.png create mode 100644 5 lab/src/assets/p.png create mode 100644 5 lab/src/components/information/form/Info.jsx create mode 100644 5 lab/src/components/information/form/InfoModal.jsx create mode 100644 5 lab/src/components/information/hooks/HelpFormModalHook.js create mode 100644 5 lab/src/components/messages/form/MessagesForm.jsx create mode 100644 5 lab/src/components/messages/form/MessagesItemForm.jsx create mode 100644 5 lab/src/components/messages/hooks/MessagesHook.js create mode 100644 5 lab/src/components/messages/hooks/MessagesItemFormHook.js create mode 100644 5 lab/src/components/messages/hooks/MessagesItemHook.js create mode 100644 5 lab/src/components/messages/service/MessagesApiService.js create mode 100644 5 lab/src/components/messages/table/Line.jsx create mode 100644 5 lab/src/components/messages/table/LinesTable.jsx create mode 100644 5 lab/src/components/messages/table/LinesTableRow.jsx create mode 100644 Отчеты/Otchet5_IP_Razubaev_PIbd-21.odt diff --git a/5 lab/src/assets/a.png b/5 lab/src/assets/a.png new file mode 100644 index 0000000000000000000000000000000000000000..54ae3b536876be25ad417bcb5ff58e1dfa40c7e8 GIT binary patch literal 6922 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 F_&;@3I{E+r literal 0 HcmV?d00001 diff --git a/5 lab/src/components/information/form/Info.jsx b/5 lab/src/components/information/form/Info.jsx new file mode 100644 index 0000000..b00b40c --- /dev/null +++ b/5 lab/src/components/information/form/Info.jsx @@ -0,0 +1,46 @@ +/* eslint-disable import/extensions */ +/* eslint-disable import/no-unresolved */ +import { + ListGroup, Modal, Button, Form, + } from 'react-bootstrap'; +import useLines from '../../users/hooks/UsersHook'; +import useLinesFormModal from '../hooks/HelpFormModalHook'; +import NickModal from './InfoModal'; + +const InfoForm = () => { + const { handleLinesChange } = useLines(); + const { + isFormModalShow, + isFormValidated, + showFormModal, + handleFormClose, + } = useLinesFormModal(handleLinesChange); + return ( + <> + + + info +
Информация
+
+
+ handleFormClose()}> + + Информация + +
+ + + + + + +
+
+ + ); +}; + +export default InfoForm; diff --git a/5 lab/src/components/information/form/InfoModal.jsx b/5 lab/src/components/information/form/InfoModal.jsx new file mode 100644 index 0000000..fa343a9 --- /dev/null +++ b/5 lab/src/components/information/form/InfoModal.jsx @@ -0,0 +1,18 @@ +import PropTypes from 'prop-types'; + +const InfoModal = () => { + return ( +
+

Информация

+

Данный сделан специально для дисциплины интернет программирование

+

в 2023 году

+
+ ); +}; + +InfoModal.propTypes = { + password: PropTypes.string, + setPassword: PropTypes.func, +}; + +export default InfoModal; diff --git a/5 lab/src/components/information/hooks/HelpFormModalHook.js b/5 lab/src/components/information/hooks/HelpFormModalHook.js new file mode 100644 index 0000000..720d5e1 --- /dev/null +++ b/5 lab/src/components/information/hooks/HelpFormModalHook.js @@ -0,0 +1,45 @@ +import { useState } from 'react'; +import useModal from '../../modal/ModalHook'; +import useLinesItemForm from '../../users/hooks/UsersItemFormHook'; + +const useLinesFormModal = (linesChangeHandle, password) => { + const { isModalShow, showModal, hideModal } = useModal(); + // eslint-disable-next-line no-unused-vars + const [currentId, setCurrentId] = useState(0); + const id = localStorage.getItem('UserId'); + const { + item, + validated, + handleSubmitChange, + handleChange, + resetValidity, + } = useLinesItemForm(id, linesChangeHandle); + + const showModalDialog = (ids) => { + setCurrentId(ids); + resetValidity(); + showModal(); + }; + + const onClose = () => { + setCurrentId(-1); + hideModal(); + }; + + const onSubmit = async (event) => { + if (await handleSubmitChange(event, 'password', password)) { + onClose(); + } + }; + return { + isFormModalShow: isModalShow, + isFormValidated: validated, + showFormModal: showModalDialog, + currentItem: item, + handleItemChange: handleChange, + handleFormSubmit: onSubmit, + handleFormClose: onClose, + }; +}; + +export default useLinesFormModal; diff --git a/5 lab/src/components/messages/form/MessagesForm.jsx b/5 lab/src/components/messages/form/MessagesForm.jsx new file mode 100644 index 0000000..aefeda4 --- /dev/null +++ b/5 lab/src/components/messages/form/MessagesForm.jsx @@ -0,0 +1,33 @@ +import PropTypes from 'prop-types'; +import { Form } from 'react-bootstrap'; +import useLinesItemForm from '../hooks/MessagesItemFormHook'; +import LinesItemForm from './MessagesItemForm.jsx'; + +const LinesForm = ({ id, messages }) => { + const { + validated, + } = useLinesItemForm(id); + const { message } = messages; + if (message !== undefined) { + return ( + <> +
+ { + message.map((messag) => + ) + } + + + ); + // eslint-disable-next-line no-else-return + } else { + return (<>); + } +}; + +LinesForm.propTypes = { + id: PropTypes.number, + messages: PropTypes.object, +}; + +export default LinesForm; diff --git a/5 lab/src/components/messages/form/MessagesItemForm.jsx b/5 lab/src/components/messages/form/MessagesItemForm.jsx new file mode 100644 index 0000000..2768322 --- /dev/null +++ b/5 lab/src/components/messages/form/MessagesItemForm.jsx @@ -0,0 +1,26 @@ +import PropTypes from 'prop-types'; + +const LinesItemForm = ({ item }) => { + let cl; + // eslint-disable-next-line eqeqeq + if (item.senderId == localStorage.getItem('UserId')) { + cl = 'd-flex align-items-end flex-column gap-3'; + } else { + cl = 'd-flex align-items-start flex-column gap-3'; + } + return ( +
+
+

{item.msg}

+

{item.time}

+
+
+ ); +}; + +LinesItemForm.propTypes = { + item: PropTypes.object, + handleChange: PropTypes.func, +}; + +export default LinesItemForm; diff --git a/5 lab/src/components/messages/hooks/MessagesHook.js b/5 lab/src/components/messages/hooks/MessagesHook.js new file mode 100644 index 0000000..2583a87 --- /dev/null +++ b/5 lab/src/components/messages/hooks/MessagesHook.js @@ -0,0 +1,29 @@ +import { useEffect, useState } from 'react'; +import LinesApiService from '../service/MessagesApiService'; + +const useLines = (typeFilter) => { + const [linesRefresh, setLinesRefresh] = useState(false); + const [messages, setLines] = useState([]); + const handleLinesChange = () => setLinesRefresh(!linesRefresh); + + const getLines = async () => { + let expand = ''; + if (typeFilter) { + expand = `?groupId=${typeFilter}`; + } + const data = await LinesApiService.getAll(expand); + setLines(data ?? []); + }; + + useEffect(() => { + getLines(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [linesRefresh, typeFilter]); + + return { + messages, + handleLinesChange, + }; +}; + +export default useLines; diff --git a/5 lab/src/components/messages/hooks/MessagesItemFormHook.js b/5 lab/src/components/messages/hooks/MessagesItemFormHook.js new file mode 100644 index 0000000..364367f --- /dev/null +++ b/5 lab/src/components/messages/hooks/MessagesItemFormHook.js @@ -0,0 +1,56 @@ +import { useState } from 'react'; +import toast from 'react-hot-toast'; +import LinesApiService from '../service/MessagesApiService'; +import useLinesItem from './MessagesItemHook'; +import useLines from './MessagesHook'; + +const useLinesItemForm = (id, linesChangeHandle) => { + const { item } = useLinesItem(id); + const tmp = useLines(); + const ids = tmp.messages.length + 1; + const { messages } = useLines(id); + const [validated, setValidated] = useState(false); + const resetValidity = () => { + setValidated(false); + }; + + const getLineObject = (formData, text, groupID) => { + const groupId = groupID.toString(); + const senderId = localStorage.getItem('UserId').toString(); + const msg = text.toString(); + const time = `${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()}`; + return { + groupId: groupId.toString(), + senderId: senderId.toString(), + msg: msg.toString(), + time: time.toString(), + }; + }; + + const handleSubmit = async (event, text, groupId, setMessages) => { + const form = event.currentTarget; + event.preventDefault(); + event.stopPropagation(); + const body = getLineObject(item, text, groupId); + if (form.checkValidity()) { + await LinesApiService.create(body); + body.id = ids; + messages.push(body); + setMessages({ message: messages }); + if (linesChangeHandle) linesChangeHandle(); + toast.success('Элемент успешно сохранен', { id: 'LinesTable' }); + return true; + } + setValidated(true); + return false; + }; + + return { + item, + validated, + handleSubmit, + resetValidity, + }; +}; + +export default useLinesItemForm; diff --git a/5 lab/src/components/messages/hooks/MessagesItemHook.js b/5 lab/src/components/messages/hooks/MessagesItemHook.js new file mode 100644 index 0000000..35e02b0 --- /dev/null +++ b/5 lab/src/components/messages/hooks/MessagesItemHook.js @@ -0,0 +1,38 @@ +import { useEffect, useState } from 'react'; +import LinesApiService from '../service/MessagesApiService'; + +const useLinesItem = (id) => { + const emptyItem = { + groupId: '', + groupMessages: [ + { + id: '', + senderId: '', + recieverId: '', + msg: '', + }, + ], + }; + const [item, setItem] = useState({ ...emptyItem }); + + const getItem = async (itemId = undefined) => { + if (itemId && itemId > 0) { + const data = await LinesApiService.get(itemId); + setItem(data); + } else { + setItem({ ...emptyItem }); + } + }; + + useEffect(() => { + getItem(id); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [id]); + + return { + item, + setItem, + }; +}; + +export default useLinesItem; diff --git a/5 lab/src/components/messages/service/MessagesApiService.js b/5 lab/src/components/messages/service/MessagesApiService.js new file mode 100644 index 0000000..a289b82 --- /dev/null +++ b/5 lab/src/components/messages/service/MessagesApiService.js @@ -0,0 +1,5 @@ +import ApiService from '../../api/ApiService'; + +const LinesApiService = new ApiService('messages'); + +export default LinesApiService; diff --git a/5 lab/src/components/messages/table/Line.jsx b/5 lab/src/components/messages/table/Line.jsx new file mode 100644 index 0000000..b260198 --- /dev/null +++ b/5 lab/src/components/messages/table/Line.jsx @@ -0,0 +1,38 @@ +import PropTypes from 'prop-types'; +import useLines from '../../users/hooks/UsersHook'; + +const Line = ({ + index, personId, friendId, +}) => { + const { users } = useLines(); + let personNickname = null; + users.map((line) => { + if (line.id === personId) { + personNickname = line.nickname; + return ''; + } + return ''; + }); + let friendNickname = null; + users.map((line) => { + if (line.id === friendId) { + friendNickname = line.nickname; + return ''; + } + return ''; + }); + return ( + + {index + 1} + {personNickname} + {friendNickname} + + ); +}; +Line.propTypes = { + index: PropTypes.number, + personId: PropTypes.number, + friendId: PropTypes.number, + users: PropTypes.object, +}; +export default Line; diff --git a/5 lab/src/components/messages/table/LinesTable.jsx b/5 lab/src/components/messages/table/LinesTable.jsx new file mode 100644 index 0000000..bd721e7 --- /dev/null +++ b/5 lab/src/components/messages/table/LinesTable.jsx @@ -0,0 +1,30 @@ +import PropTypes from 'prop-types'; +import { Table } from 'react-bootstrap'; + +const LinesTable = ({ children }) => { + return ( + + + + + + + + + + + + + + + {children} + +
id человекадруг
+ ); +}; + +LinesTable.propTypes = { + children: PropTypes.node, +}; + +export default LinesTable; diff --git a/5 lab/src/components/messages/table/LinesTableRow.jsx b/5 lab/src/components/messages/table/LinesTableRow.jsx new file mode 100644 index 0000000..413232f --- /dev/null +++ b/5 lab/src/components/messages/table/LinesTableRow.jsx @@ -0,0 +1,24 @@ +import PropTypes from 'prop-types'; + +const LinesTableRow = ({ + index, line, +}) => { + return ( + + {index + 1} + {line.personId} + {line.friend} + {line.nickname} + + ); +}; + +LinesTableRow.propTypes = { + index: PropTypes.number, + line: PropTypes.object, + onDelete: PropTypes.func, + onEdit: PropTypes.func, + onEditInPage: PropTypes.func, +}; + +export default LinesTableRow; diff --git a/Отчеты/Otchet5_IP_Razubaev_PIbd-21.odt b/Отчеты/Otchet5_IP_Razubaev_PIbd-21.odt new file mode 100644 index 0000000000000000000000000000000000000000..8b3f2bd792f2cb0b48f48dc6f0feec87504a76e0 GIT binary patch literal 18733 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