Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Mathias Engelbrecht Pilegård
Pipit
Commits
e4f09cae
Commit
e4f09cae
authored
Aug 27, 2021
by
Mathias Engelbrecht Pilegård
Browse files
added redirect to home when oktaAuth detects user as already logged in
parent
47e062ec
Changes
209
Hide whitespace changes
Inline
Side-by-side
client/node_modules/.cache/.eslintcache
View file @
e4f09cae
[{"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\index.js":"1","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\App.jsx":"2","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\home\\Home.jsx":"3","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\reportForm\\ReportForm.jsx":"4","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\project\\projectOverview\\ProjectOverview.jsx":"5","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\team\\teamOverview\\TeamOverview.jsx":"6","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\project\\projectInfo\\ProjectInfo.jsx":"7","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\team\\teamInfo\\TeamInfo.jsx":"8","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\navbar\\Navbar.jsx":"9","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\reportForm\\assign\\Assign.jsx":"10","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\home\\updates\\Updates.jsx":"11","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\project\\projectInfo\\activityChart\\ActivityChart.jsx":"12","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\project\\projectInfo\\activitiesDisplay\\ActivitiesDisplay.jsx":"13","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\navbar\\logo\\Logo.jsx":"14","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\navbar\\dropdownMenu\\NavbarDropdownMenu.jsx":"15","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\navbar\\searchbar\\Searchbar.jsx":"16","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\config.js":"17","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\Messages\\Messages.jsx":"18","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\navbar\\navLinks\\NavLinks.jsx":"19","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\util\\useMessages.jsx":"20","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\util\\useInput.jsx":"21","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\login\\Login.jsx":"22"},{"size":285,"mtime":1628516023915,"results":"23","hashOfConfig":"24"},{"size":2032,"mtime":1629808994420,"results":"25","hashOfConfig":"24"},{"size":1279,"mtime":1629811816643,"results":"26","hashOfConfig":"24"},{"size":3967,"mtime":1628695632288,"results":"27","hashOfConfig":"24"},{"size":3660,"mtime":1629794572456,"results":"28","hashOfConfig":"24"},{"size":2694,"mtime":1628696113184,"results":"29","hashOfConfig":"24"},{"size":1068,"mtime":1628696051327,"results":"30","hashOfConfig":"24"},{"size":2374,"mtime":1628696187694,"results":"31","hashOfConfig":"24"},{"size":906,"mtime":1629790599062,"results":"32","hashOfConfig":"24"},{"size":3264,"mtime":1628535700010,"results":"33","hashOfConfig":"24"},{"size":2334,"mtime":1629123056814,"results":"34","hashOfConfig":"24"},{"size":3570,"mtime":1628430832688,"results":"35","hashOfConfig":"24"},{"size":2096,"mtime":1628430812599,"results":"36","hashOfConfig":"24"},{"size":548,"mtime":1628421916010,"results":"37","hashOfConfig":"24"},{"size":2674,"mtime":1629805727243,"results":"38","hashOfConfig":"24"},{"size":470,"mtime":1628430752153,"results":"39","hashOfConfig":"24"},{"size":473,"mtime":1629901058454,"results":"40","hashOfConfig":"24"},{"size":626,"mtime":1628697746462,"results":"41","hashOfConfig":"24"},{"size":697,"mtime":1628430740299,"results":"42","hashOfConfig":"24"},{"size":1489,"mtime":1629790769379,"results":"43","hashOfConfig":"24"},{"size":324,"mtime":1629371594261,"results":"44","hashOfConfig":"24"},{"size":6686,"mtime":1629901778469,"results":"45","hashOfConfig":"24"},{"filePath":"46","messages":"47","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"48"},"iyhzrm",{"filePath":"49","messages":"50","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"48"},{"filePath":"51","messages":"52","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"48"},{"filePath":"53","messages":"54","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"55","usedDeprecatedRules":"48"},{"filePath":"56","messages":"57","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"58","usedDeprecatedRules":"48"},{"filePath":"59","messages":"60","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"61","usedDeprecatedRules":"48"},{"filePath":"62","messages":"63","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"48"},{"filePath":"64","messages":"65","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"66","usedDeprecatedRules":"48"},{"filePath":"67","messages":"68","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"69","usedDeprecatedRules":"48"},{"filePath":"70","messages":"71","errorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":"72","usedDeprecatedRules":"48"},{"filePath":"73","messages":"74","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"75","usedDeprecatedRules":"48"},{"filePath":"76","messages":"77","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"48"},{"filePath":"78","messages":"79","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"80","usedDeprecatedRules":"48"},{"filePath":"81","messages":"82","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"83","usedDeprecatedRules":"48"},{"filePath":"84","messages":"85","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"86","usedDeprecatedRules":"48"},{"filePath":"87","messages":"88","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"48"},{"filePath":"89","messages":"90","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"91","messages":"92","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"48"},{"filePath":"93","messages":"94","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"48"},{"filePath":"95","messages":"96","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"97","usedDeprecatedRules":"48"},{"filePath":"98","messages":"99","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"100"},{"filePath":"101","messages":"102","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\index.js",[],["103","104"],"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\App.jsx",[],"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\home\\Home.jsx",[],"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\reportForm\\ReportForm.jsx",["105"],"import React, { useState } from 'react'\r\nimport \"./ReportForm.css\"\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport Assign from './assign/Assign'\r\n\r\nconst ReportForm = () => {\r\n return (\r\n <div className=\"page-content-container\">\r\n <h2 className=\"reportissuePageText\">Report an issue</h2>\r\n <form action=\"/reportFormData\">\r\n <div className=\"row\">\r\n <div className=\"col-25\">\r\n <label for=\"fissueType\">Type of issue</label>\r\n </div>\r\n <div className=\"col-75\">\r\n <select id=\"fissueType\" className=\"issueType\">\r\n <option value=\"bug\">Bug</option>\r\n <option value=\"usabilityissue\">Usability error</option>\r\n <option value=\"other\">Other</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-25\">\r\n <label for=\"fissueLocation\">Where did you encounter the issue?</label>\r\n </div>\r\n <div class=\"col-75\">\r\n <input type=\"text\" id=\"fissueLocation\" className=\"issueLocation\" ></input>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-25\">\r\n <label for=\"fissueDescription\">Describe the issue</label>\r\n </div>\r\n <div class=\"col-75\">\r\n <textarea id=\"fissueDescription\" className=\"issueDescription\"></textarea>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-25\">\r\n <label for=\"fissueStepsToTeproduce\">What steps did you take before the issue happened?</label>\r\n </div>\r\n <div class=\"col-75\">\r\n <textarea id=\"fissueStepsToTeproduce\" className=\"issueStepsToReproduce\"\r\n placeholder=\"List the steps that occurred before the issue happened:\r\n1.\r\n2.\r\n3.\r\nExpected Result:\r\nActual Result:\">\r\n </textarea>\r\n </div>\r\n </div>\r\n\r\n <div className=\"row\">\r\n <div className=\"col-25\">\r\n <label for=\"fissueSeverity\">Severity level</label>\r\n </div>\r\n <div className=\"col-75\">\r\n <select id=\"fissueSeverity\" className=\"issueSeverity\">\r\n <option value=\"cosmetic\">Cosmetic - should be corrected when time permits</option>\r\n <option value=\"serious\">Serious - should be corrected in the next release</option>\r\n <option value=\"critical\">Critical - should be corrected as soon as possible</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div className=\"row\">\r\n <div className=\"col-25\">\r\n <label for=\"fissueTimeToCorrect\">Time to Correct</label>\r\n </div>\r\n <div className=\"col-75\">\r\n <select id=\"fissueSeverity\" className=\"issueTimeToCorrect\">\r\n <option value=\"lessThanTwoHours\">Less than 2 minutes</option>\r\n <option value=\"lessThanOneToTwoDays\">Less than 1 or 2 days</option>\r\n <option value=\"lessThanOneToTwoWeeks\">Less than 1 or 2 weeks</option>\r\n <option value=\"atLeastTwoWeeks\">More than 2 weeks</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div className=\"row\">\r\n <div className=\"col-25\">\r\n <label for=\"fissueAssignToProject\">Assign to</label>\r\n </div>\r\n <div className=\"col-75\">\r\n {/*\r\n <select id=\"fissueAssignToProject\" className=\"issueAssignToProject\">\r\n <option value=\"lessThanTwoHours\">Henriks meme machine - ReactApp</option>\r\n </select>\r\n */}\r\n <Assign />\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"row\">\r\n <button className=\"formSubmitButton\" type=\"submit\">\r\n Submit \r\n <FontAwesomeIcon icon=\"arrow-right\"></FontAwesomeIcon>\r\n </button>\r\n </div>\r\n </form>\r\n </div >\r\n )\r\n}\r\n\r\nexport default ReportForm","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\project\\projectOverview\\ProjectOverview.jsx",["106","107"],"import React, { useState } from 'react'\r\nimport { NavLink } from \"react-router-dom\";\r\nimport \"./ProjectOverview.css\"\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nconst ProjectOverview = () => {\r\n const personalProjects = [\r\n { id: \"MyApp\", type: \"personal\" },\r\n { id: \"MyOtherApp\", type: \"personal\" }\r\n ]\r\n\r\n const sharedProjects = [\r\n { id: \"ReactApp\", type: \"shared\", teams: [{ name: \"Henriks Meme Machine\" }, { name: \"Teskeholdet\" }] },\r\n { id: \"Very big ReactApp\", type: \"shared\", teams: [{ name: \"Aubergine\" }] }\r\n ]\r\n\r\n const [sharedProjectsButtonState, setSharedProjectsButtonState] = useState(true);\r\n const [personalProjectsButtonState, setPersonalProjectsButtonState] = useState(false);\r\n\r\n const SharedProjectsButtonActive = () => {\r\n setSharedProjectsButtonState(true);\r\n setPersonalProjectsButtonState(false);\r\n };\r\n\r\n const PersonalProjectsButtonActive = () => {\r\n setSharedProjectsButtonState(false);\r\n setPersonalProjectsButtonState(true);\r\n };\r\n\r\n const ProjectsDisplay = (projects) => {\r\n return (\r\n <div className=\"projectlist\">\r\n <ul>\r\n {projects.map((elements, index) => (\r\n <li>\r\n <div className=\"project-entry\">\r\n <div className=\"project-team-name\">\r\n <NavLink to={`/${projects[index].id}`}>{projects[index].id} \r\n <FontAwesomeIcon className=\"icon\" icon=\"chevron-right\"></FontAwesomeIcon>\r\n </NavLink>\r\n </div>\r\n <div className=\"project-status-info-container\">\r\n <div className=\"new-issues-info\">\r\n <FontAwesomeIcon className=\"icon\" icon=\"bug\"></FontAwesomeIcon>\r\n <p>0</p>\r\n <span className=\"tooltip-text\">Total issues</span>\r\n </div>\r\n <div className=\"issues-solved-info\">\r\n <FontAwesomeIcon className=\"icon\" icon=\"check\"></FontAwesomeIcon>\r\n <p>0</p>\r\n <span className=\"tooltip-text\">Issues solved</span>\r\n </div>\r\n <div className=\"last-updated-info\">\r\n <p>Last updated: 1 day ago</p>\r\n </div>\r\n </div>\r\n </div>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )\r\n }\r\n\r\n return (\r\n <div className=\"page-content-container\">\r\n <div className=\"content-header\">\r\n <h2 className=\"projectlist-title\">Your Projects</h2>\r\n <button className=\"create-new-project-button\">\r\n New Project\r\n </button>\r\n </div>\r\n <div className=\"project-sort-menu-container\">\r\n <div className=\"personal-shared-projects-container\">\r\n <a className={sharedProjectsButtonState ? \"activeUnderlined\" : \"inactive\"} onClick={SharedProjectsButtonActive}>Shared Projects</a>\r\n <a className={personalProjectsButtonState ? \"activeUnderlined\" : \"inactive\"} onClick={PersonalProjectsButtonActive}>Personal Projects</a>\r\n </div>\r\n <div className=\"project-sort-select-container\">\r\n <p>Sort by:</p>\r\n <select>\r\n <option>Last updated</option>\r\n <option>Last created</option>\r\n <option>Name</option>\r\n <option>Name descending</option>\r\n <option>Oldest created</option>\r\n <option>Oldest updated</option>\r\n </select>\r\n </div>\r\n </div>\r\n {sharedProjectsButtonState ? ProjectsDisplay(sharedProjects) : ProjectsDisplay(personalProjects)}\r\n </div >\r\n )\r\n}\r\n\r\nexport default ProjectOverview","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\team\\teamOverview\\TeamOverview.jsx",["108","109"],"import React from 'react'\r\nimport { NavLink } from 'react-router-dom'\r\nimport \"./TeamOverview.css\"\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nconst TeamOverview = () => {\r\n\r\n const personalProjects = [\r\n { id: \"MyApp\", type: \"personal\" },\r\n { id: \"MyOtherApp\", type: \"personal\" }\r\n ]\r\n\r\n const sharedProjects = [\r\n { id: \"ReactApp\", type: \"shared\", teams: [{ name: \"Henriks Meme Machine\" }, { name: \"Teskeholdet\" }] },\r\n { id: \"Very big ReactApp\", type: \"shared\", teams: [{ name: \"Aubergine\" }] }\r\n ]\r\n\r\n return (\r\n <div className=\"page-content-container\">\r\n <div className=\"content-header\">\r\n <h2 className=\"teamlist-title\">Teams</h2>\r\n <div className=\"buttons-container\">\r\n <button className=\"join-team-button\">\r\n Join Team\r\n </button>\r\n <button className=\"create-new-team-button\">\r\n New team\r\n </button>\r\n </div>\r\n </div>\r\n <div className=\"teamlist\">\r\n <ul>\r\n <li>\r\n <div className=\"team-entry\">\r\n <div className=\"image-team-name\">\r\n <NavLink to=\"/HenriksMemeMachine\" className=\"team-image-container\">\r\n <FontAwesomeIcon className=\"team-icon\" icon=\"dice-d6\"></FontAwesomeIcon>\r\n </NavLink>\r\n <NavLink to=\"/HenriksMemeMachine\">Henriks meme machine - ReactApp \r\n <FontAwesomeIcon className=\"icon\" icon=\"chevron-right\"></FontAwesomeIcon>\r\n </NavLink>\r\n </div>\r\n <div className=\"team-status-info-container\">\r\n <div className=\"new-messages-info\">\r\n <FontAwesomeIcon className=\"icon\" icon=\"envelope\"></FontAwesomeIcon>\r\n <p>0</p>\r\n <span className=\"tooltip-text\">New messages</span>\r\n </div>\r\n <div className=\"projects-maintained-info\">\r\n <FontAwesomeIcon className=\"icon\" icon=\"project-diagram\"></FontAwesomeIcon>\r\n <p>0</p>\r\n <span className=\"tooltip-text\">Projects maintained</span>\r\n </div>\r\n <div className=\"team-members-info\">\r\n <FontAwesomeIcon className=\"icon\" icon=\"users\"></FontAwesomeIcon>\r\n <p>0</p>\r\n <span className=\"tooltip-text\">Team members</span>\r\n </div>\r\n <div className=\"last-updated-info\">\r\n <p>Date created: 21/ 07/ 2021</p>\r\n </div>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </div >\r\n )\r\n}\r\n\r\nexport default TeamOverview","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\project\\projectInfo\\ProjectInfo.jsx",[],"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\team\\teamInfo\\TeamInfo.jsx",["110"],"import React, { useRef, useState, useEffect } from 'react'\r\nimport \"./TeamInfo.css\"\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\nconst TeamInfo = () => {\r\n const dropdownRef = useRef(null);\r\n const [isActive, setIsActive] = useState(false);\r\n const onClick = () => setIsActive(!isActive);\r\n\r\n useEffect(() => {\r\n const pageClickEvent = (e) => {\r\n if (dropdownRef.current !== null && !dropdownRef.current.contains(e.target)) {\r\n setIsActive(!isActive);\r\n }\r\n };\r\n\r\n // If the item is active (ie open) then listen for clicks\r\n if (isActive) {\r\n window.addEventListener('click', pageClickEvent);\r\n }\r\n\r\n return () => {\r\n window.removeEventListener('click', pageClickEvent);\r\n }\r\n\r\n }, [isActive]);\r\n\r\n return (\r\n <div className=\"page-content-container\">\r\n <div className=\"teamInformationPage-content-header\">\r\n <div className=\"header-text\">\r\n <h2 className=\"teamInformationPage-title\">Henriks Meme machine > overview</h2>\r\n </div>\r\n <div className=\"header-notification-select-settings-button-container\">\r\n <div className=\"notification-button-container\">\r\n <button className={`notification-button ${isActive ? 'active' : 'inactive'}`} onClick={onClick} >\r\n <FontAwesomeIcon className=\"bell-icon\" icon=\"bell\"></FontAwesomeIcon>\r\n <FontAwesomeIcon className=\"down-arrow\" icon=\"angle-down\"></FontAwesomeIcon>\r\n </button>\r\n <div ref={dropdownRef} className={`user-dropDown-menu-content ${isActive ? 'active' : 'inactive'}`}>\r\n <ul>\r\n <li>\r\n <a>\r\n <FontAwesomeIcon icon=\"user\"></FontAwesomeIcon> Account\r\n <FontAwesomeIcon icon=\"chevron-right\" className=\"arrow-right-icon\"></FontAwesomeIcon>\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div className=\"settings-button-container\">\r\n <button>\r\n <FontAwesomeIcon icon=\"cog\"></FontAwesomeIcon>\r\n Settings\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"teamInformationPage-content-container\">\r\n {/*TODO: components goes here */}\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default TeamInfo","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\navbar\\Navbar.jsx",["111"],"import React from 'react'\r\nimport { useOktaAuth } from '@okta/okta-react';\r\nimport \"./Navbar.css\"\r\nimport Logo from './logo/Logo'\r\nimport NavLinks from './navLinks/NavLinks'\r\nimport Searchbar from './searchbar/Searchbar'\r\nimport NavbarDropdownMenu from './dropdownMenu/NavbarDropdownMenu'\r\n\r\nconst Navbar = () => {\r\n const { authState, oktaAuth } = useOktaAuth();\r\n\r\n if (!authState || !authState.isAuthenticated) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div className=\"navbar\" >\r\n <div className=\"header-content\">\r\n <div className=\"title-navigation-links-container\">\r\n <Logo />\r\n <NavLinks />\r\n </div>\r\n <div className=\"searchbar-profile-container\">\r\n <ul className=\"right-unstyled-navbar\">\r\n <Searchbar />\r\n <NavbarDropdownMenu />\r\n </ul>\r\n </div>\r\n </div>\r\n </div >\r\n )\r\n}\r\n\r\nexport default Navbar","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\reportForm\\assign\\Assign.jsx",["112","113","114","115","116","117"],"import React, { useState } from 'react'\r\nimport \"./Assign.css\"\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nconst Assign = () => {\r\n const personalProjects = [\r\n { id: \"MyApp\", type: \"personal\" },\r\n { id: \"MyOtherApp\", type: \"personal\" }\r\n ]\r\n\r\n const sharedProjects = [\r\n { id: \"ReactApp\", type: \"shared\", teams: [{ name: \"Henriks Meme Machine\" }, { name: \"Teskeholdet\" }] },\r\n { id: \"Very big ReactApp\", type: \"shared\", teams: [{ name: \"Aubergine\" }] }\r\n ]\r\n\r\n\r\n const rootDirectoryObjects = [\r\n { id: \"Personal projects\" },\r\n { id: \"Shared projects\" }\r\n ]\r\n\r\n const DirectoryItems = () => {\r\n return (\r\n <div className=\"multi-level\">\r\n <div className=\"item\">\r\n <input type=\"checkbox\" id=\"A\" />\r\n <label for=\"A\">\r\n <FontAwesomeIcon icon=\"folder\" className=\"folder-icon\"></FontAwesomeIcon>\r\n <a> {rootDirectoryObjects[0].id} </a>\r\n <FontAwesomeIcon icon=\"chevron-right\" className=\"arrow-right-icon\"></FontAwesomeIcon>\r\n </label>\r\n\r\n <ul>\r\n {personalProjects.map((elements, index) => (\r\n <li className=\"personalProjectsItem\">\r\n <input type=\"checkbox\" id={`A-${index}`} />\r\n <label for={`A-${index}`}>\r\n <FontAwesomeIcon icon=\"angle-right\" className=\"project-icon\"></FontAwesomeIcon>\r\n <a> {personalProjects[index].id} </a>\r\n </label>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n\r\n <div className=\"item\">\r\n <input type=\"checkbox\" id=\"B\" />\r\n <label for=\"B\">\r\n <FontAwesomeIcon icon=\"folder\" className=\"folder-icon\"></FontAwesomeIcon>\r\n <a> {rootDirectoryObjects[1].id} </a>\r\n <FontAwesomeIcon icon=\"chevron-right\" className=\"arrow-right-icon\"></FontAwesomeIcon>\r\n </label>\r\n\r\n <ul>\r\n {sharedProjects.map((elements, index) => (\r\n <li><div className=\"sub-item\">\r\n <input type=\"checkbox\" id={`B-${index}`} />\r\n <label for={`B-${index}`}>\r\n <FontAwesomeIcon icon=\"folder\" className=\"folder-icon\"></FontAwesomeIcon>\r\n <a> {sharedProjects[index].id} </a>\r\n <FontAwesomeIcon icon=\"chevron-right\" className=\"arrow-right-icon\"></FontAwesomeIcon>\r\n </label>\r\n\r\n <ul>\r\n {sharedProjects[index].teams.map(team => (\r\n <li><div className=\"team-item\">\r\n <input type=\"checkbox\" id={`team-${team.name}`} />\r\n <label for={`team-${team.name}`}>\r\n <FontAwesomeIcon icon=\"users\" className=\"users-icon\"></FontAwesomeIcon>\r\n <a> {team.name} </a>\r\n </label>\r\n </div>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n )\r\n }\r\n\r\n return (\r\n <div className=\"assignSelectContainer\">\r\n <DirectoryItems />\r\n </div >\r\n )\r\n}\r\n\r\nexport default Assign","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\home\\updates\\Updates.jsx",["118","119","120","121"],"import React from 'react'\r\nimport \"./Updates.css\"\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport useMessages from '../../../util/useMessages'\r\n\r\nconst Updates = () => {\r\n const messages = useMessages()\r\n\r\n return (\r\n <div className=\"project-updates-new-messages-container\">\r\n\r\n <div className=\"project-updates-display-container\">\r\n <div className=\"project-updates-display-header\">\r\n <p>\r\n <FontAwesomeIcon icon=\"exclamation\"></FontAwesomeIcon>\r\n New project updates\r\n </p>\r\n </div>\r\n <div className=\"project-updates-display-content\">\r\n <div className=\"project-update-entry\">\r\n <div className=\"entry-text\">\r\n <div className=\"upper-row\">\r\n <a>\r\n [project] [new issues] [issues fixed]\r\n </a>\r\n </div>\r\n <div className=\"bottom-row\">\r\n <a>\r\n [team] [time]\r\n </a>\r\n </div>\r\n </div>\r\n <div>\r\n <FontAwesomeIcon className=\"entry-icon\" icon=\"chevron-right\"></FontAwesomeIcon>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"new-messages-display-container\">\r\n <div className=\"new-messages-display-header\">\r\n <p>\r\n <FontAwesomeIcon icon=\"envelope\"></FontAwesomeIcon>\r\n New messages\r\n </p>\r\n </div>\r\n {messages ? messages.map((message) => (\r\n <div className=\"new-messages-display-content\">\r\n <div className=\"new-message-entry\">\r\n <div className=\"entry-text\">\r\n <div className=\"upper-row\">\r\n <a>\r\n [{message.sender}] [{message.id}]\r\n </a>\r\n </div>\r\n <div className=\"bottom-row\">\r\n <a>\r\n [team] [{message.date}]\r\n </a>\r\n </div>\r\n </div>\r\n <div>\r\n <FontAwesomeIcon className=\"entry-icon\" icon=\"chevron-right\"></FontAwesomeIcon>\r\n </div>\r\n </div>\r\n </div>\r\n )) : \"Loading messages\"}\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default Updates","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\project\\projectInfo\\activityChart\\ActivityChart.jsx",[],"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\project\\projectInfo\\activitiesDisplay\\ActivitiesDisplay.jsx",["122","123","124","125"],"import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport React from 'react'\r\nimport \"./ActivitiesDisplay.css\"\r\n\r\nconst ActivitiesDisplay = () => {\r\n return (\r\n <div className=\"activity-new-issues-display-container\">\r\n\r\n <div className=\"new-issues-display-container\">\r\n <div className=\"new-issues-display-header\">\r\n <p>\r\n <FontAwesomeIcon icon=\"inbox\"></FontAwesomeIcon>\r\n New issue reports\r\n </p>\r\n </div>\r\n <div className=\"new-issues-display-content\">\r\n <div className=\"new-issue-report-entry\">\r\n <div className=\"entry-text\">\r\n <div className=\"upper-row\">\r\n <a>\r\n [Severity] [type]\r\n </a>\r\n </div>\r\n <div className=\"bottom-row\">\r\n <a>\r\n [project] [time]\r\n </a>\r\n </div>\r\n </div>\r\n <div>\r\n <FontAwesomeIcon className=\"entry-icon\" icon=\"chevron-right\"></FontAwesomeIcon>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"activity-display-container\">\r\n <div className=\"activity-display-header\">\r\n <p>\r\n <FontAwesomeIcon icon=\"sticky-note\"></FontAwesomeIcon>\r\n Recent Team activities\r\n </p>\r\n </div>\r\n <div className=\"activity-display-content\">\r\n <div className=\"new-issue-report-entry\">\r\n <div className=\"entry-text\">\r\n <div className=\"upper-row\">\r\n <a>\r\n [Name] [action]\r\n </a>\r\n </div>\r\n <div className=\"bottom-row\">\r\n <a>\r\n [project] [time]\r\n </a>\r\n </div>\r\n </div>\r\n <div>\r\n <FontAwesomeIcon className=\"entry-icon\" icon=\"chevron-right\"></FontAwesomeIcon>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default ActivitiesDisplay","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\navbar\\logo\\Logo.jsx",["126","127"],"import React from 'react'\r\nimport { NavLink } from 'react-router-dom'\r\nimport \"./Logo.css\"\r\nimport logo_picture from \"../../../images/bird-logo.jpg\"\r\nimport logo_text from \"../../../images/logo-text.jpg\"\r\n\r\nconst Logo = () => {\r\n return (\r\n <h1 className=\"title\">\r\n <span className=\"title-icon\">\r\n <NavLink to=\"/home\" id=\"logo\">\r\n <img src={logo_picture} width=\"24\" height=\"24\"></img>\r\n <img src={logo_text} width=\"48\" height=\"24\"></img>\r\n </NavLink>\r\n </span>\r\n </h1>\r\n )\r\n}\r\n\r\nexport default Logo","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\navbar\\dropdownMenu\\NavbarDropdownMenu.jsx",["128","129"],"import React, { useRef, useState, useEffect } from 'react'\r\nimport { NavLink } from \"react-router-dom\";\r\nimport { useOktaAuth } from '@okta/okta-react';\r\nimport \"./NavbarDropdownMenu.css\"\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\n\r\nconst DropdownMenu = () => {\r\n const { authState, oktaAuth } = useOktaAuth();\r\n\r\n const dropdownRef = useRef(null);\r\n const [isActive, setIsActive] = useState(false);\r\n const onClick = () => setIsActive(!isActive);\r\n\r\n useEffect(() => {\r\n const pageClickEvent = (e) => {\r\n if (dropdownRef.current !== null && !dropdownRef.current.contains(e.target)) {\r\n setIsActive(!isActive);\r\n }\r\n };\r\n\r\n // If the item is active (ie open) then listen for clicks\r\n if (isActive) {\r\n window.addEventListener('click', pageClickEvent);\r\n }\r\n\r\n return () => {\r\n window.removeEventListener('click', pageClickEvent);\r\n }\r\n\r\n }, [isActive]);\r\n\r\n const logout = () => {\r\n oktaAuth.signOut()\r\n }\r\n\r\n return (\r\n <li>\r\n <div className=\"navbar-user-dropdown-container\">\r\n <button className={`user-dropdown-menu-toggle-button ${isActive ? 'active' : 'inactive'}`} onClick={onClick} >\r\n <FontAwesomeIcon className=\"user-icon\" icon=\"user-circle\"></FontAwesomeIcon>\r\n <FontAwesomeIcon className=\"down-arrow\" icon=\"angle-down\"></FontAwesomeIcon>\r\n </button>\r\n {/* show submenu?*/}\r\n <div ref={dropdownRef} className={`user-dropDown-menu-content ${isActive ? 'active' : 'inactive'}`}>\r\n <ul>\r\n <li>\r\n <a href=\"./\">\r\n <FontAwesomeIcon icon=\"user\"></FontAwesomeIcon> Account\r\n <FontAwesomeIcon icon=\"chevron-right\" className=\"arrow-right-icon\"></FontAwesomeIcon>\r\n </a>\r\n </li>\r\n <li>\r\n <NavLink to=\"/messages\">\r\n <FontAwesomeIcon icon=\"envelope\"></FontAwesomeIcon> Messages\r\n <FontAwesomeIcon icon=\"chevron-right\" className=\"arrow-right-icon\"></FontAwesomeIcon>\r\n </NavLink>\r\n </li>\r\n <li>\r\n <a href=\"./\">\r\n <FontAwesomeIcon icon=\"sliders-h\"></FontAwesomeIcon> Preferences\r\n <FontAwesomeIcon icon=\"chevron-right\" className=\"arrow-right-icon\"></FontAwesomeIcon>\r\n </a>\r\n </li>\r\n <li>\r\n <a onClick={logout}>\r\n <FontAwesomeIcon icon=\"sign-out-alt\"></FontAwesomeIcon> Log out\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </li >\r\n )\r\n}\r\n\r\nexport default DropdownMenu","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\navbar\\searchbar\\Searchbar.jsx",[],"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\config.js",["130"],"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\Messages\\Messages.jsx",[],"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\navbar\\navLinks\\NavLinks.jsx",[],"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\util\\useMessages.jsx",["131"],"import { useState, useEffect } from 'react';\r\nimport { useOktaAuth } from '@okta/okta-react';\r\n\r\nimport config from \"../config\"\r\n\r\nconst useMessages = () => {\r\n const { authState, oktaAuth } = useOktaAuth();\r\n const [messages, setMessages] = useState(null);\r\n\r\n // fetch messages\r\n useEffect(() => {\r\n if (authState && authState.isAuthenticated) {\r\n const accessToken = oktaAuth.getAccessToken();\r\n fetch(config.serviceAPI.messagesURL, {\r\n method: 'GET',\r\n headers: {\r\n Authorization: `Bearer ${accessToken}`,\r\n },\r\n })\r\n .then((response) => {\r\n if (!response.ok) {\r\n return Promise.reject();\r\n }\r\n return response.json();\r\n })\r\n .then((data) => {\r\n let index = 0;\r\n const formattedMessages = data.messages.map((message) => {\r\n const date = new Date(message.date);\r\n const day = date.toLocaleDateString();\r\n const time = date.toLocaleTimeString();\r\n index += 1;\r\n return {\r\n date: `${day} ${time}`,\r\n sender: message.sender,\r\n text: message.text,\r\n id: `message-${index}`,\r\n };\r\n });\r\n setMessages(formattedMessages);\r\n })\r\n .catch((err) => {\r\n /* eslint-disable no-console */\r\n console.error(err);\r\n });\r\n }\r\n }, [authState]);\r\n\r\n return messages\r\n}\r\n\r\nexport default useMessages","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\util\\useInput.jsx",[],["132","133"],"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\login\\Login.jsx",["134","135","136","137"],{"ruleId":"138","replacedBy":"139"},{"ruleId":"140","replacedBy":"141"},{"ruleId":"142","severity":1,"message":"143","line":1,"column":17,"nodeType":"144","messageId":"145","endLine":1,"endColumn":25},{"ruleId":"146","severity":1,"message":"147","line":75,"column":11,"nodeType":"148","endLine":75,"endColumn":123},{"ruleId":"146","severity":1,"message":"147","line":76,"column":11,"nodeType":"148","endLine":76,"endColumn":127},{"ruleId":"142","severity":1,"message":"149","line":8,"column":9,"nodeType":"144","messageId":"145","endLine":8,"endColumn":25},{"ruleId":"142","severity":1,"message":"150","line":13,"column":9,"nodeType":"144","messageId":"145","endLine":13,"endColumn":23},{"ruleId":"146","severity":1,"message":"147","line":43,"column":19,"nodeType":"148","endLine":43,"endColumn":22},{"ruleId":"142","severity":1,"message":"151","line":10,"column":22,"nodeType":"144","messageId":"145","endLine":10,"endColumn":30},{"ruleId":"142","severity":1,"message":"143","line":1,"column":17,"nodeType":"144","messageId":"145","endLine":1,"endColumn":25},{"ruleId":"146","severity":1,"message":"147","line":29,"column":13,"nodeType":"148","endLine":29,"endColumn":16},{"ruleId":"146","severity":1,"message":"147","line":39,"column":19,"nodeType":"148","endLine":39,"endColumn":22},{"ruleId":"146","severity":1,"message":"147","line":50,"column":13,"nodeType":"148","endLine":50,"endColumn":16},{"ruleId":"146","severity":1,"message":"147","line":60,"column":19,"nodeType":"148","endLine":60,"endColumn":22},{"ruleId":"146","severity":1,"message":"147","line":70,"column":25,"nodeType":"148","endLine":70,"endColumn":28},{"ruleId":"146","severity":1,"message":"147","line":23,"column":17,"nodeType":"148","endLine":23,"endColumn":20},{"ruleId":"146","severity":1,"message":"147","line":28,"column":17,"nodeType":"148","endLine":28,"endColumn":20},{"ruleId":"146","severity":1,"message":"147","line":52,"column":19,"nodeType":"148","endLine":52,"endColumn":22},{"ruleId":"146","severity":1,"message":"147","line":57,"column":19,"nodeType":"148","endLine":57,"endColumn":22},{"ruleId":"146","severity":1,"message":"147","line":20,"column":17,"nodeType":"148","endLine":20,"endColumn":20},{"ruleId":"146","severity":1,"message":"147","line":25,"column":17,"nodeType":"148","endLine":25,"endColumn":20},{"ruleId":"146","severity":1,"message":"147","line":48,"column":17,"nodeType":"148","endLine":48,"endColumn":20},{"ruleId":"146","severity":1,"message":"147","line":53,"column":17,"nodeType":"148","endLine":53,"endColumn":20},{"ruleId":"152","severity":1,"message":"153","line":12,"column":11,"nodeType":"148","endLine":12,"endColumn":58},{"ruleId":"152","severity":1,"message":"153","line":13,"column":11,"nodeType":"148","endLine":13,"endColumn":55},{"ruleId":"142","severity":1,"message":"154","line":9,"column":11,"nodeType":"144","messageId":"145","endLine":9,"endColumn":20},{"ruleId":"146","severity":1,"message":"147","line":66,"column":15,"nodeType":"148","endLine":66,"endColumn":35},{"ruleId":"155","severity":1,"message":"156","line":1,"column":1,"nodeType":"157","endLine":14,"endColumn":3},{"ruleId":"158","severity":1,"message":"159","line":47,"column":6,"nodeType":"160","endLine":47,"endColumn":17,"suggestions":"161"},{"ruleId":"138","replacedBy":"162"},{"ruleId":"140","replacedBy":"163"},{"ruleId":"142","severity":1,"message":"164","line":5,"column":10,"nodeType":"144","messageId":"145","endLine":5,"endColumn":17},{"ruleId":"158","severity":1,"message":"165","line":43,"column":6,"nodeType":"160","endLine":43,"endColumn":33,"suggestions":"166"},{"ruleId":"167","severity":1,"message":"168","line":113,"column":19,"nodeType":"169","messageId":"170","endLine":113,"endColumn":21},{"ruleId":"146","severity":1,"message":"147","line":214,"column":13,"nodeType":"148","endLine":214,"endColumn":46},"no-native-reassign",["171"],"no-negated-in-lhs",["172"],"no-unused-vars","'useState' is defined but never used.","Identifier","unusedVar","jsx-a11y/anchor-is-valid","The href attribute is required for an anchor to be keyboard accessible. Provide a valid, navigable address as the href value. If you cannot provide an href, but still need the element to resemble a link, use a button and change it with appropriate styles. Learn more: https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-is-valid.md","JSXOpeningElement","'personalProjects' is assigned a value but never used.","'sharedProjects' is assigned a value but never used.","'oktaAuth' is assigned a value but never used.","jsx-a11y/alt-text","img elements must have an alt prop, either with meaningful text, or an empty string for decorative images.","'authState' is assigned a value but never used.","import/no-anonymous-default-export","Assign object to a variable before exporting as module default","ExportDefaultDeclaration","react-hooks/exhaustive-deps","React Hook useEffect has a missing dependency: 'oktaAuth'. Either include it or remove the dependency array.","ArrayExpression",["173"],["171"],["172"],"'NavLink' is defined but never used.","React Hook useEffect has a missing dependency: 'toggleSignInFormVisible'. Either include it or remove the dependency array.",["174"],"eqeqeq","Expected '===' and instead saw '=='.","BinaryExpression","unexpected","no-global-assign","no-unsafe-negation",{"desc":"175","fix":"176"},{"desc":"177","fix":"178"},"Update the dependencies array to be: [authState, oktaAuth]",{"range":"179","text":"180"},"Update the dependencies array to be: [signUpFormVisibilityState, toggleSignInFormVisible]",{"range":"181","text":"182"},[1422,1433],"[authState, oktaAuth]",[1438,1465],"[signUpFormVisibilityState, toggleSignInFormVisible]"]
\ No newline at end of file
[{"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\index.js":"1","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\App.jsx":"2","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\config.js":"3","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\util\\useMessages.jsx":"4","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\util\\useInput.jsx":"5","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\login\\Login.jsx":"6","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\Messages\\Messages.jsx":"7","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\reportForm\\ReportForm.jsx":"8","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\home\\Home.jsx":"9","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\project\\projectInfo\\ProjectInfo.jsx":"10","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\project\\projectOverview\\ProjectOverview.jsx":"11","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\team\\teamInfo\\TeamInfo.jsx":"12","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\team\\teamOverview\\TeamOverview.jsx":"13","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\reportForm\\assign\\Assign.jsx":"14","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\home\\updates\\Updates.jsx":"15","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\project\\projectInfo\\activitiesDisplay\\ActivitiesDisplay.jsx":"16","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\project\\projectInfo\\activityChart\\ActivityChart.jsx":"17","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\navbar\\Navbar.jsx":"18","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\navbar\\logo\\Logo.jsx":"19","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\navbar\\navLinks\\NavLinks.jsx":"20","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\navbar\\searchbar\\Searchbar.jsx":"21","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\navbar\\dropdownMenu\\NavbarDropdownMenu.jsx":"22"},{"size":285,"mtime":1628516023915,"results":"23","hashOfConfig":"24"},{"size":1992,"mtime":1630072666589,"results":"25","hashOfConfig":"24"},{"size":473,"mtime":1629901058454,"results":"26","hashOfConfig":"24"},{"size":1489,"mtime":1629790769379,"results":"27","hashOfConfig":"24"},{"size":324,"mtime":1629371594261,"results":"28","hashOfConfig":"24"},{"size":7014,"mtime":1630074315128,"results":"29","hashOfConfig":"24"},{"size":626,"mtime":1628697746462,"results":"30","hashOfConfig":"24"},{"size":3967,"mtime":1628695632288,"results":"31","hashOfConfig":"24"},{"size":1279,"mtime":1630071855704,"results":"32","hashOfConfig":"24"},{"size":1068,"mtime":1628696051327,"results":"33","hashOfConfig":"24"},{"size":3660,"mtime":1629794572456,"results":"34","hashOfConfig":"24"},{"size":2374,"mtime":1628696187694,"results":"35","hashOfConfig":"24"},{"size":2694,"mtime":1628696113184,"results":"36","hashOfConfig":"24"},{"size":3264,"mtime":1628535700010,"results":"37","hashOfConfig":"24"},{"size":2334,"mtime":1630060568411,"results":"38","hashOfConfig":"24"},{"size":2096,"mtime":1628430812599,"results":"39","hashOfConfig":"24"},{"size":3570,"mtime":1628430832688,"results":"40","hashOfConfig":"24"},{"size":906,"mtime":1630073002522,"results":"41","hashOfConfig":"24"},{"size":548,"mtime":1628421916010,"results":"42","hashOfConfig":"24"},{"size":697,"mtime":1628430740299,"results":"43","hashOfConfig":"24"},{"size":470,"mtime":1628430752153,"results":"44","hashOfConfig":"24"},{"size":3533,"mtime":1630069281308,"results":"45","hashOfConfig":"24"},{"filePath":"46","messages":"47","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"48"},"iyhzrm",{"filePath":"49","messages":"50","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"51","messages":"52","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"53","usedDeprecatedRules":"48"},{"filePath":"54","messages":"55","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"56","usedDeprecatedRules":"48"},{"filePath":"57","messages":"58","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"59"},{"filePath":"60","messages":"61","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"62","messages":"63","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"48"},{"filePath":"64","messages":"65","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"66","usedDeprecatedRules":"48"},{"filePath":"67","messages":"68","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"48"},{"filePath":"69","messages":"70","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"48"},{"filePath":"71","messages":"72","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"73","usedDeprecatedRules":"48"},{"filePath":"74","messages":"75","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"76","usedDeprecatedRules":"48"},{"filePath":"77","messages":"78","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"79","usedDeprecatedRules":"48"},{"filePath":"80","messages":"81","errorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":"82","usedDeprecatedRules":"48"},{"filePath":"83","messages":"84","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"85","usedDeprecatedRules":"48"},{"filePath":"86","messages":"87","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"88","usedDeprecatedRules":"48"},{"filePath":"89","messages":"90","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"48"},{"filePath":"91","messages":"92","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"93","messages":"94","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"95","usedDeprecatedRules":"48"},{"filePath":"96","messages":"97","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"48"},{"filePath":"98","messages":"99","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"48"},{"filePath":"100","messages":"101","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"102","usedDeprecatedRules":"48"},"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\index.js",[],["103","104"],"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\App.jsx",[],"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\config.js",["105"],"export default {\r\n oidc: {\r\n clientId: '0oa1f4zfeiiZPB6DF5d7',\r\n issuer: 'https://dev-91882654.okta.com/oauth2/default',\r\n redirectUri: window.location.origin + '/login/callback',\r\n scopes: ['openid', 'profile', 'email'],\r\n pkce: true\r\n },\r\n serviceAPI: {\r\n messagesURL: 'http://localhost:3030/api/messages',\r\n createNewUserURL: 'http://localhost:3030/api/create-user',\r\n resetPasswordURL: 'http://localhost:3030/api/reset-user-password'\r\n }\r\n};","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\util\\useMessages.jsx",["106"],"import { useState, useEffect } from 'react';\r\nimport { useOktaAuth } from '@okta/okta-react';\r\n\r\nimport config from \"../config\"\r\n\r\nconst useMessages = () => {\r\n const { authState, oktaAuth } = useOktaAuth();\r\n const [messages, setMessages] = useState(null);\r\n\r\n // fetch messages\r\n useEffect(() => {\r\n if (authState && authState.isAuthenticated) {\r\n const accessToken = oktaAuth.getAccessToken();\r\n fetch(config.serviceAPI.messagesURL, {\r\n method: 'GET',\r\n headers: {\r\n Authorization: `Bearer ${accessToken}`,\r\n },\r\n })\r\n .then((response) => {\r\n if (!response.ok) {\r\n return Promise.reject();\r\n }\r\n return response.json();\r\n })\r\n .then((data) => {\r\n let index = 0;\r\n const formattedMessages = data.messages.map((message) => {\r\n const date = new Date(message.date);\r\n const day = date.toLocaleDateString();\r\n const time = date.toLocaleTimeString();\r\n index += 1;\r\n return {\r\n date: `${day} ${time}`,\r\n sender: message.sender,\r\n text: message.text,\r\n id: `message-${index}`,\r\n };\r\n });\r\n setMessages(formattedMessages);\r\n })\r\n .catch((err) => {\r\n /* eslint-disable no-console */\r\n console.error(err);\r\n });\r\n }\r\n }, [authState]);\r\n\r\n return messages\r\n}\r\n\r\nexport default useMessages","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\util\\useInput.jsx",[],["107","108"],"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\login\\Login.jsx",["109","110","111","112"],"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\Messages\\Messages.jsx",[],"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\reportForm\\ReportForm.jsx",["113"],"import React, { useState } from 'react'\r\nimport \"./ReportForm.css\"\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport Assign from './assign/Assign'\r\n\r\nconst ReportForm = () => {\r\n return (\r\n <div className=\"page-content-container\">\r\n <h2 className=\"reportissuePageText\">Report an issue</h2>\r\n <form action=\"/reportFormData\">\r\n <div className=\"row\">\r\n <div className=\"col-25\">\r\n <label for=\"fissueType\">Type of issue</label>\r\n </div>\r\n <div className=\"col-75\">\r\n <select id=\"fissueType\" className=\"issueType\">\r\n <option value=\"bug\">Bug</option>\r\n <option value=\"usabilityissue\">Usability error</option>\r\n <option value=\"other\">Other</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-25\">\r\n <label for=\"fissueLocation\">Where did you encounter the issue?</label>\r\n </div>\r\n <div class=\"col-75\">\r\n <input type=\"text\" id=\"fissueLocation\" className=\"issueLocation\" ></input>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-25\">\r\n <label for=\"fissueDescription\">Describe the issue</label>\r\n </div>\r\n <div class=\"col-75\">\r\n <textarea id=\"fissueDescription\" className=\"issueDescription\"></textarea>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-25\">\r\n <label for=\"fissueStepsToTeproduce\">What steps did you take before the issue happened?</label>\r\n </div>\r\n <div class=\"col-75\">\r\n <textarea id=\"fissueStepsToTeproduce\" className=\"issueStepsToReproduce\"\r\n placeholder=\"List the steps that occurred before the issue happened:\r\n1.\r\n2.\r\n3.\r\nExpected Result:\r\nActual Result:\">\r\n </textarea>\r\n </div>\r\n </div>\r\n\r\n <div className=\"row\">\r\n <div className=\"col-25\">\r\n <label for=\"fissueSeverity\">Severity level</label>\r\n </div>\r\n <div className=\"col-75\">\r\n <select id=\"fissueSeverity\" className=\"issueSeverity\">\r\n <option value=\"cosmetic\">Cosmetic - should be corrected when time permits</option>\r\n <option value=\"serious\">Serious - should be corrected in the next release</option>\r\n <option value=\"critical\">Critical - should be corrected as soon as possible</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div className=\"row\">\r\n <div className=\"col-25\">\r\n <label for=\"fissueTimeToCorrect\">Time to Correct</label>\r\n </div>\r\n <div className=\"col-75\">\r\n <select id=\"fissueSeverity\" className=\"issueTimeToCorrect\">\r\n <option value=\"lessThanTwoHours\">Less than 2 minutes</option>\r\n <option value=\"lessThanOneToTwoDays\">Less than 1 or 2 days</option>\r\n <option value=\"lessThanOneToTwoWeeks\">Less than 1 or 2 weeks</option>\r\n <option value=\"atLeastTwoWeeks\">More than 2 weeks</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div className=\"row\">\r\n <div className=\"col-25\">\r\n <label for=\"fissueAssignToProject\">Assign to</label>\r\n </div>\r\n <div className=\"col-75\">\r\n {/*\r\n <select id=\"fissueAssignToProject\" className=\"issueAssignToProject\">\r\n <option value=\"lessThanTwoHours\">Henriks meme machine - ReactApp</option>\r\n </select>\r\n */}\r\n <Assign />\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"row\">\r\n <button className=\"formSubmitButton\" type=\"submit\">\r\n Submit \r\n <FontAwesomeIcon icon=\"arrow-right\"></FontAwesomeIcon>\r\n </button>\r\n </div>\r\n </form>\r\n </div >\r\n )\r\n}\r\n\r\nexport default ReportForm","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\home\\Home.jsx",[],"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\project\\projectInfo\\ProjectInfo.jsx",[],"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\project\\projectOverview\\ProjectOverview.jsx",["114","115"],"import React, { useState } from 'react'\r\nimport { NavLink } from \"react-router-dom\";\r\nimport \"./ProjectOverview.css\"\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nconst ProjectOverview = () => {\r\n const personalProjects = [\r\n { id: \"MyApp\", type: \"personal\" },\r\n { id: \"MyOtherApp\", type: \"personal\" }\r\n ]\r\n\r\n const sharedProjects = [\r\n { id: \"ReactApp\", type: \"shared\", teams: [{ name: \"Henriks Meme Machine\" }, { name: \"Teskeholdet\" }] },\r\n { id: \"Very big ReactApp\", type: \"shared\", teams: [{ name: \"Aubergine\" }] }\r\n ]\r\n\r\n const [sharedProjectsButtonState, setSharedProjectsButtonState] = useState(true);\r\n const [personalProjectsButtonState, setPersonalProjectsButtonState] = useState(false);\r\n\r\n const SharedProjectsButtonActive = () => {\r\n setSharedProjectsButtonState(true);\r\n setPersonalProjectsButtonState(false);\r\n };\r\n\r\n const PersonalProjectsButtonActive = () => {\r\n setSharedProjectsButtonState(false);\r\n setPersonalProjectsButtonState(true);\r\n };\r\n\r\n const ProjectsDisplay = (projects) => {\r\n return (\r\n <div className=\"projectlist\">\r\n <ul>\r\n {projects.map((elements, index) => (\r\n <li>\r\n <div className=\"project-entry\">\r\n <div className=\"project-team-name\">\r\n <NavLink to={`/${projects[index].id}`}>{projects[index].id} \r\n <FontAwesomeIcon className=\"icon\" icon=\"chevron-right\"></FontAwesomeIcon>\r\n </NavLink>\r\n </div>\r\n <div className=\"project-status-info-container\">\r\n <div className=\"new-issues-info\">\r\n <FontAwesomeIcon className=\"icon\" icon=\"bug\"></FontAwesomeIcon>\r\n <p>0</p>\r\n <span className=\"tooltip-text\">Total issues</span>\r\n </div>\r\n <div className=\"issues-solved-info\">\r\n <FontAwesomeIcon className=\"icon\" icon=\"check\"></FontAwesomeIcon>\r\n <p>0</p>\r\n <span className=\"tooltip-text\">Issues solved</span>\r\n </div>\r\n <div className=\"last-updated-info\">\r\n <p>Last updated: 1 day ago</p>\r\n </div>\r\n </div>\r\n </div>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )\r\n }\r\n\r\n return (\r\n <div className=\"page-content-container\">\r\n <div className=\"content-header\">\r\n <h2 className=\"projectlist-title\">Your Projects</h2>\r\n <button className=\"create-new-project-button\">\r\n New Project\r\n </button>\r\n </div>\r\n <div className=\"project-sort-menu-container\">\r\n <div className=\"personal-shared-projects-container\">\r\n <a className={sharedProjectsButtonState ? \"activeUnderlined\" : \"inactive\"} onClick={SharedProjectsButtonActive}>Shared Projects</a>\r\n <a className={personalProjectsButtonState ? \"activeUnderlined\" : \"inactive\"} onClick={PersonalProjectsButtonActive}>Personal Projects</a>\r\n </div>\r\n <div className=\"project-sort-select-container\">\r\n <p>Sort by:</p>\r\n <select>\r\n <option>Last updated</option>\r\n <option>Last created</option>\r\n <option>Name</option>\r\n <option>Name descending</option>\r\n <option>Oldest created</option>\r\n <option>Oldest updated</option>\r\n </select>\r\n </div>\r\n </div>\r\n {sharedProjectsButtonState ? ProjectsDisplay(sharedProjects) : ProjectsDisplay(personalProjects)}\r\n </div >\r\n )\r\n}\r\n\r\nexport default ProjectOverview","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\team\\teamInfo\\TeamInfo.jsx",["116"],"import React, { useRef, useState, useEffect } from 'react'\r\nimport \"./TeamInfo.css\"\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\nconst TeamInfo = () => {\r\n const dropdownRef = useRef(null);\r\n const [isActive, setIsActive] = useState(false);\r\n const onClick = () => setIsActive(!isActive);\r\n\r\n useEffect(() => {\r\n const pageClickEvent = (e) => {\r\n if (dropdownRef.current !== null && !dropdownRef.current.contains(e.target)) {\r\n setIsActive(!isActive);\r\n }\r\n };\r\n\r\n // If the item is active (ie open) then listen for clicks\r\n if (isActive) {\r\n window.addEventListener('click', pageClickEvent);\r\n }\r\n\r\n return () => {\r\n window.removeEventListener('click', pageClickEvent);\r\n }\r\n\r\n }, [isActive]);\r\n\r\n return (\r\n <div className=\"page-content-container\">\r\n <div className=\"teamInformationPage-content-header\">\r\n <div className=\"header-text\">\r\n <h2 className=\"teamInformationPage-title\">Henriks Meme machine > overview</h2>\r\n </div>\r\n <div className=\"header-notification-select-settings-button-container\">\r\n <div className=\"notification-button-container\">\r\n <button className={`notification-button ${isActive ? 'active' : 'inactive'}`} onClick={onClick} >\r\n <FontAwesomeIcon className=\"bell-icon\" icon=\"bell\"></FontAwesomeIcon>\r\n <FontAwesomeIcon className=\"down-arrow\" icon=\"angle-down\"></FontAwesomeIcon>\r\n </button>\r\n <div ref={dropdownRef} className={`user-dropDown-menu-content ${isActive ? 'active' : 'inactive'}`}>\r\n <ul>\r\n <li>\r\n <a>\r\n <FontAwesomeIcon icon=\"user\"></FontAwesomeIcon> Account\r\n <FontAwesomeIcon icon=\"chevron-right\" className=\"arrow-right-icon\"></FontAwesomeIcon>\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div className=\"settings-button-container\">\r\n <button>\r\n <FontAwesomeIcon icon=\"cog\"></FontAwesomeIcon>\r\n Settings\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"teamInformationPage-content-container\">\r\n {/*TODO: components goes here */}\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default TeamInfo","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\team\\teamOverview\\TeamOverview.jsx",["117","118"],"import React from 'react'\r\nimport { NavLink } from 'react-router-dom'\r\nimport \"./TeamOverview.css\"\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nconst TeamOverview = () => {\r\n\r\n const personalProjects = [\r\n { id: \"MyApp\", type: \"personal\" },\r\n { id: \"MyOtherApp\", type: \"personal\" }\r\n ]\r\n\r\n const sharedProjects = [\r\n { id: \"ReactApp\", type: \"shared\", teams: [{ name: \"Henriks Meme Machine\" }, { name: \"Teskeholdet\" }] },\r\n { id: \"Very big ReactApp\", type: \"shared\", teams: [{ name: \"Aubergine\" }] }\r\n ]\r\n\r\n return (\r\n <div className=\"page-content-container\">\r\n <div className=\"content-header\">\r\n <h2 className=\"teamlist-title\">Teams</h2>\r\n <div className=\"buttons-container\">\r\n <button className=\"join-team-button\">\r\n Join Team\r\n </button>\r\n <button className=\"create-new-team-button\">\r\n New team\r\n </button>\r\n </div>\r\n </div>\r\n <div className=\"teamlist\">\r\n <ul>\r\n <li>\r\n <div className=\"team-entry\">\r\n <div className=\"image-team-name\">\r\n <NavLink to=\"/HenriksMemeMachine\" className=\"team-image-container\">\r\n <FontAwesomeIcon className=\"team-icon\" icon=\"dice-d6\"></FontAwesomeIcon>\r\n </NavLink>\r\n <NavLink to=\"/HenriksMemeMachine\">Henriks meme machine - ReactApp \r\n <FontAwesomeIcon className=\"icon\" icon=\"chevron-right\"></FontAwesomeIcon>\r\n </NavLink>\r\n </div>\r\n <div className=\"team-status-info-container\">\r\n <div className=\"new-messages-info\">\r\n <FontAwesomeIcon className=\"icon\" icon=\"envelope\"></FontAwesomeIcon>\r\n <p>0</p>\r\n <span className=\"tooltip-text\">New messages</span>\r\n </div>\r\n <div className=\"projects-maintained-info\">\r\n <FontAwesomeIcon className=\"icon\" icon=\"project-diagram\"></FontAwesomeIcon>\r\n <p>0</p>\r\n <span className=\"tooltip-text\">Projects maintained</span>\r\n </div>\r\n <div className=\"team-members-info\">\r\n <FontAwesomeIcon className=\"icon\" icon=\"users\"></FontAwesomeIcon>\r\n <p>0</p>\r\n <span className=\"tooltip-text\">Team members</span>\r\n </div>\r\n <div className=\"last-updated-info\">\r\n <p>Date created: 21/ 07/ 2021</p>\r\n </div>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </div >\r\n )\r\n}\r\n\r\nexport default TeamOverview","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\reportForm\\assign\\Assign.jsx",["119","120","121","122","123","124"],"import React, { useState } from 'react'\r\nimport \"./Assign.css\"\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nconst Assign = () => {\r\n const personalProjects = [\r\n { id: \"MyApp\", type: \"personal\" },\r\n { id: \"MyOtherApp\", type: \"personal\" }\r\n ]\r\n\r\n const sharedProjects = [\r\n { id: \"ReactApp\", type: \"shared\", teams: [{ name: \"Henriks Meme Machine\" }, { name: \"Teskeholdet\" }] },\r\n { id: \"Very big ReactApp\", type: \"shared\", teams: [{ name: \"Aubergine\" }] }\r\n ]\r\n\r\n\r\n const rootDirectoryObjects = [\r\n { id: \"Personal projects\" },\r\n { id: \"Shared projects\" }\r\n ]\r\n\r\n const DirectoryItems = () => {\r\n return (\r\n <div className=\"multi-level\">\r\n <div className=\"item\">\r\n <input type=\"checkbox\" id=\"A\" />\r\n <label for=\"A\">\r\n <FontAwesomeIcon icon=\"folder\" className=\"folder-icon\"></FontAwesomeIcon>\r\n <a> {rootDirectoryObjects[0].id} </a>\r\n <FontAwesomeIcon icon=\"chevron-right\" className=\"arrow-right-icon\"></FontAwesomeIcon>\r\n </label>\r\n\r\n <ul>\r\n {personalProjects.map((elements, index) => (\r\n <li className=\"personalProjectsItem\">\r\n <input type=\"checkbox\" id={`A-${index}`} />\r\n <label for={`A-${index}`}>\r\n <FontAwesomeIcon icon=\"angle-right\" className=\"project-icon\"></FontAwesomeIcon>\r\n <a> {personalProjects[index].id} </a>\r\n </label>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n\r\n <div className=\"item\">\r\n <input type=\"checkbox\" id=\"B\" />\r\n <label for=\"B\">\r\n <FontAwesomeIcon icon=\"folder\" className=\"folder-icon\"></FontAwesomeIcon>\r\n <a> {rootDirectoryObjects[1].id} </a>\r\n <FontAwesomeIcon icon=\"chevron-right\" className=\"arrow-right-icon\"></FontAwesomeIcon>\r\n </label>\r\n\r\n <ul>\r\n {sharedProjects.map((elements, index) => (\r\n <li><div className=\"sub-item\">\r\n <input type=\"checkbox\" id={`B-${index}`} />\r\n <label for={`B-${index}`}>\r\n <FontAwesomeIcon icon=\"folder\" className=\"folder-icon\"></FontAwesomeIcon>\r\n <a> {sharedProjects[index].id} </a>\r\n <FontAwesomeIcon icon=\"chevron-right\" className=\"arrow-right-icon\"></FontAwesomeIcon>\r\n </label>\r\n\r\n <ul>\r\n {sharedProjects[index].teams.map(team => (\r\n <li><div className=\"team-item\">\r\n <input type=\"checkbox\" id={`team-${team.name}`} />\r\n <label for={`team-${team.name}`}>\r\n <FontAwesomeIcon icon=\"users\" className=\"users-icon\"></FontAwesomeIcon>\r\n <a> {team.name} </a>\r\n </label>\r\n </div>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n )\r\n }\r\n\r\n return (\r\n <div className=\"assignSelectContainer\">\r\n <DirectoryItems />\r\n </div >\r\n )\r\n}\r\n\r\nexport default Assign","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\home\\updates\\Updates.jsx",["125","126","127","128"],"import React from 'react'\r\nimport \"./Updates.css\"\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport useMessages from '../../../util/useMessages'\r\n\r\nconst Updates = () => {\r\n const messages = useMessages()\r\n\r\n return (\r\n <div className=\"project-updates-new-messages-container\">\r\n\r\n <div className=\"project-updates-display-container\">\r\n <div className=\"project-updates-display-header\">\r\n <p>\r\n <FontAwesomeIcon icon=\"exclamation\"></FontAwesomeIcon>\r\n New project updates\r\n </p>\r\n </div>\r\n <div className=\"project-updates-display-content\">\r\n <div className=\"project-update-entry\">\r\n <div className=\"entry-text\">\r\n <div className=\"upper-row\">\r\n <a>\r\n [project] [new issues] [issues fixed]\r\n </a>\r\n </div>\r\n <div className=\"bottom-row\">\r\n <a>\r\n [team] [time]\r\n </a>\r\n </div>\r\n </div>\r\n <div>\r\n <FontAwesomeIcon className=\"entry-icon\" icon=\"chevron-right\"></FontAwesomeIcon>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"new-messages-display-container\">\r\n <div className=\"new-messages-display-header\">\r\n <p>\r\n <FontAwesomeIcon icon=\"envelope\"></FontAwesomeIcon>\r\n New messages\r\n </p>\r\n </div>\r\n {messages ? messages.map((message) => (\r\n <div className=\"new-messages-display-content\">\r\n <div className=\"new-message-entry\">\r\n <div className=\"entry-text\">\r\n <div className=\"upper-row\">\r\n <a>\r\n [{message.sender}] [{message.id}]\r\n </a>\r\n </div>\r\n <div className=\"bottom-row\">\r\n <a>\r\n [team] [{message.date}]\r\n </a>\r\n </div>\r\n </div>\r\n <div>\r\n <FontAwesomeIcon className=\"entry-icon\" icon=\"chevron-right\"></FontAwesomeIcon>\r\n </div>\r\n </div>\r\n </div>\r\n )) : \"Loading messages\"}\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default Updates","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\project\\projectInfo\\activitiesDisplay\\ActivitiesDisplay.jsx",["129","130","131","132"],"import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport React from 'react'\r\nimport \"./ActivitiesDisplay.css\"\r\n\r\nconst ActivitiesDisplay = () => {\r\n return (\r\n <div className=\"activity-new-issues-display-container\">\r\n\r\n <div className=\"new-issues-display-container\">\r\n <div className=\"new-issues-display-header\">\r\n <p>\r\n <FontAwesomeIcon icon=\"inbox\"></FontAwesomeIcon>\r\n New issue reports\r\n </p>\r\n </div>\r\n <div className=\"new-issues-display-content\">\r\n <div className=\"new-issue-report-entry\">\r\n <div className=\"entry-text\">\r\n <div className=\"upper-row\">\r\n <a>\r\n [Severity] [type]\r\n </a>\r\n </div>\r\n <div className=\"bottom-row\">\r\n <a>\r\n [project] [time]\r\n </a>\r\n </div>\r\n </div>\r\n <div>\r\n <FontAwesomeIcon className=\"entry-icon\" icon=\"chevron-right\"></FontAwesomeIcon>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"activity-display-container\">\r\n <div className=\"activity-display-header\">\r\n <p>\r\n <FontAwesomeIcon icon=\"sticky-note\"></FontAwesomeIcon>\r\n Recent Team activities\r\n </p>\r\n </div>\r\n <div className=\"activity-display-content\">\r\n <div className=\"new-issue-report-entry\">\r\n <div className=\"entry-text\">\r\n <div className=\"upper-row\">\r\n <a>\r\n [Name] [action]\r\n </a>\r\n </div>\r\n <div className=\"bottom-row\">\r\n <a>\r\n [project] [time]\r\n </a>\r\n </div>\r\n </div>\r\n <div>\r\n <FontAwesomeIcon className=\"entry-icon\" icon=\"chevron-right\"></FontAwesomeIcon>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default ActivitiesDisplay","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\project\\projectInfo\\activityChart\\ActivityChart.jsx",[],"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\navbar\\Navbar.jsx",["133"],"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\navbar\\logo\\Logo.jsx",["134","135"],"import React from 'react'\r\nimport { NavLink } from 'react-router-dom'\r\nimport \"./Logo.css\"\r\nimport logo_picture from \"../../../images/bird-logo.jpg\"\r\nimport logo_text from \"../../../images/logo-text.jpg\"\r\n\r\nconst Logo = () => {\r\n return (\r\n <h1 className=\"title\">\r\n <span className=\"title-icon\">\r\n <NavLink to=\"/home\" id=\"logo\">\r\n <img src={logo_picture} width=\"24\" height=\"24\"></img>\r\n <img src={logo_text} width=\"48\" height=\"24\"></img>\r\n </NavLink>\r\n </span>\r\n </h1>\r\n )\r\n}\r\n\r\nexport default Logo","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\navbar\\navLinks\\NavLinks.jsx",[],"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\navbar\\searchbar\\Searchbar.jsx",[],"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\navbar\\dropdownMenu\\NavbarDropdownMenu.jsx",["136"],"import React, { useRef, useState, useEffect } from 'react'\r\nimport { NavLink } from \"react-router-dom\";\r\nimport { useOktaAuth } from '@okta/okta-react';\r\nimport \"./NavbarDropdownMenu.css\"\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\n\r\nconst DropdownMenu = () => {\r\n const { authState, oktaAuth } = useOktaAuth();\r\n const [userInfo, setUserInfo] = useState(null);\r\n\r\n const dropdownRef = useRef(null);\r\n const [isActive, setIsActive] = useState(false);\r\n const onClick = () => setIsActive(!isActive);\r\n\r\n useEffect(() => {\r\n const pageClickEvent = (e) => {\r\n if (dropdownRef.current !== null && !dropdownRef.current.contains(e.target)) {\r\n setIsActive(!isActive);\r\n }\r\n };\r\n\r\n // If the item is active (ie open) then listen for clicks\r\n if (isActive) {\r\n window.addEventListener('click', pageClickEvent);\r\n }\r\n\r\n return () => {\r\n window.removeEventListener('click', pageClickEvent);\r\n }\r\n\r\n }, [isActive]);\r\n\r\n useEffect(() => {\r\n if (!authState.isAuthenticated) {\r\n // When user isn't authenticated, forget any user info\r\n setUserInfo(null);\r\n } else {\r\n oktaAuth.getUser().then(info => {\r\n setUserInfo(info);\r\n });\r\n }\r\n }, [authState, oktaAuth]); // Update if authState changes\r\n\r\n const logout = () => {\r\n oktaAuth.signOut()\r\n }\r\n\r\n return (\r\n <li>\r\n <div className=\"navbar-user-dropdown-container\">\r\n <button className={`user-dropdown-menu-toggle-button ${isActive ? 'active' : 'inactive'}`} onClick={onClick} >\r\n <FontAwesomeIcon className=\"user-icon\" icon=\"user-circle\"></FontAwesomeIcon>\r\n <FontAwesomeIcon className=\"down-arrow\" icon=\"angle-down\"></FontAwesomeIcon>\r\n </button>\r\n {/* show submenu?*/}\r\n <div ref={dropdownRef} className={`user-dropDown-menu-content ${isActive ? 'active' : 'inactive'}`}>\r\n <ul>\r\n <li>\r\n <NavLink to=\"/account\" onClick={onClick} className=\"top-item\">\r\n <div>\r\n <FontAwesomeIcon icon=\"user\" className=\"item-icon-top\"></FontAwesomeIcon> \r\n </div>\r\n <div className=\"item-top-text\">\r\n <span>\r\n <p className=\"top-row\">Account</p>\r\n <p className=\"bottom-row\">{userInfo ? userInfo.email : \"...\"}</p>\r\n </span>\r\n </div>\r\n <div className=\"item-last-flex-item\">\r\n <FontAwesomeIcon icon=\"chevron-right\" className=\"item-icon-top\"></FontAwesomeIcon>\r\n </div>\r\n </NavLink>\r\n </li>\r\n <li>\r\n <NavLink to=\"/messages\" onClick={onClick}>\r\n <FontAwesomeIcon icon=\"envelope\"></FontAwesomeIcon> Messages\r\n <FontAwesomeIcon icon=\"chevron-right\" className=\"arrow-right-icon\"></FontAwesomeIcon>\r\n </NavLink>\r\n </li>\r\n {/* <li>\r\n <a href=\"./\">\r\n <FontAwesomeIcon icon=\"sliders-h\"></FontAwesomeIcon> Preferences\r\n <FontAwesomeIcon icon=\"chevron-right\" className=\"arrow-right-icon\"></FontAwesomeIcon>\r\n </a>\r\n </li> */}\r\n <li>\r\n <a onClick={logout}>\r\n <FontAwesomeIcon icon=\"sign-out-alt\"></FontAwesomeIcon> Log out\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </li >\r\n )\r\n}\r\n\r\nexport default DropdownMenu",{"ruleId":"137","replacedBy":"138"},{"ruleId":"139","replacedBy":"140"},{"ruleId":"141","severity":1,"message":"142","line":1,"column":1,"nodeType":"143","endLine":14,"endColumn":3},{"ruleId":"144","severity":1,"message":"145","line":47,"column":6,"nodeType":"146","endLine":47,"endColumn":17,"suggestions":"147"},{"ruleId":"137","replacedBy":"148"},{"ruleId":"139","replacedBy":"149"},{"ruleId":"150","severity":1,"message":"151","line":6,"column":10,"nodeType":"152","messageId":"153","endLine":6,"endColumn":17},{"ruleId":"144","severity":1,"message":"154","line":42,"column":6,"nodeType":"146","endLine":42,"endColumn":33,"suggestions":"155"},{"ruleId":"156","severity":1,"message":"157","line":112,"column":19,"nodeType":"158","messageId":"159","endLine":112,"endColumn":21},{"ruleId":"160","severity":1,"message":"161","line":214,"column":15,"nodeType":"162","endLine":214,"endColumn":48},{"ruleId":"150","severity":1,"message":"163","line":1,"column":17,"nodeType":"152","messageId":"153","endLine":1,"endColumn":25},{"ruleId":"160","severity":1,"message":"161","line":75,"column":11,"nodeType":"162","endLine":75,"endColumn":123},{"ruleId":"160","severity":1,"message":"161","line":76,"column":11,"nodeType":"162","endLine":76,"endColumn":127},{"ruleId":"160","severity":1,"message":"161","line":43,"column":19,"nodeType":"162","endLine":43,"endColumn":22},{"ruleId":"150","severity":1,"message":"164","line":8,"column":9,"nodeType":"152","messageId":"153","endLine":8,"endColumn":25},{"ruleId":"150","severity":1,"message":"165","line":13,"column":9,"nodeType":"152","messageId":"153","endLine":13,"endColumn":23},{"ruleId":"150","severity":1,"message":"163","line":1,"column":17,"nodeType":"152","messageId":"153","endLine":1,"endColumn":25},{"ruleId":"160","severity":1,"message":"161","line":29,"column":13,"nodeType":"162","endLine":29,"endColumn":16},{"ruleId":"160","severity":1,"message":"161","line":39,"column":19,"nodeType":"162","endLine":39,"endColumn":22},{"ruleId":"160","severity":1,"message":"161","line":50,"column":13,"nodeType":"162","endLine":50,"endColumn":16},{"ruleId":"160","severity":1,"message":"161","line":60,"column":19,"nodeType":"162","endLine":60,"endColumn":22},{"ruleId":"160","severity":1,"message":"161","line":70,"column":25,"nodeType":"162","endLine":70,"endColumn":28},{"ruleId":"160","severity":1,"message":"161","line":23,"column":17,"nodeType":"162","endLine":23,"endColumn":20},{"ruleId":"160","severity":1,"message":"161","line":28,"column":17,"nodeType":"162","endLine":28,"endColumn":20},{"ruleId":"160","severity":1,"message":"161","line":52,"column":19,"nodeType":"162","endLine":52,"endColumn":22},{"ruleId":"160","severity":1,"message":"161","line":57,"column":19,"nodeType":"162","endLine":57,"endColumn":22},{"ruleId":"160","severity":1,"message":"161","line":20,"column":17,"nodeType":"162","endLine":20,"endColumn":20},{"ruleId":"160","severity":1,"message":"161","line":25,"column":17,"nodeType":"162","endLine":25,"endColumn":20},{"ruleId":"160","severity":1,"message":"161","line":48,"column":17,"nodeType":"162","endLine":48,"endColumn":20},{"ruleId":"160","severity":1,"message":"161","line":53,"column":17,"nodeType":"162","endLine":53,"endColumn":20},{"ruleId":"150","severity":1,"message":"166","line":10,"column":22,"nodeType":"152","messageId":"153","endLine":10,"endColumn":30},{"ruleId":"167","severity":1,"message":"168","line":12,"column":11,"nodeType":"162","endLine":12,"endColumn":58},{"ruleId":"167","severity":1,"message":"168","line":13,"column":11,"nodeType":"162","endLine":13,"endColumn":55},{"ruleId":"160","severity":1,"message":"161","line":88,"column":15,"nodeType":"162","endLine":88,"endColumn":35},"no-native-reassign",["169"],"no-negated-in-lhs",["170"],"import/no-anonymous-default-export","Assign object to a variable before exporting as module default","ExportDefaultDeclaration","react-hooks/exhaustive-deps","React Hook useEffect has a missing dependency: 'oktaAuth'. Either include it or remove the dependency array.","ArrayExpression",["171"],["169"],["170"],"no-unused-vars","'NavLink' is defined but never used.","Identifier","unusedVar","React Hook useEffect has a missing dependency: 'toggleSignInFormVisible'. Either include it or remove the dependency array.",["172"],"eqeqeq","Expected '===' and instead saw '=='.","BinaryExpression","unexpected","jsx-a11y/anchor-is-valid","The href attribute is required for an anchor to be keyboard accessible. Provide a valid, navigable address as the href value. If you cannot provide an href, but still need the element to resemble a link, use a button and change it with appropriate styles. Learn more: https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-is-valid.md","JSXOpeningElement","'useState' is defined but never used.","'personalProjects' is assigned a value but never used.","'sharedProjects' is assigned a value but never used.","'oktaAuth' is assigned a value but never used.","jsx-a11y/alt-text","img elements must have an alt prop, either with meaningful text, or an empty string for decorative images.","no-global-assign","no-unsafe-negation",{"desc":"173","fix":"174"},{"desc":"175","fix":"176"},"Update the dependencies array to be: [authState, oktaAuth]",{"range":"177","text":"178"},"Update the dependencies array to be: [signUpFormVisibilityState, toggleSignInFormVisible]",{"range":"179","text":"180"},[1422,1433],"[authState, oktaAuth]",[1490,1517],"[signUpFormVisibilityState, toggleSignInFormVisible]"]
\ No newline at end of file
client/node_modules/.cache/babel-loader/007828e935e1cbe708e0c0b2f93a87c9.json
0 → 100644
View file @
e4f09cae
{
"ast"
:
null
,
"code"
:
"var _jsxFileName =
\"
C:
\\\\
Users
\\\\
Bruger
\\\\
Desktop
\\\\
Web-projects
\\\\
pipit
\\\\
client
\\\\
src
\\\\
App.jsx
\"
,
\n
_s = $RefreshSig$();
\n\n
import React from
\"
react
\"
;
\n
import { Route, Switch, useHistory } from
\"
react-router-dom
\"
;
\n
import { useOktaAuth } from '@okta/okta-react';
\n
import { library } from '@fortawesome/fontawesome-svg-core';
\n
import { fas } from '@fortawesome/free-solid-svg-icons';
\n
import { OktaAuth, toRelativeUrl } from '@okta/okta-auth-js';
\n
import { Security, SecureRoute, LoginCallback } from
\"
@okta/okta-react
\"
;
\n
import
\"
./style.css
\"
;
\n
import config from
\"
./config
\"
; //Components
\n\n
import Login from
\"
./pages/login/Login
\"
;
\n
import Navbar from
\"
./components/navbar/Navbar
\"
;
\n
import Home from
\"
./pages/home/Home
\"
;
\n
import ReportForm from
\"
./pages/reportForm/ReportForm
\"
;
\n
import ProjectOverview from
\"
./pages/project/projectOverview/ProjectOverview
\"
;
\n
import ProjectInfo from
\"
./pages/project/projectInfo/ProjectInfo
\"
;
\n
import TeamOverview from
\"
./pages/team/teamOverview/TeamOverview
\"
;
\n
import TeamInfo from
\"
./pages/team/teamInfo/TeamInfo
\"
;
\n
import Messages from
\"
./pages/Messages/Messages
\"
;
\n
import { jsxDEV as _jsxDEV } from
\"
react/jsx-dev-runtime
\"
;
\n
library.add(fas);
\n
const oktaAuth = new OktaAuth(config.oidc);
\n
const CALLBACK_PATH = '/login/callback';
\n\n
const App = () => {
\n
_s();
\n\n
const history = useHistory();
\n
const {
\n
authState
\n
} = oktaAuth.isAuthenticated;
\n\n
const restoreOriginalUri = async (_oktaAuth, originalUri) => {
\n
history.replace(toRelativeUrl(originalUri || '/', window.location.origin));
\n
};
\n\n
return /*#__PURE__*/_jsxDEV(Security, {
\n
oktaAuth: oktaAuth,
\n
restoreOriginalUri: restoreOriginalUri,
\n
children: [/*#__PURE__*/_jsxDEV(Navbar, {}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 36,
\n
columnNumber: 7
\n
}, this), /*#__PURE__*/_jsxDEV(Switch, {
\n
children: [/*#__PURE__*/_jsxDEV(Route, {
\n
exact: true,
\n
path:
\"
/
\"
,
\n
component: Login
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 38,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(Route, {
\n
path: CALLBACK_PATH,
\n
component: LoginCallback
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 39,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(SecureRoute, {
\n
path:
\"
/home
\"
,
\n
component: Home
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 40,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(SecureRoute, {
\n
path:
\"
/reportissue
\"
,
\n
component: ReportForm
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 41,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(SecureRoute, {
\n
path:
\"
/projects
\"
,
\n
component: ProjectOverview
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 42,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(SecureRoute, {
\n
path:
\"
/ReactApp
\"
,
\n
component: ProjectInfo
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 43,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(SecureRoute, {
\n
path:
\"
/teams
\"
,
\n
component: TeamOverview
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 44,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(SecureRoute, {
\n
path:
\"
/HenriksMemeMachine
\"
,
\n
component: TeamInfo
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 45,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(SecureRoute, {
\n
path:
\"
/messages
\"
,
\n
component: Messages
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 46,
\n
columnNumber: 9
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 37,
\n
columnNumber: 7
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 35,
\n
columnNumber: 5
\n
}, this);
\n
};
\n\n
_s(App,
\"
9cZfZ04734qoCGIctmKX7+sX6eU=
\"
, false, function () {
\n
return [useHistory];
\n
});
\n\n
_c = App;
\n
export default App;
\n\n
var _c;
\n\n
$RefreshReg$(_c,
\"
App
\"
);"
,
"map"
:{
"version"
:
3
,
"sources"
:[
"C:/Users/Bruger/Desktop/Web-projects/pipit/client/src/App.jsx"
],
"names"
:[
"React"
,
"Route"
,
"Switch"
,
"useHistory"
,
"useOktaAuth"
,
"library"
,
"fas"
,
"OktaAuth"
,
"toRelativeUrl"
,
"Security"
,
"SecureRoute"
,
"LoginCallback"
,
"config"
,
"Login"
,
"Navbar"
,
"Home"
,
"ReportForm"
,
"ProjectOverview"
,
"ProjectInfo"
,
"TeamOverview"
,
"TeamInfo"
,
"Messages"
,
"add"
,
"oktaAuth"
,
"oidc"
,
"CALLBACK_PATH"
,
"App"
,
"history"
,
"authState"
,
"isAuthenticated"
,
"restoreOriginalUri"
,
"_oktaAuth"
,
"originalUri"
,
"replace"
,
"window"
,
"location"
,
"origin"
],
"mappings"
:
"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"
,
"sourcesContent"
:[
"import React from
\"
react
\"\r\n
import { Route, Switch, useHistory } from
\"
react-router-dom
\"\r\n
import { useOktaAuth } from '@okta/okta-react';
\r\n
import { library } from '@fortawesome/fontawesome-svg-core'
\r\n
import { fas } from '@fortawesome/free-solid-svg-icons'
\r\n
import { OktaAuth, toRelativeUrl } from '@okta/okta-auth-js';
\r\n
import { Security, SecureRoute, LoginCallback } from
\"
@okta/okta-react
\"\r\n
import
\"
./style.css
\"\r\n
import config from
\"
./config
\"\r\n\r\n
//Components
\r\n
import Login from
\"
./pages/login/Login
\"\r\n
import Navbar from
\"
./components/navbar/Navbar
\"\r\n
import Home from
\"
./pages/home/Home
\"\r\n
import ReportForm from
\"
./pages/reportForm/ReportForm
\"\r\n
import ProjectOverview from
\"
./pages/project/projectOverview/ProjectOverview
\"\r\n
import ProjectInfo from
\"
./pages/project/projectInfo/ProjectInfo
\"\r\n
import TeamOverview from
\"
./pages/team/teamOverview/TeamOverview
\"\r\n
import TeamInfo from
\"
./pages/team/teamInfo/TeamInfo
\"\r\n
import Messages from
\"
./pages/Messages/Messages
\"\r\n\r\n
library.add(fas)
\r\n\r\n
const oktaAuth = new OktaAuth(config.oidc);
\r\n
const CALLBACK_PATH = '/login/callback';
\r\n\r\n
const App = () => {
\r\n
const history = useHistory()
\r\n
const { authState } = oktaAuth.isAuthenticated
\r\n
const restoreOriginalUri = async (_oktaAuth, originalUri) => {
\r\n
history.replace(toRelativeUrl(originalUri || '/', window.location.origin))
\r\n
}
\r\n\r\n
return (
\r\n
<Security oktaAuth={oktaAuth} restoreOriginalUri={restoreOriginalUri}>
\r\n
<Navbar />
\r\n
<Switch>
\r\n
<Route exact path=
\"
/
\"
component={Login} />
\r\n
<Route path={CALLBACK_PATH} component={LoginCallback} />
\r\n
<SecureRoute path=
\"
/home
\"
component={Home} />
\r\n
<SecureRoute path=
\"
/reportissue
\"
component={ReportForm} />
\r\n
<SecureRoute path=
\"
/projects
\"
component={ProjectOverview} />
\r\n
<SecureRoute path=
\"
/ReactApp
\"
component={ProjectInfo} />
\r\n
<SecureRoute path=
\"
/teams
\"
component={TeamOverview} />
\r\n
<SecureRoute path=
\"
/HenriksMemeMachine
\"
component={TeamInfo} />
\r\n
<SecureRoute path=
\"
/messages
\"
component={Messages} />
\r\n
</Switch>
\r\n
</Security>
\r\n
)
\r\n
}
\r\n\r\n
export default App"
]},
"metadata"
:{},
"sourceType"
:
"module"
}
\ No newline at end of file
client/node_modules/.cache/babel-loader/0174b146845a88ddd4debd49f25b481c.json
0 → 100644
View file @
e4f09cae
{
"ast"
:
null
,
"code"
:
"var _jsxFileName =
\"
C:
\\\\
Users
\\\\
Bruger
\\\\
Desktop
\\\\
Web-projects
\\\\
pipit
\\\\
client
\\\\
src
\\\\
components
\\\\
navbar
\\\\
dropdownMenu
\\\\
NavbarDropdownMenu.jsx
\"
,
\n
_s = $RefreshSig$();
\n\n
import React, { useRef, useState, useEffect } from 'react';
\n
import { NavLink } from
\"
react-router-dom
\"
;
\n
import { useOktaAuth } from '@okta/okta-react';
\n
import
\"
./NavbarDropdownMenu.css
\"
;
\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
\n
import { jsxDEV as _jsxDEV } from
\"
react/jsx-dev-runtime
\"
;
\n\n
const DropdownMenu = () => {
\n
_s();
\n\n
const {
\n
authState,
\n
oktaAuth
\n
} = useOktaAuth();
\n
const [userInfo, setUserInfo] = useState(null);
\n
const dropdownRef = useRef(null);
\n
const [isActive, setIsActive] = useState(false);
\n\n
const onClick = () => setIsActive(!isActive);
\n\n
useEffect(() => {
\n
const pageClickEvent = e => {
\n
if (dropdownRef.current !== null && !dropdownRef.current.contains(e.target)) {
\n
setIsActive(!isActive);
\n
}
\n
}; // If the item is active (ie open) then listen for clicks
\n\n\n
if (isActive) {
\n
window.addEventListener('click', pageClickEvent);
\n
}
\n\n
return () => {
\n
window.removeEventListener('click', pageClickEvent);
\n
};
\n
}, [isActive]);
\n
useEffect(() => {
\n
if (!authState.isAuthenticated) {
\n
// When user isn't authenticated, forget any user info
\n
setUserInfo(null);
\n
} else {
\n
oktaAuth.getUser().then(info => {
\n
setUserInfo(info);
\n
});
\n
}
\n
}, [authState, oktaAuth]); // Update if authState changes
\n\n
const logout = () => {
\n
oktaAuth.signOut();
\n
};
\n\n
return /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
navbar-user-dropdown-container
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
button
\"
, {
\n
className: `user-dropdown-menu-toggle-button ${isActive ? 'active' : 'inactive'}`,
\n
onClick: onClick,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
user-icon
\"
,
\n
icon:
\"
user-circle
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 53,
\n
columnNumber: 11
\n
}, this), /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
down-arrow
\"
,
\n
icon:
\"
angle-down
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 54,
\n
columnNumber: 11
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 52,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
ref: dropdownRef,
\n
className: `user-dropDown-menu-content ${isActive ? 'active' : 'inactive'}`,
\n
children: /*#__PURE__*/_jsxDEV(
\"
ul
\"
, {
\n
children: [/*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
menu-item
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
item-text-top
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
upper-row
\"
,
\n
children: /*#__PURE__*/_jsxDEV(NavLink, {
\n
to:
\"
/account
\"
,
\n
className:
\"
menu-item-link
\"
,
\n
children:
\"
Account
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 64,
\n
columnNumber: 21
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 63,
\n
columnNumber: 19
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
bottom-row
\"
,
\n
children: /*#__PURE__*/_jsxDEV(NavLink, {
\n
to:
\"
/account
\"
,
\n
className:
\"
menu-item-link-bottom
\"
,
\n
children: userInfo ? userInfo.email :
\"
...
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 69,
\n
columnNumber: 21
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 68,
\n
columnNumber: 19
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 62,
\n
columnNumber: 17
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
item-icon
\"
,
\n
icon:
\"
user-circle
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 75,
\n
columnNumber: 19
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 74,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 61,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 60,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
menu-item
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
item-text-top
\"
,
\n
children: /*#__PURE__*/_jsxDEV(NavLink, {
\n
to:
\"
/account
\"
,
\n
className:
\"
menu-item-link
\"
,
\n
children:
\"
Messages
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 83,
\n
columnNumber: 19
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 82,
\n
columnNumber: 17
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
item-icon
\"
,
\n
icon:
\"
envelope
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 88,
\n
columnNumber: 19
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 87,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 81,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 80,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
li
\"
, {}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 102,
\n
columnNumber: 13
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 58,
\n
columnNumber: 11
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 57,
\n
columnNumber: 9
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 51,
\n
columnNumber: 7
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 50,
\n
columnNumber: 5
\n
}, this);
\n
};
\n\n
_s(DropdownMenu,
\"
fSJPYre4v1rGcIZdck7wMJJU1dU=
\"
, false, function () {
\n
return [useOktaAuth];
\n
});
\n\n
_c = DropdownMenu;
\n
export default DropdownMenu;
\n\n
var _c;
\n\n
$RefreshReg$(_c,
\"
DropdownMenu
\"
);"
,
"map"
:{
"version"
:
3
,
"sources"
:[
"C:/Users/Bruger/Desktop/Web-projects/pipit/client/src/components/navbar/dropdownMenu/NavbarDropdownMenu.jsx"
],
"names"
:[
"React"
,
"useRef"
,
"useState"
,
"useEffect"
,
"NavLink"
,
"useOktaAuth"
,
"FontAwesomeIcon"
,
"DropdownMenu"
,
"authState"
,
"oktaAuth"
,
"userInfo"
,
"setUserInfo"
,
"dropdownRef"
,
"isActive"
,
"setIsActive"
,
"onClick"
,
"pageClickEvent"
,
"e"
,
"current"
,
"contains"
,
"target"
,
"window"
,
"addEventListener"
,
"removeEventListener"
,
"isAuthenticated"
,
"getUser"
,
"then"
,
"info"
,
"logout"
,
"signOut"
,
"email"
],
"mappings"
:
"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"
,
"sourcesContent"
:[
"import React, { useRef, useState, useEffect } from 'react'
\r\n
import { NavLink } from
\"
react-router-dom
\"
;
\r\n
import { useOktaAuth } from '@okta/okta-react';
\r\n
import
\"
./NavbarDropdownMenu.css
\"\r\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
\r\n\r\n\r\n
const DropdownMenu = () => {
\r\n
const { authState, oktaAuth } = useOktaAuth();
\r\n
const [userInfo, setUserInfo] = useState(null);
\r\n\r\n
const dropdownRef = useRef(null);
\r\n
const [isActive, setIsActive] = useState(false);
\r\n
const onClick = () => setIsActive(!isActive);
\r\n\r\n
useEffect(() => {
\r\n
const pageClickEvent = (e) => {
\r\n
if (dropdownRef.current !== null && !dropdownRef.current.contains(e.target)) {
\r\n
setIsActive(!isActive);
\r\n
}
\r\n
};
\r\n\r\n
// If the item is active (ie open) then listen for clicks
\r\n
if (isActive) {
\r\n
window.addEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
return () => {
\r\n
window.removeEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
}, [isActive]);
\r\n\r\n
useEffect(() => {
\r\n
if (!authState.isAuthenticated) {
\r\n
// When user isn't authenticated, forget any user info
\r\n
setUserInfo(null);
\r\n
} else {
\r\n
oktaAuth.getUser().then(info => {
\r\n
setUserInfo(info);
\r\n
});
\r\n
}
\r\n
}, [authState, oktaAuth]); // Update if authState changes
\r\n\r\n
const logout = () => {
\r\n
oktaAuth.signOut()
\r\n
}
\r\n\r\n
return (
\r\n
<li>
\r\n
<div className=
\"
navbar-user-dropdown-container
\"
>
\r\n
<button className={`user-dropdown-menu-toggle-button ${isActive ? 'active' : 'inactive'}`} onClick={onClick} >
\r\n
<FontAwesomeIcon className=
\"
user-icon
\"
icon=
\"
user-circle
\"
></FontAwesomeIcon>
\r\n
<FontAwesomeIcon className=
\"
down-arrow
\"
icon=
\"
angle-down
\"
></FontAwesomeIcon>
\r\n
</button>
\r\n
{/* show submenu?*/}
\r\n
<div ref={dropdownRef} className={`user-dropDown-menu-content ${isActive ? 'active' : 'inactive'}`}>
\r\n
<ul>
\r\n\r\n
<li>
\r\n
<div className=
\"
menu-item
\"
>
\r\n
<div className=
\"
item-text-top
\"
>
\r\n
<div className=
\"
upper-row
\"
>
\r\n
<NavLink to=
\"
/account
\"
className=
\"
menu-item-link
\"
>
\r\n
Account
\r\n
</NavLink>
\r\n
</div>
\r\n
<div className=
\"
bottom-row
\"
>
\r\n
<NavLink to=
\"
/account
\"
className=
\"
menu-item-link-bottom
\"
>
\r\n
{userInfo ? userInfo.email :
\"
...
\"
}
\r\n
</NavLink>
\r\n
</div>
\r\n
</div>
\r\n
<div>
\r\n
<FontAwesomeIcon className=
\"
item-icon
\"
icon=
\"
user-circle
\"
></FontAwesomeIcon>
\r\n
</div>
\r\n
</div>
\r\n
</li>
\r\n\r\n
<li>
\r\n
<div className=
\"
menu-item
\"
>
\r\n
<div className=
\"
item-text-top
\"
>
\r\n
<NavLink to=
\"
/account
\"
className=
\"
menu-item-link
\"
>
\r\n
Messages
\r\n
</NavLink>
\r\n
</div>
\r\n
<div>
\r\n
<FontAwesomeIcon className=
\"
item-icon
\"
icon=
\"
envelope
\"
></FontAwesomeIcon>
\r\n
</div>
\r\n
</div>
\r\n
{/* <NavLink to=
\"
/messages
\"
>
\r\n
\r\n
</NavLink> */}
\r\n
</li>
\r\n\r\n
{/* <li>
\r\n
<a href=
\"
./
\"
>
\r\n
<FontAwesomeIcon icon=
\"
sliders-h
\"
></FontAwesomeIcon> Preferences
\r\n
<FontAwesomeIcon icon=
\"
chevron-right
\"
className=
\"
item-icon-icon
\"
></FontAwesomeIcon>
\r\n
</a>
\r\n
</li> */}
\r\n
<li>
\r\n
{/* <a onClick={logout}>
\r\n
<FontAwesomeIcon icon=
\"
sign-out-alt
\"
></FontAwesomeIcon> Log out
\r\n
</a> */}
\r\n
</li>
\r\n
</ul>
\r\n
</div>
\r\n
</div>
\r\n
</li >
\r\n
)
\r\n
}
\r\n\r\n
export default DropdownMenu"
]},
"metadata"
:{},
"sourceType"
:
"module"
}
\ No newline at end of file
client/node_modules/.cache/babel-loader/06382b1b91bad22f1457963dbc6aa31c.json
0 → 100644
View file @
e4f09cae
{
"ast"
:
null
,
"code"
:
"var _jsxFileName =
\"
C:
\\\\
Users
\\\\
Bruger
\\\\
Desktop
\\\\
Web-projects
\\\\
pipit
\\\\
client
\\\\
src
\\\\
components
\\\\
navbar
\\\\
dropdownMenu
\\\\
NavbarDropdownMenu.jsx
\"
,
\n
_s = $RefreshSig$();
\n\n
import React, { useRef, useState, useEffect } from 'react';
\n
import { NavLink } from
\"
react-router-dom
\"
;
\n
import { useOktaAuth } from '@okta/okta-react';
\n
import
\"
./NavbarDropdownMenu.css
\"
;
\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
\n
import { jsxDEV as _jsxDEV } from
\"
react/jsx-dev-runtime
\"
;
\n\n
const DropdownMenu = () => {
\n
_s();
\n\n
const {
\n
authState,
\n
oktaAuth
\n
} = useOktaAuth();
\n
const [userInfo, setUserInfo] = useState(null);
\n
const dropdownRef = useRef(null);
\n
const [isActive, setIsActive] = useState(false);
\n\n
const onClick = () => setIsActive(!isActive);
\n\n
useEffect(() => {
\n
const pageClickEvent = e => {
\n
if (dropdownRef.current !== null && !dropdownRef.current.contains(e.target)) {
\n
setIsActive(!isActive);
\n
}
\n
}; // If the item is active (ie open) then listen for clicks
\n\n\n
if (isActive) {
\n
window.addEventListener('click', pageClickEvent);
\n
}
\n\n
return () => {
\n
window.removeEventListener('click', pageClickEvent);
\n
};
\n
}, [isActive]);
\n
useEffect(() => {
\n
if (!authState.isAuthenticated) {
\n
// When user isn't authenticated, forget any user info
\n
setUserInfo(null);
\n
} else {
\n
oktaAuth.getUser().then(info => {
\n
setUserInfo(info);
\n
});
\n
}
\n
}, [authState, oktaAuth]); // Update if authState changes
\n\n
const logout = () => {
\n
oktaAuth.signOut();
\n
};
\n\n
return /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
navbar-user-dropdown-container
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
button
\"
, {
\n
className: `user-dropdown-menu-toggle-button ${isActive ? 'active' : 'inactive'}`,
\n
onClick: onClick,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
user-icon
\"
,
\n
icon:
\"
user-circle
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 53,
\n
columnNumber: 11
\n
}, this), /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
down-arrow
\"
,
\n
icon:
\"
angle-down
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 54,
\n
columnNumber: 11
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 52,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
ref: dropdownRef,
\n
className: `user-dropDown-menu-content ${isActive ? 'active' : 'inactive'}`,
\n
children: /*#__PURE__*/_jsxDEV(
\"
ul
\"
, {
\n
children: [/*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(NavLink, {
\n
to:
\"
/account
\"
,
\n
onClick: onClick,
\n
className:
\"
top-item
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
user
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 61,
\n
columnNumber: 17
\n
}, this),
\"\\
xA0
\\
xA0
\"
, /*#__PURE__*/_jsxDEV(
\"
span
\"
, {
\n
children: [/*#__PURE__*/_jsxDEV(
\"
p
\"
, {
\n
children:
\"
Account
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 63,
\n
columnNumber: 19
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
p
\"
, {
\n
children: userInfo ? userInfo.email :
\"
...
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 64,
\n
columnNumber: 19
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 62,
\n
columnNumber: 17
\n
}, this), /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
chevron-right
\"
,
\n
className:
\"
arrow-right-icon
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 66,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 60,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 59,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(NavLink, {
\n
to:
\"
/messages
\"
,
\n
onClick: onClick,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
envelope
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 71,
\n
columnNumber: 17
\n
}, this),
\"\\
xA0
\\
xA0Messages
\"
, /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
chevron-right
\"
,
\n
className:
\"
arrow-right-icon
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 72,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 70,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 69,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
a
\"
, {
\n
onClick: logout,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
sign-out-alt
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 83,
\n
columnNumber: 17
\n
}, this),
\"\\
xA0
\\
xA0Log out
\"
]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 82,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 81,
\n
columnNumber: 13
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 58,
\n
columnNumber: 11
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 57,
\n
columnNumber: 9
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 51,
\n
columnNumber: 7
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 50,
\n
columnNumber: 5
\n
}, this);
\n
};
\n\n
_s(DropdownMenu,
\"
fSJPYre4v1rGcIZdck7wMJJU1dU=
\"
, false, function () {
\n
return [useOktaAuth];
\n
});
\n\n
_c = DropdownMenu;
\n
export default DropdownMenu;
\n\n
var _c;
\n\n
$RefreshReg$(_c,
\"
DropdownMenu
\"
);"
,
"map"
:{
"version"
:
3
,
"sources"
:[
"C:/Users/Bruger/Desktop/Web-projects/pipit/client/src/components/navbar/dropdownMenu/NavbarDropdownMenu.jsx"
],
"names"
:[
"React"
,
"useRef"
,
"useState"
,
"useEffect"
,
"NavLink"
,
"useOktaAuth"
,
"FontAwesomeIcon"
,
"DropdownMenu"
,
"authState"
,
"oktaAuth"
,
"userInfo"
,
"setUserInfo"
,
"dropdownRef"
,
"isActive"
,
"setIsActive"
,
"onClick"
,
"pageClickEvent"
,
"e"
,
"current"
,
"contains"
,
"target"
,
"window"
,
"addEventListener"
,
"removeEventListener"
,
"isAuthenticated"
,
"getUser"
,
"then"
,
"info"
,
"logout"
,
"signOut"
,
"email"
],
"mappings"
:
"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"
,
"sourcesContent"
:[
"import React, { useRef, useState, useEffect } from 'react'
\r\n
import { NavLink } from
\"
react-router-dom
\"
;
\r\n
import { useOktaAuth } from '@okta/okta-react';
\r\n
import
\"
./NavbarDropdownMenu.css
\"\r\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
\r\n\r\n\r\n
const DropdownMenu = () => {
\r\n
const { authState, oktaAuth } = useOktaAuth();
\r\n
const [userInfo, setUserInfo] = useState(null);
\r\n\r\n
const dropdownRef = useRef(null);
\r\n
const [isActive, setIsActive] = useState(false);
\r\n
const onClick = () => setIsActive(!isActive);
\r\n\r\n
useEffect(() => {
\r\n
const pageClickEvent = (e) => {
\r\n
if (dropdownRef.current !== null && !dropdownRef.current.contains(e.target)) {
\r\n
setIsActive(!isActive);
\r\n
}
\r\n
};
\r\n\r\n
// If the item is active (ie open) then listen for clicks
\r\n
if (isActive) {
\r\n
window.addEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
return () => {
\r\n
window.removeEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
}, [isActive]);
\r\n\r\n
useEffect(() => {
\r\n
if (!authState.isAuthenticated) {
\r\n
// When user isn't authenticated, forget any user info
\r\n
setUserInfo(null);
\r\n
} else {
\r\n
oktaAuth.getUser().then(info => {
\r\n
setUserInfo(info);
\r\n
});
\r\n
}
\r\n
}, [authState, oktaAuth]); // Update if authState changes
\r\n\r\n
const logout = () => {
\r\n
oktaAuth.signOut()
\r\n
}
\r\n\r\n
return (
\r\n
<li>
\r\n
<div className=
\"
navbar-user-dropdown-container
\"
>
\r\n
<button className={`user-dropdown-menu-toggle-button ${isActive ? 'active' : 'inactive'}`} onClick={onClick} >
\r\n
<FontAwesomeIcon className=
\"
user-icon
\"
icon=
\"
user-circle
\"
></FontAwesomeIcon>
\r\n
<FontAwesomeIcon className=
\"
down-arrow
\"
icon=
\"
angle-down
\"
></FontAwesomeIcon>
\r\n
</button>
\r\n
{/* show submenu?*/}
\r\n
<div ref={dropdownRef} className={`user-dropDown-menu-content ${isActive ? 'active' : 'inactive'}`}>
\r\n
<ul>
\r\n
<li>
\r\n
<NavLink to=
\"
/account
\"
onClick={onClick} className=
\"
top-item
\"
>
\r\n
<FontAwesomeIcon icon=
\"
user
\"
></FontAwesomeIcon>
\r\n
<span>
\r\n
<p>Account</p>
\r\n
<p>{userInfo ? userInfo.email :
\"
...
\"
}</p>
\r\n
</span>
\r\n
<FontAwesomeIcon icon=
\"
chevron-right
\"
className=
\"
arrow-right-icon
\"
></FontAwesomeIcon>
\r\n
</NavLink>
\r\n
</li>
\r\n
<li>
\r\n
<NavLink to=
\"
/messages
\"
onClick={onClick}>
\r\n
<FontAwesomeIcon icon=
\"
envelope
\"
></FontAwesomeIcon> Messages
\r\n
<FontAwesomeIcon icon=
\"
chevron-right
\"
className=
\"
arrow-right-icon
\"
></FontAwesomeIcon>
\r\n
</NavLink>
\r\n
</li>
\r\n
{/* <li>
\r\n
<a href=
\"
./
\"
>
\r\n
<FontAwesomeIcon icon=
\"
sliders-h
\"
></FontAwesomeIcon> Preferences
\r\n
<FontAwesomeIcon icon=
\"
chevron-right
\"
className=
\"
arrow-right-icon
\"
></FontAwesomeIcon>
\r\n
</a>
\r\n
</li> */}
\r\n
<li>
\r\n
<a onClick={logout}>
\r\n
<FontAwesomeIcon icon=
\"
sign-out-alt
\"
></FontAwesomeIcon> Log out
\r\n
</a>
\r\n
</li>
\r\n
</ul>
\r\n
</div>
\r\n
</div>
\r\n
</li >
\r\n
)
\r\n
}
\r\n\r\n
export default DropdownMenu"
]},
"metadata"
:{},
"sourceType"
:
"module"
}
\ No newline at end of file
client/node_modules/.cache/babel-loader/06bd9c8ffb70f08d3d5a4570d4e2e4a6.json
0 → 100644
View file @
e4f09cae
{
"ast"
:
null
,
"code"
:
"var _jsxFileName =
\"
C:
\\\\
Users
\\\\
Bruger
\\\\
Desktop
\\\\
Web-projects
\\\\
pipit
\\\\
client
\\\\
src
\\\\
App.jsx
\"
,
\n
_s = $RefreshSig$();
\n\n
import React from
\"
react
\"
;
\n
import { Route, Switch, useHistory } from
\"
react-router-dom
\"
;
\n
import { useOktaAuth } from '@okta/okta-react';
\n
import { library } from '@fortawesome/fontawesome-svg-core';
\n
import { fas } from '@fortawesome/free-solid-svg-icons';
\n
import { OktaAuth, toRelativeUrl } from '@okta/okta-auth-js';
\n
import { Security, SecureRoute, LoginCallback } from
\"
@okta/okta-react
\"
;
\n
import
\"
./style.css
\"
;
\n
import config from
\"
./config
\"
; //Components
\n\n
import Login from
\"
./pages/login/Login
\"
;
\n
import Navbar from
\"
./components/navbar/Navbar
\"
;
\n
import Home from
\"
./pages/home/Home
\"
;
\n
import ReportForm from
\"
./pages/reportForm/ReportForm
\"
;
\n
import ProjectOverview from
\"
./pages/project/projectOverview/ProjectOverview
\"
;
\n
import ProjectInfo from
\"
./pages/project/projectInfo/ProjectInfo
\"
;
\n
import TeamOverview from
\"
./pages/team/teamOverview/TeamOverview
\"
;
\n
import TeamInfo from
\"
./pages/team/teamInfo/TeamInfo
\"
;
\n
import Messages from
\"
./pages/Messages/Messages
\"
;
\n
import { jsxDEV as _jsxDEV } from
\"
react/jsx-dev-runtime
\"
;
\n
library.add(fas);
\n
const oktaAuth = new OktaAuth(config.oidc);
\n
const CALLBACK_PATH = '/login/callback';
\n\n
const App = () => {
\n
_s();
\n\n
const history = useHistory();
\n
const {
\n
authState
\n
} = oktaAuth.isAuthenticated;
\n\n
const restoreOriginalUri = async (_oktaAuth, originalUri) => {
\n
history.replace(toRelativeUrl(originalUri || '/', window.location.origin));
\n
};
\n\n
if (!authState) {
\n
console.log(
\"
Is logged in
\"
);
\n
}
\n\n
return /*#__PURE__*/_jsxDEV(Security, {
\n
oktaAuth: oktaAuth,
\n
restoreOriginalUri: restoreOriginalUri,
\n
children: [/*#__PURE__*/_jsxDEV(Navbar, {}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 40,
\n
columnNumber: 7
\n
}, this), /*#__PURE__*/_jsxDEV(Switch, {
\n
children: [/*#__PURE__*/_jsxDEV(Route, {
\n
path:
\"
/
\"
,
\n
exact: true,
\n
component: Login
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 42,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(Route, {
\n
path: CALLBACK_PATH,
\n
component: LoginCallback
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 43,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(SecureRoute, {
\n
path:
\"
/home
\"
,
\n
component: Home
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 44,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(SecureRoute, {
\n
path:
\"
/reportissue
\"
,
\n
component: ReportForm
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 45,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(SecureRoute, {
\n
path:
\"
/projects
\"
,
\n
component: ProjectOverview
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 46,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(SecureRoute, {
\n
path:
\"
/ReactApp
\"
,
\n
component: ProjectInfo
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 47,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(SecureRoute, {
\n
path:
\"
/teams
\"
,
\n
component: TeamOverview
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 48,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(SecureRoute, {
\n
path:
\"
/HenriksMemeMachine
\"
,
\n
component: TeamInfo
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 49,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(SecureRoute, {
\n
path:
\"
/messages
\"
,
\n
component: Messages
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 50,
\n
columnNumber: 9
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 41,
\n
columnNumber: 7
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 39,
\n
columnNumber: 5
\n
}, this);
\n
};
\n\n
_s(App,
\"
9cZfZ04734qoCGIctmKX7+sX6eU=
\"
, false, function () {
\n
return [useHistory];
\n
});
\n\n
_c = App;
\n
export default App;
\n\n
var _c;
\n\n
$RefreshReg$(_c,
\"
App
\"
);"
,
"map"
:{
"version"
:
3
,
"sources"
:[
"C:/Users/Bruger/Desktop/Web-projects/pipit/client/src/App.jsx"
],
"names"
:[
"React"
,
"Route"
,
"Switch"
,
"useHistory"
,
"useOktaAuth"
,
"library"
,
"fas"
,
"OktaAuth"
,
"toRelativeUrl"
,
"Security"
,
"SecureRoute"
,
"LoginCallback"
,
"config"
,
"Login"
,
"Navbar"
,
"Home"
,
"ReportForm"
,
"ProjectOverview"
,
"ProjectInfo"
,
"TeamOverview"
,
"TeamInfo"
,
"Messages"
,
"add"
,
"oktaAuth"
,
"oidc"
,
"CALLBACK_PATH"
,
"App"
,
"history"
,
"authState"
,
"isAuthenticated"
,
"restoreOriginalUri"
,
"_oktaAuth"
,
"originalUri"
,
"replace"
,
"window"
,
"location"
,
"origin"
,
"console"
,
"log"
],
"mappings"
:
"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"
,
"sourcesContent"
:[
"import React from
\"
react
\"\r\n
import { Route, Switch, useHistory } from
\"
react-router-dom
\"\r\n
import { useOktaAuth } from '@okta/okta-react';
\r\n
import { library } from '@fortawesome/fontawesome-svg-core'
\r\n
import { fas } from '@fortawesome/free-solid-svg-icons'
\r\n
import { OktaAuth, toRelativeUrl } from '@okta/okta-auth-js';
\r\n
import { Security, SecureRoute, LoginCallback } from
\"
@okta/okta-react
\"\r\n
import
\"
./style.css
\"\r\n
import config from
\"
./config
\"\r\n\r\n
//Components
\r\n
import Login from
\"
./pages/login/Login
\"\r\n
import Navbar from
\"
./components/navbar/Navbar
\"\r\n
import Home from
\"
./pages/home/Home
\"\r\n
import ReportForm from
\"
./pages/reportForm/ReportForm
\"\r\n
import ProjectOverview from
\"
./pages/project/projectOverview/ProjectOverview
\"\r\n
import ProjectInfo from
\"
./pages/project/projectInfo/ProjectInfo
\"\r\n
import TeamOverview from
\"
./pages/team/teamOverview/TeamOverview
\"\r\n
import TeamInfo from
\"
./pages/team/teamInfo/TeamInfo
\"\r\n
import Messages from
\"
./pages/Messages/Messages
\"\r\n\r\n
library.add(fas)
\r\n\r\n
const oktaAuth = new OktaAuth(config.oidc);
\r\n
const CALLBACK_PATH = '/login/callback';
\r\n\r\n
const App = () => {
\r\n
const history = useHistory()
\r\n
const { authState } = oktaAuth.isAuthenticated
\r\n
const restoreOriginalUri = async (_oktaAuth, originalUri) => {
\r\n
history.replace(toRelativeUrl(originalUri || '/', window.location.origin))
\r\n
}
\r\n\r\n
if (!authState) {
\r\n
console.log(
\"
Is logged in
\"
)
\r\n
}
\r\n\r\n
return (
\r\n
<Security oktaAuth={oktaAuth} restoreOriginalUri={restoreOriginalUri}>
\r\n
<Navbar />
\r\n
<Switch>
\r\n
<Route path=
\"
/
\"
exact component={Login} />
\r\n
<Route path={CALLBACK_PATH} component={LoginCallback} />
\r\n
<SecureRoute path=
\"
/home
\"
component={Home} />
\r\n
<SecureRoute path=
\"
/reportissue
\"
component={ReportForm} />
\r\n
<SecureRoute path=
\"
/projects
\"
component={ProjectOverview} />
\r\n
<SecureRoute path=
\"
/ReactApp
\"
component={ProjectInfo} />
\r\n
<SecureRoute path=
\"
/teams
\"
component={TeamOverview} />
\r\n
<SecureRoute path=
\"
/HenriksMemeMachine
\"
component={TeamInfo} />
\r\n
<SecureRoute path=
\"
/messages
\"
component={Messages} />
\r\n
</Switch>
\r\n
</Security>
\r\n
)
\r\n
}
\r\n\r\n
export default App"
]},
"metadata"
:{},
"sourceType"
:
"module"
}
\ No newline at end of file
client/node_modules/.cache/babel-loader/0988dcb328ce6132101066cf9d1ee383.json
0 → 100644
View file @
e4f09cae
{
"ast"
:
null
,
"code"
:
"var _jsxFileName =
\"
C:
\\\\
Users
\\\\
Bruger
\\\\
Desktop
\\\\
Web-projects
\\\\
pipit
\\\\
client
\\\\
src
\\\\
pages
\\\\
login
\\\\
Login.jsx
\"
,
\n
_s = $RefreshSig$();
\n\n
import React, { useState, useEffect, useRef } from 'react';
\n
import { Redirect } from 'react-router-dom';
\n
import { useOktaAuth } from '@okta/okta-react';
\n
import
\"
./Login.css
\"
;
\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
\n
import { NavLink } from 'react-router-dom';
\n
import config from
\"
../../config
\"
;
\n
import { jsxDEV as _jsxDEV } from
\"
react/jsx-dev-runtime
\"
;
\n\n
const SignUp = () => {
\n
_s();
\n\n
const {
\n
oktaAuth
\n
} = useOktaAuth();
\n
const [sessionToken, setSessionToken] = useState();
\n
const signUpFormRef = useRef(null);
\n
const [signUpFormVisibilityState, showSignUpForm] = useState(false);
\n\n
const toggleSignInFormVisible = () => showSignUpForm(!signUpFormVisibilityState);
\n\n
const [firstname, setfirstname] = useState('');
\n
const [lastname, setlastname] = useState('');
\n
const [username, setUsername] = useState('');
\n
const [password, setPassword] = useState('');
\n
useEffect(() => {
\n
const pageClickEvent = e => {
\n
console.log(
\"
Click
\"
);
\n\n
if (signUpFormRef.current !== null && !signUpFormRef.current.contains(e.target)) {
\n
console.log(
\"
Form visible:
\"
+ signUpFormVisibilityState);
\n
toggleSignInFormVisible();
\n
}
\n
}; // If the item is active (ie open) then listen for clicks
\n\n\n
if (signUpFormVisibilityState) {
\n
console.log(
\"
Add eventlistener
\"
);
\n
window.addEventListener('click', pageClickEvent);
\n
}
\n\n
return () => {
\n
console.log(
\"
Remove eventlistener
\"
);
\n
window.removeEventListener('click', pageClickEvent);
\n
};
\n
}, [signUpFormVisibilityState]);
\n
const userInputData = JSON.stringify({
\n
firstname: `${firstname}`,
\n
lastname: `${lastname}`,
\n
email: `${username}`,
\n
password: `${password}`
\n
});
\n
const loginRequestOptions = {
\n
method: 'POST',
\n
body: userInputData
\n
};
\n
const resetPasswordRequestOptions = {
\n
method: 'PUT',
\n
body: userInputData
\n
};
\n\n
const handleSignUpFormSubmit = e => {
\n
e.preventDefault();
\n
fetch(config.serviceAPI.createNewUserURL, loginRequestOptions).then(res => {
\n
if (!res.ok) {
\n
window.alert(
\"
Error
\"
);
\n
Promise.reject(
\"\"
);
\n
return;
\n
}
\n\n
if (res.ok) {
\n
handleSignInFormSubmit(e);
\n
}
\n
});
\n
};
\n\n
const handleSignInFormSubmit = e => {
\n
e.preventDefault();
\n
oktaAuth.signInWithCredentials({
\n
username,
\n
password
\n
}).then(res => {
\n
const sessionToken = res.sessionToken;
\n
setSessionToken(sessionToken); // sessionToken is a one-use token, so make sure this is only called once
\n\n
oktaAuth.signInWithRedirect({
\n
sessionToken,
\n
originalUri: '/home'
\n
});
\n
}).catch(err => console.log('Found an error', err));
\n
};
\n\n
const handlefirstnameChange = e => {
\n
setfirstname(e.target.value);
\n
};
\n\n
const handlelastnameChange = e => {
\n
setlastname(e.target.value);
\n
};
\n\n
const handleUsernameChange = e => {
\n
setUsername(e.target.value);
\n
};
\n\n
const handlePasswordChange = e => {
\n
setPassword(e.target.value);
\n
};
\n\n
if (sessionToken) {
\n
// Hide form while sessionToken is converted into id/access tokens
\n
return null;
\n
}
\n\n
const handlePasswordReset = () => {
\n
if (!username == '') {
\n
fetch(config.serviceAPI.resetPasswordURL, resetPasswordRequestOptions).then(res => {
\n
if (!res.ok) {
\n
window.alert(
\"
Error: something went wrong
\"
);
\n
Promise.reject(
\"\"
);
\n
return;
\n
}
\n\n
if (res.ok) {// do something
\n
}
\n
});
\n
} else {
\n
window.alert(
\"
Please enter a valid email into the login form
\"
);
\n
}
\n
};
\n\n
return /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
pageContainer
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className: `modal ${signUpFormVisibilityState ?
\"
active
\"
:
\"
inactive
\"
}`,
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
ref: signUpFormRef,
\n
className:
\"
modal-content
\"
,
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
signUpForm
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
h2
\"
, {
\n
children:
\"
Sign Up
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 137,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
form
\"
, {
\n
onSubmit: handleSignUpFormSubmit,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
label
\"
, {
\n
children: [
\"
First name:
\"
, /*#__PURE__*/_jsxDEV(
\"
input
\"
, {
\n
id:
\"
firstname
\"
,
\n
type:
\"
text
\"
,
\n
value: firstname,
\n
onChange: handlefirstnameChange
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 141,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 139,
\n
columnNumber: 15
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
label
\"
, {
\n
children: [
\"
Last Name:
\"
, /*#__PURE__*/_jsxDEV(
\"
input
\"
, {
\n
id:
\"
lastname
\"
,
\n
type:
\"
text
\"
,
\n
value: lastname,
\n
onChange: handlelastnameChange
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 148,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 146,
\n
columnNumber: 15
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
label
\"
, {
\n
children: [
\"
Email:
\"
, /*#__PURE__*/_jsxDEV(
\"
input
\"
, {
\n
id:
\"
email
\"
,
\n
type:
\"
text
\"
,
\n
value: username,
\n
onChange: handleUsernameChange
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 155,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 153,
\n
columnNumber: 15
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
label
\"
, {
\n
children: [
\"
Password:
\"
, /*#__PURE__*/_jsxDEV(
\"
input
\"
, {
\n
id:
\"
password
\"
,
\n
type:
\"
password
\"
,
\n
value: password,
\n
onChange: handlePasswordChange
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 162,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 160,
\n
columnNumber: 15
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
label
\"
, {
\n
className:
\"
password-requirements
\"
,
\n
children:
\"
Requirements: At least 8 characters, no parts of your username
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 167,
\n
columnNumber: 15
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
button
\"
, {
\n
className:
\"
formSubmitButton
\"
,
\n
type:
\"
submit
\"
,
\n
children: [
\"
Sign Up
\\
xA0
\\
xA0
\"
, /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
user-plus
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 172,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 170,
\n
columnNumber: 15
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 138,
\n
columnNumber: 13
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 136,
\n
columnNumber: 11
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 135,
\n
columnNumber: 9
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 133,
\n
columnNumber: 7
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
spacer
\"
,
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
text-container
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
h1
\"
, {
\n
children:
\"
Get started with PipIt
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 181,
\n
columnNumber: 11
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
h5
\"
, {
\n
children:
\"
Track bugs and usabilty issues
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 182,
\n
columnNumber: 11
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
button
\"
, {
\n
className:
\"
signUpForm-show-button
\"
,
\n
onClick: toggleSignInFormVisible,
\n
children:
\"
Sign up
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 183,
\n
columnNumber: 11
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 180,
\n
columnNumber: 9
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 179,
\n
columnNumber: 7
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
signInForm
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
h2
\"
, {
\n
children:
\"
Sign in to PipIt
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 190,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
form
\"
, {
\n
onSubmit: handleSignInFormSubmit,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
label
\"
, {
\n
children: [
\"
Email:
\"
, /*#__PURE__*/_jsxDEV(
\"
input
\"
, {
\n
id:
\"
username
\"
,
\n
type:
\"
text
\"
,
\n
value: signUpFormVisibilityState ? null : username,
\n
onChange: handleUsernameChange
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 194,
\n
columnNumber: 13
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 192,
\n
columnNumber: 11
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
label
\"
, {
\n
children: [
\"
Password:
\"
, /*#__PURE__*/_jsxDEV(
\"
input
\"
, {
\n
id:
\"
password
\"
,
\n
type:
\"
password
\"
,
\n
value: signUpFormVisibilityState ? null : password,
\n
onChange: handlePasswordChange
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 201,
\n
columnNumber: 13
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 199,
\n
columnNumber: 11
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
button
\"
, {
\n
className:
\"
formSubmitButton
\"
,
\n
type:
\"
submit
\"
,
\n
children: [
\"
Sign in
\\
xA0
\\
xA0
\"
, /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
sign-in-alt
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 208,
\n
columnNumber: 13
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 206,
\n
columnNumber: 11
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 191,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
password-forgot-prompt
\"
,
\n
children: /*#__PURE__*/_jsxDEV(
\"
span
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
a
\"
, {
\n
onClick: handlePasswordReset,
\n
children:
\"
Forgot password
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 213,
\n
columnNumber: 13
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 212,
\n
columnNumber: 11
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 211,
\n
columnNumber: 9
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 189,
\n
columnNumber: 7
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 131,
\n
columnNumber: 5
\n
}, this);
\n
};
\n\n
_s(SignUp,
\"
dJvzxnAeGIhmgkiDj0Soq4eImik=
\"
, false, function () {
\n
return [useOktaAuth];
\n
});
\n\n
_c = SignUp;
\n
export default SignUp;
\n\n
var _c;
\n\n
$RefreshReg$(_c,
\"
SignUp
\"
);"
,
"map"
:{
"version"
:
3
,
"sources"
:[
"C:/Users/Bruger/Desktop/Web-projects/pipit/client/src/pages/login/Login.jsx"
],
"names"
:[
"React"
,
"useState"
,
"useEffect"
,
"useRef"
,
"Redirect"
,
"useOktaAuth"
,
"FontAwesomeIcon"
,
"NavLink"
,
"config"
,
"SignUp"
,
"oktaAuth"
,
"sessionToken"
,
"setSessionToken"
,
"signUpFormRef"
,
"signUpFormVisibilityState"
,
"showSignUpForm"
,
"toggleSignInFormVisible"
,
"firstname"
,
"setfirstname"
,
"lastname"
,
"setlastname"
,
"username"
,
"setUsername"
,
"password"
,
"setPassword"
,
"pageClickEvent"
,
"e"
,
"console"
,
"log"
,
"current"
,
"contains"
,
"target"
,
"window"
,
"addEventListener"
,
"removeEventListener"
,
"userInputData"
,
"JSON"
,
"stringify"
,
"email"
,
"loginRequestOptions"
,
"method"
,
"body"
,
"resetPasswordRequestOptions"
,
"handleSignUpFormSubmit"
,
"preventDefault"
,
"fetch"
,
"serviceAPI"
,
"createNewUserURL"
,
"then"
,
"res"
,
"ok"
,
"alert"
,
"Promise"
,
"reject"
,
"handleSignInFormSubmit"
,
"signInWithCredentials"
,
"signInWithRedirect"
,
"originalUri"
,
"catch"
,
"err"
,
"handlefirstnameChange"
,
"value"
,
"handlelastnameChange"
,
"handleUsernameChange"
,
"handlePasswordChange"
,
"handlePasswordReset"
,
"resetPasswordURL"
],
"mappings"
:
"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"
,
"sourcesContent"
:[
"import React, { useState, useEffect, useRef } from 'react';
\r\n
import { Redirect } from 'react-router-dom'
\r\n
import { useOktaAuth } from '@okta/okta-react';
\r\n
import
\"
./Login.css
\"\r\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
\r\n
import { NavLink } from 'react-router-dom';
\r\n
import config from
\"
../../config
\"\r\n\r\n
const SignUp = () => {
\r\n
const { oktaAuth } = useOktaAuth();
\r\n
const [sessionToken, setSessionToken] = useState()
\r\n\r\n
const signUpFormRef = useRef(null);
\r\n
const [signUpFormVisibilityState, showSignUpForm] = useState(false)
\r\n
const toggleSignInFormVisible = () => showSignUpForm(!signUpFormVisibilityState)
\r\n\r\n
const [firstname, setfirstname] = useState('')
\r\n
const [lastname, setlastname] = useState('')
\r\n
const [username, setUsername] = useState('');
\r\n
const [password, setPassword] = useState('');
\r\n\r\n
useEffect(() => {
\r\n
const pageClickEvent = (e) => {
\r\n
console.log(
\"
Click
\"
)
\r\n
if (signUpFormRef.current !== null && !signUpFormRef.current.contains(e.target)) {
\r\n
console.log(
\"
Form visible:
\"
+ signUpFormVisibilityState)
\r\n
toggleSignInFormVisible()
\r\n
}
\r\n
};
\r\n\r\n
// If the item is active (ie open) then listen for clicks
\r\n
if (signUpFormVisibilityState) {
\r\n
console.log(
\"
Add eventlistener
\"
)
\r\n
window.addEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
return () => {
\r\n
console.log(
\"
Remove eventlistener
\"
)
\r\n
window.removeEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
}, [signUpFormVisibilityState]);
\r\n\r\n
const userInputData = JSON.stringify({
\r\n
firstname: `${firstname}`,
\r\n
lastname: `${lastname}`,
\r\n
email: `${username}`,
\r\n
password: `${password}`
\r\n
})
\r\n\r\n
const loginRequestOptions = {
\r\n
method: 'POST',
\r\n
body: userInputData
\r\n
};
\r\n\r\n
const resetPasswordRequestOptions = {
\r\n
method: 'PUT',
\r\n
body: userInputData
\r\n
}
\r\n\r\n
const handleSignUpFormSubmit = (e) => {
\r\n
e.preventDefault();
\r\n\r\n
fetch(config.serviceAPI.createNewUserURL, loginRequestOptions)
\r\n
.then((res) => {
\r\n
if (!res.ok) {
\r\n
window.alert(
\"
Error
\"
)
\r\n
Promise.reject(
\"\"
)
\r\n
return
\r\n
}
\r\n
if (res.ok) {
\r\n
handleSignInFormSubmit(e)
\r\n
}
\r\n
})
\r\n
}
\r\n\r\n
const handleSignInFormSubmit = (e) => {
\r\n
e.preventDefault();
\r\n\r\n
oktaAuth.signInWithCredentials({ username, password })
\r\n
.then(res => {
\r\n
const sessionToken = res.sessionToken;
\r\n
setSessionToken(sessionToken);
\r\n
// sessionToken is a one-use token, so make sure this is only called once
\r\n
oktaAuth.signInWithRedirect({ sessionToken, originalUri: '/home' });
\r\n
})
\r\n
.catch(err => console.log('Found an error', err));
\r\n
};
\r\n\r\n
const handlefirstnameChange = (e) => {
\r\n
setfirstname(e.target.value)
\r\n
}
\r\n\r\n
const handlelastnameChange = (e) => {
\r\n
setlastname(e.target.value)
\r\n
}
\r\n\r\n
const handleUsernameChange = (e) => {
\r\n
setUsername(e.target.value);
\r\n
};
\r\n\r\n
const handlePasswordChange = (e) => {
\r\n
setPassword(e.target.value)
\r\n
}
\r\n\r\n
if (sessionToken) {
\r\n
// Hide form while sessionToken is converted into id/access tokens
\r\n
return null;
\r\n
}
\r\n\r\n
const handlePasswordReset = () => {
\r\n
if (!username == '') {
\r\n
fetch(config.serviceAPI.resetPasswordURL, resetPasswordRequestOptions)
\r\n
.then((res) => {
\r\n
if (!res.ok) {
\r\n
window.alert(
\"
Error: something went wrong
\"
)
\r\n
Promise.reject(
\"\"
)
\r\n
return
\r\n
}
\r\n
if (res.ok) {
\r\n
// do something
\r\n
}
\r\n
})
\r\n
}
\r\n
else {
\r\n
window.alert(
\"
Please enter a valid email into the login form
\"
)
\r\n
}
\r\n
}
\r\n\r\n
return (
\r\n
<div className=
\"
pageContainer
\"
>
\r\n
{/* The Modal */}
\r\n
<div className={`modal ${signUpFormVisibilityState ?
\"
active
\"
:
\"
inactive
\"
}`}>
\r\n\r\n
<div ref={signUpFormRef} className=
\"
modal-content
\"
>
\r\n
<div className=
\"
signUpForm
\"
>
\r\n
<h2>Sign Up</h2>
\r\n
<form onSubmit={handleSignUpFormSubmit}>
\r\n
<label>
\r\n
First name:
\r\n
<input
\r\n
id=
\"
firstname
\"
type=
\"
text
\"\r\n
value={firstname}
\r\n
onChange={handlefirstnameChange} />
\r\n
</label>
\r\n
<label>
\r\n
Last Name:
\r\n
<input
\r\n
id=
\"
lastname
\"
type=
\"
text
\"\r\n
value={lastname}
\r\n
onChange={handlelastnameChange} />
\r\n
</label>
\r\n
<label>
\r\n
Email:
\r\n
<input
\r\n
id=
\"
email
\"
type=
\"
text
\"\r\n
value={username}
\r\n
onChange={handleUsernameChange} />
\r\n
</label>
\r\n
<label>
\r\n
Password:
\r\n
<input
\r\n
id=
\"
password
\"
type=
\"
password
\"\r\n
value={password}
\r\n
onChange={handlePasswordChange} />
\r\n
</label>
\r\n
<label className=
\"
password-requirements
\"
>
\r\n
Requirements: At least 8 characters, no parts of your username
\r\n
</label>
\r\n
<button className=
\"
formSubmitButton
\"
type=
\"
submit
\"
>
\r\n
Sign Up
\r\n
<FontAwesomeIcon icon=
\"
user-plus
\"
></FontAwesomeIcon>
\r\n
</button>
\r\n
</form>
\r\n
</div>
\r\n
</div>
\r\n\r\n
</div>
\r\n
<div className=
\"
spacer
\"
>
\r\n
<div className=
\"
text-container
\"
>
\r\n
<h1>Get started with PipIt</h1>
\r\n
<h5>Track bugs and usabilty issues</h5>
\r\n
<button className=
\"
signUpForm-show-button
\"
onClick={toggleSignInFormVisible}>
\r\n
Sign up
\r\n
</button>
\r\n
</div>
\r\n
</div>
\r\n\r\n
<div className=
\"
signInForm
\"
>
\r\n
<h2>Sign in to PipIt</h2>
\r\n
<form onSubmit={handleSignInFormSubmit}>
\r\n
<label>
\r\n
Email:
\r\n
<input
\r\n
id=
\"
username
\"
type=
\"
text
\"\r\n
value={signUpFormVisibilityState ? null : username}
\r\n
onChange={handleUsernameChange} />
\r\n
</label>
\r\n
<label>
\r\n
Password:
\r\n
<input
\r\n
id=
\"
password
\"
type=
\"
password
\"\r\n
value={signUpFormVisibilityState ? null : password}
\r\n
onChange={handlePasswordChange} />
\r\n
</label>
\r\n
<button className=
\"
formSubmitButton
\"
type=
\"
submit
\"
>
\r\n
Sign in
\r\n
<FontAwesomeIcon icon=
\"
sign-in-alt
\"
></FontAwesomeIcon>
\r\n
</button>
\r\n
</form>
\r\n
<div className=
\"
password-forgot-prompt
\"
>
\r\n
<span>
\r\n
<a onClick={handlePasswordReset}>Forgot password</a>
\r\n
</span>
\r\n
</div>
\r\n
</div>
\r\n
</div>
\r\n
)
\r\n
}
\r\n\r\n
export default SignUp"
]},
"metadata"
:{},
"sourceType"
:
"module"
}
\ No newline at end of file
client/node_modules/.cache/babel-loader/0b12bda3b6f9096e5f27733276f8ef2e.json
0 → 100644
View file @
e4f09cae
{
"ast"
:
null
,
"code"
:
"var _jsxFileName =
\"
C:
\\\\
Users
\\\\
Bruger
\\\\
Desktop
\\\\
Web-projects
\\\\
pipit
\\\\
client
\\\\
src
\\\\
components
\\\\
navbar
\\\\
dropdownMenu
\\\\
NavbarDropdownMenu.jsx
\"
,
\n
_s = $RefreshSig$();
\n\n
import React, { useRef, useState, useEffect } from 'react';
\n
import { NavLink } from
\"
react-router-dom
\"
;
\n
import { useOktaAuth } from '@okta/okta-react';
\n
import
\"
./NavbarDropdownMenu.css
\"
;
\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
\n
import { jsxDEV as _jsxDEV } from
\"
react/jsx-dev-runtime
\"
;
\n\n
const DropdownMenu = () => {
\n
_s();
\n\n
const {
\n
authState,
\n
oktaAuth
\n
} = useOktaAuth();
\n
const [userInfo, setUserInfo] = useState(null);
\n
const dropdownRef = useRef(null);
\n
const [isActive, setIsActive] = useState(false);
\n\n
const onClick = () => setIsActive(!isActive);
\n\n
useEffect(() => {
\n
const pageClickEvent = e => {
\n
if (dropdownRef.current !== null && !dropdownRef.current.contains(e.target)) {
\n
setIsActive(!isActive);
\n
}
\n
}; // If the item is active (ie open) then listen for clicks
\n\n\n
if (isActive) {
\n
window.addEventListener('click', pageClickEvent);
\n
}
\n\n
return () => {
\n
window.removeEventListener('click', pageClickEvent);
\n
};
\n
}, [isActive]);
\n
useEffect(() => {
\n
if (!authState.isAuthenticated) {
\n
// When user isn't authenticated, forget any user info
\n
setUserInfo(null);
\n
} else {
\n
oktaAuth.getUser().then(info => {
\n
setUserInfo(info);
\n
});
\n
}
\n
}, [authState, oktaAuth]); // Update if authState changes
\n\n
const logout = () => {
\n
oktaAuth.signOut();
\n
};
\n\n
return /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
navbar-user-dropdown-container
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
button
\"
, {
\n
className: `user-dropdown-menu-toggle-button ${isActive ? 'active' : 'inactive'}`,
\n
onClick: onClick,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
user-icon
\"
,
\n
icon:
\"
user-circle
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 53,
\n
columnNumber: 11
\n
}, this), /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
down-arrow
\"
,
\n
icon:
\"
angle-down
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 54,
\n
columnNumber: 11
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 52,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
ref: dropdownRef,
\n
className: `user-dropDown-menu-content ${isActive ? 'active' : 'inactive'}`,
\n
children: /*#__PURE__*/_jsxDEV(
\"
ul
\"
, {
\n
children: [/*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
menu-item
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
item-text-top
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
upper-row
\"
,
\n
children: /*#__PURE__*/_jsxDEV(NavLink, {
\n
to:
\"
/account
\"
,
\n
className:
\"
menu-item-link
\"
,
\n
children:
\"
Account
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 64,
\n
columnNumber: 21
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 63,
\n
columnNumber: 19
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
bottom-row
\"
,
\n
children: /*#__PURE__*/_jsxDEV(NavLink, {
\n
to:
\"
/account
\"
,
\n
className:
\"
menu-item-link-bottom
\"
,
\n
children: userInfo ? userInfo.email :
\"
...
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 69,
\n
columnNumber: 21
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 68,
\n
columnNumber: 19
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 62,
\n
columnNumber: 17
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
item-icon-top
\"
,
\n
icon:
\"
user-circle
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 75,
\n
columnNumber: 19
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 74,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 61,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 60,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
menu-item
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
item-text
\"
,
\n
children: /*#__PURE__*/_jsxDEV(NavLink, {
\n
to:
\"
/account
\"
,
\n
className:
\"
menu-item-link
\"
,
\n
children:
\"
Messages
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 83,
\n
columnNumber: 19
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 82,
\n
columnNumber: 17
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
item-icon
\"
,
\n
icon:
\"
envelope
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 88,
\n
columnNumber: 19
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 87,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 81,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 80,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
li
\"
, {}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 102,
\n
columnNumber: 13
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 58,
\n
columnNumber: 11
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 57,
\n
columnNumber: 9
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 51,
\n
columnNumber: 7
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 50,
\n
columnNumber: 5
\n
}, this);
\n
};
\n\n
_s(DropdownMenu,
\"
fSJPYre4v1rGcIZdck7wMJJU1dU=
\"
, false, function () {
\n
return [useOktaAuth];
\n
});
\n\n
_c = DropdownMenu;
\n
export default DropdownMenu;
\n\n
var _c;
\n\n
$RefreshReg$(_c,
\"
DropdownMenu
\"
);"
,
"map"
:{
"version"
:
3
,
"sources"
:[
"C:/Users/Bruger/Desktop/Web-projects/pipit/client/src/components/navbar/dropdownMenu/NavbarDropdownMenu.jsx"
],
"names"
:[
"React"
,
"useRef"
,
"useState"
,
"useEffect"
,
"NavLink"
,
"useOktaAuth"
,
"FontAwesomeIcon"
,
"DropdownMenu"
,
"authState"
,
"oktaAuth"
,
"userInfo"
,
"setUserInfo"
,
"dropdownRef"
,
"isActive"
,
"setIsActive"
,
"onClick"
,
"pageClickEvent"
,
"e"
,
"current"
,
"contains"
,
"target"
,
"window"
,
"addEventListener"
,
"removeEventListener"
,
"isAuthenticated"
,
"getUser"
,
"then"
,
"info"
,
"logout"
,
"signOut"
,
"email"
],
"mappings"
:
"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"
,
"sourcesContent"
:[
"import React, { useRef, useState, useEffect } from 'react'
\r\n
import { NavLink } from
\"
react-router-dom
\"
;
\r\n
import { useOktaAuth } from '@okta/okta-react';
\r\n
import
\"
./NavbarDropdownMenu.css
\"\r\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
\r\n\r\n\r\n
const DropdownMenu = () => {
\r\n
const { authState, oktaAuth } = useOktaAuth();
\r\n
const [userInfo, setUserInfo] = useState(null);
\r\n\r\n
const dropdownRef = useRef(null);
\r\n
const [isActive, setIsActive] = useState(false);
\r\n
const onClick = () => setIsActive(!isActive);
\r\n\r\n
useEffect(() => {
\r\n
const pageClickEvent = (e) => {
\r\n
if (dropdownRef.current !== null && !dropdownRef.current.contains(e.target)) {
\r\n
setIsActive(!isActive);
\r\n
}
\r\n
};
\r\n\r\n
// If the item is active (ie open) then listen for clicks
\r\n
if (isActive) {
\r\n
window.addEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
return () => {
\r\n
window.removeEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
}, [isActive]);
\r\n\r\n
useEffect(() => {
\r\n
if (!authState.isAuthenticated) {
\r\n
// When user isn't authenticated, forget any user info
\r\n
setUserInfo(null);
\r\n
} else {
\r\n
oktaAuth.getUser().then(info => {
\r\n
setUserInfo(info);
\r\n
});
\r\n
}
\r\n
}, [authState, oktaAuth]); // Update if authState changes
\r\n\r\n
const logout = () => {
\r\n
oktaAuth.signOut()
\r\n
}
\r\n\r\n
return (
\r\n
<li>
\r\n
<div className=
\"
navbar-user-dropdown-container
\"
>
\r\n
<button className={`user-dropdown-menu-toggle-button ${isActive ? 'active' : 'inactive'}`} onClick={onClick} >
\r\n
<FontAwesomeIcon className=
\"
user-icon
\"
icon=
\"
user-circle
\"
></FontAwesomeIcon>
\r\n
<FontAwesomeIcon className=
\"
down-arrow
\"
icon=
\"
angle-down
\"
></FontAwesomeIcon>
\r\n
</button>
\r\n
{/* show submenu?*/}
\r\n
<div ref={dropdownRef} className={`user-dropDown-menu-content ${isActive ? 'active' : 'inactive'}`}>
\r\n
<ul>
\r\n\r\n
<li>
\r\n
<div className=
\"
menu-item
\"
>
\r\n
<div className=
\"
item-text-top
\"
>
\r\n
<div className=
\"
upper-row
\"
>
\r\n
<NavLink to=
\"
/account
\"
className=
\"
menu-item-link
\"
>
\r\n
Account
\r\n
</NavLink>
\r\n
</div>
\r\n
<div className=
\"
bottom-row
\"
>
\r\n
<NavLink to=
\"
/account
\"
className=
\"
menu-item-link-bottom
\"
>
\r\n
{userInfo ? userInfo.email :
\"
...
\"
}
\r\n
</NavLink>
\r\n
</div>
\r\n
</div>
\r\n
<div>
\r\n
<FontAwesomeIcon className=
\"
item-icon-top
\"
icon=
\"
user-circle
\"
></FontAwesomeIcon>
\r\n
</div>
\r\n
</div>
\r\n
</li>
\r\n\r\n
<li>
\r\n
<div className=
\"
menu-item
\"
>
\r\n
<div className=
\"
item-text
\"
>
\r\n
<NavLink to=
\"
/account
\"
className=
\"
menu-item-link
\"
>
\r\n
Messages
\r\n
</NavLink>
\r\n
</div>
\r\n
<div>
\r\n
<FontAwesomeIcon className=
\"
item-icon
\"
icon=
\"
envelope
\"
></FontAwesomeIcon>
\r\n
</div>
\r\n
</div>
\r\n
{/* <NavLink to=
\"
/messages
\"
>
\r\n
\r\n
</NavLink> */}
\r\n
</li>
\r\n\r\n
{/* <li>
\r\n
<a href=
\"
./
\"
>
\r\n
<FontAwesomeIcon icon=
\"
sliders-h
\"
></FontAwesomeIcon> Preferences
\r\n
<FontAwesomeIcon icon=
\"
chevron-right
\"
className=
\"
item-icon-icon
\"
></FontAwesomeIcon>
\r\n
</a>
\r\n
</li> */}
\r\n
<li>
\r\n
{/* <a onClick={logout}>
\r\n
<FontAwesomeIcon icon=
\"
sign-out-alt
\"
></FontAwesomeIcon> Log out
\r\n
</a> */}
\r\n
</li>
\r\n
</ul>
\r\n
</div>
\r\n
</div>
\r\n
</li >
\r\n
)
\r\n
}
\r\n\r\n
export default DropdownMenu"
]},
"metadata"
:{},
"sourceType"
:
"module"
}
\ No newline at end of file
client/node_modules/.cache/babel-loader/0bf9d43066bed95ce82ef08e30ffa8f3.json
0 → 100644
View file @
e4f09cae
{
"ast"
:
null
,
"code"
:
"var _jsxFileName =
\"
C:
\\\\
Users
\\\\
Bruger
\\\\
Desktop
\\\\
Web-projects
\\\\
pipit
\\\\
client
\\\\
src
\\\\
components
\\\\
navbar
\\\\
dropdownMenu
\\\\
NavbarDropdownMenu.jsx
\"
,
\n
_s = $RefreshSig$();
\n\n
import React, { useRef, useState, useEffect } from 'react';
\n
import { NavLink } from
\"
react-router-dom
\"
;
\n
import { useOktaAuth } from '@okta/okta-react';
\n
import
\"
./NavbarDropdownMenu.css
\"
;
\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
\n
import { jsxDEV as _jsxDEV } from
\"
react/jsx-dev-runtime
\"
;
\n\n
const DropdownMenu = () => {
\n
_s();
\n\n
const {
\n
authState,
\n
oktaAuth
\n
} = useOktaAuth();
\n
const [userInfo, setUserInfo] = useState(null);
\n
const dropdownRef = useRef(null);
\n
const [isActive, setIsActive] = useState(false);
\n\n
const onClick = () => setIsActive(!isActive);
\n\n
useEffect(() => {
\n
const pageClickEvent = e => {
\n
if (dropdownRef.current !== null && !dropdownRef.current.contains(e.target)) {
\n
setIsActive(!isActive);
\n
}
\n
}; // If the item is active (ie open) then listen for clicks
\n\n\n
if (isActive) {
\n
window.addEventListener('click', pageClickEvent);
\n
}
\n\n
return () => {
\n
window.removeEventListener('click', pageClickEvent);
\n
};
\n
}, [isActive]);
\n
useEffect(() => {
\n
if (!authState.isAuthenticated) {
\n
// When user isn't authenticated, forget any user info
\n
setUserInfo(null);
\n
} else {
\n
oktaAuth.getUser().then(info => {
\n
setUserInfo(info);
\n
});
\n
}
\n
}, [authState, oktaAuth]); // Update if authState changes
\n\n
const logout = () => {
\n
oktaAuth.signOut();
\n
};
\n\n
return /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
navbar-user-dropdown-container
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
button
\"
, {
\n
className: `user-dropdown-menu-toggle-button ${isActive ? 'active' : 'inactive'}`,
\n
onClick: onClick,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
user-icon
\"
,
\n
icon:
\"
user-circle
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 53,
\n
columnNumber: 11
\n
}, this), /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
down-arrow
\"
,
\n
icon:
\"
angle-down
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 54,
\n
columnNumber: 11
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 52,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
ref: dropdownRef,
\n
className: `user-dropDown-menu-content ${isActive ? 'active' : 'inactive'}`,
\n
children: /*#__PURE__*/_jsxDEV(
\"
ul
\"
, {
\n
children: [/*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(NavLink, {
\n
to:
\"
/account
\"
,
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
accountLink
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
upper-row
\"
,
\n
children:
\"
Account
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 63,
\n
columnNumber: 21
\n
}, this), /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
arrow-right-icon-top
\"
,
\n
icon:
\"
chevron-right
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 66,
\n
columnNumber: 21
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
bottom-row
\"
,
\n
children: userInfo ? userInfo.email :
\"
...
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 67,
\n
columnNumber: 21
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 62,
\n
columnNumber: 19
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 61,
\n
columnNumber: 17
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 60,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 59,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(NavLink, {
\n
to:
\"
/messages
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
envelope
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 76,
\n
columnNumber: 17
\n
}, this),
\"\\
xA0
\\
xA0Messages
\"
, /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
chevron-right
\"
,
\n
className:
\"
arrow-right-icon
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 77,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 75,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 74,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
a
\"
, {
\n
onClick: logout,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
sign-out-alt
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 88,
\n
columnNumber: 17
\n
}, this),
\"\\
xA0
\\
xA0Log out
\"
]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 87,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 86,
\n
columnNumber: 13
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 58,
\n
columnNumber: 11
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 57,
\n
columnNumber: 9
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 51,
\n
columnNumber: 7
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 50,
\n
columnNumber: 5
\n
}, this);
\n
};
\n\n
_s(DropdownMenu,
\"
fSJPYre4v1rGcIZdck7wMJJU1dU=
\"
, false, function () {
\n
return [useOktaAuth];
\n
});
\n\n
_c = DropdownMenu;
\n
export default DropdownMenu;
\n\n
var _c;
\n\n
$RefreshReg$(_c,
\"
DropdownMenu
\"
);"
,
"map"
:{
"version"
:
3
,
"sources"
:[
"C:/Users/Bruger/Desktop/Web-projects/pipit/client/src/components/navbar/dropdownMenu/NavbarDropdownMenu.jsx"
],
"names"
:[
"React"
,
"useRef"
,
"useState"
,
"useEffect"
,
"NavLink"
,
"useOktaAuth"
,
"FontAwesomeIcon"
,
"DropdownMenu"
,
"authState"
,
"oktaAuth"
,
"userInfo"
,
"setUserInfo"
,
"dropdownRef"
,
"isActive"
,
"setIsActive"
,
"onClick"
,
"pageClickEvent"
,
"e"
,
"current"
,
"contains"
,
"target"
,
"window"
,
"addEventListener"
,
"removeEventListener"
,
"isAuthenticated"
,
"getUser"
,
"then"
,
"info"
,
"logout"
,
"signOut"
,
"email"
],
"mappings"
:
"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"
,
"sourcesContent"
:[
"import React, { useRef, useState, useEffect } from 'react'
\r\n
import { NavLink } from
\"
react-router-dom
\"
;
\r\n
import { useOktaAuth } from '@okta/okta-react';
\r\n
import
\"
./NavbarDropdownMenu.css
\"\r\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
\r\n\r\n\r\n
const DropdownMenu = () => {
\r\n
const { authState, oktaAuth } = useOktaAuth();
\r\n
const [userInfo, setUserInfo] = useState(null);
\r\n\r\n
const dropdownRef = useRef(null);
\r\n
const [isActive, setIsActive] = useState(false);
\r\n
const onClick = () => setIsActive(!isActive);
\r\n\r\n
useEffect(() => {
\r\n
const pageClickEvent = (e) => {
\r\n
if (dropdownRef.current !== null && !dropdownRef.current.contains(e.target)) {
\r\n
setIsActive(!isActive);
\r\n
}
\r\n
};
\r\n\r\n
// If the item is active (ie open) then listen for clicks
\r\n
if (isActive) {
\r\n
window.addEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
return () => {
\r\n
window.removeEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
}, [isActive]);
\r\n\r\n
useEffect(() => {
\r\n
if (!authState.isAuthenticated) {
\r\n
// When user isn't authenticated, forget any user info
\r\n
setUserInfo(null);
\r\n
} else {
\r\n
oktaAuth.getUser().then(info => {
\r\n
setUserInfo(info);
\r\n
});
\r\n
}
\r\n
}, [authState, oktaAuth]); // Update if authState changes
\r\n\r\n
const logout = () => {
\r\n
oktaAuth.signOut()
\r\n
}
\r\n\r\n
return (
\r\n
<li>
\r\n
<div className=
\"
navbar-user-dropdown-container
\"
>
\r\n
<button className={`user-dropdown-menu-toggle-button ${isActive ? 'active' : 'inactive'}`} onClick={onClick} >
\r\n
<FontAwesomeIcon className=
\"
user-icon
\"
icon=
\"
user-circle
\"
></FontAwesomeIcon>
\r\n
<FontAwesomeIcon className=
\"
down-arrow
\"
icon=
\"
angle-down
\"
></FontAwesomeIcon>
\r\n
</button>
\r\n
{/* show submenu?*/}
\r\n
<div ref={dropdownRef} className={`user-dropDown-menu-content ${isActive ? 'active' : 'inactive'}`}>
\r\n
<ul>
\r\n
<li>
\r\n
<div >
\r\n
<NavLink to=
\"
/account
\"
>
\r\n
<div className=
\"
accountLink
\"
>
\r\n
<div className=
\"
upper-row
\"
>
\r\n
Account
\r\n
</div>
\r\n
<FontAwesomeIcon className=
\"
arrow-right-icon-top
\"
icon=
\"
chevron-right
\"
></FontAwesomeIcon>
\r\n
<div className=
\"
bottom-row
\"
>
\r\n
{userInfo ? userInfo.email :
\"
...
\"
}
\r\n
</div>
\r\n
</div>
\r\n
</NavLink>
\r\n
</div>
\r\n
</li>
\r\n
<li>
\r\n
<NavLink to=
\"
/messages
\"
>
\r\n
<FontAwesomeIcon icon=
\"
envelope
\"
></FontAwesomeIcon> Messages
\r\n
<FontAwesomeIcon icon=
\"
chevron-right
\"
className=
\"
arrow-right-icon
\"
></FontAwesomeIcon>
\r\n
</NavLink>
\r\n
</li>
\r\n
{/* <li>
\r\n
<a href=
\"
./
\"
>
\r\n
<FontAwesomeIcon icon=
\"
sliders-h
\"
></FontAwesomeIcon> Preferences
\r\n
<FontAwesomeIcon icon=
\"
chevron-right
\"
className=
\"
arrow-right-icon
\"
></FontAwesomeIcon>
\r\n
</a>
\r\n
</li> */}
\r\n
<li>
\r\n
<a onClick={logout}>
\r\n
<FontAwesomeIcon icon=
\"
sign-out-alt
\"
></FontAwesomeIcon> Log out
\r\n
</a>
\r\n
</li>
\r\n
</ul>
\r\n
</div>
\r\n
</div>
\r\n
</li >
\r\n
)
\r\n
}
\r\n\r\n
export default DropdownMenu"
]},
"metadata"
:{},
"sourceType"
:
"module"
}
\ No newline at end of file
client/node_modules/.cache/babel-loader/0c1a79704ab03d5eeb561659893f0a1c.json
0 → 100644
View file @
e4f09cae
{
"ast"
:
null
,
"code"
:
"var _jsxFileName =
\"
C:
\\\\
Users
\\\\
Bruger
\\\\
Desktop
\\\\
Web-projects
\\\\
pipit
\\\\
client
\\\\
src
\\\\
components
\\\\
navbar
\\\\
dropdownMenu
\\\\
NavbarDropdownMenu.jsx
\"
,
\n
_s = $RefreshSig$();
\n\n
import React, { useRef, useState, useEffect } from 'react';
\n
import { NavLink } from
\"
react-router-dom
\"
;
\n
import { useOktaAuth } from '@okta/okta-react';
\n
import
\"
./NavbarDropdownMenu.css
\"
;
\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
\n
import { jsxDEV as _jsxDEV } from
\"
react/jsx-dev-runtime
\"
;
\n\n
const DropdownMenu = () => {
\n
_s();
\n\n
const {
\n
authState,
\n
oktaAuth
\n
} = useOktaAuth();
\n
const [userInfo, setUserInfo] = useState(null);
\n
const dropdownRef = useRef(null);
\n
const [isActive, setIsActive] = useState(false);
\n\n
const onClick = () => setIsActive(!isActive);
\n\n
useEffect(() => {
\n
const pageClickEvent = e => {
\n
if (dropdownRef.current !== null && !dropdownRef.current.contains(e.target)) {
\n
setIsActive(!isActive);
\n
}
\n
}; // If the item is active (ie open) then listen for clicks
\n\n\n
if (isActive) {
\n
window.addEventListener('click', pageClickEvent);
\n
}
\n\n
return () => {
\n
window.removeEventListener('click', pageClickEvent);
\n
};
\n
}, [isActive]);
\n
useEffect(() => {
\n
if (!authState.isAuthenticated) {
\n
// When user isn't authenticated, forget any user info
\n
setUserInfo(null);
\n
} else {
\n
oktaAuth.getUser().then(info => {
\n
setUserInfo(info);
\n
});
\n
}
\n
}, [authState, oktaAuth]); // Update if authState changes
\n\n
const logout = () => {
\n
oktaAuth.signOut();
\n
};
\n\n
return /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
navbar-user-dropdown-container
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
button
\"
, {
\n
className: `user-dropdown-menu-toggle-button ${isActive ? 'active' : 'inactive'}`,
\n
onClick: onClick,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
user-icon
\"
,
\n
icon:
\"
user-circle
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 53,
\n
columnNumber: 11
\n
}, this), /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
down-arrow
\"
,
\n
icon:
\"
angle-down
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 54,
\n
columnNumber: 11
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 52,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
ref: dropdownRef,
\n
className: `user-dropDown-menu-content ${isActive ? 'active' : 'inactive'}`,
\n
children: /*#__PURE__*/_jsxDEV(
\"
ul
\"
, {
\n
children: [/*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(NavLink, {
\n
to:
\"
/account
\"
,
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
accountLink
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
upper-row
\"
,
\n
children:
\"
Account
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 63,
\n
columnNumber: 21
\n
}, this), /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
arrow-right-icon
\"
,
\n
icon:
\"
chevron-right
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 67,
\n
columnNumber: 21
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
bottom-row
\"
,
\n
children: userInfo ? userInfo.email :
\"
...
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 68,
\n
columnNumber: 21
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 62,
\n
columnNumber: 19
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 61,
\n
columnNumber: 17
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 60,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 59,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(NavLink, {
\n
to:
\"
/messages
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
envelope
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 77,
\n
columnNumber: 17
\n
}, this),
\"\\
xA0
\\
xA0Messages
\"
, /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
chevron-right
\"
,
\n
className:
\"
arrow-right-icon
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 78,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 76,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 75,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
a
\"
, {
\n
onClick: logout,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
sign-out-alt
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 89,
\n
columnNumber: 17
\n
}, this),
\"\\
xA0
\\
xA0Log out
\"
]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 88,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 87,
\n
columnNumber: 13
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 58,
\n
columnNumber: 11
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 57,
\n
columnNumber: 9
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 51,
\n
columnNumber: 7
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 50,
\n
columnNumber: 5
\n
}, this);
\n
};
\n\n
_s(DropdownMenu,
\"
fSJPYre4v1rGcIZdck7wMJJU1dU=
\"
, false, function () {
\n
return [useOktaAuth];
\n
});
\n\n
_c = DropdownMenu;
\n
export default DropdownMenu;
\n\n
var _c;
\n\n
$RefreshReg$(_c,
\"
DropdownMenu
\"
);"
,
"map"
:{
"version"
:
3
,
"sources"
:[
"C:/Users/Bruger/Desktop/Web-projects/pipit/client/src/components/navbar/dropdownMenu/NavbarDropdownMenu.jsx"
],
"names"
:[
"React"
,
"useRef"
,
"useState"
,
"useEffect"
,
"NavLink"
,
"useOktaAuth"
,
"FontAwesomeIcon"
,
"DropdownMenu"
,
"authState"
,
"oktaAuth"
,
"userInfo"
,
"setUserInfo"
,
"dropdownRef"
,
"isActive"
,
"setIsActive"
,
"onClick"
,
"pageClickEvent"
,
"e"
,
"current"
,
"contains"
,
"target"
,
"window"
,
"addEventListener"
,
"removeEventListener"
,
"isAuthenticated"
,
"getUser"
,
"then"
,
"info"
,
"logout"
,
"signOut"
,
"email"
],
"mappings"
:
"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"
,
"sourcesContent"
:[
"import React, { useRef, useState, useEffect } from 'react'
\r\n
import { NavLink } from
\"
react-router-dom
\"
;
\r\n
import { useOktaAuth } from '@okta/okta-react';
\r\n
import
\"
./NavbarDropdownMenu.css
\"\r\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
\r\n\r\n\r\n
const DropdownMenu = () => {
\r\n
const { authState, oktaAuth } = useOktaAuth();
\r\n
const [userInfo, setUserInfo] = useState(null);
\r\n\r\n
const dropdownRef = useRef(null);
\r\n
const [isActive, setIsActive] = useState(false);
\r\n
const onClick = () => setIsActive(!isActive);
\r\n\r\n
useEffect(() => {
\r\n
const pageClickEvent = (e) => {
\r\n
if (dropdownRef.current !== null && !dropdownRef.current.contains(e.target)) {
\r\n
setIsActive(!isActive);
\r\n
}
\r\n
};
\r\n\r\n
// If the item is active (ie open) then listen for clicks
\r\n
if (isActive) {
\r\n
window.addEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
return () => {
\r\n
window.removeEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
}, [isActive]);
\r\n\r\n
useEffect(() => {
\r\n
if (!authState.isAuthenticated) {
\r\n
// When user isn't authenticated, forget any user info
\r\n
setUserInfo(null);
\r\n
} else {
\r\n
oktaAuth.getUser().then(info => {
\r\n
setUserInfo(info);
\r\n
});
\r\n
}
\r\n
}, [authState, oktaAuth]); // Update if authState changes
\r\n\r\n
const logout = () => {
\r\n
oktaAuth.signOut()
\r\n
}
\r\n\r\n
return (
\r\n
<li>
\r\n
<div className=
\"
navbar-user-dropdown-container
\"
>
\r\n
<button className={`user-dropdown-menu-toggle-button ${isActive ? 'active' : 'inactive'}`} onClick={onClick} >
\r\n
<FontAwesomeIcon className=
\"
user-icon
\"
icon=
\"
user-circle
\"
></FontAwesomeIcon>
\r\n
<FontAwesomeIcon className=
\"
down-arrow
\"
icon=
\"
angle-down
\"
></FontAwesomeIcon>
\r\n
</button>
\r\n
{/* show submenu?*/}
\r\n
<div ref={dropdownRef} className={`user-dropDown-menu-content ${isActive ? 'active' : 'inactive'}`}>
\r\n
<ul>
\r\n
<li>
\r\n
<div >
\r\n
<NavLink to=
\"
/account
\"
>
\r\n
<div className=
\"
accountLink
\"
>
\r\n
<div className=
\"
upper-row
\"
>
\r\n
Account
\r\n\r\n
</div>
\r\n
<FontAwesomeIcon className=
\"
arrow-right-icon
\"
icon=
\"
chevron-right
\"
></FontAwesomeIcon>
\r\n
<div className=
\"
bottom-row
\"
>
\r\n
{userInfo ? userInfo.email :
\"
...
\"
}
\r\n
</div>
\r\n
</div>
\r\n
</NavLink>
\r\n
</div>
\r\n
</li>
\r\n
<li>
\r\n
<NavLink to=
\"
/messages
\"
>
\r\n
<FontAwesomeIcon icon=
\"
envelope
\"
></FontAwesomeIcon> Messages
\r\n
<FontAwesomeIcon icon=
\"
chevron-right
\"
className=
\"
arrow-right-icon
\"
></FontAwesomeIcon>
\r\n
</NavLink>
\r\n
</li>
\r\n
{/* <li>
\r\n
<a href=
\"
./
\"
>
\r\n
<FontAwesomeIcon icon=
\"
sliders-h
\"
></FontAwesomeIcon> Preferences
\r\n
<FontAwesomeIcon icon=
\"
chevron-right
\"
className=
\"
arrow-right-icon
\"
></FontAwesomeIcon>
\r\n
</a>
\r\n
</li> */}
\r\n
<li>
\r\n
<a onClick={logout}>
\r\n
<FontAwesomeIcon icon=
\"
sign-out-alt
\"
></FontAwesomeIcon> Log out
\r\n
</a>
\r\n
</li>
\r\n
</ul>
\r\n
</div>
\r\n
</div>
\r\n
</li >
\r\n
)
\r\n
}
\r\n\r\n
export default DropdownMenu"
]},
"metadata"
:{},
"sourceType"
:
"module"
}
\ No newline at end of file
client/node_modules/.cache/babel-loader/0c318209fafc4e6f9ec8ac0574e3d129.json
0 → 100644
View file @
e4f09cae
{
"ast"
:
null
,
"code"
:
"var _jsxFileName =
\"
C:
\\\\
Users
\\\\
Bruger
\\\\
Desktop
\\\\
Web-projects
\\\\
pipit
\\\\
client
\\\\
src
\\\\
pages
\\\\
login
\\\\
Login.jsx
\"
,
\n
_s = $RefreshSig$();
\n\n
import React, { useState, useEffect, useRef } from 'react';
\n
import { Redirect } from 'react-router';
\n
import { useOktaAuth } from '@okta/okta-react';
\n
import
\"
./Login.css
\"
;
\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
\n
import { NavLink } from 'react-router-dom';
\n
import config from
\"
../../config
\"
;
\n
import { jsxDEV as _jsxDEV } from
\"
react/jsx-dev-runtime
\"
;
\n\n
const SignUp = () => {
\n
_s();
\n\n
const {
\n
oktaAuth
\n
} = useOktaAuth();
\n
const [sessionToken, setSessionToken] = useState();
\n
const signUpFormRef = useRef(null);
\n
const [signUpFormVisibilityState, showSignUpForm] = useState(false);
\n\n
const toggleSignInFormVisible = () => showSignUpForm(!signUpFormVisibilityState);
\n\n
const [firstname, setfirstname] = useState('');
\n
const [lastname, setlastname] = useState('');
\n
const [username, setUsername] = useState('');
\n
const [password, setPassword] = useState('');
\n
useEffect(() => {
\n
if (authState || authState.isAuthenticated) {// <Redirect to=
\"
/home
\"
/>
\n
}
\n
}, [authState, oktaAuth]); // Update if authState changes
\n\n
useEffect(() => {
\n
const pageClickEvent = e => {
\n
console.log(
\"
Click
\"
);
\n\n
if (signUpFormRef.current !== null && !signUpFormRef.current.contains(e.target)) {
\n
console.log(
\"
Form visible:
\"
+ signUpFormVisibilityState);
\n
toggleSignInFormVisible();
\n
}
\n
}; // If the item is active (ie open) then listen for clicks
\n\n\n
if (signUpFormVisibilityState) {
\n
console.log(
\"
Add eventlistener
\"
);
\n
window.addEventListener('click', pageClickEvent);
\n
}
\n\n
return () => {
\n
console.log(
\"
Remove eventlistener
\"
);
\n
window.removeEventListener('click', pageClickEvent);
\n
};
\n
}, [signUpFormVisibilityState]);
\n
const userInputData = JSON.stringify({
\n
firstname: `${firstname}`,
\n
lastname: `${lastname}`,
\n
email: `${username}`,
\n
password: `${password}`
\n
});
\n
const loginRequestOptions = {
\n
method: 'POST',
\n
body: userInputData
\n
};
\n
const resetPasswordRequestOptions = {
\n
method: 'PUT',
\n
body: userInputData
\n
};
\n\n
const handleSignUpFormSubmit = e => {
\n
e.preventDefault();
\n
fetch(config.serviceAPI.createNewUserURL, loginRequestOptions).then(res => {
\n
if (!res.ok) {
\n
window.alert(
\"
Error
\"
);
\n
Promise.reject(
\"\"
);
\n
return;
\n
}
\n\n
if (res.ok) {
\n
handleSignInFormSubmit(e);
\n
}
\n
});
\n
};
\n\n
const handleSignInFormSubmit = e => {
\n
e.preventDefault();
\n
oktaAuth.signInWithCredentials({
\n
username,
\n
password
\n
}).then(res => {
\n
const sessionToken = res.sessionToken;
\n
setSessionToken(sessionToken); // sessionToken is a one-use token, so make sure this is only called once
\n\n
oktaAuth.signInWithRedirect({
\n
sessionToken,
\n
originalUri: '/home'
\n
});
\n
}).catch(err => console.log('Found an error', err));
\n
};
\n\n
const handlefirstnameChange = e => {
\n
setfirstname(e.target.value);
\n
};
\n\n
const handlelastnameChange = e => {
\n
setlastname(e.target.value);
\n
};
\n\n
const handleUsernameChange = e => {
\n
setUsername(e.target.value);
\n
};
\n\n
const handlePasswordChange = e => {
\n
setPassword(e.target.value);
\n
};
\n\n
if (sessionToken) {
\n
// Hide form while sessionToken is converted into id/access tokens
\n
return null;
\n
}
\n\n
const handlePasswordReset = () => {
\n
if (!username == '') {
\n
fetch(config.serviceAPI.resetPasswordURL, resetPasswordRequestOptions).then(res => {
\n
if (!res.ok) {
\n
window.alert(
\"
Error: something went wrong
\"
);
\n
Promise.reject(
\"\"
);
\n
return;
\n
}
\n\n
if (res.ok) {// do something
\n
}
\n
});
\n
} else {
\n
window.alert(
\"
Please enter a valid email into the login form
\"
);
\n
}
\n
};
\n\n
return /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
pageContainer
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className: `modal ${signUpFormVisibilityState ?
\"
active
\"
:
\"
inactive
\"
}`,
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
ref: signUpFormRef,
\n
className:
\"
modal-content
\"
,
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
signUpForm
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
h2
\"
, {
\n
children:
\"
Sign Up
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 143,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
form
\"
, {
\n
onSubmit: handleSignUpFormSubmit,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
label
\"
, {
\n
children: [
\"
First name:
\"
, /*#__PURE__*/_jsxDEV(
\"
input
\"
, {
\n
id:
\"
firstname
\"
,
\n
type:
\"
text
\"
,
\n
value: firstname,
\n
onChange: handlefirstnameChange
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 147,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 145,
\n
columnNumber: 15
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
label
\"
, {
\n
children: [
\"
Last Name:
\"
, /*#__PURE__*/_jsxDEV(
\"
input
\"
, {
\n
id:
\"
lastname
\"
,
\n
type:
\"
text
\"
,
\n
value: lastname,
\n
onChange: handlelastnameChange
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 154,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 152,
\n
columnNumber: 15
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
label
\"
, {
\n
children: [
\"
Email:
\"
, /*#__PURE__*/_jsxDEV(
\"
input
\"
, {
\n
id:
\"
email
\"
,
\n
type:
\"
text
\"
,
\n
value: username,
\n
onChange: handleUsernameChange
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 161,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 159,
\n
columnNumber: 15
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
label
\"
, {
\n
children: [
\"
Password:
\"
, /*#__PURE__*/_jsxDEV(
\"
input
\"
, {
\n
id:
\"
password
\"
,
\n
type:
\"
password
\"
,
\n
value: password,
\n
onChange: handlePasswordChange
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 168,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 166,
\n
columnNumber: 15
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
label
\"
, {
\n
className:
\"
password-requirements
\"
,
\n
children:
\"
Requirements: At least 8 characters, no parts of your username
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 173,
\n
columnNumber: 15
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
button
\"
, {
\n
className:
\"
formSubmitButton
\"
,
\n
type:
\"
submit
\"
,
\n
children: [
\"
Sign Up
\\
xA0
\\
xA0
\"
, /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
user-plus
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 178,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 176,
\n
columnNumber: 15
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 144,
\n
columnNumber: 13
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 142,
\n
columnNumber: 11
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 141,
\n
columnNumber: 9
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 139,
\n
columnNumber: 7
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
spacer
\"
,
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
text-container
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
h1
\"
, {
\n
children:
\"
Get started with PipIt
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 187,
\n
columnNumber: 11
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
h5
\"
, {
\n
children:
\"
Track bugs and usabilty issues
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 188,
\n
columnNumber: 11
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
button
\"
, {
\n
className:
\"
signUpForm-show-button
\"
,
\n
onClick: toggleSignInFormVisible,
\n
children:
\"
Sign up
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 189,
\n
columnNumber: 11
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 186,
\n
columnNumber: 9
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 185,
\n
columnNumber: 7
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
signInForm
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
h2
\"
, {
\n
children:
\"
Sign in to PipIt
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 196,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
form
\"
, {
\n
onSubmit: handleSignInFormSubmit,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
label
\"
, {
\n
children: [
\"
Email:
\"
, /*#__PURE__*/_jsxDEV(
\"
input
\"
, {
\n
id:
\"
username
\"
,
\n
type:
\"
text
\"
,
\n
value: signUpFormVisibilityState ? null : username,
\n
onChange: handleUsernameChange
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 200,
\n
columnNumber: 13
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 198,
\n
columnNumber: 11
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
label
\"
, {
\n
children: [
\"
Password:
\"
, /*#__PURE__*/_jsxDEV(
\"
input
\"
, {
\n
id:
\"
password
\"
,
\n
type:
\"
password
\"
,
\n
value: signUpFormVisibilityState ? null : password,
\n
onChange: handlePasswordChange
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 207,
\n
columnNumber: 13
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 205,
\n
columnNumber: 11
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
button
\"
, {
\n
className:
\"
formSubmitButton
\"
,
\n
type:
\"
submit
\"
,
\n
children: [
\"
Sign in
\\
xA0
\\
xA0
\"
, /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
sign-in-alt
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 214,
\n
columnNumber: 13
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 212,
\n
columnNumber: 11
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 197,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
password-forgot-prompt
\"
,
\n
children: /*#__PURE__*/_jsxDEV(
\"
span
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
a
\"
, {
\n
onClick: handlePasswordReset,
\n
children:
\"
Forgot password
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 219,
\n
columnNumber: 13
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 218,
\n
columnNumber: 11
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 217,
\n
columnNumber: 9
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 195,
\n
columnNumber: 7
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 137,
\n
columnNumber: 5
\n
}, this);
\n
};
\n\n
_s(SignUp,
\"
4lOGpgqep3MTjQLV1TkEyPKRjJw=
\"
, false, function () {
\n
return [useOktaAuth];
\n
});
\n\n
_c = SignUp;
\n
export default SignUp;
\n\n
var _c;
\n\n
$RefreshReg$(_c,
\"
SignUp
\"
);"
,
"map"
:{
"version"
:
3
,
"sources"
:[
"C:/Users/Bruger/Desktop/Web-projects/pipit/client/src/pages/login/Login.jsx"
],
"names"
:[
"React"
,
"useState"
,
"useEffect"
,
"useRef"
,
"Redirect"
,
"useOktaAuth"
,
"FontAwesomeIcon"
,
"NavLink"
,
"config"
,
"SignUp"
,
"oktaAuth"
,
"sessionToken"
,
"setSessionToken"
,
"signUpFormRef"
,
"signUpFormVisibilityState"
,
"showSignUpForm"
,
"toggleSignInFormVisible"
,
"firstname"
,
"setfirstname"
,
"lastname"
,
"setlastname"
,
"username"
,
"setUsername"
,
"password"
,
"setPassword"
,
"authState"
,
"isAuthenticated"
,
"pageClickEvent"
,
"e"
,
"console"
,
"log"
,
"current"
,
"contains"
,
"target"
,
"window"
,
"addEventListener"
,
"removeEventListener"
,
"userInputData"
,
"JSON"
,
"stringify"
,
"email"
,
"loginRequestOptions"
,
"method"
,
"body"
,
"resetPasswordRequestOptions"
,
"handleSignUpFormSubmit"
,
"preventDefault"
,
"fetch"
,
"serviceAPI"
,
"createNewUserURL"
,
"then"
,
"res"
,
"ok"
,
"alert"
,
"Promise"
,
"reject"
,
"handleSignInFormSubmit"
,
"signInWithCredentials"
,
"signInWithRedirect"
,
"originalUri"
,
"catch"
,
"err"
,
"handlefirstnameChange"
,
"value"
,
"handlelastnameChange"
,
"handleUsernameChange"
,
"handlePasswordChange"
,
"handlePasswordReset"
,
"resetPasswordURL"
],
"mappings"
:
"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"
,
"sourcesContent"
:[
"import React, { useState, useEffect, useRef } from 'react';
\r\n
import { Redirect } from 'react-router';
\r\n
import { useOktaAuth } from '@okta/okta-react';
\r\n
import
\"
./Login.css
\"\r\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
\r\n
import { NavLink } from 'react-router-dom';
\r\n
import config from
\"
../../config
\"\r\n\r\n
const SignUp = () => {
\r\n
const { oktaAuth } = useOktaAuth();
\r\n
const [sessionToken, setSessionToken] = useState()
\r\n\r\n
const signUpFormRef = useRef(null);
\r\n
const [signUpFormVisibilityState, showSignUpForm] = useState(false)
\r\n
const toggleSignInFormVisible = () => showSignUpForm(!signUpFormVisibilityState)
\r\n\r\n
const [firstname, setfirstname] = useState('')
\r\n
const [lastname, setlastname] = useState('')
\r\n
const [username, setUsername] = useState('');
\r\n
const [password, setPassword] = useState('');
\r\n\r\n
useEffect(() => {
\r\n
if (authState || authState.isAuthenticated) {
\r\n
// <Redirect to=
\"
/home
\"
/>
\r\n
}
\r\n
}, [authState, oktaAuth]); // Update if authState changes
\r\n\r\n
useEffect(() => {
\r\n
const pageClickEvent = (e) => {
\r\n
console.log(
\"
Click
\"
)
\r\n
if (signUpFormRef.current !== null && !signUpFormRef.current.contains(e.target)) {
\r\n
console.log(
\"
Form visible:
\"
+ signUpFormVisibilityState)
\r\n
toggleSignInFormVisible()
\r\n
}
\r\n
};
\r\n\r\n
// If the item is active (ie open) then listen for clicks
\r\n
if (signUpFormVisibilityState) {
\r\n
console.log(
\"
Add eventlistener
\"
)
\r\n
window.addEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
return () => {
\r\n
console.log(
\"
Remove eventlistener
\"
)
\r\n
window.removeEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
}, [signUpFormVisibilityState]);
\r\n\r\n
const userInputData = JSON.stringify({
\r\n
firstname: `${firstname}`,
\r\n
lastname: `${lastname}`,
\r\n
email: `${username}`,
\r\n
password: `${password}`
\r\n
})
\r\n\r\n
const loginRequestOptions = {
\r\n
method: 'POST',
\r\n
body: userInputData
\r\n
};
\r\n\r\n
const resetPasswordRequestOptions = {
\r\n
method: 'PUT',
\r\n
body: userInputData
\r\n
}
\r\n\r\n
const handleSignUpFormSubmit = (e) => {
\r\n
e.preventDefault();
\r\n\r\n
fetch(config.serviceAPI.createNewUserURL, loginRequestOptions)
\r\n
.then((res) => {
\r\n
if (!res.ok) {
\r\n
window.alert(
\"
Error
\"
)
\r\n
Promise.reject(
\"\"
)
\r\n
return
\r\n
}
\r\n
if (res.ok) {
\r\n
handleSignInFormSubmit(e)
\r\n
}
\r\n
})
\r\n
}
\r\n\r\n
const handleSignInFormSubmit = (e) => {
\r\n
e.preventDefault();
\r\n\r\n
oktaAuth.signInWithCredentials({ username, password })
\r\n
.then(res => {
\r\n
const sessionToken = res.sessionToken;
\r\n
setSessionToken(sessionToken);
\r\n
// sessionToken is a one-use token, so make sure this is only called once
\r\n
oktaAuth.signInWithRedirect({ sessionToken, originalUri: '/home' });
\r\n
})
\r\n
.catch(err => console.log('Found an error', err));
\r\n
};
\r\n\r\n
const handlefirstnameChange = (e) => {
\r\n
setfirstname(e.target.value)
\r\n
}
\r\n\r\n
const handlelastnameChange = (e) => {
\r\n
setlastname(e.target.value)
\r\n
}
\r\n\r\n
const handleUsernameChange = (e) => {
\r\n
setUsername(e.target.value);
\r\n
};
\r\n\r\n
const handlePasswordChange = (e) => {
\r\n
setPassword(e.target.value)
\r\n
}
\r\n\r\n
if (sessionToken) {
\r\n
// Hide form while sessionToken is converted into id/access tokens
\r\n
return null;
\r\n
}
\r\n\r\n
const handlePasswordReset = () => {
\r\n
if (!username == '') {
\r\n
fetch(config.serviceAPI.resetPasswordURL, resetPasswordRequestOptions)
\r\n
.then((res) => {
\r\n
if (!res.ok) {
\r\n
window.alert(
\"
Error: something went wrong
\"
)
\r\n
Promise.reject(
\"\"
)
\r\n
return
\r\n
}
\r\n
if (res.ok) {
\r\n
// do something
\r\n
}
\r\n
})
\r\n
}
\r\n
else {
\r\n
window.alert(
\"
Please enter a valid email into the login form
\"
)
\r\n
}
\r\n
}
\r\n\r\n
return (
\r\n
<div className=
\"
pageContainer
\"
>
\r\n
{/* The Modal */}
\r\n
<div className={`modal ${signUpFormVisibilityState ?
\"
active
\"
:
\"
inactive
\"
}`}>
\r\n\r\n
<div ref={signUpFormRef} className=
\"
modal-content
\"
>
\r\n
<div className=
\"
signUpForm
\"
>
\r\n
<h2>Sign Up</h2>
\r\n
<form onSubmit={handleSignUpFormSubmit}>
\r\n
<label>
\r\n
First name:
\r\n
<input
\r\n
id=
\"
firstname
\"
type=
\"
text
\"\r\n
value={firstname}
\r\n
onChange={handlefirstnameChange} />
\r\n
</label>
\r\n
<label>
\r\n
Last Name:
\r\n
<input
\r\n
id=
\"
lastname
\"
type=
\"
text
\"\r\n
value={lastname}
\r\n
onChange={handlelastnameChange} />
\r\n
</label>
\r\n
<label>
\r\n
Email:
\r\n
<input
\r\n
id=
\"
email
\"
type=
\"
text
\"\r\n
value={username}
\r\n
onChange={handleUsernameChange} />
\r\n
</label>
\r\n
<label>
\r\n
Password:
\r\n
<input
\r\n
id=
\"
password
\"
type=
\"
password
\"\r\n
value={password}
\r\n
onChange={handlePasswordChange} />
\r\n
</label>
\r\n
<label className=
\"
password-requirements
\"
>
\r\n
Requirements: At least 8 characters, no parts of your username
\r\n
</label>
\r\n
<button className=
\"
formSubmitButton
\"
type=
\"
submit
\"
>
\r\n
Sign Up
\r\n
<FontAwesomeIcon icon=
\"
user-plus
\"
></FontAwesomeIcon>
\r\n
</button>
\r\n
</form>
\r\n
</div>
\r\n
</div>
\r\n\r\n
</div>
\r\n
<div className=
\"
spacer
\"
>
\r\n
<div className=
\"
text-container
\"
>
\r\n
<h1>Get started with PipIt</h1>
\r\n
<h5>Track bugs and usabilty issues</h5>
\r\n
<button className=
\"
signUpForm-show-button
\"
onClick={toggleSignInFormVisible}>
\r\n
Sign up
\r\n
</button>
\r\n
</div>
\r\n
</div>
\r\n\r\n
<div className=
\"
signInForm
\"
>
\r\n
<h2>Sign in to PipIt</h2>
\r\n
<form onSubmit={handleSignInFormSubmit}>
\r\n
<label>
\r\n
Email:
\r\n
<input
\r\n
id=
\"
username
\"
type=
\"
text
\"\r\n
value={signUpFormVisibilityState ? null : username}
\r\n
onChange={handleUsernameChange} />
\r\n
</label>
\r\n
<label>
\r\n
Password:
\r\n
<input
\r\n
id=
\"
password
\"
type=
\"
password
\"\r\n
value={signUpFormVisibilityState ? null : password}
\r\n
onChange={handlePasswordChange} />
\r\n
</label>
\r\n
<button className=
\"
formSubmitButton
\"
type=
\"
submit
\"
>
\r\n
Sign in
\r\n
<FontAwesomeIcon icon=
\"
sign-in-alt
\"
></FontAwesomeIcon>
\r\n
</button>
\r\n
</form>
\r\n
<div className=
\"
password-forgot-prompt
\"
>
\r\n
<span>
\r\n
<a onClick={handlePasswordReset}>Forgot password</a>
\r\n
</span>
\r\n
</div>
\r\n
</div>
\r\n
</div>
\r\n
)
\r\n
}
\r\n\r\n
export default SignUp"
]},
"metadata"
:{},
"sourceType"
:
"module"
}
\ No newline at end of file
client/node_modules/.cache/babel-loader/0de4f17ee74923a0a3714d7588fae4a9.json
0 → 100644
View file @
e4f09cae
{
"ast"
:
null
,
"code"
:
"var _jsxFileName =
\"
C:
\\\\
Users
\\\\
Bruger
\\\\
Desktop
\\\\
Web-projects
\\\\
pipit
\\\\
client
\\\\
src
\\\\
pages
\\\\
navbar
\\\\
Navbar.jsx
\"
,
\n
_s = $RefreshSig$();
\n\n
import React from 'react';
\n
import { useOktaAuth } from '@okta/okta-react';
\n
import
\"
./Navbar.css
\"
;
\n
import Logo from './logo/Logo';
\n
import NavLinks from './navLinks/NavLinks';
\n
import Searchbar from './searchbar/Searchbar';
\n
import NavbarDropdownMenu from './dropdownMenu/NavbarDropdownMenu';
\n
import { jsxDEV as _jsxDEV } from
\"
react/jsx-dev-runtime
\"
;
\n\n
const Navbar = () => {
\n
_s();
\n\n
const {
\n
authState,
\n
oktaAuth
\n
} = useOktaAuth();
\n\n
if (!authState || !authState.isAuthenticated) {
\n
return null;
\n
}
\n\n
return /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
navbar
\"
,
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
header-content
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
title-navigation-links-container
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(Logo, {}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 20,
\n
columnNumber: 11
\n
}, this), /*#__PURE__*/_jsxDEV(NavLinks, {}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 21,
\n
columnNumber: 11
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 19,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
searchbar-profile-container
\"
,
\n
children: /*#__PURE__*/_jsxDEV(
\"
ul
\"
, {
\n
className:
\"
right-unstyled-navbar
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(Searchbar, {}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 25,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(NavbarDropdownMenu, {}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 26,
\n
columnNumber: 13
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 24,
\n
columnNumber: 11
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 23,
\n
columnNumber: 9
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 18,
\n
columnNumber: 7
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 17,
\n
columnNumber: 5
\n
}, this);
\n
};
\n\n
_s(Navbar,
\"
XFnfjrqktn2GIu+f3Siekv/ekaU=
\"
, false, function () {
\n
return [useOktaAuth];
\n
});
\n\n
_c = Navbar;
\n
export default Navbar;
\n\n
var _c;
\n\n
$RefreshReg$(_c,
\"
Navbar
\"
);"
,
"map"
:{
"version"
:
3
,
"sources"
:[
"C:/Users/Bruger/Desktop/Web-projects/pipit/client/src/pages/navbar/Navbar.jsx"
],
"names"
:[
"React"
,
"useOktaAuth"
,
"Logo"
,
"NavLinks"
,
"Searchbar"
,
"NavbarDropdownMenu"
,
"Navbar"
,
"authState"
,
"oktaAuth"
,
"isAuthenticated"
],
"mappings"
:
";;;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,WAAT,QAA4B,kBAA5B;AACA,OAAO,cAAP;AACA,OAAOC,IAAP,MAAiB,aAAjB;AACA,OAAOC,QAAP,MAAqB,qBAArB;AACA,OAAOC,SAAP,MAAsB,uBAAtB;AACA,OAAOC,kBAAP,MAA+B,mCAA/B;;;AAEA,MAAMC,MAAM,GAAG,MAAM;AAAA;;AACnB,QAAM;AAAEC,IAAAA,SAAF;AAAaC,IAAAA;AAAb,MAA0BP,WAAW,EAA3C;;AAEA,MAAI,CAACM,SAAD,IAAc,CAACA,SAAS,CAACE,eAA7B,EAA8C;AAC5C,WAAO,IAAP;AACD;;AAED,sBACE;AAAK,IAAA,SAAS,EAAC,QAAf;AAAA,2BACE;AAAK,MAAA,SAAS,EAAC,gBAAf;AAAA,8BACE;AAAK,QAAA,SAAS,EAAC,kCAAf;AAAA,gCACE,QAAC,IAAD;AAAA;AAAA;AAAA;AAAA,gBADF,eAEE,QAAC,QAAD;AAAA;AAAA;AAAA;AAAA,gBAFF;AAAA;AAAA;AAAA;AAAA;AAAA,cADF,eAKE;AAAK,QAAA,SAAS,EAAC,6BAAf;AAAA,+BACE;AAAI,UAAA,SAAS,EAAC,uBAAd;AAAA,kCACE,QAAC,SAAD;AAAA;AAAA;AAAA;AAAA,kBADF,eAEE,QAAC,kBAAD;AAAA;AAAA;AAAA;AAAA,kBAFF;AAAA;AAAA;AAAA;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA,cALF;AAAA;AAAA;AAAA;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA,UADF;AAgBD,CAvBD;;GAAMH,M;UAC4BL,W;;;KAD5BK,M;AAyBN,eAAeA,MAAf"
,
"sourcesContent"
:[
"import React from 'react'
\r\n
import { useOktaAuth } from '@okta/okta-react';
\r\n
import
\"
./Navbar.css
\"\r\n
import Logo from './logo/Logo'
\r\n
import NavLinks from './navLinks/NavLinks'
\r\n
import Searchbar from './searchbar/Searchbar'
\r\n
import NavbarDropdownMenu from './dropdownMenu/NavbarDropdownMenu'
\r\n\r\n
const Navbar = () => {
\r\n
const { authState, oktaAuth } = useOktaAuth();
\r\n\r\n
if (!authState || !authState.isAuthenticated) {
\r\n
return null;
\r\n
}
\r\n\r\n
return (
\r\n
<div className=
\"
navbar
\"
>
\r\n
<div className=
\"
header-content
\"
>
\r\n
<div className=
\"
title-navigation-links-container
\"
>
\r\n
<Logo />
\r\n
<NavLinks />
\r\n
</div>
\r\n
<div className=
\"
searchbar-profile-container
\"
>
\r\n
<ul className=
\"
right-unstyled-navbar
\"
>
\r\n
<Searchbar />
\r\n
<NavbarDropdownMenu />
\r\n
</ul>
\r\n
</div>
\r\n
</div>
\r\n
</div >
\r\n
)
\r\n
}
\r\n\r\n
export default Navbar"
]},
"metadata"
:{},
"sourceType"
:
"module"
}
\ No newline at end of file
client/node_modules/.cache/babel-loader/0f290eb3afefd122bcdbc775627faa32.json
0 → 100644
View file @
e4f09cae
{
"ast"
:
null
,
"code"
:
"var _jsxFileName =
\"
C:
\\\\
Users
\\\\
Bruger
\\\\
Desktop
\\\\
Web-projects
\\\\
pipit
\\\\
client
\\\\
src
\\\\
pages
\\\\
project
\\\\
projectInfo
\\\\
activitiesDisplay
\\\\
ActivitiesDisplay.jsx
\"
;
\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
\n
import React from 'react';
\n
import
\"
./ActivitiesDisplay.css
\"
;
\n
import { jsxDEV as _jsxDEV } from
\"
react/jsx-dev-runtime
\"
;
\n\n
const ActivitiesDisplay = () => {
\n
return /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
activity-new-issues-display-container
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
new-issues-display-container
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
new-issues-display-header
\"
,
\n
children: /*#__PURE__*/_jsxDEV(
\"
p
\"
, {
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
inbox
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 12,
\n
columnNumber: 13
\n
}, this),
\"\\
xA0
\\
xA0New issue reports
\"
]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 11,
\n
columnNumber: 11
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 10,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
new-issues-display-content
\"
,
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
new-issue-report-entry
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
entry-text
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
upper-row
\"
,
\n
children: /*#__PURE__*/_jsxDEV(
\"
a
\"
, {
\n
children:
\"
[Severity] [type]
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 20,
\n
columnNumber: 17
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 19,
\n
columnNumber: 15
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
bottom-row
\"
,
\n
children: /*#__PURE__*/_jsxDEV(
\"
a
\"
, {
\n
children:
\"
[project] [time]
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 25,
\n
columnNumber: 17
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 24,
\n
columnNumber: 15
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 18,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
entry-icon
\"
,
\n
icon:
\"
chevron-right
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 31,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 30,
\n
columnNumber: 13
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 17,
\n
columnNumber: 11
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 16,
\n
columnNumber: 9
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 9,
\n
columnNumber: 7
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
activity-display-container
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
activity-display-header
\"
,
\n
children: /*#__PURE__*/_jsxDEV(
\"
p
\"
, {
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
sticky-note
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 40,
\n
columnNumber: 13
\n
}, this),
\"\\
xA0
\\
xA0Recent Team activities
\"
]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 39,
\n
columnNumber: 11
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 38,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
activity-display-content
\"
,
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
new-issue-report-entry
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
entry-text
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
upper-row
\"
,
\n
children: /*#__PURE__*/_jsxDEV(
\"
a
\"
, {
\n
children:
\"
[Name] [action]
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 48,
\n
columnNumber: 17
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 47,
\n
columnNumber: 15
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
bottom-row
\"
,
\n
children: /*#__PURE__*/_jsxDEV(
\"
a
\"
, {
\n
children:
\"
[project] [time]
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 53,
\n
columnNumber: 17
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 52,
\n
columnNumber: 15
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 46,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
entry-icon
\"
,
\n
icon:
\"
chevron-right
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 59,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 58,
\n
columnNumber: 13
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 45,
\n
columnNumber: 11
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 44,
\n
columnNumber: 9
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 37,
\n
columnNumber: 7
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 7,
\n
columnNumber: 5
\n
}, this);
\n
};
\n\n
_c = ActivitiesDisplay;
\n
export default ActivitiesDisplay;
\n\n
var _c;
\n\n
$RefreshReg$(_c,
\"
ActivitiesDisplay
\"
);"
,
"map"
:{
"version"
:
3
,
"sources"
:[
"C:/Users/Bruger/Desktop/Web-projects/pipit/client/src/pages/project/projectInfo/activitiesDisplay/ActivitiesDisplay.jsx"
],
"names"
:[
"FontAwesomeIcon"
,
"React"
,
"ActivitiesDisplay"
],
"mappings"
:
";AAAA,SAASA,eAAT,QAAgC,gCAAhC;AACA,OAAOC,KAAP,MAAkB,OAAlB;AACA,OAAO,yBAAP;;;AAEA,MAAMC,iBAAiB,GAAG,MAAM;AAC9B,sBACE;AAAK,IAAA,SAAS,EAAC,uCAAf;AAAA,4BAEE;AAAK,MAAA,SAAS,EAAC,8BAAf;AAAA,8BACE;AAAK,QAAA,SAAS,EAAC,2BAAf;AAAA,+BACE;AAAA,kCACE,QAAC,eAAD;AAAiB,YAAA,IAAI,EAAC;AAAtB;AAAA;AAAA;AAAA;AAAA,kBADF;AAAA;AAAA;AAAA;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA,cADF,eAOE;AAAK,QAAA,SAAS,EAAC,4BAAf;AAAA,+BACE;AAAK,UAAA,SAAS,EAAC,wBAAf;AAAA,kCACE;AAAK,YAAA,SAAS,EAAC,YAAf;AAAA,oCACE;AAAK,cAAA,SAAS,EAAC,WAAf;AAAA,qCACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA,oBADF,eAME;AAAK,cAAA,SAAS,EAAC,YAAf;AAAA,qCACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA,oBANF;AAAA;AAAA;AAAA;AAAA;AAAA,kBADF,eAaE;AAAA,mCACE,QAAC,eAAD;AAAiB,cAAA,SAAS,EAAC,YAA3B;AAAwC,cAAA,IAAI,EAAC;AAA7C;AAAA;AAAA;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA,kBAbF;AAAA;AAAA;AAAA;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA,cAPF;AAAA;AAAA;AAAA;AAAA;AAAA,YAFF,eA8BE;AAAK,MAAA,SAAS,EAAC,4BAAf;AAAA,8BACE;AAAK,QAAA,SAAS,EAAC,yBAAf;AAAA,+BACE;AAAA,kCACE,QAAC,eAAD;AAAiB,YAAA,IAAI,EAAC;AAAtB;AAAA;AAAA;AAAA;AAAA,kBADF;AAAA;AAAA;AAAA;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA,cADF,eAOE;AAAK,QAAA,SAAS,EAAC,0BAAf;AAAA,+BACE;AAAK,UAAA,SAAS,EAAC,wBAAf;AAAA,kCACE;AAAK,YAAA,SAAS,EAAC,YAAf;AAAA,oCACE;AAAK,cAAA,SAAS,EAAC,WAAf;AAAA,qCACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA,oBADF,eAME;AAAK,cAAA,SAAS,EAAC,YAAf;AAAA,qCACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA,oBANF;AAAA;AAAA;AAAA;AAAA;AAAA,kBADF,eAaE;AAAA,mCACE,QAAC,eAAD;AAAiB,cAAA,SAAS,EAAC,YAA3B;AAAwC,cAAA,IAAI,EAAC;AAA7C;AAAA;AAAA;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA,kBAbF;AAAA;AAAA;AAAA;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA,cAPF;AAAA;AAAA;AAAA;AAAA;AAAA,YA9BF;AAAA;AAAA;AAAA;AAAA;AAAA,UADF;AA4DD,CA7DD;;KAAMA,iB;AA+DN,eAAeA,iBAAf"
,
"sourcesContent"
:[
"import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
\r\n
import React from 'react'
\r\n
import
\"
./ActivitiesDisplay.css
\"\r\n\r\n
const ActivitiesDisplay = () => {
\r\n
return (
\r\n
<div className=
\"
activity-new-issues-display-container
\"
>
\r\n\r\n
<div className=
\"
new-issues-display-container
\"
>
\r\n
<div className=
\"
new-issues-display-header
\"
>
\r\n
<p>
\r\n
<FontAwesomeIcon icon=
\"
inbox
\"
></FontAwesomeIcon>
\r\n
New issue reports
\r\n
</p>
\r\n
</div>
\r\n
<div className=
\"
new-issues-display-content
\"
>
\r\n
<div className=
\"
new-issue-report-entry
\"
>
\r\n
<div className=
\"
entry-text
\"
>
\r\n
<div className=
\"
upper-row
\"
>
\r\n
<a>
\r\n
[Severity] [type]
\r\n
</a>
\r\n
</div>
\r\n
<div className=
\"
bottom-row
\"
>
\r\n
<a>
\r\n
[project] [time]
\r\n
</a>
\r\n
</div>
\r\n
</div>
\r\n
<div>
\r\n
<FontAwesomeIcon className=
\"
entry-icon
\"
icon=
\"
chevron-right
\"
></FontAwesomeIcon>
\r\n
</div>
\r\n
</div>
\r\n
</div>
\r\n
</div>
\r\n\r\n
<div className=
\"
activity-display-container
\"
>
\r\n
<div className=
\"
activity-display-header
\"
>
\r\n
<p>
\r\n
<FontAwesomeIcon icon=
\"
sticky-note
\"
></FontAwesomeIcon>
\r\n
Recent Team activities
\r\n
</p>
\r\n
</div>
\r\n
<div className=
\"
activity-display-content
\"
>
\r\n
<div className=
\"
new-issue-report-entry
\"
>
\r\n
<div className=
\"
entry-text
\"
>
\r\n
<div className=
\"
upper-row
\"
>
\r\n
<a>
\r\n
[Name] [action]
\r\n
</a>
\r\n
</div>
\r\n
<div className=
\"
bottom-row
\"
>
\r\n
<a>
\r\n
[project] [time]
\r\n
</a>
\r\n
</div>
\r\n
</div>
\r\n
<div>
\r\n
<FontAwesomeIcon className=
\"
entry-icon
\"
icon=
\"
chevron-right
\"
></FontAwesomeIcon>
\r\n
</div>
\r\n
</div>
\r\n
</div>
\r\n
</div>
\r\n
</div>
\r\n
)
\r\n
}
\r\n\r\n
export default ActivitiesDisplay"
]},
"metadata"
:{},
"sourceType"
:
"module"
}
\ No newline at end of file
client/node_modules/.cache/babel-loader/13b20cfe8babf8ff695871020d7c3e13.json
0 → 100644
View file @
e4f09cae
{
"ast"
:
null
,
"code"
:
"var _jsxFileName =
\"
C:
\\\\
Users
\\\\
Bruger
\\\\
Desktop
\\\\
Web-projects
\\\\
pipit
\\\\
client
\\\\
src
\\\\
components
\\\\
navbar
\\\\
dropdownMenu
\\\\
NavbarDropdownMenu.jsx
\"
,
\n
_s = $RefreshSig$();
\n\n
import React, { useRef, useState, useEffect } from 'react';
\n
import { NavLink } from
\"
react-router-dom
\"
;
\n
import { useOktaAuth } from '@okta/okta-react';
\n
import
\"
./NavbarDropdownMenu.css
\"
;
\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
\n
import { jsxDEV as _jsxDEV } from
\"
react/jsx-dev-runtime
\"
;
\n\n
const DropdownMenu = () => {
\n
_s();
\n\n
const {
\n
authState,
\n
oktaAuth
\n
} = useOktaAuth();
\n
const [userInfo, setUserInfo] = useState(null);
\n
const dropdownRef = useRef(null);
\n
const [isActive, setIsActive] = useState(false);
\n\n
const onClick = () => setIsActive(!isActive);
\n\n
useEffect(() => {
\n
const pageClickEvent = e => {
\n
if (dropdownRef.current !== null && !dropdownRef.current.contains(e.target)) {
\n
setIsActive(!isActive);
\n
}
\n
}; // If the item is active (ie open) then listen for clicks
\n\n\n
if (isActive) {
\n
window.addEventListener('click', pageClickEvent);
\n
}
\n\n
return () => {
\n
window.removeEventListener('click', pageClickEvent);
\n
};
\n
}, [isActive]);
\n
useEffect(() => {
\n
if (!authState.isAuthenticated) {
\n
// When user isn't authenticated, forget any user info
\n
setUserInfo(null);
\n
} else {
\n
oktaAuth.getUser().then(info => {
\n
setUserInfo(info);
\n
});
\n
}
\n
}, [authState, oktaAuth]); // Update if authState changes
\n\n
const logout = () => {
\n
oktaAuth.signOut();
\n
};
\n\n
return /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
navbar-user-dropdown-container
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
button
\"
, {
\n
className: `user-dropdown-menu-toggle-button ${isActive ? 'active' : 'inactive'}`,
\n
onClick: onClick,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
user-icon
\"
,
\n
icon:
\"
user-circle
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 53,
\n
columnNumber: 11
\n
}, this), /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
down-arrow
\"
,
\n
icon:
\"
angle-down
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 54,
\n
columnNumber: 11
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 52,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
ref: dropdownRef,
\n
className: `user-dropDown-menu-content ${isActive ? 'active' : 'inactive'}`,
\n
children: /*#__PURE__*/_jsxDEV(
\"
ul
\"
, {
\n
children: [/*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(NavLink, {
\n
to:
\"
/account
\"
,
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
accountLink
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
upper-row
\"
,
\n
children:
\"
Account
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 63,
\n
columnNumber: 21
\n
}, this), /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
arrow-right-icon
\"
,
\n
icon:
\"
chevron-right
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 66,
\n
columnNumber: 21
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
bottom-row
\"
,
\n
children: userInfo ? userInfo.email :
\"
...
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 67,
\n
columnNumber: 21
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 62,
\n
columnNumber: 19
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 61,
\n
columnNumber: 17
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 60,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 59,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(NavLink, {
\n
to:
\"
/messages
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
envelope
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 76,
\n
columnNumber: 17
\n
}, this),
\"\\
xA0
\\
xA0Messages
\"
, /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
chevron-right
\"
,
\n
className:
\"
arrow-right-icon
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 77,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 75,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 74,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
a
\"
, {
\n
onClick: logout,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
sign-out-alt
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 88,
\n
columnNumber: 17
\n
}, this),
\"\\
xA0
\\
xA0Log out
\"
]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 87,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 86,
\n
columnNumber: 13
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 58,
\n
columnNumber: 11
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 57,
\n
columnNumber: 9
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 51,
\n
columnNumber: 7
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 50,
\n
columnNumber: 5
\n
}, this);
\n
};
\n\n
_s(DropdownMenu,
\"
fSJPYre4v1rGcIZdck7wMJJU1dU=
\"
, false, function () {
\n
return [useOktaAuth];
\n
});
\n\n
_c = DropdownMenu;
\n
export default DropdownMenu;
\n\n
var _c;
\n\n
$RefreshReg$(_c,
\"
DropdownMenu
\"
);"
,
"map"
:{
"version"
:
3
,
"sources"
:[
"C:/Users/Bruger/Desktop/Web-projects/pipit/client/src/components/navbar/dropdownMenu/NavbarDropdownMenu.jsx"
],
"names"
:[
"React"
,
"useRef"
,
"useState"
,
"useEffect"
,
"NavLink"
,
"useOktaAuth"
,
"FontAwesomeIcon"
,
"DropdownMenu"
,
"authState"
,
"oktaAuth"
,
"userInfo"
,
"setUserInfo"
,
"dropdownRef"
,
"isActive"
,
"setIsActive"
,
"onClick"
,
"pageClickEvent"
,
"e"
,
"current"
,
"contains"
,
"target"
,
"window"
,
"addEventListener"
,
"removeEventListener"
,
"isAuthenticated"
,
"getUser"
,
"then"
,
"info"
,
"logout"
,
"signOut"
,
"email"
],
"mappings"
:
"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"
,
"sourcesContent"
:[
"import React, { useRef, useState, useEffect } from 'react'
\r\n
import { NavLink } from
\"
react-router-dom
\"
;
\r\n
import { useOktaAuth } from '@okta/okta-react';
\r\n
import
\"
./NavbarDropdownMenu.css
\"\r\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
\r\n\r\n\r\n
const DropdownMenu = () => {
\r\n
const { authState, oktaAuth } = useOktaAuth();
\r\n
const [userInfo, setUserInfo] = useState(null);
\r\n\r\n
const dropdownRef = useRef(null);
\r\n
const [isActive, setIsActive] = useState(false);
\r\n
const onClick = () => setIsActive(!isActive);
\r\n\r\n
useEffect(() => {
\r\n
const pageClickEvent = (e) => {
\r\n
if (dropdownRef.current !== null && !dropdownRef.current.contains(e.target)) {
\r\n
setIsActive(!isActive);
\r\n
}
\r\n
};
\r\n\r\n
// If the item is active (ie open) then listen for clicks
\r\n
if (isActive) {
\r\n
window.addEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
return () => {
\r\n
window.removeEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
}, [isActive]);
\r\n\r\n
useEffect(() => {
\r\n
if (!authState.isAuthenticated) {
\r\n
// When user isn't authenticated, forget any user info
\r\n
setUserInfo(null);
\r\n
} else {
\r\n
oktaAuth.getUser().then(info => {
\r\n
setUserInfo(info);
\r\n
});
\r\n
}
\r\n
}, [authState, oktaAuth]); // Update if authState changes
\r\n\r\n
const logout = () => {
\r\n
oktaAuth.signOut()
\r\n
}
\r\n\r\n
return (
\r\n
<li>
\r\n
<div className=
\"
navbar-user-dropdown-container
\"
>
\r\n
<button className={`user-dropdown-menu-toggle-button ${isActive ? 'active' : 'inactive'}`} onClick={onClick} >
\r\n
<FontAwesomeIcon className=
\"
user-icon
\"
icon=
\"
user-circle
\"
></FontAwesomeIcon>
\r\n
<FontAwesomeIcon className=
\"
down-arrow
\"
icon=
\"
angle-down
\"
></FontAwesomeIcon>
\r\n
</button>
\r\n
{/* show submenu?*/}
\r\n
<div ref={dropdownRef} className={`user-dropDown-menu-content ${isActive ? 'active' : 'inactive'}`}>
\r\n
<ul>
\r\n
<li>
\r\n
<div >
\r\n
<NavLink to=
\"
/account
\"
>
\r\n
<div className=
\"
accountLink
\"
>
\r\n
<div className=
\"
upper-row
\"
>
\r\n
Account
\r\n
</div>
\r\n
<FontAwesomeIcon className=
\"
arrow-right-icon
\"
icon=
\"
chevron-right
\"
></FontAwesomeIcon>
\r\n
<div className=
\"
bottom-row
\"
>
\r\n
{userInfo ? userInfo.email :
\"
...
\"
}
\r\n
</div>
\r\n
</div>
\r\n
</NavLink>
\r\n
</div>
\r\n
</li>
\r\n
<li>
\r\n
<NavLink to=
\"
/messages
\"
>
\r\n
<FontAwesomeIcon icon=
\"
envelope
\"
></FontAwesomeIcon> Messages
\r\n
<FontAwesomeIcon icon=
\"
chevron-right
\"
className=
\"
arrow-right-icon
\"
></FontAwesomeIcon>
\r\n
</NavLink>
\r\n
</li>
\r\n
{/* <li>
\r\n
<a href=
\"
./
\"
>
\r\n
<FontAwesomeIcon icon=
\"
sliders-h
\"
></FontAwesomeIcon> Preferences
\r\n
<FontAwesomeIcon icon=
\"
chevron-right
\"
className=
\"
arrow-right-icon
\"
></FontAwesomeIcon>
\r\n
</a>
\r\n
</li> */}
\r\n
<li>
\r\n
<a onClick={logout}>
\r\n
<FontAwesomeIcon icon=
\"
sign-out-alt
\"
></FontAwesomeIcon> Log out
\r\n
</a>
\r\n
</li>
\r\n
</ul>
\r\n
</div>
\r\n
</div>
\r\n
</li >
\r\n
)
\r\n
}
\r\n\r\n
export default DropdownMenu"
]},
"metadata"
:{},
"sourceType"
:
"module"
}
\ No newline at end of file
client/node_modules/.cache/babel-loader/1658ed7b020299a5e39b827ac7fa8ee2.json
0 → 100644
View file @
e4f09cae
{
"ast"
:
null
,
"code"
:
"var _jsxFileName =
\"
C:
\\\\
Users
\\\\
Bruger
\\\\
Desktop
\\\\
Web-projects
\\\\
pipit
\\\\
client
\\\\
src
\\\\
components
\\\\
navbar
\\\\
dropdownMenu
\\\\
NavbarDropdownMenu.jsx
\"
,
\n
_s = $RefreshSig$();
\n\n
import React, { useRef, useState, useEffect } from 'react';
\n
import { NavLink } from
\"
react-router-dom
\"
;
\n
import { useOktaAuth } from '@okta/okta-react';
\n
import
\"
./NavbarDropdownMenu.css
\"
;
\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
\n
import { jsxDEV as _jsxDEV } from
\"
react/jsx-dev-runtime
\"
;
\n\n
const DropdownMenu = () => {
\n
_s();
\n\n
const {
\n
authState,
\n
oktaAuth
\n
} = useOktaAuth();
\n
const dropdownRef = useRef(null);
\n
const [isActive, setIsActive] = useState(false);
\n\n
const onClick = () => setIsActive(!isActive);
\n\n
useEffect(() => {
\n
const pageClickEvent = e => {
\n
if (dropdownRef.current !== null && !dropdownRef.current.contains(e.target)) {
\n
setIsActive(!isActive);
\n
}
\n
}; // If the item is active (ie open) then listen for clicks
\n\n\n
if (isActive) {
\n
window.addEventListener('click', pageClickEvent);
\n
}
\n\n
return () => {
\n
window.removeEventListener('click', pageClickEvent);
\n
};
\n
}, [isActive]);
\n\n
const logout = () => {
\n
oktaAuth.signOut();
\n
};
\n\n
return /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
navbar-user-dropdown-container
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
button
\"
, {
\n
className: `user-dropdown-menu-toggle-button ${isActive ? 'active' : 'inactive'}`,
\n
onClick: onClick,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
user-icon
\"
,
\n
icon:
\"
user-circle
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 41,
\n
columnNumber: 11
\n
}, this), /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
down-arrow
\"
,
\n
icon:
\"
angle-down
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 42,
\n
columnNumber: 11
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 40,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
ref: dropdownRef,
\n
className: `user-dropDown-menu-content ${isActive ? 'active' : 'inactive'}`,
\n
children: /*#__PURE__*/_jsxDEV(
\"
ul
\"
, {
\n
children: [/*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(NavLink, {
\n
to:
\"
/account
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
user
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 49,
\n
columnNumber: 17
\n
}, this),
\"\\
xA0
\\
xA0Account
\"
, /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
chevron-right
\"
,
\n
className:
\"
arrow-right-icon
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 50,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 48,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 47,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(NavLink, {
\n
to:
\"
/messages
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
envelope
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 55,
\n
columnNumber: 17
\n
}, this),
\"\\
xA0
\\
xA0Messages
\"
, /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
chevron-right
\"
,
\n
className:
\"
arrow-right-icon
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 56,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 54,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 53,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
a
\"
, {
\n
onClick: logout,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
sign-out-alt
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 67,
\n
columnNumber: 17
\n
}, this),
\"\\
xA0
\\
xA0Log out
\"
]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 66,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 65,
\n
columnNumber: 13
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 46,
\n
columnNumber: 11
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 45,
\n
columnNumber: 9
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 39,
\n
columnNumber: 7
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 38,
\n
columnNumber: 5
\n
}, this);
\n
};
\n\n
_s(DropdownMenu,
\"
K/H+pngTJ7UqSrk/MkDOYkpAmdU=
\"
, false, function () {
\n
return [useOktaAuth];
\n
});
\n\n
_c = DropdownMenu;
\n
export default DropdownMenu;
\n\n
var _c;
\n\n
$RefreshReg$(_c,
\"
DropdownMenu
\"
);"
,
"map"
:{
"version"
:
3
,
"sources"
:[
"C:/Users/Bruger/Desktop/Web-projects/pipit/client/src/components/navbar/dropdownMenu/NavbarDropdownMenu.jsx"
],
"names"
:[
"React"
,
"useRef"
,
"useState"
,
"useEffect"
,
"NavLink"
,
"useOktaAuth"
,
"FontAwesomeIcon"
,
"DropdownMenu"
,
"authState"
,
"oktaAuth"
,
"dropdownRef"
,
"isActive"
,
"setIsActive"
,
"onClick"
,
"pageClickEvent"
,
"e"
,
"current"
,
"contains"
,
"target"
,
"window"
,
"addEventListener"
,
"removeEventListener"
,
"logout"
,
"signOut"
],
"mappings"
:
"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"
,
"sourcesContent"
:[
"import React, { useRef, useState, useEffect } from 'react'
\r\n
import { NavLink } from
\"
react-router-dom
\"
;
\r\n
import { useOktaAuth } from '@okta/okta-react';
\r\n
import
\"
./NavbarDropdownMenu.css
\"\r\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
\r\n\r\n\r\n
const DropdownMenu = () => {
\r\n
const { authState, oktaAuth } = useOktaAuth();
\r\n\r\n
const dropdownRef = useRef(null);
\r\n
const [isActive, setIsActive] = useState(false);
\r\n
const onClick = () => setIsActive(!isActive);
\r\n\r\n
useEffect(() => {
\r\n
const pageClickEvent = (e) => {
\r\n
if (dropdownRef.current !== null && !dropdownRef.current.contains(e.target)) {
\r\n
setIsActive(!isActive);
\r\n
}
\r\n
};
\r\n\r\n
// If the item is active (ie open) then listen for clicks
\r\n
if (isActive) {
\r\n
window.addEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
return () => {
\r\n
window.removeEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
}, [isActive]);
\r\n\r\n
const logout = () => {
\r\n
oktaAuth.signOut()
\r\n
}
\r\n\r\n
return (
\r\n
<li>
\r\n
<div className=
\"
navbar-user-dropdown-container
\"
>
\r\n
<button className={`user-dropdown-menu-toggle-button ${isActive ? 'active' : 'inactive'}`} onClick={onClick} >
\r\n
<FontAwesomeIcon className=
\"
user-icon
\"
icon=
\"
user-circle
\"
></FontAwesomeIcon>
\r\n
<FontAwesomeIcon className=
\"
down-arrow
\"
icon=
\"
angle-down
\"
></FontAwesomeIcon>
\r\n
</button>
\r\n
{/* show submenu?*/}
\r\n
<div ref={dropdownRef} className={`user-dropDown-menu-content ${isActive ? 'active' : 'inactive'}`}>
\r\n
<ul>
\r\n
<li>
\r\n
<NavLink to=
\"
/account
\"
>
\r\n
<FontAwesomeIcon icon=
\"
user
\"
></FontAwesomeIcon> Account
\r\n
<FontAwesomeIcon icon=
\"
chevron-right
\"
className=
\"
arrow-right-icon
\"
></FontAwesomeIcon>
\r\n
</NavLink>
\r\n
</li>
\r\n
<li>
\r\n
<NavLink to=
\"
/messages
\"
>
\r\n
<FontAwesomeIcon icon=
\"
envelope
\"
></FontAwesomeIcon> Messages
\r\n
<FontAwesomeIcon icon=
\"
chevron-right
\"
className=
\"
arrow-right-icon
\"
></FontAwesomeIcon>
\r\n
</NavLink>
\r\n
</li>
\r\n
{/* <li>
\r\n
<a href=
\"
./
\"
>
\r\n
<FontAwesomeIcon icon=
\"
sliders-h
\"
></FontAwesomeIcon> Preferences
\r\n
<FontAwesomeIcon icon=
\"
chevron-right
\"
className=
\"
arrow-right-icon
\"
></FontAwesomeIcon>
\r\n
</a>
\r\n
</li> */}
\r\n
<li>
\r\n
<a onClick={logout}>
\r\n
<FontAwesomeIcon icon=
\"
sign-out-alt
\"
></FontAwesomeIcon> Log out
\r\n
</a>
\r\n
</li>
\r\n
</ul>
\r\n
</div>
\r\n
</div>
\r\n
</li >
\r\n
)
\r\n
}
\r\n\r\n
export default DropdownMenu"
]},
"metadata"
:{},
"sourceType"
:
"module"
}
\ No newline at end of file
client/node_modules/.cache/babel-loader/1706d46f1c6bc1a9a6d670a04a52513b.json
0 → 100644
View file @
e4f09cae
{
"ast"
:
null
,
"code"
:
"var _jsxFileName =
\"
C:
\\\\
Users
\\\\
Bruger
\\\\
Desktop
\\\\
Web-projects
\\\\
pipit
\\\\
client
\\\\
src
\\\\
pages
\\\\
login
\\\\
Login.jsx
\"
,
\n
_s = $RefreshSig$();
\n\n
import React, { useState, useEffect, useRef } from 'react';
\n
import { Redirect } from 'react-router';
\n
import { useOktaAuth } from '@okta/okta-react';
\n
import
\"
./Login.css
\"
;
\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
\n
import { NavLink } from 'react-router-dom';
\n
import config from
\"
../../config
\"
;
\n
import { jsxDEV as _jsxDEV } from
\"
react/jsx-dev-runtime
\"
;
\n\n
const SignUp = () => {
\n
_s();
\n\n
const {
\n
authState,
\n
oktaAuth
\n
} = useOktaAuth();
\n
const [sessionToken, setSessionToken] = useState();
\n
const signUpFormRef = useRef(null);
\n
const [signUpFormVisibilityState, showSignUpForm] = useState(false);
\n\n
const toggleSignInFormVisible = () => showSignUpForm(!signUpFormVisibilityState);
\n\n
const [firstname, setfirstname] = useState('');
\n
const [lastname, setlastname] = useState('');
\n
const [username, setUsername] = useState('');
\n
const [password, setPassword] = useState('');
\n
useEffect(() => {
\n
if (authState.isAuthenticated) {
\n
console.log(
\"
Is logged in
\"
);
\n\n
/*#__PURE__*/
\n
_jsxDEV(Redirect, {
\n
to:
\"
/home
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 25,
\n
columnNumber: 7
\n
}, this);
\n
}
\n
}, [authState, oktaAuth]); // Update if authState changes
\n\n
useEffect(() => {
\n
const pageClickEvent = e => {
\n
console.log(
\"
Click
\"
);
\n\n
if (signUpFormRef.current !== null && !signUpFormRef.current.contains(e.target)) {
\n
console.log(
\"
Form visible:
\"
+ signUpFormVisibilityState);
\n
toggleSignInFormVisible();
\n
}
\n
}; // If the item is active (ie open) then listen for clicks
\n\n\n
if (signUpFormVisibilityState) {
\n
console.log(
\"
Add eventlistener
\"
);
\n
window.addEventListener('click', pageClickEvent);
\n
}
\n\n
return () => {
\n
console.log(
\"
Remove eventlistener
\"
);
\n
window.removeEventListener('click', pageClickEvent);
\n
};
\n
}, [signUpFormVisibilityState]);
\n
const userInputData = JSON.stringify({
\n
firstname: `${firstname}`,
\n
lastname: `${lastname}`,
\n
email: `${username}`,
\n
password: `${password}`
\n
});
\n
const loginRequestOptions = {
\n
method: 'POST',
\n
body: userInputData
\n
};
\n
const resetPasswordRequestOptions = {
\n
method: 'PUT',
\n
body: userInputData
\n
};
\n\n
const handleSignUpFormSubmit = e => {
\n
e.preventDefault();
\n
fetch(config.serviceAPI.createNewUserURL, loginRequestOptions).then(res => {
\n
if (!res.ok) {
\n
window.alert(
\"
Error
\"
);
\n
Promise.reject(
\"\"
);
\n
return;
\n
}
\n\n
if (res.ok) {
\n
handleSignInFormSubmit(e);
\n
}
\n
});
\n
};
\n\n
const handleSignInFormSubmit = e => {
\n
e.preventDefault();
\n
oktaAuth.signInWithCredentials({
\n
username,
\n
password
\n
}).then(res => {
\n
const sessionToken = res.sessionToken;
\n
setSessionToken(sessionToken); // sessionToken is a one-use token, so make sure this is only called once
\n\n
oktaAuth.signInWithRedirect({
\n
sessionToken,
\n
originalUri: '/home'
\n
});
\n
}).catch(err => console.log('Found an error', err));
\n
};
\n\n
const handlefirstnameChange = e => {
\n
setfirstname(e.target.value);
\n
};
\n\n
const handlelastnameChange = e => {
\n
setlastname(e.target.value);
\n
};
\n\n
const handleUsernameChange = e => {
\n
setUsername(e.target.value);
\n
};
\n\n
const handlePasswordChange = e => {
\n
setPassword(e.target.value);
\n
};
\n\n
if (sessionToken) {
\n
// Hide form while sessionToken is converted into id/access tokens
\n
return null;
\n
}
\n\n
const handlePasswordReset = () => {
\n
if (!username == '') {
\n
fetch(config.serviceAPI.resetPasswordURL, resetPasswordRequestOptions).then(res => {
\n
if (!res.ok) {
\n
window.alert(
\"
Error: something went wrong
\"
);
\n
Promise.reject(
\"\"
);
\n
return;
\n
}
\n\n
if (res.ok) {// do something
\n
}
\n
});
\n
} else {
\n
window.alert(
\"
Please enter a valid email into the login form
\"
);
\n
}
\n
};
\n\n
return /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
pageContainer
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className: `modal ${signUpFormVisibilityState ?
\"
active
\"
:
\"
inactive
\"
}`,
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
ref: signUpFormRef,
\n
className:
\"
modal-content
\"
,
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
signUpForm
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
h2
\"
, {
\n
children:
\"
Sign Up
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 144,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
form
\"
, {
\n
onSubmit: handleSignUpFormSubmit,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
label
\"
, {
\n
children: [
\"
First name:
\"
, /*#__PURE__*/_jsxDEV(
\"
input
\"
, {
\n
id:
\"
firstname
\"
,
\n
type:
\"
text
\"
,
\n
value: firstname,
\n
onChange: handlefirstnameChange
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 148,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 146,
\n
columnNumber: 15
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
label
\"
, {
\n
children: [
\"
Last Name:
\"
, /*#__PURE__*/_jsxDEV(
\"
input
\"
, {
\n
id:
\"
lastname
\"
,
\n
type:
\"
text
\"
,
\n
value: lastname,
\n
onChange: handlelastnameChange
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 155,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 153,
\n
columnNumber: 15
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
label
\"
, {
\n
children: [
\"
Email:
\"
, /*#__PURE__*/_jsxDEV(
\"
input
\"
, {
\n
id:
\"
email
\"
,
\n
type:
\"
text
\"
,
\n
value: username,
\n
onChange: handleUsernameChange
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 162,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 160,
\n
columnNumber: 15
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
label
\"
, {
\n
children: [
\"
Password:
\"
, /*#__PURE__*/_jsxDEV(
\"
input
\"
, {
\n
id:
\"
password
\"
,
\n
type:
\"
password
\"
,
\n
value: password,
\n
onChange: handlePasswordChange
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 169,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 167,
\n
columnNumber: 15
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
label
\"
, {
\n
className:
\"
password-requirements
\"
,
\n
children:
\"
Requirements: At least 8 characters, no parts of your username
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 174,
\n
columnNumber: 15
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
button
\"
, {
\n
className:
\"
formSubmitButton
\"
,
\n
type:
\"
submit
\"
,
\n
children: [
\"
Sign Up
\\
xA0
\\
xA0
\"
, /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
user-plus
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 179,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 177,
\n
columnNumber: 15
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 145,
\n
columnNumber: 13
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 143,
\n
columnNumber: 11
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 142,
\n
columnNumber: 9
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 140,
\n
columnNumber: 7
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
spacer
\"
,
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
text-container
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
h1
\"
, {
\n
children:
\"
Get started with PipIt
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 188,
\n
columnNumber: 11
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
h5
\"
, {
\n
children:
\"
Track bugs and usabilty issues
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 189,
\n
columnNumber: 11
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
button
\"
, {
\n
className:
\"
signUpForm-show-button
\"
,
\n
onClick: toggleSignInFormVisible,
\n
children:
\"
Sign up
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 190,
\n
columnNumber: 11
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 187,
\n
columnNumber: 9
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 186,
\n
columnNumber: 7
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
signInForm
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
h2
\"
, {
\n
children:
\"
Sign in to PipIt
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 197,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
form
\"
, {
\n
onSubmit: handleSignInFormSubmit,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
label
\"
, {
\n
children: [
\"
Email:
\"
, /*#__PURE__*/_jsxDEV(
\"
input
\"
, {
\n
id:
\"
username
\"
,
\n
type:
\"
text
\"
,
\n
value: signUpFormVisibilityState ? null : username,
\n
onChange: handleUsernameChange
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 201,
\n
columnNumber: 13
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 199,
\n
columnNumber: 11
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
label
\"
, {
\n
children: [
\"
Password:
\"
, /*#__PURE__*/_jsxDEV(
\"
input
\"
, {
\n
id:
\"
password
\"
,
\n
type:
\"
password
\"
,
\n
value: signUpFormVisibilityState ? null : password,
\n
onChange: handlePasswordChange
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 208,
\n
columnNumber: 13
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 206,
\n
columnNumber: 11
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
button
\"
, {
\n
className:
\"
formSubmitButton
\"
,
\n
type:
\"
submit
\"
,
\n
children: [
\"
Sign in
\\
xA0
\\
xA0
\"
, /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
sign-in-alt
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 215,
\n
columnNumber: 13
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 213,
\n
columnNumber: 11
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 198,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
password-forgot-prompt
\"
,
\n
children: /*#__PURE__*/_jsxDEV(
\"
span
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
a
\"
, {
\n
onClick: handlePasswordReset,
\n
children:
\"
Forgot password
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 220,
\n
columnNumber: 13
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 219,
\n
columnNumber: 11
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 218,
\n
columnNumber: 9
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 196,
\n
columnNumber: 7
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 138,
\n
columnNumber: 5
\n
}, this);
\n
};
\n\n
_s(SignUp,
\"
wX0lGhqtG/NiFonubEHi3pYO8ms=
\"
, false, function () {
\n
return [useOktaAuth];
\n
});
\n\n
_c = SignUp;
\n
export default SignUp;
\n\n
var _c;
\n\n
$RefreshReg$(_c,
\"
SignUp
\"
);"
,
"map"
:{
"version"
:
3
,
"sources"
:[
"C:/Users/Bruger/Desktop/Web-projects/pipit/client/src/pages/login/Login.jsx"
],
"names"
:[
"React"
,
"useState"
,
"useEffect"
,
"useRef"
,
"Redirect"
,
"useOktaAuth"
,
"FontAwesomeIcon"
,
"NavLink"
,
"config"
,
"SignUp"
,
"authState"
,
"oktaAuth"
,
"sessionToken"
,
"setSessionToken"
,
"signUpFormRef"
,
"signUpFormVisibilityState"
,
"showSignUpForm"
,
"toggleSignInFormVisible"
,
"firstname"
,
"setfirstname"
,
"lastname"
,
"setlastname"
,
"username"
,
"setUsername"
,
"password"
,
"setPassword"
,
"isAuthenticated"
,
"console"
,
"log"
,
"pageClickEvent"
,
"e"
,
"current"
,
"contains"
,
"target"
,
"window"
,
"addEventListener"
,
"removeEventListener"
,
"userInputData"
,
"JSON"
,
"stringify"
,
"email"
,
"loginRequestOptions"
,
"method"
,
"body"
,
"resetPasswordRequestOptions"
,
"handleSignUpFormSubmit"
,
"preventDefault"
,
"fetch"
,
"serviceAPI"
,
"createNewUserURL"
,
"then"
,
"res"
,
"ok"
,
"alert"
,
"Promise"
,
"reject"
,
"handleSignInFormSubmit"
,
"signInWithCredentials"
,
"signInWithRedirect"
,
"originalUri"
,
"catch"
,
"err"
,
"handlefirstnameChange"
,
"value"
,
"handlelastnameChange"
,
"handleUsernameChange"
,
"handlePasswordChange"
,
"handlePasswordReset"
,
"resetPasswordURL"
],
"mappings"
:
"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"
,
"sourcesContent"
:[
"import React, { useState, useEffect, useRef } from 'react';
\r\n
import { Redirect } from 'react-router';
\r\n
import { useOktaAuth } from '@okta/okta-react';
\r\n
import
\"
./Login.css
\"\r\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
\r\n
import { NavLink } from 'react-router-dom';
\r\n
import config from
\"
../../config
\"\r\n\r\n
const SignUp = () => {
\r\n
const { authState, oktaAuth } = useOktaAuth();
\r\n
const [sessionToken, setSessionToken] = useState()
\r\n\r\n
const signUpFormRef = useRef(null);
\r\n
const [signUpFormVisibilityState, showSignUpForm] = useState(false)
\r\n
const toggleSignInFormVisible = () => showSignUpForm(!signUpFormVisibilityState)
\r\n\r\n
const [firstname, setfirstname] = useState('')
\r\n
const [lastname, setlastname] = useState('')
\r\n
const [username, setUsername] = useState('');
\r\n
const [password, setPassword] = useState('');
\r\n\r\n
useEffect(() => {
\r\n
if (authState.isAuthenticated) {
\r\n
console.log(
\"
Is logged in
\"
);
\r\n
< Redirect to=
\"
/home
\"
/>
\r\n
}
\r\n
}, [authState, oktaAuth]); // Update if authState changes
\r\n\r\n
useEffect(() => {
\r\n
const pageClickEvent = (e) => {
\r\n
console.log(
\"
Click
\"
)
\r\n
if (signUpFormRef.current !== null && !signUpFormRef.current.contains(e.target)) {
\r\n
console.log(
\"
Form visible:
\"
+ signUpFormVisibilityState)
\r\n
toggleSignInFormVisible()
\r\n
}
\r\n
};
\r\n\r\n
// If the item is active (ie open) then listen for clicks
\r\n
if (signUpFormVisibilityState) {
\r\n
console.log(
\"
Add eventlistener
\"
)
\r\n
window.addEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
return () => {
\r\n
console.log(
\"
Remove eventlistener
\"
)
\r\n
window.removeEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
}, [signUpFormVisibilityState]);
\r\n\r\n
const userInputData = JSON.stringify({
\r\n
firstname: `${firstname}`,
\r\n
lastname: `${lastname}`,
\r\n
email: `${username}`,
\r\n
password: `${password}`
\r\n
})
\r\n\r\n
const loginRequestOptions = {
\r\n
method: 'POST',
\r\n
body: userInputData
\r\n
};
\r\n\r\n
const resetPasswordRequestOptions = {
\r\n
method: 'PUT',
\r\n
body: userInputData
\r\n
}
\r\n\r\n
const handleSignUpFormSubmit = (e) => {
\r\n
e.preventDefault();
\r\n\r\n
fetch(config.serviceAPI.createNewUserURL, loginRequestOptions)
\r\n
.then((res) => {
\r\n
if (!res.ok) {
\r\n
window.alert(
\"
Error
\"
)
\r\n
Promise.reject(
\"\"
)
\r\n
return
\r\n
}
\r\n
if (res.ok) {
\r\n
handleSignInFormSubmit(e)
\r\n
}
\r\n
})
\r\n
}
\r\n\r\n
const handleSignInFormSubmit = (e) => {
\r\n
e.preventDefault();
\r\n\r\n
oktaAuth.signInWithCredentials({ username, password })
\r\n
.then(res => {
\r\n
const sessionToken = res.sessionToken;
\r\n
setSessionToken(sessionToken);
\r\n
// sessionToken is a one-use token, so make sure this is only called once
\r\n
oktaAuth.signInWithRedirect({ sessionToken, originalUri: '/home' });
\r\n
})
\r\n
.catch(err => console.log('Found an error', err));
\r\n
};
\r\n\r\n
const handlefirstnameChange = (e) => {
\r\n
setfirstname(e.target.value)
\r\n
}
\r\n\r\n
const handlelastnameChange = (e) => {
\r\n
setlastname(e.target.value)
\r\n
}
\r\n\r\n
const handleUsernameChange = (e) => {
\r\n
setUsername(e.target.value);
\r\n
};
\r\n\r\n
const handlePasswordChange = (e) => {
\r\n
setPassword(e.target.value)
\r\n
}
\r\n\r\n
if (sessionToken) {
\r\n
// Hide form while sessionToken is converted into id/access tokens
\r\n
return null;
\r\n
}
\r\n\r\n
const handlePasswordReset = () => {
\r\n
if (!username == '') {
\r\n
fetch(config.serviceAPI.resetPasswordURL, resetPasswordRequestOptions)
\r\n
.then((res) => {
\r\n
if (!res.ok) {
\r\n
window.alert(
\"
Error: something went wrong
\"
)
\r\n
Promise.reject(
\"\"
)
\r\n
return
\r\n
}
\r\n
if (res.ok) {
\r\n
// do something
\r\n
}
\r\n
})
\r\n
}
\r\n
else {
\r\n
window.alert(
\"
Please enter a valid email into the login form
\"
)
\r\n
}
\r\n
}
\r\n\r\n
return (
\r\n
<div className=
\"
pageContainer
\"
>
\r\n
{/* The Modal */}
\r\n
<div className={`modal ${signUpFormVisibilityState ?
\"
active
\"
:
\"
inactive
\"
}`}>
\r\n\r\n
<div ref={signUpFormRef} className=
\"
modal-content
\"
>
\r\n
<div className=
\"
signUpForm
\"
>
\r\n
<h2>Sign Up</h2>
\r\n
<form onSubmit={handleSignUpFormSubmit}>
\r\n
<label>
\r\n
First name:
\r\n
<input
\r\n
id=
\"
firstname
\"
type=
\"
text
\"\r\n
value={firstname}
\r\n
onChange={handlefirstnameChange} />
\r\n
</label>
\r\n
<label>
\r\n
Last Name:
\r\n
<input
\r\n
id=
\"
lastname
\"
type=
\"
text
\"\r\n
value={lastname}
\r\n
onChange={handlelastnameChange} />
\r\n
</label>
\r\n
<label>
\r\n
Email:
\r\n
<input
\r\n
id=
\"
email
\"
type=
\"
text
\"\r\n
value={username}
\r\n
onChange={handleUsernameChange} />
\r\n
</label>
\r\n
<label>
\r\n
Password:
\r\n
<input
\r\n
id=
\"
password
\"
type=
\"
password
\"\r\n
value={password}
\r\n
onChange={handlePasswordChange} />
\r\n
</label>
\r\n
<label className=
\"
password-requirements
\"
>
\r\n
Requirements: At least 8 characters, no parts of your username
\r\n
</label>
\r\n
<button className=
\"
formSubmitButton
\"
type=
\"
submit
\"
>
\r\n
Sign Up
\r\n
<FontAwesomeIcon icon=
\"
user-plus
\"
></FontAwesomeIcon>
\r\n
</button>
\r\n
</form>
\r\n
</div>
\r\n
</div>
\r\n\r\n
</div>
\r\n
<div className=
\"
spacer
\"
>
\r\n
<div className=
\"
text-container
\"
>
\r\n
<h1>Get started with PipIt</h1>
\r\n
<h5>Track bugs and usabilty issues</h5>
\r\n
<button className=
\"
signUpForm-show-button
\"
onClick={toggleSignInFormVisible}>
\r\n
Sign up
\r\n
</button>
\r\n
</div>
\r\n
</div>
\r\n\r\n
<div className=
\"
signInForm
\"
>
\r\n
<h2>Sign in to PipIt</h2>
\r\n
<form onSubmit={handleSignInFormSubmit}>
\r\n
<label>
\r\n
Email:
\r\n
<input
\r\n
id=
\"
username
\"
type=
\"
text
\"\r\n
value={signUpFormVisibilityState ? null : username}
\r\n
onChange={handleUsernameChange} />
\r\n
</label>
\r\n
<label>
\r\n
Password:
\r\n
<input
\r\n
id=
\"
password
\"
type=
\"
password
\"\r\n
value={signUpFormVisibilityState ? null : password}
\r\n
onChange={handlePasswordChange} />
\r\n
</label>
\r\n
<button className=
\"
formSubmitButton
\"
type=
\"
submit
\"
>
\r\n
Sign in
\r\n
<FontAwesomeIcon icon=
\"
sign-in-alt
\"
></FontAwesomeIcon>
\r\n
</button>
\r\n
</form>
\r\n
<div className=
\"
password-forgot-prompt
\"
>
\r\n
<span>
\r\n
<a onClick={handlePasswordReset}>Forgot password</a>
\r\n
</span>
\r\n
</div>
\r\n
</div>
\r\n
</div>
\r\n
)
\r\n
}
\r\n\r\n
export default SignUp"
]},
"metadata"
:{},
"sourceType"
:
"module"
}
\ No newline at end of file
client/node_modules/.cache/babel-loader/199de0fffad5f8f731f2f7d0dd83bda7.json
0 → 100644
View file @
e4f09cae
{
"ast"
:
null
,
"code"
:
"var _jsxFileName =
\"
C:
\\\\
Users
\\\\
Bruger
\\\\
Desktop
\\\\
Web-projects
\\\\
pipit
\\\\
client
\\\\
src
\\\\
App.jsx
\"
,
\n
_s = $RefreshSig$();
\n\n
import React from
\"
react
\"
;
\n
import { Route, Switch, useHistory } from
\"
react-router-dom
\"
;
\n
import { useOktaAuth } from '@okta/okta-react';
\n
import { library } from '@fortawesome/fontawesome-svg-core';
\n
import { fas } from '@fortawesome/free-solid-svg-icons';
\n
import { OktaAuth, toRelativeUrl } from '@okta/okta-auth-js';
\n
import { Security, SecureRoute, LoginCallback } from
\"
@okta/okta-react
\"
;
\n
import
\"
./style.css
\"
;
\n
import config from
\"
./config
\"
; //Components
\n\n
import Login from
\"
./pages/login/Login
\"
;
\n
import Navbar from
\"
./components/navbar/Navbar
\"
;
\n
import Home from
\"
./pages/home/Home
\"
;
\n
import ReportForm from
\"
./pages/reportForm/ReportForm
\"
;
\n
import ProjectOverview from
\"
./pages/project/projectOverview/ProjectOverview
\"
;
\n
import ProjectInfo from
\"
./pages/project/projectInfo/ProjectInfo
\"
;
\n
import TeamOverview from
\"
./pages/team/teamOverview/TeamOverview
\"
;
\n
import TeamInfo from
\"
./pages/team/teamInfo/TeamInfo
\"
;
\n
import Messages from
\"
./pages/Messages/Messages
\"
;
\n
import { jsxDEV as _jsxDEV } from
\"
react/jsx-dev-runtime
\"
;
\n
library.add(fas);
\n
const oktaAuth = new OktaAuth(config.oidc);
\n
const CALLBACK_PATH = '/login/callback';
\n\n
const App = () => {
\n
_s();
\n\n
const {
\n
authState,
\n
oktaAuth
\n
} = useOktaAuth();
\n
const history = useHistory();
\n\n
const restoreOriginalUri = async (_oktaAuth, originalUri) => {
\n
history.replace(toRelativeUrl(originalUri || '/', window.location.origin));
\n
};
\n\n
return /*#__PURE__*/_jsxDEV(Security, {
\n
oktaAuth: oktaAuth,
\n
restoreOriginalUri: restoreOriginalUri,
\n
children: [/*#__PURE__*/_jsxDEV(Navbar, {}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 36,
\n
columnNumber: 7
\n
}, this), /*#__PURE__*/_jsxDEV(Switch, {
\n
children: [/*#__PURE__*/_jsxDEV(Route, {
\n
path:
\"
/
\"
,
\n
exact: true,
\n
component: !authState.isAuthenticated ? Login : Home
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 38,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(Route, {
\n
path: CALLBACK_PATH,
\n
component: LoginCallback
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 39,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(SecureRoute, {
\n
path:
\"
/home
\"
,
\n
component: Home
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 40,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(SecureRoute, {
\n
path:
\"
/reportissue
\"
,
\n
component: ReportForm
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 41,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(SecureRoute, {
\n
path:
\"
/projects
\"
,
\n
component: ProjectOverview
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 42,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(SecureRoute, {
\n
path:
\"
/ReactApp
\"
,
\n
component: ProjectInfo
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 43,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(SecureRoute, {
\n
path:
\"
/teams
\"
,
\n
component: TeamOverview
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 44,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(SecureRoute, {
\n
path:
\"
/HenriksMemeMachine
\"
,
\n
component: TeamInfo
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 45,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(SecureRoute, {
\n
path:
\"
/messages
\"
,
\n
component: Messages
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 46,
\n
columnNumber: 9
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 37,
\n
columnNumber: 7
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 35,
\n
columnNumber: 5
\n
}, this);
\n
};
\n\n
_s(App,
\"
gN2vl07t+HjO0zaRWUqe1tMASe8=
\"
, false, function () {
\n
return [useOktaAuth, useHistory];
\n
});
\n\n
_c = App;
\n
export default App;
\n\n
var _c;
\n\n
$RefreshReg$(_c,
\"
App
\"
);"
,
"map"
:{
"version"
:
3
,
"sources"
:[
"C:/Users/Bruger/Desktop/Web-projects/pipit/client/src/App.jsx"
],
"names"
:[
"React"
,
"Route"
,
"Switch"
,
"useHistory"
,
"useOktaAuth"
,
"library"
,
"fas"
,
"OktaAuth"
,
"toRelativeUrl"
,
"Security"
,
"SecureRoute"
,
"LoginCallback"
,
"config"
,
"Login"
,
"Navbar"
,
"Home"
,
"ReportForm"
,
"ProjectOverview"
,
"ProjectInfo"
,
"TeamOverview"
,
"TeamInfo"
,
"Messages"
,
"add"
,
"oktaAuth"
,
"oidc"
,
"CALLBACK_PATH"
,
"App"
,
"authState"
,
"history"
,
"restoreOriginalUri"
,
"_oktaAuth"
,
"originalUri"
,
"replace"
,
"window"
,
"location"
,
"origin"
,
"isAuthenticated"
],
"mappings"
:
"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"
,
"sourcesContent"
:[
"import React from
\"
react
\"\r\n
import { Route, Switch, useHistory } from
\"
react-router-dom
\"\r\n
import { useOktaAuth } from '@okta/okta-react';
\r\n
import { library } from '@fortawesome/fontawesome-svg-core'
\r\n
import { fas } from '@fortawesome/free-solid-svg-icons'
\r\n
import { OktaAuth, toRelativeUrl } from '@okta/okta-auth-js';
\r\n
import { Security, SecureRoute, LoginCallback } from
\"
@okta/okta-react
\"\r\n
import
\"
./style.css
\"\r\n
import config from
\"
./config
\"\r\n\r\n
//Components
\r\n
import Login from
\"
./pages/login/Login
\"\r\n
import Navbar from
\"
./components/navbar/Navbar
\"\r\n
import Home from
\"
./pages/home/Home
\"\r\n
import ReportForm from
\"
./pages/reportForm/ReportForm
\"\r\n
import ProjectOverview from
\"
./pages/project/projectOverview/ProjectOverview
\"\r\n
import ProjectInfo from
\"
./pages/project/projectInfo/ProjectInfo
\"\r\n
import TeamOverview from
\"
./pages/team/teamOverview/TeamOverview
\"\r\n
import TeamInfo from
\"
./pages/team/teamInfo/TeamInfo
\"\r\n
import Messages from
\"
./pages/Messages/Messages
\"\r\n\r\n
library.add(fas)
\r\n\r\n
const oktaAuth = new OktaAuth(config.oidc);
\r\n
const CALLBACK_PATH = '/login/callback';
\r\n\r\n
const App = () => {
\r\n
const { authState, oktaAuth } = useOktaAuth();
\r\n
const history = useHistory()
\r\n
const restoreOriginalUri = async (_oktaAuth, originalUri) => {
\r\n
history.replace(toRelativeUrl(originalUri || '/', window.location.origin))
\r\n
}
\r\n\r\n
return (
\r\n
<Security oktaAuth={oktaAuth} restoreOriginalUri={restoreOriginalUri}>
\r\n
<Navbar />
\r\n
<Switch>
\r\n
<Route path=
\"
/
\"
exact component={!authState.isAuthenticated ? Login : Home} />
\r\n
<Route path={CALLBACK_PATH} component={LoginCallback} />
\r\n
<SecureRoute path=
\"
/home
\"
component={Home} />
\r\n
<SecureRoute path=
\"
/reportissue
\"
component={ReportForm} />
\r\n
<SecureRoute path=
\"
/projects
\"
component={ProjectOverview} />
\r\n
<SecureRoute path=
\"
/ReactApp
\"
component={ProjectInfo} />
\r\n
<SecureRoute path=
\"
/teams
\"
component={TeamOverview} />
\r\n
<SecureRoute path=
\"
/HenriksMemeMachine
\"
component={TeamInfo} />
\r\n
<SecureRoute path=
\"
/messages
\"
component={Messages} />
\r\n
</Switch>
\r\n
</Security>
\r\n
)
\r\n
}
\r\n\r\n
export default App"
]},
"metadata"
:{},
"sourceType"
:
"module"
}
\ No newline at end of file
client/node_modules/.cache/babel-loader/1bdc5d42bc72bdf64b57692e983c278d.json
0 → 100644
View file @
e4f09cae
{
"ast"
:
null
,
"code"
:
"var _jsxFileName =
\"
C:
\\\\
Users
\\\\
Bruger
\\\\
Desktop
\\\\
Web-projects
\\\\
pipit
\\\\
client
\\\\
src
\\\\
components
\\\\
navbar
\\\\
dropdownMenu
\\\\
NavbarDropdownMenu.jsx
\"
,
\n
_s = $RefreshSig$();
\n\n
import React, { useRef, useState, useEffect } from 'react';
\n
import { NavLink } from
\"
react-router-dom
\"
;
\n
import { useOktaAuth } from '@okta/okta-react';
\n
import
\"
./NavbarDropdownMenu.css
\"
;
\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
\n
import { jsxDEV as _jsxDEV } from
\"
react/jsx-dev-runtime
\"
;
\n\n
const DropdownMenu = () => {
\n
_s();
\n\n
const {
\n
authState,
\n
oktaAuth
\n
} = useOktaAuth();
\n
const [userInfo, setUserInfo] = useState(null);
\n
const dropdownRef = useRef(null);
\n
const [isActive, setIsActive] = useState(false);
\n\n
const onClick = () => setIsActive(!isActive);
\n\n
useEffect(() => {
\n
const pageClickEvent = e => {
\n
if (dropdownRef.current !== null && !dropdownRef.current.contains(e.target)) {
\n
setIsActive(!isActive);
\n
}
\n
}; // If the item is active (ie open) then listen for clicks
\n\n\n
if (isActive) {
\n
window.addEventListener('click', pageClickEvent);
\n
}
\n\n
return () => {
\n
window.removeEventListener('click', pageClickEvent);
\n
};
\n
}, [isActive]);
\n
useEffect(() => {
\n
if (!authState.isAuthenticated) {
\n
// When user isn't authenticated, forget any user info
\n
setUserInfo(null);
\n
} else {
\n
oktaAuth.getUser().then(info => {
\n
setUserInfo(info);
\n
});
\n
}
\n
}, [authState, oktaAuth]); // Update if authState changes
\n\n
const logout = () => {
\n
oktaAuth.signOut();
\n
};
\n\n
return /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
navbar-user-dropdown-container
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
button
\"
, {
\n
className: `user-dropdown-menu-toggle-button ${isActive ? 'active' : 'inactive'}`,
\n
onClick: onClick,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
user-icon
\"
,
\n
icon:
\"
user-circle
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 53,
\n
columnNumber: 11
\n
}, this), /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
down-arrow
\"
,
\n
icon:
\"
angle-down
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 54,
\n
columnNumber: 11
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 52,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
ref: dropdownRef,
\n
className: `user-dropDown-menu-content ${isActive ? 'active' : 'inactive'}`,
\n
children: /*#__PURE__*/_jsxDEV(
\"
ul
\"
, {
\n
children: [/*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
menu-item
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
arrow-right
\"
,
\n
icon:
\"
user-circle
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 63,
\n
columnNumber: 19
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 62,
\n
columnNumber: 17
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
item-text
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
upper-row
\"
,
\n
children: /*#__PURE__*/_jsxDEV(NavLink, {
\n
to:
\"
/account
\"
,
\n
className:
\"
menu-item-link
\"
,
\n
children:
\"
Account
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 67,
\n
columnNumber: 21
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 66,
\n
columnNumber: 19
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
bottom-row
\"
,
\n
children: /*#__PURE__*/_jsxDEV(NavLink, {
\n
to:
\"
/account
\"
,
\n
className:
\"
menu-item-link-bottom
\"
,
\n
children: userInfo ? userInfo.email :
\"
...
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 72,
\n
columnNumber: 21
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 71,
\n
columnNumber: 19
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 65,
\n
columnNumber: 17
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
arrow-right
\"
,
\n
icon:
\"
chevron-right
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 78,
\n
columnNumber: 19
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 77,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 61,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 60,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
menu-item
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
envelope
\"
,
\n
className:
\"
item-icon
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 86,
\n
columnNumber: 19
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 85,
\n
columnNumber: 17
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
item-text
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
upper-row
\"
,
\n
children: /*#__PURE__*/_jsxDEV(NavLink, {
\n
to:
\"
/account
\"
,
\n
className:
\"
menu-item-link
\"
,
\n
children:
\"
Messages
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 90,
\n
columnNumber: 21
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 89,
\n
columnNumber: 19
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
bottom-row
\"
,
\n
children: /*#__PURE__*/_jsxDEV(NavLink, {
\n
to:
\"
/account
\"
,
\n
className:
\"
menu-item-link-bottom
\"
,
\n
children: userInfo ? userInfo.email :
\"
...
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 95,
\n
columnNumber: 21
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 94,
\n
columnNumber: 19
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 88,
\n
columnNumber: 17
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
arrow-right
\"
,
\n
icon:
\"
chevron-right
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 101,
\n
columnNumber: 19
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 100,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 84,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 83,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
li
\"
, {}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 115,
\n
columnNumber: 13
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 58,
\n
columnNumber: 11
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 57,
\n
columnNumber: 9
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 51,
\n
columnNumber: 7
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 50,
\n
columnNumber: 5
\n
}, this);
\n
};
\n\n
_s(DropdownMenu,
\"
fSJPYre4v1rGcIZdck7wMJJU1dU=
\"
, false, function () {
\n
return [useOktaAuth];
\n
});
\n\n
_c = DropdownMenu;
\n
export default DropdownMenu;
\n\n
var _c;
\n\n
$RefreshReg$(_c,
\"
DropdownMenu
\"
);"
,
"map"
:{
"version"
:
3
,
"sources"
:[
"C:/Users/Bruger/Desktop/Web-projects/pipit/client/src/components/navbar/dropdownMenu/NavbarDropdownMenu.jsx"
],
"names"
:[
"React"
,
"useRef"
,
"useState"
,
"useEffect"
,
"NavLink"
,
"useOktaAuth"
,
"FontAwesomeIcon"
,
"DropdownMenu"
,
"authState"
,
"oktaAuth"
,
"userInfo"
,
"setUserInfo"
,
"dropdownRef"
,
"isActive"
,
"setIsActive"
,
"onClick"
,
"pageClickEvent"
,
"e"
,
"current"
,
"contains"
,
"target"
,
"window"
,
"addEventListener"
,
"removeEventListener"
,
"isAuthenticated"
,
"getUser"
,
"then"
,
"info"
,
"logout"
,
"signOut"
,
"email"
],
"mappings"
:
"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"
,
"sourcesContent"
:[
"import React, { useRef, useState, useEffect } from 'react'
\r\n
import { NavLink } from
\"
react-router-dom
\"
;
\r\n
import { useOktaAuth } from '@okta/okta-react';
\r\n
import
\"
./NavbarDropdownMenu.css
\"\r\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
\r\n\r\n\r\n
const DropdownMenu = () => {
\r\n
const { authState, oktaAuth } = useOktaAuth();
\r\n
const [userInfo, setUserInfo] = useState(null);
\r\n\r\n
const dropdownRef = useRef(null);
\r\n
const [isActive, setIsActive] = useState(false);
\r\n
const onClick = () => setIsActive(!isActive);
\r\n\r\n
useEffect(() => {
\r\n
const pageClickEvent = (e) => {
\r\n
if (dropdownRef.current !== null && !dropdownRef.current.contains(e.target)) {
\r\n
setIsActive(!isActive);
\r\n
}
\r\n
};
\r\n\r\n
// If the item is active (ie open) then listen for clicks
\r\n
if (isActive) {
\r\n
window.addEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
return () => {
\r\n
window.removeEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
}, [isActive]);
\r\n\r\n
useEffect(() => {
\r\n
if (!authState.isAuthenticated) {
\r\n
// When user isn't authenticated, forget any user info
\r\n
setUserInfo(null);
\r\n
} else {
\r\n
oktaAuth.getUser().then(info => {
\r\n
setUserInfo(info);
\r\n
});
\r\n
}
\r\n
}, [authState, oktaAuth]); // Update if authState changes
\r\n\r\n
const logout = () => {
\r\n
oktaAuth.signOut()
\r\n
}
\r\n\r\n
return (
\r\n
<li>
\r\n
<div className=
\"
navbar-user-dropdown-container
\"
>
\r\n
<button className={`user-dropdown-menu-toggle-button ${isActive ? 'active' : 'inactive'}`} onClick={onClick} >
\r\n
<FontAwesomeIcon className=
\"
user-icon
\"
icon=
\"
user-circle
\"
></FontAwesomeIcon>
\r\n
<FontAwesomeIcon className=
\"
down-arrow
\"
icon=
\"
angle-down
\"
></FontAwesomeIcon>
\r\n
</button>
\r\n
{/* show submenu?*/}
\r\n
<div ref={dropdownRef} className={`user-dropDown-menu-content ${isActive ? 'active' : 'inactive'}`}>
\r\n
<ul>
\r\n\r\n
<li>
\r\n
<div className=
\"
menu-item
\"
>
\r\n
<div>
\r\n
<FontAwesomeIcon className=
\"
arrow-right
\"
icon=
\"
user-circle
\"
></FontAwesomeIcon>
\r\n
</div>
\r\n
<div className=
\"
item-text
\"
>
\r\n
<div className=
\"
upper-row
\"
>
\r\n
<NavLink to=
\"
/account
\"
className=
\"
menu-item-link
\"
>
\r\n
Account
\r\n
</NavLink>
\r\n
</div>
\r\n
<div className=
\"
bottom-row
\"
>
\r\n
<NavLink to=
\"
/account
\"
className=
\"
menu-item-link-bottom
\"
>
\r\n
{userInfo ? userInfo.email :
\"
...
\"
}
\r\n
</NavLink>
\r\n
</div>
\r\n
</div>
\r\n
<div>
\r\n
<FontAwesomeIcon className=
\"
arrow-right
\"
icon=
\"
chevron-right
\"
></FontAwesomeIcon>
\r\n
</div>
\r\n
</div>
\r\n
</li>
\r\n\r\n
<li>
\r\n
<div className=
\"
menu-item
\"
>
\r\n
<div>
\r\n
<FontAwesomeIcon icon=
\"
envelope
\"
className=
\"
item-icon
\"
></FontAwesomeIcon>
\r\n
</div>
\r\n
<div className=
\"
item-text
\"
>
\r\n
<div className=
\"
upper-row
\"
>
\r\n
<NavLink to=
\"
/account
\"
className=
\"
menu-item-link
\"
>
\r\n
Messages
\r\n
</NavLink>
\r\n
</div>
\r\n
<div className=
\"
bottom-row
\"
>
\r\n
<NavLink to=
\"
/account
\"
className=
\"
menu-item-link-bottom
\"
>
\r\n
{userInfo ? userInfo.email :
\"
...
\"
}
\r\n
</NavLink>
\r\n
</div>
\r\n
</div>
\r\n
<div>
\r\n
<FontAwesomeIcon className=
\"
arrow-right
\"
icon=
\"
chevron-right
\"
></FontAwesomeIcon>
\r\n
</div>
\r\n
</div>
\r\n
{/* <NavLink to=
\"
/messages
\"
>
\r\n
\r\n
</NavLink> */}
\r\n
</li>
\r\n\r\n
{/* <li>
\r\n
<a href=
\"
./
\"
>
\r\n
<FontAwesomeIcon icon=
\"
sliders-h
\"
></FontAwesomeIcon> Preferences
\r\n
<FontAwesomeIcon icon=
\"
chevron-right
\"
className=
\"
arrow-right-icon
\"
></FontAwesomeIcon>
\r\n
</a>
\r\n
</li> */}
\r\n
<li>
\r\n
{/* <a onClick={logout}>
\r\n
<FontAwesomeIcon icon=
\"
sign-out-alt
\"
></FontAwesomeIcon> Log out
\r\n
</a> */}
\r\n
</li>
\r\n
</ul>
\r\n
</div>
\r\n
</div>
\r\n
</li >
\r\n
)
\r\n
}
\r\n\r\n
export default DropdownMenu"
]},
"metadata"
:{},
"sourceType"
:
"module"
}
\ No newline at end of file
client/node_modules/.cache/babel-loader/1c0bad641860c9a16bdfafd7bbd5e3d8.json
0 → 100644
View file @
e4f09cae
{
"ast"
:
null
,
"code"
:
"var _jsxFileName =
\"
C:
\\\\
Users
\\\\
Bruger
\\\\
Desktop
\\\\
Web-projects
\\\\
pipit
\\\\
client
\\\\
src
\\\\
components
\\\\
navbar
\\\\
dropdownMenu
\\\\
NavbarDropdownMenu.jsx
\"
,
\n
_s = $RefreshSig$();
\n\n
import React, { useRef, useState, useEffect } from 'react';
\n
import { NavLink } from
\"
react-router-dom
\"
;
\n
import { useOktaAuth } from '@okta/okta-react';
\n
import
\"
./NavbarDropdownMenu.css
\"
;
\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
\n
import { jsxDEV as _jsxDEV } from
\"
react/jsx-dev-runtime
\"
;
\n\n
const DropdownMenu = () => {
\n
_s();
\n\n
const {
\n
authState,
\n
oktaAuth
\n
} = useOktaAuth();
\n
const [userInfo, setUserInfo] = useState(null);
\n
const dropdownRef = useRef(null);
\n
const [isActive, setIsActive] = useState(false);
\n\n
const onClick = () => setIsActive(!isActive);
\n\n
useEffect(() => {
\n
const pageClickEvent = e => {
\n
if (dropdownRef.current !== null && !dropdownRef.current.contains(e.target)) {
\n
setIsActive(!isActive);
\n
}
\n
}; // If the item is active (ie open) then listen for clicks
\n\n\n
if (isActive) {
\n
window.addEventListener('click', pageClickEvent);
\n
}
\n\n
return () => {
\n
window.removeEventListener('click', pageClickEvent);
\n
};
\n
}, [isActive]);
\n
useEffect(() => {
\n
if (!authState.isAuthenticated) {
\n
// When user isn't authenticated, forget any user info
\n
setUserInfo(null);
\n
} else {
\n
oktaAuth.getUser().then(info => {
\n
setUserInfo(info);
\n
});
\n
}
\n
}, [authState, oktaAuth]); // Update if authState changes
\n\n
const logout = () => {
\n
oktaAuth.signOut();
\n
};
\n\n
return /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
navbar-user-dropdown-container
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
button
\"
, {
\n
className: `user-dropdown-menu-toggle-button ${isActive ? 'active' : 'inactive'}`,
\n
onClick: onClick,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
user-icon
\"
,
\n
icon:
\"
user-circle
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 53,
\n
columnNumber: 11
\n
}, this), /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
down-arrow
\"
,
\n
icon:
\"
angle-down
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 54,
\n
columnNumber: 11
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 52,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
ref: dropdownRef,
\n
className: `user-dropDown-menu-content ${isActive ? 'active' : 'inactive'}`,
\n
children: /*#__PURE__*/_jsxDEV(
\"
ul
\"
, {
\n
children: [/*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(NavLink, {
\n
to:
\"
/account
\"
,
\n
onClick: onClick,
\n
className:
\"
top-item
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
user
\"
,
\n
className:
\"
arrow-right-icon-top
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 62,
\n
columnNumber: 19
\n
}, this),
\"\\
xA0
\\
xA0
\"
]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 61,
\n
columnNumber: 17
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
item-top-text
\"
,
\n
children: /*#__PURE__*/_jsxDEV(
\"
span
\"
, {
\n
children: [/*#__PURE__*/_jsxDEV(
\"
p
\"
, {
\n
children:
\"
Account
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 66,
\n
columnNumber: 21
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
p
\"
, {
\n
children: userInfo ? userInfo.email :
\"
...
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 67,
\n
columnNumber: 21
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 65,
\n
columnNumber: 19
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 64,
\n
columnNumber: 17
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
arrow-right-icon-top
\"
,
\n
children: /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
chevron-right
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 71,
\n
columnNumber: 19
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 70,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 60,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 59,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(NavLink, {
\n
to:
\"
/messages
\"
,
\n
onClick: onClick,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
envelope
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 77,
\n
columnNumber: 17
\n
}, this),
\"\\
xA0
\\
xA0Messages
\"
, /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
chevron-right
\"
,
\n
className:
\"
arrow-right-icon
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 78,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 76,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 75,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
a
\"
, {
\n
onClick: logout,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
sign-out-alt
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 89,
\n
columnNumber: 17
\n
}, this),
\"\\
xA0
\\
xA0Log out
\"
]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 88,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 87,
\n
columnNumber: 13
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 58,
\n
columnNumber: 11
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 57,
\n
columnNumber: 9
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 51,
\n
columnNumber: 7
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 50,
\n
columnNumber: 5
\n
}, this);
\n
};
\n\n
_s(DropdownMenu,
\"
fSJPYre4v1rGcIZdck7wMJJU1dU=
\"
, false, function () {
\n
return [useOktaAuth];
\n
});
\n\n
_c = DropdownMenu;
\n
export default DropdownMenu;
\n\n
var _c;
\n\n
$RefreshReg$(_c,
\"
DropdownMenu
\"
);"
,
"map"
:{
"version"
:
3
,
"sources"
:[
"C:/Users/Bruger/Desktop/Web-projects/pipit/client/src/components/navbar/dropdownMenu/NavbarDropdownMenu.jsx"
],
"names"
:[
"React"
,
"useRef"
,
"useState"
,
"useEffect"
,
"NavLink"
,
"useOktaAuth"
,
"FontAwesomeIcon"
,
"DropdownMenu"
,
"authState"
,
"oktaAuth"
,
"userInfo"
,
"setUserInfo"
,
"dropdownRef"
,
"isActive"
,
"setIsActive"
,
"onClick"
,
"pageClickEvent"
,
"e"
,
"current"
,
"contains"
,
"target"
,
"window"
,
"addEventListener"
,
"removeEventListener"
,
"isAuthenticated"
,
"getUser"
,
"then"
,
"info"
,
"logout"
,
"signOut"
,
"email"
],
"mappings"
:
"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"
,
"sourcesContent"
:[
"import React, { useRef, useState, useEffect } from 'react'
\r\n
import { NavLink } from
\"
react-router-dom
\"
;
\r\n
import { useOktaAuth } from '@okta/okta-react';
\r\n
import
\"
./NavbarDropdownMenu.css
\"\r\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
\r\n\r\n\r\n
const DropdownMenu = () => {
\r\n
const { authState, oktaAuth } = useOktaAuth();
\r\n
const [userInfo, setUserInfo] = useState(null);
\r\n\r\n
const dropdownRef = useRef(null);
\r\n
const [isActive, setIsActive] = useState(false);
\r\n
const onClick = () => setIsActive(!isActive);
\r\n\r\n
useEffect(() => {
\r\n
const pageClickEvent = (e) => {
\r\n
if (dropdownRef.current !== null && !dropdownRef.current.contains(e.target)) {
\r\n
setIsActive(!isActive);
\r\n
}
\r\n
};
\r\n\r\n
// If the item is active (ie open) then listen for clicks
\r\n
if (isActive) {
\r\n
window.addEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
return () => {
\r\n
window.removeEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
}, [isActive]);
\r\n\r\n
useEffect(() => {
\r\n
if (!authState.isAuthenticated) {
\r\n
// When user isn't authenticated, forget any user info
\r\n
setUserInfo(null);
\r\n
} else {
\r\n
oktaAuth.getUser().then(info => {
\r\n
setUserInfo(info);
\r\n
});
\r\n
}
\r\n
}, [authState, oktaAuth]); // Update if authState changes
\r\n\r\n
const logout = () => {
\r\n
oktaAuth.signOut()
\r\n
}
\r\n\r\n
return (
\r\n
<li>
\r\n
<div className=
\"
navbar-user-dropdown-container
\"
>
\r\n
<button className={`user-dropdown-menu-toggle-button ${isActive ? 'active' : 'inactive'}`} onClick={onClick} >
\r\n
<FontAwesomeIcon className=
\"
user-icon
\"
icon=
\"
user-circle
\"
></FontAwesomeIcon>
\r\n
<FontAwesomeIcon className=
\"
down-arrow
\"
icon=
\"
angle-down
\"
></FontAwesomeIcon>
\r\n
</button>
\r\n
{/* show submenu?*/}
\r\n
<div ref={dropdownRef} className={`user-dropDown-menu-content ${isActive ? 'active' : 'inactive'}`}>
\r\n
<ul>
\r\n
<li>
\r\n
<NavLink to=
\"
/account
\"
onClick={onClick} className=
\"
top-item
\"
>
\r\n
<div>
\r\n
<FontAwesomeIcon icon=
\"
user
\"
className=
\"
arrow-right-icon-top
\"
></FontAwesomeIcon>
\r\n
</div>
\r\n
<div className=
\"
item-top-text
\"
>
\r\n
<span>
\r\n
<p>Account</p>
\r\n
<p>{userInfo ? userInfo.email :
\"
...
\"
}</p>
\r\n
</span>
\r\n
</div>
\r\n
<div className=
\"
arrow-right-icon-top
\"
>
\r\n
<FontAwesomeIcon icon=
\"
chevron-right
\"
></FontAwesomeIcon>
\r\n
</div>
\r\n
</NavLink>
\r\n
</li>
\r\n
<li>
\r\n
<NavLink to=
\"
/messages
\"
onClick={onClick}>
\r\n
<FontAwesomeIcon icon=
\"
envelope
\"
></FontAwesomeIcon> Messages
\r\n
<FontAwesomeIcon icon=
\"
chevron-right
\"
className=
\"
arrow-right-icon
\"
></FontAwesomeIcon>
\r\n
</NavLink>
\r\n
</li>
\r\n
{/* <li>
\r\n
<a href=
\"
./
\"
>
\r\n
<FontAwesomeIcon icon=
\"
sliders-h
\"
></FontAwesomeIcon> Preferences
\r\n
<FontAwesomeIcon icon=
\"
chevron-right
\"
className=
\"
arrow-right-icon
\"
></FontAwesomeIcon>
\r\n
</a>
\r\n
</li> */}
\r\n
<li>
\r\n
<a onClick={logout}>
\r\n
<FontAwesomeIcon icon=
\"
sign-out-alt
\"
></FontAwesomeIcon> Log out
\r\n
</a>
\r\n
</li>
\r\n
</ul>
\r\n
</div>
\r\n
</div>
\r\n
</li >
\r\n
)
\r\n
}
\r\n\r\n
export default DropdownMenu"
]},
"metadata"
:{},
"sourceType"
:
"module"
}
\ No newline at end of file
client/node_modules/.cache/babel-loader/1d360a2d68824251424ffc53467dbfff.json
0 → 100644
View file @
e4f09cae
{
"ast"
:
null
,
"code"
:
"var _jsxFileName =
\"
C:
\\\\
Users
\\\\
Bruger
\\\\
Desktop
\\\\
Web-projects
\\\\
pipit
\\\\
client
\\\\
src
\\\\
components
\\\\
navbar
\\\\
dropdownMenu
\\\\
NavbarDropdownMenu.jsx
\"
,
\n
_s = $RefreshSig$();
\n\n
import React, { useRef, useState, useEffect } from 'react';
\n
import { NavLink } from
\"
react-router-dom
\"
;
\n
import { useOktaAuth } from '@okta/okta-react';
\n
import
\"
./NavbarDropdownMenu.css
\"
;
\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
\n
import { jsxDEV as _jsxDEV } from
\"
react/jsx-dev-runtime
\"
;
\n\n
const DropdownMenu = () => {
\n
_s();
\n\n
const {
\n
authState,
\n
oktaAuth
\n
} = useOktaAuth();
\n
const [userInfo, setUserInfo] = useState(null);
\n
const dropdownRef = useRef(null);
\n
const [isActive, setIsActive] = useState(false);
\n\n
const onClick = () => setIsActive(!isActive);
\n\n
useEffect(() => {
\n
const pageClickEvent = e => {
\n
if (dropdownRef.current !== null && !dropdownRef.current.contains(e.target)) {
\n
setIsActive(!isActive);
\n
}
\n
}; // If the item is active (ie open) then listen for clicks
\n\n\n
if (isActive) {
\n
window.addEventListener('click', pageClickEvent);
\n
}
\n\n
return () => {
\n
window.removeEventListener('click', pageClickEvent);
\n
};
\n
}, [isActive]);
\n
useEffect(() => {
\n
if (!authState.isAuthenticated) {
\n
// When user isn't authenticated, forget any user info
\n
setUserInfo(null);
\n
} else {
\n
oktaAuth.getUser().then(info => {
\n
setUserInfo(info);
\n
});
\n
}
\n
}, [authState, oktaAuth]); // Update if authState changes
\n\n
const logout = () => {
\n
oktaAuth.signOut();
\n
};
\n\n
return /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
navbar-user-dropdown-container
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
button
\"
, {
\n
className: `user-dropdown-menu-toggle-button ${isActive ? 'active' : 'inactive'}`,
\n
onClick: onClick,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
user-icon
\"
,
\n
icon:
\"
user-circle
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 53,
\n
columnNumber: 11
\n
}, this), /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
down-arrow
\"
,
\n
icon:
\"
angle-down
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 54,
\n
columnNumber: 11
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 52,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
ref: dropdownRef,
\n
className: `user-dropDown-menu-content ${isActive ? 'active' : 'inactive'}`,
\n
children: /*#__PURE__*/_jsxDEV(
\"
ul
\"
, {
\n
children: [/*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(NavLink, {
\n
to:
\"
/account
\"
,
\n
className:
\"
accountLink
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
upper-row
\"
,
\n
children:
\"
Account
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 63,
\n
columnNumber: 21
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
bottom-row
\"
,
\n
children: userInfo ? userInfo.email :
\"
...
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 67,
\n
columnNumber: 21
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 62,
\n
columnNumber: 19
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
arrow-right-icon
\"
,
\n
icon:
\"
chevron-right
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 72,
\n
columnNumber: 21
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 71,
\n
columnNumber: 19
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 61,
\n
columnNumber: 17
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 60,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 59,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(NavLink, {
\n
to:
\"
/messages
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
envelope
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 79,
\n
columnNumber: 17
\n
}, this),
\"\\
xA0
\\
xA0Messages
\"
, /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
chevron-right
\"
,
\n
className:
\"
arrow-right-icon
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 80,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 78,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 77,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
a
\"
, {
\n
onClick: logout,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
sign-out-alt
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 91,
\n
columnNumber: 17
\n
}, this),
\"\\
xA0
\\
xA0Log out
\"
]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 90,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 89,
\n
columnNumber: 13
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 58,
\n
columnNumber: 11
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 57,
\n
columnNumber: 9
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 51,
\n
columnNumber: 7
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 50,
\n
columnNumber: 5
\n
}, this);
\n
};
\n\n
_s(DropdownMenu,
\"
fSJPYre4v1rGcIZdck7wMJJU1dU=
\"
, false, function () {
\n
return [useOktaAuth];
\n
});
\n\n
_c = DropdownMenu;
\n
export default DropdownMenu;
\n\n
var _c;
\n\n
$RefreshReg$(_c,
\"
DropdownMenu
\"
);"
,
"map"
:{
"version"
:
3
,
"sources"
:[
"C:/Users/Bruger/Desktop/Web-projects/pipit/client/src/components/navbar/dropdownMenu/NavbarDropdownMenu.jsx"
],
"names"
:[
"React"
,
"useRef"
,
"useState"
,
"useEffect"
,
"NavLink"
,
"useOktaAuth"
,
"FontAwesomeIcon"
,
"DropdownMenu"
,
"authState"
,
"oktaAuth"
,
"userInfo"
,
"setUserInfo"
,
"dropdownRef"
,
"isActive"
,
"setIsActive"
,
"onClick"
,
"pageClickEvent"
,
"e"
,
"current"
,
"contains"
,
"target"
,
"window"
,
"addEventListener"
,
"removeEventListener"
,
"isAuthenticated"
,
"getUser"
,
"then"
,
"info"
,
"logout"
,
"signOut"
,
"email"
],
"mappings"
:
"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"
,
"sourcesContent"
:[
"import React, { useRef, useState, useEffect } from 'react'
\r\n
import { NavLink } from
\"
react-router-dom
\"
;
\r\n
import { useOktaAuth } from '@okta/okta-react';
\r\n
import
\"
./NavbarDropdownMenu.css
\"\r\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
\r\n\r\n\r\n
const DropdownMenu = () => {
\r\n
const { authState, oktaAuth } = useOktaAuth();
\r\n
const [userInfo, setUserInfo] = useState(null);
\r\n\r\n
const dropdownRef = useRef(null);
\r\n
const [isActive, setIsActive] = useState(false);
\r\n
const onClick = () => setIsActive(!isActive);
\r\n\r\n
useEffect(() => {
\r\n
const pageClickEvent = (e) => {
\r\n
if (dropdownRef.current !== null && !dropdownRef.current.contains(e.target)) {
\r\n
setIsActive(!isActive);
\r\n
}
\r\n
};
\r\n\r\n
// If the item is active (ie open) then listen for clicks
\r\n
if (isActive) {
\r\n
window.addEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
return () => {
\r\n
window.removeEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
}, [isActive]);
\r\n\r\n
useEffect(() => {
\r\n
if (!authState.isAuthenticated) {
\r\n
// When user isn't authenticated, forget any user info
\r\n
setUserInfo(null);
\r\n
} else {
\r\n
oktaAuth.getUser().then(info => {
\r\n
setUserInfo(info);
\r\n
});
\r\n
}
\r\n
}, [authState, oktaAuth]); // Update if authState changes
\r\n\r\n
const logout = () => {
\r\n
oktaAuth.signOut()
\r\n
}
\r\n\r\n
return (
\r\n
<li>
\r\n
<div className=
\"
navbar-user-dropdown-container
\"
>
\r\n
<button className={`user-dropdown-menu-toggle-button ${isActive ? 'active' : 'inactive'}`} onClick={onClick} >
\r\n
<FontAwesomeIcon className=
\"
user-icon
\"
icon=
\"
user-circle
\"
></FontAwesomeIcon>
\r\n
<FontAwesomeIcon className=
\"
down-arrow
\"
icon=
\"
angle-down
\"
></FontAwesomeIcon>
\r\n
</button>
\r\n
{/* show submenu?*/}
\r\n
<div ref={dropdownRef} className={`user-dropDown-menu-content ${isActive ? 'active' : 'inactive'}`}>
\r\n
<ul>
\r\n
<li>
\r\n
<div >
\r\n
<NavLink to=
\"
/account
\"
className=
\"
accountLink
\"
>
\r\n
<div >
\r\n
<div className=
\"
upper-row
\"
>
\r\n
Account
\r\n
</div>
\r\n\r\n
<div className=
\"
bottom-row
\"
>
\r\n
{userInfo ? userInfo.email :
\"
...
\"
}
\r\n
</div>
\r\n
</div>
\r\n
<div>
\r\n
<FontAwesomeIcon className=
\"
arrow-right-icon
\"
icon=
\"
chevron-right
\"
></FontAwesomeIcon>
\r\n
</div>
\r\n
</NavLink>
\r\n
</div>
\r\n
</li>
\r\n
<li>
\r\n
<NavLink to=
\"
/messages
\"
>
\r\n
<FontAwesomeIcon icon=
\"
envelope
\"
></FontAwesomeIcon> Messages
\r\n
<FontAwesomeIcon icon=
\"
chevron-right
\"
className=
\"
arrow-right-icon
\"
></FontAwesomeIcon>
\r\n
</NavLink>
\r\n
</li>
\r\n
{/* <li>
\r\n
<a href=
\"
./
\"
>
\r\n
<FontAwesomeIcon icon=
\"
sliders-h
\"
></FontAwesomeIcon> Preferences
\r\n
<FontAwesomeIcon icon=
\"
chevron-right
\"
className=
\"
arrow-right-icon
\"
></FontAwesomeIcon>
\r\n
</a>
\r\n
</li> */}
\r\n
<li>
\r\n
<a onClick={logout}>
\r\n
<FontAwesomeIcon icon=
\"
sign-out-alt
\"
></FontAwesomeIcon> Log out
\r\n
</a>
\r\n
</li>
\r\n
</ul>
\r\n
</div>
\r\n
</div>
\r\n
</li >
\r\n
)
\r\n
}
\r\n\r\n
export default DropdownMenu"
]},
"metadata"
:{},
"sourceType"
:
"module"
}
\ No newline at end of file
client/node_modules/.cache/babel-loader/1e6b0f147c2593c6f30f37e752f51f3c.json
0 → 100644
View file @
e4f09cae
{
"ast"
:
null
,
"code"
:
"var _jsxFileName =
\"
C:
\\\\
Users
\\\\
Bruger
\\\\
Desktop
\\\\
Web-projects
\\\\
pipit
\\\\
client
\\\\
src
\\\\
components
\\\\
navbar
\\\\
dropdownMenu
\\\\
NavbarDropdownMenu.jsx
\"
,
\n
_s = $RefreshSig$();
\n\n
import React, { useRef, useState, useEffect } from 'react';
\n
import { NavLink } from
\"
react-router-dom
\"
;
\n
import { useOktaAuth } from '@okta/okta-react';
\n
import
\"
./NavbarDropdownMenu.css
\"
;
\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
\n
import { jsxDEV as _jsxDEV } from
\"
react/jsx-dev-runtime
\"
;
\n\n
const DropdownMenu = () => {
\n
_s();
\n\n
const {
\n
authState,
\n
oktaAuth
\n
} = useOktaAuth();
\n
const [userInfo, setUserInfo] = useState(null);
\n
const dropdownRef = useRef(null);
\n
const [isActive, setIsActive] = useState(false);
\n\n
const onClick = () => setIsActive(!isActive);
\n\n
useEffect(() => {
\n
const pageClickEvent = e => {
\n
if (dropdownRef.current !== null && !dropdownRef.current.contains(e.target)) {
\n
setIsActive(!isActive);
\n
}
\n
}; // If the item is active (ie open) then listen for clicks
\n\n\n
if (isActive) {
\n
window.addEventListener('click', pageClickEvent);
\n
}
\n\n
return () => {
\n
window.removeEventListener('click', pageClickEvent);
\n
};
\n
}, [isActive]);
\n
useEffect(() => {
\n
if (!authState.isAuthenticated) {
\n
// When user isn't authenticated, forget any user info
\n
setUserInfo(null);
\n
} else {
\n
oktaAuth.getUser().then(info => {
\n
setUserInfo(info);
\n
});
\n
}
\n
}, [authState, oktaAuth]); // Update if authState changes
\n\n
const logout = () => {
\n
oktaAuth.signOut();
\n
};
\n\n
return /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
navbar-user-dropdown-container
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
button
\"
, {
\n
className: `user-dropdown-menu-toggle-button ${isActive ? 'active' : 'inactive'}`,
\n
onClick: onClick,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
user-icon
\"
,
\n
icon:
\"
user-circle
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 53,
\n
columnNumber: 11
\n
}, this), /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
down-arrow
\"
,
\n
icon:
\"
angle-down
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 54,
\n
columnNumber: 11
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 52,
\n
columnNumber: 9
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
ref: dropdownRef,
\n
className: `user-dropDown-menu-content ${isActive ? 'active' : 'inactive'}`,
\n
children: /*#__PURE__*/_jsxDEV(
\"
ul
\"
, {
\n
children: [/*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
entry-text
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
upper-row
\"
,
\n
children: /*#__PURE__*/_jsxDEV(NavLink, {
\n
to:
\"
/account
\"
,
\n
children:
\"
[project] [new issues] [issues fixed]
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 62,
\n
columnNumber: 19
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 61,
\n
columnNumber: 17
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
className:
\"
bottom-row
\"
,
\n
children: /*#__PURE__*/_jsxDEV(
\"
a
\"
, {
\n
children:
\"
[team] [time]
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 67,
\n
columnNumber: 19
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 66,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 60,
\n
columnNumber: 15
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
div
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
className:
\"
entry-icon
\"
,
\n
icon:
\"
chevron-right
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 73,
\n
columnNumber: 17
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 72,
\n
columnNumber: 15
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 59,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(NavLink, {
\n
to:
\"
/messages
\"
,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
envelope
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 78,
\n
columnNumber: 17
\n
}, this),
\"\\
xA0
\\
xA0Messages
\"
, /*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
chevron-right
\"
,
\n
className:
\"
arrow-right-icon
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 79,
\n
columnNumber: 17
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 77,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 76,
\n
columnNumber: 13
\n
}, this), /*#__PURE__*/_jsxDEV(
\"
li
\"
, {
\n
children: /*#__PURE__*/_jsxDEV(
\"
a
\"
, {
\n
onClick: logout,
\n
children: [/*#__PURE__*/_jsxDEV(FontAwesomeIcon, {
\n
icon:
\"
sign-out-alt
\"\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 90,
\n
columnNumber: 17
\n
}, this),
\"\\
xA0
\\
xA0Log out
\"
]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 89,
\n
columnNumber: 15
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 88,
\n
columnNumber: 13
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 58,
\n
columnNumber: 11
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 57,
\n
columnNumber: 9
\n
}, this)]
\n
}, void 0, true, {
\n
fileName: _jsxFileName,
\n
lineNumber: 51,
\n
columnNumber: 7
\n
}, this)
\n
}, void 0, false, {
\n
fileName: _jsxFileName,
\n
lineNumber: 50,
\n
columnNumber: 5
\n
}, this);
\n
};
\n\n
_s(DropdownMenu,
\"
fSJPYre4v1rGcIZdck7wMJJU1dU=
\"
, false, function () {
\n
return [useOktaAuth];
\n
});
\n\n
_c = DropdownMenu;
\n
export default DropdownMenu;
\n\n
var _c;
\n\n
$RefreshReg$(_c,
\"
DropdownMenu
\"
);"
,
"map"
:{
"version"
:
3
,
"sources"
:[
"C:/Users/Bruger/Desktop/Web-projects/pipit/client/src/components/navbar/dropdownMenu/NavbarDropdownMenu.jsx"
],
"names"
:[
"React"
,
"useRef"
,
"useState"
,
"useEffect"
,
"NavLink"
,
"useOktaAuth"
,
"FontAwesomeIcon"
,
"DropdownMenu"
,
"authState"
,
"oktaAuth"
,
"userInfo"
,
"setUserInfo"
,
"dropdownRef"
,
"isActive"
,
"setIsActive"
,
"onClick"
,
"pageClickEvent"
,
"e"
,
"current"
,
"contains"
,
"target"
,
"window"
,
"addEventListener"
,
"removeEventListener"
,
"isAuthenticated"
,
"getUser"
,
"then"
,
"info"
,
"logout"
,
"signOut"
],
"mappings"
:
"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"
,
"sourcesContent"
:[
"import React, { useRef, useState, useEffect } from 'react'
\r\n
import { NavLink } from
\"
react-router-dom
\"
;
\r\n
import { useOktaAuth } from '@okta/okta-react';
\r\n
import
\"
./NavbarDropdownMenu.css
\"\r\n
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
\r\n\r\n\r\n
const DropdownMenu = () => {
\r\n
const { authState, oktaAuth } = useOktaAuth();
\r\n
const [userInfo, setUserInfo] = useState(null);
\r\n\r\n
const dropdownRef = useRef(null);
\r\n
const [isActive, setIsActive] = useState(false);
\r\n
const onClick = () => setIsActive(!isActive);
\r\n\r\n
useEffect(() => {
\r\n
const pageClickEvent = (e) => {
\r\n
if (dropdownRef.current !== null && !dropdownRef.current.contains(e.target)) {
\r\n
setIsActive(!isActive);
\r\n
}
\r\n
};
\r\n\r\n
// If the item is active (ie open) then listen for clicks
\r\n
if (isActive) {
\r\n
window.addEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
return () => {
\r\n
window.removeEventListener('click', pageClickEvent);
\r\n
}
\r\n\r\n
}, [isActive]);
\r\n\r\n
useEffect(() => {
\r\n
if (!authState.isAuthenticated) {
\r\n
// When user isn't authenticated, forget any user info
\r\n
setUserInfo(null);
\r\n
} else {
\r\n
oktaAuth.getUser().then(info => {
\r\n
setUserInfo(info);
\r\n
});
\r\n
}
\r\n
}, [authState, oktaAuth]); // Update if authState changes
\r\n\r\n
const logout = () => {
\r\n
oktaAuth.signOut()
\r\n
}
\r\n\r\n
return (
\r\n
<li>
\r\n
<div className=
\"
navbar-user-dropdown-container
\"
>
\r\n
<button className={`user-dropdown-menu-toggle-button ${isActive ? 'active' : 'inactive'}`} onClick={onClick} >
\r\n
<FontAwesomeIcon className=
\"
user-icon
\"
icon=
\"
user-circle
\"
></FontAwesomeIcon>
\r\n
<FontAwesomeIcon className=
\"
down-arrow
\"
icon=
\"
angle-down
\"
></FontAwesomeIcon>
\r\n
</button>
\r\n
{/* show submenu?*/}
\r\n
<div ref={dropdownRef} className={`user-dropDown-menu-content ${isActive ? 'active' : 'inactive'}`}>
\r\n
<ul>
\r\n
<li>
\r\n
<div className=
\"
entry-text
\"
>
\r\n
<div className=
\"
upper-row
\"
>
\r\n
<NavLink to=
\"
/account
\"
>
\r\n
[project] [new issues] [issues fixed]
\r\n
</NavLink>
\r\n
</div>
\r\n
<div className=
\"
bottom-row
\"
>
\r\n
<a>
\r\n
[team] [time]
\r\n
</a>
\r\n
</div>
\r\n
</div>
\r\n
<div>
\r\n
<FontAwesomeIcon className=
\"
entry-icon
\"
icon=
\"
chevron-right
\"
></FontAwesomeIcon>
\r\n
</div>
\r\n
</li>
\r\n
<li>
\r\n
<NavLink to=
\"
/messages
\"
>
\r\n
<FontAwesomeIcon icon=
\"
envelope
\"
></FontAwesomeIcon> Messages
\r\n
<FontAwesomeIcon icon=
\"
chevron-right
\"
className=
\"
arrow-right-icon
\"
></FontAwesomeIcon>
\r\n
</NavLink>
\r\n
</li>
\r\n
{/* <li>
\r\n
<a href=
\"
./
\"
>
\r\n
<FontAwesomeIcon icon=
\"
sliders-h
\"
></FontAwesomeIcon> Preferences
\r\n
<FontAwesomeIcon icon=
\"
chevron-right
\"
className=
\"
arrow-right-icon
\"
></FontAwesomeIcon>
\r\n
</a>
\r\n
</li> */}
\r\n
<li>
\r\n
<a onClick={logout}>
\r\n
<FontAwesomeIcon icon=
\"
sign-out-alt
\"
></FontAwesomeIcon> Log out
\r\n
</a>
\r\n
</li>
\r\n
</ul>
\r\n
</div>
\r\n
</div>
\r\n
</li >
\r\n
)
\r\n
}
\r\n\r\n
export default DropdownMenu"
]},
"metadata"
:{},
"sourceType"
:
"module"
}
\ No newline at end of file
Prev
1
2
3
4
5
…
11
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment