.eslintcache 63 KB
Newer Older
1
[{"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","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\account\\Account.jsx":"23","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\login\\signUp\\SignUp.jsx":"24","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\login\\passwordReset\\PasswordForgotModal.jsx":"25","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\messageModal\\MessageModal.jsx":"26","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\account\\confirmRemoveAccountModal\\ConfirmRemoveAccountModal.jsx":"27"},{"size":285,"mtime":1628516023915,"results":"28","hashOfConfig":"29"},{"size":2100,"mtime":1630074941213,"results":"30","hashOfConfig":"29"},{"size":540,"mtime":1630395532044,"results":"31","hashOfConfig":"29"},{"size":1489,"mtime":1629790769379,"results":"32","hashOfConfig":"29"},{"size":324,"mtime":1629371594261,"results":"33","hashOfConfig":"29"},{"size":2713,"mtime":1630395059503,"results":"34","hashOfConfig":"29"},{"size":626,"mtime":1628697746462,"results":"35","hashOfConfig":"29"},{"size":3967,"mtime":1628695632288,"results":"36","hashOfConfig":"29"},{"size":1279,"mtime":1630089091700,"results":"37","hashOfConfig":"29"},{"size":1068,"mtime":1628696051327,"results":"38","hashOfConfig":"29"},{"size":3660,"mtime":1629794572456,"results":"39","hashOfConfig":"29"},{"size":2374,"mtime":1628696187694,"results":"40","hashOfConfig":"29"},{"size":2694,"mtime":1628696113184,"results":"41","hashOfConfig":"29"},{"size":3264,"mtime":1628535700010,"results":"42","hashOfConfig":"29"},{"size":2334,"mtime":1630060568411,"results":"43","hashOfConfig":"29"},{"size":2096,"mtime":1628430812599,"results":"44","hashOfConfig":"29"},{"size":3570,"mtime":1628430832688,"results":"45","hashOfConfig":"29"},{"size":906,"mtime":1630073002522,"results":"46","hashOfConfig":"29"},{"size":548,"mtime":1628421916010,"results":"47","hashOfConfig":"29"},{"size":697,"mtime":1628430740299,"results":"48","hashOfConfig":"29"},{"size":470,"mtime":1628430752153,"results":"49","hashOfConfig":"29"},{"size":3533,"mtime":1630069281308,"results":"50","hashOfConfig":"29"},{"size":4569,"mtime":1630395290095,"results":"51","hashOfConfig":"29"},{"size":5569,"mtime":1630395219983,"results":"52","hashOfConfig":"29"},{"size":3623,"mtime":1630354196170,"results":"53","hashOfConfig":"29"},{"size":546,"mtime":1630352571382,"results":"54","hashOfConfig":"29"},{"size":2031,"mtime":1630394986741,"results":"55","hashOfConfig":"29"},{"filePath":"56","messages":"57","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"58"},"iyhzrm",{"filePath":"59","messages":"60","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"58"},{"filePath":"61","messages":"62","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"63"},{"filePath":"64","messages":"65","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"66","usedDeprecatedRules":"58"},{"filePath":"67","messages":"68","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"69"},{"filePath":"70","messages":"71","errorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":"72"},{"filePath":"73","messages":"74","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"58"},{"filePath":"75","messages":"76","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"77","usedDeprecatedRules":"58"},{"filePath":"78","messages":"79","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"58"},{"filePath":"80","messages":"81","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"58"},{"filePath":"82","messages":"83","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"84","usedDeprecatedRules":"58"},{"filePath":"85","messages":"86","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"87","usedDeprecatedRules":"58"},{"filePath":"88","messages":"89","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"90","usedDeprecatedRules":"58"},{"filePath":"91","messages":"92","errorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":"93","usedDeprecatedRules":"58"},{"filePath":"94","messages":"95","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"96","usedDeprecatedRules":"58"},{"filePath":"97","messages":"98","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"99","usedDeprecatedRules":"58"},{"filePath":"100","messages":"101","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"58"},{"filePath":"102","messages":"103","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"104","usedDeprecatedRules":"58"},{"filePath":"105","messages":"106","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"107","usedDeprecatedRules":"58"},{"filePath":"108","messages":"109","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"58"},{"filePath":"110","messages":"111","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"58"},{"filePath":"112","messages":"113","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"114","usedDeprecatedRules":"58"},{"filePath":"115","messages":"116","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"117","messages":"118","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"119"},{"filePath":"120","messages":"121","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"122","usedDeprecatedRules":"58"},{"filePath":"123","messages":"124","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"125","usedDeprecatedRules":"58"},{"filePath":"126","messages":"127","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"128"},"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\index.js",[],["129","130"],"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\App.jsx",[],"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\config.js",["131"],"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    forgotPasswordURL: 'http://localhost:3030/api/recover-user-password',\r\n    removeAccountURL: 'http://localhost:3030/api/remove-user'\r\n  }\r\n};","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\util\\useMessages.jsx",["132"],"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",[],["133","134"],"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\login\\Login.jsx",["135","136","137","138","139","140"],"import React, { useState, useEffect, useRef } from 'react';\r\nimport { Redirect } from 'react-router-dom'\r\nimport { useOktaAuth } from '@okta/okta-react';\r\nimport \"./Login.css\"\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { NavLink } from 'react-router-dom';\r\nimport signUp from './signUp/SignUp';\r\nimport config from '../../config';\r\nimport SignUp from './signUp/SignUp';\r\nimport PasswordForgotModal from './passwordReset/PasswordForgotModal';\r\n\r\nconst Login = () => {\r\n  const { authState, oktaAuth } = useOktaAuth();\r\n  const [sessionToken, setSessionToken] = useState()\r\n\r\n  const [username, setUsername] = useState('');\r\n  const [password, setPassword] = useState('');\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  const userInputData = JSON.stringify({\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 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  if (sessionToken) {\r\n    // Hide form while sessionToken is converted into id/access tokens\r\n    return null;\r\n  }\r\n\r\n  if (!authState || !authState.isAuthenticated) {\r\n    return (\r\n      <div className=\"pageContainer\">\r\n        <SignUp />\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={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            <button className=\"formSubmitButton\" type=\"submit\">\r\n              Sign in&nbsp;&nbsp;\r\n              <FontAwesomeIcon icon=\"sign-in-alt\"></FontAwesomeIcon>\r\n            </button>\r\n          </form>\r\n          <PasswordForgotModal />\r\n        </div>\r\n      </div>\r\n    )\r\n  } else {\r\n    return <Redirect to=\"/home\" />\r\n  }\r\n}\r\n\r\nexport default Login","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",["141"],"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&nbsp;\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",["142","143"],"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}&nbsp;\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: &nbsp;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",["144"],"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>&nbsp;&nbsp;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              &nbsp;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",["145","146"],"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&nbsp;\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: &nbsp;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",["147","148","149","150","151","152"],"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>&nbsp; {rootDirectoryObjects[0].id} &nbsp;</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>&nbsp; {personalProjects[index].id} &nbsp;</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>&nbsp; {rootDirectoryObjects[1].id} &nbsp;</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>&nbsp; {sharedProjects[index].id} &nbsp;</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>&nbsp; {team.name} &nbsp;</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",["153","154","155","156"],"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            &nbsp;&nbsp;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            &nbsp;&nbsp;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",["157","158","159","160"],"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            &nbsp;&nbsp;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            &nbsp;&nbsp;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",["161"],"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\\navbar\\logo\\Logo.jsx",["162","163"],"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",["164"],"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>&nbsp;&nbsp;\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>&nbsp;&nbsp;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>&nbsp;&nbsp;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>&nbsp;&nbsp;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\\pages\\account\\Account.jsx",[],"C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\login\\signUp\\SignUp.jsx",["165","166","167","168"],"import React, { useState, useEffect, useRef } from 'react'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport config from '../../../config';\r\nimport { useOktaAuth } from '@okta/okta-react';\r\nimport \"./SignUp.css\"\r\n\r\nconst SignUp = () => {\r\n  const { authState, oktaAuth } = useOktaAuth();\r\n  const [sessionToken, setSessionToken] = useState()\r\n\r\n  const [signUpFormVisibilityState, showSignUpForm] = useState(false)\r\n  const signUpFormRef = useRef(null);\r\n  const toggleSignUpFormVisible = () => showSignUpForm(!signUpFormVisibilityState)\r\n\r\n  useEffect(() => {\r\n    const pageClickEvent = (e) => {\r\n      if (signUpFormRef.current !== null && !signUpFormRef.current.contains(e.target)) {\r\n        toggleSignUpFormVisible()\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      window.addEventListener('click', pageClickEvent);\r\n    }\r\n\r\n    return () => {\r\n      window.removeEventListener('click', pageClickEvent);\r\n    }\r\n\r\n  }, [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  const [confirmPassword, setConfirmPassword] = useState('');\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 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  const handleConfirmPasswordChange = (e) => {\r\n    setConfirmPassword(e.target.value)\r\n  }\r\n\r\n  const handleSignUpFormSubmit = (e) => {\r\n    e.preventDefault();\r\n\r\n    if (!password || !confirmPassword) {\r\n      window.alert(\"A password field is blank\")\r\n      return\r\n    }\r\n\r\n    if (!(confirmPassword.length >= 7)) {\r\n      window.alert(\"Password must consist of 8 characters or more\")\r\n      return\r\n    }\r\n\r\n    if (!(password == confirmPassword)) {\r\n      window.alert(\"Passwords fo not match\")\r\n      return\r\n    }\r\n\r\n    else {\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\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  return (\r\n    <div className=\"signUpContainer\">\r\n      <div className={`modal ${signUpFormVisibilityState ? \"active\" : \"inactive\"}`}>\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>\r\n                Confirm Password:\r\n                <input\r\n                  id=\"password\" type=\"password\"\r\n                  value={confirmPassword}\r\n                  onChange={handleConfirmPasswordChange} />\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&nbsp;&nbsp;\r\n                <FontAwesomeIcon icon=\"user-plus\"></FontAwesomeIcon>\r\n              </button>\r\n            </form>\r\n          </div>\r\n        </div>\r\n      </div>\r\n\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={toggleSignUpFormVisible}>\r\n            Sign up\r\n          </button>\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n  )\r\n}\r\n\r\nexport default SignUp\r\n","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\login\\passwordReset\\PasswordForgotModal.jsx",["169","170"],"import React, { useState, useRef, useEffect } from 'react'\r\nimport config from '../../../config'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport \"./PasswordForgotModal.css\"\r\nimport MessageModal from '../../../components/messageModal/MessageModal';\r\n\r\n\r\n// TODO : Clean up and make more like the message modal component\r\nconst PasswordForgotModal = () => {\r\n  const [forgotPasswordFormVisibilityState, setForgotPasswordFormVisibilityState] = useState(false)\r\n  const forgotPasswordFormRef = useRef(null)\r\n  const toggleForgotPasswordFormVisible = () => setForgotPasswordFormVisibilityState(!forgotPasswordFormVisibilityState)\r\n\r\n  const [submitOkMessageModalState, setSubmitOkMessageModalState] = useState(false);\r\n\r\n  const [username, setUsername] = useState('');\r\n\r\n  const handleUsernameChange = (e) => {\r\n    setUsername(e.target.value);\r\n  };\r\n\r\n  useEffect(() => {\r\n    const pageClickEvent = (e) => {\r\n      if (forgotPasswordFormRef.current !== null && !forgotPasswordFormRef.current.contains(e.target)) {\r\n        toggleForgotPasswordFormVisible()\r\n      }\r\n    };\r\n\r\n    // If the item is active (ie open) then listen for clicks\r\n    if (forgotPasswordFormVisibilityState) {\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  }, [forgotPasswordFormVisibilityState]);\r\n\r\n  const userInputData = JSON.stringify({\r\n    email: `${username}`,\r\n  })\r\n\r\n  const ForgotPasswordRequestOptions = {\r\n    method: 'PUT',\r\n    body: userInputData\r\n  }\r\n\r\n  const handlePasswordForgot = (e) => {\r\n    e.preventDefault();\r\n\r\n    fetch(config.serviceAPI.forgotPasswordURL, ForgotPasswordRequestOptions)\r\n      .then((res) => {\r\n        if (!res.ok) {\r\n          window.alert(\"Error: something went wrong\")\r\n          console.log(res)\r\n          Promise.reject(\"\")\r\n          return\r\n        }\r\n        if (res.ok) {\r\n          toggleForgotPasswordFormVisible()\r\n          setSubmitOkMessageModalState(true)\r\n        }\r\n      })\r\n  }\r\n\r\n  return (\r\n    <div>\r\n      <div className=\"password-forgot-prompt\">\r\n        <span>\r\n          <a onClick={toggleForgotPasswordFormVisible}>Forgot password</a>\r\n        </span>\r\n      </div>\r\n\r\n      {/* Forgot password modal */}\r\n      <div className={`modal ${forgotPasswordFormVisibilityState ? \"active\" : \"inactive\"}`}>\r\n        <div ref={forgotPasswordFormRef} className=\"modal-content\">\r\n          <div className=\"recoverPasswordForm\">\r\n            <h2>Recover password</h2>\r\n            <form onSubmit={handlePasswordForgot}>\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                An email with a password recovery link will be sent if it is registered in our system\r\n              </label>\r\n              <button className=\"formSubmitButton\" type=\"submit\">\r\n                Submit&nbsp;&nbsp;\r\n                <FontAwesomeIcon icon=\"arrow-right\"></FontAwesomeIcon>\r\n              </button>\r\n            </form>\r\n          </div>\r\n        </div>\r\n      </div>\r\n      <div className={`modal ${submitOkMessageModalState ? \"active\" : \"inactive\"}`}>\r\n        <MessageModal removeModal={() => setSubmitOkMessageModalState(false)} headerMessage={\"Email submitted!\"} bodyMessage={\"An email with a password recovery link will be sent if it is registered in our system\"} />\r\n      </div>\r\n    </div>\r\n\r\n  )\r\n}\r\n\r\nexport default PasswordForgotModal\r\n","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\components\\messageModal\\MessageModal.jsx",["171"],"import React from 'react'\r\n\r\nconst MessageModal = ({ removeModal, headerMessage, bodyMessage }) => {\r\n  const stopProp = e => {\r\n    e.stopPropagation()\r\n  }\r\n\r\n  return (\r\n    <div className=\"modal-content\" onClick={e => removeModal()}>\r\n      <div className=\"submitOkModal\">\r\n        <h2>{headerMessage}</h2>\r\n        <label>\r\n          {bodyMessage}\r\n        </label>\r\n        <button className=\"formSubmitButton\" onClick={e => removeModal()}>\r\n          Ok\r\n        </button>\r\n      </div>\r\n    </div>\r\n  )\r\n}\r\n\r\nexport default MessageModal\r\n","C:\\Users\\Bruger\\Desktop\\Web-projects\\pipit\\client\\src\\pages\\account\\confirmRemoveAccountModal\\ConfirmRemoveAccountModal.jsx",["172"],"import React, { useEffect, useState } from 'react'\r\nimport { useOktaAuth } from '@okta/okta-react';\r\nimport \"./ConfirmRemoveAccountModal.css\"\r\nimport config from '../../../config';\r\n\r\nconst ConfirmRemoveAccountModal = ({ removeModal, headerMessage, bodyMessage }) => {\r\n  const { authState, oktaAuth } = useOktaAuth();\r\n  const [userInfo, setUserInfo] = useState(null);\r\n  const accessToken = oktaAuth.getAccessToken();\r\n\r\n  const stopProp = e => {\r\n    e.stopPropagation()\r\n  }\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 removeAccountRequestOptions = {\r\n    method: 'DELETE',\r\n    headers: {\r\n      Authorization: `Bearer ${accessToken}`,\r\n    },\r\n    body: JSON.stringify(\r\n      {\r\n        email: `${userInfo && userInfo.email}`,\r\n      }\r\n    )\r\n  }\r\n\r\n  const handleRemoveAccount = () => {\r\n    console.log(removeAccountRequestOptions.body)\r\n    fetch(config.serviceAPI.removeAccountURL, removeAccountRequestOptions)\r\n      .then((res) => {\r\n        if (!res.ok) {\r\n          console.log(res)\r\n          window.alert(\"Error\")\r\n          Promise.reject(\"\")\r\n          return\r\n        }\r\n        if (res.ok) {\r\n          oktaAuth.signOut()\r\n        }\r\n      })\r\n  }\r\n\r\n  return (\r\n    <div className=\"modal-content\">\r\n      <div className=\"confirmRemoveAccountModal\">\r\n        <h2>Delete account</h2>\r\n        <label>\r\n          Are you sure you want to delete your account?\r\n        </label>\r\n        <div className=\"buttonContainer\">\r\n          <button className=\"noButton\" onClick={e => removeModal()}>\r\n            No\r\n          </button>\r\n          <button className=\"yesButton\" onClick={handleRemoveAccount}>\r\n            Yes\r\n          </button>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  )\r\n}\r\n\r\nexport default ConfirmRemoveAccountModal\r\n",{"ruleId":"173","replacedBy":"174"},{"ruleId":"175","replacedBy":"176"},{"ruleId":"177","severity":1,"message":"178","line":1,"column":1,"nodeType":"179","endLine":15,"endColumn":3},{"ruleId":"180","severity":1,"message":"181","line":47,"column":6,"nodeType":"182","endLine":47,"endColumn":17,"suggestions":"183"},{"ruleId":"173","replacedBy":"184"},{"ruleId":"175","replacedBy":"185"},{"ruleId":"186","severity":1,"message":"187","line":1,"column":27,"nodeType":"188","messageId":"189","endLine":1,"endColumn":36},{"ruleId":"186","severity":1,"message":"190","line":1,"column":38,"nodeType":"188","messageId":"189","endLine":1,"endColumn":44},{"ruleId":"186","severity":1,"message":"191","line":6,"column":10,"nodeType":"188","messageId":"189","endLine":6,"endColumn":17},{"ruleId":"186","severity":1,"message":"192","line":7,"column":8,"nodeType":"188","messageId":"189","endLine":7,"endColumn":14},{"ruleId":"186","severity":1,"message":"193","line":8,"column":8,"nodeType":"188","messageId":"189","endLine":8,"endColumn":14},{"ruleId":"186","severity":1,"message":"194","line":32,"column":9,"nodeType":"188","messageId":"189","endLine":32,"endColumn":28},{"ruleId":"186","severity":1,"message":"195","line":1,"column":17,"nodeType":"188","messageId":"189","endLine":1,"endColumn":25},{"ruleId":"196","severity":1,"message":"197","line":75,"column":11,"nodeType":"198","endLine":75,"endColumn":123},{"ruleId":"196","severity":1,"message":"197","line":76,"column":11,"nodeType":"198","endLine":76,"endColumn":127},{"ruleId":"196","severity":1,"message":"197","line":43,"column":19,"nodeType":"198","endLine":43,"endColumn":22},{"ruleId":"186","severity":1,"message":"199","line":8,"column":9,"nodeType":"188","messageId":"189","endLine":8,"endColumn":25},{"ruleId":"186","severity":1,"message":"200","line":13,"column":9,"nodeType":"188","messageId":"189","endLine":13,"endColumn":23},{"ruleId":"186","severity":1,"message":"195","line":1,"column":17,"nodeType":"188","messageId":"189","endLine":1,"endColumn":25},{"ruleId":"196","severity":1,"message":"197","line":29,"column":13,"nodeType":"198","endLine":29,"endColumn":16},{"ruleId":"196","severity":1,"message":"197","line":39,"column":19,"nodeType":"198","endLine":39,"endColumn":22},{"ruleId":"196","severity":1,"message":"197","line":50,"column":13,"nodeType":"198","endLine":50,"endColumn":16},{"ruleId":"196","severity":1,"message":"197","line":60,"column":19,"nodeType":"198","endLine":60,"endColumn":22},{"ruleId":"196","severity":1,"message":"197","line":70,"column":25,"nodeType":"198","endLine":70,"endColumn":28},{"ruleId":"196","severity":1,"message":"197","line":23,"column":17,"nodeType":"198","endLine":23,"endColumn":20},{"ruleId":"196","severity":1,"message":"197","line":28,"column":17,"nodeType":"198","endLine":28,"endColumn":20},{"ruleId":"196","severity":1,"message":"197","line":52,"column":19,"nodeType":"198","endLine":52,"endColumn":22},{"ruleId":"196","severity":1,"message":"197","line":57,"column":19,"nodeType":"198","endLine":57,"endColumn":22},{"ruleId":"196","severity":1,"message":"197","line":20,"column":17,"nodeType":"198","endLine":20,"endColumn":20},{"ruleId":"196","severity":1,"message":"197","line":25,"column":17,"nodeType":"198","endLine":25,"endColumn":20},{"ruleId":"196","severity":1,"message":"197","line":48,"column":17,"nodeType":"198","endLine":48,"endColumn":20},{"ruleId":"196","severity":1,"message":"197","line":53,"column":17,"nodeType":"198","endLine":53,"endColumn":20},{"ruleId":"186","severity":1,"message":"201","line":10,"column":22,"nodeType":"188","messageId":"189","endLine":10,"endColumn":30},{"ruleId":"202","severity":1,"message":"203","line":12,"column":11,"nodeType":"198","endLine":12,"endColumn":58},{"ruleId":"202","severity":1,"message":"203","line":13,"column":11,"nodeType":"198","endLine":13,"endColumn":55},{"ruleId":"196","severity":1,"message":"197","line":88,"column":15,"nodeType":"198","endLine":88,"endColumn":35},{"ruleId":"186","severity":1,"message":"204","line":8,"column":11,"nodeType":"188","messageId":"189","endLine":8,"endColumn":20},{"ruleId":"186","severity":1,"message":"205","line":9,"column":10,"nodeType":"188","messageId":"189","endLine":9,"endColumn":22},{"ruleId":"180","severity":1,"message":"206","line":31,"column":6,"nodeType":"182","endLine":31,"endColumn":33,"suggestions":"207"},{"ruleId":"208","severity":1,"message":"209","line":84,"column":20,"nodeType":"210","messageId":"211","endLine":84,"endColumn":22},{"ruleId":"180","severity":1,"message":"212","line":38,"column":6,"nodeType":"182","endLine":38,"endColumn":41,"suggestions":"213"},{"ruleId":"196","severity":1,"message":"197","line":71,"column":11,"nodeType":"198","endLine":71,"endColumn":56},{"ruleId":"186","severity":1,"message":"214","line":4,"column":9,"nodeType":"188","messageId":"189","endLine":4,"endColumn":17},{"ruleId":"186","severity":1,"message":"214","line":11,"column":9,"nodeType":"188","messageId":"189","endLine":11,"endColumn":17},"no-native-reassign",["215"],"no-negated-in-lhs",["216"],"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",["217"],["215"],["216"],"no-unused-vars","'useEffect' is defined but never used.","Identifier","unusedVar","'useRef' is defined but never used.","'NavLink' is defined but never used.","'signUp' is defined but never used.","'config' is defined but never used.","'loginRequestOptions' is assigned a value but never used.","'useState' is defined but never used.","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.","'sessionToken' is assigned a value but never used.","React Hook useEffect has a missing dependency: 'toggleSignUpFormVisible'. Either include it or remove the dependency array.",["218"],"eqeqeq","Expected '===' and instead saw '=='.","BinaryExpression","unexpected","React Hook useEffect has a missing dependency: 'toggleForgotPasswordFormVisible'. Either include it or remove the dependency array.",["219"],"'stopProp' is assigned a value but never used.","no-global-assign","no-unsafe-negation",{"desc":"220","fix":"221"},{"desc":"222","fix":"223"},{"desc":"224","fix":"225"},"Update the dependencies array to be: [authState, oktaAuth]",{"range":"226","text":"227"},"Update the dependencies array to be: [signUpFormVisibilityState, toggleSignUpFormVisible]",{"range":"228","text":"229"},"Update the dependencies array to be: [forgotPasswordFormVisibilityState, toggleForgotPasswordFormVisible]",{"range":"230","text":"231"},[1422,1433],"[authState, oktaAuth]",[1028,1055],"[signUpFormVisibilityState, toggleSignUpFormVisible]",[1372,1407],"[forgotPasswordFormVisibilityState, toggleForgotPasswordFormVisible]"]