Skip to content

Commit 2c07b74

Browse files
authored
Merge branch 'tanmay' into shikhar
2 parents 84dcc67 + b52c76d commit 2c07b74

File tree

12 files changed

+317
-68
lines changed

12 files changed

+317
-68
lines changed

package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"name": "placement_socket",
33
"version": "0.1.0",
44
"private": true,
5+
"proxy": "http://localhost:8000",
56
"dependencies": {
67
"@material-ui/core": "^4.6.1",
78
"axios": "^0.19.0",
@@ -14,6 +15,9 @@
1415
"react-moment": "^0.9.7",
1516
"react-router-dom": "^5.1.2",
1617
"react-scripts": "^3.4.0",
18+
"simple-peer": "^9.6.2",
19+
"socket.io-client": "^2.3.0",
20+
"styled-components": "^5.1.0",
1721
"underscore": "^1.9.1"
1822
},
1923
"scripts": {

public/index.html

Lines changed: 48 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<head>
44
<style>
55
/* body {
6+
67
background-image: url("./assets/back.jpg");
78
opacity: 100%;
89
background-repeat: no-repeat;
@@ -153,8 +154,8 @@
153154
manifest.json provides metadata used when your web app is installed on a
154155
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
155156
-->
156-
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
157-
<!--
157+
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
158+
<!--
158159
Notice the use of %PUBLIC_URL% in the tags above.
159160
It will be replaced with the URL of the `public` folder during the build.
160161
Only files inside the `public` folder can be referenced from the HTML.
@@ -163,9 +164,10 @@
163164
work correctly both with client-side routing and a non-root public URL.
164165
Learn how to configure a non-root public URL by running `npm run build`.
165166
-->
166-
<link href="https://fonts.googleapis.com/css?family=Crimson+Text:400,400i,600|Montserrat:200,300,400" rel="stylesheet">
167-
168-
<!-- <link rel="stylesheet" href="assets/css/bootstrap/bootstrap.css">
167+
<link href="https://fonts.googleapis.com/css?family=Crimson+Text:400,400i,600|Montserrat:200,300,400"
168+
rel="stylesheet">
169+
170+
<!-- <link rel="stylesheet" href="assets/css/bootstrap/bootstrap.css">
169171
<link rel="stylesheet" href="assets/fonts/ionicons/css/ionicons.min.css">
170172
<link rel="stylesheet" href="assets/fonts/law-icons/font/flaticon.css">
171173
@@ -181,23 +183,29 @@
181183
<link rel="stylesheet" href="assets/css/landing-2.css">
182184
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"> -->
183185

184-
<!-- CSS Files -->
185-
<link href="../assets/css/bootstrap.min.css" rel="stylesheet" />
186-
<link href="../assets/css/now-ui-dashboard.css?v=1.5.0" rel="stylesheet" />
187-
<!-- CSS Just for demo purpose, don't include it in your project -->
188-
<link href="../assets/demo/demo.css" rel="stylesheet" />
186+
<!-- CSS Files -->
187+
<link href="../assets/css/bootstrap.min.css" rel="stylesheet" />
188+
<link href="../assets/css/now-ui-dashboard.css?v=1.5.0" rel="stylesheet" />
189+
<!-- CSS Just for demo purpose, don't include it in your project -->
190+
<link href="../assets/demo/demo.css" rel="stylesheet" />
189191

192+
<script src="https://kit.fontawesome.com/0ae5f000d2.js" crossorigin="anonymous"></script>
193+
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
194+
integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
195+
crossorigin="anonymous"></script>
196+
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"
197+
integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1"
198+
crossorigin="anonymous"></script>
199+
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"
200+
integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM"
201+
crossorigin="anonymous"></script>
202+
<title>Placement Socket</title>
203+
</head>
190204

191-
<script src="https://kit.fontawesome.com/0ae5f000d2.js" crossorigin="anonymous"></script>
192-
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
193-
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
194-
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
195-
<title>Placement Socket</title>
196-
</head>
197-
<body data-spy="scroll" data-target="#pb-navbar" data-offset="200">
198-
<noscript>You need to enable JavaScript to run this app.</noscript>
199-
<div id="root"></div>
200-
<!--
205+
<body data-spy="scroll" data-target="#pb-navbar" data-offset="200">
206+
<noscript>You need to enable JavaScript to run this app.</noscript>
207+
<div id="root"></div>
208+
<!--
201209
This HTML file is a template.
202210
If you open it directly in the browser, you will see an empty page.
203211
@@ -207,15 +215,15 @@
207215
To begin the development, run `npm start` or `yarn start`.
208216
To create a production bundle, use `npm run build` or `yarn build`.
209217
-->
210-
211-
<!-- loader -->
212-
<!-- <div id="pb_loader" class="show fullscreen"><svg class="circular" width="48px" height="48px">
218+
219+
<!-- loader -->
220+
<!-- <div id="pb_loader" class="show fullscreen"><svg class="circular" width="48px" height="48px">
213221
<circle class="path-bg" cx="24" cy="24" r="22" fill="none" stroke-width="4" stroke="#eeeeee" />
214222
<circle class="path" cx="24" cy="24" r="22" fill="none" stroke-width="4" stroke-miterlimit="10" stroke="#1d82ff" />
215223
</svg>
216224
</div> -->
217-
218-
<!-- <script src="assets/js/jquery.min.js"></script>
225+
226+
<!-- <script src="assets/js/jquery.min.js"></script>
219227
220228
<script src="assets/js/popper.min.js"></script>
221229
<script src="assets/js/bootstrap.min.js"></script>
@@ -227,17 +235,18 @@
227235
228236
<script src="assets/js/main.js"></script> -->
229237

230-
<script src="../assets/js/core/jquery.min.js"></script>
231-
<script src="../assets/js/core/popper.min.js"></script>
232-
<script src="../assets/js/core/bootstrap.min.js"></script>
233-
<script src="../assets/js/plugins/perfect-scrollbar.jquery.min.js"></script>
234-
<!-- Chart JS -->
235-
<script src="../assets/js/plugins/chartjs.min.js"></script>
236-
<!-- Notifications Plugin -->
237-
<script src="../assets/js/plugins/bootstrap-notify.js"></script>
238-
<!-- Control Center for Now Ui Dashboard: parallax effects, scripts for the example pages etc -->
239-
<script src="../assets/js/now-ui-dashboard.min.js?v=1.5.0" type="text/javascript"></script>
240-
<!-- Now Ui Dashboard DEMO methods, don't include it in your project! -->
241-
<script src="../assets/demo/demo.js"></script>
242-
</body>
243-
</html>
238+
<script src="../assets/js/core/jquery.min.js"></script>
239+
<script src="../assets/js/core/popper.min.js"></script>
240+
<script src="../assets/js/core/bootstrap.min.js"></script>
241+
<script src="../assets/js/plugins/perfect-scrollbar.jquery.min.js"></script>
242+
<!-- Chart JS -->
243+
<script src="../assets/js/plugins/chartjs.min.js"></script>
244+
<!-- Notifications Plugin -->
245+
<script src="../assets/js/plugins/bootstrap-notify.js"></script>
246+
<!-- Control Center for Now Ui Dashboard: parallax effects, scripts for the example pages etc -->
247+
<script src="../assets/js/now-ui-dashboard.min.js?v=1.5.0" type="text/javascript"></script>
248+
<!-- Now Ui Dashboard DEMO methods, don't include it in your project! -->
249+
<script src="../assets/demo/demo.js"></script>
250+
</body>
251+
252+
</html>

server/package.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"name": "group-video-final",
3+
"version": "1.0.0",
4+
"main": "index.js",
5+
"license": "MIT",
6+
"dependencies": {
7+
"dotenv": "^8.2.0",
8+
"express": "^4.17.1",
9+
"socket.io": "^2.3.0"
10+
},
11+
"scripts": {
12+
"start": "node server.js"
13+
}
14+
}

server/server.js

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
require('dotenv').config();
2+
const express = require("express");
3+
const http = require("http");
4+
const app = express();
5+
const server = http.createServer(app);
6+
const socket = require("socket.io");
7+
const io = socket(server);
8+
9+
const users = {};
10+
11+
const socketToRoom = {};
12+
13+
io.on('connection', socket => {
14+
socket.on("join room", roomID => {
15+
if (users[roomID]) {
16+
// const length = users[roomID].length;
17+
// if (length === 4) {
18+
// socket.emit("room full");
19+
// return;
20+
// }
21+
users[roomID].push(socket.id);
22+
} else {
23+
users[roomID] = [socket.id];
24+
}
25+
socketToRoom[socket.id] = roomID;
26+
const usersInThisRoom = users[roomID].filter(id => id !== socket.id);
27+
28+
socket.emit("all users", usersInThisRoom);
29+
});
30+
31+
socket.on("sending signal", payload => {
32+
io.to(payload.userToSignal).emit('user joined', { signal: payload.signal, callerID: payload.callerID });
33+
});
34+
35+
socket.on("returning signal", payload => {
36+
io.to(payload.callerID).emit('receiving returned signal', { signal: payload.signal, id: socket.id });
37+
});
38+
39+
socket.on('disconnect', () => {
40+
const roomID = socketToRoom[socket.id];
41+
let room = users[roomID];
42+
if (room) {
43+
room = room.filter(id => id !== socket.id);
44+
users[roomID] = room;
45+
}
46+
});
47+
48+
});
49+
50+
server.listen(process.env.PORT || 8000, () => console.log('server is running on port 8000'));
51+
52+

src/components/companyDetails.js

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,12 +114,25 @@ export class CompanyDetails extends React.Component {
114114
data: data,
115115
}).then((response) => {
116116
console.log('resonse_data_dynamo :', response.data);
117+
118+
document.getElementById("editCompanyBtn").style.display = "block";
119+
120+
var inputs = document.getElementsByTagName("input");
121+
for (var i = 0; i < inputs.length; i++) {
122+
inputs[i].disabled = true;
123+
}
124+
var description = document.getElementById("description");
125+
description.disabled = true;
126+
117127
// document.getElementById('save').innerHTML = 'Added <span className="fas fa-check-circle"></span>';
118128
// document.getElementById('save').classNameName = 'btn btn-success bottomright';
129+
119130
var updateCompanyInpBtn = document.getElementById('updateCompanyInpBtn');
120131
updateCompanyInpBtn.classList.add("btn-success");
121-
updateCompanyInpBtn.value = "Updated";
122132
updateCompanyInpBtn.disabled = true;
133+
updateCompanyInpBtn.value = "Updated";
134+
var editDetailsButton = document.getElementById("editCompanyInpBtn");
135+
editDetailsButton.disabled = false;
123136
this.props.handleUpdatedCompany(response.data);
124137
// alert("Company updated");
125138
});
@@ -146,6 +159,7 @@ export class CompanyDetails extends React.Component {
146159
registerInpBtn.classList.add("btn-success");
147160
// registerInpBtn.value = "Registered";
148161
registerInpBtn.disabled = true;
162+
this.props.handleRegisteredCompany(response.data);
149163
this.setState(() => {
150164
return {
151165
registerInpBtn: "Registered",
@@ -198,7 +212,7 @@ export class CompanyDetails extends React.Component {
198212
{this.props.loggedUser.role === "company" ?
199213
<div>
200214
<div className="form-group" id="editCompanyBtn">
201-
<input type="button" className="btn btn-primary btn-lg btn-block pb_btn-pill btn-shadow-blue" value="Edit Details" onClick={this.toggleFormElements} />
215+
<input type="button" id="editCompanyInpBtn" className="btn btn-primary btn-lg btn-block pb_btn-pill btn-shadow-blue" value="Edit Details" onClick={this.toggleFormElements} />
202216
</div>
203217
<div className="form-group" style={{ display: "none" }} id="updateCompanyBtn">
204218
<input type="button" id="updateCompanyInpBtn" className="btn btn-primary btn-lg btn-block pb_btn-pill btn-shadow-blue" value="Update" onClick={this.updateCompany} />

src/components/companyList.js

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ export class CompanyList extends React.Component {
2020
this.fetch_all_Companies = this.fetch_all_Companies.bind(this);
2121
this.fetch_from_dynamo_register_logs = this.fetch_from_dynamo_register_logs.bind(this);
2222
this.handleUpdatedCompany = this.handleUpdatedCompany.bind(this);
23-
24-
23+
this.handleRegisteredCompany = this.handleRegisteredCompany.bind(this);
2524
}
2625

2726
componentDidMount() {
@@ -63,7 +62,6 @@ export class CompanyList extends React.Component {
6362
});
6463

6564
console.log("mergedList : ", mergedList);
66-
6765
this.setState({ resdata: mergedList })
6866
})
6967
}
@@ -118,7 +116,7 @@ export class CompanyList extends React.Component {
118116
handleUpdatedCompany(updatedCompany) {
119117
var companies = this.state.resdata;
120118
var company = companies.filter(d => d.id === updatedCompany.id);
121-
var index = companies.indexOf(company);
119+
var index = companies.indexOf(company[0]);
122120

123121
if (index !== -1) {
124122
companies[index] = updatedCompany;
@@ -131,6 +129,17 @@ export class CompanyList extends React.Component {
131129
});
132130
}
133131

132+
handleRegisteredCompany(registeredCompany) {
133+
134+
delete registeredCompany.id;
135+
var log = [registeredCompany];
136+
var companies = this.state.resdata;
137+
var mergedList = _.map(companies, function (item) {
138+
return _.extend(item, _.findWhere(log, { companyId: item.id }));
139+
});
140+
this.setState({ resdata: mergedList })
141+
}
142+
134143
render() {
135144
const company = this.state.company;
136145
const comColumns = [
@@ -157,15 +166,15 @@ export class CompanyList extends React.Component {
157166
<div className='content'>
158167
<div className='row justify-content-center'>
159168
<div className='col-md-11'>
160-
<Table data={this.state.resdata} columns={comColumns} title="Companies" handleClicked={this.handleClicked} />
169+
<Table data={this.state.resdata} columns={comColumns} title="Companies"/>
161170
<div className="modal fade" id="companyModal" role="dialog">
162171
<div className="modal-dialog modal-lg">
163172
<div className="modal-content">
164173
<div className="modal-header">
165174
<button type="button" className="close" data-dismiss="modal">&times;</button>
166175
</div>
167176
<div className="modal-body">
168-
<CompanyDetails key={company.id} company={company} loggedUser={this.props.loggedUser} handleUpdatedCompany={this.handleUpdatedCompany} />
177+
<CompanyDetails key={company.id} company={company} loggedUser={this.props.loggedUser} handleUpdatedCompany={this.handleUpdatedCompany} handleRegisteredCompany={this.handleRegisteredCompany}/>
169178
</div>
170179
<div className="modal-footer">
171180
<button type="button" className="btn btn-default" data-dismiss="modal">Close</button>

src/components/homepage.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { AdminDashboard } from "./adminDashboard";
1010
import { CompanyList } from "./companyList";
1111
import { StudentList } from "./studentList";
1212
import { AddCompany } from "./addCompany";
13+
import Room from "./room";
1314

1415

1516

@@ -89,6 +90,7 @@ export class Homepage extends React.Component {
8990
this.state.loginStatus ? <AddCompany loggedUser={this.state.loggedUser} /> : <Redirect to='/' />
9091
}
9192
</Route>
93+
<Route path="/room/:roomID" render={(props) => <Room {...props} loggedUser={this.state.loggedUser} />} />
9294
</Switch>
9395
{/* </Router> */}
9496
</div>

src/components/navbar.js

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -34,22 +34,26 @@ export class Navbar extends React.Component {
3434
render() {
3535
return (
3636
<div>
37-
<div className="modal fade" id="studentModal" role="dialog">
38-
<div className="modal-dialog">
39-
<div className="modal-content">
40-
<div className="modal-header">
41-
<button type="button" className="close" data-dismiss="modal">&times;</button>
42-
{/* <h4 className="modal-title">Modal Header</h4> */}
43-
</div>
44-
<div className="modal-body">
45-
{this.props.loggedUser && <StudentDetails key={this.props.loggedUser.id} student={this.props.loggedUser} loggedUserRole={this.props.loggedUser.role} handleUpdatedStudent={this.handleUpdatedStudent} />}
46-
</div>
47-
<div className="modal-footer">
48-
<button type="button" className="btn btn-default" data-dismiss="modal" onClick={this.closeStudentDetail}>Close</button>
37+
{this.props.loggedUser &&
38+
(this.props.loggedUser.role === "student" &&
39+
<div className="modal fade" id="navStudentModal" role="dialog">
40+
<div className="modal-dialog">
41+
<div className="modal-content">
42+
<div className="modal-header">
43+
<button type="button" className="close" data-dismiss="modal">&times;</button>
44+
{/* <h4 className="modal-title">Modal Header</h4> */}
45+
</div>
46+
<div className="modal-body">
47+
{this.props.loggedUser && <StudentDetails key={this.state.studentDetails.id} student={this.state.studentDetails} loggedUser={this.state.studentDetails} handleUpdatedStudent={this.handleUpdatedStudent} />}
48+
</div>
49+
<div className="modal-footer">
50+
<button type="button" className="btn btn-default" data-dismiss="modal" onClick={this.closeStudentDetail}>Close</button>
51+
</div>
52+
</div>
4953
</div>
5054
</div>
51-
</div>
52-
</div>
55+
)
56+
}
5357
<nav class="navbar navbar-expand-lg navbar-transparent bg-primary navbar-absolute">
5458
<div class="container-fluid">
5559
<div class="navbar-wrapper">
@@ -62,8 +66,8 @@ export class Navbar extends React.Component {
6266
</div>
6367
{this.props.loggedUser &&
6468
(this.props.loggedUser.role === "student"
65-
? <a href="#" data-toggle="modal" data-target="#studentModal" class="navbar-brand">{this.props.loggedUser.firstname} {this.props.loggedUser.lastname} - CGPA: {this.props.loggedUser.cgpa}</a>
66-
: <a href="#" data-toggle="modal" data-target="#studentModal" class="navbar-brand">Admin Dashboard</a>
69+
? <a href="#" data-toggle="modal" data-target="#navStudentModal" class="navbar-brand">{this.props.loggedUser.firstname} {this.props.loggedUser.lastname} - CGPA: {this.props.loggedUser.cgpa}</a>
70+
: <a class="navbar-brand">Admin Dashboard</a>
6771
)
6872
}
6973
</div>

0 commit comments

Comments
 (0)