From c9842cbe815958b81b5d1d959d13118c411caddd Mon Sep 17 00:00:00 2001 From: Korotkov <149740711+Dgerimus@users.noreply.github.com> Date: Sat, 19 Apr 2025 16:58:21 +0300 Subject: [PATCH 1/4] =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/article/index.js | 2 + src/components/button/index.js | 7 +- src/components/button/style.css | 17 +- src/components/comments-container/index.js | 25 +++ src/components/comments-container/style.css | 8 + src/components/comments-form/index.js | 53 ++++++ src/components/comments-form/style.css | 8 + src/components/form/index.js | 23 ++- src/components/form/style.css | 13 +- src/components/item-comment/index.js | 33 ++++ src/components/item-comment/style.css | 25 +++ src/components/prompt-for-comments/index.js | 26 +++ src/components/prompt-for-comments/style.css | 11 ++ src/components/textarea/index.js | 33 ++++ src/components/textarea/style.css | 10 ++ src/containers/comments/index.js | 175 +++++++++++++++++++ src/i18n/translations/en.json | 11 +- src/i18n/translations/ru.json | 11 +- src/store-redux/comments/action.js | 43 +++++ src/store-redux/comments/reducer.js | 37 ++++ src/store-redux/exports.js | 1 + src/utils/format-date.js | 18 ++ src/utils/list-to-tree/index.js | 2 + 23 files changed, 574 insertions(+), 18 deletions(-) create mode 100644 src/components/comments-container/index.js create mode 100644 src/components/comments-container/style.css create mode 100644 src/components/comments-form/index.js create mode 100644 src/components/comments-form/style.css create mode 100644 src/components/item-comment/index.js create mode 100644 src/components/item-comment/style.css create mode 100644 src/components/prompt-for-comments/index.js create mode 100644 src/components/prompt-for-comments/style.css create mode 100644 src/components/textarea/index.js create mode 100644 src/components/textarea/style.css create mode 100644 src/containers/comments/index.js create mode 100644 src/store-redux/comments/action.js create mode 100644 src/store-redux/comments/reducer.js create mode 100644 src/utils/format-date.js diff --git a/src/app/article/index.js b/src/app/article/index.js index 54f037b64..2de7e12d6 100644 --- a/src/app/article/index.js +++ b/src/app/article/index.js @@ -14,6 +14,7 @@ import { useDispatch, useSelector } from 'react-redux'; import shallowequal from 'shallowequal'; import articleActions from '../../store-redux/article/actions'; import HeadLayout from '../../components/head-layout'; +import Comments from '../../containers/comments'; function Article() { const store = useStore(); @@ -55,6 +56,7 @@ function Article() { + diff --git a/src/components/button/index.js b/src/components/button/index.js index 7d1d3d05c..b04e4d287 100644 --- a/src/components/button/index.js +++ b/src/components/button/index.js @@ -2,13 +2,14 @@ import { memo } from 'react'; import PropTypes from 'prop-types'; import { cn as bem } from '@bem-react/classname'; import './style.css'; - function Button({ onClick = () => {}, title, style, type = 'button' }) { const cn = bem('Button'); return (
- +
); } @@ -16,7 +17,7 @@ function Button({ onClick = () => {}, title, style, type = 'button' }) { Button.propTypes = { onClick: PropTypes.func, title: PropTypes.string, - style: PropTypes.oneOf(['text', 'primary', 'delete', 'outline']), + style: PropTypes.oneOf(['text', 'primary', 'delete', 'outline', 'text-primary']), type: PropTypes.oneOf(['button', 'submit']), }; diff --git a/src/components/button/style.css b/src/components/button/style.css index 0efc8a896..0ca4e0c2c 100644 --- a/src/components/button/style.css +++ b/src/components/button/style.css @@ -1,41 +1,44 @@ .Button_style_primary { background-color: var(--primary); color: var(--second-text); - &:hover { background-color: var(--background); border-color: var(--primary); color: var(--primary); } } - .Button_style_delete { background-color: var(--delete); color: var(--second-text); border-color: var(--delete); - &:hover { background-color: var(--background); color: var(--delete); border-color: var(--delete); } } - .Button_style_outline { border-color: var(--primary); color: var(--primary); - &:hover { background-color: var(--primary); color: var(--second-text); } } - .Button_style_text { padding: 0; border: none; - &:hover { color: var(--primary); } } + +.Button_style_text-primary { + padding: 0; + border: none; + color: var(--primary); + + &:hover { + color: var(--primary-select); + } +} diff --git a/src/components/comments-container/index.js b/src/components/comments-container/index.js new file mode 100644 index 000000000..b63d37de8 --- /dev/null +++ b/src/components/comments-container/index.js @@ -0,0 +1,25 @@ +import { memo } from 'react'; +import PropTypes from 'prop-types'; +import { cn as bem } from '@bem-react/classname'; +import './style.css'; + +function CommentsContainer({ children, title = '', count = 0 }) { + const cn = bem('CommentsContainer'); + + return ( +
+

+ {title} ({count}) +

+ {children} +
+ ); +} + +CommentsContainer.propTypes = { + children: PropTypes.node.isRequired, + title: PropTypes.string, + count: PropTypes.number, +}; + +export default memo(CommentsContainer); diff --git a/src/components/comments-container/style.css b/src/components/comments-container/style.css new file mode 100644 index 000000000..f5fc18afe --- /dev/null +++ b/src/components/comments-container/style.css @@ -0,0 +1,8 @@ +.CommentsContainer { + color: var(--main-text); +} + +.CommentsContainer-header { + margin-bottom: 24px; + font-family: var(--second-font-family); +} diff --git a/src/components/comments-form/index.js b/src/components/comments-form/index.js new file mode 100644 index 000000000..42cbf8f0e --- /dev/null +++ b/src/components/comments-form/index.js @@ -0,0 +1,53 @@ +import { memo } from 'react'; +import PropTypes from 'prop-types'; +import Form from '../form'; +import Textarea from '../textarea'; +import './style.css'; +import { cn as bem } from '@bem-react/classname'; + +function CommentsForm({ + onSubmit = () => {}, + submitTitle, + title, + cancelTitle, + style, + option, + onClick = () => {}, + onChange = () => {}, + value, + success, + error, +}) { + const cn = bem('CommentsForm'); + + return ( +
+
+