From 8d799932514086c0072d7e01dbbfa5e7c38dd304 Mon Sep 17 00:00:00 2001 From: Asel Date: Fri, 15 May 2020 21:49:09 +0530 Subject: [PATCH 1/6] GSoC frontend - Proposal dashboard page implementation --- src/images/userIcon2.jpg | Bin 0 -> 28955 bytes src/router.js | 9 +- src/svgs/luke_1.jpg | Bin 0 -> 28955 bytes src/user/dashboard/dashboard.scss | 6 +- src/user/pinned-posts/posts/posts.js | 2 +- .../AdminProposalDashboard.js | 0 .../DashboardContent/DashboardContent.js | 95 ++++++++++ .../DashboardContent/DashboardContent.scss | 164 ++++++++++++++++++ .../DashboardRightPanel/Comments/Comments.js | 72 ++++++++ .../Comments/Comments.scss | 69 ++++++++ .../DashboardRightPanel.js | 25 +++ .../DashboardRightPanel.scss | 12 ++ .../OtherIdeas/OtherIdeas.js | 119 +++++++++++++ .../OtherIdeas/OtherIdeas.scss | 52 ++++++ .../UserProposalDashboard.js | 32 ++++ .../UserProposalDashboard.scss | 16 ++ 16 files changed, 665 insertions(+), 8 deletions(-) create mode 100644 src/images/userIcon2.jpg create mode 100644 src/svgs/luke_1.jpg create mode 100644 src/user/proposals/AdminProposalDashboard/AdminProposalDashboard.js create mode 100644 src/user/proposals/UserProposalDashboard/DashboardContent/DashboardContent.js create mode 100644 src/user/proposals/UserProposalDashboard/DashboardContent/DashboardContent.scss create mode 100644 src/user/proposals/UserProposalDashboard/DashboardRightPanel/Comments/Comments.js create mode 100644 src/user/proposals/UserProposalDashboard/DashboardRightPanel/Comments/Comments.scss create mode 100644 src/user/proposals/UserProposalDashboard/DashboardRightPanel/DashboardRightPanel.js create mode 100644 src/user/proposals/UserProposalDashboard/DashboardRightPanel/DashboardRightPanel.scss create mode 100644 src/user/proposals/UserProposalDashboard/DashboardRightPanel/OtherIdeas/OtherIdeas.js create mode 100644 src/user/proposals/UserProposalDashboard/DashboardRightPanel/OtherIdeas/OtherIdeas.scss create mode 100644 src/user/proposals/UserProposalDashboard/UserProposalDashboard.js create mode 100644 src/user/proposals/UserProposalDashboard/UserProposalDashboard.scss diff --git a/src/images/userIcon2.jpg b/src/images/userIcon2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0edef7a713e09a364c06d0c4a13fee13a33cdc50 GIT binary patch literal 28955 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 ( @@ -25,9 +25,10 @@ const Router = () => ( - - - + + + + diff --git a/src/svgs/luke_1.jpg b/src/svgs/luke_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0edef7a713e09a364c06d0c4a13fee13a33cdc50 GIT binary patch literal 28955 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 +
+
+ + +
+ Proposals +
+
+
+
+ + + + + + + + +
+
+
+
+ +
+
+
+
+
+ icon +
+
+

Sample Proposal

+

June 5, 2018 4:31 AM

+
+ +
+
+
+ ex sit ex laboris adipisicing enim eiusmod proident + exercitation ea fugiat in llit pariatur occaecat ut nostrud + ullamco ex official ex sit ex laboris adipisicing enim eiusmod + proident exercitation ea... +
+
+ + +
+
+
+
+
+ + ); + } +} + +export default DashboardContent; diff --git a/src/user/proposals/UserProposalDashboard/DashboardContent/DashboardContent.scss b/src/user/proposals/UserProposalDashboard/DashboardContent/DashboardContent.scss new file mode 100644 index 00000000..2577b135 --- /dev/null +++ b/src/user/proposals/UserProposalDashboard/DashboardContent/DashboardContent.scss @@ -0,0 +1,164 @@ +.dashboard-content { + padding: 30px; + display: flex; + height: 100vh; + flex-direction: column; + + .searchbar-container { + flex-grow: 0.5; + .searchbar { + border-radius: 25px; + } + .dashboard-title { + margin-top: 15px; + .title-text { + font-family: Inter; + font-style: normal; + font-weight: 600; + font-size: 36px; + line-height: 44px; + color: #000000; + } + } + .button-container { + .posts { + .category { + text-align: left; + margin-left: 0px; + margin-top: 20px; + .category-btn { + background-color: white; + font-family: Inter; + font-style: normal; + font-weight: 500; + font-size: 18px; + line-height: 22px; + + &:hover { + background-color: #1a73e8; + color: white; + } + + &:focus { + background-color: #1a73e8; + color: white; + } + } + } + } + } + } + .proposal-container { + margin-top: 20px; + flex-grow: 5; + .proposals { + .single-proposal { + display: inline-block; + counter-increment: item-counter; + width: 100%; + margin-bottom: 15px; + border: solid 1px #dfe9f1; + box-shadow: 1px 2px 5px rgba(0, 0, 0, 0.1); + border-radius: 5px; + .user-info { + display: flex; + padding: 8px; + .image { + width: 38px; + height: 38px; + img { + width: 100%; + height: 100%; + border-radius: 2px; + } + } + .img-desc { + margin-left: 10px; + h2 { + font-family: Inter; + font-style: normal; + font-weight: 600; + font-size: 18px; + line-height: 22px; + margin: 3px; + /* identical to box height */ + } + small { + font-family: Inter; + font-style: normal; + font-weight: normal; + font-size: 12px; + line-height: 15px; + color: #90949c; + margin: 0; + } + .proposal-date { + font-family: Inter; + font-style: normal; + font-weight: normal; + font-size: 12px; + line-height: 15px; + + color: #90949c; + } + } + .status-btn { + background-color: white; + padding: 4px 36px; + border: solid 1px #eb5757; + border-radius: 100px; + color: #eb5757; + margin: 0 5px; + height: 30px; + cursor: default; + } + .dropdown-container { + margin-left: auto; + margin-right: 5px; + } + } + .proposal-content { + display: flex; + .proposal-details { + flex: 3; + font-family: Inter; + font-style: normal; + font-weight: normal; + font-size: 14px; + line-height: 17px; + padding: 10px; + + color: #1d2129; + } + .proposal-options { + flex: 1.5; + text-align: center; + padding: 20px; + .option-btn { + background-color: white; + color: #007bff; + padding: 4px 40px; + border: solid 1px #1a73e8; + border-radius: 100px; + margin: 0 10px; + height: 30px; + cursor: pointer; + &.active { + background: #007bff; + color: white; + } + .option-text { + font-family: Inter; + font-style: normal; + font-weight: 500; + font-size: 14px; + line-height: 22px; + /* identical to box height */ + } + } + } + } + } + } + } +} diff --git a/src/user/proposals/UserProposalDashboard/DashboardRightPanel/Comments/Comments.js b/src/user/proposals/UserProposalDashboard/DashboardRightPanel/Comments/Comments.js new file mode 100644 index 00000000..3430f1aa --- /dev/null +++ b/src/user/proposals/UserProposalDashboard/DashboardRightPanel/Comments/Comments.js @@ -0,0 +1,72 @@ +import React, { Component } from "react"; +import "./Comments.scss"; +import { ListGroup, Image } from "react-bootstrap"; +import userIcon2 from "../../../../../images/userIcon2.jpg"; + +class Comments extends Component { + constructor(props) { + super(props); + this.state = {}; + } + render() { + return ( +
+
Comments
+
+ + +
+
+ icon +
+
+
Devesh
+
+ "Lorem ipsum dolor sit amet" +
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation +
+
+
+
+
+ + +
+
+ icon +
+
+
Devesh
+
+ "Lorem ipsum dolor sit amet" +
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation +
+
+
+
+
+
+
+ ); + } +} + +export default Comments; diff --git a/src/user/proposals/UserProposalDashboard/DashboardRightPanel/Comments/Comments.scss b/src/user/proposals/UserProposalDashboard/DashboardRightPanel/Comments/Comments.scss new file mode 100644 index 00000000..88c79fca --- /dev/null +++ b/src/user/proposals/UserProposalDashboard/DashboardRightPanel/Comments/Comments.scss @@ -0,0 +1,69 @@ +.comments { + .comment-title { + margin-top: 10px; + font-family: Inter; + font-style: normal; + font-weight: 600; + font-size: 22px; + line-height: 27px; + + color: #000000; + } + .comments-container { + border: solid 1px #dfe9f1; + overflow: auto; + border-radius: 5px; + margin: 5px; + max-height: 300px; + .comment-item { + display: flex; + padding: none; + .image-container { + flex: 1; + .user-image { + width: 30px; + height: 30px; + } + } + .comment-container { + flex: 6; + border: solid 1px #dfe9f1; + overflow: auto; + border-radius: 5px; + padding: 3px; + .commenting-user { + font-family: Inter; + font-style: normal; + font-weight: 600; + font-size: 14px; + line-height: 150%; + /* or 21px */ + + color: #000000; + } + .commented-section { + margin-top: 2px; + font-family: Inter; + font-style: normal; + font-weight: normal; + font-size: 14px; + line-height: 150%; + /* or 21px */ + + color: rgba(29, 33, 41, 0.5); + } + .comment-text { + margin-top: 2px; + font-family: Inter; + font-style: normal; + font-weight: normal; + font-size: 14px; + + /* or 21px */ + + color: rgba(21, 21, 21, 0.91); + } + } + } + } +} diff --git a/src/user/proposals/UserProposalDashboard/DashboardRightPanel/DashboardRightPanel.js b/src/user/proposals/UserProposalDashboard/DashboardRightPanel/DashboardRightPanel.js new file mode 100644 index 00000000..106355b4 --- /dev/null +++ b/src/user/proposals/UserProposalDashboard/DashboardRightPanel/DashboardRightPanel.js @@ -0,0 +1,25 @@ +import React, { Component } from "react"; +import "./DashboardRightPanel.scss"; +import Comments from "./Comments/Comments"; +import OtherIdeas from "./OtherIdeas/OtherIdeas"; + +class DashboardRightPanel extends Component { + constructor(props) { + super(props); + this.state = {}; + } + render() { + return ( +
+
+ +
+
+ +
+
+ ); + } +} + +export default DashboardRightPanel; diff --git a/src/user/proposals/UserProposalDashboard/DashboardRightPanel/DashboardRightPanel.scss b/src/user/proposals/UserProposalDashboard/DashboardRightPanel/DashboardRightPanel.scss new file mode 100644 index 00000000..133ebce0 --- /dev/null +++ b/src/user/proposals/UserProposalDashboard/DashboardRightPanel/DashboardRightPanel.scss @@ -0,0 +1,12 @@ +.panel { + display: flex; + flex-direction: column; + + .panel-comments { + flex-grow: 1; + } + .panel-ideas { + margin-top: 10px; + flex-grow: 1; + } +} diff --git a/src/user/proposals/UserProposalDashboard/DashboardRightPanel/OtherIdeas/OtherIdeas.js b/src/user/proposals/UserProposalDashboard/DashboardRightPanel/OtherIdeas/OtherIdeas.js new file mode 100644 index 00000000..a64b31b3 --- /dev/null +++ b/src/user/proposals/UserProposalDashboard/DashboardRightPanel/OtherIdeas/OtherIdeas.js @@ -0,0 +1,119 @@ +import React, { Component } from "react"; +import "./OtherIdeas.scss"; +import { ListGroup, Image } from "react-bootstrap"; +import userIcon2 from "../../../../../images/userIcon2.jpg"; + +class OtherIdeas extends Component { + constructor(props) { + super(props); + this.state = {}; + } + render() { + return ( +
+
Other Ideas
+
+ + +
+
+ icon +
+
+
We got into GSoC 2020
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor incididunt ut labore et dolore magna +
+
+
+
+ +
+
+ icon +
+
+
We got into GSoC 2020
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor incididunt ut labore et dolore magna +
+
+
+
+ +
+
+ icon +
+
+
We got into GSoC 2020
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor incididunt ut labore et dolore magna +
+
+
+
+ +
+
+ icon +
+
+
We got into GSoC 2020
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor incididunt ut labore et dolore magna +
+
+
+
+ +
+
+ icon +
+
+
We got into GSoC 2020
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor incididunt ut labore et dolore magna +
+
+
+
+
+
+
+ ); + } +} + +export default OtherIdeas; diff --git a/src/user/proposals/UserProposalDashboard/DashboardRightPanel/OtherIdeas/OtherIdeas.scss b/src/user/proposals/UserProposalDashboard/DashboardRightPanel/OtherIdeas/OtherIdeas.scss new file mode 100644 index 00000000..6058404f --- /dev/null +++ b/src/user/proposals/UserProposalDashboard/DashboardRightPanel/OtherIdeas/OtherIdeas.scss @@ -0,0 +1,52 @@ +.ideas { + .ideas-title { + margin-top: 10px; + font-family: Inter; + font-style: normal; + font-weight: 600; + font-size: 22px; + line-height: 27px; + + color: #000000; + } + .ideas-container { + border: solid 1px #dfe9f1; + overflow: auto; + border-radius: 5px; + margin: 5px; + max-height: 300px; + .idea-item { + display: flex; + padding: none; + .image-container { + flex: 1; + .user-image { + width: 30px; + height: 30px; + } + } + .idea-container { + flex: 6; + .idea-title { + font-family: Inter; + font-style: normal; + font-weight: 600; + font-size: 14px; + line-height: 21px; + /* identical to box height, or 150% */ + + color: #000000; + } + .idea-description { + font-family: Inter; + font-style: normal; + font-weight: normal; + font-size: 12px; + line-height: 15px; + + color: rgba(29, 33, 41, 0.5); + } + } + } + } +} diff --git a/src/user/proposals/UserProposalDashboard/UserProposalDashboard.js b/src/user/proposals/UserProposalDashboard/UserProposalDashboard.js new file mode 100644 index 00000000..0d39a465 --- /dev/null +++ b/src/user/proposals/UserProposalDashboard/UserProposalDashboard.js @@ -0,0 +1,32 @@ +import React, { Component } from "react"; +import "./UserProposalDashboard.scss"; +import Navigation from "../../dashboard/navigation/navigation"; +import DashboardContent from "./DashboardContent/DashboardContent"; +import DashboardRightPanel from "./DashboardRightPanel/DashboardRightPanel"; + +class UserProposalDashboard extends Component { + constructor(props) { + super(props); + this.state = { + dashboard: true, + isLoading: true, + }; + } + render() { + return ( +
+
+ +
+
+ +
+
+ +
+
+ ); + } +} + +export default UserProposalDashboard; diff --git a/src/user/proposals/UserProposalDashboard/UserProposalDashboard.scss b/src/user/proposals/UserProposalDashboard/UserProposalDashboard.scss new file mode 100644 index 00000000..86e9c195 --- /dev/null +++ b/src/user/proposals/UserProposalDashboard/UserProposalDashboard.scss @@ -0,0 +1,16 @@ +.dashboard { + display: flex; + min-height: 100vh; + height: auto; + font-family: Muli, sans-serif; + .dashboard__navigation { + flex: 1; + border-right: solid 1px #dfe9f1; + } + .dashboard__content { + flex: 4; + } + .dashboard__rightpanel { + flex: 1.5; + } +} From b511bde165a43879830849f95c0d357f683f011f Mon Sep 17 00:00:00 2001 From: Asel Peiris Date: Tue, 12 May 2020 23:19:38 +0530 Subject: [PATCH 2/6] refactoring components-modals (#468) --- src/App.js | 18 +- src/css/abstracts/_mixins.scss | 1 + src/css/abstracts/_variables.scss | 23 +++ src/css/base/_reset.scss | 0 src/css/base/_typography.scss | 13 ++ src/css/components/_modals.scss | 149 +++++++++++++++++ src/css/layouts/_footer.scss | 0 src/css/layouts/_header.scss | 0 src/css/main.scss | 48 ++++++ src/svgs/logo-image.jpg | Bin 0 -> 28955 bytes src/user/dashboard/navigation/navigation.js | 4 +- src/user/dashboard/news-feed/news-feed.js | 45 ++++- src/user/dashboard/news-feed/news-feed.scss | 71 -------- .../news-feed/popups/AddEventModal.js | 57 +++---- .../news-feed/popups/AddProjectModal.js | 101 +++++++++++ .../dashboard/news-feed/popups/comment.js | 136 ++++++++------- src/user/profile/popups/EditProfile.js | 122 ++++++++++++++ src/user/profile/popups/Followers.js | 157 ++++++++++++++++++ src/user/profile/popups/Logout.js | 65 ++++++++ src/user/profile/popups/edit-profile.js | 99 ----------- src/user/profile/popups/followers.js | 81 --------- src/user/profile/popups/logout.js | 48 ------ src/user/profile/popups/popups.scss | 100 ----------- src/user/profile/user-info/user-info.js | 43 +++-- src/user/projects/popups/delete-project.js | 30 ++-- src/user/projects/popups/edit-project.js | 38 ++--- 26 files changed, 886 insertions(+), 563 deletions(-) create mode 100644 src/css/abstracts/_mixins.scss create mode 100644 src/css/abstracts/_variables.scss create mode 100644 src/css/base/_reset.scss create mode 100644 src/css/base/_typography.scss create mode 100644 src/css/components/_modals.scss create mode 100644 src/css/layouts/_footer.scss create mode 100644 src/css/layouts/_header.scss create mode 100644 src/css/main.scss create mode 100644 src/svgs/logo-image.jpg create mode 100644 src/user/dashboard/news-feed/popups/AddProjectModal.js create mode 100644 src/user/profile/popups/EditProfile.js create mode 100644 src/user/profile/popups/Followers.js create mode 100644 src/user/profile/popups/Logout.js delete mode 100644 src/user/profile/popups/edit-profile.js delete mode 100644 src/user/profile/popups/followers.js delete mode 100644 src/user/profile/popups/logout.js delete mode 100644 src/user/profile/popups/popups.scss diff --git a/src/App.js b/src/App.js index 9d3fd213..52cdb160 100644 --- a/src/App.js +++ b/src/App.js @@ -1,11 +1,13 @@ import React, { Component } from "react"; import Router from "./router"; import "./App.css"; -import { Provider } from 'react-redux'; -import store from './store'; -import jwt_decode from 'jwt-decode'; + +import { Provider } from "react-redux"; +import store from "./store"; +import jwt_decode from "jwt-decode"; import { setAuthToken } from "./utils/setAuthToken"; import { setCurrentUser, logoutUser } from "./actions/authAction"; +import "./css/main.scss"; class App extends Component { componentDidMount() { @@ -14,23 +16,23 @@ class App extends Component { console.log("CHECKING TOKEN ", token); if (token) { const decodedData = jwt_decode(token); - // set auth token in axios header + // set auth token in axios header setAuthToken(token); - // set user in the state + // set user in the state setCurrentUser(decodedData); // check if token is valid or expired const currentTime = Date.now() / 1000; // in ms const expiryTime = decodedData.iat + 10800000; // 24 hrs if (expiryTime <= currentTime) { store.dispatch(logoutUser()); - // now redirect to home page + // now redirect to home page window.location.href = "/"; } } } render() { return ( - + 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 Logout - +

CODEUINO

diff --git a/src/user/dashboard/news-feed/news-feed.js b/src/user/dashboard/news-feed/news-feed.js index 45e6bdb2..7e24ba62 100644 --- a/src/user/dashboard/news-feed/news-feed.js +++ b/src/user/dashboard/news-feed/news-feed.js @@ -17,6 +17,7 @@ import { makeStyles } from "@material-ui/core/styles"; import { Button } from "react-bootstrap"; import MoreHorizIcon from "@material-ui/icons/MoreHoriz"; import AddEventModal from "./popups/AddEventModal"; +import AddProjectModal from "./popups/AddProjectModal"; import ArrowDropUpIcon from "@material-ui/icons/ArrowDropUp"; import ArrowDropDownIcon from "@material-ui/icons/ArrowDropDown"; import ChatBubbleIcon from "@material-ui/icons/ChatBubble"; @@ -80,17 +81,26 @@ export default function PinPosts(props) { const classes = styles(); const [type, changeType] = React.useState("All"); const [first, second] = React.useState("f"); - const [show, setShow] = React.useState(false); + const [showProject, setShowProject] = React.useState(false); + const [showEvent, setShowEvent] = React.useState(false); let handleClick = (atrb) => () => { changeType(atrb); second("s"); }; - let handleShow = () => { - setShow(true); + let handleShow = (modalName) => { + if (modalName === "project") { + setShowProject(true); + } else if (modalName === "event") { + setShowEvent(true); + } }; - let handleClose = () => { - setShow(false); + let handleClose = (modalName) => { + if (modalName === "project") { + setShowProject(false); + } else if (modalName === "event") { + setShowEvent(false); + } }; let posts = feed.map((newsItem) => { if ( @@ -330,7 +340,9 @@ export default function PinPosts(props) { > - - + { + handleClose("project"); + }} + /> diff --git a/src/user/dashboard/news-feed/news-feed.scss b/src/user/dashboard/news-feed/news-feed.scss index 02c03613..8ccada06 100644 --- a/src/user/dashboard/news-feed/news-feed.scss +++ b/src/user/dashboard/news-feed/news-feed.scss @@ -403,77 +403,6 @@ } } -.modal-box { - .modal-header { - .modal-title { - .main { - font-family: Inter; - font-style: normal; - font-weight: 600; - font-size: 32px; - line-height: 39px; - color: #1a73e8; - } - .mini { - font-family: Inter; - font-style: normal; - font-weight: 500; - font-size: 12px; - line-height: 19px; - color: #90949c; - letter-spacing: 0.2em; - padding-top: 18px; - } - } - } - .modal-body { - .modal-form { - .modal-row { - .modal-group { - .form-label { - font-family: Inter; - font-style: normal; - font-weight: 500; - font-size: 14px; - line-height: 17px; - color: #1a73e8; - } - .post { - border: 0.75px solid #e2e2e2; - box-sizing: border-box; - border-radius: 5px; - text-align: left; - resize: none; - margin-left: 0; - } - } - } - } - } - .modal-buttons { - .save { - font-weight: bold; - background: #1a73e8; - box-shadow: 1px 2px 5px rgba(0, 0, 0, 0.1); - border-radius: 34px; - width: 74px; - margin-right: 20px; - margin-bottom: 10px; - margin-left: 14px; - } - .cancel { - border: 1px solid #1a73e8; - box-sizing: border-box; - box-shadow: 1px 2px 5px rgba(0, 0, 0, 0.1); - border-radius: 34px; - margin-right: 20px; - margin-bottom: 10px; - color: #1a73e8; - font-weight: 500; - } - } -} - .posts { .category { .category-btn { diff --git a/src/user/dashboard/news-feed/popups/AddEventModal.js b/src/user/dashboard/news-feed/popups/AddEventModal.js index 18c41aae..50f924b1 100644 --- a/src/user/dashboard/news-feed/popups/AddEventModal.js +++ b/src/user/dashboard/news-feed/popups/AddEventModal.js @@ -8,84 +8,81 @@ const AddEventModal = (props) => { show={props.show} onHide={props.handleClose} animation={false} - className="modal-box" + className="modal" + centered > - -
New Event
-
ABOUT THE EVENT
+ +
New Event
+
ABOUT THE EVENT
- -
- + + + - Event Name + Event Name - Location + Location - + - Date + Date - Time + Time - + - Post Description + Post Description -
- -
diff --git a/src/user/dashboard/news-feed/popups/AddProjectModal.js b/src/user/dashboard/news-feed/popups/AddProjectModal.js new file mode 100644 index 00000000..063044db --- /dev/null +++ b/src/user/dashboard/news-feed/popups/AddProjectModal.js @@ -0,0 +1,101 @@ +import React from "react"; +import { Button, Modal, Form, Col } from "react-bootstrap"; +import PropTypes from "prop-types"; + +const AddProjectModal = (props) => { + return ( + + + +
New Project
+
ABOUT THE PROJECT
+
+
+ +
+ + + Project Name + + + + + + + Project Contributers + + + + + + + + Project Description + + + + + + + Github Link + + + + + Other Link + + + +
+
+
+ + +
+
+ ); +}; +AddProjectModal.propTypes = { + onClick: PropTypes.func, + show: PropTypes.bool, + style: PropTypes.object, +}; + +export default AddProjectModal; diff --git a/src/user/dashboard/news-feed/popups/comment.js b/src/user/dashboard/news-feed/popups/comment.js index 57ad7538..d76e0256 100644 --- a/src/user/dashboard/news-feed/popups/comment.js +++ b/src/user/dashboard/news-feed/popups/comment.js @@ -1,76 +1,86 @@ -import React, {Component} from 'react'; -import {Modal, Button, Row, Col, Form} from 'react-bootstrap'; -import "./comment.scss" +import React, { Component } from "react"; +import { Modal, Button, Row, Col, Form } from "react-bootstrap"; +import "./comment.scss"; -import comments from '../../../../jsonData/comments' -export class Comment extends Component{ - // eslint-disable-next-line - constructor(props){ - super(props); - this.state={ - comment:"" - } - this.onChange = this.onChange.bind(this); - this.onSubmit = this.onSubmit.bind(this); - } +import comments from "../../../../jsonData/comments"; +export class Comment extends Component { + // eslint-disable-next-line + constructor(props) { + super(props); + this.state = { + comment: "", + }; + this.onChange = this.onChange.bind(this); + this.onSubmit = this.onSubmit.bind(this); + } - onChange(e) { this.setState({ [e.target.name]: e.target.value }); } - onSubmit(e){ - e.preventDefault(); - const comment = this.state - - console.log(comment) - } - render(){ - -var all_comments = comments.map((comment)=>( - - I -
-

{comment.name}

-

{comment.comment}

-
-
-)) + onSubmit(e) { + e.preventDefault(); + const comment = this.state; + console.log(comment); + } + render() { + var all_comments = comments.map((comment) => ( + + + I + + +
+

{comment.name}

+

{comment.comment}

+
+ +
+ )); return ( - -
- - -
Comment
-
-
- -
- - - - -
- + +
+ + +
Comment
+
+
+ + + + + + +
+ +
+ +
Other people who commented
+ {all_comments} +
- -
Other people who commented
- {all_comments} - -
); } -} \ No newline at end of file +} diff --git a/src/user/profile/popups/EditProfile.js b/src/user/profile/popups/EditProfile.js new file mode 100644 index 00000000..0fcdc5ca --- /dev/null +++ b/src/user/profile/popups/EditProfile.js @@ -0,0 +1,122 @@ +import React from "react"; +import { Button, Modal, Form, Col } from "react-bootstrap"; +import PropTypes from "prop-types"; + +const EditProfile = (props) => { + return ( + + + +
Edit Profile
+
PERSONAL INFORMATION
+
+
+ +
+ + + First Name + + + + + Last Name + + + + + + Designation + + + + + Location + + + + + + About + + + +
PROFILES
+ + + Github URL + + + + + LinkedIn URL + + + + + + Facebook URL + + + +
+
+
+ + +
+
+ ); +}; +EditProfile.propTypes = { + onClick: PropTypes.func, + show: PropTypes.bool, + style: PropTypes.object, +}; + +export default EditProfile; diff --git a/src/user/profile/popups/Followers.js b/src/user/profile/popups/Followers.js new file mode 100644 index 00000000..b48e20bf --- /dev/null +++ b/src/user/profile/popups/Followers.js @@ -0,0 +1,157 @@ +import React, { Component } from "react"; +import { Modal, Button, Row, Col, Image } from "react-bootstrap"; +import logo from "../../../svgs/logo-image.jpg"; + +export class Followers extends Component { + // eslint-disable-next-line + constructor(props) { + super(props); + } + state = { text: "Follow" }; + render() { + return ( + + + +
Followers
+
PEOPLE WHO FOLLOW YOU
+
+
+ + + + I + + + Dhanus Rajendra + + Front-End Developer + + + + + + + + + I + + + Dhanus Rajendra + + Front-End Developer + + + + + + + + + I + + + Dhanus Rajendra + + Front-End Developer + + + + + + + + + I + + + Dhanus Rajendra + + Front-End Developer + + + + + + + + + I + + + Dhanus Rajendra + + Front-End Developer + + + + + + + + + I + + + Dhanus Rajendra + + Front-End Developer + + + + + + + +
+ ); + } +} diff --git a/src/user/profile/popups/Logout.js b/src/user/profile/popups/Logout.js new file mode 100644 index 00000000..d010eb67 --- /dev/null +++ b/src/user/profile/popups/Logout.js @@ -0,0 +1,65 @@ +import React, { Component } from "react"; +import { Modal, Button, Form, Col } from "react-bootstrap"; +import { connect } from "react-redux"; +import { withRouter } from "react-router-dom"; +import { logoutUser } from "../../../actions/authAction"; + +class Logout extends Component { + // eslint-disable-next-line + constructor(props) { + super(props); + } + onLogoutClick = (e) => { + e.preventDefault(); + console.log("Logging out!"); + this.props.logoutUser(); + }; + render() { + return ( + + + +
Logout?
+
+
+ + +
+ + +
+ You sure you want to logout from Donut? +
+
+
+
+
+
+ + +
+
+ ); + } +} +// map state to props +const mapStateToProps = (state) => ({ + auth: state.auth, + error: state.error, +}); + +export default connect(mapStateToProps, { logoutUser })(withRouter(Logout)); diff --git a/src/user/profile/popups/edit-profile.js b/src/user/profile/popups/edit-profile.js deleted file mode 100644 index 86ac8a57..00000000 --- a/src/user/profile/popups/edit-profile.js +++ /dev/null @@ -1,99 +0,0 @@ -import React, {Component} from 'react'; -import {Modal, Button, Row, Col, Form} from 'react-bootstrap'; -import "./popups.scss"; - -export class EditProfile extends Component{ - // eslint-disable-next-line - constructor(props){ - super(props); - } - render(){ - return ( - -
- - -
Edit Profile
-
PERSONAL INFORMATION
-
-
- - - - First Name - - - - Last Name - - - - - - Designation - - - - Location - - - - - About - - -
PROFILES
- - - GitHub URL - - - - LinkedIn URL - - - - - - Facebook URL - - - -
-
- - -
-
-
- ); - } -} \ No newline at end of file diff --git a/src/user/profile/popups/followers.js b/src/user/profile/popups/followers.js deleted file mode 100644 index c673d738..00000000 --- a/src/user/profile/popups/followers.js +++ /dev/null @@ -1,81 +0,0 @@ -import React, {Component} from 'react'; -import {Modal, Button, Row, Col} from 'react-bootstrap'; -import logo from "../../../svgs/profile-icon.svg"; -import "./popups.scss"; - -export class Followers extends Component{ - // eslint-disable-next-line - constructor(props){ - super(props); - } - state = {text:"Follow"}; - render(){ - - return ( - -
- - -
Followers
-
PEOPLE WHO FOLLOW YOU
-
-
- - - I -
-

Dhanus Rajendra

-

Front-End Developer

-
- -
- - I -
-

Dhanus Rajendra

-

Front-End Developer

-
- -
- - I -
-

Dhanus Rajendra

-

Front-End Developer

-
- -
- - I -
-

Dhanus Rajendra

-

Front-End Developer

-
- -
- - I -
-

Dhanus Rajendra

-

Front-End Developer

-
- -
- - I -
-

Dhanus Rajendra

-

Front-End Developer

-
- -
-
-
-
- ); - } -} diff --git a/src/user/profile/popups/logout.js b/src/user/profile/popups/logout.js deleted file mode 100644 index 842e69fa..00000000 --- a/src/user/profile/popups/logout.js +++ /dev/null @@ -1,48 +0,0 @@ -import React, {Component} from 'react'; -import {Modal, Button} from 'react-bootstrap'; -import "./popups.scss"; -import { connect } from 'react-redux'; -import { withRouter } from 'react-router-dom'; -import { logoutUser } from '../../../actions/authAction'; - -class Logout extends Component{ - // eslint-disable-next-line - constructor(props){ - super(props); - } - onLogoutClick = (e) => { - e.preventDefault(); - console.log("Logging out!"); - this.props.logoutUser(); - } - render(){ - return ( - -
- - -
Logout?
-
Are you sure you want to logout of Donut?
-
-
- -
- - -
-
-
- ); - } -} -// map state to props -const mapStateToProps = (state) => ({ - auth: state.auth, - error: state.error -}); - -export default connect(mapStateToProps, { logoutUser })(withRouter(Logout)); \ No newline at end of file diff --git a/src/user/profile/popups/popups.scss b/src/user/profile/popups/popups.scss deleted file mode 100644 index 8e8f8f3c..00000000 --- a/src/user/profile/popups/popups.scss +++ /dev/null @@ -1,100 +0,0 @@ -.heading{ - margin-top: 20px; -} -.title{ - font-size: 22px; - font-weight: 700; - line-height: 29px; - color: #1A73E8; -} -.about{ - font-weight: 500; - font-size: 10px; - line-height: 14px; - letter-spacing: 0.2em; - color: #90949C; - margin-top:10px; -} -.message{ - font-weight: 500; - font-size: 14px; - line-height: 14px; - letter-spacing: 0.2em; - color: rgb(28, 30, 34); - margin-top:15px; - margin-bottom: 20px; -} -.extra{ - margin-bottom: 20px; - margin-left: -15px; -} -.label{ - font-weight: 600; - font-size: 12px; - color:#000000; - margin-bottom: 3px; -} -.form-input{ - font-family: Inter; - font-style: normal; - font-weight: 300; - font-size: 13px; - line-height: 16px; -} -.form-content{ - margin-top:-2%; - margin-bottom: 20px; - justify-content:space-between; -} -.form-footer{ - margin-top: 0; - Button{ - width:90px; - margin-right: 20px; - margin-bottom: 30px; - border-radius: 100px; - font-weight:600; - } - .savebtn{ - background-color: #1A73E8; - } - -} -.contain{ - margin-top: -3px; -} -.photo{ - margin-top: 3px; - height: 43px; - width: 43px; -} -.user{ - margin-top: 2px; - font-size: 1.1em; - color: black; -} -.descr{ - font-size: 0.8em; - color: rgb(90, 84, 84); - margin-top: -13px; -} -.follow-link{ - margin-top: 3px; - padding: 8px; - font-size: 14px; - box-shadow: 1px 2px 5px rgba(0, 0, 0, 0.1); - border-radius: 20px; - width: 80px; - height: 35px; - font-family: Inter; - font-style: normal; - font-weight: 600; - font-size: 14px; - line-height: 17px; - text-align: center; -} -.follower{ - margin-top: 10px; - margin-bottom: 10px; - justify-content:space-between; -} \ No newline at end of file diff --git a/src/user/profile/user-info/user-info.js b/src/user/profile/user-info/user-info.js index 4c806407..c0a65523 100644 --- a/src/user/profile/user-info/user-info.js +++ b/src/user/profile/user-info/user-info.js @@ -2,17 +2,19 @@ import React, { Component } from "react"; import "./user-info.scss"; import { Button } from "react-bootstrap"; import { Avatar } from "@material-ui/core"; -import {EditProfile} from "./../popups/edit-profile"; -import {Followers} from "./../popups/followers" +import EditProfile from "./../popups/EditProfile"; +import { Followers } from "../popups/Followers"; class UserInfo extends Component { - state = { editProfile:false, followersList:false }; + state = { editProfile: false, followersList: false }; render() { - let cancel =()=>this.setState({ - editProfile:false - }); - let cancelf =()=>this.setState({ - followersList:false - }); + let cancel = () => + this.setState({ + editProfile: false, + }); + let cancelf = () => + this.setState({ + followersList: false, + }); return (
@@ -20,18 +22,25 @@ class UserInfo extends Component {
- - + +

- Dhanus Rajendra - + Dhanus Rajendra{" "} + +

Front end developer

Bengaluru, Karnataka

diff --git a/src/user/projects/popups/delete-project.js b/src/user/projects/popups/delete-project.js index b2b06255..b7c757bb 100644 --- a/src/user/projects/popups/delete-project.js +++ b/src/user/projects/popups/delete-project.js @@ -1,24 +1,24 @@ import React, { Component } from "react"; import { Modal, Button } from "react-bootstrap"; -import "./popups.scss"; export class DeleteProject extends Component { - render() { return ( - - - Delete This Project - - - - - - + + + + Delete This Project + + + + + + + ); } } diff --git a/src/user/projects/popups/edit-project.js b/src/user/projects/popups/edit-project.js index 0dbc51b6..e5a0fa0a 100644 --- a/src/user/projects/popups/edit-project.js +++ b/src/user/projects/popups/edit-project.js @@ -1,29 +1,27 @@ import React, { Component } from "react"; import { Modal, Button, Row, Col, Form } from "react-bootstrap"; -import "./popups.scss"; export class EditProject extends Component { constructor(props) { super(props); this.state = { - Proj_name: '', - version: '', - short_des: '', - long_des: '', - github_link: '', - bitbucket_link: '', - host_link: '', - img_link: '' - } - this.trigger=0 - this.onChange = this.onChange.bind(this); + Proj_name: "", + version: "", + short_des: "", + long_des: "", + github_link: "", + bitbucket_link: "", + host_link: "", + img_link: "", + }; + this.trigger = 0; + this.onChange = this.onChange.bind(this); this.onSubmit = this.onSubmit.bind(this); } - componentWillReceiveProps(nextProps){ - if(this.trigger<1) - this.setState({...nextProps.data}) - this.trigger = this.trigger+1; - } + componentWillReceiveProps(nextProps) { + if (this.trigger < 1) this.setState({ ...nextProps.data }); + this.trigger = this.trigger + 1; + } onChange(e) { this.setState({ [e.target.name]: e.target.value }); @@ -31,13 +29,11 @@ export class EditProject extends Component { onSubmit(e) { e.preventDefault(); -const EditProject = this.state + const EditProject = this.state; console.log("Edited Project", EditProject); } - - render() { return ( -
+ Project Name From 2c0c54a14ef869c4074cad4358262841aa8f973d Mon Sep 17 00:00:00 2001 From: Rupesh Krishna Jha Date: Wed, 13 May 2020 12:05:50 +0530 Subject: [PATCH 3/6] Inconsistency fix and backend integration, worked on events client side (#470) * fixed some client side issues and integrated backend * Make build.sh executable Co-authored-by: Devesh Verma --- .travis.yml | 2 + CODE_OF_CONDUCT.md | 0 README.md | 0 READMEassets/Home.jpg | Bin READMEassets/Info.png | Bin READMEassets/about.jpg | Bin READMEassets/about2.jpg | Bin READMEassets/codeuino.png | Bin READMEassets/dashboard.png | Bin READMEassets/doughnut.png | Bin READMEassets/edit_profile.png | Bin READMEassets/feeds.png | Bin READMEassets/forking-the-repo.gif | Bin READMEassets/landing.gif | Bin READMEassets/running-locally.gif | Bin READMEassets/signup_community.png | Bin READMEassets/signup_user.png | Bin READMEassets/womenwhocode.png | Bin src/App.js | 2 +- src/actions/eventAction.js | 43 +++++ src/images/jitsi.png | Bin 0 -> 8339 bytes src/index.css | 2 + src/svgs/donut-icon.svg | 2 +- src/user/dashboard/navigation/navigation.js | 85 +++++----- src/user/dashboard/navigation/navigation.scss | 26 +-- src/user/events/events.js | 93 +++++++++-- src/user/events/events.scss | 25 +-- src/user/events/popups/DeleteEvent.js | 70 ++++++++ src/user/events/popups/EditEvent.js | 157 ++++++++++++++++++ src/user/events/popups/popup.scss | 22 ++- src/user/pinned-posts/posts/pinPosts.js | 12 +- src/user/profile/popups/logout.js | 65 ++++++++ src/user/projects/projects.js | 9 +- src/user/projects/projects.scss | 1 - 34 files changed, 513 insertions(+), 103 deletions(-) create mode 100644 .travis.yml mode change 100755 => 100644 CODE_OF_CONDUCT.md mode change 100755 => 100644 README.md mode change 100755 => 100644 READMEassets/Home.jpg mode change 100755 => 100644 READMEassets/Info.png mode change 100755 => 100644 READMEassets/about.jpg mode change 100755 => 100644 READMEassets/about2.jpg mode change 100755 => 100644 READMEassets/codeuino.png mode change 100755 => 100644 READMEassets/dashboard.png mode change 100755 => 100644 READMEassets/doughnut.png mode change 100755 => 100644 READMEassets/edit_profile.png mode change 100755 => 100644 READMEassets/feeds.png mode change 100755 => 100644 READMEassets/forking-the-repo.gif mode change 100755 => 100644 READMEassets/landing.gif mode change 100755 => 100644 READMEassets/running-locally.gif mode change 100755 => 100644 READMEassets/signup_community.png mode change 100755 => 100644 READMEassets/signup_user.png mode change 100755 => 100644 READMEassets/womenwhocode.png create mode 100644 src/actions/eventAction.js create mode 100644 src/images/jitsi.png create mode 100644 src/user/events/popups/DeleteEvent.js create mode 100644 src/user/events/popups/EditEvent.js create mode 100644 src/user/profile/popups/logout.js diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..016f04cc --- /dev/null +++ b/.travis.yml @@ -0,0 +1,2 @@ +before_install: + - chmod +x build.sh \ No newline at end of file diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md old mode 100755 new mode 100644 diff --git a/README.md b/README.md old mode 100755 new mode 100644 diff --git a/READMEassets/Home.jpg b/READMEassets/Home.jpg old mode 100755 new mode 100644 diff --git a/READMEassets/Info.png b/READMEassets/Info.png old mode 100755 new mode 100644 diff --git a/READMEassets/about.jpg b/READMEassets/about.jpg old mode 100755 new mode 100644 diff --git a/READMEassets/about2.jpg b/READMEassets/about2.jpg old mode 100755 new mode 100644 diff --git a/READMEassets/codeuino.png b/READMEassets/codeuino.png old mode 100755 new mode 100644 diff --git a/READMEassets/dashboard.png b/READMEassets/dashboard.png old mode 100755 new mode 100644 diff --git a/READMEassets/doughnut.png b/READMEassets/doughnut.png old mode 100755 new mode 100644 diff --git a/READMEassets/edit_profile.png b/READMEassets/edit_profile.png old mode 100755 new mode 100644 diff --git a/READMEassets/feeds.png b/READMEassets/feeds.png old mode 100755 new mode 100644 diff --git a/READMEassets/forking-the-repo.gif b/READMEassets/forking-the-repo.gif old mode 100755 new mode 100644 diff --git a/READMEassets/landing.gif b/READMEassets/landing.gif old mode 100755 new mode 100644 diff --git a/READMEassets/running-locally.gif b/READMEassets/running-locally.gif old mode 100755 new mode 100644 diff --git a/READMEassets/signup_community.png b/READMEassets/signup_community.png old mode 100755 new mode 100644 diff --git a/READMEassets/signup_user.png b/READMEassets/signup_user.png old mode 100755 new mode 100644 diff --git a/READMEassets/womenwhocode.png b/READMEassets/womenwhocode.png old mode 100755 new mode 100644 diff --git a/src/App.js b/src/App.js index 52cdb160..46f27d8c 100644 --- a/src/App.js +++ b/src/App.js @@ -38,7 +38,7 @@ class App extends Component { rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" - crossorigin="anonymous" + crossOrigin="anonymous" /> diff --git a/src/actions/eventAction.js b/src/actions/eventAction.js new file mode 100644 index 00000000..a7961b1c --- /dev/null +++ b/src/actions/eventAction.js @@ -0,0 +1,43 @@ +import axios from 'axios'; +import { errorHandler } from '../utils/errorHandler'; +import { setRequestStatus } from '../utils/setRequestStatus'; + +// DELETE EVENT REQUEST +export const deleteEvent = (eventId) => async (dispatch) => { + try { + const res = await axios.delete(`/event/${eventId}`) + dispatch(setRequestStatus(false)); + if(res.status === 200){ + dispatch(setRequestStatus(true)); + } + } catch(error) { + dispatch(errorHandler(error)) + } +} + +// UPDATE EVENT REQUEST +export const updateEvent = (eventId, updatedInfo) => async (dispatch) => { + try { + const res = await axios.patch(`/event/${eventId}`, updatedInfo); + dispatch(setRequestStatus(false)); + if(res.status === 200){ + dispatch(setRequestStatus(true)); + } + } catch(error) { + dispatch(errorHandler(error)) + } +} + +// CREATE EVENT +export const createEvent = (eventInfo, history) => async (dispatch) => { + try { + const res = await axios.post('/event/', eventInfo) + dispatch(setRequestStatus(false)) + if(res.status === 201){ + dispatch(setRequestStatus(true)) + history.push('/events'); + } + } catch(error) { + dispatch(errorHandler(error)) + } +} diff --git a/src/images/jitsi.png b/src/images/jitsi.png new file mode 100644 index 0000000000000000000000000000000000000000..308864f60e5a52115a5f5a2695f9bfeb117bf5d2 GIT binary patch literal 8339 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 literal 0 HcmV?d00001 diff --git a/src/index.css b/src/index.css index 21c28d58..ac3c063f 100644 --- a/src/index.css +++ b/src/index.css @@ -6,6 +6,8 @@ body { /* font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; */ + box-sizing: border-box; + overflow-x: hidden; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } diff --git a/src/svgs/donut-icon.svg b/src/svgs/donut-icon.svg index bb4666aa..b7079ea9 100644 --- a/src/svgs/donut-icon.svg +++ b/src/svgs/donut-icon.svg @@ -1,3 +1,3 @@ - + diff --git a/src/user/dashboard/navigation/navigation.js b/src/user/dashboard/navigation/navigation.js index 4e553e88..9b074b51 100644 --- a/src/user/dashboard/navigation/navigation.js +++ b/src/user/dashboard/navigation/navigation.js @@ -6,7 +6,8 @@ import { DonutTitleSmall } from "../../../donutTitle/donutTitle"; import "./navigation.scss"; import Logout from "../../profile/popups/Logout"; import logo from "../../../svgs/logout.svg"; -import { Info } from "../../integrations/NameForm"; +import {Info} from "../../integrations/NameForm"; +import JitsiMeets from '../../../images/jitsi.png' class Navigation extends Component { state = { logout: false }; @@ -20,13 +21,14 @@ class Navigation extends Component { open: false, }); const divStyle = { - marginTop: "80px", + position: "fixed", + bottom: '5em' }; const divStyle2 = { - position: "absolute", - bottom: 0, + position: "fixed", + bottom: "2em" }; - + const { dashboard, posts, org, event, proj, profile, logout, settings } = this.props; return (
@@ -37,9 +39,7 @@ class Navigation extends Component {
- + @@ -60,7 +60,7 @@ class Navigation extends Component { Dashboard - + @@ -83,7 +83,7 @@ class Navigation extends Component { Pinned Posts - + @@ -105,7 +105,7 @@ class Navigation extends Component { - + @@ -127,7 +127,7 @@ class Navigation extends Component { - + @@ -149,9 +149,7 @@ class Navigation extends Component { - + @@ -171,22 +169,9 @@ class Navigation extends Component { Account - - - {this.state.open ? ( - - ) : null} - Settings - + + - -

CODEUINO

+ + +
this.setState({ open: true })} + > + jitsi + Jitsi Meet +
+ {this.state.open ? ( + + ) : null}
diff --git a/src/user/dashboard/navigation/navigation.scss b/src/user/dashboard/navigation/navigation.scss index 57db417d..2cce548b 100644 --- a/src/user/dashboard/navigation/navigation.scss +++ b/src/user/dashboard/navigation/navigation.scss @@ -54,9 +54,16 @@ } .jitsi { - margin-left: 12.5px; + display: flex; color: rgba(0, 0, 0, 0.5); } +.jitsi-meet{ + height: 21px; + width: 21px; + color: rgba(0, 0, 0, 0.5); + margin-right: 15px; + margin-left: 2px; +} .navigation { .list-group { @@ -79,17 +86,10 @@ margin-left: 2px; } -.log-button { - margin-left: -8.5px; - color: rgba(0, 0, 0, 0.5); -} - -.logo-text { - font-family: Inter; - font-style: normal; - font-weight: 500; - font-size: 12px; - text-align: center; - letter-spacing: 3.6px; +.log-button{ + margin-left: -8.5px; + position: fixed; + z-index: 999; color: rgba(0, 0, 0, 0.5); + bottom: 2em; } diff --git a/src/user/events/events.js b/src/user/events/events.js index 87d71980..00786493 100644 --- a/src/user/events/events.js +++ b/src/user/events/events.js @@ -5,44 +5,99 @@ import Event_list from "../../jsonData/events"; import { Row, Col } from "react-bootstrap"; import "./events.scss"; import Popups from './popups/popups'; +import DeleteEvent from "./popups/DeleteEvent"; +import EditEvent from "./popups/EditEvent"; class Events extends Component { constructor(props) { super(props); this.state = { event: true, - modalShow: false, - optionValue: {} + modalShow: false, + optionValue: {}, + delete: false, + edit: false } } render() { const setOptionValue = (targetId) => { - const event = Event_list.filter( - (x) => x._id === targetId - ); - this.setState({optionValue: event[0]}) + const event = Event_list.filter((x) => x._id === targetId); + this.setState({optionValue: event[0]}) } + const handleToggle = (e) => { const targetId = e.target.id; console.log("-handletoggel",targetId) - this.setState({ - modalShow: true - }); + this.setState({ modalShow: true }); setOptionValue(targetId); } + var RefinedDay = (d) => { const day = d.slice(0, 3); return day; }; - var RefinedYear = (d) => { + const editEvent = (e) => { + e.preventDefault(); + this.setState({ modalShow: false, edit: true }) + } + + const handleDelete = (e) => { + this.setState({ modalShow: false, delete: true }) + } + + const cancel = () => { + this.setState({ delete: false, edit: false }) + } + + const RefinedYear = (d) => { const month = d.slice(4, 7); const year = d.slice(11, 15); return month + " " + year; }; - let Events = Event_list.map((Item) => ( - + + const FooterOfEvents = ({ Item }) => { + return ( +
+ + +
+ + Edit + Delete + +
+ +
+ ) + } + + let Events = Event_list.map((Item, index) => ( + {Date.parse(Item.eventDate) >= Date.parse(new Date()) ? ( @@ -109,7 +164,9 @@ class Events extends Component { )} - See More +
@@ -181,7 +238,7 @@ class Events extends Component { )} - See More + @@ -205,10 +262,10 @@ class Events extends Component { + option={this.state.option} + optionValue={this.state.optionValue} + modalShow={this.state.modalShow} + /> ); } diff --git a/src/user/events/events.scss b/src/user/events/events.scss index 547b423b..432e4918 100644 --- a/src/user/events/events.scss +++ b/src/user/events/events.scss @@ -5,7 +5,6 @@ font-family: Muli, sans-serif; .events { margin-top: 2vh; - } } @@ -34,7 +33,7 @@ width: 10px; margin: 1px; text-align: center; - height: 100%; + height: 100%; font-size: 30px; } @@ -43,7 +42,7 @@ width: 10px; margin: 1px; text-align: center; - height: 100%; + height: 100%; font-size: 30px; } @@ -52,7 +51,7 @@ width: 10px; margin: 1px; text-align: center; - height: 100%; + height: 100%; font-size: 30px; } @@ -90,17 +89,19 @@ } .short-des{ -font-weight: 100; -font-size: smaller; -color: #5d5d5d; + font-weight: 100; + font-size: smaller; + color: #5d5d5d; + text-align: justify; + text-overflow: ellipsis; } .createdAt{ -text-align: center; -font-size: 12px; -font-weight: bold; + text-align: center; + font-size: 12px; + font-weight: bold; } .event-card{ -max-width: 345px; -margin-top: 20px; + max-width: 345px; + margin-top: 20px; } \ No newline at end of file diff --git a/src/user/events/popups/DeleteEvent.js b/src/user/events/popups/DeleteEvent.js new file mode 100644 index 00000000..0cc9d429 --- /dev/null +++ b/src/user/events/popups/DeleteEvent.js @@ -0,0 +1,70 @@ +import React, { Component } from 'react' +import { Modal, Button } from 'react-bootstrap'; +import PropTypes from 'prop-types'; +import { connect } from 'react-redux'; +import "./popup.scss"; +import { deleteEvent } from '../../../actions/eventAction'; + +class DeleteEvent extends Component { + constructor(props) { + super(props); + this.state = { + eventId: '', + success: false + } + } + + deleteEventClick = (e) => { + e.preventDefault(); + console.log("Clicked on delete event") + this.props.deleteEvent(this.props.eventId); + if(this.props.status.success){ + this.setState({ show: false, success: true }) + } else { + console.log('Something went wrong!') + } + } + + render() { + const { show, onHide, eventId } = this.props; + return ( +
+ +
+ + +
Delete Event?
+
Are you sure you want to delete this event?
+
+
+ +
+ + +
+
+
+
+ ) + } +} + +DeleteEvent.propTypes = { + show: PropTypes.bool.isRequired, + onHide: PropTypes.func.isRequired, + eventId: PropTypes.string.isRequired +} + +const mapStateToProps = (state) => ({ + auth: state.auth, + error: state.error, + status: state.status +}) + +export default connect(mapStateToProps, { deleteEvent })(DeleteEvent); \ No newline at end of file diff --git a/src/user/events/popups/EditEvent.js b/src/user/events/popups/EditEvent.js new file mode 100644 index 00000000..2541235d --- /dev/null +++ b/src/user/events/popups/EditEvent.js @@ -0,0 +1,157 @@ +import React, {Component} from 'react'; +import {Modal, Button, Row, Col, Form} from 'react-bootstrap'; +import "./popup.scss"; +import { connect } from 'react-redux'; +import { updateEvent, deleteEvent } from '../../../actions/eventAction'; +import PropTypes from 'prop-types' + + +class EditEvent extends Component { + constructor(props) { + super(props); + this.state = { + eventName: "", + shortDesc: "", + longDesc: "", + location: "", + date: "", + }; + } + + componentDidMount = () => { + // FETCH THE EVENT DETAILS ON POPUP GETS TRIGGERED (INTEGRATION) + console.log("Fetching the event details!"); + }; + + onChange = (event) => { + const { name, value } = event.target; + this.setState({ [name]: value }); + }; + + updateEvent = (e) => { + e.preventDefault(); + console.log("Updating the event!!"); + // DISPATCH THE ACTION TO UPDATE EVENT (INTEGRATION) + const { eventName, shortDesc, longDesc, date, location } = this.state; + const { eventId } = this.props; + const updatedInfo = { + eventName, + description: { + shortDescription: shortDesc, + longDescription: longDesc, + }, + location, + eventDate: date, + }; + console.log('submitted data ', updatedInfo); + this.props.updateEvent(eventId, updatedInfo); + }; + + render() { + const { show, onHide } = this.props; + + return ( + +
+ + +
Edit Event
+
Event Information
+
+
+ + + + Event Name + + + + + Short description + + + + Long description + + + + Location + + + + Event Date + + + +
+ + +
+
+
+ ); + } +} + +EditEvent.propTypes = { + show: PropTypes.bool.isRequired, + onHide: PropTypes.func.isRequired, + eventId: PropTypes.string.isRequired +} + +const mapStateToProps = (state) => ({ + error: state.error, + statue: state.status +}) + +export default connect(mapStateToProps, { updateEvent, deleteEvent })((EditEvent)) diff --git a/src/user/events/popups/popup.scss b/src/user/events/popups/popup.scss index 96c35c17..d9fc2de0 100644 --- a/src/user/events/popups/popup.scss +++ b/src/user/events/popups/popup.scss @@ -27,6 +27,26 @@ .info-description{ font-size: 15px; - text-align: center; + text-align: justify; color:rgb(56, 55, 55); +} + +.form-footer { + margin-top: 0; + Button { + width: 90px; + margin-right: 20px; + margin-bottom: 30px; + border-radius: 100px; + font-weight: 600; + } + .savebtn { + background-color: #1A73E8; + } +} +.modal-backdrop { + background-color: rgba(0,0,0, 0.1) !important; +} +.modal-backdrop.in{ + opacity: 0.5; } \ No newline at end of file diff --git a/src/user/pinned-posts/posts/pinPosts.js b/src/user/pinned-posts/posts/pinPosts.js index 70b68ebf..d26f26bd 100644 --- a/src/user/pinned-posts/posts/pinPosts.js +++ b/src/user/pinned-posts/posts/pinPosts.js @@ -70,10 +70,10 @@ export default function PinPosts(props){ changeType(atrb); second('s'); }; - let posts = feed.map((newsItem) => { + let posts = feed.map((newsItem, index) => { if(newsItem.type === "Project" && (type === 'All' || type === newsItem.type)){ return( -
+
) }else if(newsItem.type === "Event" && (type === 'All' || type === newsItem.type)){ return( -
+
) }else if(newsItem.type === "Donut" && (type === 'All' || type === newsItem.type)){ return( -
+
@@ -275,9 +275,9 @@ export default function PinPosts(props){

Pinned Posts

{ (first === 'f') ? - : - } + +
+ + ); + } +} +// map state to props +const mapStateToProps = (state) => ({ + auth: state.auth, + error: state.error, +}); + +export default connect(mapStateToProps, { logoutUser })(withRouter(Logout)); diff --git a/src/user/projects/projects.js b/src/user/projects/projects.js index cad9f488..e9c831e0 100644 --- a/src/user/projects/projects.js +++ b/src/user/projects/projects.js @@ -44,7 +44,6 @@ class Projects extends Component { className="img" image={Item.image} /> - {Item.Proj_name} @@ -55,13 +54,9 @@ class Projects extends Component { - - - - -
diff --git a/src/user/projects/projects.scss b/src/user/projects/projects.scss index f5cef1e8..045aab75 100644 --- a/src/user/projects/projects.scss +++ b/src/user/projects/projects.scss @@ -1,7 +1,6 @@ .organization { display: flex; min-height: 100vh; - height: auto; font-family: Muli, sans-serif; .navigation { flex: 0.5; From 0582c6a8d026e61a3c0e20ed2a266ef964f5da43 Mon Sep 17 00:00:00 2001 From: Asel Date: Sun, 17 May 2020 16:13:05 +0530 Subject: [PATCH 4/6] GSoC frontend - Proposal admin dashboard page implementation --- src/router.js | 6 + .../AdminProposalDashboard.js | 32 +++ .../AdminProposalDashboard.scss | 16 ++ .../DashboardContent/DashboardContent.js | 177 +++++++++++++++++ .../DashboardContent/DashboardContent.scss | 184 ++++++++++++++++++ .../DashboardRightPanel/Comments/Comments.js | 72 +++++++ .../Comments/Comments.scss | 69 +++++++ .../DashboardRightPanel.js | 25 +++ .../DashboardRightPanel.scss | 12 ++ .../OtherIdeas/OtherIdeas.js | 119 +++++++++++ .../OtherIdeas/OtherIdeas.scss | 52 +++++ 11 files changed, 764 insertions(+) create mode 100644 src/user/proposals/AdminProposalDashboard/AdminProposalDashboard.scss create mode 100644 src/user/proposals/AdminProposalDashboard/DashboardContent/DashboardContent.js create mode 100644 src/user/proposals/AdminProposalDashboard/DashboardContent/DashboardContent.scss create mode 100644 src/user/proposals/AdminProposalDashboard/DashboardRightPanel/Comments/Comments.js create mode 100644 src/user/proposals/AdminProposalDashboard/DashboardRightPanel/Comments/Comments.scss create mode 100644 src/user/proposals/AdminProposalDashboard/DashboardRightPanel/DashboardRightPanel.js create mode 100644 src/user/proposals/AdminProposalDashboard/DashboardRightPanel/DashboardRightPanel.scss create mode 100644 src/user/proposals/AdminProposalDashboard/DashboardRightPanel/OtherIdeas/OtherIdeas.js create mode 100644 src/user/proposals/AdminProposalDashboard/DashboardRightPanel/OtherIdeas/OtherIdeas.scss diff --git a/src/router.js b/src/router.js index 697d313f..c9a08dcd 100644 --- a/src/router.js +++ b/src/router.js @@ -13,6 +13,7 @@ import PrivateRoute from "./common/PrivateRoute"; import Maintenance from "./maintenance/maintenance"; import Events from "./user/events/events"; import UserProposalDashboard from "./user/proposals/UserProposalDashboard/UserProposalDashboard"; +import AdminProposalDashboard from "./user/proposals/AdminProposalDashboard/AdminProposalDashboard"; const Router = () => ( @@ -29,6 +30,11 @@ const Router = () => ( + diff --git a/src/user/proposals/AdminProposalDashboard/AdminProposalDashboard.js b/src/user/proposals/AdminProposalDashboard/AdminProposalDashboard.js index e69de29b..9b1f0f51 100644 --- a/src/user/proposals/AdminProposalDashboard/AdminProposalDashboard.js +++ b/src/user/proposals/AdminProposalDashboard/AdminProposalDashboard.js @@ -0,0 +1,32 @@ +import React, { Component } from "react"; +import "./AdminProposalDashboard.scss"; +import Navigation from "../../dashboard/navigation/navigation"; +import DashboardContent from "./DashboardContent/DashboardContent"; +import DashboardRightPanel from "./DashboardRightPanel/DashboardRightPanel"; + +class UserProposalDashboard extends Component { + constructor(props) { + super(props); + this.state = { + dashboard: true, + isLoading: true, + }; + } + render() { + return ( +
+
+ +
+
+ +
+
+ +
+
+ ); + } +} + +export default UserProposalDashboard; diff --git a/src/user/proposals/AdminProposalDashboard/AdminProposalDashboard.scss b/src/user/proposals/AdminProposalDashboard/AdminProposalDashboard.scss new file mode 100644 index 00000000..86e9c195 --- /dev/null +++ b/src/user/proposals/AdminProposalDashboard/AdminProposalDashboard.scss @@ -0,0 +1,16 @@ +.dashboard { + display: flex; + min-height: 100vh; + height: auto; + font-family: Muli, sans-serif; + .dashboard__navigation { + flex: 1; + border-right: solid 1px #dfe9f1; + } + .dashboard__content { + flex: 4; + } + .dashboard__rightpanel { + flex: 1.5; + } +} diff --git a/src/user/proposals/AdminProposalDashboard/DashboardContent/DashboardContent.js b/src/user/proposals/AdminProposalDashboard/DashboardContent/DashboardContent.js new file mode 100644 index 00000000..b1d88689 --- /dev/null +++ b/src/user/proposals/AdminProposalDashboard/DashboardContent/DashboardContent.js @@ -0,0 +1,177 @@ +import React, { Component } from "react"; +import { Button, Form, Col, Image } from "react-bootstrap"; +import "./DashboardContent.scss"; +import userIcon2 from "../../../../images/userIcon2.jpg"; + +class DashboardContent extends Component { + constructor(props) { + super(props); + this.state = {}; + } + render() { + return ( +
+
+
+ + +
+ Proposals +
+
+
+
+ + + + + + + + +
+
+
+
+ +
+
+
+
+
+ icon +
+
+

Admin panel in donut dashboard

+

June 5, 2018 4:31 AM

+
+ +
+
+
+ ex sit ex laboris adipisicing enim eiusmod proident + exercitation ea fugiat in llit pariatur occaecat ut nostrud + ullamco ex official ex sit ex laboris adipisicing enim eiusmod + proident exercitation ea... +
+
+ + +
+
+
+
+
+
+ icon +
+
+

Admin panel in donut dashboard

+

June 5, 2018 4:31 AM

+
+ +
+
+
+ ex sit ex laboris adipisicing enim eiusmod proident + exercitation ea fugiat in llit pariatur occaecat ut nostrud + ullamco ex official ex sit ex laboris adipisicing enim eiusmod + proident exercitation ea... +
+
+ + +
+
+
+
+
+
+ icon +
+
+

Admin panel in donut dashboard

+

June 5, 2018 4:31 AM

+
+ +
+
+
+ ex sit ex laboris adipisicing enim eiusmod proident + exercitation ea fugiat in llit pariatur occaecat ut nostrud + ullamco ex official ex sit ex laboris adipisicing enim eiusmod + proident exercitation ea... +
+
+ + +
+
+
+
+
+
+ ); + } +} + +export default DashboardContent; diff --git a/src/user/proposals/AdminProposalDashboard/DashboardContent/DashboardContent.scss b/src/user/proposals/AdminProposalDashboard/DashboardContent/DashboardContent.scss new file mode 100644 index 00000000..adc0732c --- /dev/null +++ b/src/user/proposals/AdminProposalDashboard/DashboardContent/DashboardContent.scss @@ -0,0 +1,184 @@ +.dashboard-content { + padding: 30px; + display: flex; + height: 100vh; + flex-direction: column; + + .searchbar-container { + flex-grow: 0.5; + .searchbar { + border-radius: 25px; + } + .dashboard-title { + margin-top: 15px; + .title-text { + font-family: Inter; + font-style: normal; + font-weight: 600; + font-size: 36px; + line-height: 44px; + color: #000000; + } + } + .button-container { + .posts { + .category { + text-align: left; + margin-left: 0px; + margin-top: 20px; + .category-btn { + background-color: white; + font-family: Inter; + font-style: normal; + font-weight: 500; + font-size: 18px; + line-height: 22px; + + &:hover { + background-color: #1a73e8; + color: white; + } + + &:focus { + background-color: #1a73e8; + color: white; + } + } + } + } + } + } + .proposal-container { + margin-top: 20px; + flex-grow: 5; + .proposals { + .single-proposal { + display: inline-block; + counter-increment: item-counter; + width: 100%; + margin-bottom: 15px; + border: solid 1px #dfe9f1; + box-shadow: 1px 2px 5px rgba(0, 0, 0, 0.1); + border-radius: 5px; + .user-info { + display: flex; + padding: 8px; + .image { + width: 38px; + height: 38px; + img { + width: 100%; + height: 100%; + border-radius: 2px; + } + } + .img-desc { + margin-left: 10px; + h2 { + font-family: Inter; + font-style: normal; + font-weight: 600; + font-size: 18px; + line-height: 22px; + margin: 3px; + /* identical to box height */ + } + small { + font-family: Inter; + font-style: normal; + font-weight: normal; + font-size: 12px; + line-height: 15px; + color: #90949c; + margin: 0; + } + .proposal-date { + font-family: Inter; + font-style: normal; + font-weight: normal; + font-size: 12px; + line-height: 15px; + + color: #90949c; + } + } + .status-btn-draft { + background-color: white; + padding: 4px 36px; + border: solid 1px #eb5757; + border-radius: 100px; + color: #eb5757; + margin: 0 5px; + height: 30px; + cursor: default; + } + .status-btn-submitted { + background-color: white; + padding: 4px 36px; + border: solid 1px #90949c; + border-radius: 100px; + color: #90949c; + margin: 0 5px; + height: 30px; + cursor: default; + } + .status-btn-accepted { + background-color: white; + padding: 4px 36px; + border: solid 1px #27ae60; + border-radius: 100px; + color: #27ae60; + margin: 0 5px; + height: 30px; + cursor: default; + } + .dropdown-container { + margin-left: auto; + margin-right: 5px; + } + } + .proposal-content { + display: flex; + .proposal-details { + flex: 3; + font-family: Inter; + font-style: normal; + font-weight: normal; + font-size: 14px; + line-height: 17px; + padding: 10px; + + color: #1d2129; + } + .proposal-options { + flex: 1.5; + text-align: center; + padding: 20px; + .option-btn { + background-color: white; + color: #007bff; + padding: 4px 40px; + border: solid 1px #1a73e8; + border-radius: 100px; + margin: 0 10px; + height: 30px; + cursor: pointer; + &.active { + background: #007bff; + color: white; + } + .option-text { + font-family: Inter; + font-style: normal; + font-weight: 500; + font-size: 14px; + line-height: 22px; + /* identical to box height */ + } + } + } + } + } + } + } +} diff --git a/src/user/proposals/AdminProposalDashboard/DashboardRightPanel/Comments/Comments.js b/src/user/proposals/AdminProposalDashboard/DashboardRightPanel/Comments/Comments.js new file mode 100644 index 00000000..3430f1aa --- /dev/null +++ b/src/user/proposals/AdminProposalDashboard/DashboardRightPanel/Comments/Comments.js @@ -0,0 +1,72 @@ +import React, { Component } from "react"; +import "./Comments.scss"; +import { ListGroup, Image } from "react-bootstrap"; +import userIcon2 from "../../../../../images/userIcon2.jpg"; + +class Comments extends Component { + constructor(props) { + super(props); + this.state = {}; + } + render() { + return ( +
+
Comments
+
+ + +
+
+ icon +
+
+
Devesh
+
+ "Lorem ipsum dolor sit amet" +
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation +
+
+
+
+
+ + +
+
+ icon +
+
+
Devesh
+
+ "Lorem ipsum dolor sit amet" +
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation +
+
+
+
+
+
+
+ ); + } +} + +export default Comments; diff --git a/src/user/proposals/AdminProposalDashboard/DashboardRightPanel/Comments/Comments.scss b/src/user/proposals/AdminProposalDashboard/DashboardRightPanel/Comments/Comments.scss new file mode 100644 index 00000000..88c79fca --- /dev/null +++ b/src/user/proposals/AdminProposalDashboard/DashboardRightPanel/Comments/Comments.scss @@ -0,0 +1,69 @@ +.comments { + .comment-title { + margin-top: 10px; + font-family: Inter; + font-style: normal; + font-weight: 600; + font-size: 22px; + line-height: 27px; + + color: #000000; + } + .comments-container { + border: solid 1px #dfe9f1; + overflow: auto; + border-radius: 5px; + margin: 5px; + max-height: 300px; + .comment-item { + display: flex; + padding: none; + .image-container { + flex: 1; + .user-image { + width: 30px; + height: 30px; + } + } + .comment-container { + flex: 6; + border: solid 1px #dfe9f1; + overflow: auto; + border-radius: 5px; + padding: 3px; + .commenting-user { + font-family: Inter; + font-style: normal; + font-weight: 600; + font-size: 14px; + line-height: 150%; + /* or 21px */ + + color: #000000; + } + .commented-section { + margin-top: 2px; + font-family: Inter; + font-style: normal; + font-weight: normal; + font-size: 14px; + line-height: 150%; + /* or 21px */ + + color: rgba(29, 33, 41, 0.5); + } + .comment-text { + margin-top: 2px; + font-family: Inter; + font-style: normal; + font-weight: normal; + font-size: 14px; + + /* or 21px */ + + color: rgba(21, 21, 21, 0.91); + } + } + } + } +} diff --git a/src/user/proposals/AdminProposalDashboard/DashboardRightPanel/DashboardRightPanel.js b/src/user/proposals/AdminProposalDashboard/DashboardRightPanel/DashboardRightPanel.js new file mode 100644 index 00000000..106355b4 --- /dev/null +++ b/src/user/proposals/AdminProposalDashboard/DashboardRightPanel/DashboardRightPanel.js @@ -0,0 +1,25 @@ +import React, { Component } from "react"; +import "./DashboardRightPanel.scss"; +import Comments from "./Comments/Comments"; +import OtherIdeas from "./OtherIdeas/OtherIdeas"; + +class DashboardRightPanel extends Component { + constructor(props) { + super(props); + this.state = {}; + } + render() { + return ( +
+
+ +
+
+ +
+
+ ); + } +} + +export default DashboardRightPanel; diff --git a/src/user/proposals/AdminProposalDashboard/DashboardRightPanel/DashboardRightPanel.scss b/src/user/proposals/AdminProposalDashboard/DashboardRightPanel/DashboardRightPanel.scss new file mode 100644 index 00000000..133ebce0 --- /dev/null +++ b/src/user/proposals/AdminProposalDashboard/DashboardRightPanel/DashboardRightPanel.scss @@ -0,0 +1,12 @@ +.panel { + display: flex; + flex-direction: column; + + .panel-comments { + flex-grow: 1; + } + .panel-ideas { + margin-top: 10px; + flex-grow: 1; + } +} diff --git a/src/user/proposals/AdminProposalDashboard/DashboardRightPanel/OtherIdeas/OtherIdeas.js b/src/user/proposals/AdminProposalDashboard/DashboardRightPanel/OtherIdeas/OtherIdeas.js new file mode 100644 index 00000000..a64b31b3 --- /dev/null +++ b/src/user/proposals/AdminProposalDashboard/DashboardRightPanel/OtherIdeas/OtherIdeas.js @@ -0,0 +1,119 @@ +import React, { Component } from "react"; +import "./OtherIdeas.scss"; +import { ListGroup, Image } from "react-bootstrap"; +import userIcon2 from "../../../../../images/userIcon2.jpg"; + +class OtherIdeas extends Component { + constructor(props) { + super(props); + this.state = {}; + } + render() { + return ( +
+
Other Ideas
+
+ + +
+
+ icon +
+
+
We got into GSoC 2020
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor incididunt ut labore et dolore magna +
+
+
+
+ +
+
+ icon +
+
+
We got into GSoC 2020
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor incididunt ut labore et dolore magna +
+
+
+
+ +
+
+ icon +
+
+
We got into GSoC 2020
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor incididunt ut labore et dolore magna +
+
+
+
+ +
+
+ icon +
+
+
We got into GSoC 2020
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor incididunt ut labore et dolore magna +
+
+
+
+ +
+
+ icon +
+
+
We got into GSoC 2020
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor incididunt ut labore et dolore magna +
+
+
+
+
+
+
+ ); + } +} + +export default OtherIdeas; diff --git a/src/user/proposals/AdminProposalDashboard/DashboardRightPanel/OtherIdeas/OtherIdeas.scss b/src/user/proposals/AdminProposalDashboard/DashboardRightPanel/OtherIdeas/OtherIdeas.scss new file mode 100644 index 00000000..6058404f --- /dev/null +++ b/src/user/proposals/AdminProposalDashboard/DashboardRightPanel/OtherIdeas/OtherIdeas.scss @@ -0,0 +1,52 @@ +.ideas { + .ideas-title { + margin-top: 10px; + font-family: Inter; + font-style: normal; + font-weight: 600; + font-size: 22px; + line-height: 27px; + + color: #000000; + } + .ideas-container { + border: solid 1px #dfe9f1; + overflow: auto; + border-radius: 5px; + margin: 5px; + max-height: 300px; + .idea-item { + display: flex; + padding: none; + .image-container { + flex: 1; + .user-image { + width: 30px; + height: 30px; + } + } + .idea-container { + flex: 6; + .idea-title { + font-family: Inter; + font-style: normal; + font-weight: 600; + font-size: 14px; + line-height: 21px; + /* identical to box height, or 150% */ + + color: #000000; + } + .idea-description { + font-family: Inter; + font-style: normal; + font-weight: normal; + font-size: 12px; + line-height: 15px; + + color: rgba(29, 33, 41, 0.5); + } + } + } + } +} From 76511e1dd71940d1cfec8a49d4ff56e9a2fe8a08 Mon Sep 17 00:00:00 2001 From: Asel Date: Fri, 22 May 2020 07:59:03 +0530 Subject: [PATCH 5/6] GSoC Frontend - Proposal Discussion page --- src/router.js | 11 ++ .../DiscussionComments/DiscussionComments.js | 175 ++++++++++++++++++ .../DiscussionComments.scss | 84 +++++++++ .../DiscussionContent/DiscussionContent.js | 115 ++++++++++++ .../DiscussionContent/DiscussionContent.scss | 97 ++++++++++ .../ProposalDiscussion/ProposalDiscussion.js | 25 +++ .../ProposalDiscussion.scss | 13 ++ .../ProposalEditor/ProposalEditor.js | 13 ++ .../ProposalEditor/ProposalEditor.scss | 0 .../UserProposalDashboard.scss | 2 +- 10 files changed, 534 insertions(+), 1 deletion(-) create mode 100644 src/user/proposals/ProposalDiscussion/DiscussionContent/DiscussionComments/DiscussionComments.js create mode 100644 src/user/proposals/ProposalDiscussion/DiscussionContent/DiscussionComments/DiscussionComments.scss create mode 100644 src/user/proposals/ProposalDiscussion/DiscussionContent/DiscussionContent.js create mode 100644 src/user/proposals/ProposalDiscussion/DiscussionContent/DiscussionContent.scss create mode 100644 src/user/proposals/ProposalDiscussion/ProposalDiscussion.js create mode 100644 src/user/proposals/ProposalDiscussion/ProposalDiscussion.scss create mode 100644 src/user/proposals/ProposalEditor/ProposalEditor.js create mode 100644 src/user/proposals/ProposalEditor/ProposalEditor.scss diff --git a/src/router.js b/src/router.js index c9a08dcd..c1d858bf 100644 --- a/src/router.js +++ b/src/router.js @@ -14,6 +14,7 @@ import Maintenance from "./maintenance/maintenance"; import Events from "./user/events/events"; import UserProposalDashboard from "./user/proposals/UserProposalDashboard/UserProposalDashboard"; import AdminProposalDashboard from "./user/proposals/AdminProposalDashboard/AdminProposalDashboard"; +import ProposalDiscussion from "./user/proposals/ProposalDiscussion/ProposalDiscussion"; const Router = () => ( @@ -35,6 +36,16 @@ const Router = () => ( path="/adminproposal" component={AdminProposalDashboard} /> + + diff --git a/src/user/proposals/ProposalDiscussion/DiscussionContent/DiscussionComments/DiscussionComments.js b/src/user/proposals/ProposalDiscussion/DiscussionContent/DiscussionComments/DiscussionComments.js new file mode 100644 index 00000000..6c97f107 --- /dev/null +++ b/src/user/proposals/ProposalDiscussion/DiscussionContent/DiscussionComments/DiscussionComments.js @@ -0,0 +1,175 @@ +import React, { Component } from "react"; +import userIcon2 from "../../../../../images/userIcon2.jpg"; +import { Button, Form, Col, Image, ListGroup } from "react-bootstrap"; +import "./DiscussionComments.scss"; + +class DiscussionComments extends Component { + constructor(props) { + super(props); + this.state = {}; + } + render() { + return ( +
+
+
Comments
+
+ + +
+
+ icon +
+
+
Devesh
+
+ "Lorem ipsum dolor sit amet" +
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation +
+
+
+
+ +
+
+ icon +
+
+
Devesh
+
+ "Lorem ipsum dolor sit amet" +
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation +
+
+
+
+ +
+
+ icon +
+
+
Devesh
+
+ "Lorem ipsum dolor sit amet" +
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation +
+
+
+
+ +
+
+ icon +
+
+
Devesh
+
+ "Lorem ipsum dolor sit amet" +
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation +
+
+
+
+ +
+
+ icon +
+
+
Devesh
+
+ "Lorem ipsum dolor sit amet" +
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation +
+
+
+
+ +
+
+ icon +
+
+
Devesh
+
+ "Lorem ipsum dolor sit amet" +
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation +
+
+
+
+
+
+
+
+
+ + +
+
+
+
+ ); + } +} + +export default DiscussionComments; diff --git a/src/user/proposals/ProposalDiscussion/DiscussionContent/DiscussionComments/DiscussionComments.scss b/src/user/proposals/ProposalDiscussion/DiscussionContent/DiscussionComments/DiscussionComments.scss new file mode 100644 index 00000000..881d97d1 --- /dev/null +++ b/src/user/proposals/ProposalDiscussion/DiscussionContent/DiscussionComments/DiscussionComments.scss @@ -0,0 +1,84 @@ +.commentbox { + .comments { + .comment-title { + margin-top: 10px; + font-family: Inter; + font-style: normal; + font-weight: 600; + font-size: 22px; + line-height: 27px; + + color: #000000; + } + .comments-containers { + border: solid 1px #dfe9f1; + overflow: auto; + border-radius: 5px; + margin: 5px 5px -1px 5px; + max-height: 73vh; + + .comment-item { + display: flex; + padding: none; + .image-container { + flex: 1; + .user-image { + width: 30px; + height: 30px; + } + } + .comment-container { + flex: 6; + border: solid 1px #dfe9f1; + + border-radius: 5px; + padding: 3px; + .commenting-user { + font-family: Inter; + font-style: normal; + font-weight: 600; + font-size: 14px; + line-height: 150%; + /* or 21px */ + + color: #000000; + } + .commented-section { + margin-top: 2px; + font-family: Inter; + font-style: normal; + font-weight: normal; + font-size: 14px; + line-height: 150%; + /* or 21px */ + + color: rgba(29, 33, 41, 0.5); + } + .comment-text { + margin-top: 2px; + font-family: Inter; + font-style: normal; + font-weight: normal; + font-size: 14px; + + /* or 21px */ + + color: rgba(21, 21, 21, 0.91); + } + } + } + } + .chat-container { + border: solid 1px #dfe9f1; + margin-bottom: 20px; + + margin-left: 5px; + margin-right: 5px; + padding: 10px; + + .textinput { + border-radius: 25px; + } + } + } +} diff --git a/src/user/proposals/ProposalDiscussion/DiscussionContent/DiscussionContent.js b/src/user/proposals/ProposalDiscussion/DiscussionContent/DiscussionContent.js new file mode 100644 index 00000000..de0380e3 --- /dev/null +++ b/src/user/proposals/ProposalDiscussion/DiscussionContent/DiscussionContent.js @@ -0,0 +1,115 @@ +import React, { Component } from "react"; +import "./DiscussionContent.scss"; +import { Button, Container, Row, Col, Image } from "react-bootstrap"; +import DiscussionComments from "./DiscussionComments/DiscussionComments"; +import eventImg from "../../../../svgs/event-img-1.svg"; + +class DiscussionContent extends Component { + constructor(props) { + super(props); + this.state = {}; + } + render() { + return ( +
+
+
+ Proposal Title Here +
+
+
+ +
+
+
+
+
+

+ Fugiat esse aliquip sint culpa. Nulla amet ipsum non commodo + veniam velit officia dolor laborum et aliquip ad velit veniam. + Consequat mollit consequat adipisicing duis consectetur duis non + fugiat et in elit consectetur sint. Mollit id aliqua commodo + duis sint non. Officia sunt consectetur et officia officia ad + officia aliquip qui enim aliquip officia minim. Minim consequat + duis deserunt aliqua qui consectetur tempor ex aliquip occaecat + ad veniam consectetur. Dolor et laboris sit esse laborum ex + deserunt nisi magna eiusmod. Mollit non ipsum laboris nulla + commodo enim elit magna amet. Quis officia incididunt aute elit + veniam ullamco ea elit reprehenderit. Pariatur exercitation ut + quis occaecat esse consectetur eu eiusmod ut et exercitation. + Nisi pariatur eu deserunt aliqua cillum dolore. Dolore duis + laboris occaecat incididunt minim aliqua. +

+

+ Heading Irure mollit mollit proident amet sunt ea deserunt do + anim proident mollit. Aliquip fugiat quis ipsum est nisi ut + magna excepteur aliquip reprehenderit occaecat. Ea enim officia + labore consectetur et ad. Mollit ut duis nulla amet dolor minim + laborum amet cillum velit. Incididunt elit quis ipsum velit esse + eu adipisicing sint voluptate ea ipsum. Ullamco pariatur + incididunt tempor qui voluptate id deserunt tempor. Consectetur + mollit aute consequat ut non amet fugiat eiusmod. Cupidatat + velit ea eu veniam proident irure ullamco dolor aliquip nisi + minim. Nisi consequat sit ea anim duis in id mollit ipsum aute + mollit commodo excepteur occaecat. Aliqua magna sunt in et duis + veniam. Cillum in sunt sint officia. Dolor aliqua irure dolor + adipisicing et culpa. Heading Cupidatat pariatur exercitation + enim adipisicing qui labore officia cupidatat. Proident amet + minim cupidatat proident velit in ea sint velit. Duis + adipisicing excepteur cupidatat consequat ex non cupidatat ea + non. Commodo ad anim. Cupidatat pariatur exercitation enim + adipisicing qui labore officia cupidatat. Proident amet minim + cupidatat proident velit in ea sint velit. Duis adipisicing + excepteur cupidatat consequat ex non cupidatat ea non. Commodo + ad anim.Cupidatat pariatur exercitation enim adipisicing qui + labore officia cupidatat. Proident amet minim cupidatat proident + velit in ea sint velit. Duis adipisicing excepteur cupidatat + consequat ex non cupidatat ea non. Commodo ad anim. +

+

+ Heading Irure mollit mollit proident amet sunt ea deserunt do + anim proident mollit. Aliquip fugiat quis ipsum est nisi ut + magna excepteur aliquip reprehenderit occaecat. Ea enim officia + labore consectetur et ad. Mollit ut duis nulla amet dolor minim + laborum amet cillum velit. Incididunt elit quis ipsum velit esse + eu adipisicing sint voluptate ea ipsum. Ullamco pariatur + incididunt tempor qui voluptate id deserunt tempor. Consectetur + mollit aute consequat ut non amet fugiat eiusmod. Cupidatat + velit ea eu veniam proident irure ullamco dolor aliquip nisi + minim. Nisi consequat sit ea anim duis in id mollit ipsum aute + mollit commodo excepteur occaecat. Aliqua magna sunt in et duis + veniam. Cillum in sunt sint officia. Dolor aliqua irure dolor + adipisicing et culpa. Heading Cupidatat pariatur exercitation + enim adipisicing qui labore officia cupidatat. Proident amet + minim cupidatat proident velit in ea sint velit. Duis + adipisicing excepteur cupidatat consequat ex non cupidatat ea + non. Commodo ad anim. Cupidatat pariatur exercitation enim + adipisicing qui labore officia cupidatat. Proident amet minim + cupidatat proident velit in ea sint velit. Duis adipisicing + excepteur cupidatat consequat ex non cupidatat ea non. Commodo + ad anim.Cupidatat pariatur exercitation enim adipisicing qui + labore officia cupidatat. Proident amet minim cupidatat proident + velit in ea sint velit. Duis adipisicing excepteur cupidatat + consequat ex non cupidatat ea non. Commodo ad anim. +

+
+
+
Attached Images
+ + + + +
+
+
+ +
+
+
+ ); + } +} + +export default DiscussionContent; diff --git a/src/user/proposals/ProposalDiscussion/DiscussionContent/DiscussionContent.scss b/src/user/proposals/ProposalDiscussion/DiscussionContent/DiscussionContent.scss new file mode 100644 index 00000000..6ac75b44 --- /dev/null +++ b/src/user/proposals/ProposalDiscussion/DiscussionContent/DiscussionContent.scss @@ -0,0 +1,97 @@ +.discussion-content { + padding: 30px; + display: flex; + height: 100vh; + flex-direction: column; + .discussion-toppanel { + flex-grow: 1; + display: flex; + flex-direction: row; + .discussion-title { + flex-grow: 5; + + .title-text { + font-family: Inter; + font-style: normal; + font-weight: 600; + font-size: 36px; + line-height: 44px; + + color: #1d2129; + } + } + .discussion-buttons { + flex-grow: 1; + text-align: right; + .option-btn { + background-color: white; + color: #007bff; + padding: 4px 40px; + border: solid 1px #1a73e8; + border-radius: 100px; + margin: 0 10px; + height: 30px; + cursor: pointer; + &.active { + background: #007bff; + color: white; + } + .option-text { + font-family: Inter; + font-style: normal; + font-weight: normal; + font-size: 16px; + line-height: 19px; + /* identical to box height */ + } + } + } + } + .discussion-bottompanel { + flex-grow: 4; + display: flex; + + .proposal-preview { + margin-top: 20px; + flex: 2; + display: flex; + flex-direction: column; + max-height: 80vh; + + .proposal-text { + overflow: auto; + flex-grow: 4; + font-family: Inter; + font-style: normal; + font-weight: normal; + font-size: 18px; + line-height: 22px; + + color: #1d2129; + } + .attached-images { + padding: 10px 10px 0px 0px; + flex-grow: 1; + .images-title { + margin-top: 10px; + font-family: Inter; + font-style: normal; + font-weight: 600; + font-size: 22px; + line-height: 27px; + + color: #000000; + } + .image-item { + max-height: 10em; + margin-right: 10px; + margin-left: 10px; + } + } + } + .comments { + flex: 1; + padding-left: 10px; + } + } +} diff --git a/src/user/proposals/ProposalDiscussion/ProposalDiscussion.js b/src/user/proposals/ProposalDiscussion/ProposalDiscussion.js new file mode 100644 index 00000000..2adb0adf --- /dev/null +++ b/src/user/proposals/ProposalDiscussion/ProposalDiscussion.js @@ -0,0 +1,25 @@ +import React, { Component } from "react"; +import "./ProposalDiscussion.scss"; +import Navigation from "../../dashboard/navigation/navigation"; +import DiscussionContent from "./DiscussionContent/DiscussionContent"; + +class ProposalDiscussion extends Component { + constructor(props) { + super(props); + this.state = {}; + } + render() { + return ( +
+
+ +
+
+ +
+
+ ); + } +} + +export default ProposalDiscussion; diff --git a/src/user/proposals/ProposalDiscussion/ProposalDiscussion.scss b/src/user/proposals/ProposalDiscussion/ProposalDiscussion.scss new file mode 100644 index 00000000..462ca8f7 --- /dev/null +++ b/src/user/proposals/ProposalDiscussion/ProposalDiscussion.scss @@ -0,0 +1,13 @@ +.discussion { + display: flex; + min-height: 100vh; + height: auto; + font-family: Muli, sans-serif; + .discussion__navigation { + flex: 1; + border-right: solid 1px #dfe9f1; + } + .discussion__content { + flex: 5.5; + } +} diff --git a/src/user/proposals/ProposalEditor/ProposalEditor.js b/src/user/proposals/ProposalEditor/ProposalEditor.js new file mode 100644 index 00000000..612b1c0a --- /dev/null +++ b/src/user/proposals/ProposalEditor/ProposalEditor.js @@ -0,0 +1,13 @@ +import React, { Component } from "react"; + +class ProposalEditor extends Component { + constructor(props) { + super(props); + this.state = {}; + } + render() { + return
; + } +} + +export default ProposalEditor; diff --git a/src/user/proposals/ProposalEditor/ProposalEditor.scss b/src/user/proposals/ProposalEditor/ProposalEditor.scss new file mode 100644 index 00000000..e69de29b diff --git a/src/user/proposals/UserProposalDashboard/UserProposalDashboard.scss b/src/user/proposals/UserProposalDashboard/UserProposalDashboard.scss index 86e9c195..7cd07c4b 100644 --- a/src/user/proposals/UserProposalDashboard/UserProposalDashboard.scss +++ b/src/user/proposals/UserProposalDashboard/UserProposalDashboard.scss @@ -11,6 +11,6 @@ flex: 4; } .dashboard__rightpanel { - flex: 1.5; + flex: 2; } } From 5f3691f9fc3bb0fc4bb994f8c14fbd85f139374e Mon Sep 17 00:00:00 2001 From: Asel Date: Sun, 31 May 2020 17:08:19 +0530 Subject: [PATCH 6/6] Added Text selection functionality in proposal discussion page --- src/css/components/_modals.scss | 5 + src/router.js | 2 + .../DiscussionComments/DiscussionComments.js | 145 +----------------- .../DiscussionContent/DiscussionContent.js | 102 +++++++++++- .../DiscussionPopups/RequestChanges.js | 80 ++++++++++ .../EditorContent/EditorContent.js | 12 ++ .../EditorContent/EditorContent.scss | 0 .../ProposalEditor/ProposalEditor.js | 13 +- .../ProposalEditor/ProposalEditor.scss | 13 ++ 9 files changed, 226 insertions(+), 146 deletions(-) create mode 100644 src/user/proposals/ProposalDiscussion/DiscussionPopups/RequestChanges.js create mode 100644 src/user/proposals/ProposalEditor/EditorContent/EditorContent.js create mode 100644 src/user/proposals/ProposalEditor/EditorContent/EditorContent.scss diff --git a/src/css/components/_modals.scss b/src/css/components/_modals.scss index 5b7b59da..ea87aa0e 100644 --- a/src/css/components/_modals.scss +++ b/src/css/components/_modals.scss @@ -49,6 +49,11 @@ color: $color-modal-message; } + .modal__textSelection { + font-style: italic; + display: block; + color: #6c757d; + } } } .modal__secondary-title { diff --git a/src/router.js b/src/router.js index c1d858bf..67f40712 100644 --- a/src/router.js +++ b/src/router.js @@ -15,6 +15,7 @@ import Events from "./user/events/events"; import UserProposalDashboard from "./user/proposals/UserProposalDashboard/UserProposalDashboard"; import AdminProposalDashboard from "./user/proposals/AdminProposalDashboard/AdminProposalDashboard"; import ProposalDiscussion from "./user/proposals/ProposalDiscussion/ProposalDiscussion"; +import ProposalEditor from "./user/proposals/ProposalEditor/ProposalEditor"; const Router = () => ( @@ -46,6 +47,7 @@ const Router = () => ( path="/adminproposal" component={AdminProposalDashboard} /> + diff --git a/src/user/proposals/ProposalDiscussion/DiscussionContent/DiscussionComments/DiscussionComments.js b/src/user/proposals/ProposalDiscussion/DiscussionContent/DiscussionComments/DiscussionComments.js index 6c97f107..cfa35155 100644 --- a/src/user/proposals/ProposalDiscussion/DiscussionContent/DiscussionComments/DiscussionComments.js +++ b/src/user/proposals/ProposalDiscussion/DiscussionContent/DiscussionComments/DiscussionComments.js @@ -1,6 +1,6 @@ import React, { Component } from "react"; import userIcon2 from "../../../../../images/userIcon2.jpg"; -import { Button, Form, Col, Image, ListGroup } from "react-bootstrap"; +import { Form, ListGroup } from "react-bootstrap"; import "./DiscussionComments.scss"; class DiscussionComments extends Component { @@ -8,152 +8,15 @@ class DiscussionComments extends Component { super(props); this.state = {}; } + render() { + const comments = this.props.commentItems; return (
Comments
- - -
-
- icon -
-
-
Devesh
-
- "Lorem ipsum dolor sit amet" -
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, - sed do eiusmod tempor incididunt ut labore et dolore magna - aliqua. Ut enim ad minim veniam, quis nostrud exercitation -
-
-
-
- -
-
- icon -
-
-
Devesh
-
- "Lorem ipsum dolor sit amet" -
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, - sed do eiusmod tempor incididunt ut labore et dolore magna - aliqua. Ut enim ad minim veniam, quis nostrud exercitation -
-
-
-
- -
-
- icon -
-
-
Devesh
-
- "Lorem ipsum dolor sit amet" -
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, - sed do eiusmod tempor incididunt ut labore et dolore magna - aliqua. Ut enim ad minim veniam, quis nostrud exercitation -
-
-
-
- -
-
- icon -
-
-
Devesh
-
- "Lorem ipsum dolor sit amet" -
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, - sed do eiusmod tempor incididunt ut labore et dolore magna - aliqua. Ut enim ad minim veniam, quis nostrud exercitation -
-
-
-
- -
-
- icon -
-
-
Devesh
-
- "Lorem ipsum dolor sit amet" -
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, - sed do eiusmod tempor incididunt ut labore et dolore magna - aliqua. Ut enim ad minim veniam, quis nostrud exercitation -
-
-
-
- -
-
- icon -
-
-
Devesh
-
- "Lorem ipsum dolor sit amet" -
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, - sed do eiusmod tempor incididunt ut labore et dolore magna - aliqua. Ut enim ad minim veniam, quis nostrud exercitation -
-
-
-
-
+ {comments}
diff --git a/src/user/proposals/ProposalDiscussion/DiscussionContent/DiscussionContent.js b/src/user/proposals/ProposalDiscussion/DiscussionContent/DiscussionContent.js index de0380e3..66248bb0 100644 --- a/src/user/proposals/ProposalDiscussion/DiscussionContent/DiscussionContent.js +++ b/src/user/proposals/ProposalDiscussion/DiscussionContent/DiscussionContent.js @@ -1,14 +1,100 @@ import React, { Component } from "react"; import "./DiscussionContent.scss"; -import { Button, Container, Row, Col, Image } from "react-bootstrap"; +import { Button, Container, Row, Col, Image, ListGroup } from "react-bootstrap"; import DiscussionComments from "./DiscussionComments/DiscussionComments"; import eventImg from "../../../../svgs/event-img-1.svg"; +import userIcon2 from "../../../../images/userIcon2.jpg"; +import RequestChanges from "../DiscussionPopups/RequestChanges"; class DiscussionContent extends Component { constructor(props) { super(props); - this.state = {}; + this.state = { comments: [], showModal: false, selectedText: "" }; } + + componentDidMount() { + this.processComments(); + } + processComments = () => { + let comments = []; + + for (let i = 0; i < 6; i++) { + comments.push( + +
+
+ icon +
+
+
Devesh
+
+ "Lorem ipsum dolor sit amet" +
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut + enim ad minim veniam, quis nostrud exercitation +
+
+
+
+ ); + } + this.setState({ + comments: comments, + }); + }; + + handleTextSelction = () => { + if (window.getSelection().toString().length > 0) { + this.setState( + { + selectedText: window.getSelection().toString(), + }, + () => { + this.setState({ + showModal: true, + }); + } + ); + } + }; + + handleComment = (text) => { + let comments = this.state.comments; + + comments.push( + +
+
+ icon +
+
+
Devesh
+
{this.state.selectedText}
+
{text}
+
+
+
+ ); + + this.setState({ + comments: comments, + selectedText: "", + }); + }; + + handleClose = () => { + this.setState({ + showModal: false, + }); + }; + render() { return (
@@ -25,7 +111,7 @@ class DiscussionContent extends Component {
-
+

Fugiat esse aliquip sint culpa. Nulla amet ipsum non commodo veniam velit officia dolor laborum et aliquip ad velit veniam. @@ -104,8 +190,16 @@ class DiscussionContent extends Component {

- +
+ { + this.handleClose(); + }} + handleComment={this.handleComment} + selectedText={this.state.selectedText} + />
); diff --git a/src/user/proposals/ProposalDiscussion/DiscussionPopups/RequestChanges.js b/src/user/proposals/ProposalDiscussion/DiscussionPopups/RequestChanges.js new file mode 100644 index 00000000..861deff8 --- /dev/null +++ b/src/user/proposals/ProposalDiscussion/DiscussionPopups/RequestChanges.js @@ -0,0 +1,80 @@ +import React from "react"; +import { Button, Modal, Form, Col } from "react-bootstrap"; +import PropTypes from "prop-types"; + +class RequestChanges extends React.Component { + constructor(props) { + super(props); + this.textInput = React.createRef(); + } + handleChange = () => { + const value = this.textInput.current.value; + console.log(value); + }; + + render() { + return ( + + + +
Request Changes
+
+
+ +
+ + + {`"${this.props.selectedText}"`} + { + this.handleChange(); + }} + /> + + +
+
+
+ + +
+
+ ); + } +} +RequestChanges.propTypes = { + onClick: PropTypes.func, + handleComment: PropTypes.func, + show: PropTypes.bool, + style: PropTypes.object, + selectedText: PropTypes.string, +}; + +export default RequestChanges; diff --git a/src/user/proposals/ProposalEditor/EditorContent/EditorContent.js b/src/user/proposals/ProposalEditor/EditorContent/EditorContent.js new file mode 100644 index 00000000..4c04a860 --- /dev/null +++ b/src/user/proposals/ProposalEditor/EditorContent/EditorContent.js @@ -0,0 +1,12 @@ +import React, { Component } from "react"; +class EditorContent extends Component { + constructor(props) { + super(props); + this.state = {}; + } + render() { + return
; + } +} + +export default EditorContent; diff --git a/src/user/proposals/ProposalEditor/EditorContent/EditorContent.scss b/src/user/proposals/ProposalEditor/EditorContent/EditorContent.scss new file mode 100644 index 00000000..e69de29b diff --git a/src/user/proposals/ProposalEditor/ProposalEditor.js b/src/user/proposals/ProposalEditor/ProposalEditor.js index 612b1c0a..04378eaf 100644 --- a/src/user/proposals/ProposalEditor/ProposalEditor.js +++ b/src/user/proposals/ProposalEditor/ProposalEditor.js @@ -1,4 +1,6 @@ import React, { Component } from "react"; +import Navigation from "../../dashboard/navigation/navigation"; +import EditorContent from "./EditorContent/EditorContent"; class ProposalEditor extends Component { constructor(props) { @@ -6,7 +8,16 @@ class ProposalEditor extends Component { this.state = {}; } render() { - return
; + return ( +
+
+ +
+
+ +
+
+ ); } } diff --git a/src/user/proposals/ProposalEditor/ProposalEditor.scss b/src/user/proposals/ProposalEditor/ProposalEditor.scss index e69de29b..b5f48ddf 100644 --- a/src/user/proposals/ProposalEditor/ProposalEditor.scss +++ b/src/user/proposals/ProposalEditor/ProposalEditor.scss @@ -0,0 +1,13 @@ +.editor { + display: flex; + min-height: 100vh; + height: auto; + font-family: Muli, sans-serif; + .editor__navigation { + flex: 1; + border-right: solid 1px #dfe9f1; + } + .editor__content { + flex: 5.5; + } +}