├── test └── .gitkeep ├── src ├── App.css ├── setupTests.js ├── App.test.js ├── components │ ├── LoadComp.css │ ├── ChatBody.css │ ├── NoChats.js │ ├── OrgEndCard.css │ ├── SkillCard.css │ ├── LineChart.js │ ├── Search.css │ ├── GenererateQR.js │ ├── EmployeeCard.css │ ├── OrgEndCard.js │ ├── CodeforcesGraph.js │ ├── Modals.css │ ├── SearchEmp.js │ ├── LoadComp.js │ ├── ScanQR.js │ ├── SearchBar.js │ ├── GetSkillsModals.js │ ├── SkillCard.js │ ├── GetEmployeeModal.js │ ├── GetEditFieldModal.js │ ├── GetCertificationModal.js │ ├── GetEducationModal.js │ ├── GetWorkExpModal.js │ ├── ChatBody.js │ └── Navbar.js ├── reportWebVitals.js ├── contracts │ ├── Migrations.sol │ ├── OrganizationEndorser.sol │ ├── Skills.sol │ ├── Admin.sol │ └── Employee.sol ├── index.css ├── firebase │ ├── firebase.js │ └── api.js ├── index.js ├── pages │ ├── NoRole │ │ ├── Notifications.css │ │ ├── NoRole.css │ │ ├── Notifications.js │ │ └── NoRole.js │ ├── GetRoutes │ │ ├── GetOrg.css │ │ ├── Employee.css │ │ └── GetOrg.js │ ├── Employee │ │ ├── Employee.css │ │ ├── UpdateProfile.css │ │ └── Notifications.js │ ├── Admin │ │ ├── AllEmployees.js │ │ ├── AllOrganizationEndorser.js │ │ ├── Admin.css │ │ ├── Notifications.js │ │ └── CreateUser.js │ └── OrganizationEndorser │ │ ├── EndorsePage.css │ │ ├── Organization.css │ │ ├── Organization.js │ │ ├── Notifications.js │ │ ├── EndorseSkill.js │ │ └── EndorseSection.js ├── MetaMaskGuide.js ├── logo.svg └── App.js ├── .babelrc ├── public ├── robots.txt ├── favicon.ico ├── logo192.png ├── logo512.png ├── manifest.json └── index.html ├── migrations ├── 1_initial_migration.js └── 2_deploy_contracts.js ├── .vscode └── settings.json ├── .gitignore ├── web.config ├── truffle-config.js ├── package.json ├── .github └── workflows │ ├── azure-static-web-apps-ashy-ocean-068119800.yml │ ├── azure-static-web-apps-kind-grass-06d9d2100.yml │ ├── azure-static-web-apps-nice-cliff-0fcb7af00.yml │ └── azure-static-web-apps-agreeable-pebble-0716f3500.yml └── README.md /test/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/App.css: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015", "stage-2", "stage-3"] 3 | } 4 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itsaaryan/skillset-verified/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itsaaryan/skillset-verified/HEAD/public/logo192.png -------------------------------------------------------------------------------- /public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itsaaryan/skillset-verified/HEAD/public/logo512.png -------------------------------------------------------------------------------- /migrations/1_initial_migration.js: -------------------------------------------------------------------------------- 1 | const Migrations = artifacts.require("Migrations"); 2 | 3 | module.exports = function (deployer) { 4 | deployer.deploy(Migrations); 5 | }; 6 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "appService.defaultWebAppToDeploy": "/subscriptions/03d5f8ae-756b-4b02-8cfc-47a30de7bfc8/resourceGroups/appsvc_linux_centralus/providers/Microsoft.Web/sites/skillset-verified", 3 | "appService.deploySubpath": "build" 4 | } 5 | -------------------------------------------------------------------------------- /src/setupTests.js: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom'; 6 | -------------------------------------------------------------------------------- /src/App.test.js: -------------------------------------------------------------------------------- 1 | import { render, screen } from '@testing-library/react'; 2 | import App from './App'; 3 | 4 | test('renders learn react link', () => { 5 | render(); 6 | const linkElement = screen.getByText(/learn react/i); 7 | expect(linkElement).toBeInTheDocument(); 8 | }); 9 | -------------------------------------------------------------------------------- /src/components/LoadComp.css: -------------------------------------------------------------------------------- 1 | .load-comp { 2 | position: fixed; 3 | top: 50%; 4 | left: 50%; 5 | transform: translate(-50%, -50%); 6 | -webkit-transform: translate(-50%, -50%); 7 | -moz-transform: translate(-50%, -50%); 8 | -o-transform: translate(-50%, -50%); 9 | -ms-transform: translate(-50%, -50%); 10 | margin-top: 30px; 11 | } 12 | -------------------------------------------------------------------------------- /migrations/2_deploy_contracts.js: -------------------------------------------------------------------------------- 1 | const Admin = artifacts.require("Admin"); 2 | const Skills = artifacts.require("Skills"); 3 | 4 | module.exports = async function (deployer, network, accounts) { 5 | await deployer.deploy(Admin); 6 | const admin = await Admin.deployed(); 7 | await deployer.deploy(Skills); 8 | const skills = await Skills.deployed(); 9 | console.log(admin.address, skills.address); 10 | }; 11 | -------------------------------------------------------------------------------- /src/reportWebVitals.js: -------------------------------------------------------------------------------- 1 | const reportWebVitals = onPerfEntry => { 2 | if (onPerfEntry && onPerfEntry instanceof Function) { 3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 4 | getCLS(onPerfEntry); 5 | getFID(onPerfEntry); 6 | getFCP(onPerfEntry); 7 | getLCP(onPerfEntry); 8 | getTTFB(onPerfEntry); 9 | }); 10 | } 11 | }; 12 | 13 | export default reportWebVitals; 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | seed-phrase.js 8 | 9 | # testing 10 | /coverage 11 | 12 | # production 13 | /build 14 | 15 | # misc 16 | .DS_Store 17 | .env.local 18 | .env.development.local 19 | .env.test.local 20 | .env.production.local 21 | 22 | npm-debug.log* 23 | yarn-debug.log* 24 | yarn-error.log* 25 | -------------------------------------------------------------------------------- /src/contracts/Migrations.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity >=0.5.0 <0.9.0; 3 | 4 | contract Migrations { 5 | address public owner = msg.sender; 6 | uint256 public last_completed_migration; 7 | 8 | modifier restricted() { 9 | require( 10 | msg.sender == owner, 11 | "This function is restricted to the contract's owner" 12 | ); 13 | _; 14 | } 15 | 16 | function setCompleted(uint256 completed) public restricted { 17 | last_completed_migration = completed; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/components/ChatBody.css: -------------------------------------------------------------------------------- 1 | .design-chat-input > input { 2 | background: rgba(31, 30, 30, 0.581) !important; 3 | border: 1px solid white !important; 4 | box-shadow: inset 0 0 3px #c5c6c7 !important; 5 | color: white !important; 6 | } 7 | 8 | .design-chat-input > button { 9 | background: rgba(31, 30, 30, 0.581) !important; 10 | color: white !important; 11 | border: 1px solid white !important; 12 | box-shadow: inset 0 0 8px #c5c6c7 !important; 13 | } 14 | 15 | .design-chat-input > button:hover { 16 | box-shadow: inset 0 0 15px #c5c6c7 !important; 17 | transform: scale(1.03, 1.03); 18 | } 19 | -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css2?family=Grand+Hotel&display=swap"); 2 | @import url("https://fonts.googleapis.com/css2?family=Arvo&display=swap"); 3 | 4 | body { 5 | margin: 0; 6 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", 7 | "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", 8 | sans-serif; 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | background: #0b0c10ea !important; 12 | color: #c5c6c7 !important; 13 | } 14 | 15 | code { 16 | font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", 17 | monospace; 18 | } 19 | -------------------------------------------------------------------------------- /src/firebase/firebase.js: -------------------------------------------------------------------------------- 1 | import firebase from "firebase/app"; 2 | import "firebase/firestore"; 3 | 4 | const firebaseConfig = { 5 | apiKey: "AIzaSyA3pOj1Ex5Y95upo3WYO-LtlO9O3-H-usc", 6 | authDomain: "skillset-verified.firebaseapp.com", 7 | projectId: "skillset-verified", 8 | storageBucket: "skillset-verified.appspot.com", 9 | messagingSenderId: "75144383574", 10 | appId: "1:75144383574:web:75af1487584a97169b7ff7", 11 | measurementId: "G-REQXD214NH", 12 | }; 13 | if (!firebase.apps.length) { 14 | firebase.initializeApp(firebaseConfig); 15 | firebase.firestore(); 16 | } 17 | 18 | export const db = firebase.firestore(); 19 | 20 | export default firebase; 21 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ReactDOM from "react-dom"; 3 | import "./index.css"; 4 | import App from "./App"; 5 | import reportWebVitals from "./reportWebVitals"; 6 | import "semantic-ui-css/semantic.min.css"; 7 | import "react-circular-progressbar/dist/styles.css"; 8 | 9 | ReactDOM.render( 10 | 11 | 12 | , 13 | document.getElementById("root") 14 | ); 15 | 16 | // If you want to start measuring performance in your app, pass a function 17 | // to log results (for example: reportWebVitals(console.log)) 18 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals 19 | reportWebVitals(); 20 | -------------------------------------------------------------------------------- /web.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/components/NoChats.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | import { Image } from "semantic-ui-react"; 3 | 4 | export default class Nochats extends Component { 5 | render() { 6 | return ( 7 |
16 | 20 |

No Chats

21 |

22 | Feel free to discuss any matters the chats are end to end encrypted. 23 |

24 |
25 | ); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/components/OrgEndCard.css: -------------------------------------------------------------------------------- 1 | .organization-card { 2 | width: 70% !important; 3 | margin-left: auto !important; 4 | margin-right: auto !important; 5 | background: #393b3fa6 !important; 6 | border-radius: 7px !important; 7 | border: 1px solid white !important; 8 | box-shadow: 0px 0px 1px 0px white !important; 9 | color: white !important; 10 | margin-bottom: 2rem !important; 11 | } 12 | 13 | .organization-card:hover { 14 | transform: scale(1.03, 1.03); 15 | } 16 | 17 | .organization-card > .content > .header { 18 | display: flex !important; 19 | justify-content: space-between !important; 20 | flex-wrap: wrap !important; 21 | color: white !important; 22 | } 23 | 24 | .organization-card > .content > .header > small { 25 | font-size: 12px !important; 26 | font-weight: 600 !important; 27 | font-style: italic; 28 | } 29 | 30 | @media only screen and (max-width: 800px) { 31 | .organization-card { 32 | width: 100% !important; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/pages/NoRole/Notifications.css: -------------------------------------------------------------------------------- 1 | .sidechat-container { 2 | margin-top: 2rem; 3 | margin-left: 1rem; 4 | } 5 | 6 | .notifications { 7 | background: rgba(31, 30, 30, 0.581); 8 | width: 85%; 9 | margin-left: auto; 10 | margin-right: auto; 11 | height: 80vh; 12 | margin-top: 40px; 13 | border-radius: 10px; 14 | border: 1px solid white; 15 | box-shadow: inset 0 0 3px 0 white; 16 | } 17 | 18 | .sidechat-body { 19 | overflow: auto !important; 20 | } 21 | 22 | .notification-sidechat { 23 | color: white !important; 24 | } 25 | 26 | .notification-sidechat-subheading { 27 | color: #c5c6c7 !important; 28 | } 29 | 30 | .header-row > th { 31 | border-bottom: 1px solid white !important; 32 | } 33 | 34 | .row-cell-container { 35 | cursor: pointer; 36 | } 37 | 38 | .header-row-cell { 39 | border-bottom: 1px solid #c5c6c7 !important; 40 | } 41 | 42 | .row-cell-container :hover { 43 | transform: scale(1.01, 1.01); 44 | background: rgba(31, 30, 30, 0.1); 45 | } 46 | -------------------------------------------------------------------------------- /src/components/SkillCard.css: -------------------------------------------------------------------------------- 1 | .delete-button-skill { 2 | position: absolute; 3 | right: 0; 4 | margin-top: 10px; 5 | margin-right: 10px; 6 | height: 30px; 7 | width: 30px; 8 | display: grid; 9 | justify-content: center; 10 | align-items: center; 11 | justify-items: center; 12 | cursor: pointer; 13 | } 14 | 15 | .delete-button-skill:hover { 16 | transform: scale(1.1, 1.1); 17 | } 18 | 19 | .skill-des { 20 | background: #393b3fa6 !important; 21 | border-radius: 7px !important; 22 | border: 1px solid white !important; 23 | color: white !important; 24 | width: 100% !important; 25 | margin-bottom: 12px !important; 26 | } 27 | 28 | .skill-des > .content > div > .header { 29 | display: flex !important; 30 | justify-content: space-between !important; 31 | flex-wrap: wrap !important; 32 | color: white !important; 33 | } 34 | 35 | .skillcard_container { 36 | display: flex; 37 | justify-content: space-between; 38 | } 39 | 40 | .skillcard_container > div:nth-child(2) { 41 | margin-top: 25px; 42 | } 43 | -------------------------------------------------------------------------------- /src/pages/GetRoutes/GetOrg.css: -------------------------------------------------------------------------------- 1 | .org-card { 2 | width: 70% !important; 3 | margin-left: auto !important; 4 | margin-right: auto !important; 5 | background: #393b3fa6 !important; 6 | border-radius: 7px !important; 7 | border: 1px solid white !important; 8 | box-shadow: 2px 0px 3px 1px white !important; 9 | color: white !important; 10 | } 11 | 12 | .add-employee { 13 | padding: 10px; 14 | float: right; 15 | display: grid; 16 | justify-items: center; 17 | align-items: center; 18 | border: 2px solid rgb(255, 255, 255); 19 | background-color: #393b3fa6; 20 | border-radius: 10px; 21 | box-shadow: inset 0px 0px 10px #c5c6c7; 22 | cursor: pointer; 23 | margin-top: 16px; 24 | color: white; 25 | padding-bottom: 12px; 26 | margin-top: -5px; 27 | } 28 | 29 | .add-employee:hover { 30 | transform: scale(1.1, 1.1); 31 | box-shadow: inset 0px 0px 20px white; 32 | } 33 | 34 | .org-card-heading { 35 | font-family: "Arvo", serif !important; 36 | color: white; 37 | font-size: 25px; 38 | font-weight: 500; 39 | } 40 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 11 | 15 | 16 | 17 | 18 | 19 | 25 | Skillset Verified 26 | 27 | 28 | 29 |
30 | 31 | 32 | -------------------------------------------------------------------------------- /truffle-config.js: -------------------------------------------------------------------------------- 1 | require("babel-register"); 2 | require("babel-polyfill"); 3 | 4 | const HDWalletProvider = require("@truffle/hdwallet-provider"); 5 | const { SEED_PHRASE, INFURA_KEY } = require("./seed-phrase"); 6 | const infuraKey = INFURA_KEY; 7 | const seedPhrase = SEED_PHRASE; 8 | 9 | module.exports = { 10 | networks: { 11 | development: { 12 | host: "127.0.0.1", // Localhost (default: none) 13 | port: 7545, // Standard Ethereum port (default: none) 14 | network_id: "*", // Any network (default: none, 15 | }, 16 | rinkeby: { 17 | provider: () => new HDWalletProvider(seedPhrase, infuraKey), 18 | network_id: 4, 19 | gas: 5500000, 20 | confirmations: 2, 21 | timeoutBlocks: 200000000000000, 22 | skipDryRun: true, 23 | }, 24 | }, 25 | contracts_directory: "./src/contracts/", 26 | contracts_build_directory: "./src/abis/", 27 | compilers: { 28 | solc: { 29 | optimizer: { 30 | enabled: true, 31 | runs: 200, 32 | }, 33 | evmVersion: "petersburg", 34 | }, 35 | }, 36 | plugins: ["truffle-contract-size"], 37 | }; 38 | -------------------------------------------------------------------------------- /src/components/LineChart.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | import { Line } from "react-chartjs-2"; 3 | 4 | export default class LineChart extends Component { 5 | state = { 6 | data: {}, 7 | options: {}, 8 | newdata: {}, 9 | }; 10 | 11 | componentDidMount = () => { 12 | setTimeout(() => { 13 | var data = { 14 | labels: [...Array(this.props.overallEndorsement?.length).keys()], 15 | datasets: [ 16 | { 17 | label: "Endorse Rating Spread", 18 | data: this.props.overallEndorsement, 19 | fill: false, 20 | backgroundColor: "white", 21 | borderColor: "rgba(255,255,255,0.3)", 22 | }, 23 | ], 24 | }; 25 | 26 | var options = { 27 | scales: { 28 | yAxes: [ 29 | { 30 | ticks: { 31 | beginAtZero: true, 32 | }, 33 | }, 34 | ], 35 | }, 36 | }; 37 | this.setState({ 38 | data, 39 | options, 40 | }); 41 | }, 1000); 42 | }; 43 | render() { 44 | return ; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/MetaMaskGuide.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | import { Segment, Button, Image } from "semantic-ui-react"; 3 | 4 | export default class MetaMaskGuide extends Component { 5 | render() { 6 | return ( 7 | 19 | 24 | 25 |

Oops!.. Seems like you do not have metamask extension.

26 |

Please download it to proceed.

27 |

28 | After the metamask set-up , create an account on Rinkeby test 29 | network. 30 |

31 | 32 | 33 | 34 |
35 | ); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/contracts/OrganizationEndorser.sol: -------------------------------------------------------------------------------- 1 | pragma solidity >=0.5.0 <0.9.0; 2 | 3 | contract OrganizationEndorser { 4 | address admin; 5 | string name; 6 | address organization_address; 7 | string description; 8 | string location; 9 | 10 | constructor( 11 | address _admin, 12 | address _organization_address, 13 | string memory _name, 14 | string memory _description, 15 | string memory _location 16 | ) public { 17 | admin = _admin; 18 | name = _name; 19 | organization_address = _organization_address; 20 | description = _description; 21 | location = _location; 22 | } 23 | 24 | function getOrganizationInfo() 25 | public 26 | view 27 | returns ( 28 | string memory, 29 | address, 30 | string memory, 31 | string memory 32 | ) 33 | { 34 | return (name, organization_address, description, location); 35 | } 36 | 37 | address[] allEmployees; 38 | 39 | function addEmployees(address employee_address) public { 40 | require(msg.sender == organization_address); 41 | allEmployees.push(employee_address); 42 | } 43 | 44 | function totalEmployees() public view returns (uint256) { 45 | return allEmployees.length; 46 | } 47 | 48 | function getEmployeeByIndex(uint256 index) public view returns (address) { 49 | return allEmployees[index]; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/contracts/Skills.sol: -------------------------------------------------------------------------------- 1 | pragma solidity >=0.5.0 <0.9.0; 2 | 3 | contract Skills { 4 | mapping(string => address[]) skillmap; 5 | string[] skill; 6 | 7 | function addEmployeeToSkill(string memory _name, address _employee) public { 8 | if (skillmap[_name].length == 0) { 9 | skill.push(_name); 10 | } 11 | skillmap[_name].push(_employee); 12 | } 13 | 14 | function getSkillLength() public view returns (uint256) { 15 | return skill.length; 16 | } 17 | 18 | function getSkillsByIndex(uint256 index) public view returns (string memory) { 19 | return skill[index]; 20 | } 21 | 22 | function getTotalEmployeeInSkillByIndex(uint256 index) 23 | public 24 | view 25 | returns (uint256) 26 | { 27 | return skillmap[skill[index]].length; 28 | } 29 | 30 | function getTotalEmployeeInSkillByName(string memory _name) 31 | public 32 | view 33 | returns (uint256) 34 | { 35 | return skillmap[_name].length; 36 | } 37 | 38 | function getEmployeeInSkillByIndex(uint256 skill_index, uint256 emp_index) 39 | public 40 | view 41 | returns (address) 42 | { 43 | return skillmap[skill[skill_index]][emp_index]; 44 | } 45 | 46 | function getEmployeeBySkillName(string memory _name, uint256 emp_index) 47 | public 48 | view 49 | returns (address) 50 | { 51 | return skillmap[_name][emp_index]; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/components/Search.css: -------------------------------------------------------------------------------- 1 | .searchbar > .results > .result > .content > .title { 2 | float: right !important; 3 | font-weight: 400 !important; 4 | } 5 | 6 | .search-ele { 7 | color: black; 8 | } 9 | 10 | .search-ele > div:nth-child(1) > span { 11 | display: block; 12 | } 13 | 14 | .search-ele > small { 15 | display: block; 16 | } 17 | 18 | .ui.selection.dropdown { 19 | border-radius: 7px !important; 20 | background: #1e2022ea !important; 21 | border: 1px solid white !important; 22 | box-shadow: 0px 0px 1px 0px white !important; 23 | color: white !important; 24 | } 25 | 26 | .ui.default.dropdown:not(.button) > .text, 27 | .ui.dropdown:not(.button) > .default.text { 28 | color: white !important; 29 | } 30 | 31 | .ui.selection.active.dropdown .menu { 32 | background: #1e2022ea !important; 33 | color: white !important; 34 | border-bottom-left-radius: 7px !important; 35 | border-bottom-right-radius: 7px !important; 36 | box-shadow: 0px 0px 1px 0px white !important; 37 | } 38 | 39 | .ui.selection.dropdown .menu > .item { 40 | color: white !important; 41 | border-top: 1px solid white !important; 42 | } 43 | 44 | .ui.dropdown .menu .selected.item, 45 | .ui.dropdown.selected { 46 | color: #1e2022ea !important; 47 | background: white !important; 48 | } 49 | 50 | .ui.selection.visible.dropdown > .text:not(.default) { 51 | color: white !important; 52 | } 53 | 54 | .visible .menu .transition > .selected .item > .text { 55 | color: white !important; 56 | } 57 | -------------------------------------------------------------------------------- /src/pages/GetRoutes/Employee.css: -------------------------------------------------------------------------------- 1 | .personal-info { 2 | background: #393b3fa6 !important; 3 | border-radius: 7px !important; 4 | border: 1px solid white !important; 5 | box-shadow: 0px 0px 1px 0px white !important; 6 | color: white !important; 7 | width: 100% !important; 8 | } 9 | 10 | .personal-info > .content > .header { 11 | display: flex !important; 12 | justify-content: space-between !important; 13 | flex-wrap: wrap !important; 14 | color: white !important; 15 | } 16 | 17 | .personal-info > .content > .header > small { 18 | font-size: 12px !important; 19 | font-weight: 600 !important; 20 | font-style: italic; 21 | } 22 | 23 | .employee-des { 24 | background: #393b3fa6 !important; 25 | border-radius: 7px !important; 26 | border: 1px solid white !important; 27 | box-shadow: 0px 0px 1px 0px white !important; 28 | color: white !important; 29 | width: 100% !important; 30 | } 31 | 32 | .employee-des > .content > .header { 33 | display: flex !important; 34 | justify-content: space-between !important; 35 | flex-wrap: wrap !important; 36 | color: white !important; 37 | } 38 | 39 | .employee-des > .content > .header > small { 40 | font-size: 12px !important; 41 | font-weight: 600 !important; 42 | font-style: italic; 43 | } 44 | 45 | .certification-container { 46 | display: flex; 47 | justify-content: space-between; 48 | margin-bottom: 18px; 49 | } 50 | 51 | .skill-height-container { 52 | max-height: 20rem; 53 | overflow: auto; 54 | } 55 | -------------------------------------------------------------------------------- /src/pages/Employee/Employee.css: -------------------------------------------------------------------------------- 1 | .personal-info { 2 | background: #393b3fa6 !important; 3 | border-radius: 7px !important; 4 | border: 1px solid white !important; 5 | box-shadow: 0px 0px 1px 0px white !important; 6 | color: white !important; 7 | width: 100% !important; 8 | } 9 | 10 | .personal-info > .content > .header { 11 | display: flex !important; 12 | justify-content: space-between !important; 13 | flex-wrap: wrap !important; 14 | color: white !important; 15 | } 16 | 17 | .personal-info > .content > .header > small { 18 | font-size: 12px !important; 19 | font-weight: 600 !important; 20 | font-style: italic; 21 | } 22 | 23 | .employee-des { 24 | background: #393b3fa6 !important; 25 | border-radius: 7px !important; 26 | border: 1px solid white !important; 27 | box-shadow: 0px 0px 1px 0px white !important; 28 | color: white !important; 29 | width: 100% !important; 30 | } 31 | 32 | .employee-des > .content > .header { 33 | display: flex !important; 34 | justify-content: space-between !important; 35 | flex-wrap: wrap !important; 36 | color: white !important; 37 | } 38 | 39 | .employee-des > .content > .header > small { 40 | font-size: 12px !important; 41 | font-weight: 600 !important; 42 | font-style: italic; 43 | } 44 | 45 | .certification-container { 46 | display: flex; 47 | justify-content: space-between; 48 | margin-bottom: 18px; 49 | } 50 | 51 | .skill-height-container { 52 | max-height: 36rem !important; 53 | overflow: auto; 54 | } 55 | -------------------------------------------------------------------------------- /src/components/GenererateQR.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | import QRCode from "qrcode"; 3 | import "./Modals.css"; 4 | import { Button, Header, Modal } from "semantic-ui-react"; 5 | 6 | export default class GenererateQR extends Component { 7 | state = { 8 | qr: "", 9 | }; 10 | 11 | componentDidMount = async () => { 12 | const web3 = window.web3; 13 | const accounts = await web3.eth.getAccounts(); 14 | try { 15 | const res = await QRCode.toDataURL(accounts[0]); 16 | this.setState({ qr: res }); 17 | } catch (err) { 18 | console.log(err); 19 | } 20 | }; 21 | 22 | render() { 23 | return ( 24 | 25 |
31 | 32 | 33 | qr 34 | 35 | 36 | 37 |