From 457cbfe3d8b1805fcf5809f518a617b51b08a560 Mon Sep 17 00:00:00 2001 From: Anton Kopitsa Date: Tue, 30 Apr 2019 19:24:56 +0300 Subject: [PATCH 01/17] Init commit --- public/favicon.ico | Bin 3870 -> 0 bytes public/index.html | 5 +- public/ya-mail-favicon.png | Bin 0 -> 318 bytes src/app/app.css | 31 +-- src/app/app.jsx | 226 +++++++++++++++++- src/header/header.css | 3 + src/header/header.jsx | 23 ++ src/header/menu/menu.css | 15 ++ src/header/menu/menu.jsx | 15 ++ .../message-creator/message-creator.css | 5 + .../message-creator/message-creator.jsx | 19 ++ src/header/search-bar/search-bar.css | 20 ++ src/header/search-bar/search-bar.jsx | 9 + .../yandex-service-logo.css | 16 ++ .../yandex-service-logo.jsx | 17 ++ src/index.css | 11 +- .../left-menu/folders-list/folders-list.css | 30 +++ .../left-menu/folders-list/folders-list.jsx | 18 ++ src/main-block/left-menu/left-menu.css | 24 ++ src/main-block/left-menu/left-menu.jsx | 15 ++ src/main-block/main-block.css | 5 + src/main-block/main-block.jsx | 25 ++ .../messages-block/footer/footer.css | 18 ++ .../messages-block/footer/footer.jsx | 21 ++ .../messages-block/header/header.css | 51 ++++ .../messages-block/header/header.jsx | 42 ++++ .../hidden-message/hidden-message.css | 38 +++ .../hidden-message/hidden-message.jsx | 26 ++ .../messages-block/message/message.css | 120 ++++++++++ .../messages-block/message/message.jsx | 48 ++++ .../messages-block/messages-block.css | 45 ++++ .../messages-block/messages-block.jsx | 67 ++++++ src/resources/yandex-mail.png | Bin 0 -> 91227 bytes 33 files changed, 959 insertions(+), 49 deletions(-) delete mode 100644 public/favicon.ico create mode 100644 public/ya-mail-favicon.png create mode 100644 src/header/header.css create mode 100644 src/header/header.jsx create mode 100644 src/header/menu/menu.css create mode 100644 src/header/menu/menu.jsx create mode 100644 src/header/message-creator/message-creator.css create mode 100644 src/header/message-creator/message-creator.jsx create mode 100644 src/header/search-bar/search-bar.css create mode 100644 src/header/search-bar/search-bar.jsx create mode 100644 src/header/yandex-service-logo/yandex-service-logo.css create mode 100644 src/header/yandex-service-logo/yandex-service-logo.jsx create mode 100644 src/main-block/left-menu/folders-list/folders-list.css create mode 100644 src/main-block/left-menu/folders-list/folders-list.jsx create mode 100644 src/main-block/left-menu/left-menu.css create mode 100644 src/main-block/left-menu/left-menu.jsx create mode 100644 src/main-block/main-block.css create mode 100644 src/main-block/main-block.jsx create mode 100644 src/main-block/messages-block/footer/footer.css create mode 100644 src/main-block/messages-block/footer/footer.jsx create mode 100644 src/main-block/messages-block/header/header.css create mode 100644 src/main-block/messages-block/header/header.jsx create mode 100644 src/main-block/messages-block/hidden-message/hidden-message.css create mode 100644 src/main-block/messages-block/hidden-message/hidden-message.jsx create mode 100644 src/main-block/messages-block/message/message.css create mode 100644 src/main-block/messages-block/message/message.jsx create mode 100644 src/main-block/messages-block/messages-block.css create mode 100644 src/main-block/messages-block/messages-block.jsx create mode 100644 src/resources/yandex-mail.png diff --git a/public/favicon.ico b/public/favicon.ico deleted file mode 100644 index a11777cc471a4344702741ab1c8a588998b1311a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3870 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 baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ diff --git a/public/index.html b/public/index.html index 9a8ef8f..4f4d4b1 100644 --- a/public/index.html +++ b/public/index.html @@ -2,16 +2,15 @@ - + - React App + Яндекс.Почта -
diff --git a/public/ya-mail-favicon.png b/public/ya-mail-favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..555ec0bb9fff5e461d48a42c8ef2876f87ac809b GIT binary patch literal 318 zcmV-E0m1%>P)Nkl { + let newMessagesListActualSize = this.messagesListActualSize; + const newMessagesList = prevState.messagesList; + const newOverflowMessages = this.overflowMessages; + + while (newMessagesListActualSize >= this.messagesPerPage) { + for (let index = newMessagesList.length - 1; index >= 0; index--) { + const message = newMessagesList[index]; + if (!message.toDelete) { + message.toDelete = true; + newMessagesListActualSize--; + newOverflowMessages.push(message); + setTimeout(() => { + if (message.toDelete) { + newMessagesList.splice(newMessagesList.indexOf(index), 1); + message.toDelete = false; + } + }, 1500); + break; + } + } + } + const newMessage = this.buildNewMessage(); + + newMessagesListActualSize++; + newMessagesList.unshift(newMessage); + + setTimeout(() => { + newMessage.toCreate = true; + this.setState({ + messagesList: newMessagesList + }); + }, 500); + + this.overflowMessages = newOverflowMessages; + this.messagesListActualSize = newMessagesListActualSize; + return { + messagesList: newMessagesList + }; + }); + } + + handleSelectAll() { + this.setState(prevState => { + const newMessagesList = prevState.messagesList; + for (let i = 0; i < newMessagesList.length; i++) { + newMessagesList[i].selected = !prevState.selectAllCheckbox; + } + + return { + selectAllCheckbox: !prevState.selectAllCheckbox, + messagesList: newMessagesList + }; + }); + } + + selectCheckbox(messageIndex) { + this.setState(prevState => { + const newMessagesList = prevState.messagesList; + newMessagesList[messageIndex].selected = !newMessagesList[messageIndex].selected; + return { + messagesList: newMessagesList + }; + }); + } + + deleteSelectedMessages() { + this.setState(prevState => { + let newMessagesListActualSize = this.messagesListActualSize; + const newMessagesList = prevState.messagesList; + const newOverflowMessages = this.overflowMessages; + + for (let i = 0; i < newMessagesList.length; i++) { + const message = newMessagesList[i]; + if (message.selected) { + if (!message.toDelete) { + message.toDelete = true; + message.toCreate = false; + newMessagesListActualSize--; + if (newOverflowMessages.length > 0) { + const newMessage = newOverflowMessages.pop(); + newMessage.toCreate = false; + setTimeout(() => { + newMessage.toCreate = true; + this.setState({ + messagesList: newMessagesList + }); + }, 500); + if (newMessage.toDelete) { + newMessage.toDelete = false; + } else { + newMessagesList.push(newMessage); + } + newMessagesListActualSize++; + } + } + } + } + + setTimeout(() => { + this.setState({ + messagesList: prevState.messagesList.filter(message => !message.selected) + }); + }, 1500); + + this.overflowMessages = newOverflowMessages; + this.messagesListActualSize = newMessagesListActualSize; + return { + selectAllCheckbox: false, + messagesList: newMessagesList + }; + }); + } + + buildNewMessage() { + const currentDate = new Date(); + + const id = currentDate.getTime(); + const langInd = Math.floor(Math.random() * this.state.senders.length); + const hiddenText = this.state.texts[langInd]; + + const monthInd = currentDate.getMonth().toLocaleString('rus'); + const month = this.state.months[monthInd]; + const day = currentDate.getDate(); + + const senderName = this.state.senders[Math.floor(Math.random() * this.state.senders.length)]; + return { + id, + senderName, + senderLogo: senderName[0], + subject: this.state.subjects[langInd], + date: `${day} ${month.substr(0, 3)}`, + hiddenText, + selected: false, + toDelete: false, + toCreate: false + }; + } + render() { return (
-
-

- Edit src/app/app.jsx and save to reload. -

-
- Learn React - -
+
+
); } diff --git a/src/header/header.css b/src/header/header.css new file mode 100644 index 0000000..74380dd --- /dev/null +++ b/src/header/header.css @@ -0,0 +1,3 @@ +.mail-page-header { + margin-top: 11px; +} diff --git a/src/header/header.jsx b/src/header/header.jsx new file mode 100644 index 0000000..fd10a56 --- /dev/null +++ b/src/header/header.jsx @@ -0,0 +1,23 @@ +import React from 'react'; + +import './header.css'; + +import Menu from './menu/menu'; +import YandexServiceLogo from './yandex-service-logo/yandex-service-logo'; +import SearchBar from './search-bar/search-bar'; +import MessageCreator from './message-creator/message-creator'; + +class Header extends React.Component { + render() { + return ( +
+ + + + +
+ ); + } +} + +export default Header; diff --git a/src/header/menu/menu.css b/src/header/menu/menu.css new file mode 100644 index 0000000..092157c --- /dev/null +++ b/src/header/menu/menu.css @@ -0,0 +1,15 @@ +.header__menu { + display: inline-block; + width: 20px; + height: 17px; + margin-top: -5px; + margin-right: 10px; + cursor: pointer; + vertical-align: middle; +} + +.menu__stripe { + height: 2px; + margin-top: 4px; + background-color: #000; +} diff --git a/src/header/menu/menu.jsx b/src/header/menu/menu.jsx new file mode 100644 index 0000000..39932c8 --- /dev/null +++ b/src/header/menu/menu.jsx @@ -0,0 +1,15 @@ +import React from 'react'; + +import './menu.css'; + +function Menu() { + return ( + window.event.preventDefault()}> +
+
+
+ + ); +} + +export default Menu; diff --git a/src/header/message-creator/message-creator.css b/src/header/message-creator/message-creator.css new file mode 100644 index 0000000..1c62b55 --- /dev/null +++ b/src/header/message-creator/message-creator.css @@ -0,0 +1,5 @@ +.header__message-creator { + cursor: pointer; + float: right; + opacity: 0.5; +} diff --git a/src/header/message-creator/message-creator.jsx b/src/header/message-creator/message-creator.jsx new file mode 100644 index 0000000..ca4e628 --- /dev/null +++ b/src/header/message-creator/message-creator.jsx @@ -0,0 +1,19 @@ +import React from 'react'; + +import './message-creator.css'; + +class MessageCreator extends React.Component { + render() { + return ( + + ); + } +} + +export default MessageCreator; diff --git a/src/header/search-bar/search-bar.css b/src/header/search-bar/search-bar.css new file mode 100644 index 0000000..3ac49b5 --- /dev/null +++ b/src/header/search-bar/search-bar.css @@ -0,0 +1,20 @@ +.header__search-bar { + display: inline-block; + width: 35%; + height: 34px; + padding-right: 10px; + padding-left: 16px; + margin-left: 12.5%; + + border-width: 0; + background: rgba(242, 244, 247, 1); + box-shadow: inset 0 0 0 1px rgba(217, 219, 222, 1); + color: #000; + + font: 15px 'Helvetica Neue', sans-serif; + line-height: 2; +} + +.header__search-bar::placeholder { + color: #727477; +} diff --git a/src/header/search-bar/search-bar.jsx b/src/header/search-bar/search-bar.jsx new file mode 100644 index 0000000..240e21e --- /dev/null +++ b/src/header/search-bar/search-bar.jsx @@ -0,0 +1,9 @@ +import React from 'react'; + +import './search-bar.css'; + +function SearchBar() { + return ; +} + +export default SearchBar; diff --git a/src/header/yandex-service-logo/yandex-service-logo.css b/src/header/yandex-service-logo/yandex-service-logo.css new file mode 100644 index 0000000..11a3087 --- /dev/null +++ b/src/header/yandex-service-logo/yandex-service-logo.css @@ -0,0 +1,16 @@ +.header__yandex-service-logo { + display: inline-block; + width: 200px; + height: 31px; + vertical-align: middle; +} + +.yandex-service-logo__image-link { + display: inline-block; + cursor: pointer; +} + +.yandex-service-logo__image { + width: 153px; + height: 31px; +} diff --git a/src/header/yandex-service-logo/yandex-service-logo.jsx b/src/header/yandex-service-logo/yandex-service-logo.jsx new file mode 100644 index 0000000..ac4175e --- /dev/null +++ b/src/header/yandex-service-logo/yandex-service-logo.jsx @@ -0,0 +1,17 @@ +import React from 'react'; + +import './yandex-service-logo.css'; + +import YandexMail from '../../resources/yandex-mail.png'; + +function YandexServiceLogo() { + return ( +
+ + yandex + +
+ ); +} + +export default YandexServiceLogo; diff --git a/src/index.css b/src/index.css index 2b6e525..355b134 100644 --- a/src/index.css +++ b/src/index.css @@ -1,12 +1,7 @@ body { + width: 100%; + height: 100%; padding: 0; margin: 0; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', - 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -code { - font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace; + background: #e5eaf0; } diff --git a/src/main-block/left-menu/folders-list/folders-list.css b/src/main-block/left-menu/folders-list/folders-list.css new file mode 100644 index 0000000..dc5c20a --- /dev/null +++ b/src/main-block/left-menu/folders-list/folders-list.css @@ -0,0 +1,30 @@ +.folders-list { + margin-top: 12px; +} + +.selected { + background-color: #cdd6e4; + border-radius: 4px; + color: #555; + font-weight: 700; +} + +.folders-list__folder { + overflow: hidden; + height: 14px; + padding: 5px 10px; + color: #707070; + font-size: 13px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.folders-list__folder:hover { + background-color: #d8e1ef; + border-radius: 4px; + cursor: pointer; +} + +.selected:hover { + background-color: #cdd6e4; +} diff --git a/src/main-block/left-menu/folders-list/folders-list.jsx b/src/main-block/left-menu/folders-list/folders-list.jsx new file mode 100644 index 0000000..c9e46bd --- /dev/null +++ b/src/main-block/left-menu/folders-list/folders-list.jsx @@ -0,0 +1,18 @@ +import React from 'react'; + +import './folders-list.css'; + +function FoldersList() { + return ( +
+
Входящие
+
Отправленные
+
Удаленные
+
Спам
+
Черновики
+
Создать папку
+
+ ); +} + +export default FoldersList; diff --git a/src/main-block/left-menu/left-menu.css b/src/main-block/left-menu/left-menu.css new file mode 100644 index 0000000..d74d4e5 --- /dev/null +++ b/src/main-block/left-menu/left-menu.css @@ -0,0 +1,24 @@ +.main-block__left-menu { + display: inline-block; + width: 19.5%; + min-width: 150px; +} + +.left-menu__write-letter { + overflow: hidden; + height: 32px; + padding: 0 10px; + background-color: #6287bd; + border-radius: 4px; + color: #fff; + font-size: 12px; + line-height: 32px; + + text-align: center; + text-overflow: ellipsis; + white-space: nowrap; +} + +.left-menu__write-letter:hover { + cursor: pointer; +} diff --git a/src/main-block/left-menu/left-menu.jsx b/src/main-block/left-menu/left-menu.jsx new file mode 100644 index 0000000..55a1084 --- /dev/null +++ b/src/main-block/left-menu/left-menu.jsx @@ -0,0 +1,15 @@ +import React from 'react'; + +import './left-menu.css'; +import FoldersList from './folders-list/folders-list'; + +function LeftMenu() { + return ( +
+
Написать
+ +
+ ); +} + +export default LeftMenu; diff --git a/src/main-block/main-block.css b/src/main-block/main-block.css new file mode 100644 index 0000000..7437726 --- /dev/null +++ b/src/main-block/main-block.css @@ -0,0 +1,5 @@ +.mail-page__main-block { + min-width: 800px; + min-height: 100%; + padding-top: 13px; +} diff --git a/src/main-block/main-block.jsx b/src/main-block/main-block.jsx new file mode 100644 index 0000000..bad3ca9 --- /dev/null +++ b/src/main-block/main-block.jsx @@ -0,0 +1,25 @@ +import React from 'react'; + +import './main-block.css'; +import LeftMenu from './left-menu/left-menu'; +import MessagesBlock from './messages-block/messages-block'; + +class MainBlock extends React.Component { + render() { + return ( +
+ + +
+ ); + } +} + +export default MainBlock; diff --git a/src/main-block/messages-block/footer/footer.css b/src/main-block/messages-block/footer/footer.css new file mode 100644 index 0000000..718d0d6 --- /dev/null +++ b/src/main-block/messages-block/footer/footer.css @@ -0,0 +1,18 @@ +.footer { + padding: 5px 20px; + margin: auto 0 5px 0; + float: right; + font-family: 'Helvetica Neue', sans-serif; + font-size: 11px; +} + +.footer-link { + display: inline-block; + overflow: hidden; + max-width: 200px; + margin-left: 20px; + color: #ccc; + cursor: pointer; + text-overflow: ellipsis; + white-space: nowrap; +} diff --git a/src/main-block/messages-block/footer/footer.jsx b/src/main-block/messages-block/footer/footer.jsx new file mode 100644 index 0000000..b7c5478 --- /dev/null +++ b/src/main-block/messages-block/footer/footer.jsx @@ -0,0 +1,21 @@ +import React from 'react'; + +import './footer.css'; + +function Footer() { + return ( +
+ window.event.preventDefault()}> + Помощь и обратная связь + + window.event.preventDefault()}> + Реклама + + window.event.preventDefault()}> + © 2001—2018, Яндекс + +
+ ); +} + +export default Footer; diff --git a/src/main-block/messages-block/header/header.css b/src/main-block/messages-block/header/header.css new file mode 100644 index 0000000..0fc6a3f --- /dev/null +++ b/src/main-block/messages-block/header/header.css @@ -0,0 +1,51 @@ +.messages-block-header { + overflow: auto; + padding: 10px 17px; + + border-bottom: solid 1px #e2e2e2; + font-family: 'Helvetica Neue', sans-serif; + font-size: 13px; + white-space: nowrap; +} + +.messages-block-header__action { + display: inline-block; + width: auto; + + margin-left: 15px; + color: #ccc; + cursor: pointer; + font-weight: 500; + text-overflow: ellipsis; + white-space: nowrap; +} + +.button-to-div { + padding: 0; + + border: 0; + font-family: inherit; + font-size: 100%; +} + +#check-all { + display: inline-block; + vertical-align: top; +} + +.checkbox { + display: inline-block; + width: 16px; + height: 16px; + margin-bottom: 0; + + border: 1px solid rgba(0, 0, 0, 0.2); + background-color: #fff; + + border-radius: 3px; + cursor: pointer; +} + +.cursor-pointer { + cursor: pointer; +} diff --git a/src/main-block/messages-block/header/header.jsx b/src/main-block/messages-block/header/header.jsx new file mode 100644 index 0000000..93e6f36 --- /dev/null +++ b/src/main-block/messages-block/header/header.jsx @@ -0,0 +1,42 @@ +import React from 'react'; + +import './header.css'; + +class Header extends React.Component { + render() { + return ( +
+ { + this.props.handleSelectAll(); + }} + /> + + + + +
+ ); + } +} + +export default Header; diff --git a/src/main-block/messages-block/hidden-message/hidden-message.css b/src/main-block/messages-block/hidden-message/hidden-message.css new file mode 100644 index 0000000..da7e406 --- /dev/null +++ b/src/main-block/messages-block/hidden-message/hidden-message.css @@ -0,0 +1,38 @@ +.hidden-message { + position: relative; + z-index: 1; + top: 0; + + display: none; + min-height: 500px; + + border-bottom: solid 1px #e2e2e2; + background-color: #fff; +} + +.hidden-message__open { + display: block; +} + +.hidden-message__closed { + display: none; +} + +.hidden-message__content { + overflow: auto; + padding: 20px; + font-family: 'Helvetica Neue', sans-serif; + font-size: 14px; + white-space: normal; +} + +.close-message { + margin-right: 5px; + + border: 0; + color: #ccc; + cursor: pointer; + float: right; + font-size: 35px; + font-weight: 100; +} diff --git a/src/main-block/messages-block/hidden-message/hidden-message.jsx b/src/main-block/messages-block/hidden-message/hidden-message.jsx new file mode 100644 index 0000000..1b53ac4 --- /dev/null +++ b/src/main-block/messages-block/hidden-message/hidden-message.jsx @@ -0,0 +1,26 @@ +import React from 'react'; + +import './hidden-message.css'; + +class HiddenMessage extends React.Component { + render() { + const classAddition = this.props.messageIsOpen ? '__open' : '__closed'; + return ( +
+ + +
{this.props.hiddenMessageText}
+
+ ); + } +} + +export default HiddenMessage; diff --git a/src/main-block/messages-block/message/message.css b/src/main-block/messages-block/message/message.css new file mode 100644 index 0000000..53c6a49 --- /dev/null +++ b/src/main-block/messages-block/message/message.css @@ -0,0 +1,120 @@ +.select-message__checkbox { + margin-top: 12px; + margin-right: 10px; + margin-left: 20px; +} + +.select-message__checkbox-label { + display: inline-block; + width: 46px; + height: 40px; + cursor: pointer; + vertical-align: middle; +} + +.message-container { + width: calc(100% - 46px - 3px); + padding: 0; + padding-right: 3px; + + border: 0; + cursor: pointer; + font-family: inherit; + font-size: 100%; +} + +.message { + overflow: hidden; + height: 0; + + border-bottom: solid 1px #e2e2e2; + font-family: 'Helvetica Neue', sans-serif; + font-size: 13px; + opacity: 0; + text-overflow: ellipsis; + transition: opacity 1.5s, height 1.5s; + white-space: nowrap; + will-change: transform, height, opacity; +} + +.message-info__sender-logo { + display: inline-block; + width: 30px; + height: 30px; + background-color: #f33; + + border-radius: 100px; + color: #fff; + line-height: 30px; + text-align: center; + vertical-align: middle; +} + +.bold { + font-weight: bold; +} + +.message-info__sender { + display: inline-block; + overflow: hidden; + width: 175px; + margin-left: 10px; + color: #000; + line-height: 30px; + text-align: left; + text-overflow: ellipsis; + vertical-align: middle; + + white-space: nowrap; +} + +.message-info__mark { + display: inline-block; + width: 10px; + height: 10px; + margin-right: 10px; + margin-left: 10px; + vertical-align: middle; +} + +.unread-mark { + background-color: #6287bd; + border-radius: 100px; +} + +.message-info__subject { + display: inline-block; + overflow: hidden; + width: calc(100% - 325px); + color: #000; + text-align: left; + text-overflow: ellipsis; + vertical-align: middle; + white-space: nowrap; +} + +.message-info__date-container { + display: inline-block; + overflow: hidden; + width: 70px; + margin-right: 10px; + margin-left: 0; + color: #9b9b9b; + text-overflow: ellipsis; + vertical-align: middle; + white-space: nowrap; +} + +.date-container__date { + float: right; +} + +.to-create { + height: 40px; + opacity: 1; +} + +.to-delete { + height: 0; + opacity: 0; +} diff --git a/src/main-block/messages-block/message/message.jsx b/src/main-block/messages-block/message/message.jsx new file mode 100644 index 0000000..b411b15 --- /dev/null +++ b/src/main-block/messages-block/message/message.jsx @@ -0,0 +1,48 @@ +import React from 'react'; + +import './message.css'; + +class Message extends React.Component { + render() { + const classAddition = + (this.props.message.toCreate ? ' to-create' : '') + + (this.props.message.toDelete ? ' to-delete' : ''); + return ( +
+ + + +
+ ); + } +} + +export default Message; diff --git a/src/main-block/messages-block/messages-block.css b/src/main-block/messages-block/messages-block.css new file mode 100644 index 0000000..282c13a --- /dev/null +++ b/src/main-block/messages-block/messages-block.css @@ -0,0 +1,45 @@ +.messages-block { + display: inline-block; + width: 78%; + min-width: 600px; + height: 100%; + margin-right: 0; + margin-left: 2%; + background-color: #fff; + border-radius: 4px; + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3); + + vertical-align: top; +} + +.checkbox { + display: inline-block; + width: 16px; + height: 16px; + + border: 1px solid rgba(0, 0, 0, 0.2); + background-color: #fff; + + border-radius: 3px; + cursor: pointer; +} + +#check-all { + margin-top: 0; + margin-bottom: 0; +} + +.messages-list { + height: 100%; + min-height: 500px; + + border-bottom: solid 1px #e2e2e2; +} + +.messages-list__open { + display: block; +} + +.messages-list__closed { + display: none; +} diff --git a/src/main-block/messages-block/messages-block.jsx b/src/main-block/messages-block/messages-block.jsx new file mode 100644 index 0000000..e9ca4e0 --- /dev/null +++ b/src/main-block/messages-block/messages-block.jsx @@ -0,0 +1,67 @@ +import React from 'react'; + +import './messages-block.css'; +import Header from './header/header'; +import HiddenMessage from './hidden-message/hidden-message'; +import Message from './message/message'; +import Footer from './footer/footer'; + +class MessagesBlock extends React.Component { + constructor(props) { + super(props); + this.openMessage = this.openMessage.bind(this); + this.closeMessage = this.closeMessage.bind(this); + + this.state = { + hiddenMessageText: this.props.hiddenMessageText, + messageIsOpen: this.props.messageIsOpen + }; + } + + closeMessage() { + this.setState({ + messageIsOpen: false + }); + } + + openMessage(message) { + this.setState({ + messageIsOpen: true, + hiddenMessageText: message.hiddenText + }); + } + + render() { + const messagesListClassAddition = !this.state.messageIsOpen ? '__open' : '__closed'; + return ( +
+
+ +
+ {this.props.messagesList.map((message, messageIndex) => { + return ( + + ); + })} +
+
+
+ ); + } +} + +export default MessagesBlock; diff --git a/src/resources/yandex-mail.png b/src/resources/yandex-mail.png new file mode 100644 index 0000000000000000000000000000000000000000..08b572a85e80eb36e982936e53ee0e85f8a0a188 GIT binary patch literal 91227 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

dOPZd@G=5$nSO+eN`_$x@Qg}W9%fASw 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 rl9!Q0{V%QaU(M&=nr6Dx=F Date: Tue, 30 Apr 2019 22:53:40 +0300 Subject: [PATCH 02/17] Add - fixes from hw5, first typescript --- package-lock.json | 47 ++- package.json | 4 + src/app/app.jsx | 225 --------------- src/app/app.test.jsx | 11 - src/app/app.tsx | 270 ++++++++++++++++++ src/app/{index.js => index.ts} | 0 src/index.jsx | 2 +- src/main-block/main-block.jsx | 1 - .../messages-block/message/message.css | 4 +- .../messages-block/message/message.jsx | 4 +- .../messages-block/messages-block.jsx | 2 +- src/react-app-env.d.ts | 1 + tsconfig.json | 25 ++ 13 files changed, 349 insertions(+), 247 deletions(-) delete mode 100644 src/app/app.jsx delete mode 100644 src/app/app.test.jsx create mode 100644 src/app/app.tsx rename src/app/{index.js => index.ts} (100%) create mode 100644 src/react-app-env.d.ts create mode 100644 tsconfig.json diff --git a/package-lock.json b/package-lock.json index 937a670..49196e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1233,6 +1233,19 @@ "@types/node": "*" } }, + "@types/jest": { + "version": "24.0.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.12.tgz", + "integrity": "sha512-60sjqMhat7i7XntZckcSGV8iREJyXXI6yFHZkSZvCPUeOnEJ/VP1rU/WpEWQ56mvoh8NhC+sfKAuJRTyGtCOow==", + "requires": { + "@types/jest-diff": "*" + } + }, + "@types/jest-diff": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jest-diff/-/jest-diff-20.0.1.tgz", + "integrity": "sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA==" + }, "@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -1246,10 +1259,14 @@ "dev": true }, "@types/node": { - "version": "11.13.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.5.tgz", - "integrity": "sha512-/OMMBnjVtDuwX1tg2pkYVSqRIDSmNTnvVvmvP/2xiMAAWf4a5+JozrApCrO4WCAILmXVxfNoQ3E+0HJbNpFVGg==", - "dev": true + "version": "11.13.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.8.tgz", + "integrity": "sha512-szA3x/3miL90ZJxUCzx9haNbK5/zmPieGraZEe4WI+3srN0eGLiT22NXeMHmyhNEopn+IrxqMc7wdVwvPl8meg==" + }, + "@types/prop-types": { + "version": "15.7.1", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.1.tgz", + "integrity": "sha512-CFzn9idOEpHrgdw8JsoTkaDDyRWk1jrzIV8djzcgpq0y9tG4B4lFT+Nxh52DVpDXV+n4+NPNv7M1Dj5uMp6XFg==" }, "@types/q": { "version": "1.5.2", @@ -1257,6 +1274,23 @@ "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", "dev": true }, + "@types/react": { + "version": "16.8.15", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.15.tgz", + "integrity": "sha512-dMhzw1rWK+wwJWvPp5Pk12ksSrm/z/C/+lOQbMZ7YfDQYnJ02bc0wtg4EJD9qrFhuxFrf/ywNgwTboucobJqQg==", + "requires": { + "@types/prop-types": "*", + "csstype": "^2.2.0" + } + }, + "@types/react-dom": { + "version": "16.8.4", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.8.4.tgz", + "integrity": "sha512-eIRpEW73DCzPIMaNBDP5pPIpK1KXyZwNgfxiVagb5iGiz6da+9A5hslSX6GAQKdO7SayVCS/Fr2kjqprgAvkfA==", + "requires": { + "@types/react": "*" + } + }, "@types/tapable": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.2.tgz", @@ -4890,6 +4924,11 @@ "cssom": "0.3.x" } }, + "csstype": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.4.tgz", + "integrity": "sha512-lAJUJP3M6HxFXbqtGRc0iZrdyeN+WzOWeY0q/VnFzI+kqVrYIzC7bWlKqCW7oCIdzoPkvfp82EVvrTlQ8zsWQg==" + }, "currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", diff --git a/package.json b/package.json index 9ede333..112b758 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,10 @@ "not op_mini all" ], "dependencies": { + "@types/jest": "24.0.12", + "@types/node": "11.13.8", + "@types/react": "16.8.15", + "@types/react-dom": "16.8.4", "react": "16.8.6", "react-dom": "16.8.6" }, diff --git a/src/app/app.jsx b/src/app/app.jsx deleted file mode 100644 index 51fafda..0000000 --- a/src/app/app.jsx +++ /dev/null @@ -1,225 +0,0 @@ -import React, { Component } from 'react'; - -import './app.css'; - -import Header from '../header/header'; -import MainBlock from '../main-block/main-block'; - -export class App extends Component { - constructor(props) { - super(props); - this.newMail = this.newMail.bind(this); - this.handleSelectAll = this.handleSelectAll.bind(this); - this.deleteSelectedMessages = this.deleteSelectedMessages.bind(this); - - this.createAndRandom = this.createAndRandom.bind(this); - this.newRandomMessage = this.newRandomMessage.bind(this); - this.selectCheckbox = this.selectCheckbox.bind(this); - this.buildNewMessage = this.buildNewMessage.bind(this); - - this.messagesPerPage = 30; - this.overflowMessages = []; - this.messagesListActualSize = 0; - - this.state = { - senders: ['Петя', 'Вася', 'Маша'], - subjects: ['Привет из России', 'Hello from England', 'Bonjour de France'], - texts: ['Привет!', 'Hello!', 'Bonjour!'], - months: [ - 'январь', - 'февраль', - 'март', - 'апрель', - 'май', - 'июнь', - 'июль', - 'август', - 'сентябрь', - 'октябрь', - 'ноябрь', - 'декабрь' - ], - - messagesList: [], - selectAllCheckbox: false, - - timeoutUpper: 10 * 60 * 1000, - timeoutLower: 5 * 60 * 1000, - - messageIsOpen: false - }; - } - - componentDidMount() { - const thisHolder = this; - thisHolder.createAndRandom(); - } - - createAndRandom() { - this.newMail(); - this.newRandomMessage(); - } - - newRandomMessage() { - setTimeout( - this.createAndRandom, - Math.random() * (this.state.timeoutUpper - this.state.timeoutLower) + this.state.timeoutLower - ); - } - - newMail() { - this.setState(prevState => { - let newMessagesListActualSize = this.messagesListActualSize; - const newMessagesList = prevState.messagesList; - const newOverflowMessages = this.overflowMessages; - - while (newMessagesListActualSize >= this.messagesPerPage) { - for (let index = newMessagesList.length - 1; index >= 0; index--) { - const message = newMessagesList[index]; - if (!message.toDelete) { - message.toDelete = true; - newMessagesListActualSize--; - newOverflowMessages.push(message); - setTimeout(() => { - if (message.toDelete) { - newMessagesList.splice(newMessagesList.indexOf(index), 1); - message.toDelete = false; - } - }, 1500); - break; - } - } - } - const newMessage = this.buildNewMessage(); - - newMessagesListActualSize++; - newMessagesList.unshift(newMessage); - - setTimeout(() => { - newMessage.toCreate = true; - this.setState({ - messagesList: newMessagesList - }); - }, 500); - - this.overflowMessages = newOverflowMessages; - this.messagesListActualSize = newMessagesListActualSize; - return { - messagesList: newMessagesList - }; - }); - } - - handleSelectAll() { - this.setState(prevState => { - const newMessagesList = prevState.messagesList; - for (let i = 0; i < newMessagesList.length; i++) { - newMessagesList[i].selected = !prevState.selectAllCheckbox; - } - - return { - selectAllCheckbox: !prevState.selectAllCheckbox, - messagesList: newMessagesList - }; - }); - } - - selectCheckbox(messageIndex) { - this.setState(prevState => { - const newMessagesList = prevState.messagesList; - newMessagesList[messageIndex].selected = !newMessagesList[messageIndex].selected; - return { - messagesList: newMessagesList - }; - }); - } - - deleteSelectedMessages() { - this.setState(prevState => { - let newMessagesListActualSize = this.messagesListActualSize; - const newMessagesList = prevState.messagesList; - const newOverflowMessages = this.overflowMessages; - - for (let i = 0; i < newMessagesList.length; i++) { - const message = newMessagesList[i]; - if (message.selected) { - if (!message.toDelete) { - message.toDelete = true; - message.toCreate = false; - newMessagesListActualSize--; - if (newOverflowMessages.length > 0) { - const newMessage = newOverflowMessages.pop(); - newMessage.toCreate = false; - setTimeout(() => { - newMessage.toCreate = true; - this.setState({ - messagesList: newMessagesList - }); - }, 500); - if (newMessage.toDelete) { - newMessage.toDelete = false; - } else { - newMessagesList.push(newMessage); - } - newMessagesListActualSize++; - } - } - } - } - - setTimeout(() => { - this.setState({ - messagesList: prevState.messagesList.filter(message => !message.selected) - }); - }, 1500); - - this.overflowMessages = newOverflowMessages; - this.messagesListActualSize = newMessagesListActualSize; - return { - selectAllCheckbox: false, - messagesList: newMessagesList - }; - }); - } - - buildNewMessage() { - const currentDate = new Date(); - - const id = currentDate.getTime(); - const langInd = Math.floor(Math.random() * this.state.senders.length); - const hiddenText = this.state.texts[langInd]; - - const monthInd = currentDate.getMonth().toLocaleString('rus'); - const month = this.state.months[monthInd]; - const day = currentDate.getDate(); - - const senderName = this.state.senders[Math.floor(Math.random() * this.state.senders.length)]; - return { - id, - senderName, - senderLogo: senderName[0], - subject: this.state.subjects[langInd], - date: `${day} ${month.substr(0, 3)}`, - hiddenText, - selected: false, - toDelete: false, - toCreate: false - }; - } - - render() { - return ( -

-
- -
- ); - } -} diff --git a/src/app/app.test.jsx b/src/app/app.test.jsx deleted file mode 100644 index 81be6fa..0000000 --- a/src/app/app.test.jsx +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; - -import { App } from './app'; - -it('renders without crashing', () => { - const div = document.createElement('div'); - - ReactDOM.render(, div); - ReactDOM.unmountComponentAtNode(div); -}); diff --git a/src/app/app.tsx b/src/app/app.tsx new file mode 100644 index 0000000..a9f3349 --- /dev/null +++ b/src/app/app.tsx @@ -0,0 +1,270 @@ +import React, { Component } from 'react'; + +import './app.css'; + +import Header from '../header/header'; +import MainBlock from '../main-block/main-block'; + +export interface Message { + id: number, + senderName: String, + senderLogo: String, + subject: String, + date: String, + hiddenText: String, + selected: boolean, + shrink: boolean, + unshrink: boolean +} + +export interface State { + messagesList: Message[], + selectAllCheckbox: boolean, + messageIsOpen: boolean +} + +export class App extends Component { + private messagesPerPage: number; + private overflowMessages: Message[]; + private timeoutUpper: number; + private timeoutLower: number; + + private senders: String[]; + private subjects: String[]; + private texts: String[]; + private months: String[]; + + public state: State; + + constructor(props: Readonly<{}>) { + super(props); + this.newMail = this.newMail.bind(this); + this.handleSelectAll = this.handleSelectAll.bind(this); + this.deleteSelectedMessages = this.deleteSelectedMessages.bind(this); + + this.createAndRandom = this.createAndRandom.bind(this); + this.newRandomMessage = this.newRandomMessage.bind(this); + this.selectCheckbox = this.selectCheckbox.bind(this); + this.buildNewMessage = this.buildNewMessage.bind(this); + + this.messagesPerPage = 30; + this.overflowMessages = []; + + this.senders = ['Петя', 'Вася', 'Маша']; + this.subjects = ['Привет из России', 'Hello from England', 'Bonjour de France']; + this.texts = ['Привет!', 'Hello!', 'Bonjour!']; + this.months = [ + 'январь', + 'февраль', + 'март', + 'апрель', + 'май', + 'июнь', + 'июль', + 'август', + 'сентябрь', + 'октябрь', + 'ноябрь', + 'декабрь' + ]; + this.timeoutUpper = 10 * 60 * 1000; + this.timeoutLower = 5 * 60 * 1000; + + this.state = { + messagesList: [], + selectAllCheckbox: false, + messageIsOpen: false + }; + } + + componentDidMount() { + const thisHolder = this; + thisHolder.createAndRandom(); + } + + createAndRandom() { + this.newMail(); + this.newRandomMessage(); + } + + newRandomMessage() { + setTimeout( + this.createAndRandom, + Math.random() * (this.timeoutUpper - this.timeoutLower) + this.timeoutLower + ); + } + + newMail() { + this.setState((prevState: State) => { + const newMessagesList = prevState.messagesList; + const newOverflowMessages = this.overflowMessages; + + let newMessagesListActualSize = 0; + for (let index = 0; index < newMessagesList.length; index++) { + if (!newMessagesList[index].shrink) { + newMessagesListActualSize++; + } + } + + while (newMessagesListActualSize >= this.messagesPerPage) { + for (let index = newMessagesList.length - 1; index >= 0; index--) { + const message = newMessagesList[index]; + if (!message.shrink) { + message.shrink = true; + message.selected = false; + newMessagesListActualSize--; + newOverflowMessages.push(message); + setTimeout(() => { + const removeIndex = newMessagesList.indexOf(message); + if (removeIndex > -1 && newMessagesList[removeIndex].shrink) { + newMessagesList.splice(removeIndex, 1); + message.shrink = false; + } + }, 1500); + break; + } + } + } + const newMessage = this.buildNewMessage(); + + newMessagesList.unshift(newMessage); + + setTimeout(() => { + newMessage.unshrink = true; + this.setState({ + messagesList: newMessagesList + }); + }, 50); + + this.overflowMessages = newOverflowMessages; + return { + messagesList: newMessagesList + }; + }); + } + + handleSelectAll() { + this.setState((prevState: State) => { + const newMessagesList = prevState.messagesList; + for (let i = 0; i < newMessagesList.length; i++) { + if (!newMessagesList[i].shrink) { + newMessagesList[i].selected = !prevState.selectAllCheckbox; + } + } + + return { + selectAllCheckbox: !prevState.selectAllCheckbox, + messagesList: newMessagesList + }; + }); + } + + selectCheckbox(messageIndex: number) { + this.setState((prevState: State) => { + const newMessagesList = prevState.messagesList; + newMessagesList[messageIndex].selected = !newMessagesList[messageIndex].selected; + return { + messagesList: newMessagesList + }; + }); + } + + deleteSelectedMessages() { + this.setState((prevState: State) => { + const newMessagesList = prevState.messagesList; + const newOverflowMessages = this.overflowMessages; + + for (let index = 0; index < newMessagesList.length; index++) { + const message = newMessagesList[index]; + if (message.selected) { + if (!message.shrink) { + message.shrink = true; + message.unshrink = false; + if (newOverflowMessages.length > 0) { + const newMessage = newOverflowMessages.pop(); + if (newMessage === undefined) { + continue; + } + let needToPush = true; + for (let i = 0; i < newMessagesList.length; i++) { + if (newMessagesList[i].id === newMessage.id) { + needToPush = false; + break; + } + } + newMessage.shrink = false; + if (!needToPush) { + newMessage.unshrink = true; + } else { + newMessage.unshrink = false; + setTimeout(() => { + newMessage.unshrink = true; + this.setState({ + messagesList: newMessagesList + }); + }, 50); + newMessagesList.push(newMessage); + } + } + } + } + } + + this.overflowMessages = newOverflowMessages; + return { + selectAllCheckbox: false, + messagesList: newMessagesList + }; + }); + + setTimeout(() => { + this.setState((prevState: State) => { + return { + messagesList: prevState.messagesList.filter(message => !message.shrink) + }; + }); + }, 1500); + } + + buildNewMessage(): Message { + const currentDate = new Date(); + + const id = currentDate.getTime(); + const langInd = Math.floor(Math.random() * this.senders.length); + const hiddenText = this.texts[langInd]; + + const monthInd = currentDate.getMonth(); + const month = this.months[monthInd]; + const day = currentDate.getDate(); + + const senderName = this.senders[Math.floor(Math.random() * this.senders.length)]; + return { + id, + senderName, + senderLogo: senderName[0], + subject: this.subjects[langInd], + date: `${day} ${month.substr(0, 3)}`, + hiddenText, + selected: false, + shrink: false, + unshrink: false + }; + } + + render() { + return ( +
+
+ +
+ ); + } +} + +export default App; diff --git a/src/app/index.js b/src/app/index.ts similarity index 100% rename from src/app/index.js rename to src/app/index.ts diff --git a/src/index.jsx b/src/index.jsx index ffc72ee..2840cd4 100644 --- a/src/index.jsx +++ b/src/index.jsx @@ -1,7 +1,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; -import { App } from './app'; +import App from './app/app'; import './index.css'; diff --git a/src/main-block/main-block.jsx b/src/main-block/main-block.jsx index bad3ca9..d3328fc 100644 --- a/src/main-block/main-block.jsx +++ b/src/main-block/main-block.jsx @@ -14,7 +14,6 @@ class MainBlock extends React.Component { selectCheckbox={this.props.selectCheckbox} deleteSelected={this.props.deleteSelected} messagesList={this.props.messagesList} - messageIsOpen={this.props.messageIsOpen} selectAllCheckbox={this.props.selectAllCheckbox} />
diff --git a/src/main-block/messages-block/message/message.css b/src/main-block/messages-block/message/message.css index 53c6a49..ad86314 100644 --- a/src/main-block/messages-block/message/message.css +++ b/src/main-block/messages-block/message/message.css @@ -109,12 +109,12 @@ float: right; } -.to-create { +.unshrink { height: 40px; opacity: 1; } -.to-delete { +.shrink { height: 0; opacity: 0; } diff --git a/src/main-block/messages-block/message/message.jsx b/src/main-block/messages-block/message/message.jsx index b411b15..a4c904f 100644 --- a/src/main-block/messages-block/message/message.jsx +++ b/src/main-block/messages-block/message/message.jsx @@ -5,8 +5,8 @@ import './message.css'; class Message extends React.Component { render() { const classAddition = - (this.props.message.toCreate ? ' to-create' : '') + - (this.props.message.toDelete ? ' to-delete' : ''); + (this.props.message.unshrink ? ' unshrink' : '') + + (this.props.message.shrink ? ' shrink' : ''); return (