Commit 6e5c87ee authored by Hasitha Samarasekara's avatar Hasitha Samarasekara

Home page Filters added ann create class UI change,

Connect flak api
parent 828e015e
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const TutorRatingSchema = new Schema({
tutor_id:{type:mongoose.Schema.Types.ObjectId,ref: 'Post'},
student_id:{type:mongoose.Schema.Types.ObjectId,ref: 'Post'},
rating: {type:String},
review:{type:String},
version:{type:String},
}, {
timestamps:true,
});
const TutorRatings = mongoose.model('TutorRatings',TutorRatingSchema);
module.exports = TutorRatings;
\ No newline at end of file
...@@ -3,9 +3,10 @@ const mongoose = require('mongoose'); ...@@ -3,9 +3,10 @@ const mongoose = require('mongoose');
const Schema = mongoose.Schema; const Schema = mongoose.Schema;
const ALResultsSchema = new Schema({ const ALResultsSchema = new Schema({
student_id:{type:mongoose.Schema.Types.ObjectId,ref: 'Post'}, student_id:{type:mongoose.Schema.Types.ObjectId,ref: 'students'},
year:{type:String,required:false}, year:{type:String,required:false},
stream: {type:String,required:true}, stream: {type:String,required:true},
Subjects : {type:Object},
subject01:{type:String,required:true}, subject01:{type:String,required:true},
subject02:{type:String,required:true}, subject02:{type:String,required:true},
subject03:{type:String,required:true}, subject03:{type:String,required:true},
......
...@@ -19,11 +19,11 @@ const userSchema = new Schema({ ...@@ -19,11 +19,11 @@ const userSchema = new Schema({
tutor_main_city:[{type:String}], tutor_main_city:[{type:String}],
tutor_medium:{type:String}, tutor_medium:{type:String},
tutor_qualification:{type:String}, tutor_qualification:{type:String},
tutor_instituteIDList:[{type:mongoose.Schema.Types.ObjectId,ref: 'Post'}], tutor_instituteIDList:[{type:mongoose.Schema.Types.ObjectId,ref: 'institute'}],
}, { }, {
timestamps:true, timestamps:true,
}); });
//const institute = mongoose.model('institute',userSchema);
const User = mongoose.model('tutor',userSchema); const User = mongoose.model('tutor',userSchema);
module.exports = User; module.exports = User;
\ No newline at end of file
...@@ -35,11 +35,65 @@ ...@@ -35,11 +35,65 @@
"negotiator": "0.6.2" "negotiator": "0.6.2"
} }
}, },
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
"requires": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
}
},
"array-flatten": { "array-flatten": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
}, },
"asn1": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
"integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
"dev": true,
"requires": {
"safer-buffer": "~2.1.0"
}
},
"assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
"dev": true
},
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
"dev": true
},
"aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
"dev": true
},
"aws4": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
"integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==",
"dev": true
},
"bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
"dev": true,
"requires": {
"tweetnacl": "^0.14.3"
}
},
"bl": { "bl": {
"version": "2.2.1", "version": "2.2.1",
"resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz",
...@@ -81,6 +135,21 @@ ...@@ -81,6 +135,21 @@
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
"integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
}, },
"caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
"dev": true
},
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"dev": true,
"requires": {
"delayed-stream": "~1.0.0"
}
},
"content-disposition": { "content-disposition": {
"version": "0.5.3", "version": "0.5.3",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
...@@ -118,6 +187,15 @@ ...@@ -118,6 +187,15 @@
"vary": "^1" "vary": "^1"
} }
}, },
"dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
"dev": true,
"requires": {
"assert-plus": "^1.0.0"
}
},
"debug": { "debug": {
"version": "2.6.9", "version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
...@@ -126,6 +204,12 @@ ...@@ -126,6 +204,12 @@
"ms": "2.0.0" "ms": "2.0.0"
} }
}, },
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
"dev": true
},
"denque": { "denque": {
"version": "1.5.0", "version": "1.5.0",
"resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz", "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz",
...@@ -146,6 +230,16 @@ ...@@ -146,6 +230,16 @@
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz",
"integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q=="
}, },
"ecc-jsbn": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
"integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
"dev": true,
"requires": {
"jsbn": "~0.1.0",
"safer-buffer": "^2.1.0"
}
},
"ee-first": { "ee-first": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
...@@ -203,6 +297,30 @@ ...@@ -203,6 +297,30 @@
"vary": "~1.1.2" "vary": "~1.1.2"
} }
}, },
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
"dev": true
},
"extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
"dev": true
},
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"dev": true
},
"fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
"dev": true
},
"finalhandler": { "finalhandler": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
...@@ -217,6 +335,23 @@ ...@@ -217,6 +335,23 @@
"unpipe": "~1.0.0" "unpipe": "~1.0.0"
} }
}, },
"forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
"dev": true
},
"form-data": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"dev": true,
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
}
},
"forwarded": { "forwarded": {
"version": "0.2.0", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
...@@ -227,6 +362,31 @@ ...@@ -227,6 +362,31 @@
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
}, },
"getpass": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"dev": true,
"requires": {
"assert-plus": "^1.0.0"
}
},
"har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
"dev": true
},
"har-validator": {
"version": "5.1.5",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
"integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
"dev": true,
"requires": {
"ajv": "^6.12.3",
"har-schema": "^2.0.0"
}
},
"http-errors": { "http-errors": {
"version": "1.7.2", "version": "1.7.2",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
...@@ -239,6 +399,17 @@ ...@@ -239,6 +399,17 @@
"toidentifier": "1.0.0" "toidentifier": "1.0.0"
} }
}, },
"http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"dev": true,
"requires": {
"assert-plus": "^1.0.0",
"jsprim": "^1.2.2",
"sshpk": "^1.7.0"
}
},
"iconv-lite": { "iconv-lite": {
"version": "0.4.24", "version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
...@@ -257,11 +428,59 @@ ...@@ -257,11 +428,59 @@
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
}, },
"is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
"dev": true
},
"isarray": { "isarray": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
}, },
"isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
"dev": true
},
"jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
"dev": true
},
"json-schema": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
"integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
"dev": true
},
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
},
"json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
"dev": true
},
"jsprim": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
"integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
"dev": true,
"requires": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
"json-schema": "0.2.3",
"verror": "1.10.0"
}
},
"kareem": { "kareem": {
"version": "2.3.2", "version": "2.3.2",
"resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz",
...@@ -398,6 +617,12 @@ ...@@ -398,6 +617,12 @@
"integrity": "sha512-YSzu7TLbI+bsjCis/TZlAXBoM4y93HhlIgo0P5oiA2ua9Z4k+E2Fod//ybIzdJxOlXGRcHIh/WaeCBehvxZb/Q==", "integrity": "sha512-YSzu7TLbI+bsjCis/TZlAXBoM4y93HhlIgo0P5oiA2ua9Z4k+E2Fod//ybIzdJxOlXGRcHIh/WaeCBehvxZb/Q==",
"dev": true "dev": true
}, },
"oauth-sign": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
"dev": true
},
"object-assign": { "object-assign": {
"version": "4.1.1", "version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
...@@ -426,6 +651,12 @@ ...@@ -426,6 +651,12 @@
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
}, },
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
"dev": true
},
"process-nextick-args": { "process-nextick-args": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
...@@ -440,6 +671,18 @@ ...@@ -440,6 +671,18 @@
"ipaddr.js": "1.9.1" "ipaddr.js": "1.9.1"
} }
}, },
"psl": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
"integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
"dev": true
},
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"dev": true
},
"qs": { "qs": {
"version": "6.7.0", "version": "6.7.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
...@@ -480,6 +723,42 @@ ...@@ -480,6 +723,42 @@
"resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz",
"integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw=="
}, },
"request": {
"version": "2.88.2",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
"integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
"dev": true,
"requires": {
"aws-sign2": "~0.7.0",
"aws4": "^1.8.0",
"caseless": "~0.12.0",
"combined-stream": "~1.0.6",
"extend": "~3.0.2",
"forever-agent": "~0.6.1",
"form-data": "~2.3.2",
"har-validator": "~5.1.3",
"http-signature": "~1.2.0",
"is-typedarray": "~1.0.0",
"isstream": "~0.1.2",
"json-stringify-safe": "~5.0.1",
"mime-types": "~2.1.19",
"oauth-sign": "~0.9.0",
"performance-now": "^2.1.0",
"qs": "~6.5.2",
"safe-buffer": "^5.1.2",
"tough-cookie": "~2.5.0",
"tunnel-agent": "^0.6.0",
"uuid": "^3.3.2"
},
"dependencies": {
"qs": {
"version": "6.5.2",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
"dev": true
}
}
},
"safe-buffer": { "safe-buffer": {
"version": "5.1.2", "version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
...@@ -561,6 +840,23 @@ ...@@ -561,6 +840,23 @@
"memory-pager": "^1.0.2" "memory-pager": "^1.0.2"
} }
}, },
"sshpk": {
"version": "1.16.1",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
"integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
"dev": true,
"requires": {
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
"bcrypt-pbkdf": "^1.0.0",
"dashdash": "^1.12.0",
"ecc-jsbn": "~0.1.1",
"getpass": "^0.1.1",
"jsbn": "~0.1.0",
"safer-buffer": "^2.0.2",
"tweetnacl": "~0.14.0"
}
},
"statuses": { "statuses": {
"version": "1.5.0", "version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
...@@ -579,6 +875,31 @@ ...@@ -579,6 +875,31 @@
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
}, },
"tough-cookie": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
"integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
"dev": true,
"requires": {
"psl": "^1.1.28",
"punycode": "^2.1.1"
}
},
"tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
"dev": true,
"requires": {
"safe-buffer": "^5.0.1"
}
},
"tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
"dev": true
},
"type-is": { "type-is": {
"version": "1.6.18", "version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
...@@ -593,6 +914,15 @@ ...@@ -593,6 +914,15 @@
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
}, },
"uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"dev": true,
"requires": {
"punycode": "^2.1.0"
}
},
"util-deprecate": { "util-deprecate": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
...@@ -603,10 +933,27 @@ ...@@ -603,10 +933,27 @@
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
}, },
"uuid": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
"dev": true
},
"vary": { "vary": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
},
"verror": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
"dev": true,
"requires": {
"assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
"extsprintf": "^1.2.0"
}
} }
} }
} }
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
"mongoose": "^5.12.15" "mongoose": "^5.12.15"
}, },
"devDependencies": { "devDependencies": {
"nodemailer": "^6.6.2" "nodemailer": "^6.6.2",
"request": "^2.88.2"
} }
} }
const router = require('express').Router();
let tutor = require('../models/tutor.user.model');
let tutorRating = require('../models/TutorRatingAndReviews.model');
const mongoose = require("mongoose");
const express = require('express')
const request = require('request');
router.route('/getFilteredList').post((req,res) =>{
let tutorReviewResults = [];
tutor.find({
"tutor_Stream" : {'$regex': req.body.selectedStream, '$options': 'i'},
"tutor_subjects" : {'$regex': req.body.selectedSubject, '$options': 'i'},
"tutor_main_district" : {'$regex': req.body.selectedDistrict, '$options': 'i'},
"tutor_main_city" : {'$regex': req.body.selectedCity, '$options': 'i'},
"tutor_medium" : {'$regex': req.body.selectedLanguage, '$options': 'i'},
"tutor_class_type" : {'$regex': req.body.selectedClassType, '$options': 'i'},
})
.then(async tutors => {
// async function getTutorData(tutor) {
// for (let i = 0; i < tutor.length; i++) {
// // var docregistrationnumber = arr[i].docregistrationnumber
// // var registrationAuthority = arr[i].docregistrationauthority
// // var data = await doctorData.getDoctorByRegNumber(docregistrationnumber, registrationAuthority);
// tutorRating.find(()=>{
// tutor_id : tutor._id
// })
// .then(reviews => {
// let reviewsList = [];
//
// reviewsList = await Get
// for (const oneReview of reviews){
// reviewsList.push(oneReview.review);
// //console.log("oneReview review");
// //console.log(oneReview.review);
// }
// console.log("Reviews : " + reviewsList)
//
//
// let options = {
// uri: 'http://localhost:5000/review_prediction_for_tutor',
// body: JSON.stringify(reviewsList),
// method: 'POST',
// headers: {
// 'Content-Type': 'application/json'
// }
// }
// request(options, function (error, response) {
// // console.log(error, response.body);
// //tutor.tutor_main_district = "Test";
// //tutorReviewResults.tutor_reviewValue = response.body;
// let payload = {
// "tutor_id" : tutor._id,
// "tutor_name" : tutor.tutor_name,
// "tutor_nic" : tutor.tutor_nic,
// "tutor_email" : tutor.tutor_email,
// "tutor_phone" : tutor.tutor_phone,
// "tutor_address" : tutor.tutor_address,
// "tutor_password" : tutor.tutor_password,
// "tutor_gender" : tutor.tutor_gender,
// "tutor_status" : tutor.tutor_status,
// "tutor_image" : tutor.tutor_image,
// "tutor_Stream" : tutor.tutor_Stream,
// "tutor_subjects" : tutor.tutor_subjects,
// "tutor_class_type" : tutor.tutor_class_type,
// "tutor_main_district" : tutor.tutor_main_district,
// "tutor_main_city" : tutor.tutor_main_city,
// "tutor_medium" : tutor.tutor_medium,
// "tutor_qualification" : tutor.tutor_qualification,
// "tutor_reviewValue" : JSON.parse(response.body).result,
//
// };
// tutorReviewResults.push(payload);
// console.log(tutorReviewResults.length)
// });
// reviewsList = [];
// })
//
// arra.push(data);
// }
//
// return arra;
// }
let reviewFinalResults = []
for (let tutor of tutors){
tutorRating.find(()=>{
tutor_id : tutor._id
})
.then(reviews => {
let reviewsList = [];
for (const oneReview of reviews){
reviewsList.push(oneReview.review);
//console.log("oneReview review");
//console.log(oneReview.review);
}
console.log("Reviews : " + reviewsList)
let options = {
uri: 'http://localhost:5000/review_prediction_for_tutor',
body: JSON.stringify(reviewsList),
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
}
request(options, function (error, response) {
// console.log(error, response.body);
//tutor.tutor_main_district = "Test";
//tutorReviewResults.tutor_reviewValue = response.body;
let payload = {
"tutor_id" : tutor._id,
"tutor_name" : tutor.tutor_name,
"tutor_nic" : tutor.tutor_nic,
"tutor_email" : tutor.tutor_email,
"tutor_phone" : tutor.tutor_phone,
"tutor_address" : tutor.tutor_address,
"tutor_password" : tutor.tutor_password,
"tutor_gender" : tutor.tutor_gender,
"tutor_status" : tutor.tutor_status,
"tutor_image" : tutor.tutor_image,
"tutor_Stream" : tutor.tutor_Stream,
"tutor_subjects" : tutor.tutor_subjects,
"tutor_class_type" : tutor.tutor_class_type,
"tutor_main_district" : tutor.tutor_main_district,
"tutor_main_city" : tutor.tutor_main_city,
"tutor_medium" : tutor.tutor_medium,
"tutor_qualification" : tutor.tutor_qualification,
"tutor_reviewValue" : JSON.parse(response.body).result,
};
tutorReviewResults.push(payload);
console.log(tutorReviewResults.length)
});
reviewsList = [];
})
// console.log(reviewFinalResults)
}
console.log("Last " +tutorReviewResults.length)
//res.json(tutorReviewResults)
}).then(()=>{
console.log("Then " +tutorReviewResults.length)
res.json(tutorReviewResults)
})
.catch(err => res.status(400).json('Eroor: '+ err));
});
module.exports = router;
...@@ -13,6 +13,7 @@ router.route('/add').post(async(req,res) =>{ ...@@ -13,6 +13,7 @@ router.route('/add').post(async(req,res) =>{
const student_id = mongoose.Types.ObjectId(req.body.student_id); const student_id = mongoose.Types.ObjectId(req.body.student_id);
const year = req.body.year; const year = req.body.year;
const stream = req.body.stream; const stream = req.body.stream;
const Subjects = req.body.Subjects;
const subject01 = req.body.subject01; const subject01 = req.body.subject01;
const subject02 = req.body.subject02; const subject02 = req.body.subject02;
const subject03 = req.body.subject03; const subject03 = req.body.subject03;
...@@ -27,6 +28,7 @@ router.route('/add').post(async(req,res) =>{ ...@@ -27,6 +28,7 @@ router.route('/add').post(async(req,res) =>{
student_id, student_id,
year, year,
stream, stream,
Subjects,
subject01, subject01,
subject02, subject02,
subject03, subject03,
...@@ -49,7 +51,7 @@ router.route('/add').post(async(req,res) =>{ ...@@ -49,7 +51,7 @@ router.route('/add').post(async(req,res) =>{
else { else {
ALevelResults.findById(req.body.student_id, function(err, details){ ALevelResults.findById(req.body.student_id, function(err, details){
if(!details){ if(!details){
req.status(404).send("data is not found"); res.status(404).send("data is not found");
} }
else { else {
details.year = year; details.year = year;
......
...@@ -30,31 +30,32 @@ transporter.verify((error, success) => { ...@@ -30,31 +30,32 @@ transporter.verify((error, success) => {
router.route('/').get((req,res) =>{ router.route('/').get((req,res) =>{
tutor.find() tutor.find()
.then(tutors => res.json(tutors))
.catch(err => res.status(400).json('Eroor: '+ err));
});
router.route('/getFilteredList').post((req,res) =>{
console.log(req.body);
tutor.find({
"tutor_Stream" : {'$regex': req.body.selectedStream, '$options': 'i'},
"tutor_subjects" : {'$regex': req.body.selectedSubject, '$options': 'i'},
"tutor_main_district" : {'$regex': req.body.selectedDistrict, '$options': 'i'},
"tutor_main_city" : {'$regex': req.body.selectedCity, '$options': 'i'},
"tutor_medium" : {'$regex': req.body.selectedLanguage, '$options': 'i'},
"tutor_class_type" : {'$regex': req.body.selectedClassType, '$options': 'i'},
})
.then(tutors => { .then(tutors => {
//console.log(tutors); console.log(tutors);
res.json(tutors) res.json(tutors)
}) })
.catch(err => res.status(400).json('Eroor: '+ err)); .catch(err => res.status(400).json('Eroor: '+ err));
}); });
router.route('/:id').get(function (req, res) {
let id = req.params.id;
console.log("TutorId : " + id)
tutor.findById(id).populate(['tutor_instituteIDList']).then(tutor => {
console.log(tutor);
res.json(tutor);
}).catch(err => res.status(400).json('Eroor: '+ err));
});
// router.route('/:id').get(function (req, res) {
// let id = req.params.id;
// console.log("TutorId : " + id)
// tutor.findById(id).populate("tutor_instituteIDList").then(tutor => {
// console.log(tutor);
// res.json(tutor);
// }).catch(err => res.status(400).json('Eroor: '+ err));
// });
router.route('/add').post(async(req,res) =>{ router.route('/add').post(async(req,res) =>{
console.log("Tutor Registration began") console.log("Tutor Registration began")
......
const router = require('express').Router();
let tutorRatingsRoute = require('../models/TutorRatingAndReviews.model');
const mongoose = require("mongoose");
router.route('/add').post(async(req,res) =>{
const tutor_id = mongoose.Types.ObjectId(req.body.tutor_id);
const student_id = mongoose.Types.ObjectId(req.body.student_id);
const rating = req.body.rating;
const review = req.body.review;
const version = req.body.version;
const newTutorRating = new tutorRatingsRoute({
tutor_id,
student_id,
rating,
review,
version,
});
newTutorRating.save()
.then( () => {
res.json('New Review Added');
})
.catch(err =>res.status(400).json('Error: '+err));
});
module.exports = router;
...@@ -4,7 +4,7 @@ const bodyParser = require('body-parser'); ...@@ -4,7 +4,7 @@ const bodyParser = require('body-parser');
const mongoose =require('mongoose'); const mongoose =require('mongoose');
require('dotenv').config(); require('dotenv').config();
const app = express(); const app = express();
const port = process.env.PORT || 5000; const port = process.env.PORT || 5001;
app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.urlencoded({ extended: true }));
...@@ -29,6 +29,8 @@ const userAccount = require('./routes/userAccount.route'); ...@@ -29,6 +29,8 @@ const userAccount = require('./routes/userAccount.route');
const questionManage = require('./routes/question.route'); const questionManage = require('./routes/question.route');
const financeRouter = require('./routes/finance.route'); const financeRouter = require('./routes/finance.route');
const studentResult = require('./routes/studentALResult.route'); const studentResult = require('./routes/studentALResult.route');
const tutorRating = require('./routes/tutorRatings.route');
const filteredList = require('./routes/filteredList.route');
app.use('/studentSingUp',studentRouter); app.use('/studentSingUp',studentRouter);
app.use('/tutorSingUp',tutorRouter); app.use('/tutorSingUp',tutorRouter);
...@@ -37,6 +39,8 @@ app.use('/userAccount',userAccount); ...@@ -37,6 +39,8 @@ app.use('/userAccount',userAccount);
app.use('/questions', questionManage); app.use('/questions', questionManage);
app.use('/admin/finance', financeRouter); app.use('/admin/finance', financeRouter);
app.use('/studentResults', studentResult); app.use('/studentResults', studentResult);
app.use('/tutorRatings', tutorRating);
app.use('/filteredList', filteredList);
app.listen(port, () => { app.listen(port, () => {
console.log(`Server is running on Port: ${port}`); console.log(`Server is running on Port: ${port}`);
......
...@@ -12473,6 +12473,11 @@ ...@@ -12473,6 +12473,11 @@
"resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz",
"integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==" "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew=="
}, },
"react-icons": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.2.0.tgz",
"integrity": "sha512-rmzEDFt+AVXRzD7zDE21gcxyBizD/3NqjbX6cmViAgdqfJ2UiLer8927/QhhrXQV7dEj/1EGuOTPp7JnLYVJKQ=="
},
"react-is": { "react-is": {
"version": "16.13.1", "version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
"react": "^17.0.2", "react": "^17.0.2",
"react-dom": "^17.0.2", "react-dom": "^17.0.2",
"react-dropdown": "^1.9.2", "react-dropdown": "^1.9.2",
"react-icons": "^4.2.0",
"react-router-dom": "^5.2.0", "react-router-dom": "^5.2.0",
"react-scripts": "4.0.3", "react-scripts": "4.0.3",
"react-select-search": "^3.0.8", "react-select-search": "^3.0.8",
......
...@@ -16,6 +16,7 @@ import QuestionDetails from "./Components/IT18050240/question_details" ...@@ -16,6 +16,7 @@ import QuestionDetails from "./Components/IT18050240/question_details"
import QuestionLayout from "./Components/IT18050240/question_layout" import QuestionLayout from "./Components/IT18050240/question_layout"
//import AdminQuestionManagement from "./Components/IT18050240/admin_question_management.js" //import AdminQuestionManagement from "./Components/IT18050240/admin_question_management.js"
import QuestionBank from "./Components/IT18050240/question_bank" import QuestionBank from "./Components/IT18050240/question_bank"
import TutorProfileView from "./Components/HomePage/TutorProfileView";
function App() { function App() {
return ( return (
...@@ -27,6 +28,7 @@ function App() { ...@@ -27,6 +28,7 @@ function App() {
<Route path="/SignUp" exact component={SignUp}/> <Route path="/SignUp" exact component={SignUp}/>
<Route path="/beforeConfirm" exact component={beforeConfirmation}/> <Route path="/beforeConfirm" exact component={beforeConfirmation}/>
<Route path="/AccountVerified/:id" exact component={VerifiedAccount}/> <Route path="/AccountVerified/:id" exact component={VerifiedAccount}/>
<Route path="/Home/ViewProfile/:id" exact component={TutorProfileView}/>
{/*<Route path="/studentDashboard" exact component={StudentDashboard}/>*/} {/*<Route path="/studentDashboard" exact component={StudentDashboard}/>*/}
......
...@@ -343,6 +343,7 @@ export default class Dashboard extends Component { ...@@ -343,6 +343,7 @@ export default class Dashboard extends Component {
{/*</Link>*/} {/*</Link>*/}
</li> </li>
<li> <li>
<a href="#"> <a href="#">
<i className="metismenu-icon fa fa-calendar"></i> <i className="metismenu-icon fa fa-calendar"></i>
......
...@@ -15,21 +15,40 @@ export default class AddClassDetails extends Component{ ...@@ -15,21 +15,40 @@ export default class AddClassDetails extends Component{
super(props); super(props);
this.state = { this.state = {
instituteList: ['Sakya Nugegoda', 'Montana Kiribathgoda', 'Wasiti Kiribathgoda'] tutorID:'6127b1d7ed4ff23bb0344538',
instituteList: [],
ClassMethods : [],
subjectList : [],
selectedClassMethod : '',
isSelectInstitute : false,
HomeClassType : ["Group Class", "Individual Class"],
OtherClassTypes : ["Group Class","Mass Class", "Revision Class","Paper Class", "Individual Class"]
} }
this.onChangeClassMethod = this.onChangeClassMethod.bind(this);
} }
// this.onChangeInstituteDropDown = this.onChangeInstituteDropDown.bind(this); // this.onChangeInstituteDropDown = this.onChangeInstituteDropDown.bind(this);
componentDidMount() { componentDidMount() {
axios.get(configs.BASE_URL + '/instituteSingUp/' ) axios.get(configs.BASE_URL + '/tutorSingUp/'+this.state.tutorID )
.then(response =>{ .then(response =>{
if(response.data.length > 0){ console.log(response.data);
console.log(response.data); //console.log(response.data);
this.setState({ this.setState({
instituteList : response.data instituteList : response.data.tutor_instituteIDList,
ClassMethods : response.data.tutor_class_type,
subjectList : response.data.tutor_subjects,
}, ()=>{
console.log(this.state.instituteList);
}) })
}
}) })
} }
...@@ -39,6 +58,25 @@ export default class AddClassDetails extends Component{ ...@@ -39,6 +58,25 @@ export default class AddClassDetails extends Component{
}) })
} }
onChangeClassMethod(e) {
console.log(e);
console.log(e.target.value);
this.setState({
selectedClassMethod: e.target.value
},()=>{
if(e.target.value === "Institute"){
this.setState({
isSelectInstitute : true
})
}
else {
this.setState({
isSelectInstitute : false
})
}
})
}
render() { render() {
return( return(
...@@ -64,62 +102,94 @@ export default class AddClassDetails extends Component{ ...@@ -64,62 +102,94 @@ export default class AddClassDetails extends Component{
<div className="col-md-6"> <div className="col-md-6">
<div className="card-body"> <div className="card-body">
<div className="position-relative form-group"> <div className="position-relative form-group">
<label>Class Type</label> <label>Class Method</label>
<select name="select" className="form-control"> <select name="select" className="form-control"
<option>Select Class Type</option> onChange={e => this.onChangeClassMethod(e)}>
<option>Mass Class</option>
<option>Revision Class</option> <option value="" disabled selected>Select Class Method</option>
<option>Group Class</option> {this.state.ClassMethods.map((dis) =>
<option>Individual Class</option> <option value={dis}>
{dis}
</option>)}
</select> </select>
</div> </div>
{this.state.selectedClassMethod === "Home Visit" ?
<div className="position-relative form-group">
<label>Class Type</label>
<select name="select" className="form-control">
<option value="" disabled selected>Select Class Type</option>
{this.state.HomeClassType.map((dis) =>
<option value={dis}>
{dis}
</option>)}
</select>
</div>
:
<div className="position-relative form-group">
<label>Class Type</label>
<select name="select" className="form-control">
<option value="" disabled selected>Select Class Type</option>
{this.state.OtherClassTypes.map((dis) =>
<option value={dis}>
{dis}
</option>)}
</select>
</div>
}
{this.state.isSelectInstitute === true ?
<div className="position-relative form-group"> <div className="position-relative form-group">
<label>Institute</label>
<select name="select" className="form-control"> <label>Institute</label>
onChange={e => this.onChangeInstituteDropDown(e)} <select name="select" className="form-control">
<option value="" disabled selected>Select Institute</option> onChange={e => this.onChangeInstituteDropDown(e)}
<option value="" disabled selected>Select the Institute</option>
{this.state.instituteList.map((dis) => {this.state.instituteList.map((dis) =>
<option key={dis._id} id={dis._id} value={dis.institute_name}> <option value={dis}>
{dis.institute_name} {dis.institute_name}
</option>)} </option>)}
{/*<option>Select Institute</option>*/}
{/*<option>Sakya Nugegoda</option>*/} </select>
{/*<option>Minasko Malabe</option>*/}
{/*<option>Rotary Nugegoda</option>*/}
{/*<option>Sasip Nugegoda</option>*/}
</select>
</div> </div>
: <div></div>}
<div className="position-relative form-group"> <div className="position-relative form-group">
<label>Batch Number</label> <label>Batch Name</label>
<input type="text" className="form-control"/> <input type="text" className="form-control"/>
</div> </div>
<div className="position-relative form-group"> <div className="position-relative form-group">
<label>Year</label> <label>Class Starting Date</label>
<input type="month" className="form-control"/> <input type="date" className="form-control"/>
</div> </div>
<div className="position-relative form-group"> <div className="position-relative form-group">
<label>Subject</label> <label>Subject</label>
<select name="select" className="form-control"> <select name="select" className="form-control">
<option>Select Subject</option> <option value="" disabled selected>Select the Subject</option>
<option></option> {this.state.subjectList.map((dis) =>
<option></option> <option value={dis}>
<option></option> {dis}
<option></option> </option>)}
</select> </select>
</div> </div>
<div className="position-relative form-group">
<label>Class Fee</label>
<input type="text" className="form-control"/>
</div>
</div> </div>
</div> </div>
<div className="col-md-6"> <div className="col-md-6">
<div className="card-body"> <div className="card-body">
<div className="position-relative form-group"> <div className="position-relative form-group">
<label htmlFor="exampleEmail" className>Students</label> {/*<label htmlFor="exampleEmail" className>Students</label>*/}
<SelectSearch {/*<SelectSearch*/}
options={options} {/* options={options}*/}
multiple {/* multiple*/}
search {/* search*/}
filterOptions={fuzzySearch} {/* filterOptions={fuzzySearch}*/}
placeholder="Select students" {/* placeholder="Select students"*/}
/> {/*/>*/}
</div> </div>
</div> </div>
</div> </div>
......
...@@ -15,6 +15,7 @@ import Calender from "../Images/calender.png"; ...@@ -15,6 +15,7 @@ import Calender from "../Images/calender.png";
import axios from "axios"; import axios from "axios";
import * as configs from "../Config/config"; import * as configs from "../Config/config";
import TutorCard from "./HomePage/TutorCard"; import TutorCard from "./HomePage/TutorCard";
import swal from "sweetalert";
export default class Home extends Component{ export default class Home extends Component{
constructor(props) { constructor(props) {
...@@ -43,7 +44,16 @@ export default class Home extends Component{ ...@@ -43,7 +44,16 @@ export default class Home extends Component{
selectedClassType : '', selectedClassType : '',
selectedLanguage : '', selectedLanguage : '',
TutorFilteredList : [], TutorFilteredList : [],
RVPastResults : 25,
RVRatings : 25,
RVReviews : 25,
RVStudentCount : 25,
isRVPastResults : true,
isRVRatings : true,
isRVReviews : true,
isStudentCount : true,
TotalRecommendationCount : 0,
passResultsSubCategory : 2,
}; };
this.FindCities = this.FindCities.bind(this); this.FindCities = this.FindCities.bind(this);
...@@ -55,6 +65,16 @@ export default class Home extends Component{ ...@@ -55,6 +65,16 @@ export default class Home extends Component{
this.OnChangeCity = this.OnChangeCity.bind(this); this.OnChangeCity = this.OnChangeCity.bind(this);
this.OnChangeClassType = this.OnChangeClassType.bind(this); this.OnChangeClassType = this.OnChangeClassType.bind(this);
this.OnChangeLanguage = this.OnChangeLanguage.bind(this); this.OnChangeLanguage = this.OnChangeLanguage.bind(this);
this.OnChangeIsCRPastResults = this.OnChangeIsCRPastResults.bind(this);
this.OnChangeIsCRRatings = this.OnChangeIsCRRatings.bind(this);
this.OnChangeIsCRReviews = this.OnChangeIsCRReviews.bind(this);
this.OnChangeIsCRStudentCount = this.OnChangeIsCRStudentCount.bind(this);
this.OnChangeCRPastResults = this.OnChangeCRPastResults.bind(this);
this.OnChangeCRRatings = this.OnChangeCRRatings.bind(this);
this.OnChangeCRReviews = this.OnChangeCRReviews.bind(this);
this.OnChangeCRStudentCount = this.OnChangeCRStudentCount.bind(this);
this.calculateTotalRecommendationCount = this.calculateTotalRecommendationCount.bind(this);
this.onChangeRadioButton = this.onChangeRadioButton.bind(this);
} }
componentDidMount() { componentDidMount() {
...@@ -67,7 +87,87 @@ export default class Home extends Component{ ...@@ -67,7 +87,87 @@ export default class Home extends Component{
}) })
} }
}) })
this.calculateTotalRecommendationCount();
}
onChangeRadioButton(e){
if(e.target.value === "By pass rate"){
this.setState({
passResultsSubCategory : 1
});
}
else {
this.setState({
passResultsSubCategory : 2
});
}
}
calculateTotalRecommendationCount(){
let finalResult = this.state.RVPastResults + this.state.RVRatings +this.state.RVReviews + this.state.RVStudentCount;
this.setState({
TotalRecommendationCount : finalResult
});
}
OnChangeCRPastResults(e) {
this.setState({
RVPastResults: Number(e.target.value),
},()=>{
this.calculateTotalRecommendationCount();
});
}
OnChangeCRRatings(e) {
this.setState({
RVRatings: Number(e.target.value),
},()=>{
this.calculateTotalRecommendationCount();
});
}
OnChangeCRReviews(e) {
this.setState({
RVReviews: Number(e.target.value),
},()=>{
this.calculateTotalRecommendationCount();
});
}
OnChangeCRStudentCount(e) {
this.setState({
RVStudentCount: Number(e.target.value),
},()=>{
this.calculateTotalRecommendationCount();
});
}
OnChangeIsCRPastResults(e) {
this.setState({
isRVPastResults: e.target.value
});
}
OnChangeIsCRRatings(e) {
this.setState({
isRVRatings: e.target.value
});
}
OnChangeIsCRReviews(e) {
this.setState({
isRVReviews: e.target.value
});
}
OnChangeIsCRStudentCount(e) {
this.setState({
isStudentCount: e.target.value
});
} }
OnChangeStream(e) { OnChangeStream(e) {
...@@ -130,23 +230,28 @@ export default class Home extends Component{ ...@@ -130,23 +230,28 @@ export default class Home extends Component{
selectedCity:this.state.selectedCity, selectedCity:this.state.selectedCity,
selectedClassType:this.state.selectedClassType, selectedClassType:this.state.selectedClassType,
selectedLanguage:this.state.selectedLanguage, selectedLanguage:this.state.selectedLanguage,
RVPastResults : this.state.RVPastResults,
RVRatings : this.state.RVRatings,
RVReviews : this.state.RVReviews,
RVStudentCount : this.state.RVStudentCount,
passResultsSubCategory : this.state.passResultsSubCategory,
} }
if(this.state.selectedStream != "" && this.state.selectedSubject != ""){ if(this.state.selectedStream != "" && this.state.selectedSubject != ""){
axios.post(configs.BASE_URL + '/tutorSingUp/getFilteredList', Filters) axios.post(configs.BASE_URL + '/filteredList/getFilteredList', Filters)
.then(res =>{ .then(res =>{
this.setState({ this.setState({
TutorFilteredList : res.data TutorFilteredList : res.data
}) })
// console.log(this.state.TutorFilteredList); console.log(res.data);
}) })
} }
else { else {
alert("Please at least select Stream and Subject"); swal("Sorry", "Please select Stream and Subject", "warning");
// alert("Please at least select Stream and Subject");
} }
...@@ -261,11 +366,144 @@ export default class Home extends Component{ ...@@ -261,11 +366,144 @@ export default class Home extends Component{
</div> </div>
</div> </div>
<div className="row" style={{marginRight:'50px', marginLeft:'50px',marginTop:'10px', padding:'10px',background:'#1E4258'}}>
<h5 style={{color:"white", float:'left'}}>Customized Recommendation</h5>
</div>
<div className="row" style={{marginRight:'50px', marginLeft:'50px',marginTop:'5px', padding:'5px',background:'#1E4258'}}>
<div className="col" style={{margin:'5px', border:'solid', padding:'10px', borderColor:'#216E9B'}}>
<div className="row">
<div className="col">
<div className="row">
<input type="checkbox" id="PastResults" className="form-control"
defaultChecked={this.state.isRVPastResults}
onChange={this.OnChangeIsCRPastResults}
style={{
width: '20px',
height: '20px',
float: 'left',
marginLeft: '25px',
marginTop: '15px'
}}
/>
<label style={{marginTop: '15px', float: 'left', marginLeft: '20px',color:"white"}}>Past Results</label>
</div>
<div className="row">
<input type="number" id="pastResultsTxt" className="form-control"
value={this.state.RVPastResults} onChange={this.OnChangeCRPastResults}
style={{width: '30%',marginLeft:'20px'}} required/>
<label style={{marginTop: '10px', float: 'left', marginLeft: '10px',color:"white"}}>%</label>
</div>
<div className="row">
<div style={{color:'white',padding:'8px'}} onChange={this.onChangeRadioButton}>
<input type="radio" value="By pass rate" name="results"
style={{marginLeft:'11px'}} checked={this.state.passResultsSubCategory === 1}/> By pass rate
<br/>
<input type="radio" value="By grade A" name="results"
style={{marginLeft:'12px'}} checked={this.state.passResultsSubCategory === 2}/> By grade 'A'
</div>
</div>
<div className="row">
</div>
</div>
<div className="col">
<div className="row">
<input type="checkbox" id="PastResults" className="form-control"
defaultChecked={this.state.isRVRatings}
onChange={this.OnChangeIsCRRatings}
style={{
width: '20px',
height: '20px',
float: 'left',
marginLeft: '25px',
marginTop: '15px'
}}
/>
<label style={{marginTop: '15px', float: 'left', marginLeft: '20px',color:"white"}}>Ratings</label>
</div>
<div className="row">
<input type="number" id="pastResultsTxt" className="form-control"
value={this.state.RVRatings} onChange={this.OnChangeCRRatings}
style={{width: '30%',marginLeft:'20px'}} required/>
<label style={{marginTop: '10px', float: 'left', marginLeft: '10px',color:"white"}}>%</label>
</div>
<div className="row">
</div>
</div>
<div className="col">
<div className="row">
<input type="checkbox" id="PastResults" className="form-control"
defaultChecked={this.state.isRVReviews}
onChange={this.OnChangeIsCRReviews}
style={{
width: '20px',
height: '20px',
float: 'left',
marginLeft: '25px',
marginTop: '15px'
}}
/>
<label style={{marginTop: '15px', float: 'left', marginLeft: '20px',color:"white"}}>Reviews</label>
</div>
<div className="row">
<input type="number" id="pastResultsTxt" className="form-control"
value={this.state.RVReviews} onChange={this.OnChangeCRReviews}
style={{width: '30%',marginLeft:'20px'}} required/>
<label style={{marginTop: '10px', float: 'left', marginLeft: '10px',color:"white"}}>%</label>
</div>
<div className="row">
</div>
</div>
<div className="col">
<div className="row">
<input type="checkbox" id="PastResults" className="form-control"
defaultChecked={this.state.isStudentCount}
onChange={this.OnChangeIsCRStudentCount}
style={{
width: '20px',
height: '20px',
float: 'left',
marginLeft: '25px',
marginTop: '15px'
}}
/>
<label style={{marginTop: '15px', float: 'left', marginLeft: '20px',color:"white"}}>Student Count</label>
</div>
<div className="row">
<input type="number" id="pastResultsTxt" className="form-control"
value={this.state.RVStudentCount} onChange={this.OnChangeCRStudentCount}
style={{width: '30%',marginLeft:'20px'}} required/>
<label style={{marginTop: '10px', float: 'left', marginLeft: '10px',color:"white"}}>%</label>
</div>
<div className="row">
</div>
</div>
<div className="col">
<div className="row">
<label>
<span style={{marginTop: '15px', float: 'left', marginLeft: '20px',color:"white"}}>
{this.state.TotalRecommendationCount} / 100</span>
</label>
</div>
<div className="row">
</div>
</div>
</div>
</div>
</div>
<div className="row" style={{background:'#F5F4ED', marginLeft:'50px', marginRight:'50px', marginTop:'10px'}}> <div className="row" style={{background:'#F5F4ED', marginLeft:'50px', marginRight:'50px', marginTop:'10px'}}>
<h5 style={{margin:'10px'}}>0 Results</h5> <h5 style={{margin:'10px'}}>{this.state.TutorFilteredList.length} Results</h5>
</div> </div>
<div className=""> <div className="">
{this.state.TutorFilteredList.length > 0 ? this.state.TutorFilteredList.map( (card)=>{ return(<TutorCard data={card}/>)} ) : <div>Empty</div>} {this.state.TutorFilteredList.length > 0 ? this.state.TutorFilteredList.map( (card)=>{ return(<TutorCard data={card}/>)} ) : <div>No Result Found</div>}
</div> </div>
<div className="app-main__outer"> <div className="app-main__outer">
......
...@@ -97,8 +97,7 @@ export default class TutorCard extends Component{ ...@@ -97,8 +97,7 @@ export default class TutorCard extends Component{
<img src={RecommendIcon} style={{width:'100px', height:'90px', float:'left', margin:'10px'}}/> <img src={RecommendIcon} style={{width:'100px', height:'90px', float:'left', margin:'10px'}}/>
</div> </div>
</div> </div>
{/*{console.log("In Tutor Card")}*/}
{/*{console.log(this.props)}*/}
</div> </div>
) )
} }
......
import React, {Component} from "react";
import ItemNav from "../Navbar";
import TestTeacher from "../../Images/teacher.jpg";
import {FaStar} from "react-icons/fa";
import axios from "axios";
import * as configs from "../../Config/config";
export default class TutorProfileView extends Component{
constructor(props) {
super(props);
this.state = {
rating:0,
overRollRating : 3.5,
ratingCount:20,
ratingFive: 4,
ratingFour: 2,
ratingThree:5,
ratingTwo: 1,
ratingOne: 1,
alreadyRate: false,
review :'',
student_id : '',
tutor_id : '',
version : '1',
};
this.onClickRatingValue = this.onClickRatingValue.bind(this);
this.onMouseEnter = this.onMouseEnter.bind(this);
this.onMouseOut = this.onMouseOut.bind(this);
this.onChangeComment = this.onChangeComment.bind(this);
this.onSID = this.onSID.bind(this);
this.onTutorID = this.onTutorID.bind(this);
this.submitRating = this.submitRating.bind(this);
}
onClickRatingValue(e) {
console.log(e.target.value);
this.setState({
rating: e.target.value
})
}
onMouseEnter(e) {
console.log(e);
this.setState({
hover: e
})
}
onMouseOut() {
this.setState({
hover: 0
})
}
onChangeComment(e) {
this.setState({
review: e.target.value
})
}
onSID(e) {
this.setState({
student_id: e.target.value
})
}
onTutorID(e) {
this.setState({
tutor_id: e.target.value
})
}
submitRating() {
const payload = {
tutor_id : this.state.tutor_id,
student_id : this.state.student_id,
rating : this.state.rating,
review : this.state.review,
version : this.state.version
}
// console.log("payload");
console.log(payload);
axios.post(configs.BASE_URL + '/tutorRatings/add', payload)
.then(response => {
alert("One Review added!!!")
});
}
render() {
return(
<div className="App" style={{padding:'10px',paddingTop:'0px'}}>
<div className="row" style={{width:'100%'}}>
<ItemNav/>
</div>
<div className="App" style={{marginTop:'80px',paddingTop:'0px'}}>
<div className="row">
<div className="col">
<div className="row">
<div className="col-4" >
<img src={TestTeacher} style={{width:'160px', height:'160px', float:'left', margin:'30px'}}/>
</div>
<div className="col" style={{padding:'20px', float:'left', marginTop:'20px'}}>
<div className="row">
<h5>Sanath Kumara</h5>
</div>
<div className="row">
<label>B.Sc (Mgt) Special, University of Sri Jayawardanapura</label>
</div>
<div className="row">
{[...Array(5)].map((star, i) => {
const ratingValue = i + 1.0;
return <label style={{marginLeft: '5px', faloat: 'center'}}>
<input type="radio" name="rating"
style={{display: "none", cursor: "pointer"}}
value={ratingValue}
//onClick={this.onClickRatingValue}
/>
<FaStar size={20}
color={ratingValue <= (this.state.overRollRating) ? "#ffc107" : "#e4e5e9"}
//onMouseEnter={() => this.onMouseEnter(i + 1)}
style={{cursor: "pointer"}}/>
</label>
})}
</div>
<div className="row">
<label>11 reviews</label>
</div>
</div>
</div>
<div className="row" style={{margin:'20px'}}>
<h6>About Me</h6>
</div>
<div className="row" style={{margin:'20px'}}>
<div className="col">
<label style={{textAlign:'justify'}}>
I graduated in 2019 from an undergraduate degree in English Literature from Cambridge University,
and, after working for two years full time as a private tutor, am currently reading for an MPhil in Renaissance
Literature (also at Cambridge) my dissertation being an attempt to taxonomise the syntactical forms of the
simile in Shakespeares Complete Works, and, with a corresponding database, thus (I hope) to chart its evolution.
I hope to continue in academia afterwards, and, throughout and beyond this degree, to remain tutoring.
</label>
</div>
</div>
<div className="row" style={{margin:'20px'}}>
<h6>About My Class</h6>
</div>
<div className="row" style={{margin:'20px'}}>
<div className="col">
<label style={{textAlign:'justify'}}>
I graduated in 2019 from an undergraduate degree in English Literature from Cambridge University,
and, after working for two years full time as a private tutor, am currently reading for an MPhil in Renaissance
Literature (also at Cambridge) my dissertation being an attempt to taxonomise the syntactical forms of the
simile in Shakespeares Complete Works, and, with a corresponding database, thus (I hope) to chart its evolution.
I hope to continue in academia afterwards, and, throughout and beyond this degree, to remain tutoring.
</label>
</div>
</div>
</div>
<div className="col">
</div>
</div>
<div className="row" style={{margin:'20px'}}>
<h4>Rating and Reviews</h4>
</div>
<div className="row" style={{margin:'20px'}}>
<div className="col-4">
<div className="row" style={{padding: '15px'}}>
<h2 style={{marginLeft: '15px'}}><span style={{color: 'gray'}}><b
style={{fontSize: '40px', color: "black"}}>{this.state.overRollRating}</b>/5</span></h2>
</div>
<div className="row">
{[...Array(5)].map((star, i) => {
const ratingValue = i + 1;
return <label style={{marginLeft: '20px', float: 'left'}}>
<input type="radio" name="rating"
style={{display: "none", cursor: "pointer"}}
value={ratingValue}
//onClick={this.onClickRatingValue}
/>
<FaStar size={40}
color={ratingValue <= (this.state.overRollRating) ? "#ffc107" : "#e4e5e9"}
//onMouseEnter={() => this.onMouseEnter(i + 1)}
style={{cursor: "pointer"}}/>
</label>
})}
</div>
<div className="row" style={{padding: '15px'}}>
<span style={{marginLeft: '15px'}}>{this.state.ratingCount} Ratings</span>
</div>
</div>
<div className="col-6">
<div className="row" style={{padding: '5px'}}>
<div className="col-">
{[...Array(5)].map((star, i) => {
const ratingValue = i + 1;
return <label style={{marginLeft: '15px', float: 'left'}}>
<input type="radio" name="rating"
style={{display: "none", cursor: "pointer"}}
value={ratingValue}
/>
<FaStar size={20}
color={ratingValue <= 5 ? "#ffc107" : "#e4e5e9"}
style={{cursor: "pointer"}}/>
</label>
})}
</div>
<div className="col">
<span style={{float:'left', marginLeft:'10px'}}>{this.state.ratingFive} rate(s)</span>
</div>
</div>
<div className="row" style={{padding: '5px'}}>
<div className="col-">
{[...Array(5)].map((star, i) => {
const ratingValue = i + 1;
return <label style={{marginLeft: '15px', float: 'left'}}>
<input type="radio" name="rating"
style={{display: "none", cursor: "pointer"}}
value={ratingValue}
/>
<FaStar size={20}
color={ratingValue <= 4 ? "#ffc107" : "#e4e5e9"}
style={{cursor: "pointer"}}/>
</label>
})}
</div>
<div className="col">
<span style={{float:'left', marginLeft:'10px'}}>{this.state.ratingFour} rate(s)</span>
</div>
</div>
<div className="row" style={{padding: '5px'}}>
<div className="col-">
{[...Array(5)].map((star, i) => {
const ratingValue = i + 1;
return <label style={{marginLeft: '15px', float: 'left'}}>
<input type="radio" name="rating"
style={{display: "none", cursor: "pointer"}}
value={ratingValue}
/>
<FaStar size={20}
color={ratingValue <= 3 ? "#ffc107" : "#e4e5e9"}
style={{cursor: "pointer"}}/>
</label>
})}
</div>
<div className="col">
<span style={{float:'left', marginLeft:'10px'}}>{this.state.ratingThree} rate(s)</span>
</div>
</div>
<div className="row" style={{padding: '5px'}}>
<div className="col-">
{[...Array(5)].map((star, i) => {
const ratingValue = i + 1;
return <label style={{marginLeft: '15px', float: 'left'}}>
<input type="radio" name="rating"
style={{display: "none", cursor: "pointer"}}
value={ratingValue}
/>
<FaStar size={20}
color={ratingValue <= 2 ? "#ffc107" : "#e4e5e9"}
style={{cursor: "pointer"}}/>
</label>
})}
</div>
<div className="col">
<span style={{float:'left', marginLeft:'10px'}}>{this.state.ratingTwo} rate(s)</span>
</div>
</div>
<div className="row" style={{padding: '5px'}}>
<div className="col-">
{[...Array(5)].map((star, i) => {
const ratingValue = i + 1;
return <label style={{marginLeft: '15px', float: 'left'}}>
<input type="radio" name="rating"
style={{display: "none", cursor: "pointer"}}
value={ratingValue}
/>
<FaStar size={20}
color={ratingValue <= 1 ? "#ffc107" : "#e4e5e9"}
style={{cursor: "pointer"}}/>
</label>
})}
</div>
<div className="col">
<span style={{float:'left', marginLeft:'10px'}}>{this.state.ratingOne} rate(s)</span>
</div>
</div>
</div>
</div>
<div className="row" style={{margin:'20px'}}>
{[...Array(5)].map((star, i) => {
const ratingValue = i + 1;
return <label style={{marginLeft: '20px'}}>
<input type="radio" name="rating" style={{display: "none", cursor: "pointer"}}
value={ratingValue}
onClick={this.onClickRatingValue}/>
<FaStar size={40}
color={ratingValue <= (this.state.rating || this.state.hover) ? "#ffc107" : "#e4e5e9"}
onMouseEnter={() => this.onMouseEnter(i + 1)}
style={{cursor: "pointer"}}/>
</label>
})}
</div>
<div className="row" style={{margin:'20px'}}>
<span style={{marginLeft: '20px'}}>You Rate [{this.state.rating}] stars for the product.</span>
</div>
<div className="row" style={{margin:'20px'}}>
<h5 style={{marginLeft: '20px'}}>You can review to this Tutor</h5>
</div>
<div className="row" style={{margin:'20px'}}>
<input type="text" id="tutorAddress" className="form-control"
placeholder="Tutor ID"
onChange={this.onTutorID}
style={{width: '50%'}} required/>
</div>
<div className="row" style={{margin:'20px'}}>
<input type="text" id="tutorAddress" className="form-control"
placeholder="SID"
onChange={this.onSID}
style={{width: '50%'}} required/>
</div>
<div className="row" style={{margin:'20px'}}>
<textarea style={{width: '50%', marginLeft: '20px'}} value={this.state.comments}
onChange={this.onChangeComment}/>
</div>
<div className="row" style={{margin:'20px'}}>
{this.state.alreadyRate === false ?
<a type="submit" onClick={this.submitRating}
className="profile-edit-btn nav-link btn btn-primary stop-color-final"
name="btnAddMore"
style={{
float: 'left', marginLeft: '20px', marginTop: '00px', marginBottom: '20px',
backgroundColor: 'orange', borderColor: 'orange', fontSize: '20px', width: '25%'
}}>
Add Comment
</a>
:
<a type="submit" onClick={this.updateRating}
className="profile-edit-btn nav-link btn btn-primary stop-color-final"
name="btnAddMore"
style={{
float: 'left', marginLeft: '20px', marginTop: '00px', marginBottom: '20px',
backgroundColor: 'orange', borderColor: 'orange', fontSize: '20px', width: '25%'
}}>
Update Comment
</a>
}
</div>
</div>
</div>
)
}
}
\ No newline at end of file
...@@ -113,11 +113,17 @@ export default class ALResults extends Component{ ...@@ -113,11 +113,17 @@ export default class ALResults extends Component{
onSubmitResults(e){ onSubmitResults(e){
//let student_id = '60fc1aaf718c264214061846'; //let student_id = '60fc1aaf718c264214061846';
let Subject = {
[this.state.sub01] : this.state.sub01Result,
[this.state.sub02] : this.state.sub02Result,
[this.state.sub03] : this.state.sub03Result,
}
const newResult = { const newResult = {
student_id:this.state.studentID, student_id:this.state.studentID,
year:this.state.year, year:this.state.year,
stream:this.state.stream, stream:this.state.stream,
Subjects:Subject,
subject01:this.state.sub01, subject01:this.state.sub01,
subject02:this.state.sub02, subject02:this.state.sub02,
subject03:this.state.sub03, subject03:this.state.sub03,
......
const configs = { const configs = {
BASE_URL: 'http://localhost:5000', BASE_URL: 'http://localhost:5001',
}; };
module.exports = configs; module.exports = configs;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment