{"version":3,"sources":["components/reusables/HorizontalBarChart/HorizontalBarChart.module.css","components/HelloUser/HelloUser.module.css","content/Images/Placeholders/employee-placeholder.png","content/Images/Placeholders/computer-placeholder.png","content/Images/Placeholders/server-placeholder.png","content/Images/Placeholders/monitor-placeholder.png","content/Images/Placeholders/peripheral-placeholder.png","components/reusables/PictureInput/PictureInput.module.css","components/reusables/Dropdown/AddDropdown.module.css","components/reusables/Dropdown/DropdownList.module.css","components/reusables/Card/Card.module.css","components/pages/Dashboard/CostCard/CostCard.module.css","components/reusables/Table/Table.module.css","components/reusables/Input/Input.module.css","components/reusables/Login/Login.module.css","components/reusables/Dropdown/Dropdown.module.css","components/reusables/Group/Group.module.css","components/pages/ProgramOverviewPage/ProgramOverviewEditPage.module.css","components/reusables/DetailImage/DetailImage.module.css","components/reusables/BackButton/BackButton.module.css","components/reusables/DetailCostText/DetailCostText.module.css","components/reusables/ProgramForm/ProgramForm.module.css","components/App/App.module.css","components/pages/ProgramsListPage/ProgramsListPage.module.css","components/pages/EmployeesListPage/EmployeesListPage.module.css","components/reusables/DetailPageTable/DetailPageTable.module.css","components/pages/DepartmentDetailPage/DepartmentDetailPage.module.css","components/pages/DepartmentsListPage/DepartmentsListPage.module.css","content/Images/CQL-Logo-Reversed.png","content/Images/CQL-Logo-Color.png","components/pages/DepartmentDetailPage/DepartmentDetailEditPage.module.css","components/pages/ProgramDetailPage/ProgramDetailPage.module.css","components/pages/EmployeeDetailPage/EmployeeDetailPage.module.css","components/pages/DashboardPage/DashboardPage.module.css","components/pages/HardwareDetailPage/HardwareDetailPage.module.css","components/reusables/HistoryLog/HistoryLog.module.css","components/reusables/Button/Button.module.css","components/pages/ProgramOverviewPage/ProgramOverviewPage.module.css","components/pages/HardwareListPage/HardwareListPage.module.css","components/reusables/PieChart/PieChart.module.css","content/Images/CQL-Logo-White.png","services/AxiosService/AxiosService.ts","utilities/mikesConcat.tsx","components/reusables/Dropdown/DropdownList.tsx","components/reusables/Title/Title.tsx","components/reusables/Dropdown/Dropdown.tsx","components/reusables/Card/Card.tsx","components/reusables/Group/Group.tsx","components/reusables/HorizontalBarChart/HorizontalBarChart.tsx","utilities/FormatCost.tsx","components/reusables/DashboardTable/DashboardTable.tsx","components/reusables/PieChart/CustomLabel/CustomLabel.tsx","components/reusables/PieChart/PieChart.tsx","components/pages/Dashboard/CostCard/CostCard.tsx","components/pages/DashboardPage/DashboardPage.tsx","utilities/quickSort.tsx","utilities/formatEmptyStrings.tsx","utilities/CheckImage.tsx","utilities/SearchFilter.tsx","components/reusables/FilteredSearch/FilteredSearch.tsx","components/reusables/Button/Button.tsx","components/reusables/Table/Table.tsx","components/pages/DepartmentsListPage/DepartmentsListPage.tsx","components/reusables/DetailPageTable/DetailPageTable.tsx","components/reusables/BackButton/BackButton.tsx","components/reusables/DetailImage/DetailImage.tsx","components/reusables/DetailCostText/DetailCostText.tsx","utilities/FormatDate.tsx","components/pages/DepartmentDetailPage/DepartmentDetailPage.tsx","components/pages/EmployeesListPage/EmployeesListPage.tsx","components/pages/EmployeeDetailPage/EmployeeDetailPage.tsx","components/pages/HardwareListPage/LaptopsListPage.tsx","components/pages/HardwareListPage/ServersListPage.tsx","components/pages/HardwareListPage/MonitorsListPage.tsx","components/pages/HardwareListPage/PeripheralsListPage.tsx","components/pages/HardwareListPage/HardwareListPage.tsx","components/reusables/HistoryLog/HistoryLog.tsx","components/pages/HardwareDetailPage/HardwareDetailPage.tsx","components/reusables/Checkbox/Checkbox.tsx","components/pages/ProgramsListPage/ProgramsListPage.tsx","components/pages/ProgramOverviewPage/ProgramOverviewPage.tsx","components/reusables/PictureInput/PictureInput.tsx","components/reusables/Input/Input.tsx","components/reusables/ProgramForm/ProgramForm.tsx","utilities/UploadImage.tsx","components/pages/ProgramOverviewPage/ProgramOverviewEditPage.tsx","components/pages/ProgramDetailPage/ProgramDetailPage.tsx","components/pages/ProgramDetailPage/ProgramDetailEditPage.tsx","components/reusables/GoogleButton/GoogleButton.tsx","components/reusables/Login/Login.tsx","components/HelloUser/HelloUser.tsx","components/reusables/Dropdown/AddDropdown.tsx","components/pages/EmployeeDetailPage/EmployeeDetailEditPage.tsx","components/pages/DepartmentDetailPage/DepartmentDetailEditPage.tsx","components/pages/HardwareDetailPage/HardwareDetailEditPage.tsx","components/App/App.tsx","serviceWorker.ts","index.tsx","components/reusables/DashboardTable/DashboardTable.module.css","components/pages/ProgramDetailPage/ProgramDetailEditPage.module.css","components/pages/HardwareDetailPage/HardwareDetailEditPage.module.css","content/Images/Placeholders/department-placeholder.png","content/Images/Placeholders/program-placeholder.png","components/reusables/FilteredSearch/FilteredSearch.module.css","components/reusables/Checkbox/Checkbox.module.css","components/pages/EmployeeDetailPage/EmployeeDetailEditPage.module.css","components/reusables/Title/Title.module.css"],"names":["module","exports","barContainer","barMain","barFiller","barTitle","fraction","helloMain","helloMessage","dropdownArrow","helloContainer","dark","dropdownArrowDark","__webpack_require__","p","pictureInputMain","imgInput","imgContainer","selectedImage","addDropdownMain","dropdownTitle","dropdownList","dropdownButton","dropdownTitleDark","trigger","dropdownContent","dropdownSquare","cardMain","cardChildren","cardDark","cardTitleDark","titleContainer","title","subtitle","table","tr","main","input","text","msg","body","logo","center","inputboxUsername","inputboxPassword","submit","failMssg","dropdownMain","dropdownContainer","dropdownListItemButton","dropdownListItem","dropdownItemLabel","selected","group","start","end","between","around","even","row","column","progOverviewEditMain","columns","firstColumn","secondColumn","backButton","programTableContainer","pluginTableContainer","addContainer","inputText","submitContainer","programForm","pluginForm","pluginInputContainerRow1","dateInputContainer","pluginInputContainerRow2","pluginGroup","dateInput","description","line","row1Group","checkBoxContainer","checkBox","nameInputWithEdit","nameInput","editButton","titleDark","backgroundDark","imgPadding","img","button","costText","costLine","formMain","checkBoxContainerOne","checkBoxContainerTwo","radioSection","radioContainer","radio","radioInput","monthsInput","marginLeft","container","card","checkmark","insideCheckmark","insideCheckmarkAdmin","inputContainer","descriptionContainer","row1Input","row2Input","dateContainer","assignContainer","employeeDropdownContainer","employeeDropdownButton","employeeDropdownTitle","employeeDropdownArrow","empText","app","logoContainer","navBarLogo","appHeader","appLink","navContainer","navBar","navEllipse","navRectangle","navTabRectangle","linkContainer","navTab","active","appFooter","helloMesssage","navDark","ellipseDark","navTabDark","programsListMain","page","icon","buttonContainer","addButton","archiveButton","alignLeft","alignLeftAndPadding","programs","programName","header","nameHeader","notSorted","ascending","descending","dashboardButton","checkboxRow","programsListMainDark","employeesListMain","searchContainer","employees","employeeName","role","employeeNameDark","employeesListMainDark","hover","tooltip","rowTitle","headerContainer","clickCursor","rowData","clickable","editRow","delete","whiteLine","unavailable","clickableDark","rowDataDark","detailMain","archivebutton","paddingRight","titleText","deptName","deptText","tableMargin","tableRow","addDefaultContainer","addIconBorder","addIcon","assignText","textDark","departmentsListMain","departments","departmentName","listMainDark","paddingTop","paddingBottom","deptNameInput","employeeDepartment","deptIcon","tableColumn","firstTableColumn","secondTableColumn","left","newRowThing","submitButton","personIcon","submitText","zIndex3","progDetailMain","overviewLink","programText","assignedTo","empName","descriptionTitle","descriptionBody","spaceBetween","linkDark","empDetailMain","employeeText","deptTextDark","dashMain","dashColumn","costIcons","dashRow","linkedTitle","statsIcon","upArrowIcon","downArrowIcon","softwareKey","software","dashMainDark","linkedTitleDark","serverTitle","hardwareName","hardwareText","historyLogContainer","detailTable","hardwareNameDark","date","deleteRow","buttonMain","buttonText","backButtonText","backArrow","iconButtonContainer","iconbuttonMain","buttonMainDark","iconButtonDark","iconButtonContainerDark","progOverviewMain","spaceBetweenTables","hardwareListMain","listMain","dropdownTitleContainer","hardware","legendList","inline","inlineLegend","circle","lastHeader","pieContainer","headingText","circleContainer","emptyCircle","darkModeCircle","emptyDataText","URL","process","AxiosService","user","_this","this","Object","classCallCheck","refreshToken","accessToken","validTo","givenName","isAdmin","instance","checkTokenExpired","type","args","now","Date","parse","toISOString","objectSpread","axios","create","baseURL","headers","Accept","Content-Type","crossdomain","createClass","key","value","_get","asyncToGenerator","regenerator_default","a","mark","_callee","url","responseType","_this2","wrap","_context","prev","next","get","Authorization","concat","undefined","then","response","data","catch","err","abrupt","sent","stop","_x","_x2","apply","arguments","_post","_callee2","_this3","_context2","post","_x3","_x4","_put","_callee3","_this4","_context3","put","_x5","_x6","_x7","_refreshToken","_callee4","_this5","_context4","status","accesstoken","localStorage","setItem","JSON","stringify","removeItem","window","location","reload","_x8","_x9","concatStyles","_len","length","classes","Array","_key","filter","c","join","DropdownList","props","triggerElement","choicesList","_props$listWidthClass","listWidthClass","_useState","useState","_useState2","slicedToArray","isOpen","setIsOpen","rendererProps","close","open","toggle","react_default","createElement","className","styles","dropdownListContainer","s","onClick","Title","_props$onClick","isDarkMode","useContext","ThemeContext","bottomCorner","bottomCornerDark","topCorner","topCornerDark","Dropdown","content","titleClassName","setSelected","push","id","name","Title_Title","DropdownList_DropdownList","_ref","map","i","component","Card","children","titleOnClick","Group","_props$direction","direction","_props$justify","justify","HorizontalBarChart","amount","outOf","style","width","formatCost","isPerYear","perYear","perUse","formatMoney","money","Intl","NumberFormat","currency","minimumFractionDigits","format","DashboardTable","onRowClick","isClickable","Boolean","defineProperty","datum","trDark","e","numberOf","cost","costPerMonth","projected","CustomLabel","_props$cx","cx","_props$cy","cy","_props$midAngle","midAngle","_props$innerRadius","innerRadius","_props$outerRadius","outerRadius","_props$index","index","radian","Math","PI","totalValue","radius","textColor","sizeOfSlice","x","cos","y","sin","fontSize","fill","fontWeight","textAnchor","dominantBaseline","Number","RechartPieChart","pieChartData","initialColors","onSliceClick","colors","setColors","onMouseOver","updatedColors","toConsumableArray","onMouseOut","headingName","es6","height","j","dataKey","labelLine","label","CustomLabel_CustomLabel","isAnimationActive","entry","hasData","position","backgroundColor","CostCard","cardTitle","_props$data","programsCost","pluginsCost","Card_Card","initLicenses","initSoftwareTableData","initCosts","costOfProgramsPerYear","costOfPluginsPerYear","initPieData","DashboardPage","history","loginContextVariables","LoginContext","licenses","setLicenses","_useState3","_useState4","softwareTableData","setSoftwareTableData","_useState5","_useState6","costs","setCosts","_useState7","_useState8","pieData","setPieData","_useState9","_useState10","deptTableData","setDeptTableData","_useState11","_useState12","setDropdownContent","_useState13","_useState14","selectedDept","setSelectedDept","_useState15","_useState16","selectedDeptTable","setSelectedDeptTable","str","substring","pathname","state","onBarClick","_getDeptTables","deptTables","programCount","programCostPerYear","programIsCostPerYear","tableData","console","error","useEffect","isPinned","softwareName","numberOfUsers","isProjected","dataForPrograms","costOfPrograms","departmentId","dataForHardware","costOfHardware","DepartmentId","DepartmentName","getDeptTables","Group_Group","HorizontalBarChart_HorizontalBarChart","countProgInUse","countProgOverall","CostCard_CostCard","index_esm","Dropdown_Dropdown","DashboardTable_DashboardTable","PieChart_RechartPieChart","sortTable","rows","dataIndex","sortValue","compareString","b","reversemodifier","hasOwnProperty","sort","sortBy","sortByDate","eventDate","checkImage","_checkImage","placeholder","image","size","objectURL","createObjectURL","Blob","searchFilter","search","toString","toLowerCase","FilteredSearch","setSearch","options","customStyles","provided","border","color","control","borderRadius","boxShadow","cursor","margin","menu","option","indicatorSeparator","display","isFocused","singleValue","searchPosition","onSubmit","preventDefault","searchBar","onChange","target","filterBy","react_select_browser_esm","defaultValue","cur","components","DropdownIndicator","chunk_5d200a41_browser_esm","dropdownIndicator","theme","primary","isSearchable","searchIconContainer","md_index_esm","searchIcon","Button","_props$className","_props$text","_props$textClassName","textClassName","_props$textInside","textInside","go_index_esm","fa_index_esm","Table","DepartmentsListPage","_useContext","listData","setListData","filteredData","setFilteredData","archivedData","setArchivedData","isArchive","setIsArchive","headerList","displayImages","setDisplayImages","_getData","imagePromises","depts","forEach","totalEmployees","numOfEmp","Promise","all","getData","filteredRows","rowObj","values","setRows","headerStates","headerStateCounts","initHeaderStateCounts","cloneDeep","tempHeaderStates","tempHeaderStateCounts","initState","_useState17","_useState18","sortState","setSortState","sortStates","concatenatedDept","src","alt","renderedRows","transformedRow","Button_Button","FilteredSearch_FilteredSearch","Table_Table","firstHeader","_loop","renderHeaders","DetailPageTable","_props$edit","edit","remove","_props$sort","editRows","_props$hover","initHardwareState","renderedHeaders","slice","confirm","_loop2","click","data-tip","dist_default","place","effect","BackButton","pathArray","split","prevIsEdit","prevIsSame","goBack","DetailImage","DetailCostText","costTexts","formatDate","obj","formatted","getMonth","getDate","getFullYear","getDays","startDate","endDate","moment","diff","calculateDaysEmployed","years","add","months","days","ret","DepartmentDetailPage","match","softwareHeaders","licenseHeaders","deptData","setDeptData","employeeRows","setEmployeeRows","softwareRows","setSoftwareRows","licenseRows","setLicenseRows","defaultHardware","setDefaultHardware","defaultSoftware","setDefaultSoftware","defaultLicenses","setDefaultLicenses","setImg","isDeleted","setIsDeleted","handleEmployeeClick","handleProgramClick","params","dept","employeeCount","countEmpsInDep","hardwareCost","totalCostOfActHardwareInDep","softwareCost","totalCostOfProgramsInDep","listOfEmployees","employeeId","hireDate","hardwareCostForEmp","programCostForEmp","sw","listOfTablePrograms","isProgramCostPerYear","l","licensesList","progName","countOfThatLicense","dhw","dsw","dl","picture","_handleArchive","BackButton_BackButton","DetailImage_DetailImage","DetailCostText_DetailCostText","editbutton","DetailPageTable_DetailPageTable","EmployeesListPage","dateHired","hwCost","swCost","photo","hardwareList","progForEmp","daysEmployed","firstName","lastName","archiveDate","space","space4","space1","space2","dateArchived","hwCpost","progCost","concatenatedName","numberOfDaysEmployee","subtract","EmployeeDetailPage","department","deptId","email","userData","setUserData","hardwareRows","setHardwareRows","formatToolTip","cpu","ramgb","ssdgb","handleHardwareClick","departmentID","totalHardwareCost","totalProgramCostMonthly","textField","hw","make","model","serialNumber","mfg","purchaseDate","licenseKey","licensesKey","licensesCount","LaptopsListPage","searchByHeaders","laptops","computerId","ram","ssd","assigned","isAssigned","employeeFirstName","employeeLastName","mfgtag","endOfLife","convertToCSV","objArray","array","archived","csvContent","encodedUri","encodeURI","link","document","setAttribute","appendChild","downloadAsFile","ServersListPage","servers","serverId","numberOfCores","RAM","renewalDate","MFGTag","MonitorsListPage","monitors","monitorId","screenSize","resolution","inputs","PeripheralListPage","peripherals","peripheralName","peripheralType","peripheralId","HardwareListPage","currentList","getItem","selectedHW","setSelectedHW","dropdown","dropdownStyles","ServersListPage_ServersListPage","LaptopsListPage_LaptopsListPage","MonitorsListPage_MonitorsListPage","PeripheralsListPage_PeripheralListPage","displayList","HistoryLog","historyLog","canEdit","tempElement","eventType","HardwareDetailPage","firstTableHeaders","setFirstTableHeaders","secondTableHeaders","setSecondTableHeaders","thirdTableHeaders","setThirdTableHeaders","headingInfo","setHeadingInfo","firstTableData","setFirstTableData","secondTableData","setSecondTableData","thirdTableData","setThirdTableData","historyLogEntries","setHistoryLogEntries","commentText","setCommentText","_useState19","_useState20","costPerYear","setCostPerYear","_useState21","_useState22","flatCost","setFlatCost","_useState23","_useState24","_useState25","_useState26","server","virtualize","fqdn","ipAddress","operatingSystem","san","localHHD","employeeAssignedId","employeeAssignedName","serverHistory","serverPlaceholder","computer","monitorOutput","computerHistory","laptopPlaceholder","monitor","monitorHistory","monitorPlaceholder","peripheral","peripheralHistory","peripheralPlaceholder","titleStyle","getCosts","heading","HistoryLog_HistoryLog","Checkbox","checked","_props$title","_props$boxClassName","boxClassName","checkboxContainer","checkboxTitle","checkbox","check","checkedDark","checkmarkDark","ProgramsListPage","checkboxes","setCheckboxes","pinned","setPinned","pins","totalUsers","progCostPerYear","progCostPerUse","isCostPerYear","handleRowClick","getChecked","pin","handleChecked","otherPins","_handlePinChanges","Checkbox_Checkbox","react_router","path","render","ProgramOverviewPage","_props$match$params","progFlatCost","program","programlicenseKey","programData","setProgramData","programRows","setProgramRows","pluginRows","setPluginRows","programHeaders","programOverview","prog","inDivPrograms","programId","handleCopyClick","handleEmpClick","plug","listOfPlugins","pluginName","pluginCostPerYear","pluginFlatCost","idArray","_idArray","alert","PictureInput","setImage","accept","files","Input","maxChars","_props$width","_props$fontSize","ProgramForm","setState","employeeDropdown","selectedEmployee","setSelectedEmployee","es","dateFormat","changed","numCopies","costInput","parseInt","hasFlatCost","step","parseFloat","hasRecurringCost","monthsPerRenewal","Input_Input","purchaseLink","unassign","putUploadImage","imageLocation","callback","formData","FormData","append","ProgramOverviewEditPage","removedProgramRows","setRemovedProgramRows","removedPluginRows","setRemovedPluginRows","setPluginForm","setProgramForm","setImgInput","imgLocation","setImgLocation","isLicense","overviewInputs","setOverviewInputs","defaultPluginInfo","recurringCost","pluginInput","setPluginInput","pluginList","setPluginList","programInput","setProgramInput","programUpdateInput","setProgramUpdateInput","_useState27","_useState28","setEmployeeDropdown","_useState29","_useState30","o","plugList","pluginId","dateBought","handleSubmit","_handleSubmit","postProgram","updateProgram","postPlugin","Program","numberOfPrograms","isNaN","ProgramName","ProgramCostPerYear","ProgramFlatCost","ProgramLicenseKey","IsLicense","Description","ProgramPurchaseLink","DateBought","RenewalDate","MonthsPerRenewal","EmployeeId","_response$data$","newId","newName","OldProgramName","PluginId","PluginName","PluginFlatCost","TextField","PluginCostPerYear","PictureInput_PictureInput","submitbutton","ProgramForm_ProgramForm","arr","bools","displayCopies","displayPlugins","plugin","placeholderText","toDateString","pluginInputRow2","ProgramDetailPage","employee","hasPlugin","progData","setProgData","historyList","setHistoryList","progRows","setProgRows","programFlatCost","hasPlugIn","programLicenseKey","programPurchaseLink","entries","employeeNameHistory","ProgramDetailEditPage","googleUrl","GoogleButton","onCredentialResponse","google","scriptLoaded","setScriptLoaded","divRef","React","createRef","current","accounts","initialize","auto_select","client_id","ux_mode","renderButton","clientWidth","Fragment","index_module","onChangeClientState","newState","addedTags","scriptTags","foundScript","find","tag","addEventListener","once","async","defer","ref","Login","setFailMssg","currentLoginContext","GoogleButton_GoogleButton","googleUser","idtoken","credential","userInfo","refreshtoken","setLoginContextVariables","to","request","log","HelloUser","userContext","setIsDarkMode","initialValues","AddDropdown","onSelect","contentWithNoDuplicates","from","Set","EmployeeDetailEditPage","added","removed","deptList","setDeptList","deptImages","useImages","setUseImages","setDateInput","deptInput","setDeptInput","adminInput","setAdminInput","roleInput","setRoleInput","firstNameInput","setFirstNameInput","lastNameInput","setLastNameInput","emailInput","setEmailInput","_useState31","_useState32","setChanged","_useState33","_useState34","descriptionInput","setDescriptionInput","_useState35","_useState36","hardwareDropdown","setHardwareDropdown","_useState37","_useState38","softwareDropdown","setSoftwareDropdown","_useState39","_useState40","licenseDropdown","setLicenseDropdown","uhw","unassignedHardware","hardwareId","usw","unassignedSoftware","monthlyCost","ul","unassignedLicenses","admin","round","totalProgramCostPerMonth","oldHardwareRows","oldSoftwareRows","oldLicenseRows","deptPlaceholder","list","d","applyDefaults","item","toBeAdded","tempHardwareDropdown","need","needFulfilled","available","tempSoftwareDropdown","tempLicenseDropdown","newID","postEmployee","updateEmployee","cb","Employee","FirstName","LastName","Email","HireDate","Role","DepartmentID","IsAdmin","HardwareAssigned","Type","ID","ProgramAssigned","HardwareUnassigned","ProgramUnassigned","displayTable","adminCardContainer","adminCard","insideCheckmarkAdminDark","adminText","adminIconShield","employeeRoleInput","deptIconContainer","tableContainer","drop","AddDropdown_AddDropdown","newRow","rem","moveItRight","dropdown3","ddc2","dropdown2","ddc1","dropdown1","DepartmentDetailEditPage","deptsRowOne","deptsRowTwo","formatForPost","tempArray","imgID","newDefaultHardware","newDefaultSoftware","newDefaultLicenses","DefaultHardware","DefaultPrograms","license","handleAddHardware","handleAddLicense","handleAddSoftware","HardwareDetailEditPage","firstSectionHeaders","setFirstSectionHeaders","secondSectionHeaders","setSecondSectionHeaders","thirdSectionHeaders","setThirdSectionHeaders","firstSectionData","setFirstSectionData","secondSectionData","setSecondSectionData","thirdSectionData","setThirdSectionData","costSection","setCostSection","isVirtualized","setIsVirtualized","purchaseDateInput","setPurchaseDateInput","renewalDateInput","setRenewalDateInput","endOfLifeInput","setEndOfLifeInput","addHistoryLog","setAddHistoryLog","removeHistoryLog","setRemoveHistoryLog","eventInput","setEventInput","historyLogBool","setHistoryLogBool","setHasRecurringCost","setHasFlatCost","_useState41","_useState42","_useState43","_useState44","_useState45","_useState46","checkCostStates","badForm","alertMssg","_imgLocation","Entity","Make","Model","ScreenSize","Resolution","Inputs","SerialNumber","Location","PurchaseDate","EndOfLife","FlatCost","CostPerYear","Mfg","OperatingSystem","Ram","LocalHHD","NumberOfCores","MFG","IPAddress","SAN","Fqdn","Virtualize","Cpu","Ramgb","Ssdgb","MonitorOutput","PeripheralName","PeripheralType","MonitorId","AddHistory","DeleteHistory","ServerId","ComputerId","PeripheralId","handleInputChange","sectionData","tempData","renderSection","sectionHeaders","inputHeader","popperClassName","rdp","section","changeCost","hardwareHeader","headerDark","marginTop","tempRemoveId","historyId","tempAddHistoryLog","tempHistoryLog","insideCheckmarkDark","historyLogSubmit","EventType","EventDate","historyLogButton","historyLogAdd","createContext","hostname","ReactDOM","contextValue","ThemeContextValue","Provider","react_router_dom","HelloUser_HelloUser","require","activeClassName","exact","DepartmentDetailPage_DepartmentDetailPage","EmployeeDetailPage_EmployeeDetailPage","HardwareDetailPage_HardwareDetailPage","ProgramOverviewPage_ProgramOverviewPage","ProgramDetailPage_ProgramDetailPage","DepartmentDetailEditPage_DepartmentDetailEditPage","HardwareDetailEditPage_HardwareDetailEditPage","getElementById","navigator","serviceWorker","ready","registration","unregister","formContainer","commentContainer","searchIconButton","adminIcon","noNewEmpsMsg"],"mappings":"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","file":"static/js/main.c8835bdc.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"barContainer\":\"HorizontalBarChart_barContainer__1DGqV\",\"barMain\":\"HorizontalBarChart_barMain__2rJ1j\",\"barFiller\":\"HorizontalBarChart_barFiller__2D1tN\",\"barTitle\":\"HorizontalBarChart_barTitle__3xAPW\",\"fraction\":\"HorizontalBarChart_fraction__3wBuS\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"helloMain\":\"HelloUser_helloMain__gFC53\",\"helloMessage\":\"HelloUser_helloMessage__33pb_\",\"dropdownArrow\":\"HelloUser_dropdownArrow__2GRCo\",\"helloContainer\":\"HelloUser_helloContainer__W-n1Q\",\"dark\":\"HelloUser_dark__1AU5m\",\"dropdownArrowDark\":\"HelloUser_dropdownArrowDark__ie7Tz\"};","module.exports = __webpack_public_path__ + \"static/media/employee-placeholder.8c87719a.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAQAAAD2e2DtAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfhCQ0CNCxkwJNRAAAEX0lEQVR42u3aTYhVZRjA8efMHedWaiVT1BBCRTZDiyAsMkgUCsOPMYoi8YNsUYvatY6QKCQKIhdughoibWFhzB0bIiiL3Ji6SDRm/KAILRKbdFLT+TjtWs3x3pl755576vdb3nM8wvP+55z33JkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmXdL4Sz7RObEsFqZdSVd6rQE3ZJEupb/G6fSXsW+++KOlA1i9oO3ZeDyWRsmizYrx+C76J/v2jLRgAE93XN6cvh43W6VZNxrbkzf6R1sqgN6HY2cstDZNcyrdOLC3ERdqyM16zYbkk+i0Kk10fbKx+8rwvpYIYO2W2Bbt1qTJ2uLR7s7hwdwD6N0U71qNnDzYc2loX64B9C6JT/305+iRnh+Hjua2CVzePv9w9FiFXI209+z+vZ4nST07kectf+4WjG3N6Q6wYm75WHRZgdyl6ZKB/TncAcpPWv6WkLS9lMsdYO2u9KmrHP4rTiZjVqchP+Jz4s6Yd5UTLo53DZ6f2bVnvINfWU4fy96YxMvjHw9etnSNsvya+evirbgp4/B1pWfivSY/AjoWx/yMQ+diaaXP8jfS3r8rfaUH4lTmMi5r+h4gvS3z0KuVI5as8T77KVkfacZq3Nf8ALI2gJNXPrJYs6P/2/gy41D3irnNDuDWjANnG/9HC/w79d0ZB0rlhU0OoK2c8Vrh2T+L2k5kvs51NP17AHJ45U8bnpSh/s/vKUYgAASAABAAAkAACAABIAAEgAAQAAJAAAgAASAABIAAEAACQAAIAAEgAASAABAAAkAACAABIAAEgAAQAAJAAAgAASAABIAAEAACQAAIAAEgAASAABAAAkAACAABIAAEgAAQAAJAAAgAASAABIAAEAACQAAIAAEgAASAABAAAkAACAABIAAEgAAQAAIQgBEIAAEgAASAABAAAkAACAABIAAEgAAQAAJAAPy3tFc7YfXiqT+fvCWZ8vO0I+tfUL90UdaRiXtWz5nq8z0Hr37FpNp/2Zsae5FVEo8ABIAAEAACYNoBjBlSgV2pP4BRUyyw0foD+M0UC+x03QEkQ6ZYYMP13wG+N8XiSvbXHUD6tTEW2FdVE6keUe/JuN0kC+nnyh2R1vsISONDkyym9IOo+qu8Gr4Iat8WFwyzgC5MbK9+Ug0B7D6bvGOaBdwAvj14piEBRKRb44SBFsyx8pu1nFZTAJWLybrqXyrSQi7Hul2XGhZARP+BeC4mzbUou7/0hcqh2k4t1XrN4cM9Z2JlDa+N5G0iXhx4v9aTS7Vfd+hA95FYGWUTbmnnY31lxzS2itO7+qq7S33xkCm3rH3J5v7j03pXmP7bxZpNySuxyKxb7rVvePK1gZ0xzb/intEzfUvboTXphlgV84y9JYzG5+mO+/dsmcE2vY5N3fL2GxZP3Bt3JTfGAmuQi5H0zzhe+uHcwb3jhgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ML+ARIIzS7LriaYAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE3LTA5LTEzVDAyOjUyOjQzKzAwOjAwz9FesAAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNy0wOS0xM1QwMjo1Mjo0MyswMDowML6M5gwAAAAASUVORK5CYII=\"","module.exports = __webpack_public_path__ + \"static/media/server-placeholder.ef758b8a.png\";","module.exports = __webpack_public_path__ + \"static/media/monitor-placeholder.412474cd.png\";","module.exports = __webpack_public_path__ + \"static/media/peripheral-placeholder.404779b8.png\";","// extracted by mini-css-extract-plugin\nmodule.exports = {\"pictureInputMain\":\"PictureInput_pictureInputMain__1hb9I\",\"imgInput\":\"PictureInput_imgInput__3h5cD\",\"imgContainer\":\"PictureInput_imgContainer__lM6dm\",\"selectedImage\":\"PictureInput_selectedImage__3AJXP\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"addDropdownMain\":\"AddDropdown_addDropdownMain__NpLBL\",\"dropdownTitle\":\"AddDropdown_dropdownTitle__3wO1r\",\"dropdownList\":\"AddDropdown_dropdownList__7rBYF\",\"dropdownButton\":\"AddDropdown_dropdownButton__3bJOa\",\"dropdownTitleDark\":\"AddDropdown_dropdownTitleDark__269Dh\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"trigger\":\"DropdownList_trigger__1uZOS\",\"dropdownContent\":\"DropdownList_dropdownContent__2MHQi\",\"dropdownSquare\":\"DropdownList_dropdownSquare__2Itfp\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"cardMain\":\"Card_cardMain__3w4kv\",\"cardChildren\":\"Card_cardChildren__3qynK\",\"cardDark\":\"Card_cardDark__2yQXn\",\"cardTitleDark\":\"Card_cardTitleDark__1utxe\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"titleContainer\":\"CostCard_titleContainer__1ht3t\",\"title\":\"CostCard_title__NWhVT\",\"subtitle\":\"CostCard_subtitle__2N61c\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"table\":\"Table_table__3kbmV\",\"tr\":\"Table_tr__tpIMW\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"main\":\"Input_main__30KTp\",\"input\":\"Input_input__3jwP5\",\"text\":\"Input_text__3UJ3U\",\"msg\":\"Input_msg__1yggZ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"body\":\"Login_body__2o177\",\"logo\":\"Login_logo__14MHS\",\"center\":\"Login_center__g-CVp\",\"inputboxUsername\":\"Login_inputboxUsername__2C_Gv\",\"inputboxPassword\":\"Login_inputboxPassword__wtT97\",\"submit\":\"Login_submit__1gycI\",\"failMssg\":\"Login_failMssg__1f2w7\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"dropdownMain\":\"Dropdown_dropdownMain__1FAJy\",\"dropdownContainer\":\"Dropdown_dropdownContainer__2bxok\",\"dropdownButton\":\"Dropdown_dropdownButton__3mw0X\",\"dropdownTitle\":\"Dropdown_dropdownTitle__2FWvI\",\"dropdownArrow\":\"Dropdown_dropdownArrow__QM1pj\",\"dropdownList\":\"Dropdown_dropdownList__2apRN\",\"dropdownListItemButton\":\"Dropdown_dropdownListItemButton__1lQQe\",\"dropdownListItem\":\"Dropdown_dropdownListItem__10XvN\",\"dropdownItemLabel\":\"Dropdown_dropdownItemLabel__apqyF\",\"selected\":\"Dropdown_selected__3iAW0\",\"dropdownArrowDark\":\"Dropdown_dropdownArrowDark__11PH1\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"group\":\"Group_group__2imnk\",\"start\":\"Group_start__1Rws7\",\"end\":\"Group_end__2_tJe\",\"between\":\"Group_between__Al4Ia\",\"around\":\"Group_around__26o-w\",\"even\":\"Group_even__2uMZr\",\"center\":\"Group_center__1tGah\",\"row\":\"Group_row__wOShT\",\"column\":\"Group_column__2_Nzt\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"progOverviewEditMain\":\"ProgramOverviewEditPage_progOverviewEditMain__1aMu4\",\"columns\":\"ProgramOverviewEditPage_columns__1JnO0\",\"firstColumn\":\"ProgramOverviewEditPage_firstColumn__Md6V7\",\"secondColumn\":\"ProgramOverviewEditPage_secondColumn__Q_e5r\",\"backButton\":\"ProgramOverviewEditPage_backButton__2Hr9k\",\"imgContainer\":\"ProgramOverviewEditPage_imgContainer__1538S\",\"title\":\"ProgramOverviewEditPage_title__1LtKK\",\"programTableContainer\":\"ProgramOverviewEditPage_programTableContainer__v_wav\",\"pluginTableContainer\":\"ProgramOverviewEditPage_pluginTableContainer__2a_HL\",\"addContainer\":\"ProgramOverviewEditPage_addContainer__zDlEC\",\"input\":\"ProgramOverviewEditPage_input__21l1X\",\"inputText\":\"ProgramOverviewEditPage_inputText__3BVMd\",\"submitContainer\":\"ProgramOverviewEditPage_submitContainer__1Sk9l\",\"programForm\":\"ProgramOverviewEditPage_programForm__11dPN\",\"pluginForm\":\"ProgramOverviewEditPage_pluginForm__2dxqA\",\"pluginInputContainerRow1\":\"ProgramOverviewEditPage_pluginInputContainerRow1__z_Ypw\",\"dateInputContainer\":\"ProgramOverviewEditPage_dateInputContainer__3LcIq\",\"pluginInputContainerRow2\":\"ProgramOverviewEditPage_pluginInputContainerRow2__USIpl\",\"pluginGroup\":\"ProgramOverviewEditPage_pluginGroup__16uui\",\"dateInput\":\"ProgramOverviewEditPage_dateInput__2LJan\",\"description\":\"ProgramOverviewEditPage_description__iQ-3N\",\"line\":\"ProgramOverviewEditPage_line__R3GS8\",\"row1Group\":\"ProgramOverviewEditPage_row1Group__3AneJ\",\"checkBoxContainer\":\"ProgramOverviewEditPage_checkBoxContainer__3znb9\",\"checkBox\":\"ProgramOverviewEditPage_checkBox__2OUqN\",\"nameInputWithEdit\":\"ProgramOverviewEditPage_nameInputWithEdit__3TfmH\",\"nameInput\":\"ProgramOverviewEditPage_nameInput__PZwYm\",\"editButton\":\"ProgramOverviewEditPage_editButton__2LuVG\",\"titleDark\":\"ProgramOverviewEditPage_titleDark__1spDV\",\"backgroundDark\":\"ProgramOverviewEditPage_backgroundDark__1ge-H\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"imgContainer\":\"DetailImage_imgContainer__39pBD\",\"imgPadding\":\"DetailImage_imgPadding__3qxHg\",\"img\":\"DetailImage_img__2NeAD\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"button\":\"BackButton_button__GjB60\",\"dark\":\"BackButton_dark__21uIZ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"costText\":\"DetailCostText_costText__3Lonk\",\"costLine\":\"DetailCostText_costLine__3Oo3p\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"formMain\":\"ProgramForm_formMain__3oUg2\",\"checkBoxContainerOne\":\"ProgramForm_checkBoxContainerOne__2nFAy\",\"checkBoxContainerTwo\":\"ProgramForm_checkBoxContainerTwo__2yA6-\",\"radioSection\":\"ProgramForm_radioSection__1ldb1\",\"radioContainer\":\"ProgramForm_radioContainer__1hONr\",\"radio\":\"ProgramForm_radio__3y1rG\",\"radioInput\":\"ProgramForm_radioInput__2ITKp\",\"monthsInput\":\"ProgramForm_monthsInput__1lA6W\",\"marginLeft\":\"ProgramForm_marginLeft__DZ-8K\",\"container\":\"ProgramForm_container__11ZOC\",\"card\":\"ProgramForm_card__291dJ\",\"checkmark\":\"ProgramForm_checkmark__2youh\",\"insideCheckmark\":\"ProgramForm_insideCheckmark__227ht\",\"insideCheckmarkAdmin\":\"ProgramForm_insideCheckmarkAdmin__3dNEY\",\"inputText\":\"ProgramForm_inputText__deuqa\",\"input\":\"ProgramForm_input__3UMRq\",\"inputContainer\":\"ProgramForm_inputContainer__2XSr8\",\"descriptionContainer\":\"ProgramForm_descriptionContainer__1Mtfz\",\"description\":\"ProgramForm_description__2e4Sj\",\"line\":\"ProgramForm_line__25juP\",\"row1Input\":\"ProgramForm_row1Input__1_kbV\",\"row2Input\":\"ProgramForm_row2Input__2PT1Y\",\"dateInput\":\"ProgramForm_dateInput__1dbRm\",\"dateContainer\":\"ProgramForm_dateContainer__3hJ9h\",\"assignContainer\":\"ProgramForm_assignContainer__1kRQI\",\"employeeDropdownContainer\":\"ProgramForm_employeeDropdownContainer__hRCPu\",\"employeeDropdownButton\":\"ProgramForm_employeeDropdownButton__1r34I\",\"employeeDropdownTitle\":\"ProgramForm_employeeDropdownTitle__27heI\",\"employeeDropdownArrow\":\"ProgramForm_employeeDropdownArrow__3D8VO\",\"dropdownList\":\"ProgramForm_dropdownList__303kw\",\"dropdownContent\":\"ProgramForm_dropdownContent__P8JFr\",\"empText\":\"ProgramForm_empText__Rp6Ox\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"app\":\"App_app__21qVY\",\"logoContainer\":\"App_logoContainer__3hxHN\",\"navBarLogo\":\"App_navBarLogo__1tHlV\",\"appHeader\":\"App_appHeader__1cKcQ\",\"appLink\":\"App_appLink__R8yUQ\",\"navContainer\":\"App_navContainer__3GH3p\",\"navBar\":\"App_navBar__nRUaF\",\"navEllipse\":\"App_navEllipse__23AKC\",\"navRectangle\":\"App_navRectangle__26gG7\",\"navTabRectangle\":\"App_navTabRectangle__2zN5-\",\"linkContainer\":\"App_linkContainer__eCDyW\",\"navTab\":\"App_navTab__kSyqO\",\"active\":\"App_active__1q_2J\",\"appFooter\":\"App_appFooter__3GHyT\",\"helloMesssage\":\"App_helloMesssage__3fSVU\",\"dark\":\"App_dark__29vNx\",\"navDark\":\"App_navDark__2DipV\",\"ellipseDark\":\"App_ellipseDark__29iq_\",\"navTabDark\":\"App_navTabDark__vPMOL\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"programsListMain\":\"ProgramsListPage_programsListMain__3Olg9\",\"group\":\"ProgramsListPage_group__ldgi0\",\"page\":\"ProgramsListPage_page__1KeNP\",\"imgContainer\":\"ProgramsListPage_imgContainer__2fhXa\",\"icon\":\"ProgramsListPage_icon__1TtxC\",\"buttonContainer\":\"ProgramsListPage_buttonContainer__2K6To\",\"addButton\":\"ProgramsListPage_addButton__24IqW\",\"archiveButton\":\"ProgramsListPage_archiveButton__vFyU_\",\"alignLeft\":\"ProgramsListPage_alignLeft__2yi1C\",\"alignLeftAndPadding\":\"ProgramsListPage_alignLeftAndPadding__1MGgX\",\"programs\":\"ProgramsListPage_programs__3rHNo\",\"programName\":\"ProgramsListPage_programName__wCnnA\",\"header\":\"ProgramsListPage_header__2TBTK\",\"nameHeader\":\"ProgramsListPage_nameHeader__1k6er\",\"notSorted\":\"ProgramsListPage_notSorted__iAK3-\",\"ascending\":\"ProgramsListPage_ascending__2uJev\",\"descending\":\"ProgramsListPage_descending__1hVHm\",\"dashboardButton\":\"ProgramsListPage_dashboardButton__1pmFB\",\"checkboxRow\":\"ProgramsListPage_checkboxRow__1mWK9\",\"programsListMainDark\":\"ProgramsListPage_programsListMainDark__8BGO6\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"employeesListMain\":\"EmployeesListPage_employeesListMain__2f3xP\",\"page\":\"EmployeesListPage_page__1M7BW\",\"group\":\"EmployeesListPage_group__7c1IT\",\"searchContainer\":\"EmployeesListPage_searchContainer__2xhiB\",\"imgContainer\":\"EmployeesListPage_imgContainer__AwEOo\",\"icon\":\"EmployeesListPage_icon__20LIJ\",\"buttonContainer\":\"EmployeesListPage_buttonContainer__CzB_L\",\"addButton\":\"EmployeesListPage_addButton__14TOs\",\"archiveButton\":\"EmployeesListPage_archiveButton__2Dp6i\",\"alignLeft\":\"EmployeesListPage_alignLeft__3LKHy\",\"alignLeftAndPadding\":\"EmployeesListPage_alignLeftAndPadding__1G4uW\",\"employees\":\"EmployeesListPage_employees__3HA_u\",\"employeeName\":\"EmployeesListPage_employeeName__1k4Pn\",\"role\":\"EmployeesListPage_role__2L2Ez\",\"header\":\"EmployeesListPage_header__3Ol0B\",\"nameHeader\":\"EmployeesListPage_nameHeader__6frCU\",\"notSorted\":\"EmployeesListPage_notSorted__3ZBQB\",\"ascending\":\"EmployeesListPage_ascending__1xK2p\",\"descending\":\"EmployeesListPage_descending__1M7ox\",\"employeeNameDark\":\"EmployeesListPage_employeeNameDark__2CGlD\",\"employeesListMainDark\":\"EmployeesListPage_employeesListMainDark__2HUtb\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"table\":\"DetailPageTable_table__3_pXC\",\"tr\":\"DetailPageTable_tr__2-0pA\",\"hover\":\"DetailPageTable_hover__bm0SR\",\"tooltip\":\"DetailPageTable_tooltip__3ZP7n\",\"rowTitle\":\"DetailPageTable_rowTitle__2WNXq\",\"headerContainer\":\"DetailPageTable_headerContainer__3RyVu\",\"header\":\"DetailPageTable_header__3Sdw8\",\"clickCursor\":\"DetailPageTable_clickCursor__18CNY\",\"rowData\":\"DetailPageTable_rowData__1xo2o\",\"notSorted\":\"DetailPageTable_notSorted__8yj7z\",\"ascending\":\"DetailPageTable_ascending__3b0Nq\",\"descending\":\"DetailPageTable_descending__vBP-R\",\"clickable\":\"DetailPageTable_clickable__1bg0p\",\"editRow\":\"DetailPageTable_editRow__1MyV4\",\"delete\":\"DetailPageTable_delete__3hyug\",\"whiteLine\":\"DetailPageTable_whiteLine__3CRPX\",\"editButton\":\"DetailPageTable_editButton__2KvuU\",\"unavailable\":\"DetailPageTable_unavailable__3h3rz\",\"clickableDark\":\"DetailPageTable_clickableDark__2JhHe\",\"rowDataDark\":\"DetailPageTable_rowDataDark__LPXtR\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"detailMain\":\"DepartmentDetailPage_detailMain__34JGe\",\"columns\":\"DepartmentDetailPage_columns__1Wodc\",\"firstColumn\":\"DepartmentDetailPage_firstColumn__1B6gR\",\"secondColumn\":\"DepartmentDetailPage_secondColumn__3EqWO\",\"archivebutton\":\"DepartmentDetailPage_archivebutton__1P-Ta\",\"backButton\":\"DepartmentDetailPage_backButton__c4_-8\",\"paddingRight\":\"DepartmentDetailPage_paddingRight__19vUc\",\"line\":\"DepartmentDetailPage_line__k76Zu\",\"title\":\"DepartmentDetailPage_title__1ZWiY\",\"titleText\":\"DepartmentDetailPage_titleText__2k5gq\",\"deptName\":\"DepartmentDetailPage_deptName__uKy-J\",\"deptText\":\"DepartmentDetailPage_deptText__3UeS1\",\"headerContainer\":\"DepartmentDetailPage_headerContainer__3sYhz\",\"header\":\"DepartmentDetailPage_header__SZ-Hw\",\"rowData\":\"DepartmentDetailPage_rowData__5OqOV\",\"notSorted\":\"DepartmentDetailPage_notSorted__1qq_M\",\"ascending\":\"DepartmentDetailPage_ascending__2Seih\",\"descending\":\"DepartmentDetailPage_descending__1fH28\",\"rowTitle\":\"DepartmentDetailPage_rowTitle__2YImb\",\"tooltip\":\"DepartmentDetailPage_tooltip__3_0HU\",\"dropdownTitle\":\"DepartmentDetailPage_dropdownTitle__28Uud\",\"tableMargin\":\"DepartmentDetailPage_tableMargin__R-RlA\",\"tableRow\":\"DepartmentDetailPage_tableRow__1ULyB\",\"table\":\"DepartmentDetailPage_table__TGUBe\",\"addDefaultContainer\":\"DepartmentDetailPage_addDefaultContainer__3DIQM\",\"addContainer\":\"DepartmentDetailPage_addContainer__UKpXi\",\"addIconBorder\":\"DepartmentDetailPage_addIconBorder__2h0cR\",\"addIcon\":\"DepartmentDetailPage_addIcon__jt_0t\",\"assignText\":\"DepartmentDetailPage_assignText__1rkQr\",\"submitContainer\":\"DepartmentDetailPage_submitContainer__Sq8xp\",\"textDark\":\"DepartmentDetailPage_textDark__kXtY6\",\"backgroundDark\":\"DepartmentDetailPage_backgroundDark__1BCzF\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"departmentsListMain\":\"DepartmentsListPage_departmentsListMain__3mLTr\",\"page\":\"DepartmentsListPage_page__1K-v7\",\"group\":\"DepartmentsListPage_group__3KgBx\",\"imgContainer\":\"DepartmentsListPage_imgContainer__2r2KD\",\"icon\":\"DepartmentsListPage_icon__2dKM_\",\"alignLeft\":\"DepartmentsListPage_alignLeft__2sA5o\",\"alignLeftAndPadding\":\"DepartmentsListPage_alignLeftAndPadding__cMjDK\",\"departments\":\"DepartmentsListPage_departments__WOQ5C\",\"departmentName\":\"DepartmentsListPage_departmentName__1oyHB\",\"header\":\"DepartmentsListPage_header__1-vBD\",\"nameHeader\":\"DepartmentsListPage_nameHeader__1loyh\",\"buttonContainer\":\"DepartmentsListPage_buttonContainer__1ZS7N\",\"archiveButton\":\"DepartmentsListPage_archiveButton__gQIZ3\",\"addButton\":\"DepartmentsListPage_addButton__NAQHq\",\"notSorted\":\"DepartmentsListPage_notSorted__2IExk\",\"ascending\":\"DepartmentsListPage_ascending__1BmKw\",\"descending\":\"DepartmentsListPage_descending__BEZuL\",\"dark\":\"DepartmentsListPage_dark__2aDYz\",\"listMainDark\":\"DepartmentsListPage_listMainDark__zc0XA\"};","module.exports = __webpack_public_path__ + \"static/media/CQL-Logo-Reversed.db06773b.png\";","module.exports = __webpack_public_path__ + \"static/media/CQL-Logo-Color.1eacf098.png\";","// extracted by mini-css-extract-plugin\nmodule.exports = {\"columns\":\"DepartmentDetailEditPage_columns__ANCu2\",\"firstColumn\":\"DepartmentDetailEditPage_firstColumn__iKMnW\",\"secondColumn\":\"DepartmentDetailEditPage_secondColumn__1KeaM\",\"imgContainer\":\"DepartmentDetailEditPage_imgContainer__15S2Z\",\"row\":\"DepartmentDetailEditPage_row__24EGI\",\"backButton\":\"DepartmentDetailEditPage_backButton__3y29g\",\"title\":\"DepartmentDetailEditPage_title__EJoj3\",\"paddingTop\":\"DepartmentDetailEditPage_paddingTop__2oczX\",\"paddingBottom\":\"DepartmentDetailEditPage_paddingBottom__M-EsR\",\"paddingRight\":\"DepartmentDetailEditPage_paddingRight__2I_jN\",\"line\":\"DepartmentDetailEditPage_line__24I5D\",\"deptNameInput\":\"DepartmentDetailEditPage_deptNameInput__1Fgu7\",\"employeeDepartment\":\"DepartmentDetailEditPage_employeeDepartment__zwsZQ\",\"deptIcon\":\"DepartmentDetailEditPage_deptIcon__1bGbO\",\"deptName\":\"DepartmentDetailEditPage_deptName__8FeGr\",\"tableColumn\":\"DepartmentDetailEditPage_tableColumn__2H0oV\",\"firstTableColumn\":\"DepartmentDetailEditPage_firstTableColumn__1xBWz\",\"secondTableColumn\":\"DepartmentDetailEditPage_secondTableColumn__q07_6\",\"table\":\"DepartmentDetailEditPage_table__2JQU2\",\"left\":\"DepartmentDetailEditPage_left__MsG-s\",\"addDefaultContainer\":\"DepartmentDetailEditPage_addDefaultContainer__1obKC\",\"addIconBorder\":\"DepartmentDetailEditPage_addIconBorder__1PLo1\",\"addIcon\":\"DepartmentDetailEditPage_addIcon__3M3HM\",\"assignText\":\"DepartmentDetailEditPage_assignText__2oN9K\",\"newRowThing\":\"DepartmentDetailEditPage_newRowThing__1OuPB\",\"submitContainer\":\"DepartmentDetailEditPage_submitContainer__WFGLK\",\"submitButton\":\"DepartmentDetailEditPage_submitButton__1Mx50\",\"personIcon\":\"DepartmentDetailEditPage_personIcon__1V-hh\",\"submitText\":\"DepartmentDetailEditPage_submitText__2vnMm\",\"dropdownTitle\":\"DepartmentDetailEditPage_dropdownTitle__3nCXT\",\"addContainer\":\"DepartmentDetailEditPage_addContainer__1BtCM\",\"zIndex3\":\"DepartmentDetailEditPage_zIndex3__12JMF\",\"textDark\":\"DepartmentDetailEditPage_textDark__1Qhmi\",\"backgroundDark\":\"DepartmentDetailEditPage_backgroundDark__HnQO5\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"progDetailMain\":\"ProgramDetailPage_progDetailMain__1hkRR\",\"columns\":\"ProgramDetailPage_columns__mK3i_\",\"firstColumn\":\"ProgramDetailPage_firstColumn__2yprc\",\"secondColumn\":\"ProgramDetailPage_secondColumn__3mjFj\",\"backButton\":\"ProgramDetailPage_backButton__1FiCg\",\"archivebutton\":\"ProgramDetailPage_archivebutton__2jt5Q\",\"titleText\":\"ProgramDetailPage_titleText__1OigQ\",\"overviewLink\":\"ProgramDetailPage_overviewLink__3zc_z\",\"programName\":\"ProgramDetailPage_programName__2eQA3\",\"programText\":\"ProgramDetailPage_programText__1uDoc\",\"assignedTo\":\"ProgramDetailPage_assignedTo__3v2ci\",\"empName\":\"ProgramDetailPage_empName__1Q9_m\",\"descriptionContainer\":\"ProgramDetailPage_descriptionContainer__2wcGs\",\"descriptionTitle\":\"ProgramDetailPage_descriptionTitle__2jerY\",\"descriptionBody\":\"ProgramDetailPage_descriptionBody__dTM3J\",\"spaceBetween\":\"ProgramDetailPage_spaceBetween__2bkWj\",\"dark\":\"ProgramDetailPage_dark__3Jz7d\",\"linkDark\":\"ProgramDetailPage_linkDark__6GCNs\",\"backgroundDark\":\"ProgramDetailPage_backgroundDark__2-RsH\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"empDetailMain\":\"EmployeeDetailPage_empDetailMain__FJzZt\",\"columns\":\"EmployeeDetailPage_columns__1fE8m\",\"firstColumn\":\"EmployeeDetailPage_firstColumn__9sbqm\",\"secondColumn\":\"EmployeeDetailPage_secondColumn__deXlK\",\"archivebutton\":\"EmployeeDetailPage_archivebutton__3mhw-\",\"backButton\":\"EmployeeDetailPage_backButton__1Lokb\",\"titleText\":\"EmployeeDetailPage_titleText__3EuTy\",\"employeeName\":\"EmployeeDetailPage_employeeName__3rsZ6\",\"employeeText\":\"EmployeeDetailPage_employeeText__2P8_-\",\"deptText\":\"EmployeeDetailPage_deptText__2ChX2\",\"table\":\"EmployeeDetailPage_table__3rgAY\",\"descriptionContainer\":\"EmployeeDetailPage_descriptionContainer__1UTuY\",\"descriptionTitle\":\"EmployeeDetailPage_descriptionTitle__1rlCf\",\"descriptionBody\":\"EmployeeDetailPage_descriptionBody__32lsU\",\"employeeNameDark\":\"EmployeeDetailPage_employeeNameDark__2RmOR\",\"deptTextDark\":\"EmployeeDetailPage_deptTextDark__3TIex\",\"backgroundDark\":\"EmployeeDetailPage_backgroundDark__TVNsS\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"dashMain\":\"DashboardPage_dashMain__QVZWf\",\"dashColumn\":\"DashboardPage_dashColumn__3CiY9\",\"costIcons\":\"DashboardPage_costIcons__CzLVI\",\"dashRow\":\"DashboardPage_dashRow__1Hhc2\",\"linkedTitle\":\"DashboardPage_linkedTitle__3P1nI\",\"statsIcon\":\"DashboardPage_statsIcon__2actm\",\"upArrowIcon\":\"DashboardPage_upArrowIcon__1_h_Y\",\"downArrowIcon\":\"DashboardPage_downArrowIcon__2J9F6\",\"softwareKey\":\"DashboardPage_softwareKey__2-sbA\",\"software\":\"DashboardPage_software__1oAJO\",\"group\":\"DashboardPage_group__Duhn0\",\"dashMainDark\":\"DashboardPage_dashMainDark__3rNkK\",\"linkedTitleDark\":\"DashboardPage_linkedTitleDark__3-Nv7\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"detailMain\":\"HardwareDetailPage_detailMain__2K8GI\",\"backButton\":\"HardwareDetailPage_backButton__31_9f\",\"archivebutton\":\"HardwareDetailPage_archivebutton__l2rlu\",\"columns\":\"HardwareDetailPage_columns__2gRsC\",\"firstColumn\":\"HardwareDetailPage_firstColumn__1TU3I\",\"secondColumn\":\"HardwareDetailPage_secondColumn__2DSX1\",\"serverTitle\":\"HardwareDetailPage_serverTitle__2lwPM\",\"titleText\":\"HardwareDetailPage_titleText__Dz3Mp\",\"hardwareName\":\"HardwareDetailPage_hardwareName__sqbU0\",\"hardwareText\":\"HardwareDetailPage_hardwareText__1Rd4P\",\"table\":\"HardwareDetailPage_table__3tLu4\",\"header\":\"HardwareDetailPage_header__IAoM_\",\"rowData\":\"HardwareDetailPage_rowData__2a0a_\",\"historyLogContainer\":\"HardwareDetailPage_historyLogContainer__m9RL6\",\"detailTable\":\"HardwareDetailPage_detailTable__3fpJe\",\"hardwareNameDark\":\"HardwareDetailPage_hardwareNameDark__2D6Xh\",\"backgroundDark\":\"HardwareDetailPage_backgroundDark__3iv4i\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"table\":\"HistoryLog_table__1veqf\",\"tr\":\"HistoryLog_tr__3_hGs\",\"header\":\"HistoryLog_header__fN5Nm\",\"description\":\"HistoryLog_description__3Uvc6\",\"date\":\"HistoryLog_date__21hPB\",\"rowData\":\"HistoryLog_rowData__3jcyE\",\"deleteRow\":\"HistoryLog_deleteRow__2Sgeb\",\"delete\":\"HistoryLog_delete__Nj9PO\",\"whiteLine\":\"HistoryLog_whiteLine__177z0\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"buttonMain\":\"Button_buttonMain__ZVAny\",\"addIcon\":\"Button_addIcon__2Lkav\",\"buttonText\":\"Button_buttonText__1Pu-4\",\"icon\":\"Button_icon__1mPto\",\"backButton\":\"Button_backButton__3tSR-\",\"backButtonText\":\"Button_backButtonText__199Ad\",\"backArrow\":\"Button_backArrow__2-mo1\",\"iconButtonContainer\":\"Button_iconButtonContainer__2oaPc\",\"iconbuttonMain\":\"Button_iconbuttonMain__3vu2F\",\"buttonMainDark\":\"Button_buttonMainDark__2OGEV\",\"iconButtonDark\":\"Button_iconButtonDark__d0hJb\",\"iconButtonContainerDark\":\"Button_iconButtonContainerDark__1w293\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"progOverviewMain\":\"ProgramOverviewPage_progOverviewMain__1BGk9\",\"columns\":\"ProgramOverviewPage_columns__kD5oC\",\"firstColumn\":\"ProgramOverviewPage_firstColumn__Q2GaW\",\"secondColumn\":\"ProgramOverviewPage_secondColumn__3wE0W\",\"backButton\":\"ProgramOverviewPage_backButton__3iWwL\",\"archivebutton\":\"ProgramOverviewPage_archivebutton__1dAwZ\",\"titleText\":\"ProgramOverviewPage_titleText__21Cao\",\"programName\":\"ProgramOverviewPage_programName__qhrVB\",\"programText\":\"ProgramOverviewPage_programText__SMlkQ\",\"spaceBetweenTables\":\"ProgramOverviewPage_spaceBetweenTables__2cjlr\",\"table\":\"ProgramOverviewPage_table__2K57O\",\"dark\":\"ProgramOverviewPage_dark__3mR69\",\"backgroundDark\":\"ProgramOverviewPage_backgroundDark__1XG6J\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"hardwareListMain\":\"HardwareListPage_hardwareListMain__2w26l\",\"listMain\":\"HardwareListPage_listMain__sOV-N\",\"group\":\"HardwareListPage_group__3jMC3\",\"buttonContainer\":\"HardwareListPage_buttonContainer__3jQRz\",\"archiveButton\":\"HardwareListPage_archiveButton__1bbkX\",\"table\":\"HardwareListPage_table__1OmM7\",\"dropdownButton\":\"HardwareListPage_dropdownButton__8x8fl\",\"dropdownTitle\":\"HardwareListPage_dropdownTitle__3r0um\",\"dropdownArrow\":\"HardwareListPage_dropdownArrow__snJSS\",\"dropdownTitleContainer\":\"HardwareListPage_dropdownTitleContainer__3Niii\",\"page\":\"HardwareListPage_page__2pj5C\",\"imgContainer\":\"HardwareListPage_imgContainer__12DCx\",\"icon\":\"HardwareListPage_icon__3KHd8\",\"alignLeft\":\"HardwareListPage_alignLeft__115Pj\",\"alignLeftAndPadding\":\"HardwareListPage_alignLeftAndPadding__2LP13\",\"hardware\":\"HardwareListPage_hardware__2i9rV\",\"hardwareName\":\"HardwareListPage_hardwareName__16Ump\",\"header\":\"HardwareListPage_header__2_We-\",\"nameHeader\":\"HardwareListPage_nameHeader__2-bXp\",\"notSorted\":\"HardwareListPage_notSorted__a1lTW\",\"ascending\":\"HardwareListPage_ascending__dIdRr\",\"descending\":\"HardwareListPage_descending__27hw3\",\"dark\":\"HardwareListPage_dark__1g9N5\",\"dropdownArrowDark\":\"HardwareListPage_dropdownArrowDark__3g2wQ\",\"listMainDark\":\"HardwareListPage_listMainDark__36xKn\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"legendList\":\"PieChart_legendList__35YEg\",\"inline\":\"PieChart_inline__1-sJ9\",\"inlineLegend\":\"PieChart_inlineLegend__11KIc\",\"circle\":\"PieChart_circle__2sWnh\",\"header\":\"PieChart_header__3f0gm\",\"lastHeader\":\"PieChart_lastHeader__3SOL1\",\"pieContainer\":\"PieChart_pieContainer__Z_wap\",\"headingText\":\"PieChart_headingText__1uywq\",\"circleContainer\":\"PieChart_circleContainer__Ar3SD\",\"emptyCircle\":\"PieChart_emptyCircle__37dvl\",\"darkModeCircle\":\"PieChart_darkModeCircle__1BjJG\",\"emptyDataText\":\"PieChart_emptyDataText__1a7ot\",\"dark\":\"PieChart_dark__2n77-\"};","module.exports = __webpack_public_path__ + \"static/media/CQL-Logo-White.a759e543.png\";","import axios, {AxiosInstance} from 'axios'\r\nimport {ILoginContext} from '../../components/App/App'\r\n\r\nexport interface IUserInfo {\r\n name: string\r\n accessToken: string\r\n refreshToken: string\r\n isAdmin: boolean\r\n}\r\n\r\nexport const URL = process.env.REACT_APP_API_URL\r\n\r\nexport class AxiosService {\r\n private user: ILoginContext = {\r\n refreshToken: '',\r\n accessToken: '',\r\n validTo: '',\r\n givenName: '',\r\n isAdmin: false,\r\n }\r\n private instance: AxiosInstance\r\n\r\n public constructor(user: ILoginContext) {\r\n this.user = {...user}\r\n\r\n this.instance = axios.create({\r\n baseURL: URL,\r\n headers: {\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json',\r\n crossdomain: true,\r\n },\r\n })\r\n }\r\n\r\n //wrapper for get requests return the promise\r\n public async get(\r\n url: string,\r\n responseType?: 'json' | 'arraybuffer' | 'blob' | 'document' | 'text' | 'stream' | undefined\r\n ): Promise {\r\n return await this.instance\r\n .get(url, {\r\n headers: {\r\n Authorization: `Bearer ${this.user.accessToken}`,\r\n },\r\n responseType: responseType !== undefined ? responseType : 'json',\r\n })\r\n .then(response => response.data)\r\n .catch(err => this.checkTokenExpired('get', {url}))\r\n }\r\n\r\n //wrapper method for post requests return the promise\r\n public async post(url: string, data: any) {\r\n return await this.instance\r\n .post(url + '/', data, {\r\n headers: {\r\n Authorization: `Bearer ${this.user.accessToken}`,\r\n },\r\n })\r\n .then(response => response)\r\n .catch(err => this.checkTokenExpired('post', {url, data}))\r\n }\r\n\r\n //wrapper method for put requests return the promise\r\n public async put(url: string, data: any, headers?: any) {\r\n return await this.instance\r\n .put(url + '/', data, {\r\n headers: {\r\n Authorization: `Bearer ${this.user.accessToken}`,\r\n ...headers,\r\n },\r\n })\r\n .then(response => response)\r\n .catch(err => this.checkTokenExpired('put', {url, data, headers}))\r\n }\r\n\r\n //check if token needs refreshing\r\n public checkTokenExpired: any = (type: string, args: {url: string; data?: any; headers?: any}) => {\r\n const now = Date.parse(new Date().toISOString())\r\n const expires = Date.parse(this.user.validTo)\r\n if (expires - now <= 0) {\r\n return this.refreshToken(type, args)\r\n }\r\n }\r\n\r\n //get new access token w/ refresh token\r\n public async refreshToken(type: string, args: {url: string; data?: any; headers?: any}) {\r\n return await this.instance\r\n .get('/login/accessToken', {\r\n headers: {\r\n Authorization: `Bearer ${this.user.refreshToken}`,\r\n },\r\n })\r\n .then(response => {\r\n if (response.status === 200) {\r\n this.user = {\r\n ...this.user,\r\n accessToken: response.data[0].accesstoken,\r\n validTo: response.data[0].validTo,\r\n }\r\n localStorage.setItem('user', JSON.stringify(this.user))\r\n\r\n switch (type) {\r\n case 'get':\r\n return this.get(args.url)\r\n case 'post':\r\n return this.post(args.url, args.data)\r\n case 'put':\r\n return this.put(args.url, args.data, args.headers)\r\n }\r\n }\r\n })\r\n .catch(err => {\r\n if (err.response && err.response.status === 401) {\r\n this.user = {\r\n refreshToken: '',\r\n accessToken: '',\r\n validTo: '',\r\n givenName: '',\r\n isAdmin: false,\r\n }\r\n localStorage.removeItem('user')\r\n window.location.reload()\r\n }\r\n })\r\n }\r\n}\r\n","export const concatStyles = (...classes: any[]) => {\r\n return classes.filter(c => !!c).join(' ')\r\n}\r\n","import React, {useState} from 'react'\r\nimport styles from './DropdownList.module.css'\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\n\r\n//Props to pass to the Dropdown Prop renderTRigger\r\ninterface IRendererProps {\r\n isOpen: boolean\r\n close: () => void\r\n open: () => void\r\n toggle: () => void\r\n}\r\n\r\ninterface IDropdownListProps {\r\n triggerElement: (props: IRendererProps) => React.ReactNode\r\n choicesList: (props: IRendererProps) => React.ReactNode\r\n\r\n listWidthClass?: string\r\n}\r\n\r\nexport const DropdownList: React.FC = props => {\r\n const {triggerElement, choicesList, listWidthClass = ''} = props\r\n const [isOpen, setIsOpen] = useState(false)\r\n\r\n const rendererProps: IRendererProps = {\r\n isOpen: isOpen,\r\n close: () => setIsOpen(false),\r\n open: () => setIsOpen(true),\r\n toggle: () => setIsOpen(!isOpen),\r\n }\r\n\r\n return (\r\n
\r\n
{triggerElement(rendererProps)}
\r\n {isOpen && ( //if dropdown isOpen then render the choices list\r\n
setIsOpen(false)}>\r\n
\r\n {choicesList(rendererProps)}\r\n
\r\n )}\r\n
\r\n )\r\n}\r\n","import React, {useContext} from 'react'\r\nimport styles from './Title.module.css'\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\nimport {ThemeContext} from '../../App/App'\r\n\r\ninterface ITitleProps {\r\n title: any //any so that dropdown can be used\r\n className?: string\r\n onClick?: any\r\n}\r\n\r\nexport const Title: React.FC = props => {\r\n const {title, className, onClick = () => {}} = props\r\n const {\r\n isDarkMode\r\n } = useContext(ThemeContext)\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {title}\r\n
\r\n
\r\n
\r\n )\r\n}\r\n","import React, { useContext } from 'react'\r\nimport styles from './Dropdown.module.css'\r\nimport {DropdownList} from './DropdownList'\r\nimport {Title} from '../../reusables/Title/Title'\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\nimport { ThemeContext } from '../../App';\r\n\r\nexport interface IDropdownItem {\r\n id: number\r\n name: string\r\n component?: any\r\n onClick?: Function\r\n}\r\n\r\ninterface IDropdownProps {\r\n content: IDropdownItem[]\r\n selected: IDropdownItem\r\n setSelected: any\r\n titleClassName?: string\r\n}\r\n\r\nexport const Dropdown: React.FC = props => {\r\n const {content, titleClassName, selected, setSelected} = props\r\n const { isDarkMode } = useContext(ThemeContext)\r\n //const [selected, setSelected] = useState(content[0])\r\n if (content[0] === undefined) {\r\n content.push({\r\n id: -1,\r\n name: '',\r\n })\r\n }\r\n return (\r\n
\r\n \r\n {content && selected && selected.name && (\r\n (\r\n \r\n )}\r\n choicesList={() => (\r\n
    \r\n {content.map(i => (\r\n {\r\n setSelected(i)\r\n selected.onClick && selected.onClick()\r\n }}\r\n >\r\n \r\n \r\n ))}\r\n
\r\n )}\r\n />\r\n )}\r\n
\r\n
\r\n }\r\n />\r\n
\r\n {selected\r\n ? selected.component\r\n ? selected.component\r\n : selected.onClick && selected.onClick(selected.id)\r\n : null}\r\n
\r\n
\r\n )\r\n}\r\n","import React, {useContext} from 'react'\r\nimport styles from './Card.module.css'\r\nimport {Title} from '../Title/Title'\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\nimport {ThemeContext} from '../../App/App'\r\n\r\ninterface ICardProps {\r\n title?: any\r\n children: any //any so that dropdown can be used\r\n className?: string\r\n titleClassName?: string\r\n titleOnClick?: any\r\n}\r\n\r\nexport const Card: React.FC = props => {\r\n const {title, children, className, titleClassName, titleOnClick} = props\r\n const {\r\n isDarkMode\r\n } = useContext(ThemeContext)\r\n\r\n return (\r\n
\r\n {title && }\r\n <div className={s(styles.cardChildren, className)}>{children}</div>\r\n </div>\r\n )\r\n}\r\n","import React from 'react'\r\nimport styles from './Group.module.css'\r\nimport {concatStyles} from '../../../utilities/mikesConcat' //allows use of more than 1 classname\r\n\r\n//Types\r\ntype JustifyType = 'start' | 'end' | 'between' | 'around' | 'even' | 'center'\r\ntype DirectionType = 'row' | 'column'\r\n\r\ninterface IGroupProps {\r\n children: any[]\r\n direction?: DirectionType\r\n justify?: JustifyType\r\n className?: string\r\n}\r\n\r\n// Component for arranging groups of similar items with flexbox\r\n// have to pass at least 2 children to use\r\nexport const Group: React.FC<IGroupProps> = props => {\r\n const {\r\n children,\r\n direction = 'row',\r\n justify = 'start',\r\n className\r\n } = props\r\n return <div className={concatStyles(styles[justify], styles[direction], styles.group, className)}>{children}</div>\r\n}\r\n","import React from 'react'\r\n\r\nimport styles from './HorizontalBarChart.module.css'\r\n\r\n//Prop Type\r\nexport interface IHorizontalBarChartProps {\r\n title: string\r\n amount: number\r\n outOf: number\r\n onClick: any\r\n}\r\n\r\nexport const HorizontalBarChart: React.FC<IHorizontalBarChartProps> = props => {\r\n const {title, amount, outOf, onClick} = props\r\n return amount > outOf ? null : (\r\n <div className={styles.barContainer}>\r\n <div\r\n className={styles.barMain}\r\n onClick={\r\n onClick\r\n ? () => {\r\n onClick(title)\r\n }\r\n : undefined\r\n }\r\n >\r\n {amount <= 0 ? (\r\n <div className={styles.barTitle}>{title}</div>\r\n ) : (\r\n <div className={styles.barFiller} style={{width: `${(amount / outOf) * 100}%`}}>\r\n <div className={styles.barTitle}>{title}</div>\r\n </div>\r\n )}\r\n </div>\r\n <div className={styles.fraction}>{amount + '/' + outOf}</div>\r\n </div>\r\n )\r\n}\r\n","export const formatCost = (isPerYear: boolean, perYear: number, perUse: number) => {\r\n return isPerYear\r\n ? formatMoney(perYear) + ' /yr'\r\n : perYear === 0\r\n ? formatMoney(perUse) + ' paid'\r\n : formatMoney(perYear / 12) + ' /mo'\r\n}\r\n\r\n//used: https://flaviocopes.com/how-to-format-number-as-currency-javascript/\r\nexport const formatMoney = (money: number) => {\r\n const formatter = new Intl.NumberFormat('en-US', {style: 'currency', currency: 'USD', minimumFractionDigits: 2})\r\n return formatter.format(money)\r\n}\r\n","import React, {useContext} from 'react'\r\n\r\nimport s from 'classnames'\r\n\r\nimport styles from './DashboardTable.module.css'\r\n\r\nimport {concatStyles} from '../../../utilities/mikesConcat'\r\nimport {ThemeContext} from '../../App'\r\nimport {formatMoney} from '../../../utilities/FormatCost'\r\n\r\n//types\r\nexport interface IDashboardTableDatum {\r\n name: string\r\n numberOf: number\r\n costPerMonth: number\r\n projected: string //might be a bool, and if true throw in the *\r\n //otherwise the string is either '' or '*'\r\n //'*' means that it is projected\r\n}\r\n\r\ninterface IDashboardTableProps {\r\n data: IDashboardTableDatum[]\r\n onRowClick?: (datum: IDashboardTableDatum) => void\r\n}\r\n\r\nexport const DashboardTable = (props: IDashboardTableProps) => {\r\n const {data, onRowClick} = props\r\n const isClickable = Boolean(onRowClick)\r\n const {isDarkMode} = useContext(ThemeContext)\r\n\r\n return (\r\n <table className={s(styles.table, {[styles.clickable]: isClickable})}>\r\n <tbody>\r\n {data.map(datum => (\r\n <tr\r\n key={datum.name}\r\n className={s(styles.tr, {[styles.row]: isClickable}, isDarkMode ? styles.trDark : {})}\r\n onClick={\r\n onRowClick\r\n ? e => {\r\n onRowClick(datum)\r\n }\r\n : undefined\r\n }\r\n >\r\n <td className={concatStyles(styles.name, isDarkMode ? styles.dark : {})}>{datum.name}</td>\r\n <td className={styles.numberOf}>{datum.numberOf} users</td>\r\n <td className={styles.cost}>\r\n {formatMoney(datum.costPerMonth)}/month | {formatMoney(datum.costPerMonth * 12)}/year\r\n {datum.projected}\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n )\r\n}\r\n","import React from 'react'\r\nimport {IRechartPieDatum} from '../PieChart'\r\nimport {formatMoney} from '../../../../utilities/FormatCost'\r\n\r\ninterface ICustomLabelProps {\r\n cx?: number\r\n cy?: number\r\n midAngle?: number\r\n innerRadius?: number\r\n outerRadius?: number\r\n index?: number\r\n data: IRechartPieDatum[]\r\n}\r\nexport const CustomLabel: React.FunctionComponent<ICustomLabelProps> = props => {\r\n const {cx = 300, cy = 300, midAngle = 5, innerRadius = 5, outerRadius = 5, index = 5, data} = props\r\n const radian = Math.PI / 180\r\n\r\n var totalValue = 0\r\n\r\n //compares to the percent of the pie and pops the text\r\n //out of the pie if it too small\r\n\r\n for (let i in data) {\r\n //get the total value\r\n totalValue = totalValue + data[i].value\r\n }\r\n const sizeOfSlice = data[index].value / totalValue\r\n\r\n var radius\r\n var textColor\r\n if (data[index].value === 0) {\r\n radius = innerRadius + (outerRadius - innerRadius) * 1.31\r\n textColor = '#f4f4f400'\r\n } else if (sizeOfSlice < 0.15) {\r\n radius = innerRadius + (outerRadius - innerRadius) * 1.15\r\n textColor = '#000'\r\n } else {\r\n radius = innerRadius + (outerRadius - innerRadius) * 0.5\r\n textColor = 'white'\r\n }\r\n\r\n const x = cx + radius * Math.cos(-midAngle * radian)\r\n const y = cy + radius * Math.sin(-midAngle * radian)\r\n\r\n return (\r\n <text\r\n x={x}\r\n y={y}\r\n fontSize='14'\r\n fill={textColor}\r\n fontWeight='bold'\r\n textAnchor='middle'\r\n dominantBaseline='middle'\r\n >\r\n {formatMoney(Number(data[index].value))}\r\n </text>\r\n )\r\n}\r\n","import React, { useState, useContext } from 'react'\r\nimport { PieChart, Pie, Cell } from 'recharts'\r\nimport { CustomLabel } from './CustomLabel/CustomLabel'\r\nimport styles from './PieChart.module.css'\r\nimport { ThemeContext } from '../../App/App'\r\nimport { concatStyles as s } from '../../../utilities/mikesConcat'\r\n\r\n// Types\r\nexport interface IRechartPieDatum {\r\n name: string\r\n value: number\r\n id: string //the id is to rout to the dept detail page\r\n}\r\n\r\nexport interface IPieDataProps {\r\n headingName: string\r\n data: IRechartPieDatum[]\r\n}\r\n\r\ninterface IRechartPieProps {\r\n pieChartData: IPieDataProps[]\r\n initialColors: string[]\r\n onSliceClick?: any\r\n}\r\n\r\nexport const RechartPieChart: React.FunctionComponent<IRechartPieProps> = props => {\r\n const { pieChartData, initialColors, onSliceClick } = props\r\n\r\n const [colors, setColors] = useState(initialColors)\r\n //colors off of invision: ['#009EFF', '#FF9340', '#3D4599', '#1425CC', '#CC4A14']\r\n\r\n const onMouseOver = (data: IRechartPieDatum[], index: number) => {\r\n const updatedColors = [...initialColors] // Create clone of initial colors array\r\n updatedColors[index] = initialColors[index] + 95 // Change particular index in our cloned array\r\n setColors(updatedColors) // Set new color array\r\n }\r\n\r\n const onMouseOut = () => {\r\n setColors(initialColors)\r\n }\r\n const {\r\n isDarkMode\r\n } = useContext(ThemeContext)\r\n\r\n function hasData(i: number) {\r\n for (let j = 0; j < pieChartData[i].data.length; j++) {\r\n if (pieChartData[i].data[j].value > 0) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n return (\r\n <div className={styles.pieContainer}>\r\n {/* Headers */}\r\n <div className={styles.inline}>\r\n {pieChartData.map((datum, i) => (\r\n <h3\r\n key={datum.headingName}\r\n className={s(i === pieChartData.length - 1 ? styles.lastHeader : styles.header, isDarkMode ? styles.dark : {})}\r\n >\r\n {datum.headingName}\r\n {datum.headingName === 'Hardware' && <div className={styles.headingText}>*last 30 days</div>}\r\n </h3>\r\n ))}\r\n </div>\r\n\r\n {/* Pie Charts */}\r\n <div className={styles.inline}>\r\n <PieChart width={340 * pieChartData.length} height={300}>\r\n {pieChartData.map((datum, j) => (\r\n <Pie\r\n key={datum.headingName}\r\n data={datum.data}\r\n cx={170 + 340 * j}\r\n cy={150}\r\n dataKey='value'\r\n fill='#8884d8'\r\n labelLine={false}\r\n label={<CustomLabel data={datum.data} />}\r\n isAnimationActive={false}\r\n onMouseOver={onMouseOver}\r\n onMouseOut={onMouseOut}\r\n >\r\n {datum.data.map((entry, index) => (\r\n <Cell\r\n key={`cell-${index}`}\r\n fill={colors[index]}\r\n onClick={\r\n onSliceClick\r\n ? () => {\r\n onSliceClick(entry.id)\r\n }\r\n : undefined\r\n }\r\n />\r\n ))}\r\n </Pie>\r\n ))}\r\n </PieChart>\r\n </div>\r\n\r\n {/* empty pies */}\r\n {pieChartData.map((datum, i) =>\r\n hasData(i) ? (\r\n <div key={i} />\r\n ) : (\r\n <div key={i} className={styles.circleContainer} style={{ position: 'relative', left: 10 + 340 * i }}>\r\n <div className={s(styles.emptyCircle, isDarkMode && styles.darkModeCircle)} />\r\n <div className={styles.emptyDataText}>No data to display</div>\r\n </div>\r\n )\r\n )}\r\n\r\n {/* Legend */}\r\n <div className={styles.inlineLegend}>\r\n {pieChartData[0].data.map((datum, index) => (\r\n <div\r\n key={index}\r\n className={styles.legendList}\r\n onClick={\r\n onSliceClick\r\n ? () => {\r\n onSliceClick(datum.id)\r\n }\r\n : undefined\r\n }\r\n >\r\n <div className={styles.circle} style={{ backgroundColor: colors[index] }} />\r\n <div className={s(isDarkMode ? styles.dark : {})}>\r\n {datum.name}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import React from 'react'\r\n\r\n// Components\r\nimport {Card} from '../../../reusables'\r\n\r\nimport {formatMoney} from '../../../../utilities/FormatCost'\r\n// Styles\r\nimport styles from './CostCard.module.css'\r\n\r\n// Primary Component\r\ninterface ICostCardProps {\r\n cardTitle: string\r\n data: {\r\n programsCost: number\r\n pluginsCost: number\r\n }\r\n icon: any\r\n}\r\n\r\nexport const CostCard = (props: ICostCardProps) => {\r\n const {\r\n cardTitle,\r\n icon,\r\n data: {programsCost, pluginsCost},\r\n } = props\r\n\r\n return (\r\n <Card title={cardTitle}>\r\n <div>{icon}</div>\r\n <div className={styles.titleContainer}>\r\n <div className={styles.title}>{formatMoney(programsCost + pluginsCost)}</div>\r\n <div className={styles.subtitle}>Programs: {formatMoney(programsCost)}</div>\r\n <div className={styles.subtitle}>Plugins: {formatMoney(pluginsCost)}</div>\r\n </div>\r\n </Card>\r\n )\r\n}\r\n","import React, {useState, useEffect, useContext} from 'react'\r\nimport {AxiosService} from '../../../services/AxiosService/AxiosService'\r\nimport {IoIosArrowRoundUp, IoIosArrowRoundDown, IoIosStats} from 'react-icons/io'\r\n//import {TiPin} from 'react-icons/ti'\r\n\r\n// Styles\r\nimport styles from './DashboardPage.module.css'\r\n\r\n// Components\r\nimport {Dropdown, IDropdownItem} from '../../reusables/Dropdown/Dropdown'\r\nimport {Card} from '../../reusables/Card/Card'\r\nimport {Group} from '../../reusables/Group/Group'\r\nimport {HorizontalBarChart} from '../../reusables/HorizontalBarChart/HorizontalBarChart'\r\nimport {DashboardTable, IDashboardTableDatum} from '../../reusables/DashboardTable/DashboardTable'\r\nimport {RechartPieChart, IPieDataProps} from '../../reusables/PieChart/PieChart'\r\nimport {CostCard} from '../Dashboard/CostCard/CostCard'\r\nimport {History} from 'history'\r\n\r\n// Context\r\nimport {LoginContext, ThemeContext} from '../../App/App'\r\n\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\n\r\n// Types\r\ninterface IDashboardPageProps {\r\n history: History\r\n}\r\n\r\n// Initial props\r\nlet initLicenses: {\r\n programName: string\r\n countProgInUse: number\r\n countProgOverall: number\r\n}[] = []\r\nlet initSoftwareTableData: IDashboardTableDatum[] = [{name: 'Init', numberOf: 5, costPerMonth: 5, projected: '*'}]\r\nlet initCosts: {\r\n costOfProgramsPerYear: number\r\n costOfPluginsPerYear: number\r\n} = {\r\n costOfProgramsPerYear: 0,\r\n costOfPluginsPerYear: 0,\r\n}\r\nlet initPieData: IPieDataProps[] = [\r\n {\r\n headingName: 'Software',\r\n data: [\r\n {name: 'one', value: 0, id: ''},\r\n {name: 'two', value: 0, id: ''},\r\n {name: 'three', value: 0, id: ''},\r\n {name: 'four', value: 0, id: ''},\r\n ],\r\n },\r\n {\r\n headingName: 'Hardware',\r\n data: [\r\n {name: 'one', value: 0, id: ''},\r\n {name: 'two', value: 0, id: ''},\r\n {name: 'three', value: 0, id: ''},\r\n {name: 'four', value: 0, id: ''},\r\n ],\r\n },\r\n]\r\n\r\n// Primary Component\r\nexport const DashboardPage: React.FC<IDashboardPageProps> = props => {\r\n const {history} = props\r\n const {loginContextVariables} = useContext(LoginContext)\r\n const axios = new AxiosService(loginContextVariables)\r\n const {isDarkMode} = useContext(ThemeContext)\r\n\r\n // const [darkMode, setDarkMode] = useState(false);\r\n\r\n //Liscence Bar Chart State\r\n const [licenses, setLicenses] = useState(initLicenses)\r\n\r\n //Software Table State\r\n const [softwareTableData, setSoftwareTableData] = useState(initSoftwareTableData)\r\n\r\n //Cost Card State\r\n const [costs, setCosts] = useState(initCosts)\r\n\r\n //Pie State\r\n const [pieData, setPieData] = useState(initPieData)\r\n\r\n //Department Tables State\r\n const [deptTableData, setDeptTableData] = useState<{id: number; name: string; tableData: IDashboardTableDatum[]}[]>(\r\n []\r\n )\r\n const [dropdownContent, setDropdownContent] = useState<IDropdownItem[]>([])\r\n const [selectedDept, setSelectedDept] = useState<IDropdownItem>({id: -1, name: 'Select A Department'})\r\n const [selectedDeptTable, setSelectedDeptTable] = useState<IDashboardTableDatum[]>([])\r\n\r\n //Click Handling\r\n const onRowClick = (datum: IDashboardTableDatum) => {\r\n if (datum.name[datum.name.length - 1] === '*') {\r\n var str = datum.name.substring(0, datum.name.length - 1)\r\n history.push({pathname: `/programs/overview/${str}/inventory`, state: {prev: history.location}})\r\n } else {\r\n history.push({pathname: `/programs/overview/${datum.name}/inventory`, state: {prev: history.location}})\r\n }\r\n }\r\n\r\n const onBarClick = (id: string) => {\r\n history.push({pathname: `/programs/overview/${id}/inventory`, state: {prev: history.location}})\r\n }\r\n\r\n const onSliceClick = (id: string) => {\r\n history.push({pathname: `/departments/detail/${id}`, state: {prev: history.location}})\r\n }\r\n\r\n useEffect(() => {\r\n axios\r\n .get('/dashboard/licenseTable')\r\n .then((data: any) => {\r\n setLicenses(data)\r\n })\r\n .catch((err: any) => console.error(err))\r\n\r\n axios\r\n .get('/dashboard/softwareTable')\r\n .then((data: any) => {\r\n let x: IDashboardTableDatum[] = []\r\n data &&\r\n data.map((i: any) =>\r\n x.push({\r\n name: i.isPinned ? i.softwareName + '*' : i.softwareName + '',\r\n numberOf: i.numberOfUsers,\r\n costPerMonth: i.costPerMonth,\r\n projected: i.isProjected ? '*' : '',\r\n })\r\n )\r\n setSoftwareTableData(x)\r\n })\r\n .catch((err: any) => console.error(err))\r\n\r\n axios\r\n .get('/dashboard/CostBreakdown')\r\n .then((data: any) => {\r\n data && setCosts(data[0])\r\n })\r\n .catch((err: any) => console.error(err))\r\n\r\n axios\r\n .get('/dashboard/CostPieCharts')\r\n .then((data: any) => {\r\n let x: IPieDataProps[] = [\r\n {\r\n headingName: data[0].headingName,\r\n data: [],\r\n },\r\n {\r\n headingName: data[1].headingName,\r\n data: [],\r\n },\r\n ]\r\n data[0].dataForPrograms &&\r\n data[0].dataForPrograms.map((i: any) =>\r\n x[0].data.push({\r\n name: i.departmentName,\r\n value: i.costOfPrograms !== null ? i.costOfPrograms : 0,\r\n id: i.departmentId,\r\n })\r\n )\r\n\r\n data[1].dataForHardware &&\r\n data[1].dataForHardware.map((i: any) =>\r\n x[1].data.push({\r\n name: i.departmentName,\r\n value: i.costOfHardware !== null ? i.costOfHardware : 0,\r\n id: i.departmentId,\r\n })\r\n )\r\n setPieData(x)\r\n })\r\n .catch((err: any) => console.error(err))\r\n\r\n axios\r\n .get('/dashboard/departmentTable?$select=departmentName,departmentID')\r\n .then((data: any) => {\r\n setDropdownContent([\r\n ...data.map((datum: any) => {\r\n return {id: datum.DepartmentId, name: datum.DepartmentName}\r\n }),\r\n ])\r\n\r\n data &&\r\n data[0] &&\r\n data[0].DepartmentName &&\r\n setSelectedDept({name: data[0].DepartmentName, id: data[0].DepartmentId})\r\n })\r\n .catch((err: any) => console.error(err))\r\n }, [])\r\n\r\n async function getDeptTables() {\r\n var deptTables: any[] = []\r\n await dropdownContent.map(i =>\r\n axios\r\n .get(`/dashboard/departmentTable/${i.id}`)\r\n .then((data: any[]) => {\r\n let y: IDashboardTableDatum[] = []\r\n data &&\r\n data.map((datum: any) =>\r\n y.push({\r\n name: datum.programName,\r\n numberOf: datum.programCount,\r\n costPerMonth: datum.programCostPerYear / 12,\r\n projected: datum.programIsCostPerYear ? '' : '*',\r\n })\r\n )\r\n deptTables.push({id: i.id, name: i.name, tableData: y})\r\n\r\n if (i.id === selectedDept.id) {\r\n setSelectedDeptTable(y)\r\n }\r\n })\r\n .catch((err: any) => console.error(err))\r\n )\r\n\r\n setDeptTableData(deptTables)\r\n }\r\n\r\n useEffect(() => {\r\n getDeptTables()\r\n }, [dropdownContent, selectedDept])\r\n\r\n return (\r\n <div className={s(styles.dashMain, isDarkMode ? styles.dashMainDark : {})}>\r\n <div className={styles.dashColumn}>\r\n <Card\r\n title={'licenses'}\r\n titleClassName={s(styles.linkedTitle, isDarkMode ? styles.linkedTitleDark : {})}\r\n titleOnClick={() => {\r\n history.push({pathname: `/programs`, state: {prev: history.location}})\r\n }}\r\n >\r\n <Group className={styles.group}>\r\n {licenses &&\r\n licenses.map(i => (\r\n <HorizontalBarChart\r\n key={i.programName}\r\n title={i.programName}\r\n amount={i.countProgInUse}\r\n outOf={i.countProgOverall}\r\n onClick={onBarClick}\r\n />\r\n ))}\r\n </Group>\r\n </Card>\r\n\r\n <div className={styles.dashRow}>\r\n <div className={styles.costIcons}>\r\n <CostCard\r\n cardTitle='Yearly Cost'\r\n data={{\r\n programsCost: costs.costOfProgramsPerYear,\r\n pluginsCost: costs.costOfPluginsPerYear,\r\n }}\r\n icon={\r\n <span>\r\n <IoIosArrowRoundUp className={styles.upArrowIcon} />\r\n <IoIosArrowRoundDown className={styles.downArrowIcon} />\r\n </span>\r\n }\r\n />\r\n </div>\r\n <div className={styles.costIcons}>\r\n <CostCard\r\n cardTitle='Monthly Cost'\r\n data={{\r\n programsCost: costs.costOfProgramsPerYear / 12,\r\n pluginsCost: costs.costOfPluginsPerYear / 12,\r\n }}\r\n icon={<IoIosStats className={styles.statsIcon} />}\r\n />\r\n </div>\r\n </div>\r\n <Card>\r\n {dropdownContent && (\r\n <Dropdown\r\n content={dropdownContent}\r\n titleClassName={s(styles.linkedTitle, isDarkMode ? styles.linkedTitleDark : {})}\r\n selected={selectedDept}\r\n setSelected={(i: IDropdownItem) => {\r\n setSelectedDept(i)\r\n var table = deptTableData.filter(i => i.id === selectedDept.id)\r\n table[0] && setSelectedDeptTable(table[0].tableData)\r\n }}\r\n />\r\n )}\r\n\r\n <div className={styles.software}>\r\n <DashboardTable data={selectedDeptTable} onRowClick={onRowClick} />\r\n <div className={styles.softwareKey}>\r\n <div>Cost Per Year* = Projected</div>\r\n </div>\r\n </div>\r\n </Card>\r\n </div>\r\n\r\n <div className={styles.dashColumn}>\r\n <Card\r\n title={'Departments'}\r\n titleClassName={s(styles.linkedTitle, isDarkMode ? styles.linkedTitleDark : {})}\r\n titleOnClick={() => {\r\n history.push({pathname: `/departments`, state: {prev: history.location}})\r\n }}\r\n >\r\n <RechartPieChart\r\n pieChartData={pieData}\r\n initialColors={[\r\n '#B72160',\r\n '#009EFF',\r\n '#FF8A5B',\r\n '#EA526F',\r\n '#2EC4B6',\r\n '#0B4F6C',\r\n '#8A3A91',\r\n '#2266B0',\r\n '#fcfa74',\r\n '#1b5159',\r\n '#1d6332',\r\n ]}\r\n onSliceClick={onSliceClick}\r\n />\r\n </Card>\r\n <Card\r\n title={'software'}\r\n titleClassName={s(styles.linkedTitle, isDarkMode ? styles.linkedTitleDark : {})}\r\n titleOnClick={() => {\r\n history.push({pathname: `/programs`, state: {prev: history.location}})\r\n }}\r\n >\r\n <div className={styles.software}>\r\n <DashboardTable data={softwareTableData} onRowClick={onRowClick} />\r\n <div className={styles.softwareKey}>\r\n <div>Name* = Pinned</div>\r\n <div>Cost Per Year* = Projected</div>\r\n </div>\r\n </div>\r\n </Card>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","export function sortTable(rows: any[][], dataIndex: number, sortValue: number) {\r\n if (rows.length > 0) {\r\n var compareString = (a: [], b: []) => (a === b ? 0 : a < b ? -1 : 1)\r\n\r\n const reversemodifier = sortValue === 0 ? 1 : -1\r\n // const sortFunc = x => rows[0][dataIndex].sortBy\r\n if (rows[0][dataIndex].hasOwnProperty('sortBy')) {\r\n rows.sort((a, b) => reversemodifier * compareString(a[dataIndex].sortBy, b[dataIndex].sortBy))\r\n } else {\r\n rows.sort((a, b) => reversemodifier * compareString(a[dataIndex], b[dataIndex]))\r\n }\r\n }\r\n return rows\r\n}\r\n\r\nexport function sortByDate(rows: any[]) {\r\n var compareString = (a: {}, b: {}) => (a === b ? 0 : a < b ? -1 : 1)\r\n if (rows === undefined || rows === null) {\r\n return rows\r\n } else {\r\n rows.sort((a, b) => compareString(a.eventDate, b.eventDate))\r\n return rows\r\n }\r\n}\r\n\r\n// type SortDirection = 'asc' | 'desc'\r\n","export const format = (x: string) => {\r\n //if x is empty, null, or only whitespace\r\n return x ? (x !== ('' || ' ') ? x : '-') : '-'\r\n // if (x === ('' || ' ' || null || undefined)) {\r\n // return '-'\r\n // } else {\r\n // return x\r\n // }\r\n}\r\n","import { AxiosService } from '../services/AxiosService/AxiosService'\r\n\r\nexport async function checkImage(img: string, axios: AxiosService, placeholder: string) {\r\n let image: string = \"\"\r\n await axios\r\n .get(img, \"blob\")\r\n .then((data: any) => {\r\n if (data.size !== 0) {\r\n let objectURL: string = window.URL.createObjectURL(new Blob([data], { type: data.type }))\r\n image = objectURL\r\n }\r\n else {\r\n image = placeholder\r\n }\r\n })\r\n .catch((err: any) => console.error(err))\r\n\r\n return image\r\n}\r\n","// Search through data based on current value\r\n// of search bar and save results in filtered\r\nexport const searchFilter = (data: any, filter: string, search: string) => {\r\n var filtered = data.filter((row: any) => {\r\n return !row[filter]\r\n ? false\r\n : row[filter]\r\n .toString()\r\n .toLowerCase()\r\n .search(search.toLowerCase()) !== -1\r\n })\r\n return filtered\r\n}\r\n","import React from 'react'\r\nimport Select, {components} from 'react-select'\r\nimport {MdSearch} from 'react-icons/md'\r\n\r\n// Styles\r\nimport styles from './FilteredSearch.module.css'\r\n\r\n// Types\r\nexport interface IFilteredSearchProps {\r\n search: string\r\n setSearch: any\r\n options: {label: string; value: string}[]\r\n selected: any\r\n setSelected: any\r\n}\r\n\r\n// Primary Component\r\nexport const FilteredSearch: React.SFC<IFilteredSearchProps> = props => {\r\n const {search, setSearch, options, setSelected} = props\r\n\r\n const customStyles = {\r\n container: (provided: any, state: any) => ({\r\n ...provided,\r\n width: `${200}px`,\r\n border: '0px',\r\n height: '45px',\r\n color: '#9b9b9b',\r\n }),\r\n control: (provided: any, state: any) => ({\r\n ...provided,\r\n color: '#9b9b9b',\r\n height: '40px',\r\n border: '0px ',\r\n borderRadius: '4px',\r\n boxShadow: '0',\r\n cursor: 'pointer',\r\n margin: '5px',\r\n }),\r\n menu: (provided: any, state: any) => ({\r\n ...provided,\r\n margin: '-5px',\r\n boxShadow: '-1px 5px 7px 0 rgba(0,0,0,0.5)',\r\n }),\r\n option: (provided: any, state: any) => ({\r\n ...provided,\r\n cursor: 'pointer',\r\n }),\r\n indicatorSeparator: (provided: any) => ({\r\n ...provided,\r\n display: 'none',\r\n }),\r\n isFocused: (provided: any) => ({\r\n ...provided,\r\n border: '0px',\r\n }),\r\n singleValue: (provided: any) => ({\r\n ...provided,\r\n color: '#9b9b9b',\r\n height: '25px',\r\n }),\r\n }\r\n\r\n const DropdownIndicator = (props: any) => {\r\n return (\r\n components.DropdownIndicator && (\r\n <components.DropdownIndicator {...props}>\r\n <div className={styles.dropdownIndicator} />\r\n </components.DropdownIndicator>\r\n )\r\n )\r\n }\r\n\r\n return (\r\n <div className={styles.searchPosition}>\r\n <form className={styles.searchContainer} onSubmit={e => e.preventDefault()}>\r\n <input\r\n className={styles.searchBar}\r\n value={search}\r\n placeholder={'Search'}\r\n onChange={e => {\r\n setSearch(e.target.value)\r\n }}\r\n />\r\n\r\n <div className={styles.filterBy}>By</div>\r\n <Select\r\n defaultValue={options[0]}\r\n className={styles.searchFilter}\r\n options={options}\r\n onChange={(cur: any) => setSelected(cur)}\r\n components={{DropdownIndicator}}\r\n styles={customStyles}\r\n theme={theme => ({\r\n ...theme,\r\n borderRadius: 0,\r\n colors: {\r\n ...theme.colors,\r\n text: '#9b9b9b',\r\n primary: '#009EFF;',\r\n },\r\n })}\r\n isSearchable={false}\r\n />\r\n </form>\r\n <div className={styles.searchIconContainer}>\r\n <MdSearch className={styles.searchIcon} size={30} />\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import React, { useContext } from 'react'\r\nimport { ThemeContext } from '../../App';\r\n\r\n// icons\r\nimport {FaArchive, FaEdit} from 'react-icons/fa'\r\nimport {GoPlus} from 'react-icons/go'\r\nimport {IoIosPersonAdd} from 'react-icons/io'\r\n\r\n// Utils\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\n\r\n// Styles\r\nimport styles from './Button.module.css'\r\n\r\n\r\n// Types\r\ntype ButtonIcon = 'add' | 'archive' | 'edit' | 'back' | 'submit'\r\ninterface IButtonProps {\r\n onClick?: any\r\n className?: string\r\n text?: string\r\n textClassName?: string\r\n icon?: ButtonIcon\r\n children?: any\r\n textInside?: boolean\r\n}\r\n\r\n// Helpers\r\n\r\n// Primary Component\r\nexport const Button: React.SFC<IButtonProps> = props => {\r\n const {onClick = () => {}, className = '', text = '', textClassName = '', children, icon, textInside = true} = props\r\n const {isDarkMode} = useContext(ThemeContext)\r\n\r\n return icon === 'back' ? (\r\n <div onClick={onClick} className={s(styles.backButton, className)}>\r\n <div className={styles.backArrow} />\r\n <div className={s(styles.backButtonText, textClassName)}>{text}</div>\r\n {children}\r\n </div>\r\n ) : textInside ? (\r\n <div onClick={onClick} className={s(styles.buttonMain, className, isDarkMode ? styles.buttonMainDark : {})}>\r\n <div className={s(styles.buttonText, textClassName)}>{text}</div>\r\n {/* {icon === 'add' && <div className={styles.addIcon} />} */}\r\n {icon === 'add' && <GoPlus className={styles.icon} size={20} />}\r\n {icon === 'archive' && <FaArchive className={styles.icon} size={20} />}\r\n {icon === 'edit' && <FaEdit className={styles.icon} size={20} />}\r\n {icon === 'submit' && <IoIosPersonAdd className={styles.icon} size={20} />}\r\n\r\n {children}\r\n </div>\r\n ) : (\r\n <div onClick={onClick} className={s(styles.iconButtonContainer, className, isDarkMode ? styles.iconButtonContainerDark : {})}>\r\n <div className={s(styles.iconbuttonMain, isDarkMode ? styles.iconButtonDark : {})}>\r\n {/* {icon === 'add' && <div className={styles.addIcon} />} */}\r\n {icon === 'add' && <GoPlus className={styles.icon} size={20} />}\r\n {icon === 'archive' && <FaArchive className={styles.icon} size={20} />}\r\n {icon === 'edit' && <FaEdit className={styles.icon} size={20} />}\r\n </div>\r\n <div className={s(styles.buttonText, textClassName)}>{text}</div>\r\n {children}\r\n </div>\r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport { concatStyles as s } from '../../../utilities/mikesConcat'\r\nimport styles from './Table.module.css'\r\n\r\ninterface ITableProps {\r\n headers: JSX.Element[]\r\n rows: Element[][]\r\n onRowClick?: (datum: Element[]) => void\r\n}\r\n\r\nexport const Table = (props: ITableProps) => {\r\n const { headers, rows, onRowClick } = props\r\n const isClickable = Boolean(onRowClick)\r\n\r\n return (\r\n <table className={s(styles.table, isClickable && styles.clickable)}>\r\n <thead>\r\n <tr>{headers.map(header => header)}</tr>\r\n </thead>\r\n\r\n <tbody>\r\n {rows.map((row, index) => {\r\n return <tr\r\n key={index}\r\n className={s(styles.tr, isClickable && styles.clickable)}\r\n onClick={\r\n onRowClick\r\n ? e => {\r\n onRowClick(row)\r\n }\r\n : undefined\r\n }\r\n >\r\n {row}\r\n </tr>\r\n })}\r\n </tbody>\r\n </table>\r\n )\r\n}\r\n","import React, {useState, useEffect, useContext} from 'react'\r\nimport {sortTable} from '../../../utilities/quickSort'\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\nimport {AxiosService} from '../../../services/AxiosService/AxiosService'\r\nimport {cloneDeep} from 'lodash'\r\nimport {format} from '../../../utilities/formatEmptyStrings'\r\nimport {checkImage} from '../../../utilities/CheckImage'\r\nimport {searchFilter} from '../../../utilities/SearchFilter'\r\nimport {formatMoney} from '../../../utilities/FormatCost'\r\n\r\n// Components\r\nimport {FilteredSearch} from '../../reusables/FilteredSearch/FilteredSearch'\r\nimport {Button} from '../../reusables/Button/Button'\r\nimport {Group} from '../../reusables/Group/Group'\r\nimport {Table} from '../../reusables/Table/Table'\r\nimport {History} from 'history'\r\n\r\n// Styles\r\nimport styles from './DepartmentsListPage.module.css'\r\nimport placeholder from '../../../content/Images/Placeholders/department-placeholder.png'\r\n\r\n// Context\r\nimport {LoginContext, ThemeContext} from '../../App/App'\r\n\r\n// Types\r\ninterface IDepartmentsListPageProps {\r\n history: History\r\n}\r\ninterface IDepartmentData {\r\n cost: number\r\n id: number\r\n name: string\r\n totalEmployees: number\r\n}\r\ninterface IPulledData {\r\n costOfPrograms: number\r\n departmentId: number\r\n departmentName: string\r\n icon: string\r\n numOfEmp: number\r\n}\r\n\r\n// Primary Component\r\nexport const DepartmentsListPage: React.SFC<IDepartmentsListPageProps> = props => {\r\n const {history} = props\r\n const {\r\n loginContextVariables,\r\n loginContextVariables: {isAdmin},\r\n } = useContext(LoginContext)\r\n const axios = new AxiosService(loginContextVariables)\r\n const {isDarkMode} = useContext(ThemeContext)\r\n\r\n // state\r\n const [listData, setListData] = useState<IDepartmentData[]>([])\r\n const [filteredData, setFilteredData] = useState<IDepartmentData[]>([])\r\n const [search, setSearch] = useState('')\r\n const [selected, setSelected] = useState({label: 'Departments', value: 'name'})\r\n\r\n const [archivedData, setArchivedData] = useState<IDepartmentData[]>([])\r\n const [isArchive, setIsArchive] = useState(false)\r\n\r\n const columns = ['name', 'totalEmployees', 'cost']\r\n const headerList = ['Departments', 'Total Employees', 'Programs Cost']\r\n const options = columns.map((c, i) => ({label: headerList[i], value: c}))\r\n\r\n const [displayImages, setDisplayImages] = useState<{id: number; img: string}[]>([])\r\n\r\n async function getData() {\r\n var imagePromises: any[] = []\r\n await axios\r\n .get('/list/departments')\r\n .then((data: IPulledData[]) => {\r\n var depts: IDepartmentData[] = []\r\n data.forEach((i: IPulledData) => {\r\n depts.push({\r\n name: format(i.departmentName),\r\n id: i.departmentId,\r\n totalEmployees: i.numOfEmp,\r\n cost: i.costOfPrograms,\r\n })\r\n\r\n imagePromises.push(\r\n checkImage(i.icon, axios, placeholder).then(image => {\r\n return {id: i.departmentId, img: image}\r\n })\r\n )\r\n })\r\n setListData(depts)\r\n })\r\n .catch((err: any) => console.error(err))\r\n\r\n await Promise.all(imagePromises)\r\n .then(response => setDisplayImages(response))\r\n .catch((err: any) => console.error(err))\r\n\r\n await axios\r\n .get(`/archivedList/department`)\r\n .then((data: IPulledData[]) => {\r\n var depts: IDepartmentData[] = []\r\n data.map((i: IPulledData) =>\r\n depts.push({\r\n name: format(i.departmentName),\r\n id: i.departmentId,\r\n totalEmployees: 0,\r\n cost: 0,\r\n })\r\n )\r\n setArchivedData(depts)\r\n })\r\n .catch((err: any) => console.error(err))\r\n }\r\n\r\n useEffect(() => {\r\n getData()\r\n }, [])\r\n\r\n const formatCost = (cost: number) => {\r\n return formatMoney(cost / 12) + ' /mo | ' + formatMoney(cost) + ' /yr'\r\n }\r\n\r\n useEffect(() => {\r\n setFilteredData(searchFilter(isArchive ? archivedData : listData, selected.value, search))\r\n }, [search, selected, listData, archivedData, isArchive])\r\n\r\n const handleClick = () => {\r\n history.push({pathname: `/departments/edit/new`, state: {prev: history.location}})\r\n }\r\n\r\n const handleRowClick = (row: any[]) => {\r\n history.push({pathname: `departments/detail/${row[0].key}`, state: {prev: history.location}})\r\n }\r\n\r\n var filteredRows: any[] = []\r\n filteredData.forEach(rowObj => {\r\n filteredRows.push(Object.values(rowObj))\r\n })\r\n\r\n const [rows, setRows] = useState(filteredRows)\r\n useEffect(() => {\r\n setRows(filteredRows)\r\n }, [filteredData])\r\n\r\n //-------------- this will all be the same -------------\r\n const headerStates = []\r\n const headerStateCounts = []\r\n\r\n //initialize all the header states and styling to be not sorted\r\n for (let i = 0; i < headerList.length; i++) {\r\n headerStates.push(styles.descending)\r\n headerStateCounts.push(0)\r\n }\r\n //var initHeaderStates = cloneDeep(headerStates)\r\n var initHeaderStateCounts = cloneDeep(headerStateCounts)\r\n var tempHeaderStates = cloneDeep(headerStates)\r\n var tempHeaderStateCounts = cloneDeep(headerStateCounts)\r\n\r\n var initState = {headerStates, headerStateCounts}\r\n const [sortState, setSortState] = useState(initState)\r\n\r\n function sortStates(index: number) {\r\n if (sortState.headerStateCounts[index] === 0) {\r\n tempHeaderStates[index] = styles.descending\r\n tempHeaderStateCounts[index] = 1\r\n setSortState({headerStates: tempHeaderStates, headerStateCounts: tempHeaderStateCounts})\r\n tempHeaderStateCounts = [...initHeaderStateCounts]\r\n } else if (sortState.headerStateCounts[index] === 1) {\r\n tempHeaderStates[index] = styles.ascending\r\n tempHeaderStateCounts[index] = 0\r\n setSortState({headerStates: tempHeaderStates, headerStateCounts: tempHeaderStateCounts})\r\n tempHeaderStateCounts = [...initHeaderStateCounts]\r\n }\r\n }\r\n\r\n const renderHeaders = () => {\r\n var headers = []\r\n\r\n var firstHeader = (\r\n <td\r\n onClick={e => {\r\n setRows(sortTable(rows, 0, sortState.headerStateCounts[0]))\r\n sortStates(0)\r\n }}\r\n key={0}\r\n >\r\n <div className={s(styles.header, styles.nameHeader)}>\r\n {headerList[0]}\r\n <div className={sortState.headerStates[0]} />\r\n </div>\r\n </td>\r\n )\r\n headers.push(firstHeader)\r\n\r\n for (let i = 1; i < headerList.length; i++) {\r\n let header = (\r\n <td\r\n onClick={e => {\r\n setRows(sortTable(rows, i + 1, sortState.headerStateCounts[i]))\r\n sortStates(i)\r\n }}\r\n key={i}\r\n >\r\n <div className={styles.header}>\r\n {headerList[i]}\r\n <div className={sortState.headerStates[i]} />\r\n </div>\r\n </td>\r\n )\r\n headers.push(header)\r\n }\r\n\r\n return headers\r\n }\r\n\r\n function concatenatedDept(row: any[]) {\r\n var image = placeholder\r\n for (let i = 0; i < displayImages.length; i++) {\r\n if (displayImages[i].id === row[1]) {\r\n image = displayImages[i].img\r\n }\r\n }\r\n return image ? (\r\n <td key={row[1]} className={styles.departments}>\r\n <div className={styles.imgContainer}>\r\n <img className={styles.icon} src={image} alt={''} />\r\n </div>\r\n <div className={styles.alignLeft}>\r\n <text className={s(styles.departmentName, isDarkMode ? styles.dark : {})}>{row[0]}</text>\r\n </div>\r\n </td>\r\n ) : (\r\n <td key={row[1]} className={styles.departments}>\r\n <div className={styles.imgContainer}>\r\n <img className={styles.icon} src={placeholder} alt={''} />\r\n </div>\r\n <div className={styles.alignLeft}>\r\n <div className={styles.departmentName}>{row[0]}</div>\r\n </div>\r\n </td>\r\n )\r\n }\r\n\r\n var renderedRows: any[] = []\r\n\r\n rows.forEach(row => {\r\n const transformedRow: any[] = []\r\n for (let i = 0; i < row.length; i++) {\r\n switch (i) {\r\n case 0:\r\n transformedRow[0] = concatenatedDept(row)\r\n break\r\n case 2:\r\n transformedRow[2] = (\r\n <td className={styles.alignLeft} key={i}>\r\n {row[2] === 1 ? row[2] + ' employee' : row[2] + ' employees'}\r\n </td>\r\n )\r\n break\r\n case 3:\r\n transformedRow[3] = (\r\n <td className={styles.alignLeft} key={i}>\r\n {formatCost(row[3])}\r\n </td>\r\n )\r\n break\r\n }\r\n }\r\n\r\n renderedRows.push(transformedRow)\r\n })\r\n\r\n return (\r\n <div className={s(styles.departmentsListMain, isDarkMode ? styles.listMainDark : {})}>\r\n <Group direction='row' justify='between' className={styles.group}>\r\n <div className={styles.buttonContainer}>\r\n {isAdmin && <Button text='Add' icon='add' onClick={handleClick} className={styles.addButton} />}\r\n <Button\r\n text={isArchive ? 'View Active' : 'View Archives'}\r\n onClick={() => setIsArchive(!isArchive)}\r\n className={styles.archiveButton}\r\n />\r\n </div>\r\n <FilteredSearch\r\n search={search}\r\n setSearch={setSearch}\r\n options={options}\r\n selected={selected}\r\n setSelected={setSelected}\r\n />\r\n </Group>\r\n\r\n <div className={styles.page}>\r\n <Table headers={renderHeaders()} rows={renderedRows} onRowClick={handleRowClick} />\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import React, {useState, useContext} from 'react'\r\n\r\n//components\r\nimport ReactTooltip from 'react-tooltip'\r\nimport {MdInfoOutline} from 'react-icons/md'\r\nimport {Button} from '../Button/Button'\r\n\r\n//styling\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\nimport styles from './DetailPageTable.module.css'\r\n\r\n//utilities\r\nimport {cloneDeep} from 'lodash'\r\nimport {sortTable} from '../../../utilities/quickSort'\r\nimport { ThemeContext } from '../../App';\r\n\r\nexport interface ITableItem {\r\n value: string | number\r\n id?: string | number\r\n sortBy: string | number\r\n onClick?: any\r\n tooltip?: string\r\n unavailable?: boolean\r\n}\r\n\r\ninterface ITableProps {\r\n headers: string[]\r\n rows: ITableItem[][]\r\n setRows: any\r\n className?: string\r\n style?: string\r\n edit?: boolean\r\n remove?: any\r\n sort?: boolean\r\n editRows?: any\r\n hover?: boolean\r\n}\r\n\r\nexport const DetailPageTable = (props: ITableProps) => {\r\n const {\r\n style,\r\n headers,\r\n rows,\r\n setRows,\r\n edit = false,\r\n remove,\r\n sort = true,\r\n editRows,\r\n hover = true,\r\n className = '',\r\n } = props\r\n const { isDarkMode } = useContext(ThemeContext)\r\n\r\n //initialize all the header states and styling to be not sorted\r\n const headerStates = []\r\n const headerStateCounts = []\r\n\r\n for (let i = 0; i < headers.length; i++) {\r\n headerStates.push(styles.descending) //change this to notSorted if you want neutral state to be a line\r\n headerStateCounts.push(0)\r\n }\r\n\r\n var initHeaderStateCounts = cloneDeep(headerStateCounts)\r\n var tempHeaderStates = cloneDeep(headerStates)\r\n var tempHeaderStateCounts = cloneDeep(headerStateCounts)\r\n\r\n var initHardwareState = {headerStates: headerStates, headerStateCounts: headerStateCounts}\r\n const [sortState, setSortState] = useState(initHardwareState)\r\n\r\n function sortStates(index: number) {\r\n if (sortState.headerStateCounts[index] === 0) {\r\n tempHeaderStates[index] = styles.descending\r\n tempHeaderStateCounts[index] = 1\r\n setSortState({\r\n headerStates: tempHeaderStates,\r\n headerStateCounts: tempHeaderStateCounts,\r\n })\r\n tempHeaderStateCounts = [...initHeaderStateCounts]\r\n } else if (sortState.headerStateCounts[index] === 1) {\r\n tempHeaderStates[index] = styles.ascending\r\n tempHeaderStateCounts[index] = 0\r\n setSortState({\r\n headerStates: tempHeaderStates,\r\n headerStateCounts: tempHeaderStateCounts,\r\n })\r\n tempHeaderStateCounts = [...initHeaderStateCounts]\r\n }\r\n }\r\n\r\n var renderedHeaders = []\r\n edit && renderedHeaders.push(<td key={'delete'} className={styles.editRow}></td>)\r\n for (let i = 0; i < headers.length; i++) {\r\n let header = sort ? (\r\n <td\r\n key={headers[i]}\r\n onClick={e => {\r\n setRows(sortTable(rows.slice(), i, sortState.headerStateCounts[i]))\r\n sortStates(i)\r\n }}\r\n className={s(styles.header, styles.clickCursor)}\r\n >\r\n <div className={styles.headerContainer}>\r\n {headers[i]}\r\n <div className={sortState.headerStates[i]} />\r\n </div>\r\n </td>\r\n ) : (\r\n <td key={headers[i]} className={styles.header}>\r\n <div className={styles.headerContainer}>{headers[i]}</div>\r\n </td>\r\n )\r\n\r\n renderedHeaders.push(header)\r\n }\r\n\r\n editRows && renderedHeaders.push(<td key={'edit'} className={styles.editRow}></td>)\r\n\r\n var renderedRows: any[] = []\r\n rows.forEach((row, index) => {\r\n const transformedRow: any[] = []\r\n var start = 0\r\n if (edit) {\r\n start = 1\r\n transformedRow[0] = row[0].unavailable ? (\r\n <td key={index + JSON.stringify(row)} className={styles.editRow}></td>\r\n ) : (\r\n <td\r\n onClick={e => window.confirm('Are you sure you want to remove?') && remove(row)}\r\n className={styles.editRow}\r\n >\r\n <div className={styles.delete} />\r\n <div className={styles.whiteLine} />\r\n </td>\r\n )\r\n }\r\n for (let i = 0; i < headers.length; i++) {\r\n var click = row[i] && row[i].onClick ? (s(styles.clickable, isDarkMode ? styles.clickableDark : {})) : ''\r\n transformedRow[i + start] = row[i].tooltip ? (\r\n <td\r\n key={JSON.stringify(row) + headers[i]}\r\n className={s(styles.rowData, row[0].onClick && styles.clickCursor, click)}\r\n onClick={() => row[i].onClick && row[0].id && row[i].onClick(row[i].id)}\r\n >\r\n <div data-tip={row[i].tooltip}>\r\n {row[i].value}\r\n <MdInfoOutline size={15} />\r\n </div>\r\n <ReactTooltip place='bottom' type='light' effect='float' className={styles.tooltip} />\r\n </td>\r\n ) : (\r\n <td\r\n key={JSON.stringify(row) + headers[i]}\r\n className={s(\r\n styles.rowData,\r\n isDarkMode ? styles.rowDataDark : {},\r\n row[i].onClick && styles.clickCursor,\r\n click,\r\n row[0].unavailable ? styles.unavailable : ''\r\n )}\r\n onClick={() => row[i].onClick && row[0].id && row[i].onClick(row[i].id)}\r\n >\r\n {rows[0] && row[i].value}\r\n </td>\r\n )\r\n }\r\n\r\n if (editRows !== undefined) {\r\n transformedRow[headers.length + 1] = (\r\n <td className={styles.editRow}>\r\n <Button text={'Edit'} className={styles.editButton} onClick={() => editRows(row)} />\r\n </td>\r\n )\r\n }\r\n renderedRows.push(transformedRow)\r\n })\r\n return (\r\n <table className={s(styles.table, className)}>\r\n <thead>\r\n <tr>{renderedHeaders.map(header => header)}</tr>\r\n </thead>\r\n\r\n <tbody>\r\n {renderedRows.map((row, i) => (\r\n <tr key={i} className={s(style, styles.tr, hover ? styles.hover : '')}>\r\n {row}\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n )\r\n}\r\n","import React, { useContext } from 'react'\r\nimport { History } from 'history'\r\nimport { concatStyles as s } from '../../../utilities/mikesConcat'\r\n\r\n// Components\r\nimport { Button } from '../Button/Button'\r\n\r\n// styles\r\nimport styles from './BackButton.module.css'\r\nimport { ThemeContext } from '../../App';\r\n\r\n// Types\r\ninterface IBackButtonProps {\r\n history: History\r\n className?: string\r\n textClassName?: string\r\n}\r\n\r\n// Primary Component\r\nexport const BackButton: React.SFC<IBackButtonProps> = props => {\r\n const { history, className = '', textClassName = '' } = props\r\n const { isDarkMode } = useContext(ThemeContext)\r\n\r\n var pathArray = history.location.state ? history.location.state.prev.pathname.split('/') : 'Back'\r\n var text =\r\n pathArray.length > 2\r\n ? pathArray[1][pathArray[1].length - 1] === 's'\r\n ? pathArray[1].substring(0, pathArray[1].length - 1)\r\n : pathArray[1]\r\n : pathArray[1] === 'dashboard'\r\n ? pathArray[1]\r\n : 'All ' + pathArray[1]\r\n\r\n var prevIsEdit = history.location.state && history.location.state.prev.pathname.search('edit') !== -1\r\n var prevIsSame = history.location.state.prev.pathname === history.location.pathname;\r\n\r\n if (prevIsEdit || prevIsSame) {\r\n text = 'All ' + pathArray[1]\r\n }\r\n\r\n return (\r\n <Button\r\n text={history.location.state ? text : pathArray}\r\n icon='back'\r\n onClick={() => {\r\n if (prevIsEdit || prevIsSame) {\r\n history.push(`/${pathArray[1]}`)\r\n } else {\r\n history.goBack()\r\n }\r\n }}\r\n className={s(styles.button, className)}\r\n textClassName={s(textClassName, isDarkMode ? styles.dark : {})}\r\n />\r\n )\r\n}\r\n","import React from 'react'\r\nimport styles from './DetailImage.module.css'\r\n\r\ninterface IDetailImageProps {\r\n src: string\r\n}\r\n\r\n/*\r\nDetailImage will render an image with a grey background and padding.\r\nWill scale the image as the page flexes.\r\n*/\r\nexport const DetailImage: React.FC<IDetailImageProps> = props => {\r\n const {src} = props\r\n\r\n return (\r\n <div className={styles.imgContainer}>\r\n <div className={styles.imgPadding}>\r\n <img className={styles.img} src={src} alt={''} />\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import React from 'react'\r\nimport styles from './DetailCostText.module.css'\r\nimport {Group} from '../Group/Group'\r\n\r\n\r\nexport interface ICostText {\r\n title: string,\r\n cost: string,\r\n}\r\n\r\ninterface IDetailCostText {\r\n costTexts: ICostText[]\r\n}\r\n\r\n/*\r\nComponent to display the hardware and software costs on the detail pages.\r\n*/\r\nexport const DetailCostText: React.FC<IDetailCostText> = props => {\r\n const {\r\n costTexts\r\n } = props\r\n return (\r\n <div className={styles.costText}>\r\n {costTexts.map(costText => (\r\n <Group>\r\n <p>{costText.title}</p>\r\n <div className={styles.costLine} />\r\n <p>{costText.cost}</p>\r\n </Group>\r\n ))}\r\n\r\n </div>\r\n )\r\n}\r\n","import moment from 'moment'\r\n\r\nexport const formatDate = (date: string) => {\r\n const obj = new Date(date)\r\n var month = obj.getMonth() + 1 < 10 ? '0' + (obj.getMonth() + 1) : obj.getMonth() + 1\r\n var day = obj.getDate() < 10 ? '0' + obj.getDate() : obj.getDate()\r\n const formatted = month + '/' + day + '/' + obj.getFullYear()\r\n\r\n return date ? formatted : '-'\r\n}\r\n\r\n/* Get the total number of days employed. */\r\nexport const getDays = (startDate: string, endDate?: string) => {\r\n const end = moment(endDate ? new Date(endDate) : new Date())\r\n const start = moment(new Date(startDate))\r\n var thing = end.diff(start, 'days')\r\n return thing\r\n}\r\n\r\n/* Calculate number of days and formate in years, months, day form.\r\n Adapted from a friendly SO post: https://stackoverflow.com/questions/33988129/moment-js-get-difference-in-two-birthdays-in-years-months-and-days\r\n*/\r\nexport const calculateDaysEmployed = (startDate: string, endDate?: string) => {\r\n var start = moment(new Date(startDate))\r\n var end = moment(endDate ? new Date(endDate) : new Date())\r\n\r\n var years = end.diff(start, 'year')\r\n start.add(years, 'years')\r\n var months = end.diff(start, 'months')\r\n start.add(months, 'months')\r\n var days = end.diff(start, 'days')\r\n\r\n var ret: string = ''\r\n ret += years !== 0 ? (years === 1 ? years + ' year, ' : years + ' years, ') : ''\r\n ret += months !== 0 ? (months === 1 ? months + ' month, ' : months + ' months, ') : ''\r\n ret += days === 1 ? days + ' day' : days + ' days'\r\n return ret\r\n}\r\n\r\n/* Convert the number of days employee to the hire date. */\r\nexport const calculateHireDate = (numberOfDaysEmployee: number) => {\r\n var hireDate = moment(new Date()).subtract(numberOfDaysEmployee, 'days')\r\n return hireDate.toString()\r\n}\r\n","import React, {useState, useEffect, useContext} from 'react'\r\nimport {AxiosService} from '../../../services/AxiosService/AxiosService'\r\n\r\n//components\r\nimport {Button} from '../../reusables/Button/Button'\r\nimport {Group} from '../../reusables/Group/Group'\r\nimport {DetailPageTable} from '../../reusables/DetailPageTable/DetailPageTable'\r\nimport {BackButton} from '../../reusables/BackButton/BackButton'\r\nimport {DetailImage} from '../../reusables/DetailImage/DetailImage'\r\nimport {DetailCostText} from '../../reusables/DetailCostText/DetailCostText'\r\n\r\n// Styles\r\nimport styles from './DepartmentDetailPage.module.css'\r\nimport placeholder from '../../../content/Images/Placeholders/department-placeholder.png'\r\n\r\n// Context\r\nimport {LoginContext, ThemeContext} from '../../App/App'\r\n\r\n// Utils\r\nimport {formatDate} from '../../../utilities/FormatDate'\r\nimport {format} from '../../../utilities/formatEmptyStrings'\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\nimport {checkImage} from '../../../utilities/CheckImage'\r\nimport {formatMoney} from '../../../utilities/FormatCost'\r\n\r\n// Types\r\ninterface IDepartmentDetailPageProps {\r\n history: any\r\n match: any\r\n}\r\n\r\n// Helpers\r\n\r\n// Primary Component\r\nexport const DepartmentDetailPage: React.SFC<IDepartmentDetailPageProps> = props => {\r\n const {history, match} = props\r\n\r\n const hardwareHeaders = ['Hardware']\r\n const employeeHeaders = ['Employees', 'Date Hired', 'Cost']\r\n const softwareHeaders = ['Software', '#', 'Cost']\r\n const licenseHeaders = ['Licenses', 'CALs']\r\n\r\n const [deptData, setDeptData] = useState<any>({})\r\n const [employeeRows, setEmployeeRows] = useState<any[]>([])\r\n const [softwareRows, setSoftwareRows] = useState<any[]>([])\r\n const [licenseRows, setLicenseRows] = useState<any[]>([])\r\n const [defaultHardware, setDefaultHardware] = useState<any[]>([])\r\n const [defaultSoftware, setDefaultSoftware] = useState<any[]>([])\r\n const [defaultLicenses, setDefaultLicenses] = useState<any[]>([])\r\n const [img, setImg] = useState()\r\n const [isDeleted, setIsDeleted] = useState(false)\r\n\r\n const {\r\n loginContextVariables: {isAdmin},\r\n loginContextVariables,\r\n } = useContext(LoginContext)\r\n const {isDarkMode} = useContext(ThemeContext)\r\n\r\n const handleEmployeeClick = (id: number | string) => {\r\n history.push({pathname: `/employees/detail/${id}`, state: {prev: history.location}})\r\n }\r\n const handleProgramClick = (id: number | string) => {\r\n history.push({pathname: `/programs/detail/${id}`, state: {prev: history.location}})\r\n }\r\n function renderProgramCost(isProgramCostPerYear: boolean, programCostPerYear: number) {\r\n if (isProgramCostPerYear === true) {\r\n return formatMoney(programCostPerYear) + ' /year'\r\n } else {\r\n return formatMoney(programCostPerYear / 12) + ' /mo'\r\n }\r\n }\r\n\r\n const axios = new AxiosService(loginContextVariables)\r\n\r\n async function getData() {\r\n await axios\r\n .get(`/detail/department/${match.params.id}`)\r\n .then((data: any) => {\r\n let dept: any = {\r\n // photo: data[0].picture,'\r\n employeeCount: data[0].countEmpsInDep,\r\n departmentName: data[0].departmentName,\r\n hardwareCost: data[0].totalCostOfActHardwareInDep,\r\n softwareCost: data[0].totalCostOfProgramsInDep,\r\n }\r\n setDeptData(dept)\r\n setIsDeleted(data[0].isDeleted)\r\n\r\n let e: any[][] = []\r\n data[0].listOfEmployees.map((i: any) =>\r\n e.push([\r\n {\r\n value: format(i.employeeName),\r\n sortBy: i.employeeName,\r\n id: format(i.employeeId),\r\n onClick: handleEmployeeClick,\r\n },\r\n {\r\n value: formatDate(i.hireDate),\r\n sortBy: i.hireDate,\r\n },\r\n {\r\n //all programCostForEmp is per month\r\n value:\r\n 'HW: ' +\r\n formatMoney(i.hardwareCostForEmp) +\r\n ' | SW: ' +\r\n formatMoney(i.programCostForEmp) +\r\n ' /mo',\r\n sortBy: i.hardwareCostForEmp,\r\n },\r\n ])\r\n )\r\n setEmployeeRows(e)\r\n\r\n let sw: any[] = []\r\n data[0].listOfTablePrograms.map((\r\n i: any //not programs - actually software\r\n ) =>\r\n sw.push([\r\n {\r\n value: format(i.programName),\r\n sortBy: i.programName,\r\n id: format(i.programName),\r\n onClick: handleProgramClick,\r\n },\r\n {\r\n value: format(i.programCount),\r\n sortBy: i.programCount,\r\n },\r\n {\r\n value: renderProgramCost(i.programIsCostPerYear, i.programCostPerYear),\r\n sortBy: i.programCostPerYear,\r\n },\r\n ])\r\n )\r\n setSoftwareRows(sw)\r\n\r\n let l: any[] = []\r\n data[0].licensesList.map((i: any) =>\r\n l.push([\r\n {\r\n value: format(i.progName),\r\n sortBy: i.progName,\r\n id: format(i.progName),\r\n onClick: handleProgramClick,\r\n },\r\n {\r\n value: format(i.countOfThatLicense),\r\n sortBy: i.countOfThatLicense,\r\n },\r\n ])\r\n )\r\n setLicenseRows(l)\r\n\r\n let dhw: any[] = []\r\n if (data[0].defaultHardware !== null) {\r\n data[0].defaultHardware.map((i: any) => dhw.push([{value: format(i), sortBy: i}]))\r\n }\r\n setDefaultHardware(dhw)\r\n\r\n let dsw: any[] = []\r\n if (data[0].defaultSoftware !== null) {\r\n data[0].defaultSoftware.map((i: any) => dsw.push([{value: format(i), sortBy: i}]))\r\n }\r\n setDefaultSoftware(dsw)\r\n\r\n let dl: any[] = []\r\n if (data[0].defaultLicenses !== null) {\r\n data[0].defaultLicenses.map((i: any) => dl.push([{value: format(i), sortBy: i}]))\r\n }\r\n setDefaultLicenses(dl)\r\n\r\n checkImage(data[0].picture, axios, placeholder)\r\n .then(image => setImg(image))\r\n .catch(err => console.error(err))\r\n })\r\n .catch((err: any) => console.error(err))\r\n }\r\n\r\n useEffect(() => {\r\n getData()\r\n }, [])\r\n\r\n async function handleArchive() {\r\n if (\r\n window.confirm(`Are you sure you want to ${isDeleted ? 'recover' : 'archive'} ${deptData.departmentName}?`)\r\n ) {\r\n await axios.put(`${isDeleted ? 'recover' : 'archive'}/department/${match.params.id}`, {})\r\n history.push({\r\n pathname: `/departments${isDeleted ? `/edit/${match.params.id}` : ''}`,\r\n state: {prev: history.location},\r\n })\r\n }\r\n }\r\n\r\n return (\r\n <div className={s(styles.detailMain, isDarkMode ? styles.backgroundDark : {})}>\r\n <div className={styles.columns}>\r\n {/* column 1 */}\r\n <div className={styles.firstColumn}>\r\n <BackButton history={history} className={styles.backButton} />\r\n <DetailImage src={img} />\r\n <DetailCostText\r\n costTexts={[\r\n {title: 'Software', cost: `${formatMoney(deptData.softwareCost)} /month`},\r\n {title: 'Hardware', cost: `${formatMoney(deptData.hardwareCost)}`},\r\n ]}\r\n />\r\n </div>\r\n {/* column 2 */}\r\n <div className={styles.secondColumn}>\r\n {isAdmin && (\r\n <Group direction='row' justify='start' className={styles.group}>\r\n {!isDeleted && (\r\n <Button\r\n text='Edit'\r\n icon='edit'\r\n onClick={() => {\r\n history.push({\r\n pathname: '/departments/edit/' + match.params.id,\r\n state: {prev: history.location},\r\n })\r\n }}\r\n className={styles.editbutton}\r\n />\r\n )}\r\n\r\n <Button\r\n text={isDeleted ? 'Recover' : 'Archive'}\r\n icon='archive'\r\n onClick={handleArchive}\r\n className={styles.archivebutton}\r\n />\r\n </Group>\r\n )}\r\n <div className={styles.titleText}>\r\n <div className={s(styles.deptName, isDarkMode ? styles.textDark : {})}>\r\n {deptData.departmentName}\r\n </div>\r\n <div className={styles.deptText}>{deptData.employeeCount} employees</div>\r\n </div>\r\n\r\n <div className={s(styles.title, isDarkMode ? styles.textDark : {})}>Department Breakdown</div>\r\n\r\n <DetailPageTable\r\n headers={employeeHeaders}\r\n rows={employeeRows}\r\n setRows={setEmployeeRows}\r\n className={styles.tableMargin}\r\n />\r\n\r\n <DetailPageTable\r\n headers={softwareHeaders}\r\n rows={softwareRows}\r\n setRows={setSoftwareRows}\r\n className={styles.tableMargin}\r\n />\r\n\r\n <DetailPageTable\r\n headers={licenseHeaders}\r\n rows={licenseRows}\r\n setRows={setLicenseRows}\r\n className={styles.tableMargin}\r\n />\r\n\r\n <div className={styles.line} />\r\n <div className={s(styles.title, isDarkMode ? styles.textDark : {})}>Department Defaults</div>\r\n\r\n {/* default hardware */}\r\n <div className={styles.tableRow}>\r\n <div className={s(styles.table, styles.paddingRight)}>\r\n <DetailPageTable\r\n headers={[hardwareHeaders[0]]}\r\n rows={defaultHardware}\r\n setRows={setDefaultHardware}\r\n />\r\n </div>\r\n {/* default software */}\r\n <div className={styles.table}>\r\n <DetailPageTable\r\n headers={[softwareHeaders[0]]}\r\n rows={defaultSoftware}\r\n setRows={setDefaultSoftware}\r\n />\r\n </div>\r\n </div>\r\n {/* default licenses */}\r\n <div className={styles.tableRow}>\r\n <div className={s(styles.table, styles.paddingRight)}>\r\n <DetailPageTable\r\n headers={[licenseHeaders[0]]}\r\n rows={defaultLicenses}\r\n setRows={setDefaultLicenses}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import React, {useState, useEffect, useContext} from 'react'\r\nimport {AxiosService} from '../../../services/AxiosService/AxiosService'\r\nimport {sortTable} from '../../../utilities/quickSort'\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\nimport {cloneDeep} from 'lodash'\r\nimport {format} from '../../../utilities/formatEmptyStrings'\r\nimport {formatDate, getDays, calculateDaysEmployed, calculateHireDate} from '../../../utilities/FormatDate'\r\nimport {History} from 'history'\r\nimport {checkImage} from '../../../utilities/CheckImage'\r\nimport {searchFilter} from '../../../utilities/SearchFilter'\r\nimport {formatMoney} from '../../../utilities/FormatCost'\r\n\r\n// Components\r\nimport {FilteredSearch} from '../../reusables/FilteredSearch/FilteredSearch'\r\nimport {Button} from '../../reusables/Button/Button'\r\nimport {Group} from '../../reusables/Group/Group'\r\nimport {Table} from '../../reusables/Table/Table'\r\n\r\n// Context\r\nimport {LoginContext, ThemeContext} from '../../App/App'\r\n\r\n// Styles\r\nimport styles from './EmployeesListPage.module.css'\r\nimport placeholder from '../../../content/Images/Placeholders/employee-placeholder.png'\r\n\r\n// Types\r\ninterface IEmployeesListPageProps {\r\n history: History\r\n}\r\ninterface IEmployeeData {\r\n name: string\r\n dateHired: string\r\n cost: string\r\n hwCost: number\r\n swCost: number\r\n role: string\r\n icon: string\r\n id: number\r\n hardware: string\r\n programs: string\r\n daysEmployed: number | string\r\n}\r\ninterface IPulledData {\r\n firstName?: string\r\n lastName?: string\r\n employeeName: string\r\n archiveDate: string\r\n hireDate: string\r\n hardwareCostForEmp: number\r\n programCostForEmp: number\r\n role: string\r\n photo: string\r\n employeeId: number\r\n hardwareList: []\r\n progForEmp: []\r\n}\r\n\r\n// Primary Component\r\nexport const EmployeesListPage: React.SFC<IEmployeesListPageProps> = props => {\r\n const {history} = props\r\n const {\r\n loginContextVariables: {isAdmin},\r\n loginContextVariables,\r\n } = useContext(LoginContext)\r\n const axios = new AxiosService(loginContextVariables)\r\n const {isDarkMode} = useContext(ThemeContext)\r\n\r\n // state\r\n const [listData, setListData] = useState<IEmployeeData[]>([])\r\n const [filteredData, setFilteredData] = useState<IEmployeeData[]>([]) //this is what is used in the list\r\n const [search, setSearch] = useState('')\r\n const [selected, setSelected] = useState({label: 'Employees', value: 'name'})\r\n\r\n const [archivedData, setArchivedData] = useState<IEmployeeData[]>([])\r\n const [isArchive, setIsArchive] = useState(false)\r\n\r\n const columns = ['name', 'role', 'dateHired', 'daysEmployed', 'cost', 'hardware', 'programs']\r\n var headers = ['Employees', 'Role', 'Date Hired', 'Days Employed', 'Cost', 'Hardware', 'Programs']\r\n var headerList: string[] = []\r\n const options = columns.map((c, i) => ({label: headers[i], value: c}))\r\n\r\n const [displayImages, setDisplayImages] = useState<{id: number; img: string}[]>([])\r\n\r\n async function getData() {\r\n var imagePromises: any[] = []\r\n await axios\r\n .get('/list/employees')\r\n .then((data: IPulledData[]) => {\r\n let employees: IEmployeeData[] = []\r\n if (data != undefined) {\r\n data.forEach((i: IPulledData) => {\r\n employees.push({\r\n name: format(i.employeeName),\r\n dateHired: i.hireDate,\r\n cost: formatCost(i.hardwareCostForEmp, i.programCostForEmp),\r\n hwCost: i.hardwareCostForEmp,\r\n swCost: i.programCostForEmp,\r\n role: format(i.role),\r\n icon: format(i.photo),\r\n id: i.employeeId,\r\n\r\n //for searching\r\n hardware: i.hardwareList ? i.hardwareList.join(', ') : '',\r\n programs: i.progForEmp ? i.progForEmp.join(', ') : '',\r\n daysEmployed: getDays(i.hireDate),\r\n })\r\n\r\n imagePromises.push(\r\n checkImage(i.photo, axios, placeholder).then(image => {\r\n return {id: i.employeeId, img: image}\r\n })\r\n )\r\n })\r\n }\r\n setListData(employees)\r\n })\r\n .catch((err: any) => console.error(err))\r\n\r\n await Promise.all(imagePromises)\r\n .then(response => setDisplayImages(response))\r\n .catch((err: any) => console.error(err))\r\n\r\n await axios\r\n .get('/archivedList/employee')\r\n .then((data: IPulledData[]) => {\r\n let employees: any[] = []\r\n data.map((i: IPulledData) =>\r\n employees.push({\r\n name: format(i.firstName + ' ' + i.lastName),\r\n dateHired: formatDate(i.hireDate),\r\n daysEmployed: calculateDaysEmployed(i.hireDate, i.archiveDate),\r\n space: 0,\r\n space4: 0,\r\n role: format(i.role),\r\n icon: format(i.photo),\r\n id: i.employeeId,\r\n space1: 0,\r\n\r\n space2: 0,\r\n dateArchived: formatDate(i.archiveDate),\r\n })\r\n )\r\n setArchivedData(employees)\r\n })\r\n .catch((err: any) => console.error(err))\r\n\r\n if (isArchive) {\r\n headers = ['Employees', 'Role', 'Date Hired', 'Date Archived', 'Days Employed']\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n getData()\r\n }, [])\r\n\r\n useEffect(() => {\r\n setFilteredData(searchFilter(isArchive ? archivedData : listData, selected.value, search))\r\n }, [search, selected, listData, archivedData, isArchive])\r\n\r\n const formatCost = (hwCpost: number, progCost: number) => {\r\n return 'HW: ' + formatMoney(hwCpost) + ' | SW: ' + formatMoney(progCost) + ' /mo'\r\n }\r\n\r\n const handleClick = () => {\r\n history.push({pathname: `/employees/edit/new`, state: {prev: history.location}})\r\n }\r\n\r\n const handleRowClick = (row: any) => {\r\n history.push({pathname: `/employees/detail/${row[0].key}`, state: {prev: history.location}})\r\n }\r\n\r\n //changes it from array of objects to matrix\r\n\r\n var filteredRows: any[] = []\r\n filteredData.forEach(rowObj => {\r\n filteredRows.push(Object.values(rowObj))\r\n })\r\n\r\n const [rows, setRows] = useState(filteredRows)\r\n useEffect(() => {\r\n setRows(filteredRows)\r\n }, [filteredData])\r\n\r\n headerList = isArchive\r\n ? (headerList = ['Employees', 'Date Hired', 'Date Archived', 'Days Employed'])\r\n : ['Employees', 'Date Hired', 'Days Employed', 'Cost']\r\n\r\n //-------------- this will all be the same -------------\r\n const headerStates = [] //styling for arrow sort state\r\n const headerStateCounts = [] //1 or 0 for ascending or descending sort state\r\n\r\n //initialize all the header states and styling to be not sorted\r\n for (let i = 0; i < headerList.length; i++) {\r\n headerStates.push(styles.descending)\r\n headerStateCounts.push(0)\r\n }\r\n var initHeaderStateCounts = cloneDeep(headerStateCounts)\r\n var tempHeaderStates = cloneDeep(headerStates)\r\n var tempHeaderStateCounts = cloneDeep(headerStateCounts)\r\n\r\n var initState = {headerStates, headerStateCounts}\r\n const [sortState, setSortState] = useState(initState)\r\n\r\n function sortStates(index: number) {\r\n if (sortState.headerStateCounts[index] === 0) {\r\n //already descending or neutral\r\n tempHeaderStates[index] = styles.descending\r\n tempHeaderStateCounts[index] = 1\r\n setSortState({headerStates: tempHeaderStates, headerStateCounts: tempHeaderStateCounts})\r\n tempHeaderStateCounts = [...initHeaderStateCounts]\r\n } else if (sortState.headerStateCounts[index] === 1) {\r\n //already ascending\r\n tempHeaderStates[index] = styles.ascending\r\n tempHeaderStateCounts[index] = 0\r\n setSortState({headerStates: tempHeaderStates, headerStateCounts: tempHeaderStateCounts})\r\n tempHeaderStateCounts = [...initHeaderStateCounts]\r\n }\r\n }\r\n const renderHeaders = () => {\r\n var headers = []\r\n\r\n var firstHeader = (\r\n <td\r\n key={headerList[0]}\r\n onClick={e => {\r\n setRows(sortTable(rows, 0, sortState.headerStateCounts[0]))\r\n sortStates(0)\r\n }}\r\n >\r\n <div className={s(styles.header, styles.nameHeader)}>\r\n {headerList[0]}\r\n <div className={sortState.headerStates[0]} />\r\n </div>\r\n </td>\r\n )\r\n headers.push(firstHeader)\r\n\r\n for (let i = 1; i < headerList.length; i++) {\r\n let header =\r\n i === 2 ? (\r\n <td\r\n key={headerList[i]}\r\n onClick={e => {\r\n setRows(sortTable(rows, i + 8, sortState.headerStateCounts[i]))\r\n sortStates(i)\r\n }}\r\n >\r\n <div className={styles.header}>\r\n {headerList[i]}\r\n <div className={sortState.headerStates[i]} />\r\n </div>\r\n </td>\r\n ) : (\r\n <td\r\n key={headerList[i]}\r\n onClick={e => {\r\n setRows(sortTable(rows, i, sortState.headerStateCounts[i]))\r\n sortStates(i)\r\n }}\r\n >\r\n <div className={styles.header}>\r\n {headerList[i]}\r\n <div className={sortState.headerStates[i]} />\r\n </div>\r\n </td>\r\n )\r\n headers.push(header)\r\n }\r\n\r\n return headers\r\n }\r\n\r\n function concatenatedName(row: any[]) {\r\n var image = placeholder\r\n for (let i = 0; i < displayImages.length; i++) {\r\n if (displayImages[i].id === row[7]) {\r\n image = displayImages[i].img\r\n }\r\n }\r\n return image ? (\r\n <td key={row[7]} className={styles.employees}>\r\n <div className={styles.imgContainer}>\r\n <img className={styles.icon} src={image} alt={''} />\r\n </div>\r\n <div className={styles.alignLeft}>\r\n <text className={s(styles.employeeName, isDarkMode ? styles.employeeNameDark : {})}>{row[0]}</text>{' '}\r\n <br />\r\n <text className={styles.role}>{row[5]}</text>\r\n </div>\r\n </td>\r\n ) : (\r\n <td key={row[7]} className={styles.employees}>\r\n <div className={styles.imgContainer}>\r\n <img className={styles.icon} src={placeholder} alt={''} />\r\n </div>\r\n <div className={styles.alignLeft}>\r\n <text className={styles.employeeName}>{row[0]}</text> <br />\r\n <text className={styles.role}>{row[5]}</text>\r\n </div>\r\n </td>\r\n )\r\n }\r\n var renderedRows: any[] = []\r\n rows.forEach(row => {\r\n const transformedRow: any[] = []\r\n for (let i = 0; i < row.length; i++) {\r\n switch (i) {\r\n case 0:\r\n transformedRow[0] = concatenatedName(row)\r\n break\r\n case 1:\r\n transformedRow[1] = (\r\n <td key={i + row[1]} className={styles.alignLeft}>\r\n {formatDate(row[1])}\r\n </td>\r\n )\r\n break\r\n case 2:\r\n transformedRow[2] = (\r\n <td key={i + row[10]} className={styles.alignLeft}>\r\n {isArchive ? row[10] : calculateDaysEmployed(calculateHireDate(row[10]))}\r\n </td>\r\n )\r\n break\r\n case 3:\r\n transformedRow[3] = (\r\n <td key={i + row[2]} className={styles.alignLeft}>\r\n {row[2]}\r\n </td>\r\n )\r\n break\r\n }\r\n }\r\n\r\n renderedRows.push(transformedRow)\r\n })\r\n\r\n return (\r\n <div className={s(styles.employeesListMain, isDarkMode ? styles.employeesListMainDark : {})}>\r\n <Group direction='row' justify='between' className={styles.group}>\r\n <div className={styles.buttonContainer}>\r\n {isAdmin && <Button text='Add' icon='add' onClick={handleClick} className={styles.addButton} />}\r\n <Button\r\n text={isArchive ? 'View Active' : 'View Archives'}\r\n onClick={() => setIsArchive(!isArchive)}\r\n className={styles.archiveButton}\r\n />\r\n </div>\r\n\r\n <FilteredSearch\r\n search={search}\r\n setSearch={setSearch}\r\n options={options}\r\n selected={selected}\r\n setSelected={setSelected}\r\n />\r\n </Group>\r\n\r\n <Table headers={renderHeaders()} rows={renderedRows} onRowClick={handleRowClick} />\r\n </div>\r\n )\r\n}\r\n","import React, {useState, useEffect, useContext} from 'react'\r\nimport {AxiosService} from '../../../services/AxiosService/AxiosService'\r\nimport {History} from 'history'\r\nimport {match} from 'react-router-dom'\r\n\r\n// Components\r\nimport {DetailPageTable, ITableItem} from '../../reusables/DetailPageTable/DetailPageTable'\r\nimport {Button} from '../../reusables/Button/Button'\r\nimport {Group} from '../../reusables/Group/Group'\r\nimport {BackButton} from '../../reusables/BackButton/BackButton'\r\nimport {DetailImage} from '../../reusables/DetailImage/DetailImage'\r\nimport {DetailCostText} from '../../reusables/DetailCostText/DetailCostText'\r\n\r\n// Utils\r\nimport {formatDate, calculateDaysEmployed} from '../../../utilities/FormatDate'\r\nimport {format} from '../../../utilities/formatEmptyStrings'\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\nimport {checkImage} from '../../../utilities/CheckImage'\r\nimport {formatMoney} from '../../../utilities/FormatCost'\r\n\r\n// Styles\r\nimport styles from './EmployeeDetailPage.module.css'\r\nimport placeholder from '../../../content/Images/Placeholders/employee-placeholder.png'\r\n\r\n// Context\r\nimport {LoginContext, ThemeContext} from '../../App/App'\r\n\r\n// Types\r\ninterface IEmployeeDetailPageProps {\r\n match: match<{id: string}>\r\n history: History\r\n}\r\n\r\ninterface IUser {\r\n name: string\r\n department: string\r\n deptId: number\r\n role: string\r\n hireDate: string\r\n hwCost: number\r\n swCost: number\r\n archiveDate: string\r\n description: string\r\n email: string\r\n}\r\n\r\n// Primary Component\r\nexport const EmployeeDetailPage: React.SFC<IEmployeeDetailPageProps> = props => {\r\n const {history, match} = props\r\n\r\n const {\r\n loginContextVariables: {isAdmin},\r\n loginContextVariables,\r\n } = useContext(LoginContext)\r\n const {isDarkMode} = useContext(ThemeContext)\r\n\r\n const axios = new AxiosService(loginContextVariables)\r\n const [isDeleted, setIsDeleted] = useState(false)\r\n const [img, setImg] = useState('')\r\n const [userData, setUserData] = useState<IUser>({\r\n name: '',\r\n department: '',\r\n deptId: -1,\r\n role: '',\r\n hireDate: '',\r\n hwCost: 0,\r\n swCost: 0,\r\n archiveDate: '',\r\n description: '',\r\n email: '',\r\n })\r\n const [hardwareRows, setHardwareRows] = useState<ITableItem[][]>([])\r\n const [softwareRows, setSoftwareRows] = useState<ITableItem[][]>([])\r\n const [licenseRows, setLicenseRows] = useState<ITableItem[][]>([])\r\n\r\n const hardwareHeaders = ['Hardware', 'Serial Number', 'MFG Tag', 'Purchase Date']\r\n const softwareHeaders = ['Software', 'Key/Username', 'Monthly Cost']\r\n const licenseHeaders = ['Licenses', 'Key/Username', 'Monthly Cost', 'CALs']\r\n\r\n const formatToolTip = (obj: any) => obj.cpu + ' | ' + obj.ramgb + 'GB | ' + obj.ssdgb + 'GB'\r\n\r\n const handleHardwareClick = (id: number | string) => {\r\n history.push({pathname: `/hardware/detail/${id}`, state: {prev: history.location}})\r\n }\r\n\r\n const handleProgramClick = (id: number | string) => {\r\n history.push({pathname: `/programs/detail/${id}`, state: {prev: history.location}})\r\n }\r\n\r\n async function getData() {\r\n await axios\r\n .get(`/detail/employee/${match.params.id}`)\r\n .then((data: any) => {\r\n let user: IUser = {\r\n name: data[0].firstName + ' ' + data[0].lastName,\r\n department: data[0].department,\r\n deptId: data[0].departmentID,\r\n role: data[0].role,\r\n hireDate: formatDate(data[0].hireDate),\r\n hwCost: data[0].totalHardwareCost,\r\n swCost: data[0].totalProgramCostMonthly,\r\n archiveDate: formatDate(data[0].archiveDate), //TODO: make sure these were added\r\n description: data[0].textField,\r\n email: format(data[0].email),\r\n }\r\n\r\n setUserData(user)\r\n setIsDeleted(data[0].isDeleted)\r\n\r\n let hw: ITableItem[][] = []\r\n data[0].hardware.map((i: any) =>\r\n hw.push([\r\n {\r\n value: format(i.make + ' ' + i.model),\r\n id: format(\r\n (i.type.toLowerCase() === 'computer' ? 'laptop' : i.type.toLowerCase()) + '/' + i.id\r\n ),\r\n tooltip: i.tooltip.cpu ? formatToolTip(i.tooltip) : '',\r\n onClick: handleHardwareClick,\r\n sortBy: i.make + ' ' + i.model,\r\n },\r\n {value: format(i.serialNumber), id: format(i.id), sortBy: i.serialNumber},\r\n {value: format(i.mfg), id: format(i.id), sortBy: i.mfg},\r\n {value: formatDate(i.purchaseDate), id: format(i.id), sortBy: i.purchaseDate},\r\n ])\r\n )\r\n setHardwareRows(hw)\r\n\r\n let sw: ITableItem[][] = []\r\n data[0].software.map((i: any) =>\r\n sw.push([\r\n {\r\n value: format(i.name),\r\n id: format(i.id),\r\n onClick: handleProgramClick,\r\n sortBy: i.name,\r\n },\r\n {value: format(i.licenseKey), id: format(i.id), sortBy: i.licenseKey},\r\n {\r\n value: formatMoney(i.costPerMonth),\r\n id: format(i.id),\r\n sortBy: i.costPerMonth,\r\n },\r\n ])\r\n )\r\n setSoftwareRows(sw)\r\n\r\n let l: ITableItem[][] = []\r\n data[0].licenses.map((i: any) =>\r\n l.push([\r\n {\r\n value: format(i.name),\r\n id: format(i.id),\r\n onClick: handleProgramClick,\r\n sortBy: i.name,\r\n },\r\n {\r\n value: format(i.licensesKey),\r\n id: format(i.id),\r\n sortBy: format(i.licensesKey),\r\n },\r\n {\r\n value: formatMoney(i.costPerMonth),\r\n sortBy: i.costPerMonth,\r\n },\r\n {value: format(i.licensesCount), id: format(i.id), sortBy: i.licensesCount},\r\n ])\r\n )\r\n setLicenseRows(l)\r\n\r\n checkImage(data[0].picture, axios, placeholder)\r\n .then(image => setImg(image))\r\n .catch(err => console.error(err))\r\n })\r\n .catch((err: any) => console.error(err))\r\n }\r\n\r\n useEffect(() => {\r\n getData()\r\n }, [])\r\n\r\n async function handleArchive() {\r\n if (window.confirm(`Are you sure you want to ${isDeleted ? 'recover' : 'archive'} ${userData.name}?`)) {\r\n await axios\r\n .put(`/${isDeleted ? 'recover' : 'archive'}/employee/${match.params.id}`, {})\r\n .catch((err: any) => console.error(err))\r\n history.push({\r\n pathname: `/employees${isDeleted ? '/edit/' + match.params.id : ''}`,\r\n state: {prev: history.location},\r\n })\r\n }\r\n }\r\n\r\n return (\r\n <div className={s(styles.empDetailMain, isDarkMode ? styles.backgroundDark : {})}>\r\n <div className={styles.columns}>\r\n {/* column 1 */}\r\n <div className={styles.firstColumn}>\r\n <BackButton history={history} className={styles.backButton} />\r\n <DetailImage src={img} />\r\n <DetailCostText\r\n costTexts={[\r\n {title: `Software`, cost: `${formatMoney(userData.swCost)} /month`},\r\n {title: `Hardware`, cost: `${formatMoney(userData.hwCost)}`},\r\n ]}\r\n />\r\n </div>\r\n {/* column 2 */}\r\n <div className={styles.secondColumn}>\r\n {isAdmin && (\r\n <Group direction='row' justify='start' className={styles.group}>\r\n {!isDeleted && (\r\n <Button\r\n text='Edit'\r\n icon='edit'\r\n onClick={() => {\r\n history.push({\r\n pathname: '/employees/edit/' + match.params.id,\r\n state: {prev: history.location},\r\n })\r\n }}\r\n className={styles.editbutton}\r\n />\r\n )}\r\n\r\n <Button\r\n text={isDeleted ? 'Recover' : 'Archive'}\r\n icon='archive'\r\n onClick={handleArchive}\r\n className={styles.archivebutton}\r\n />\r\n </Group>\r\n )}\r\n <div className={styles.titleText}>\r\n <div className={s(styles.employeeName, isDarkMode ? styles.employeeNameDark : {})}>\r\n {userData.name}\r\n </div>\r\n <div className={styles.employeeText}>{userData.email}</div>\r\n <div className={styles.employeeText}>\r\n <div\r\n className={s(styles.deptText, isDarkMode ? styles.deptTextDark : {})}\r\n onClick={() => {\r\n history.push({\r\n pathname: '/departments/detail/' + userData.deptId,\r\n state: {prev: history.location},\r\n })\r\n }}\r\n >\r\n {userData.department}\r\n </div>{' '}\r\n | {userData.role}\r\n </div>\r\n\r\n <div className={styles.employeeText}>\r\n Start Date: {userData.hireDate} |{' '}\r\n {userData.archiveDate !== '-'\r\n ? `End Date: ${userData.archiveDate}`\r\n : calculateDaysEmployed(userData.hireDate)}\r\n </div>\r\n\r\n {userData.archiveDate !== '-' && (\r\n <div className={styles.employeeText}>{calculateDaysEmployed(userData.hireDate)}</div>\r\n )}\r\n </div>\r\n <DetailPageTable\r\n headers={hardwareHeaders}\r\n rows={hardwareRows}\r\n setRows={setHardwareRows}\r\n className={styles.table}\r\n />\r\n\r\n <DetailPageTable\r\n headers={softwareHeaders}\r\n rows={softwareRows}\r\n setRows={setSoftwareRows}\r\n className={styles.table}\r\n />\r\n\r\n <DetailPageTable\r\n headers={licenseHeaders}\r\n rows={licenseRows}\r\n setRows={setLicenseRows}\r\n className={styles.table}\r\n />\r\n\r\n <div className={styles.descriptionContainer}>\r\n <div className={styles.descriptionTitle}>Description</div>\r\n <div className={styles.descriptionBody}>{userData.description}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import React, {useState, useEffect, useContext} from 'react'\r\nimport {sortTable} from '../../../utilities/quickSort'\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\nimport {cloneDeep} from 'lodash'\r\nimport {AxiosService} from '../../../services/AxiosService/AxiosService'\r\nimport {format} from '../../../utilities/formatEmptyStrings'\r\nimport {checkImage} from '../../../utilities/CheckImage'\r\nimport {searchFilter} from '../../../utilities/SearchFilter'\r\n\r\nimport {formatDate} from '../../../utilities/FormatDate'\r\n\r\n// Components\r\nimport {FilteredSearch} from '../../reusables/FilteredSearch/FilteredSearch'\r\nimport {Button} from '../../reusables/Button/Button'\r\nimport {Group} from '../../reusables/Group/Group'\r\nimport {Table} from '../../reusables/Table/Table'\r\nimport {History} from 'history'\r\n\r\n// Context\r\nimport {LoginContext, ThemeContext} from '../../App/App'\r\n\r\n// Styles\r\nimport styles from './HardwareListPage.module.css'\r\nimport placeholder from '../../../content/Images/Placeholders/computer-placeholder.png'\r\n\r\n// Types\r\ninterface ILaptopsListPageProps {\r\n history: History\r\n}\r\ninterface ILaptopData {\r\n make: string\r\n id: number\r\n cpu: number\r\n ram: number\r\n ssd: number\r\n assigned: string\r\n mfgtag: string\r\n icon: string\r\n model: string\r\n endOfLife: string\r\n}\r\ninterface IPulledData {\r\n make: string\r\n computerId: number\r\n cpu: number\r\n ramgb: number\r\n ssdgb: number\r\n isAssigned: boolean\r\n employeeFirstName: string\r\n employeeLastName: string\r\n mfg: string\r\n icon: string\r\n model: string\r\n endOfLife: string\r\n}\r\n\r\n// Primary Component\r\nexport const LaptopsListPage: React.SFC<ILaptopsListPageProps> = props => {\r\n const {history} = props\r\n const {\r\n loginContextVariables,\r\n loginContextVariables: {isAdmin},\r\n } = useContext(LoginContext)\r\n const axios = new AxiosService(loginContextVariables)\r\n const {isDarkMode} = useContext(ThemeContext)\r\n\r\n // state\r\n const [listData, setListData] = useState<any[]>([])\r\n const [archivedData, setArchivedData] = useState<any[]>([])\r\n const [filteredData, setFilteredData] = useState<any[]>([]) //this is what is used in the list\r\n const [search, setSearch] = useState('')\r\n const [selected, setSelected] = useState({label: 'Make', value: 'make'})\r\n\r\n const columns = ['make', 'cpu', 'ram', 'ssd', 'assigned', 'mfgtag', 'model', 'endOfLife']\r\n const searchByHeaders = ['Make', 'CPU', 'RAM', 'SSD', 'Assigned To', 'MFG Tag', 'Model', 'EoL']\r\n const headerList = ['Make & Model', 'CPU', 'RAM', 'SSD', 'Assigned To', 'MFG Tag', 'EoL']\r\n const options = columns.map((c, i) => ({label: searchByHeaders[i], value: c}))\r\n const [isArchive, setIsArchive] = useState(false)\r\n\r\n const [displayImages, setDisplayImages] = useState<{id: number; img: string}[]>([])\r\n\r\n async function getData() {\r\n var imagePromises: any[] = []\r\n await axios\r\n .get('/list/laptops')\r\n .then((data: IPulledData[]) => {\r\n const laptops: ILaptopData[] = []\r\n data.forEach((i: IPulledData) => {\r\n laptops.push({\r\n make: format(i.make),\r\n id: i.computerId,\r\n cpu: i.cpu,\r\n ram: i.ramgb,\r\n ssd: i.ssdgb,\r\n assigned: format(i.isAssigned ? i.employeeFirstName + ' ' + i.employeeLastName : '-'),\r\n mfgtag: format(i.mfg),\r\n icon: format(i.icon),\r\n model: format(i.model),\r\n endOfLife: formatDate(i.endOfLife),\r\n })\r\n\r\n imagePromises.push(\r\n checkImage(i.icon, axios, placeholder).then(image => {\r\n return {id: i.computerId, img: image}\r\n })\r\n )\r\n })\r\n setListData(laptops)\r\n })\r\n .catch((err: any) => console.error(err))\r\n\r\n await Promise.all(imagePromises)\r\n .then(response => setDisplayImages(response))\r\n .catch((err: any) => console.error(err))\r\n\r\n await axios\r\n .get(`/archivedList/laptop`)\r\n .then((data: any) => {\r\n const laptops: ILaptopData[] = []\r\n data.map((i: IPulledData) =>\r\n laptops.push({\r\n make: format(i.make),\r\n id: i.computerId,\r\n cpu: i.cpu,\r\n ram: i.ramgb,\r\n ssd: i.ssdgb,\r\n assigned: format(i.isAssigned ? i.employeeFirstName + ' ' + i.employeeLastName : '-'),\r\n mfgtag: format(i.mfg),\r\n icon: format(i.icon),\r\n model: format(i.model),\r\n endOfLife: formatDate(i.endOfLife),\r\n })\r\n )\r\n setArchivedData(laptops)\r\n })\r\n .catch((err: any) => console.error(err))\r\n }\r\n\r\n useEffect(() => {\r\n getData()\r\n }, [])\r\n\r\n useEffect(() => {\r\n setFilteredData(searchFilter(isArchive ? archivedData : listData, selected.value, search))\r\n }, [search, selected, listData, archivedData, isArchive])\r\n\r\n const handleClick = () => {\r\n history.push({pathname: '/hardware/edit/laptop/new', state: {prev: history.location}})\r\n }\r\n\r\n const handleRowClick = (row: any) => {\r\n history.push({pathname: `hardware/detail/laptop/${row[0].key}`, state: {prev: history.location}})\r\n }\r\n\r\n var filteredRows: any[] = []\r\n filteredData.forEach(rowObj => {\r\n filteredRows.push(Object.values(rowObj))\r\n })\r\n\r\n const [rows, setRows] = useState(filteredRows)\r\n useEffect(() => {\r\n setRows(filteredRows)\r\n }, [filteredData])\r\n\r\n //-------------- this will all be the same -------------\r\n const headerStates = []\r\n const headerStateCounts = []\r\n\r\n //initialize all the header states and styling to be not sorted\r\n for (let i = 0; i < headerList.length; i++) {\r\n headerStates.push(styles.descending)\r\n headerStateCounts.push(0)\r\n }\r\n\r\n var initHeaderStateCounts = cloneDeep(headerStateCounts)\r\n var tempHeaderStates = cloneDeep(headerStates)\r\n var tempHeaderStateCounts = cloneDeep(headerStateCounts)\r\n\r\n var initState = {headerStates, headerStateCounts}\r\n const [sortState, setSortState] = useState(initState)\r\n\r\n function sortStates(index: number) {\r\n if (sortState.headerStateCounts[index] === 0) {\r\n tempHeaderStates[index] = styles.descending\r\n tempHeaderStateCounts[index] = 1\r\n setSortState({headerStates: tempHeaderStates, headerStateCounts: tempHeaderStateCounts})\r\n tempHeaderStateCounts = [...initHeaderStateCounts]\r\n } else if (sortState.headerStateCounts[index] === 1) {\r\n tempHeaderStates[index] = styles.ascending\r\n tempHeaderStateCounts[index] = 0\r\n setSortState({headerStates: tempHeaderStates, headerStateCounts: tempHeaderStateCounts})\r\n tempHeaderStateCounts = [...initHeaderStateCounts]\r\n }\r\n }\r\n\r\n const renderHeaders = () => {\r\n var headers = []\r\n\r\n var firstHeader = (\r\n <td\r\n onClick={e => {\r\n setRows(sortTable(rows, 0, sortState.headerStateCounts[0]))\r\n sortStates(0)\r\n }}\r\n >\r\n <div className={s(styles.header, styles.nameHeader)}>\r\n {headerList[0]}\r\n <div className={sortState.headerStates[0]} />\r\n </div>\r\n </td>\r\n )\r\n headers.push(firstHeader)\r\n\r\n for (let i = 1; i < headerList.length; i++) {\r\n let header = (\r\n <td\r\n onClick={e => {\r\n setRows(sortTable(rows, i + 1, sortState.headerStateCounts[i]))\r\n sortStates(i)\r\n }}\r\n >\r\n <div className={styles.header}>\r\n {headerList[i]}\r\n <div className={sortState.headerStates[i]} />\r\n </div>\r\n </td>\r\n )\r\n headers.push(header)\r\n }\r\n\r\n return headers\r\n }\r\n\r\n function downloadAsFile(archived: boolean){\r\n var csvContent;\r\n if(archived){\r\n csvContent = 'data:text/csv;charset=utf-8,' + convertToCSV(archivedData);\r\n }\r\n else{\r\n csvContent = 'data:text/csv;charset=utf-8,' + convertToCSV(listData);\r\n }\r\n const encodedUri = encodeURI(csvContent);\r\n const link = document.createElement('a');\r\n link.setAttribute('href', encodedUri);\r\n link.setAttribute('download', 'laptops.csv');\r\n document.body.appendChild(link);\r\n link.click();\r\n }\r\n\r\n const convertToCSV = (objArray: any[]) => {\r\n const array = typeof objArray !== 'object' ? JSON.parse(objArray) : objArray;\r\n let str = '';\r\n \r\n for (let i = 0; i < array.length; i++) {\r\n let line = '';\r\n for (const index in array[i]) {\r\n if (line !== '') line += ',';\r\n \r\n line += array[i][index];\r\n }\r\n str += line + '\\r\\n';\r\n }\r\n \r\n return str;\r\n };\r\n\r\n\r\n function concatenatedName(row: any[]) {\r\n var image = placeholder\r\n for (let i = 0; i < displayImages.length; i++) {\r\n if (displayImages[i].id === row[1]) {\r\n image = displayImages[i].img\r\n }\r\n }\r\n return image ? (\r\n <td key={row[1]} className={styles.hardware}>\r\n <div className={styles.imgContainer}>\r\n <img className={styles.icon} src={image} alt={''} />\r\n </div>\r\n <div className={styles.alignLeft}>\r\n <text className={s(styles.hardwareName, isDarkMode ? styles.dark : {})}>{row[0]}</text> <br />\r\n <text className={styles.alignLeft}>{row[8]}</text>\r\n </div>\r\n </td>\r\n ) : (\r\n <td key={row[1]} className={styles.hardware}>\r\n <div className={styles.imgContainer}>\r\n <img className={styles.icon} src={placeholder} alt={''} />\r\n </div>\r\n <div className={styles.alignLeft}>\r\n <text className={s(styles.hardwareName, isDarkMode ? styles.dark : {})}>{row[0]}</text> <br />\r\n <text className={styles.alignLeft}>{row[8]}</text>\r\n </div>\r\n </td>\r\n )\r\n }\r\n\r\n var renderedRows: any[] = []\r\n\r\n rows.forEach(row => {\r\n const transformedRow: any[] = []\r\n for (let i = 0; i < row.length; i++) {\r\n switch (i) {\r\n case 0:\r\n transformedRow[0] = concatenatedName(row)\r\n break\r\n case 2:\r\n transformedRow[2] = <td className={styles.alignLeft}>{row[2]}</td>\r\n break\r\n case 3:\r\n transformedRow[3] = <td className={styles.alignLeft}>{row[3]} GB</td>\r\n break\r\n case 4:\r\n transformedRow[4] = <td className={styles.alignLeft}>{row[4]} GB</td>\r\n break\r\n case 5:\r\n transformedRow[5] = <td className={styles.alignLeft}>{row[5]}</td>\r\n break\r\n case 6:\r\n transformedRow[6] = <td className={styles.alignLeft}>{row[6]}</td>\r\n break\r\n case 9:\r\n transformedRow[9] = <td className={styles.alignLeft}>{row[9]}</td>\r\n break\r\n }\r\n }\r\n\r\n renderedRows.push(transformedRow)\r\n })\r\n\r\n return (\r\n <div className={styles.listMain}>\r\n <Group direction='row' justify='between' className={styles.group}>\r\n <div className={styles.buttonContainer}>\r\n {isAdmin && <Button text='Add' icon='add' onClick={handleClick} />}\r\n <Button\r\n text={isArchive ? 'View Active' : 'View Archives'}\r\n onClick={() => setIsArchive(!isArchive)}\r\n className={styles.archiveButton}\r\n />\r\n <Button\r\n text={'Download'}\r\n onClick={() => downloadAsFile(isArchive)}\r\n />\r\n </div>\r\n\r\n <FilteredSearch\r\n search={search}\r\n setSearch={setSearch}\r\n options={options}\r\n selected={selected}\r\n setSelected={setSelected}\r\n />\r\n </Group>\r\n <div className={styles.table}>\r\n <Table headers={renderHeaders()} rows={renderedRows} onRowClick={handleRowClick} />\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import React, {useState, useEffect, useContext} from 'react'\r\nimport {sortTable} from '../../../utilities/quickSort'\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\nimport {cloneDeep} from 'lodash'\r\nimport {AxiosService} from '../../../services/AxiosService/AxiosService'\r\nimport {format} from '../../../utilities/formatEmptyStrings'\r\nimport {formatDate} from '../../../utilities/FormatDate'\r\nimport {checkImage} from '../../../utilities/CheckImage'\r\nimport {searchFilter} from '../../../utilities/SearchFilter'\r\n\r\n// Components\r\nimport {FilteredSearch} from '../../reusables/FilteredSearch/FilteredSearch'\r\nimport {Button} from '../../reusables/Button/Button'\r\nimport {Group} from '../../reusables/Group/Group'\r\nimport {Table} from '../../reusables/Table/Table'\r\nimport {History} from 'history'\r\n\r\n// Context\r\nimport {LoginContext, ThemeContext} from '../../App/App'\r\n\r\n// Styles\r\nimport styles from './HardwareListPage.module.css'\r\nimport placeholder from '../../../content/Images/Placeholders/server-placeholder.png'\r\n\r\n// Types\r\ninterface IServersListPageProps {\r\n history: History\r\n}\r\ninterface IServerData {\r\n make: string\r\n id: number\r\n numberOfCores: number\r\n RAM: number\r\n renewalDate: string\r\n MFGTag: string\r\n icon: string\r\n model: string\r\n endOfLife: string\r\n \r\n}\r\ninterface IPulledData {\r\n make: string\r\n serverId: number\r\n numberOfCores: number\r\n ram: number\r\n renewalDate: string\r\n mfg: string\r\n icon: string\r\n model: string\r\n endOfLife: string\r\n}\r\n\r\n// Primary Component\r\nexport const ServersListPage: React.SFC<IServersListPageProps> = props => {\r\n const {history} = props\r\n const {\r\n loginContextVariables: {isAdmin},\r\n loginContextVariables,\r\n } = useContext(LoginContext)\r\n const axios = new AxiosService(loginContextVariables)\r\n const {isDarkMode} = useContext(ThemeContext)\r\n\r\n // state\r\n const [listData, setListData] = useState<any[]>([])\r\n const [archivedData, setArchivedData] = useState<any[]>([])\r\n const [filteredData, setFilteredData] = useState<any[]>([]) //this is what is used in the list\r\n const [search, setSearch] = useState('')\r\n const [selected, setSelected] = useState({label: 'make', value: 'make'})\r\n\r\n const columns = ['make', 'numberOfCores', 'RAM', 'renewalDate', 'MFGTag', 'model', 'endOfLife']\r\n const searchByHeaders = ['Make', 'Number of Cores', 'RAM', 'Renewal Date', 'MFG Tag', 'Model',' EoL']\r\n const headerList = ['Make & Model', 'Number of Cores', 'RAM', 'Renewal Date', 'MFG Tag',' EoL']\r\n const options = columns.map((c, i) => ({label: searchByHeaders[i], value: c}))\r\n const [isArchive, setIsArchive] = useState(false)\r\n\r\n const [displayImages, setDisplayImages] = useState<{id: number; img: string}[]>([])\r\n\r\n async function getData() {\r\n var imagePromises: any[] = []\r\n await axios\r\n .get('/list/servers')\r\n .then((data: IPulledData[]) => {\r\n const servers: IServerData[] = []\r\n data.forEach((i: IPulledData) => {\r\n servers.push({\r\n make: format(i.make),\r\n id: i.serverId,\r\n numberOfCores: i.numberOfCores,\r\n RAM: i.ram,\r\n renewalDate: formatDate(i.renewalDate),\r\n MFGTag: format(i.mfg),\r\n icon: i.icon,\r\n model: format(i.model),\r\n endOfLife: formatDate(i.endOfLife),\r\n })\r\n\r\n imagePromises.push(\r\n checkImage(i.icon, axios, placeholder).then(image => {\r\n return {id: i.serverId, img: image}\r\n })\r\n )\r\n })\r\n\r\n setListData(servers)\r\n })\r\n .catch((err: any) => console.error(err))\r\n\r\n await Promise.all(imagePromises)\r\n .then(response => setDisplayImages(response))\r\n .catch((err: any) => console.error(err))\r\n\r\n await axios\r\n .get('/archivedList/server')\r\n .then((data: IPulledData[]) => {\r\n const servers: IServerData[] = []\r\n data.map((i: IPulledData) =>\r\n servers.push({\r\n make: format(i.make),\r\n id: i.serverId,\r\n numberOfCores: i.numberOfCores,\r\n RAM: i.ram,\r\n renewalDate: formatDate(i.renewalDate),\r\n MFGTag: format(i.mfg),\r\n icon: i.icon,\r\n model: format(i.model),\r\n endOfLife: formatDate(i.endOfLife),\r\n })\r\n )\r\n setArchivedData(servers)\r\n })\r\n .catch((err: any) => console.error(err))\r\n }\r\n\r\n useEffect(() => {\r\n getData()\r\n }, [])\r\n\r\n useEffect(() => {\r\n setFilteredData(searchFilter(isArchive ? archivedData : listData, selected.value, search))\r\n }, [search, selected, listData, archivedData, isArchive])\r\n\r\n const handleClick = () => {\r\n history.push({pathname: `hardware/edit/server/new`, state: {prev: history.location}})\r\n }\r\n\r\n const handleRowClick = (row: any) => {\r\n history.push({pathname: `hardware/detail/server/${row[0].key}`, state: {prev: history.location}})\r\n }\r\n\r\n var filteredRows: any[] = []\r\n filteredData.forEach(rowObj => {\r\n filteredRows.push(Object.values(rowObj))\r\n })\r\n\r\n const [rows, setRows] = useState(filteredRows)\r\n useEffect(() => {\r\n setRows(filteredRows)\r\n }, [filteredData])\r\n\r\n const headerStates = []\r\n const headerStateCounts = []\r\n\r\n //initialize all the header states and styling to be not sorted\r\n for (let i = 0; i < headerList.length; i++) {\r\n headerStates.push(styles.descending)\r\n headerStateCounts.push(0)\r\n }\r\n\r\n var initHeaderStateCounts = cloneDeep(headerStateCounts)\r\n var tempHeaderStates = cloneDeep(headerStates)\r\n var tempHeaderStateCounts = cloneDeep(headerStateCounts)\r\n\r\n var initState = {headerStates, headerStateCounts}\r\n const [sortState, setSortState] = useState(initState)\r\n\r\n function sortStates(index: number) {\r\n if (sortState.headerStateCounts[index] === 0) {\r\n tempHeaderStates[index] = styles.descending\r\n tempHeaderStateCounts[index] = 1\r\n setSortState({headerStates: tempHeaderStates, headerStateCounts: tempHeaderStateCounts})\r\n tempHeaderStateCounts = [...initHeaderStateCounts]\r\n } else if (sortState.headerStateCounts[index] === 1) {\r\n tempHeaderStates[index] = styles.ascending\r\n tempHeaderStateCounts[index] = 0\r\n setSortState({headerStates: tempHeaderStates, headerStateCounts: tempHeaderStateCounts})\r\n tempHeaderStateCounts = [...initHeaderStateCounts]\r\n }\r\n }\r\n\r\n const renderHeaders = () => {\r\n var headers = []\r\n\r\n var firstHeader = (\r\n <td\r\n onClick={e => {\r\n setRows(sortTable(rows, 0, sortState.headerStateCounts[0]))\r\n sortStates(0)\r\n }}\r\n >\r\n <div className={s(styles.header, styles.nameHeader)}>\r\n {headerList[0]}\r\n <div className={sortState.headerStates[0]} />\r\n </div>\r\n </td>\r\n )\r\n headers.push(firstHeader)\r\n\r\n for (let i = 1; i < headerList.length; i++) {\r\n let header = (\r\n <td\r\n onClick={e => {\r\n setRows(sortTable(rows, i + 1, sortState.headerStateCounts[i]))\r\n sortStates(i)\r\n }}\r\n >\r\n <div className={styles.header}>\r\n {headerList[i]}\r\n <div className={sortState.headerStates[i]} />\r\n </div>\r\n </td>\r\n )\r\n headers.push(header)\r\n }\r\n return headers\r\n }\r\n\r\n function concatenatedName(row: any[]) {\r\n var image = placeholder\r\n for (let i = 0; i < displayImages.length; i++) {\r\n if (displayImages[i].id === row[1]) {\r\n image = displayImages[i].img\r\n }\r\n }\r\n return image ? (\r\n <td key={row[1]} className={styles.hardware}>\r\n <div className={styles.imgContainer}>\r\n <img className={styles.icon} src={image} alt={''} />\r\n </div>\r\n <div className={styles.alignLeft}>\r\n <text className={s(styles.hardwareName, isDarkMode ? styles.dark : {})}>{row[0]}</text> <br />\r\n <text className={styles.alignLeft}>{row[7]}</text>\r\n </div>\r\n </td>\r\n ) : (\r\n <td key={row[1]} className={styles.hardware}>\r\n <div className={styles.imgContainer}>\r\n <img className={styles.icon} src={placeholder} alt={''} />\r\n </div>\r\n <div className={styles.alignLeft}>\r\n <text className={s(styles.hardwareName, isDarkMode ? styles.dark : {})}>{row[0]}</text> <br />\r\n <text className={styles.alignLeft}>{row[7]}</text>\r\n </div>\r\n </td>\r\n )\r\n }\r\n\r\n var renderedRows: any[] = []\r\n\r\n rows.forEach(row => {\r\n const transformedRow: any[] = []\r\n for (let i = 0; i < row.length; i++) {\r\n switch (i) {\r\n case 0:\r\n transformedRow[0] = concatenatedName(row)\r\n break\r\n case 2:\r\n transformedRow[1] = <td className={styles.alignLeft}>{row[2]}</td>\r\n break\r\n case 3:\r\n transformedRow[2] = <td className={styles.alignLeft}>{row[3]} GB</td>\r\n break\r\n case 4:\r\n transformedRow[3] = <td className={styles.alignLeft}>{row[4]}</td>\r\n break\r\n case 5:\r\n transformedRow[4] = <td className={styles.alignLeft}>{row[5]}</td>\r\n break\r\n case 8:\r\n transformedRow[5] = <td className={styles.alignLeft}>{row[8]}</td>\r\n break\r\n }\r\n }\r\n\r\n renderedRows.push(transformedRow)\r\n })\r\n\r\n return (\r\n <div className={styles.listMain}>\r\n <Group direction='row' justify='between' className={styles.group}>\r\n <div className={styles.buttonContainer}>\r\n {isAdmin && <Button text='Add' icon='add' onClick={handleClick} />}\r\n <Button\r\n text={isArchive ? 'View Active' : 'View Archives'}\r\n onClick={() => setIsArchive(!isArchive)}\r\n className={styles.archiveButton}\r\n />\r\n </div>\r\n\r\n <FilteredSearch\r\n search={search}\r\n setSearch={setSearch}\r\n options={options}\r\n selected={selected}\r\n setSelected={setSelected}\r\n />\r\n </Group>\r\n <div className={styles.table}>\r\n <Table headers={renderHeaders()} rows={renderedRows} onRowClick={handleRowClick} />\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import React, {useState, useEffect, useContext} from 'react'\r\nimport {sortTable} from '../../../utilities/quickSort'\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\nimport {cloneDeep} from 'lodash'\r\nimport {AxiosService} from '../../../services/AxiosService/AxiosService'\r\nimport {format} from '../../../utilities/formatEmptyStrings'\r\nimport {checkImage} from '../../../utilities/CheckImage'\r\nimport {searchFilter} from '../../../utilities/SearchFilter'\r\nimport {formatDate} from '../../../utilities/FormatDate'\r\n\r\n// Components\r\nimport {FilteredSearch} from '../../reusables/FilteredSearch/FilteredSearch'\r\nimport {Button} from '../../reusables/Button/Button'\r\nimport {Group} from '../../reusables/Group/Group'\r\nimport {Table} from '../../reusables/Table/Table'\r\nimport {History} from 'history'\r\n\r\n// Context\r\nimport {LoginContext, ThemeContext} from '../../App/App'\r\n\r\n// Styles\r\nimport styles from './HardwareListPage.module.css'\r\nimport placeholder from '../../../content/Images/Placeholders/monitor-placeholder.png'\r\n\r\n// Types\r\ninterface IMonitorsListPageProps {\r\n history: History\r\n}\r\ninterface IMonitorData {\r\n make: string\r\n id: number\r\n screenSize: number\r\n resolution: number\r\n assigned: string\r\n inputs: string\r\n icon: string\r\n model: string\r\n endOfLife: string\r\n}\r\ninterface IPulledData {\r\n make: string\r\n monitorId: number\r\n screenSize: number\r\n resolution: number\r\n employeeFirstName: string\r\n employeeLastName: string\r\n inputs: string\r\n icon: string\r\n model: string\r\n endOfLife: string\r\n}\r\n\r\n// Primary Component\r\nexport const MonitorsListPage: React.SFC<IMonitorsListPageProps> = props => {\r\n const {history} = props\r\n const {\r\n loginContextVariables: {isAdmin},\r\n loginContextVariables,\r\n } = useContext(LoginContext)\r\n const axios = new AxiosService(loginContextVariables)\r\n const {isDarkMode} = useContext(ThemeContext)\r\n\r\n // state\r\n const [listData, setListData] = useState<any[]>([])\r\n const [archivedData, setArchivedData] = useState<any[]>([])\r\n const [filteredData, setFilteredData] = useState<any[]>([]) //this is what is used in the list\r\n const [search, setSearch] = useState('')\r\n const [selected, setSelected] = useState({label: 'make', value: 'make'})\r\n\r\n const columns = ['makeModel', 'screenSize', 'resolution', 'inputs', 'assigned', 'model', 'endOfLife']\r\n const searchByHeaders = ['Make', 'Screen Size', 'Resolution', 'Inputs', 'Assigned To', 'Model', 'EoL']\r\n const headerList = ['Make & Model', 'Screen Size', 'Resolution', 'Inputs', 'Assigned To', 'EoL']\r\n const options = columns.map((c, i) => ({label: searchByHeaders[i], value: c}))\r\n const [isArchive, setIsArchive] = useState(false)\r\n\r\n const [displayImages, setDisplayImages] = useState<{id: number; img: string}[]>([])\r\n\r\n async function getData() {\r\n var imagePromises: any[] = []\r\n await axios\r\n .get('/list/monitors')\r\n .then((data: IPulledData[]) => {\r\n const monitors: IMonitorData[] = []\r\n data.forEach((i: IPulledData) => {\r\n monitors.push({\r\n make: format(i.make),\r\n id: i.monitorId,\r\n screenSize: i.screenSize,\r\n resolution: i.resolution,\r\n inputs: format(i.inputs),\r\n assigned: format(i.employeeFirstName) + ' ' + i.employeeLastName,\r\n icon: i.icon,\r\n model: format(i.model),\r\n endOfLife: formatDate(i.endOfLife),\r\n })\r\n\r\n imagePromises.push(\r\n checkImage(i.icon, axios, placeholder).then(image => {\r\n return {id: i.monitorId, img: image}\r\n })\r\n )\r\n })\r\n setListData(monitors)\r\n })\r\n .catch((err: any) => console.error(err))\r\n\r\n await Promise.all(imagePromises)\r\n .then(response => setDisplayImages(response))\r\n .catch((err: any) => console.error(err))\r\n\r\n await axios\r\n .get('/archivedList/monitor')\r\n .then((data: IPulledData[]) => {\r\n const monitors: IMonitorData[] = []\r\n data.map((i: IPulledData) =>\r\n monitors.push({\r\n make: format(i.make),\r\n id: i.monitorId,\r\n screenSize: i.screenSize,\r\n resolution: i.resolution,\r\n inputs: format(i.inputs),\r\n assigned: format(i.employeeFirstName) + ' ' + i.employeeLastName,\r\n icon: i.icon,\r\n model: format(i.model),\r\n endOfLife: formatDate(i.endOfLife),\r\n })\r\n )\r\n setArchivedData(monitors)\r\n })\r\n .catch((err: any) => console.error(err))\r\n }\r\n\r\n useEffect(() => {\r\n getData()\r\n }, [])\r\n\r\n useEffect(() => {\r\n setFilteredData(searchFilter(isArchive ? archivedData : listData, selected.value, search))\r\n }, [search, selected, listData, archivedData, isArchive])\r\n\r\n const handleClick = () => {\r\n history.push({pathname: '/hardware/edit/monitor/new', state: {prev: history.location}})\r\n }\r\n\r\n const handleRowClick = (row: any) => {\r\n history.push({pathname: `hardware/detail/monitor/${row[0].key}`, state: {prev: history.location}})\r\n }\r\n\r\n var filteredRows: any[] = []\r\n filteredData.forEach(rowObj => {\r\n filteredRows.push(Object.values(rowObj))\r\n })\r\n\r\n const [rows, setRows] = useState(filteredRows)\r\n useEffect(() => {\r\n setRows(filteredRows)\r\n }, [filteredData])\r\n //-------------- this will all be the same -------------\r\n const headerStates = []\r\n const headerStateCounts = []\r\n\r\n //initialize all the header states and styling to be not sorted\r\n for (let i = 0; i < headerList.length; i++) {\r\n headerStates.push(styles.descending)\r\n headerStateCounts.push(0)\r\n }\r\n\r\n var initHeaderStateCounts = cloneDeep(headerStateCounts)\r\n var tempHeaderStates = cloneDeep(headerStates)\r\n var tempHeaderStateCounts = cloneDeep(headerStateCounts)\r\n\r\n var initState = {headerStates, headerStateCounts}\r\n const [sortState, setSortState] = useState(initState)\r\n\r\n function sortStates(index: number) {\r\n if (sortState.headerStateCounts[index] === 0) {\r\n tempHeaderStates[index] = styles.descending\r\n tempHeaderStateCounts[index] = 1\r\n setSortState({headerStates: tempHeaderStates, headerStateCounts: tempHeaderStateCounts})\r\n tempHeaderStateCounts = [...initHeaderStateCounts]\r\n } else if (sortState.headerStateCounts[index] === 1) {\r\n tempHeaderStates[index] = styles.ascending\r\n tempHeaderStateCounts[index] = 0\r\n setSortState({headerStates: tempHeaderStates, headerStateCounts: tempHeaderStateCounts})\r\n tempHeaderStateCounts = [...initHeaderStateCounts]\r\n }\r\n }\r\n\r\n const renderHeaders = () => {\r\n var headers = []\r\n\r\n var firstHeader = (\r\n <td\r\n onClick={e => {\r\n setRows(sortTable(rows, 0, sortState.headerStateCounts[0]))\r\n sortStates(0)\r\n }}\r\n >\r\n <div className={s(styles.header, styles.nameHeader)}>\r\n {headerList[0]}\r\n <div className={sortState.headerStates[0]} />\r\n </div>\r\n </td>\r\n )\r\n headers.push(firstHeader)\r\n\r\n for (let i = 1; i < headerList.length; i++) {\r\n let header = (\r\n <td\r\n onClick={e => {\r\n setRows(sortTable(rows, i + 1, sortState.headerStateCounts[i]))\r\n sortStates(i)\r\n }}\r\n >\r\n <div className={styles.header}>\r\n {headerList[i]}\r\n <div className={sortState.headerStates[i]} />\r\n </div>\r\n </td>\r\n )\r\n headers.push(header)\r\n }\r\n\r\n return headers\r\n }\r\n\r\n function concatenatedName(row: any[]) {\r\n var image = placeholder\r\n for (let i = 0; i < displayImages.length; i++) {\r\n if (displayImages[i].id === row[1]) {\r\n image = displayImages[i].img\r\n }\r\n }\r\n return image ? (\r\n <td key={row[1]} className={styles.hardware}>\r\n <div className={styles.imgContainer}>\r\n <img className={styles.icon} src={image} alt={''} />\r\n </div>\r\n <div className={styles.alignLeft}>\r\n <text className={s(styles.hardwareName, isDarkMode ? styles.dark : {})}>{row[0]}</text> <br />\r\n <text className={styles.alignLeft}>{row[7]}</text>\r\n </div>\r\n </td>\r\n ) : (\r\n <td key={row[1]} className={styles.hardware}>\r\n <div className={styles.imgContainer}>\r\n <img className={styles.icon} src={placeholder} alt={''} />\r\n </div>\r\n <div className={styles.alignLeft}>\r\n <text className={s(styles.hardwareName, isDarkMode ? styles.dark : {})}>{row[0]}</text> <br />\r\n <text className={styles.alignLeft}>{row[7]}</text>\r\n </div>\r\n </td>\r\n )\r\n }\r\n\r\n var renderedRows: any[] = []\r\n\r\n rows.forEach(row => {\r\n const transformedRow: any[] = []\r\n for (let i = 0; i < row.length; i++) {\r\n switch (i) {\r\n case 0:\r\n transformedRow[0] = concatenatedName(row)\r\n break\r\n case 2:\r\n transformedRow[2] = <td className={styles.alignLeft}>{row[2]} in</td>\r\n break\r\n case 3:\r\n transformedRow[3] = <td className={styles.alignLeft}>{row[3]}k</td>\r\n break\r\n case 4:\r\n transformedRow[4] = <td className={styles.alignLeft}>{row[4]}</td>\r\n break\r\n case 5:\r\n transformedRow[5] = <td className={styles.alignLeft}>{row[5]}</td>\r\n break\r\n case 8:\r\n transformedRow[8] = <td className={styles.alignLeft}>{row[8]}</td>\r\n break\r\n }\r\n }\r\n\r\n renderedRows.push(transformedRow)\r\n })\r\n\r\n return (\r\n <div className={styles.listMain}>\r\n <Group direction='row' justify='between' className={styles.group}>\r\n <div className={styles.buttonContainer}>\r\n {isAdmin && <Button text='Add' icon='add' onClick={handleClick} />}\r\n <Button\r\n text={isArchive ? 'View Active' : 'View Archives'}\r\n onClick={() => setIsArchive(!isArchive)}\r\n className={styles.archiveButton}\r\n />\r\n </div>\r\n\r\n <FilteredSearch\r\n search={search}\r\n setSearch={setSearch}\r\n options={options}\r\n selected={selected}\r\n setSelected={setSelected}\r\n />\r\n </Group>\r\n <div className={styles.table}>\r\n <Table headers={renderHeaders()} rows={renderedRows} onRowClick={handleRowClick} />\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import React, {useState, useEffect, useContext} from 'react'\r\nimport {sortTable} from '../../../utilities/quickSort'\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\nimport {cloneDeep} from 'lodash'\r\nimport {AxiosService} from '../../../services/AxiosService/AxiosService'\r\nimport {format} from '../../../utilities/formatEmptyStrings'\r\nimport {formatDate} from '../../../utilities/FormatDate'\r\nimport {checkImage} from '../../../utilities/CheckImage'\r\nimport {searchFilter} from '../../../utilities/SearchFilter'\r\n\r\n// Components\r\nimport {FilteredSearch} from '../../reusables/FilteredSearch/FilteredSearch'\r\nimport {Button} from '../../reusables/Button/Button'\r\nimport {Group} from '../../reusables/Group/Group'\r\nimport {Table} from '../../reusables/Table/Table'\r\nimport {History} from 'history'\r\n\r\n// Context\r\nimport {LoginContext, ThemeContext} from '../../App/App'\r\n\r\n// Styles\r\nimport styles from './HardwareListPage.module.css'\r\nimport placeholder from '../../../content/Images/Placeholders/peripheral-placeholder.png'\r\n\r\n// Types\r\ninterface IPeripheralListPageProps {\r\n history: History\r\n}\r\ninterface IPeripheralData {\r\n name: string\r\n id: number\r\n purchaseDate: string\r\n assigned: string\r\n endOfLife: string\r\n //icon: string\r\n}\r\ninterface IPulledData {\r\n peripheralName: string\r\n peripheralType: string\r\n peripheralId: number\r\n purchaseDate: string\r\n isAssigned: boolean\r\n employeeFirstName: string\r\n employeeLastName: string\r\n icon: string\r\n endOfLife: string\r\n}\r\n\r\n// Primary Component\r\nexport const PeripheralListPage: React.SFC<IPeripheralListPageProps> = props => {\r\n const {history} = props\r\n const {\r\n loginContextVariables: {isAdmin},\r\n loginContextVariables,\r\n } = useContext(LoginContext)\r\n const axios = new AxiosService(loginContextVariables)\r\n const {isDarkMode} = useContext(ThemeContext)\r\n\r\n // state\r\n const [listData, setListData] = useState<IPeripheralData[]>([])\r\n const [archivedData, setArchivedData] = useState<IPeripheralData[]>([])\r\n const [filteredData, setFilteredData] = useState<IPeripheralData[]>([]) //this is what is used in the list\r\n const [search, setSearch] = useState('')\r\n const [selected, setSelected] = useState({label: 'Make & Model', value: 'name'})\r\n\r\n const columns = ['name', 'purchaseDate', 'assigned', 'endOfLife']\r\n const headerList = ['Make & Model', 'Purchase Date', 'Assigned To', 'EoL']\r\n const options = columns.map((c, i) => ({label: headerList[i], value: c}))\r\n const [isArchive, setIsArchive] = useState(false)\r\n\r\n const [displayImages, setDisplayImages] = useState<{id: number; img: string}[]>([])\r\n\r\n async function getData() {\r\n var imagePromises: any[] = []\r\n await axios\r\n .get('/list/peripherals')\r\n .then((data: IPulledData[]) => {\r\n const peripherals: IPeripheralData[] = []\r\n data.forEach((i: IPulledData) => {\r\n peripherals.push({\r\n name: format(i.peripheralName + ' ' + i.peripheralType),\r\n id: i.peripheralId,\r\n purchaseDate: format(i.purchaseDate),\r\n assigned: format(i.isAssigned ? i.employeeFirstName + ' ' + i.employeeLastName : '-'),\r\n endOfLife: formatDate(i.endOfLife),\r\n })\r\n\r\n imagePromises.push(\r\n checkImage(i.icon, axios, placeholder).then(image => {\r\n return {id: i.peripheralId, img: image}\r\n })\r\n )\r\n })\r\n setListData(peripherals)\r\n })\r\n .catch((err: any) => console.error(err))\r\n\r\n await Promise.all(imagePromises)\r\n .then(response => setDisplayImages(response))\r\n .catch((err: any) => console.error(err))\r\n\r\n await axios\r\n .get('/archivedList/peripheral')\r\n .then((data: IPulledData[]) => {\r\n const peripherals: IPeripheralData[] = []\r\n data.map((i: IPulledData) =>\r\n peripherals.push({\r\n name: format(i.peripheralName + ' ' + i.peripheralType),\r\n id: i.peripheralId,\r\n purchaseDate: format(i.purchaseDate),\r\n assigned: format(i.isAssigned ? i.employeeFirstName + ' ' + i.employeeLastName : '-'),\r\n endOfLife: formatDate(i.endOfLife),\r\n })\r\n )\r\n setArchivedData(peripherals)\r\n })\r\n .catch((err: any) => console.error(err))\r\n }\r\n\r\n useEffect(() => {\r\n getData()\r\n }, [])\r\n\r\n useEffect(() => {\r\n setFilteredData(searchFilter(isArchive ? archivedData : listData, selected.value, search))\r\n }, [search, selected, listData, archivedData, isArchive])\r\n\r\n const handleClick = () => {\r\n history.push({pathname: '/hardware/edit/peripheral/new', state: {prev: history.location}})\r\n }\r\n\r\n const handleRowClick = (row: any) => {\r\n history.push({pathname: `hardware/detail/peripheral/${row[0].key}`, state: {prev: history.location}})\r\n }\r\n\r\n var filteredRows: any[] = []\r\n filteredData.forEach(rowObj => {\r\n filteredRows.push(Object.values(rowObj))\r\n })\r\n\r\n const [rows, setRows] = useState(filteredRows)\r\n useEffect(() => {\r\n setRows(filteredRows)\r\n }, [filteredData])\r\n //-------------- this will all be the same -------------\r\n const headerStates = []\r\n const headerStateCounts = []\r\n\r\n //initialize all the header states and styling to be not sorted\r\n for (let i = 0; i < headerList.length; i++) {\r\n headerStates.push(styles.descending)\r\n headerStateCounts.push(0)\r\n }\r\n\r\n var initHeaderStateCounts = cloneDeep(headerStateCounts)\r\n var tempHeaderStates = cloneDeep(headerStates)\r\n var tempHeaderStateCounts = cloneDeep(headerStateCounts)\r\n\r\n var initState = {headerStates, headerStateCounts}\r\n const [sortState, setSortState] = useState(initState)\r\n\r\n function sortStates(index: number) {\r\n if (sortState.headerStateCounts[index] === 0) {\r\n tempHeaderStates[index] = styles.descending\r\n tempHeaderStateCounts[index] = 1\r\n setSortState({headerStates: tempHeaderStates, headerStateCounts: tempHeaderStateCounts})\r\n tempHeaderStateCounts = [...initHeaderStateCounts]\r\n } else if (sortState.headerStateCounts[index] === 1) {\r\n tempHeaderStates[index] = styles.ascending\r\n tempHeaderStateCounts[index] = 0\r\n setSortState({headerStates: tempHeaderStates, headerStateCounts: tempHeaderStateCounts})\r\n tempHeaderStateCounts = [...initHeaderStateCounts]\r\n }\r\n }\r\n\r\n const renderHeaders = () => {\r\n var headers = []\r\n\r\n var firstHeader = (\r\n <td\r\n onClick={e => {\r\n setRows(sortTable(rows, 0, sortState.headerStateCounts[0]))\r\n sortStates(0)\r\n }}\r\n >\r\n <div className={s(styles.header, styles.nameHeader)}>\r\n {headerList[0]}\r\n <div className={sortState.headerStates[0]} />\r\n </div>\r\n </td>\r\n )\r\n headers.push(firstHeader)\r\n\r\n for (let i = 1; i < headerList.length; i++) {\r\n let header = (\r\n <td\r\n onClick={e => {\r\n setRows(sortTable(rows, i + 1, sortState.headerStateCounts[i]))\r\n sortStates(i)\r\n }}\r\n >\r\n <div className={styles.header}>\r\n {headerList[i]}\r\n <div className={sortState.headerStates[i]} />\r\n </div>\r\n </td>\r\n )\r\n headers.push(header)\r\n }\r\n return headers\r\n }\r\n\r\n function concatenatedName(row: any[]) {\r\n var image = placeholder\r\n for (let i = 0; i < displayImages.length; i++) {\r\n if (displayImages[i].id === row[1]) {\r\n image = displayImages[i].img\r\n }\r\n }\r\n return image ? (\r\n <td key={row[1]} className={styles.hardware}>\r\n <div className={styles.imgContainer}>\r\n <img className={styles.icon} src={image} alt={''} />\r\n </div>\r\n <div className={styles.alignLeft}>\r\n <div className={s(styles.hardwareName, isDarkMode ? styles.dark : {})}>{row[0]}</div>\r\n </div>\r\n </td>\r\n ) : (\r\n <td key={row[1]} className={styles.hardware}>\r\n <div className={styles.imgContainer}>\r\n <img className={styles.icon} src={placeholder} alt={''} />\r\n </div>\r\n <div className={styles.alignLeft}>\r\n <div className={s(styles.hardwareName, isDarkMode ? styles.dark : {})}>{row[0]}</div>\r\n </div>\r\n </td>\r\n )\r\n }\r\n // ------------------------------------------------------------\r\n var renderedRows: any[] = []\r\n\r\n //this is where the individual rows are rendered\r\n rows.forEach(row => {\r\n const transformedRow: any[] = []\r\n transformedRow.push(concatenatedName(row))\r\n transformedRow.push(<td className={styles.alignLeft}>{formatDate(row[2])}</td>)\r\n transformedRow.push(<td className={styles.alignLeft}>{row[3]}</td>)\r\n transformedRow.push(<td className={styles.alignLeft}>{row[4]}</td>)\r\n\r\n renderedRows.push(transformedRow)\r\n })\r\n\r\n return (\r\n <div className={styles.listMain}>\r\n <Group direction='row' justify='between' className={styles.group}>\r\n <div className={styles.buttonContainer}>\r\n {isAdmin && <Button text='Add' icon='add' onClick={handleClick} />}\r\n <Button\r\n text={isArchive ? 'View Active' : 'View Archives'}\r\n onClick={() => setIsArchive(!isArchive)}\r\n className={styles.archiveButton}\r\n />\r\n </div>\r\n\r\n <FilteredSearch\r\n search={search}\r\n setSearch={setSearch}\r\n options={options}\r\n selected={selected}\r\n setSelected={setSelected}\r\n />\r\n </Group>\r\n <div className={styles.table}>\r\n <Table headers={renderHeaders()} rows={renderedRows} onRowClick={handleRowClick} />\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import React, {useState, useContext} from 'react'\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\n\r\n// Components\r\nimport {DropdownList} from '../../reusables/Dropdown/DropdownList'\r\nimport {LaptopsListPage} from './LaptopsListPage'\r\nimport {ServersListPage} from './ServersListPage'\r\nimport {MonitorsListPage} from './MonitorsListPage'\r\nimport {PeripheralListPage} from './PeripheralsListPage'\r\nimport {Button} from '../../reusables/Button/Button'\r\nimport {History} from 'history'\r\n\r\n// Styles\r\nimport styles from './HardwareListPage.module.css'\r\nimport dropdownStyles from '../../reusables/Dropdown/Dropdown.module.css'\r\nimport { ThemeContext } from '../../App';\r\n\r\n// Types\r\n\r\ninterface IHardwareListPageProps {\r\n history: History\r\n}\r\n\r\n// Primary Component\r\nexport const HardwareListPage: React.SFC<IHardwareListPageProps> = props => {\r\n const {history} = props\r\n const { isDarkMode } = useContext(ThemeContext)\r\n\r\n // state\r\n const currentList = localStorage.getItem('selectedHW')\r\n const [selectedHW, setSelectedHW] = useState<{id: number; name: string}>(\r\n currentList\r\n ? JSON.parse(currentList)\r\n : {\r\n id: 0,\r\n name: 'servers',\r\n }\r\n )\r\n\r\n const dropdownContent = [\r\n {id: 0, name: 'servers'},\r\n {id: 1, name: 'laptops'},\r\n {id: 2, name: 'monitors'},\r\n {id: 3, name: 'peripherals'},\r\n ]\r\n\r\n const displayList = () => {\r\n switch (selectedHW.name) {\r\n case 'servers':\r\n return <ServersListPage history={history} />\r\n case 'laptops':\r\n return <LaptopsListPage history={history} />\r\n\r\n case 'monitors':\r\n return <MonitorsListPage history={history} />\r\n case 'peripherals':\r\n return <PeripheralListPage history={history} />\r\n }\r\n }\r\n return (\r\n <div className={s(styles.hardwareListMain, isDarkMode ? styles.listMainDark : {})}>\r\n <div className={styles.dropdown}>\r\n <Button className={styles.dropdownButton}>\r\n <div className={s(dropdownStyles.dropdownContainer, styles.dropdownContainer)}>\r\n <DropdownList\r\n triggerElement={({isOpen, toggle}) => (\r\n <button onClick={toggle} className={dropdownStyles.dropdownButton}>\r\n <div className={s(dropdownStyles.dropdownTitle, styles.dropdownTitleContainer, isDarkMode ? styles.dark : {})}>\r\n <div className={styles.dropdownTitle}>{selectedHW.name}</div>\r\n <div className={s(dropdownStyles.dropdownArrow, styles.dropdownArrow, isDarkMode ? styles.dropdownArrowDark : {})} />\r\n </div>\r\n </button>\r\n )}\r\n choicesList={() => (\r\n <ul className={dropdownStyles.dropdownList}>\r\n {dropdownContent.map(i => (\r\n <li\r\n className={dropdownStyles.dropdownListItem}\r\n key={i.name}\r\n onClick={() => {\r\n setSelectedHW(i)\r\n localStorage.setItem('selectedHW', JSON.stringify(i))\r\n }}\r\n >\r\n <button className={dropdownStyles.dropdownListItemButton}>\r\n <div className={dropdownStyles.dropdownItemLabel}>{i.name}</div>\r\n </button>\r\n </li>\r\n ))}\r\n </ul>\r\n )}\r\n />\r\n <div />\r\n </div>\r\n </Button>\r\n </div>\r\n {displayList()}\r\n </div>\r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport styles from './HistoryLog.module.css'\r\nimport {formatDate} from '../../../utilities/FormatDate'\r\n\r\ntype eventType = 'Assigned' | 'Unassigned' | 'Bought' | 'Broken' | 'Repaired' | 'Archived' | 'Recovered'\r\n\r\nexport interface IHistoryLogArray {\r\n eventDate: string\r\n eventType: eventType\r\n employeeName: string\r\n historyId?: number\r\n key?: number\r\n}\r\n\r\ninterface IHistoryLogProps {\r\n historyLog: IHistoryLogArray[]\r\n canEdit: boolean\r\n remove?: any\r\n}\r\n\r\n// Primary Component\r\nexport const HistoryLog = (props: IHistoryLogProps) => {\r\n const {historyLog, remove, canEdit} = props\r\n\r\n //todo: post data automatically when assigning something to an employee\r\n\r\n //check to see if the history log length is defined\r\n //if undefined, will just return empty table body\r\n if (undefined !== historyLog && historyLog.length) {\r\n var rows: any[] = []\r\n for (let i = 0; i < historyLog.length; i++) {\r\n let tempElement = <div />\r\n\r\n if (historyLog[i].eventType === 'Assigned') {\r\n tempElement = <div className={styles.description}>{' Assigned to ' + historyLog[i].employeeName}</div>\r\n } else if (historyLog[i].eventType === 'Unassigned') {\r\n tempElement = (\r\n <div className={styles.description}>{'Unassigned from ' + historyLog[i].employeeName}</div>\r\n )\r\n } else if (historyLog[i].eventType === 'Bought') {\r\n tempElement = <div className={styles.description}>{'Purchased'}</div>\r\n } else if (historyLog[i].eventType === 'Archived') {\r\n tempElement = <div className={styles.description}>{'Archived'}</div>\r\n } else if (historyLog[i].eventType === 'Broken') {\r\n if (canEdit) {\r\n tempElement = (\r\n <div className={styles.description}>\r\n {'Broken under the care of ' + historyLog[i].employeeName} <br />\r\n <div className={styles.delete} onClick={e => remove(i)} />\r\n <div className={styles.whiteLine} />\r\n </div>\r\n )\r\n } else {\r\n tempElement = (\r\n <div className={styles.description}>\r\n {'Broken under the care of ' + historyLog[i].employeeName}\r\n </div>\r\n )\r\n }\r\n } else if (historyLog[i].eventType === 'Repaired') {\r\n if (canEdit) {\r\n tempElement = (\r\n <div className={styles.description}>\r\n Repaired <br />\r\n <div className={styles.delete} onClick={e => remove(i)} />\r\n <div className={styles.whiteLine} />\r\n </div>\r\n )\r\n } else {\r\n tempElement = <div className={styles.description}>Repaired</div>\r\n }\r\n } else if (historyLog[i].eventType === 'Recovered') {\r\n tempElement = <div className={styles.description}>{'Recovered'}</div>\r\n }\r\n rows.push(\r\n <div className={styles.rowData}>\r\n <div className={styles.date}>{formatDate(historyLog[i].eventDate) + ' | '} </div>\r\n {tempElement}\r\n </div>\r\n )\r\n }\r\n\r\n return (\r\n <table className={styles.table}>\r\n <thead>\r\n <tr className={styles.header}>\r\n <td>History List</td>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n {rows.map(row => (\r\n <tr>{row}</tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n )\r\n } else {\r\n return (\r\n <table className={styles.table}>\r\n <thead>\r\n <tr className={styles.header}>\r\n <td>History List</td>\r\n </tr>\r\n </thead>\r\n </table>\r\n )\r\n }\r\n}\r\n","import React, {useState, useEffect, useContext} from 'react'\r\nimport {AxiosService} from '../../../services/AxiosService/AxiosService'\r\n\r\n// Components\r\nimport {Button} from '../../reusables/Button/Button'\r\nimport {Group} from '../../reusables/Group/Group'\r\nimport {HistoryLog, IHistoryLogArray} from '../../reusables/HistoryLog/HistoryLog'\r\nimport {DetailPageTable, ITableItem} from '../../reusables/DetailPageTable/DetailPageTable'\r\nimport {BackButton} from '../../reusables/BackButton/BackButton'\r\nimport {DetailImage} from '../../reusables/DetailImage/DetailImage'\r\nimport {DetailCostText, ICostText} from '../../reusables/DetailCostText/DetailCostText'\r\n\r\n// Utils\r\nimport {formatDate} from '../../../utilities/FormatDate'\r\nimport {checkImage} from '../../../utilities/CheckImage'\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\nimport {formatMoney} from '../../../utilities/FormatCost'\r\n\r\n// Styles\r\nimport styles from './HardwareDetailPage.module.css'\r\nimport laptopPlaceholder from '../../../content/Images/Placeholders/computer-placeholder.png'\r\nimport serverPlaceholder from '../../../content/Images/Placeholders/server-placeholder.png'\r\nimport peripheralPlaceholder from '../../../content/Images/Placeholders/peripheral-placeholder.png'\r\nimport monitorPlaceholder from '../../../content/Images/Placeholders/monitor-placeholder.png'\r\n\r\n// Context\r\nimport {LoginContext, ThemeContext} from '../../App/App'\r\nimport {sortByDate} from '../../../utilities/quickSort'\r\n\r\n// Types\r\ninterface IHardwareDetailPageProps {\r\n history: any\r\n match: any\r\n}\r\n\r\n// Primary Component\r\nexport const HardwareDetailPage: React.SFC<IHardwareDetailPageProps> = props => {\r\n const {history, match} = props\r\n\r\n const {\r\n loginContextVariables: {isAdmin},\r\n loginContextVariables,\r\n } = useContext(LoginContext)\r\n const {isDarkMode} = useContext(ThemeContext)\r\n\r\n const axios = new AxiosService(loginContextVariables)\r\n\r\n //default\r\n const [firstTableHeaders, setFirstTableHeaders] = useState(['yeah something went wrong'])\r\n const [secondTableHeaders, setSecondTableHeaders] = useState(['yeah something went wrong'])\r\n const [thirdTableHeaders, setThirdTableHeaders] = useState(['yeah something went wrong'])\r\n const [headingInfo, setHeadingInfo] = useState(['something aint right'])\r\n\r\n const [firstTableData, setFirstTableData] = useState<(string | number)[]>([])\r\n const [secondTableData, setSecondTableData] = useState<(string | number)[]>([])\r\n const [thirdTableData, setThirdTableData] = useState<ITableItem[][]>([])\r\n\r\n const [historyLogEntries, setHistoryLogEntries] = useState<IHistoryLogArray[]>([])\r\n const [commentText, setCommentText] = useState('')\r\n\r\n const [costPerYear, setCostPerYear] = useState(0)\r\n const [flatCost, setFlatCost] = useState(0)\r\n\r\n const [isDeleted, setIsDeleted] = useState(false)\r\n const [img, setImg] = useState()\r\n // const [initialImg, setInitialImg] = useState()\r\n\r\n async function getData() {\r\n if (match.params.type === 'server') {\r\n setFirstTableHeaders(['FQDN', 'IP Address', '# of Cores', 'OS', 'RAM'])\r\n setSecondTableHeaders(['MFG Tag', 'Serial #', 'SAN', 'Local HHD'])\r\n setThirdTableHeaders(['Employee Assigned', 'Department', 'Location'])\r\n // make model purchaseDate renewalDate endOfLife virtualized\r\n setHeadingInfo(['the name', 'another name'])\r\n await axios\r\n .get(`/detail/server/${match.params.id}`)\r\n .then((data: any) => {\r\n setHeadingInfo([\r\n 'Make: ' + data[0].server.make,\r\n 'Model: ' + data[0].server.model,\r\n 'Purchase Date: ' + formatDate(data[0].server.purchaseDate),\r\n 'Renewal Date: ' + formatDate(data[0].server.renewalDate),\r\n 'End of Life: ' + formatDate(data[0].server.endOfLife),\r\n 'Virtualized: ' + data[0].server.virtualize,\r\n ])\r\n setFirstTableData([\r\n data[0].server.fqdn,\r\n data[0].server.ipAddress,\r\n data[0].server.numberOfCores,\r\n data[0].server.operatingSystem,\r\n data[0].server.ram + ' GB',\r\n ])\r\n setSecondTableData([\r\n data[0].server.mfg,\r\n data[0].server.serialNumber,\r\n data[0].server.san,\r\n data[0].server.localHHD + ' GB',\r\n ])\r\n setCostPerYear(data[0].server.costPerYear)\r\n setFlatCost(data[0].server.flatCost)\r\n\r\n // setThirdTableData([data[0].employeeAssignedName, data[0].departmentName, data[0].server.location])\r\n setThirdTableData([\r\n [\r\n data[0].employeeAssignedId\r\n ? {\r\n value: data[0].employeeAssignedName,\r\n sortBy: data[0].employeeAssignedName,\r\n id: data[0].employeeAssignedId,\r\n onClick: (id: any) => {\r\n history.push({\r\n pathname: '/employees/detail/' + id,\r\n state: {prev: history.location},\r\n })\r\n },\r\n }\r\n : {value: data[0].employeeAssignedName, sortBy: data[0].employeeAssignedName},\r\n {\r\n value: data[0].departmentName,\r\n sortBy: data[0].departmentName,\r\n id: data[0].departmentID,\r\n onClick: (id: any) => {\r\n history.push({\r\n pathname: '/departments/detail/' + id,\r\n state: {prev: history.location},\r\n })\r\n },\r\n },\r\n {value: data[0].server.location, sortBy: data[0].server.location},\r\n ],\r\n ])\r\n setCommentText(data[0].server.textField)\r\n setHistoryLogEntries(data[0].serverHistory)\r\n setIsDeleted(data[0].isDeleted)\r\n\r\n checkImage(data[0].icon, axios, serverPlaceholder)\r\n .then(image => setImg(image))\r\n .catch(err => console.error(err))\r\n })\r\n .catch((err: any) => console.error(err))\r\n } else if (match.params.type === 'laptop' || match.params.type === 'computer') {\r\n setFirstTableHeaders(['CPU', 'RAM', 'SSD', 'FQDN'])\r\n setSecondTableHeaders(['Monitor Output', 'Screen Size', 'Serial #', 'MFG Tag'])\r\n setThirdTableHeaders(['Employee Assigned', 'Dept Assigned', 'Location'])\r\n // make model purchaseDate renewalDate endOfLife\r\n setHeadingInfo(['name', 'the make', 'model name'])\r\n await axios\r\n .get(`/detail/computer/${match.params.id}`)\r\n .then((data: any) => {\r\n setHeadingInfo([\r\n 'Make: ' + data[0].computer.make,\r\n 'Model: ' + data[0].computer.model,\r\n 'Purchase Date: ' + formatDate(data[0].computer.purchaseDate),\r\n 'Renewal Date: ' + formatDate(data[0].computer.renewalDate),\r\n 'End of Life: ' + formatDate(data[0].computer.endOfLife),\r\n ])\r\n setFirstTableData([\r\n data[0].computer.cpu,\r\n data[0].computer.ramgb + ' GB',\r\n data[0].computer.ssdgb + ' GB',\r\n data[0].computer.fqdn,\r\n ])\r\n setSecondTableData([\r\n data[0].computer.monitorOutput,\r\n data[0].computer.screenSize + ' in',\r\n data[0].computer.serialNumber,\r\n data[0].computer.mfg,\r\n ])\r\n setCostPerYear(data[0].computer.costPerYear)\r\n setFlatCost(data[0].computer.flatCost)\r\n\r\n setThirdTableData([\r\n [\r\n data[0].employeeAssignedId\r\n ? {\r\n value: data[0].employeeAssignedName,\r\n sortBy: data[0].employeeAssignedName,\r\n id: data[0].employeeAssignedId,\r\n onClick: (id: any) => {\r\n history.push({\r\n pathname: '/employees/detail/' + id,\r\n state: {prev: history.location},\r\n })\r\n },\r\n }\r\n : {value: data[0].employeeAssignedName, sortBy: data[0].employeeAssignedName},\r\n {\r\n value: data[0].departmentName,\r\n sortBy: data[0].departmentName,\r\n id: data[0].departmentID,\r\n onClick: (id: any) => {\r\n history.push({\r\n pathname: '/departments/detail/' + id,\r\n state: {prev: history.location},\r\n })\r\n },\r\n },\r\n {value: data[0].computer.location, sortBy: data[0].computer.location},\r\n ],\r\n ])\r\n setCommentText(data[0].computer.textField)\r\n setHistoryLogEntries(data[0].computerHistory)\r\n setIsDeleted(data[0].isDeleted)\r\n\r\n checkImage(data[0].icon, axios, laptopPlaceholder)\r\n .then(image => setImg(image))\r\n .catch(err => console.error(err))\r\n })\r\n .catch((err: any) => console.error(err))\r\n } else if (match.params.type === 'monitor') {\r\n setFirstTableHeaders(['Screen Size', 'Resolution', 'Inputs', 'Serial #'])\r\n setSecondTableHeaders([])\r\n setThirdTableHeaders(['Employee Assigned', 'Dept Assigned', 'Location'])\r\n await axios\r\n .get(`/detail/monitor/${match.params.id}`)\r\n .then((data: any) => {\r\n setHeadingInfo([\r\n 'Make: ' + data[0].monitor.make,\r\n 'Model: ' + data[0].monitor.model,\r\n 'Purchase Date: ' + formatDate(data[0].monitor.purchaseDate),\r\n 'Renewal Date: ' + formatDate(data[0].monitor.renewalDate),\r\n 'End of Life: ' + formatDate(data[0].monitor.endOfLife),\r\n ])\r\n setFirstTableData([\r\n data[0].monitor.screenSize + ' in',\r\n data[0].monitor.resolution + 'k',\r\n data[0].monitor.inputs,\r\n data[0].monitor.serialNumber,\r\n ])\r\n setSecondTableData([])\r\n setThirdTableData([\r\n [\r\n data[0].employeeAssignedId\r\n ? {\r\n value: data[0].employeeAssignedName,\r\n sortBy: data[0].employeeAssignedName,\r\n id: data[0].employeeAssignedId,\r\n onClick: (id: any) => {\r\n history.push({\r\n pathname: '/employees/detail/' + id,\r\n state: {prev: history.location},\r\n })\r\n },\r\n }\r\n : {value: data[0].employeeAssignedName, sortBy: data[0].employeeAssignedName},\r\n {\r\n value: data[0].departmentName,\r\n sortBy: data[0].departmentName,\r\n id: data[0].departmentID,\r\n onClick: (id: any) => {\r\n history.push({\r\n pathname: '/departments/detail/' + id,\r\n state: {prev: history.location},\r\n })\r\n },\r\n },\r\n {value: data[0].monitor.location, sortBy: data[0].monitor.location},\r\n ],\r\n ])\r\n setCostPerYear(data[0].monitor.costPerYear)\r\n setFlatCost(data[0].monitor.flatCost)\r\n setCommentText(data[0].monitor.textField)\r\n setHistoryLogEntries(data[0].monitorHistory)\r\n setIsDeleted(data[0].isDeleted)\r\n\r\n checkImage(data[0].icon, axios, monitorPlaceholder)\r\n .then(image => setImg(image))\r\n .catch(err => console.error(err))\r\n })\r\n .catch((err: any) => console.error(err))\r\n } else if (match.params.type === 'peripheral') {\r\n setFirstTableHeaders([])\r\n setSecondTableHeaders([])\r\n setThirdTableHeaders(['Employee Assigned', 'Department Assigned', 'Serial #'])\r\n await axios\r\n .get(`/detail/peripheral/${match.params.id}`)\r\n .then((data: any) => {\r\n setHeadingInfo([\r\n 'Name: ' + data[0].peripheral.peripheralName,\r\n 'Type: ' + data[0].peripheral.peripheralType,\r\n 'Purchase Date: ' + formatDate(data[0].peripheral.purchaseDate),\r\n 'End of Life: ' + formatDate(data[0].peripheral.endOfLife),\r\n ])\r\n setFirstTableData([])\r\n setSecondTableData([])\r\n setThirdTableData([\r\n [\r\n data[0].employeeAssignedId\r\n ? {\r\n value: data[0].employeeAssignedName,\r\n sortBy: data[0].employeeAssignedName,\r\n id: data[0].employeeAssignedId,\r\n onClick: (id: any) => {\r\n history.push({\r\n pathname: '/employees/detail/' + id,\r\n state: {prev: history.location},\r\n })\r\n },\r\n }\r\n : {value: data[0].employeeAssignedName, sortBy: data[0].employeeAssignedName},\r\n {\r\n value: data[0].departmentName,\r\n sortBy: data[0].departmentName,\r\n id: data[0].departmentID,\r\n onClick: (id: any) => {\r\n history.push({\r\n pathname: '/departments/detail/' + id,\r\n state: {prev: history.location},\r\n })\r\n },\r\n },\r\n {value: data[0].peripheral.serialNumber, sortBy: data[0].peripheral.serialNumber},\r\n ],\r\n ])\r\n setCostPerYear(data[0].peripheral.costPerYear)\r\n setFlatCost(data[0].peripheral.flatCost)\r\n setCommentText(data[0].peripheral.textField)\r\n setHistoryLogEntries(data[0].peripheralHistory)\r\n setIsDeleted(data[0].isDeleted)\r\n\r\n checkImage(data[0].icon, axios, peripheralPlaceholder)\r\n .then(image => setImg(image))\r\n .catch(err => console.error(err))\r\n })\r\n .catch((err: any) => console.error(err))\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n getData()\r\n }, [])\r\n\r\n async function handleArchive() {\r\n if (\r\n window.confirm(`Are you sure you want to ${isDeleted ? 'recover' : 'archive'} this ${match.params.type}?`)\r\n ) {\r\n await axios.put(`${isDeleted ? 'recover' : 'archive'}/${match.params.type}/${match.params.id}`, {})\r\n history.push({\r\n pathname: `/hardware${isDeleted ? `/edit/${match.params.type}/${match.params.id}` : ''}`,\r\n state: {prev: history.location},\r\n })\r\n }\r\n }\r\n\r\n // Returns an arry of the costs to be dislayed.\r\n function getCosts(): ICostText[] {\r\n let costTexts: ICostText[] = []\r\n if (flatCost !== undefined && flatCost !== null && flatCost !== 0) {\r\n costTexts.push({title: 'Initial Cost', cost: `${formatMoney(flatCost)}`})\r\n }\r\n if (costPerYear !== undefined && costPerYear !== null && costPerYear !== 0) {\r\n costTexts.push({title: 'Cost Per Year', cost: `${formatMoney(costPerYear)}`})\r\n }\r\n return costTexts\r\n }\r\n\r\n var titleStyle = styles.titleText\r\n if (match.params.type === 'server') {\r\n titleStyle = styles.serverTitle\r\n }\r\n\r\n return (\r\n <div className={s(styles.detailMain, isDarkMode ? styles.backgroundDark : {})}>\r\n <div className={styles.columns}>\r\n {/* column 1 */}\r\n <div className={styles.firstColumn}>\r\n <BackButton history={history} className={styles.backButton} />\r\n <DetailImage src={img} />\r\n <DetailCostText costTexts={getCosts()} />\r\n </div>\r\n {/* column 2 */}\r\n <div className={styles.secondColumn}>\r\n {isAdmin && (\r\n <Group direction='row' justify='start' className={styles.group}>\r\n {!isDeleted && (\r\n <Button\r\n text='Edit'\r\n icon='edit'\r\n onClick={() => {\r\n history.push({\r\n pathname: '/hardware/edit/' + match.params.type + '/' + match.params.id,\r\n state: {prev: history.location},\r\n })\r\n }}\r\n className={styles.editbutton}\r\n />\r\n )}\r\n\r\n <Button\r\n text={isDeleted ? 'Recover' : 'Archive'}\r\n icon='archive'\r\n onClick={handleArchive}\r\n className={styles.archivebutton}\r\n />\r\n </Group>\r\n )}\r\n\r\n {/* title/makeModel/dates/virtualized */}\r\n <div className={titleStyle}>\r\n <div className={s(styles.hardwareName, isDarkMode ? styles.hardwareNameDark : {})}>\r\n {match.params.type}\r\n </div>\r\n {headingInfo.map((heading: string) => (\r\n <div className={styles.hardwareText}>{heading} </div>\r\n ))}\r\n </div>\r\n\r\n {/* <div className={styles.tableContainer}> */}\r\n {/* first table */}\r\n {firstTableData && firstTableData[0] && (\r\n <DetailPageTable\r\n headers={firstTableHeaders}\r\n rows={[\r\n firstTableData.map((datum: string | number) => {\r\n return {value: datum, sortBy: datum}\r\n }),\r\n ]}\r\n setRows={() => {}}\r\n sort={false}\r\n hover={false}\r\n className={styles.detailTable}\r\n />\r\n )}\r\n {/* second table */}\r\n {secondTableData && secondTableData[0] && (\r\n <DetailPageTable\r\n headers={secondTableHeaders}\r\n rows={[\r\n secondTableData.map((datum: string | number) => {\r\n return {value: datum, sortBy: datum}\r\n }),\r\n ]}\r\n setRows={() => {}}\r\n sort={false}\r\n hover={false}\r\n className={styles.detailTable}\r\n />\r\n )}\r\n {/* third table */}\r\n {thirdTableData && thirdTableData[0] && (\r\n <DetailPageTable\r\n headers={thirdTableHeaders}\r\n rows={\r\n thirdTableData /*[\r\n thirdTableData.map((datum: string | number) => {\r\n return {value: datum, sortBy: datum}\r\n }),\r\n ]*/\r\n }\r\n setRows={() => {}}\r\n sort={false}\r\n hover={false}\r\n className={styles.detailTable}\r\n />\r\n )}\r\n {/* </div> */}\r\n\r\n {/* history log */}\r\n <div className={styles.historyLogContainer}>\r\n <HistoryLog historyLog={sortByDate(historyLogEntries)} canEdit={false} />\r\n </div>\r\n\r\n {/* comment section */}\r\n <div>\r\n <table className={styles.table}>\r\n <tr>\r\n <td className={styles.header}>Text Field</td>\r\n </tr>\r\n <tr>\r\n <td className={styles.rowData}>{commentText}</td>\r\n </tr>\r\n </table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import React, {useContext} from 'react'\r\n\r\n// Utils\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\n\r\n// Styles\r\nimport styles from './Checkbox.module.css'\r\nimport { ThemeContext } from '../../App';\r\n\r\n// Types\r\ninterface ICheckboxProps {\r\n checked: boolean\r\n title?: string\r\n className?: string\r\n boxClassName?: string\r\n onClick: () => void\r\n}\r\n\r\n// Primary Component\r\nexport const Checkbox: React.SFC<ICheckboxProps> = props => {\r\n const {checked, title = '', onClick, className = '', boxClassName = ''} = props\r\n const { isDarkMode } = useContext(ThemeContext)\r\n\r\n return (\r\n <div className={s(styles.checkboxContainer, className)}>\r\n <div className={styles.checkboxTitle}>{title}</div>\r\n <div className={styles.checkbox} onClick={onClick}>\r\n <div className={s(styles.check, checked ? s(styles.checked, isDarkMode ? styles.checkedDark : {}) : '', boxClassName)}>\r\n {checked && <div className={s(styles.checkmark, isDarkMode ? styles.checkmarkDark : {})} />}\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import React, {useState, useEffect, useContext} from 'react'\r\nimport {AxiosService} from '../../../services/AxiosService/AxiosService'\r\nimport {Route, Switch} from 'react-router-dom'\r\nimport {sortTable} from '../../../utilities/quickSort'\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\nimport {cloneDeep} from 'lodash'\r\nimport {format} from '../../../utilities/formatEmptyStrings'\r\nimport {formatDate} from '../../../utilities/FormatDate'\r\nimport {formatCost} from '../../../utilities/FormatCost'\r\nimport {History} from 'history'\r\nimport {checkImage} from '../../../utilities/CheckImage'\r\nimport {searchFilter} from '../../../utilities/SearchFilter'\r\n\r\n// Components\r\nimport {FilteredSearch} from '../../reusables/FilteredSearch/FilteredSearch'\r\nimport {Button} from '../../reusables/Button/Button'\r\nimport {Group} from '../../reusables/Group/Group'\r\nimport {Table} from '../../reusables/Table/Table'\r\nimport {Checkbox} from '../../reusables/Checkbox/Checkbox'\r\n\r\n// Context\r\nimport {LoginContext, ThemeContext} from '../../App/App'\r\n\r\n// Styles\r\nimport styles from './ProgramsListPage.module.css'\r\nimport placeholder from '../../../content/Images/Placeholders/program-placeholder.png'\r\n\r\n// Types\r\ninterface IProgramsListPageProps {\r\n history: History\r\n}\r\n\r\n// Primary Component\r\nexport const ProgramsListPage: React.SFC<IProgramsListPageProps> = props => {\r\n const {history} = props\r\n const {\r\n loginContextVariables: {isAdmin},\r\n loginContextVariables,\r\n } = useContext(LoginContext)\r\n const axios = new AxiosService(loginContextVariables)\r\n const {isDarkMode} = useContext(ThemeContext)\r\n\r\n // state\r\n const [displayImages, setDisplayImages] = useState<{name: string; img: string}[]>([])\r\n\r\n const [listData, setListData] = useState<any[]>([])\r\n const [filteredData, setFilteredData] = useState(listData)\r\n const [search, setSearch] = useState('')\r\n const [selected, setSelected] = useState({label: 'Programs', value: 'name'})\r\n\r\n const [archivedData, setArchivedData] = useState<any[]>([])\r\n const [isArchive, setIsArchive] = useState(false)\r\n\r\n const columns = ['name', 'renewalDate', 'totalUsers', 'cost']\r\n const headerList = ['Programs', 'Renewal Date', 'Total Users ', 'Cost']\r\n const options = columns.map((c, i) => ({label: headerList[i], value: c}))\r\n\r\n const [checkboxes, setCheckboxes] = useState(false)\r\n const [pinned, setPinned] = useState<{name: string; pinned: boolean}[]>([])\r\n\r\n async function getData() {\r\n var imagePromises: any[] = []\r\n await axios\r\n .get('/list/programs/false')\r\n .then((data: any) => {\r\n var programs: any[] = []\r\n var pins: {name: string; pinned: boolean}[] = []\r\n data.forEach((i: any) => {\r\n programs.push({\r\n name: format(i.programName),\r\n renewalDate: formatDate(i.renewalDate),\r\n totalUsers: i.countProgInUse,\r\n perYear: i.progCostPerYear,\r\n perUse: i.progCostPerUse,\r\n isPerYear: i.isCostPerYear,\r\n icon: i.icon,\r\n cost: formatCost(i.isCostPerYear, i.progCostPerYear, i.progCostPerUse), //used for searching, not displayed\r\n })\r\n\r\n imagePromises.push(\r\n checkImage(i.icon, axios, placeholder).then(image => {\r\n return {name: i.programName, img: image}\r\n })\r\n )\r\n pins.push({name: i.programName, pinned: i.isPinned})\r\n })\r\n setListData(programs)\r\n setPinned(pins)\r\n })\r\n .catch((err: any) => console.error(err))\r\n\r\n await Promise.all(imagePromises)\r\n .then(response => setDisplayImages(response))\r\n .catch((err: any) => console.error(err))\r\n\r\n await axios\r\n .get('list/programs/true')\r\n .then((data: any) => {\r\n var programs: any[] = []\r\n var pins: {name: string; pinned: boolean}[] = []\r\n data.forEach((i: any) => {\r\n programs.push({\r\n name: format(i.programName),\r\n renewalDate: formatDate(i.renewalDate),\r\n totalUsers: 0,\r\n perYear: 0,\r\n perUse: 0,\r\n isPerYear: i.isCostPerYear,\r\n icon: placeholder,\r\n cost: formatCost(i.isCostPerYear, i.progCostPerYear, i.progCostPerUse), //used for searching, not displayed\r\n })\r\n pins.push({name: i.programName, pinned: i.pinned ? true : false})\r\n })\r\n setArchivedData(programs)\r\n })\r\n .catch((err: any) => console.error(err))\r\n }\r\n\r\n useEffect(() => {\r\n getData()\r\n }, [])\r\n\r\n useEffect(() => {\r\n setFilteredData(searchFilter(isArchive ? archivedData : listData, selected.value, search))\r\n }, [search, selected, listData, archivedData, isArchive])\r\n\r\n const handleClick = () => {\r\n history.push({pathname: `/programs/edit/overview/new/inventory`, state: {prev: history.location}})\r\n }\r\n\r\n const handleRowClick = (row: any) => {\r\n // go to prog overview\r\n history.push({\r\n pathname: `/programs/overview/${row[0]}/${isArchive ? 'archived' : 'inventory'}`,\r\n state: {prev: history.location},\r\n })\r\n }\r\n\r\n var filteredRows: any[] = []\r\n filteredData.forEach(rowObj => {\r\n filteredRows.push(Object.values(rowObj))\r\n })\r\n\r\n const [rows, setRows] = useState(filteredRows)\r\n useEffect(() => {\r\n setRows(filteredRows)\r\n }, [filteredData])\r\n\r\n //-------------- this will all be the same -------------\r\n const headerStates = []\r\n const headerStateCounts = []\r\n\r\n //initialize all the header states and styling to be not sorted\r\n for (let i = 0; i < headerList.length; i++) {\r\n headerStates.push(styles.descending)\r\n headerStateCounts.push(0)\r\n }\r\n var initHeaderStateCounts = cloneDeep(headerStateCounts)\r\n var tempHeaderStates = cloneDeep(headerStates)\r\n var tempHeaderStateCounts = cloneDeep(headerStateCounts)\r\n\r\n var initState = {headerStates, headerStateCounts}\r\n const [sortState, setSortState] = useState(initState)\r\n\r\n function sortStates(index: number) {\r\n if (sortState.headerStateCounts[index] === 0) {\r\n tempHeaderStates[index] = styles.descending\r\n tempHeaderStateCounts[index] = 1\r\n setSortState({headerStates: tempHeaderStates, headerStateCounts: tempHeaderStateCounts})\r\n tempHeaderStateCounts = [...initHeaderStateCounts]\r\n } else if (sortState.headerStateCounts[index] === 1) {\r\n tempHeaderStates[index] = styles.ascending\r\n tempHeaderStateCounts[index] = 0\r\n setSortState({headerStates: tempHeaderStates, headerStateCounts: tempHeaderStateCounts})\r\n tempHeaderStateCounts = [...initHeaderStateCounts]\r\n }\r\n }\r\n\r\n const renderHeaders = () => {\r\n var headers = []\r\n\r\n //Check Box Row\r\n if (checkboxes) {\r\n let header = <td key={'checkbox'}></td>\r\n\r\n headers.push(header)\r\n }\r\n\r\n var firstHeader = (\r\n <td\r\n key={0}\r\n onClick={e => {\r\n setRows(sortTable(rows, 0, sortState.headerStateCounts[0]))\r\n sortStates(0)\r\n }}\r\n >\r\n <div className={s(styles.header, styles.nameHeader)}>\r\n {headerList[0]}\r\n <div className={sortState.headerStates[0]} />\r\n </div>\r\n </td>\r\n )\r\n headers.push(firstHeader)\r\n\r\n for (let i = 1; i < headerList.length; i++) {\r\n let header =\r\n i === 3 ? (\r\n <td\r\n key={headerList[i]}\r\n onClick={e => {\r\n setRows(sortTable(rows, 3, sortState.headerStateCounts[i]))\r\n sortStates(i)\r\n }}\r\n >\r\n <div className={styles.header}>\r\n {headerList[i]}\r\n <div className={sortState.headerStates[i]} />\r\n </div>\r\n </td>\r\n ) : (\r\n <td\r\n key={headerList[i]}\r\n onClick={e => {\r\n setRows(sortTable(rows, i, sortState.headerStateCounts[i]))\r\n sortStates(i)\r\n }}\r\n >\r\n <div className={styles.header}>\r\n {headerList[i]}\r\n <div className={sortState.headerStates[i]} />\r\n </div>\r\n </td>\r\n )\r\n headers.push(header)\r\n }\r\n\r\n return headers\r\n }\r\n\r\n function concatenatedDept(row: any[]) {\r\n var image = placeholder\r\n for (let i = 0; i < displayImages.length; i++) {\r\n if (displayImages[i].name === row[0]) {\r\n image = displayImages[i].img\r\n }\r\n }\r\n return image ? (\r\n <td key={row[0]} className={styles.programs} onClick={() => handleRowClick(row)}>\r\n <div className={styles.imgContainer}>\r\n <img className={styles.icon} src={image} alt={''} />\r\n </div>\r\n\r\n <div className={styles.alignLeft}>\r\n <div className={styles.programName}>{row[0]}</div>\r\n </div>\r\n </td>\r\n ) : (\r\n <td key={row[0]} className={styles.programs} onClick={() => handleRowClick(row)}>\r\n <div className={styles.imgContainer}>\r\n <img className={styles.icon} src={placeholder} alt={''} />\r\n </div>\r\n\r\n <div className={styles.alignLeft}>\r\n <div className={styles.programName}>{row[0]}</div>\r\n </div>\r\n </td>\r\n )\r\n }\r\n\r\n var renderedRows: any[] = []\r\n\r\n const getChecked = (name: string) => {\r\n var p = pinned.filter(pin => pin.name === name)\r\n return p && p[0] ? p[0].pinned : false\r\n }\r\n\r\n const handleChecked = (name: string) => {\r\n var p = pinned.filter(pin => pin.name === name)\r\n var otherPins = pinned.filter(pin => pin.name !== name)\r\n setPinned([...otherPins, {name: name, pinned: p && p[0] ? !p[0].pinned : false}])\r\n }\r\n\r\n rows.forEach(row => {\r\n const transformedRow: any[] = []\r\n for (let i = 0; i < row.length; i++) {\r\n if (checkboxes && i === 0) {\r\n transformedRow.push(\r\n <td key={i + row[4]} className={styles.checkboxRow}>\r\n <Checkbox checked={getChecked(row[0])} onClick={() => handleChecked(row[0])} />\r\n </td>\r\n )\r\n }\r\n switch (i) {\r\n case 0:\r\n transformedRow.push(concatenatedDept(row))\r\n break\r\n case 1:\r\n transformedRow.push(\r\n <td key={i + row[1]} className={styles.alignLeft} onClick={() => handleRowClick(row)}>\r\n {row[1]}\r\n </td>\r\n )\r\n break\r\n case 2:\r\n transformedRow.push(\r\n <td className={styles.alignLeft} onClick={() => handleRowClick(row)}>\r\n {row[2] === 1 ? row[2] + ' user' : row[2] + ' users'}\r\n </td>\r\n )\r\n break\r\n case 3:\r\n transformedRow.push(\r\n <td key={i + row[3]} className={styles.alignLeft} onClick={() => handleRowClick(row)}>\r\n {formatCost(row[5], row[3], row[4])}\r\n </td>\r\n )\r\n break\r\n }\r\n }\r\n\r\n renderedRows.push(transformedRow)\r\n })\r\n\r\n async function handlePinChanges() {\r\n var pins: string[] = []\r\n pinned.forEach(pin => {\r\n if (pin.pinned) {\r\n pins.push(pin.name)\r\n }\r\n })\r\n\r\n await axios.put('/update/programPins', pins).catch((err: any) => console.error(err))\r\n setCheckboxes(!checkboxes)\r\n }\r\n\r\n return (\r\n <div className={s(styles.programsListMain, isDarkMode ? styles.programsListMainDark : {})}>\r\n <Switch>\r\n <Route path='/programs/:name' render={props => <div>{props.match.params.name} Detail Page</div>} />\r\n </Switch>\r\n\r\n <Group direction='row' justify='between' className={styles.group}>\r\n <div className={styles.buttonContainer}>\r\n {isAdmin && <Button text='Add' icon='add' onClick={handleClick} className={styles.addButton} />}\r\n <Button\r\n text={isArchive ? 'View Active' : 'View Archives'}\r\n onClick={() => {\r\n setIsArchive(!isArchive)\r\n setCheckboxes(false)\r\n }}\r\n className={styles.archiveButton}\r\n />\r\n\r\n {!isArchive && checkboxes && isAdmin ? (\r\n <Button text='Save Changes' onClick={handlePinChanges} className={styles.dashboardButton} />\r\n ) : (\r\n !isArchive &&\r\n isAdmin && (\r\n <Button\r\n text='Pin To Dashboard'\r\n onClick={() => setCheckboxes(!checkboxes)}\r\n className={styles.dashboardButton}\r\n />\r\n )\r\n )}\r\n </div>\r\n <FilteredSearch\r\n search={search}\r\n setSearch={setSearch}\r\n options={options}\r\n selected={selected}\r\n setSelected={setSelected}\r\n />\r\n </Group>\r\n\r\n <div className={styles.page}>\r\n <Table headers={renderHeaders()} rows={renderedRows} />\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import React, {useState, useEffect, useContext} from 'react'\r\nimport {AxiosService} from '../../../services/AxiosService/AxiosService'\r\nimport {History} from 'history'\r\nimport {match} from 'react-router-dom'\r\n\r\n// Components\r\nimport {DetailPageTable, ITableItem} from '../../reusables/DetailPageTable/DetailPageTable'\r\nimport {Button} from '../../reusables/Button/Button'\r\nimport {Group} from '../../reusables/Group/Group'\r\nimport placeholder from '../../../content/Images/Placeholders/program-placeholder.png'\r\nimport {BackButton} from '../../reusables/BackButton/BackButton'\r\nimport {DetailImage} from '../../reusables/DetailImage/DetailImage'\r\nimport {DetailCostText} from '../../reusables/DetailCostText/DetailCostText'\r\n\r\n// Utils\r\nimport {formatDate} from '../../../utilities/FormatDate'\r\nimport {format} from '../../../utilities/formatEmptyStrings'\r\nimport {formatCost, formatMoney} from '../../../utilities/FormatCost'\r\nimport {checkImage} from '../../../utilities/CheckImage'\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\n\r\n// Styles\r\nimport styles from './ProgramOverviewPage.module.css'\r\n\r\n// Context\r\nimport {LoginContext, ThemeContext} from '../../App/App'\r\n\r\n// Types\r\ninterface IProgramOverviewPageProps {\r\n history: History\r\n match: match<{id: string; archived: string}>\r\n}\r\n\r\ninterface ExpectedProgramOverview {\r\n countProgInUse: number\r\n countProgOverall: number\r\n isCostPerYear: boolean\r\n progCostPerYear: number\r\n progFlatCost: number\r\n program: string\r\n programlicenseKey: string\r\n}\r\n\r\nexport interface ExpectedProgramType {\r\n employeeId: number\r\n employeeName: string\r\n programId: number\r\n programlicenseKey: string\r\n renewalDate: string\r\n}\r\n\r\nexport interface ExpectedPluginType {\r\n isCostPerYear: boolean\r\n pluginCostPerYear: number\r\n pluginFlatCost: number\r\n pluginName: string\r\n pluginId: number\r\n renewalDate: string\r\n dateBought: string\r\n textField: string\r\n monthsPerRenewal: number\r\n}\r\n\r\n// Primary Component\r\nexport const ProgramOverviewPage: React.SFC<IProgramOverviewPageProps> = props => {\r\n const {\r\n history,\r\n match: {\r\n params: {archived, id},\r\n },\r\n } = props\r\n\r\n const {\r\n loginContextVariables: {isAdmin},\r\n loginContextVariables,\r\n } = useContext(LoginContext)\r\n const {isDarkMode} = useContext(ThemeContext)\r\n\r\n const axios = new AxiosService(loginContextVariables)\r\n const [img, setImg] = useState('')\r\n const [programData, setProgramData] = useState<ExpectedProgramOverview>({\r\n countProgInUse: 0,\r\n countProgOverall: 0,\r\n isCostPerYear: false,\r\n progCostPerYear: 0,\r\n progFlatCost: 0,\r\n program: '',\r\n programlicenseKey: '',\r\n })\r\n const [programRows, setProgramRows] = useState<ITableItem[][]>([])\r\n const [pluginRows, setPluginRows] = useState<ITableItem[][]>([])\r\n\r\n const programHeaders = [`${id}`, 'Employee', 'License Key', 'Renewal Date']\r\n const pluginHeaders = ['Plugins', 'Renewal Date', 'Cost']\r\n\r\n async function getData() {\r\n await axios\r\n .get(`/detail/ProgramOverview/${id}/${archived === 'archived' ? true : false}`)\r\n .then((data: any) => {\r\n setProgramData(data[0].programOverview)\r\n let prog: ITableItem[][] = []\r\n data[0].inDivPrograms.map((i: ExpectedProgramType) =>\r\n prog.push(\r\n i.employeeName\r\n ? [\r\n {\r\n value: `Copy ${i.programId}`,\r\n id: i.programId,\r\n sortBy: i.programId,\r\n onClick: handleCopyClick,\r\n },\r\n {\r\n value: format(i.employeeName),\r\n id: i.employeeId,\r\n sortBy: format(i.employeeName),\r\n onClick: handleEmpClick,\r\n },\r\n {value: format(i.programlicenseKey), sortBy: i.programlicenseKey},\r\n {value: formatDate(i.renewalDate), sortBy: formatDate(i.renewalDate)},\r\n ]\r\n : [\r\n {\r\n value: `Copy ${i.programId}`,\r\n id: i.programId,\r\n sortBy: i.programId,\r\n onClick: handleCopyClick,\r\n },\r\n {\r\n value: format(i.employeeName),\r\n id: i.employeeId,\r\n sortBy: format(i.employeeName),\r\n },\r\n {value: format(i.programlicenseKey), sortBy: i.programlicenseKey},\r\n {value: formatDate(i.renewalDate), sortBy: formatDate(i.renewalDate)},\r\n ]\r\n )\r\n )\r\n setProgramRows(prog)\r\n\r\n let plug: ITableItem[][] = []\r\n data[0].listOfPlugins.map((i: ExpectedPluginType) =>\r\n plug.push([\r\n {value: format(i.pluginName), sortBy: format(i.pluginName), tooltip: i.textField},\r\n {value: formatDate(i.renewalDate), sortBy: formatDate(i.renewalDate)},\r\n {\r\n value: formatCost(i.isCostPerYear, i.pluginCostPerYear, i.pluginFlatCost),\r\n sortBy: i.pluginCostPerYear,\r\n },\r\n ])\r\n )\r\n setPluginRows(plug)\r\n\r\n checkImage(data[0].programOverview.icon, axios, placeholder)\r\n .then(image => setImg(image))\r\n .catch(err => console.error(err))\r\n })\r\n .catch((err: any) => console.error(err))\r\n }\r\n useEffect(() => {\r\n getData()\r\n }, [])\r\n\r\n const handleEmpClick = (id: number) => {\r\n history.push({pathname: `/employees/detail/${id}`, state: {prev: history.location}})\r\n }\r\n\r\n const handleCopyClick = (id: number) => {\r\n history.push({pathname: `/programs/detail/${id}`, state: {prev: history.location}})\r\n }\r\n\r\n async function handleArchive() {\r\n //cant archive everything unless there are no plugins\r\n if (pluginRows.length > 0 && archived !== 'archived') {\r\n window.alert('Please archive the plugins before you archive this program.')\r\n } else if (archived !== 'archived') {\r\n if (\r\n window.confirm(\r\n `Are you sure you want to archive all copies of ${id}? ${programData.countProgInUse} are in use.`\r\n )\r\n ) {\r\n let idArray: any[] = []\r\n programRows.forEach(program => {\r\n idArray.push(program[0].id)\r\n })\r\n await axios.put(`archive/programs`, idArray).catch((err: any) => console.error(err))\r\n\r\n setProgramRows([])\r\n history.push({pathname: `/programs`, state: {prev: history.location}})\r\n }\r\n }\r\n\r\n if (archived === 'archived') {\r\n if (window.confirm(`Are you sure you want to recover ${id}? `)) {\r\n let idArray: any[] = []\r\n programRows.forEach(program => {\r\n idArray.push(program[0].id)\r\n })\r\n await axios.put(`recover/programs`, idArray).catch((err: any) => console.error(err))\r\n setProgramRows([])\r\n history.push({pathname: `/programs/edit/overview/${id}/inventory`, state: {prev: history.location}})\r\n }\r\n }\r\n }\r\n\r\n return (\r\n <div className={s(styles.progOverviewMain, isDarkMode ? styles.backgroundDark : {})}>\r\n <div className={styles.columns}>\r\n {/* column 1 */}\r\n <div className={styles.firstColumn}>\r\n <BackButton history={history} className={styles.backButton} />\r\n <DetailImage src={img} />\r\n {programData.progFlatCost > 0 && (\r\n <DetailCostText\r\n costTexts={[{title: 'Paid', cost: `${formatMoney(programData.progFlatCost)}`}]}\r\n />\r\n )}\r\n {programData.isCostPerYear ? (\r\n <DetailCostText\r\n costTexts={[{title: 'Yearly', cost: `${formatMoney(programData.progCostPerYear)}`}]}\r\n />\r\n ) : (\r\n programData.progCostPerYear > 0 && (\r\n <DetailCostText\r\n costTexts={[\r\n {title: 'Monthly', cost: `${formatMoney(programData.progCostPerYear / 12)}`},\r\n ]}\r\n />\r\n )\r\n )}\r\n </div>\r\n {/* column 2 */}\r\n <div className={styles.secondColumn}>\r\n {isAdmin && (\r\n <Group direction='row' justify='start' className={styles.group}>\r\n {archived !== 'archived' && (\r\n <Button\r\n text='Edit'\r\n icon='edit'\r\n onClick={() => {\r\n history.push({\r\n pathname: `/programs/edit/overview/${id}/${archived}`,\r\n state: {prev: history.location},\r\n })\r\n }}\r\n className={styles.editbutton}\r\n />\r\n )}\r\n\r\n <Button\r\n text={archived === 'archived' ? 'Recover' : 'Archive'}\r\n icon='archive'\r\n onClick={handleArchive}\r\n className={styles.archivebutton}\r\n />\r\n </Group>\r\n )}\r\n <div className={styles.titleText}>\r\n <div className={s(styles.programName, isDarkMode ? styles.dark : {})}>{id}</div>\r\n <div className={styles.programText}>\r\n {programData.countProgInUse} / {programData.countProgOverall} Used\r\n </div>\r\n {programData.programlicenseKey && (\r\n <div className={styles.programText}>License Key: {programData.programlicenseKey}</div>\r\n )}\r\n </div>\r\n <DetailPageTable\r\n headers={programHeaders}\r\n rows={programRows}\r\n setRows={setProgramRows}\r\n className={styles.table}\r\n />\r\n <div className={styles.spaceBetweenTables} />\r\n <DetailPageTable\r\n headers={pluginHeaders}\r\n rows={pluginRows}\r\n setRows={setPluginRows}\r\n className={styles.table}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport {GoCloudUpload} from 'react-icons/go'\r\n\r\n// Styles\r\nimport styles from './PictureInput.module.css'\r\n\r\n// Types\r\ninterface IPictureInputProps {\r\n setImage: any\r\n image: any\r\n}\r\n\r\n// Helpers\r\n\r\n// Primary Component\r\nexport const PictureInput: React.SFC<IPictureInputProps> = props => {\r\n const {setImage, image} = props\r\n const getImg = () => {\r\n if (image) {\r\n return URL.createObjectURL(image)\r\n }\r\n\r\n return ''\r\n }\r\n return (\r\n <div className={styles.pictureInputMain}>\r\n <div className={styles.imgContainer}>\r\n {image ? (\r\n <img src={getImg()} alt={''} className={styles.selectedImage} />\r\n ) : (\r\n <GoCloudUpload size={300} className={styles.selectedImage} onClick={() => {}} />\r\n )}\r\n </div>\r\n <input\r\n className={styles.imgInput}\r\n type='file'\r\n accept='image/*'\r\n onChange={e => {\r\n var files = e.target.files\r\n files && files[0] && setImage(files[0])\r\n }}\r\n />\r\n </div>\r\n )\r\n}\r\n","import React from 'react'\r\n\r\n// Packages\r\n\r\n// Components\r\n\r\n// Utils\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\n\r\n// Styles\r\nimport styles from './Input.module.css'\r\n\r\n// Types\r\ninterface IInputProps {\r\n label?: string\r\n value: string\r\n onChange: any\r\n maxChars: number\r\n className?: string\r\n width?: string\r\n fontSize?: string\r\n}\r\n\r\n// Helpers\r\n\r\n// Primary Component\r\nexport const Input: React.SFC<IInputProps> = props => {\r\n const {label, onChange, value, maxChars, className, width = '380px', fontSize = '24px'} = props\r\n\r\n return (\r\n <div className={s(styles.main, className)}>\r\n {label && (\r\n <div className={styles.text} style={{fontSize: `${fontSize}`}}>\r\n {label}\r\n </div>\r\n )}\r\n <input\r\n type='text'\r\n className={styles.input}\r\n value={value}\r\n onChange={e => onChange(e)}\r\n style={{width: `${width}`}}\r\n />\r\n {value && value.length > maxChars && <div className={styles.msg}>Too Many Characters</div>}\r\n </div>\r\n )\r\n}\r\n","import React from 'react'\r\n\r\n// Packages\r\nimport DatePicker from 'react-datepicker'\r\n\r\n// Components\r\nimport {Group} from '../Group/Group'\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\nimport {DropdownList} from '../../reusables/Dropdown/DropdownList'\r\nimport {Checkbox} from '../Checkbox/Checkbox'\r\nimport {Button} from '../Button/Button'\r\nimport {Input} from '../Input/Input'\r\n\r\n// Styles\r\nimport styles from './ProgramForm.module.css'\r\nimport dropdownStyles from '../../reusables/Dropdown/Dropdown.module.css'\r\n\r\n// Types\r\nexport interface IProgramFormInputs {\r\n name: {value: string; changed: boolean}\r\n programName: {value: string; changed: boolean}\r\n description: {value: string; changed: boolean}\r\n cost: {value: number; changed: boolean}\r\n hasRecurringCost: boolean\r\n flatCost: {value: number; changed: boolean}\r\n hasFlatCost: boolean\r\n renewalDate: {value: Date; changed: boolean}\r\n monthsPerRenewal: {value: number; changed: boolean}\r\n purchaseDate?: {value: Date; changed: boolean}\r\n purchaseLink: {value: string; changed: boolean}\r\n licenseKey: {value: string; changed: boolean}\r\n numCopies?: {value: number; changed: boolean}\r\n}\r\n\r\ninterface IProgramFormProps {\r\n state: IProgramFormInputs\r\n setState: Function\r\n\r\n employeeDropdown: {name: string; id: number}[] | undefined\r\n selectedEmployee: {name: string; id: number} | undefined\r\n setSelectedEmployee: Function\r\n}\r\n\r\n// Primary Component\r\nexport const ProgramForm: React.SFC<IProgramFormProps> = props => {\r\n const {state, setState, employeeDropdown, selectedEmployee, setSelectedEmployee} = props\r\n\r\n return (\r\n <div className={styles.formMain}>\r\n <Group direction={'row'} justify={'between'}>\r\n <div className={styles.dateContainer}>\r\n {state.purchaseDate && state.purchaseDate.value !== undefined && (\r\n <div className={styles.dateInput}>\r\n <div className={styles.inputText}>Purchase Date</div>\r\n <DatePicker\r\n dateFormat='MM/dd/yyyy'\r\n selected={state.purchaseDate.value}\r\n onChange={e => e && setState({...state, purchaseDate: {value: e, changed: true}})}\r\n className={styles.input}\r\n />\r\n </div>\r\n )}\r\n <div className={styles.dateInput}>\r\n <div className={styles.inputText}>Renewal Date</div>\r\n <DatePicker\r\n dateFormat='MM/dd/yyyy'\r\n selected={state.renewalDate.value}\r\n onChange={e => e && setState({...state, renewalDate: {value: e, changed: true}})}\r\n className={styles.input}\r\n />\r\n </div>\r\n </div>\r\n {state.numCopies && state.numCopies.value !== undefined && (\r\n <div className={styles.row1Input}>\r\n <div className={styles.inputText}># of Copies</div>\r\n <input\r\n className={s(styles.input, styles.costInput)}\r\n type='number'\r\n value={state.numCopies.value}\r\n onChange={cost =>\r\n setState({\r\n ...state,\r\n numCopies: {value: parseInt(cost.target.value), changed: true},\r\n })\r\n }\r\n />\r\n </div>\r\n )}\r\n </Group>\r\n\r\n {/* Cost Group */}\r\n <div className={styles.radioSection}>\r\n <div className={styles.radioContainer}>\r\n <div className={styles.radio}>\r\n <Checkbox\r\n className={styles.checkBoxContainerOne}\r\n checked={state.hasFlatCost}\r\n onClick={() => setState({...state, hasFlatCost: !state.hasFlatCost})}\r\n />\r\n </div>\r\n <div>\r\n <div className={styles.inputText}>Initial Cost</div>\r\n <input\r\n className={styles.radioInput}\r\n type='number'\r\n step='0.01'\r\n value={state.flatCost.value}\r\n onChange={cost => {\r\n if (state.hasFlatCost) {\r\n setState({\r\n ...state,\r\n flatCost: {value: parseFloat(cost.target.value), changed: true},\r\n })\r\n }\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <div className={styles.radioContainer}>\r\n <Checkbox\r\n className={styles.checkBoxContainerTwo}\r\n checked={state.hasRecurringCost}\r\n onClick={() => setState({...state, hasRecurringCost: !state.hasRecurringCost})}\r\n />\r\n <div>\r\n <div className={styles.inputText}>Recurring Cost</div>\r\n <input\r\n className={styles.radioInput}\r\n type='number'\r\n step='0.01'\r\n value={state.cost.value}\r\n onChange={cost => {\r\n if (state.hasRecurringCost) {\r\n setState({\r\n ...state,\r\n cost: {value: parseFloat(cost.target.value), changed: true},\r\n })\r\n }\r\n }}\r\n />\r\n </div>\r\n {state.hasRecurringCost && (\r\n <div className={styles.marginLeft}>\r\n <div className={styles.inputText}>Months per Renewal</div>\r\n <input\r\n className={styles.monthsInput}\r\n type='number'\r\n step='1'\r\n value={state.monthsPerRenewal.value}\r\n onChange={e =>\r\n setState({\r\n ...state,\r\n monthsPerRenewal: {value: parseInt(e.target.value), changed: true},\r\n })\r\n }\r\n />\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n <div className={styles.line} />\r\n\r\n <Group direction={'row'} justify={'between'}>\r\n <div className={styles.inputContainer}>\r\n <Input\r\n label={'License Key'}\r\n value={state.licenseKey.value}\r\n onChange={(e: any) => setState({...state, licenseKey: {value: e.target.value, changed: true}})}\r\n maxChars={100}\r\n width={'100%'}\r\n />\r\n </div>\r\n\r\n <div className={styles.inputContainer}>\r\n <Input\r\n label={'Purchase Link'}\r\n value={state.purchaseLink.value}\r\n onChange={(e: any) =>\r\n setState({...state, purchaseLink: {value: e.target.value, changed: true}})\r\n }\r\n maxChars={250}\r\n width={'100%'}\r\n />\r\n </div>\r\n </Group>\r\n <div className={s(styles.inputContainer, styles.descriptionContainer)}>\r\n <div className={styles.inputText}>Description</div>\r\n <textarea\r\n className={s(styles.input, styles.description)}\r\n value={state.description.value}\r\n onChange={e => setState({...state, description: {value: e.target.value, changed: true}})}\r\n />\r\n </div>\r\n\r\n <div className={styles.line} />\r\n\r\n <div className={styles.assignContainer}>\r\n <div className={styles.empText}>Assign to:</div>\r\n\r\n <Button className={s(styles.input, styles.employeeDropdownButton)}>\r\n <div className={s(dropdownStyles.dropdownContainer, styles.employeeDropdownContainer)}>\r\n {employeeDropdown && (\r\n <DropdownList\r\n triggerElement={({isOpen, toggle}) => (\r\n <button onClick={toggle} className={dropdownStyles.dropdownButton}>\r\n <div className={s(dropdownStyles.dropdownTitle, styles.employeeDropdownTitle)}>\r\n <div>{selectedEmployee ? selectedEmployee.name : 'Select An Employee'}</div>\r\n <div\r\n className={s(\r\n dropdownStyles.dropdownArrow,\r\n styles.employeeDropdownArrow\r\n )}\r\n />\r\n </div>\r\n </button>\r\n )}\r\n choicesList={() => (\r\n <ul className={s(dropdownStyles.dropdownList, styles.dropdownList)}>\r\n {employeeDropdown.map(i => (\r\n <li\r\n className={dropdownStyles.dropdownListItem}\r\n key={i.name}\r\n onClick={() => {\r\n setSelectedEmployee(i)\r\n }}\r\n >\r\n <button className={dropdownStyles.dropdownListItemButton}>\r\n <div className={dropdownStyles.dropdownItemLabel}>{i.name}</div>\r\n </button>\r\n </li>\r\n ))}\r\n </ul>\r\n )}\r\n listWidthClass={styles.dropdownContent}\r\n />\r\n )}\r\n <div />\r\n </div>\r\n </Button>\r\n {selectedEmployee && selectedEmployee.id > 0 && (\r\n <Button\r\n text='Unassign'\r\n onClick={() => setSelectedEmployee({id: -1, name: ' '})}\r\n className={styles.unassign}\r\n />\r\n )}\r\n </div>\r\n <div className={styles.line} />\r\n </div>\r\n )\r\n}\r\n","import {AxiosService} from '../services/AxiosService/AxiosService';\r\n\r\n/*\r\nputUploadImage takes a file, and the absolute path, with the service class \r\n and an optional callback and will upload an image.\r\n*/\r\nexport const putUploadImage = (image: File, imageLocation: string, axios: AxiosService, callback?: () => void) => {\r\n var formData = new FormData()\r\n formData.append('file', image)\r\n\r\n axios\r\n .put(imageLocation, formData, {\r\n headers: {'Content-Type': 'multipart/form-data'},\r\n })\r\n .then(() => callback && callback())\r\n .catch(err => console.error(err))\r\n}\r\n\r\n\r\n","import React, {useState, useEffect, useContext} from 'react'\r\nimport {AxiosService} from '../../../services/AxiosService/AxiosService'\r\nimport {History} from 'history'\r\nimport {match} from 'react-router-dom'\r\n\r\n// Components\r\nimport {DetailPageTable, ITableItem} from '../../reusables/DetailPageTable/DetailPageTable'\r\nimport {Button} from '../../reusables/Button/Button'\r\nimport {Group} from '../../reusables/Group/Group'\r\nimport DatePicker from 'react-datepicker'\r\nimport {PictureInput} from '../../reusables/PictureInput/PictureInput'\r\nimport {ProgramForm, IProgramFormInputs} from '../../reusables/ProgramForm/ProgramForm'\r\nimport {Checkbox} from '../../reusables/Checkbox/Checkbox'\r\nimport {BackButton} from '../../reusables/BackButton/BackButton'\r\nimport {Input} from '../../reusables/Input/Input'\r\n\r\n// Utils\r\nimport {formatDate} from '../../../utilities/FormatDate'\r\nimport {format} from '../../../utilities/formatEmptyStrings'\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\nimport {formatCost} from '../../../utilities/FormatCost'\r\nimport {putUploadImage} from '../../../utilities/UploadImage'\r\n\r\n// Context\r\nimport {LoginContext, ThemeContext} from '../../App/App'\r\n\r\n// Styles\r\nimport styles from './ProgramOverviewEditPage.module.css'\r\n\r\n// Types\r\nimport {ExpectedPluginType, ExpectedProgramType} from './ProgramOverviewPage'\r\ninterface IProgramOverviewEditPageProps {\r\n history: History\r\n match: match<{id: string; archived: string}>\r\n}\r\n\r\ninterface IPluginInfo {\r\n id: number\r\n name: string\r\n programName: string\r\n description: string\r\n recurringCost: number\r\n flatCost: number\r\n renewalDate: Date\r\n purchaseDate: Date\r\n monthsPerRenewal: number\r\n}\r\n\r\n// Primary Component\r\nexport const ProgramOverviewEditPage: React.SFC<IProgramOverviewEditPageProps> = props => {\r\n const {\r\n history,\r\n match: {\r\n params: {id, archived},\r\n },\r\n } = props\r\n const {loginContextVariables} = useContext(LoginContext)\r\n const {isDarkMode} = useContext(ThemeContext)\r\n\r\n const [programRows, setProgramRows] = useState<ITableItem[][]>([])\r\n const [removedProgramRows, setRemovedProgramRows] = useState<ITableItem[][]>([])\r\n\r\n const [pluginRows, setPluginRows] = useState<ITableItem[][]>([])\r\n const [removedPluginRows, setRemovedPluginRows] = useState<ITableItem[][]>([])\r\n\r\n const [pluginForm, setPluginForm] = useState(false)\r\n const [programForm, setProgramForm] = useState({edit: false, add: false})\r\n\r\n const programHeaders = [`${id}`, 'Employee', 'License Key', 'Renewal Date']\r\n const pluginHeaders = ['Plugins', 'Renewal Date', 'Cost']\r\n\r\n // input states\r\n const [imgInput, setImgInput] = useState<File>()\r\n const [imgLocation, setImgLocation] = useState<string>()\r\n\r\n const [overviewInputs, setOverviewInputs] = useState({\r\n name: {value: id === 'new' ? '' : id, changed: false},\r\n isLicense: {value: false, changed: false},\r\n })\r\n\r\n const defaultPluginInfo = {\r\n id: -1,\r\n name: '',\r\n programName: overviewInputs.name.value,\r\n description: '',\r\n recurringCost: 0,\r\n flatCost: 0,\r\n renewalDate: new Date(),\r\n purchaseDate: new Date(),\r\n monthsPerRenewal: 0,\r\n }\r\n const [pluginInput, setPluginInput] = useState<IPluginInfo>({...defaultPluginInfo})\r\n\r\n const [pluginList, setPluginList] = useState<IPluginInfo[]>([])\r\n\r\n const [programInput, setProgramInput] = useState<IProgramFormInputs>({\r\n name: {value: '', changed: false},\r\n programName: {value: overviewInputs.name.value, changed: false},\r\n description: {value: '', changed: false},\r\n renewalDate: {value: new Date(), changed: false},\r\n purchaseDate: {value: new Date(), changed: false},\r\n purchaseLink: {value: '', changed: false},\r\n licenseKey: {value: '', changed: false},\r\n cost: {value: 0, changed: false},\r\n hasRecurringCost: false,\r\n flatCost: {value: 0, changed: false},\r\n hasFlatCost: false,\r\n monthsPerRenewal: {value: 0, changed: false},\r\n numCopies: {value: 1, changed: false},\r\n })\r\n\r\n const [programUpdateInput, setProgramUpdateInput] = useState<IProgramFormInputs>({\r\n name: {value: '', changed: false},\r\n programName: {value: overviewInputs.name.value, changed: false},\r\n description: {value: '', changed: false},\r\n renewalDate: {value: new Date(), changed: false},\r\n purchaseLink: {value: '', changed: false},\r\n licenseKey: {value: '', changed: false},\r\n cost: {value: 0, changed: false},\r\n hasRecurringCost: false,\r\n flatCost: {value: 0, changed: false},\r\n hasFlatCost: false,\r\n monthsPerRenewal: {value: 0, changed: false},\r\n })\r\n\r\n const [employeeDropdown, setEmployeeDropdown] = useState<{name: string; id: number}[]>()\r\n const [selectedEmployee, setSelectedEmployee] = useState<{name: string; id: number}>()\r\n\r\n useEffect(() => {\r\n var axios = new AxiosService(loginContextVariables)\r\n if (id !== 'new') {\r\n axios\r\n .get(`/detail/ProgramOverview/${id}/${archived === 'archived' ? true : false}`)\r\n .then((data: any) => {\r\n setImgLocation(data[0].programOverview.icon)\r\n\r\n let prog: ITableItem[][] = []\r\n data[0].inDivPrograms.map((i: ExpectedProgramType) =>\r\n prog.push([\r\n {value: `Copy ${i.programId}`, id: i.programId, sortBy: i.programId},\r\n {\r\n value: format(i.employeeName),\r\n id: i.employeeId,\r\n sortBy: format(i.employeeName),\r\n },\r\n {value: format(i.programlicenseKey), sortBy: i.programlicenseKey},\r\n {value: formatDate(i.renewalDate), sortBy: formatDate(i.renewalDate)},\r\n ])\r\n )\r\n setProgramRows(prog)\r\n\r\n setOverviewInputs(o => {\r\n return {...o, isLicense: {value: data[0].programOverview.isLicense, changed: false}}\r\n })\r\n\r\n let plug: ITableItem[][] = []\r\n let plugList: IPluginInfo[] = []\r\n data[0].listOfPlugins.forEach((i: ExpectedPluginType) => {\r\n plug.push([\r\n {\r\n value: format(i.pluginName),\r\n sortBy: format(i.pluginName),\r\n id: i.pluginId,\r\n tooltip: i.textField,\r\n },\r\n {value: formatDate(i.renewalDate), sortBy: formatDate(i.renewalDate)},\r\n {\r\n value: formatCost(i.isCostPerYear, i.pluginCostPerYear, i.pluginFlatCost),\r\n sortBy: i.pluginCostPerYear,\r\n },\r\n ])\r\n\r\n plugList.push({\r\n id: i.pluginId,\r\n name: i.pluginName,\r\n programName: id,\r\n description: i.textField,\r\n recurringCost: i.pluginCostPerYear / (12 / i.monthsPerRenewal),\r\n flatCost: i.pluginFlatCost,\r\n renewalDate: i.renewalDate ? new Date(i.renewalDate) : new Date(),\r\n purchaseDate: i.dateBought ? new Date(i.dateBought) : new Date(),\r\n monthsPerRenewal: i.monthsPerRenewal,\r\n })\r\n })\r\n setPluginRows(plug)\r\n setPluginList(plugList)\r\n })\r\n .catch((err: any) => console.error(err))\r\n }\r\n\r\n axios\r\n .get(`add/hardwarePrep`)\r\n .then(data => {\r\n const employees: {name: string; id: number}[] = []\r\n data.map((i: {employeeName: string; employeeId: number}) =>\r\n employees.push({\r\n name: i.employeeName,\r\n id: i.employeeId,\r\n })\r\n )\r\n setEmployeeDropdown(employees)\r\n })\r\n .catch((err: any) => console.error(err))\r\n }, [archived, id, loginContextVariables])\r\n\r\n const handleProgramRemove = (row: ITableItem[]) => {\r\n //add to removed array\r\n setRemovedProgramRows([...removedProgramRows, [...row]])\r\n }\r\n\r\n const handlePluginRemove = (row: ITableItem[]) => {\r\n //add to removed array\r\n setRemovedPluginRows([...removedPluginRows, [...row]])\r\n }\r\n\r\n const handlePluginEdit = (row: ITableItem[]) => {\r\n //open the plugin form\r\n setPluginForm(true)\r\n\r\n var plug = pluginList.filter(plugin => plugin.id === row[0].id)\r\n setPluginInput({...plug[0]})\r\n }\r\n\r\n async function handleSubmit() {\r\n var axios = new AxiosService(loginContextVariables)\r\n var postProgram = {\r\n Program: {\r\n numberOfPrograms: programInput.numCopies\r\n ? Number.isNaN(programInput.numCopies.value)\r\n ? 1\r\n : programInput.numCopies.value\r\n : 1,\r\n ProgramName: overviewInputs.name.value,\r\n ProgramCostPerYear:\r\n Number.isNaN(programInput.cost.value) || programInput.cost.value <= 0\r\n ? 0\r\n : programInput.cost.value * (12 / programInput.monthsPerRenewal.value),\r\n ProgramFlatCost: Number.isNaN(programInput.flatCost.value) ? 0 : programInput.flatCost.value,\r\n ProgramLicenseKey: programInput.licenseKey.value,\r\n IsLicense: overviewInputs.isLicense.value,\r\n Description: programInput.description.value,\r\n ProgramPurchaseLink: programInput.purchaseLink.value,\r\n DateBought: programInput.purchaseDate\r\n ? programInput.purchaseDate.value.toISOString()\r\n : new Date().toISOString(),\r\n RenewalDate:\r\n programInput.monthsPerRenewal.value === 0 ? null : programInput.renewalDate.value.toISOString(),\r\n MonthsPerRenewal: programInput.cost.value\r\n ? Number.isNaN(programInput.monthsPerRenewal.value) || programInput.monthsPerRenewal.value === 0\r\n ? 1 //default is monthly\r\n : programInput.monthsPerRenewal.value\r\n : null,\r\n EmployeeId: selectedEmployee ? selectedEmployee.id : null,\r\n },\r\n }\r\n if (id === 'new') {\r\n var msg: string = ''\r\n\r\n if (\r\n postProgram.Program.numberOfPrograms >= 1 &&\r\n postProgram.Program.ProgramName &&\r\n postProgram.Program.DateBought\r\n ) {\r\n await axios\r\n .post('/add/program', postProgram)\r\n .then(async (response: any) => {\r\n if (response.status === 201) {\r\n msg = programInput.numCopies\r\n ? programInput.numCopies.value +\r\n ' copies of ' +\r\n overviewInputs.name.value +\r\n ' were added to inventory!'\r\n : ''\r\n window.alert(msg)\r\n }\r\n const {newId, newName} = response.data[0]\r\n\r\n // Upload the image\r\n if (imgInput) {\r\n const imageLocation = `/image/program/${newId}`\r\n putUploadImage(imgInput, imageLocation, axios)\r\n }\r\n\r\n // after submitting go back to detail\r\n history.push({\r\n pathname: `/programs/overview/${newName}/inventory`,\r\n state: {prev: history.location},\r\n })\r\n return\r\n })\r\n .catch((err: any) => console.error(err))\r\n\r\n //after submitting go back to detail\r\n history.push({\r\n pathname: `/programs/overview/${postProgram.Program.ProgramName}/inventory`,\r\n state: {prev: history.location},\r\n })\r\n } else {\r\n msg = 'Failed because: \\n'\r\n msg += postProgram.Program.numberOfPrograms < 1 ? 'Not enough copies,\\n' : ''\r\n msg += postProgram.Program.ProgramName === '' ? 'No name entered,\\n' : ''\r\n window.alert(msg)\r\n }\r\n } else {\r\n //Add x# of new copies w/ programInput\r\n if (programForm.add) {\r\n postProgram.Program.ProgramName = id\r\n if (postProgram.Program.numberOfPrograms >= 1 && postProgram.Program.DateBought) {\r\n await axios\r\n .post('/add/program', postProgram)\r\n .then((response: any) => {\r\n if (response.status === 201) {\r\n msg = programInput.numCopies\r\n ? programInput.numCopies.value +\r\n ' copies of ' +\r\n overviewInputs.name.value +\r\n ' were added to inventory!'\r\n : ''\r\n window.alert(msg)\r\n }\r\n return\r\n })\r\n .catch((err: any) => console.error(err))\r\n\r\n //after submitting go back to detail\r\n history.push({\r\n pathname: `/programs/overview/${id}/inventory`,\r\n state: {prev: history.location},\r\n })\r\n } else {\r\n msg = 'Failed because: \\n'\r\n msg += postProgram.Program.numberOfPrograms < 1 ? 'Not enough copies,\\n' : ''\r\n msg += postProgram.Program.ProgramName === '' ? 'No name entered,\\n' : ''\r\n window.alert(msg)\r\n }\r\n }\r\n\r\n //Edit all existing copies w/ programInput\r\n if (programForm.edit || overviewInputs.isLicense.changed || overviewInputs.name.changed) {\r\n var updateProgram = {\r\n Program: {\r\n OldProgramName: id,\r\n ProgramName: overviewInputs.name.changed ? overviewInputs.name.value : null,\r\n ProgramCostPerYear: programUpdateInput.cost.changed\r\n ? programUpdateInput.cost.value * (12 / programUpdateInput.monthsPerRenewal.value)\r\n : null,\r\n ProgramFlatCost: programUpdateInput.flatCost.changed ? programUpdateInput.flatCost.value : null,\r\n ProgramLicenseKey: programUpdateInput.licenseKey.changed\r\n ? programUpdateInput.licenseKey.value\r\n : null,\r\n IsLicense: overviewInputs.isLicense.changed ? overviewInputs.isLicense.value : null,\r\n Description: programUpdateInput.description.changed\r\n ? programUpdateInput.description.value\r\n : null,\r\n ProgramPurchaseLink: programUpdateInput.purchaseLink.changed\r\n ? programUpdateInput.purchaseLink.value\r\n : null,\r\n RenewalDate: programUpdateInput.renewalDate.changed\r\n ? programUpdateInput.renewalDate.value.toISOString()\r\n : null,\r\n MonthsPerRenewal: programUpdateInput.monthsPerRenewal.changed\r\n ? programUpdateInput.monthsPerRenewal.value\r\n : null,\r\n EmployeeId: selectedEmployee ? selectedEmployee.id : null,\r\n },\r\n }\r\n\r\n await axios.put(`update/programall`, updateProgram).catch((err: any) => console.error(err))\r\n\r\n //after submitting go back to detail\r\n history.push({\r\n pathname: `/programs/overview/${\r\n overviewInputs.name.changed ? overviewInputs.name.value : id\r\n }/inventory`,\r\n state: {prev: history.location},\r\n })\r\n }\r\n\r\n if (pluginForm) {\r\n setPluginInput({...pluginInput, programName: overviewInputs.name.value})\r\n var postPlugin = {\r\n PluginId: pluginInput.id,\r\n ProgramName: id,\r\n PluginName: pluginInput.name,\r\n PluginFlatCost: pluginInput.flatCost,\r\n TextField: pluginInput.description,\r\n PluginCostPerYear: pluginInput.monthsPerRenewal\r\n ? pluginInput.recurringCost * (12 / pluginInput.monthsPerRenewal)\r\n : 0,\r\n RenewalDate: pluginInput.renewalDate.toISOString(),\r\n MonthsPerRenewal: pluginInput.monthsPerRenewal ? pluginInput.monthsPerRenewal : 0,\r\n DateBought: pluginInput.purchaseDate.toISOString(),\r\n }\r\n\r\n if (\r\n (postPlugin.PluginCostPerYear || postPlugin.PluginFlatCost) &&\r\n format(postPlugin.PluginName) !== '-'\r\n ) {\r\n if (pluginInput.id === -1) {\r\n await axios.post('/add/plugin', postPlugin).catch((err: any) => console.error(err))\r\n\r\n //after submitting go back to detail\r\n history.push({pathname: `/programs/overview/${id}/inventory`, state: {prev: history.location}})\r\n } else {\r\n await axios.put('/update/plugin', postPlugin).catch((err: any) => console.error(err))\r\n\r\n //after submitting go back to detail\r\n history.push({pathname: `/programs/overview/${id}/inventory`, state: {prev: history.location}})\r\n }\r\n } else {\r\n msg = 'Failed to Add Plugin Because: \\n'\r\n msg += format(postPlugin.PluginName) === '-' ? 'No name entered,\\n' : ''\r\n msg += !postPlugin.PluginCostPerYear && !postPlugin.PluginFlatCost ? 'No cost entered,\\n' : ''\r\n window.alert(msg)\r\n }\r\n }\r\n\r\n if (removedPluginRows.length > 0) {\r\n removedPluginRows.forEach(remove =>\r\n axios\r\n .put(`archive/plugin/${remove[0].id}`, {})\r\n .then(() =>\r\n history.push({\r\n pathname: `/programs/overview/${id}/inventory`,\r\n state: {prev: history.location},\r\n })\r\n )\r\n .catch((err: any) => console.error(err))\r\n )\r\n setRemovedPluginRows([])\r\n }\r\n\r\n if (removedProgramRows.length > 0) {\r\n if (removedProgramRows.length === programRows.length && pluginRows.length > 0) {\r\n window.alert('Please archive the plugins before you archive all copies of this program.')\r\n window.location.reload()\r\n } else {\r\n removedProgramRows.forEach(remove => {\r\n axios\r\n .put(`archive/programs`, [remove[0].id])\r\n .then(() =>\r\n history.push({\r\n pathname: `/programs/overview/${id}/inventory`,\r\n state: {prev: history.location},\r\n })\r\n )\r\n .catch((err: any) => console.error(err))\r\n })\r\n setRemovedProgramRows([])\r\n //after submitting go back to detail\r\n }\r\n }\r\n history.push({\r\n pathname: `/programs/overview/${id}/inventory`,\r\n state: {prev: history.location},\r\n })\r\n }\r\n\r\n if (imgInput && imgLocation) {\r\n //after submitting go back to detail\r\n const cb = () =>\r\n history.push({\r\n pathname: `/programs/overview/${id}/inventory`,\r\n state: {prev: history.location},\r\n })\r\n putUploadImage(imgInput, imgLocation, axios, cb)\r\n }\r\n }\r\n\r\n const displayCopies = () => {\r\n var arr: ITableItem[][] = []\r\n\r\n if (removedProgramRows.length === 0) {\r\n arr = [...programRows]\r\n } else {\r\n var bools: boolean[] = []\r\n programRows.forEach((row: ITableItem[], index: number) => {\r\n bools[index] = true\r\n removedProgramRows.forEach((remove: ITableItem[]) => {\r\n bools[index] = bools[index] && remove[0].id !== row[0].id\r\n })\r\n })\r\n programRows.forEach((row: ITableItem[], index: number) => {\r\n if (bools[index]) {\r\n arr.push(row)\r\n }\r\n })\r\n }\r\n\r\n return arr\r\n }\r\n\r\n const displayPlugins = () => {\r\n var arr: ITableItem[][] = []\r\n\r\n if (removedPluginRows.length === 0) {\r\n arr = [...pluginRows]\r\n } else {\r\n var bools: boolean[] = []\r\n pluginRows.forEach((row: ITableItem[], index: number) => {\r\n bools[index] = true\r\n removedPluginRows.forEach((remove: ITableItem[]) => {\r\n bools[index] = bools[index] && remove[0].id !== row[0].id\r\n })\r\n })\r\n pluginRows.forEach((row: ITableItem[], index: number) => {\r\n if (bools[index]) {\r\n arr.push(row)\r\n }\r\n })\r\n }\r\n\r\n return arr\r\n }\r\n\r\n return (\r\n <div className={s(styles.progOverviewEditMain, isDarkMode ? styles.backgroundDark : {})}>\r\n <div className={styles.columns}>\r\n {/* column 1 */}\r\n <div className={styles.firstColumn}>\r\n <BackButton history={history} className={styles.backButton} />\r\n <div className={styles.imgContainer}>\r\n <PictureInput setImage={setImgInput} image={imgInput} />\r\n </div>\r\n <div className={styles.submitContainer}>\r\n <Button text='Submit' onClick={handleSubmit} className={styles.submitbutton} />\r\n </div>\r\n </div>\r\n {/* column 2 */}\r\n <div className={styles.secondColumn}>\r\n <div className={s(styles.title, isDarkMode ? styles.titleDark : {})}>Program Information</div>\r\n\r\n <Group justify={'between'} className={styles.row1Group}>\r\n <div className={id !== 'new' ? styles.nameInput : styles.nameInputWithEdit}>\r\n <Input\r\n label={'Program Name'}\r\n value={overviewInputs.name.value}\r\n onChange={(e: any) =>\r\n setOverviewInputs({...overviewInputs, name: {value: e.target.value, changed: true}})\r\n }\r\n maxChars={100}\r\n width={'100%'}\r\n />\r\n </div>\r\n\r\n <Checkbox\r\n className={styles.checkBoxContainer}\r\n boxClassName={styles.checkBox}\r\n checked={overviewInputs.isLicense.value}\r\n title={'License'}\r\n onClick={() =>\r\n setOverviewInputs({\r\n ...overviewInputs,\r\n isLicense: {value: !overviewInputs.isLicense.value, changed: true},\r\n })\r\n }\r\n />\r\n\r\n {id !== 'new' && (\r\n <Button\r\n className={styles.editButton}\r\n onClick={() => {\r\n setProgramForm({add: false, edit: !programForm.edit})\r\n }}\r\n text={`Edit All Copies`}\r\n />\r\n )}\r\n </Group>\r\n {programForm.edit && (\r\n <div className={styles.programForm}>\r\n {/* <ProgramForm state={programUpdateInput} setState={setProgramUpdateInput} /> */}\r\n {programInput && (\r\n <ProgramForm\r\n state={programUpdateInput}\r\n setState={setProgramUpdateInput}\r\n employeeDropdown={employeeDropdown}\r\n selectedEmployee={selectedEmployee}\r\n setSelectedEmployee={setSelectedEmployee}\r\n />\r\n )}\r\n </div>\r\n )}\r\n\r\n {id !== 'new' ? (\r\n <Group direction={'column'}>\r\n <div className={styles.programTableContainer}>\r\n <DetailPageTable\r\n headers={programHeaders}\r\n rows={displayCopies()}\r\n setRows={setProgramRows}\r\n edit={true}\r\n remove={handleProgramRemove}\r\n hover={false}\r\n />\r\n </div>\r\n\r\n <Button\r\n className={styles.addContainer}\r\n icon='add'\r\n onClick={() => {\r\n setProgramForm({edit: false, add: !programForm.add})\r\n }}\r\n textInside={false}\r\n text={`Add Copy(s)`}\r\n />\r\n {programForm.add && (\r\n <div className={styles.programForm}>\r\n {/* <ProgramForm state={programInput} setState={setProgramInput} /> */}\r\n {programInput && (\r\n <ProgramForm\r\n state={programInput}\r\n setState={setProgramInput}\r\n employeeDropdown={employeeDropdown}\r\n selectedEmployee={selectedEmployee}\r\n setSelectedEmployee={setSelectedEmployee}\r\n />\r\n )}\r\n </div>\r\n )}\r\n </Group>\r\n ) : (\r\n <div className={styles.programForm}>\r\n {/* <ProgramForm state={programInput} setState={setProgramInput} /> */}\r\n {programInput && (\r\n <ProgramForm\r\n state={programInput}\r\n setState={setProgramInput}\r\n employeeDropdown={employeeDropdown}\r\n selectedEmployee={selectedEmployee}\r\n setSelectedEmployee={setSelectedEmployee}\r\n />\r\n )}\r\n </div>\r\n )}\r\n\r\n {id !== 'new' && (\r\n <div className={styles.pluginTableContainer}>\r\n <DetailPageTable\r\n headers={pluginHeaders}\r\n rows={displayPlugins()}\r\n setRows={setPluginRows}\r\n edit={true}\r\n remove={handlePluginRemove}\r\n editRows={handlePluginEdit}\r\n hover={false}\r\n />\r\n\r\n <Button\r\n className={styles.addContainer}\r\n icon='add'\r\n onClick={() => {\r\n setPluginForm(!pluginForm)\r\n setPluginInput({...defaultPluginInfo})\r\n }}\r\n textInside={false}\r\n text={'Add Plugin'}\r\n />\r\n </div>\r\n )}\r\n {pluginForm && id !== 'new' && (\r\n <div className={styles.pluginForm}>\r\n <Group justify={'between'} className={styles.pluginGroup}>\r\n <div className={styles.pluginInputContainerRow1}>\r\n <Input\r\n label={'Plugin Name'}\r\n value={pluginInput.name}\r\n onChange={(e: any) => setPluginInput({...pluginInput, name: e.target.value})}\r\n maxChars={100}\r\n width={'100%'}\r\n />\r\n </div>\r\n\r\n <div className={styles.dateInputContainer}>\r\n <div className={styles.inputText}>Purchase Date</div>\r\n <DatePicker\r\n dateFormat='MM/dd/yyyy'\r\n placeholderText={new Date().toDateString()}\r\n selected={pluginInput.purchaseDate}\r\n onChange={e => e && setPluginInput({...pluginInput, purchaseDate: e})}\r\n className={s(styles.input, styles.dateInput)}\r\n />\r\n </div>\r\n\r\n <div className={styles.dateInputContainer}>\r\n <div className={styles.inputText}>Renewal Date</div>\r\n <DatePicker\r\n dateFormat='MM/dd/yyyy'\r\n placeholderText={new Date().toDateString()}\r\n selected={pluginInput.renewalDate}\r\n onChange={e => e && setPluginInput({...pluginInput, renewalDate: e})}\r\n className={s(styles.input, styles.dateInput)}\r\n />\r\n </div>\r\n </Group>\r\n\r\n <Group justify={'between'} className={styles.pluginGroup}>\r\n <div className={styles.pluginInputContainerRow2}>\r\n <div className={styles.inputText}>Flat Cost</div>\r\n <input\r\n type='number'\r\n step='0.01'\r\n className={s(styles.input, styles.pluginInputRow2)}\r\n value={pluginInput.flatCost}\r\n onChange={e =>\r\n setPluginInput({...pluginInput, flatCost: parseFloat(e.target.value)})\r\n }\r\n />\r\n </div>\r\n\r\n <div className={styles.pluginInputContainerRow2}>\r\n <div className={styles.inputText}>Recurring Cost</div>\r\n <input\r\n type='number'\r\n step='0.01'\r\n className={s(styles.input, styles.pluginInputRow2)}\r\n value={pluginInput.recurringCost}\r\n onChange={e =>\r\n setPluginInput({\r\n ...pluginInput,\r\n recurringCost: parseFloat(e.target.value),\r\n })\r\n }\r\n />\r\n </div>\r\n\r\n <div className={styles.pluginInputContainerRow2}>\r\n <div className={styles.inputText}>Months Per Renewal</div>\r\n <input\r\n type='number'\r\n className={s(styles.input, styles.pluginInputRow2)}\r\n value={pluginInput.monthsPerRenewal}\r\n onChange={e =>\r\n setPluginInput({\r\n ...pluginInput,\r\n monthsPerRenewal: parseFloat(e.target.value),\r\n })\r\n }\r\n />\r\n </div>\r\n </Group>\r\n <div className={styles.pluginGroup}>\r\n <div className={styles.inputText}>Description</div>\r\n <textarea\r\n className={s(styles.input, styles.description)}\r\n value={pluginInput.description}\r\n onChange={e => setPluginInput({...pluginInput, description: e.target.value})}\r\n />\r\n </div>\r\n </div>\r\n )}\r\n <div className={styles.submitContainer}>\r\n <Button text='Submit' onClick={handleSubmit} className={styles.submitbutton} />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import React, {useState, useEffect, useContext} from 'react'\r\nimport {AxiosService} from '../../../services/AxiosService/AxiosService'\r\n\r\n// Components\r\nimport {DetailPageTable, ITableItem} from '../../reusables/DetailPageTable/DetailPageTable'\r\nimport {Button} from '../../reusables/Button/Button'\r\nimport {Group} from '../../reusables/Group/Group'\r\nimport {HistoryLog, IHistoryLogArray} from '../../reusables/HistoryLog/HistoryLog'\r\nimport {History} from 'history'\r\nimport {match} from 'react-router-dom'\r\nimport {BackButton} from '../../reusables/BackButton/BackButton'\r\nimport {DetailImage} from '../../reusables/DetailImage/DetailImage'\r\nimport {DetailCostText} from '../../reusables/DetailCostText/DetailCostText'\r\n\r\n// Utils\r\nimport {formatDate} from '../../../utilities/FormatDate'\r\nimport {format} from '../../../utilities/formatEmptyStrings'\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\nimport {checkImage} from '../../../utilities/CheckImage'\r\nimport {formatMoney} from '../../../utilities/FormatCost'\r\n\r\n// Styles\r\nimport styles from './ProgramDetailPage.module.css'\r\nimport placeholder from '../../../content/Images/Placeholders/program-placeholder.png'\r\n\r\n// Context\r\nimport {LoginContext, ThemeContext} from '../../App/App'\r\n\r\n// Types\r\ninterface IProgramDetailPageProps {\r\n history: History\r\n match: match<{id: string}>\r\n}\r\n\r\n// Primary Component\r\nexport const ProgramDetailPage: React.SFC<IProgramDetailPageProps> = props => {\r\n const {history, match} = props\r\n\r\n const {\r\n loginContextVariables: {isAdmin},\r\n loginContextVariables,\r\n } = useContext(LoginContext)\r\n const {isDarkMode} = useContext(ThemeContext)\r\n\r\n var axios = new AxiosService(loginContextVariables)\r\n\r\n const [isDeleted, setIsDeleted] = useState(false)\r\n const [img, setImg] = useState('')\r\n const [progData, setProgData] = useState<{\r\n name: string\r\n dateBought: string\r\n description: string\r\n employee: string\r\n employeeId: number\r\n renewalDate: string\r\n isCostPerYear: boolean\r\n flatCost: number\r\n costPerYear: number\r\n hasPlugin: boolean\r\n }>({\r\n name: '',\r\n dateBought: '',\r\n description: '',\r\n employee: '',\r\n employeeId: -1,\r\n renewalDate: '',\r\n isCostPerYear: false,\r\n flatCost: 0,\r\n costPerYear: 0,\r\n hasPlugin: false,\r\n })\r\n const [historyList, setHistoryList] = useState<IHistoryLogArray[]>([])\r\n const [progRows, setProgRows] = useState<ITableItem[][]>([])\r\n const progHeaders = ['License Key', 'Purchase Link']\r\n\r\n async function getData() {\r\n await axios\r\n .get(`/detail/program/${match.params.id}`)\r\n .then((data: any) => {\r\n setProgData({\r\n name: data[0].programName,\r\n dateBought: formatDate(data[0].dateBought),\r\n description: format(data[0].description),\r\n employee: data[0].employeeName,\r\n employeeId: data[0].employeeId,\r\n renewalDate: formatDate(data[0].renewalDate),\r\n isCostPerYear: data[0].isCostPerYear,\r\n flatCost: data[0].programFlatCost,\r\n costPerYear: data[0].programCostPerYear,\r\n hasPlugin: data[0].hasPlugIn,\r\n })\r\n\r\n setIsDeleted(data[0].isDeleted)\r\n setProgRows([\r\n [\r\n {value: format(data[0].programLicenseKey ? data[0].programLicenseKey : '-'), sortBy: 0},\r\n {value: format(data[0].programPurchaseLink), sortBy: 0},\r\n ],\r\n ])\r\n\r\n setHistoryList([\r\n ...data[0].entries.map((entry: any) => {\r\n return {\r\n eventDate: entry.eventDate,\r\n eventType: entry.eventType,\r\n employeeName: entry.employeeNameHistory,\r\n }\r\n }),\r\n ])\r\n\r\n checkImage(data[0].picture, axios, placeholder)\r\n .then(image => setImg(image))\r\n .catch(err => console.error(err))\r\n })\r\n .catch((err: any) => console.error(err))\r\n }\r\n\r\n useEffect(() => {\r\n getData()\r\n }, [])\r\n\r\n async function handleArchive() {\r\n if (progData.hasPlugin && !isDeleted) {\r\n window.alert('Please archive the plugins before you archive this program.')\r\n } else if (isDeleted) {\r\n if (window.confirm(`Are you sure you want to recover this copy of ${progData.name}?`)) {\r\n await axios.put(`recover/program/${match.params.id}`, {}).catch((err: any) => console.error(err))\r\n\r\n history.push({\r\n pathname: `/programs/edit/detail/${match.params.id}/inventory`,\r\n state: {prev: history.location},\r\n })\r\n }\r\n } else {\r\n if (window.confirm(`Are you sure you want to archive this copy of ${progData.name}?`)) {\r\n await axios.put(`archive/program/${match.params.id}`, {}).catch((err: any) => console.error(err))\r\n\r\n history.push({\r\n pathname: `/programs/overview/${progData.name}/inventory`,\r\n state: {prev: history.location},\r\n })\r\n }\r\n }\r\n }\r\n\r\n return (\r\n <div className={s(styles.progDetailMain, isDarkMode ? styles.backgroundDark : {})}>\r\n <div className={styles.columns}>\r\n {/* column 1 */}\r\n <div className={styles.firstColumn}>\r\n <BackButton history={history} className={styles.backButton} />\r\n <DetailImage src={img} />\r\n {progData.flatCost > 0 && (\r\n <DetailCostText costTexts={[{title: 'Paid', cost: `${formatMoney(progData.flatCost)}`}]} />\r\n )}\r\n {progData.isCostPerYear ? (\r\n <DetailCostText costTexts={[{title: 'Yearly', cost: `${formatMoney(progData.costPerYear)}`}]} />\r\n ) : (\r\n progData.costPerYear > 0 && (\r\n <DetailCostText\r\n costTexts={[{title: 'Monthly', cost: `${formatMoney(progData.costPerYear / 12)}`}]}\r\n />\r\n )\r\n )}\r\n </div>\r\n {/* column 2 */}\r\n <div className={styles.secondColumn}>\r\n {isAdmin && (\r\n <Group direction='row' justify='start' className={styles.group}>\r\n {!isDeleted && (\r\n <Button\r\n text='Edit'\r\n icon='edit'\r\n onClick={() => {\r\n history.push({\r\n pathname: '/programs/edit/detail/' + match.params.id,\r\n state: {prev: history.location},\r\n })\r\n }}\r\n className={styles.editbutton}\r\n />\r\n )}\r\n\r\n <Button\r\n text={isDeleted ? 'Recover' : 'Archive'}\r\n icon='archive'\r\n onClick={handleArchive}\r\n className={styles.archivebutton}\r\n />\r\n </Group>\r\n )}\r\n <div className={styles.titleText}>\r\n <div className={s(styles.programName, isDarkMode ? styles.dark : {})}>\r\n <Group>\r\n <div\r\n className={s(styles.overviewLink, isDarkMode ? styles.linkDark : {})}\r\n onClick={() =>\r\n history.push({\r\n pathname: `/programs/overview/${progData.name}/${\r\n isDeleted ? 'archived' : 'inventory'\r\n }`,\r\n state: {prev: history.location},\r\n })\r\n }\r\n >\r\n {progData.name}\r\n </div>\r\n {`Copy ${match.params.id}`}\r\n </Group>\r\n </div>\r\n {progData.renewalDate !== '-' && (\r\n <div className={styles.programText}>Renewal Date: {progData.renewalDate}</div>\r\n )}\r\n <div className={styles.programText}>Purchase Date: {progData.dateBought}</div>\r\n {progData.employeeId !== -1 && (\r\n <div className={s(styles.programText, styles.assignedTo)}>\r\n Assigned to{' '}\r\n <div\r\n className={s(styles.empName, isDarkMode ? styles.linkDark : {})}\r\n onClick={() =>\r\n history.push({\r\n pathname: `/employees/detail/${progData.employeeId}`,\r\n state: {prev: history.location},\r\n })\r\n }\r\n >\r\n {progData.employee}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n <DetailPageTable\r\n headers={progHeaders}\r\n rows={progRows}\r\n setRows={setProgRows}\r\n sort={false}\r\n hover={false}\r\n />\r\n\r\n <div className={styles.spaceBetween} />\r\n\r\n <div className={styles.descriptionContainer}>\r\n <div className={styles.descriptionTitle}>Description</div>\r\n <div className={styles.descriptionBody}>{progData.description}</div>\r\n </div>\r\n\r\n <div className={styles.spaceBetween} />\r\n <HistoryLog historyLog={historyList} canEdit={false} />\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import React, {useState, useEffect, useContext} from 'react'\r\nimport {AxiosService} from '../../../services/AxiosService/AxiosService'\r\n\r\n// Components\r\nimport {Button} from '../../reusables/Button/Button'\r\nimport {ProgramForm, IProgramFormInputs} from '../../reusables/ProgramForm/ProgramForm'\r\nimport {History} from 'history'\r\nimport {match} from 'react-router-dom'\r\nimport {BackButton} from '../../reusables/BackButton/BackButton'\r\n\r\n// Utils\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\n\r\n// Context\r\nimport {LoginContext, ThemeContext} from '../../App/App'\r\n\r\n// Styles\r\nimport styles from './ProgramDetailEditPage.module.css'\r\n\r\n// Types\r\ninterface IProgramDetailEditPageProps {\r\n history: History\r\n match: match<{id: string}>\r\n}\r\n\r\n// Helpers\r\n\r\n// Primary Component\r\nexport const ProgramDetailEditPage: React.SFC<IProgramDetailEditPageProps> = props => {\r\n const {history, match} = props\r\n\r\n const {loginContextVariables} = useContext(LoginContext)\r\n const {isDarkMode} = useContext(ThemeContext)\r\n\r\n const axios = new AxiosService(loginContextVariables)\r\n const [progData, setProgData] = useState<{name: string; employee: string; dateBought: string}>({\r\n name: '',\r\n employee: '',\r\n dateBought: '',\r\n })\r\n\r\n const [employeeDropdown, setEmployeeDropdown] = useState<{name: string; id: number}[]>()\r\n const [selectedEmployee, setSelectedEmployee] = useState<{name: string; id: number}>()\r\n\r\n //input feild states:\r\n const [programInput, setProgramInput] = useState<IProgramFormInputs>()\r\n\r\n useEffect(() => {\r\n axios\r\n .get(`/detail/program/${match.params.id}`)\r\n .then((data: any) => {\r\n setProgData({\r\n name: data[0].programName,\r\n employee: data[0].employeeName,\r\n dateBought: data[0].dateBought,\r\n })\r\n\r\n setProgramInput({\r\n name: {value: data[0].programName, changed: false},\r\n programName: {value: data[0].programName, changed: false},\r\n description: {value: data[0].description, changed: false},\r\n renewalDate: {value: new Date(data[0].renewalDate), changed: false},\r\n purchaseDate: {value: new Date(data[0].dateBought), changed: false},\r\n purchaseLink: {value: data[0].programPurchaseLink, changed: false},\r\n licenseKey: {value: data[0].programLicenseKey ? data[0].programLicenseKey : '', changed: false},\r\n cost: {value: data[0].programCostPerYear / (12 / data[0].monthsPerRenewal), changed: false},\r\n flatCost: {value: data[0].programFlatCost ? data[0].programFlatCost : 0, changed: false},\r\n monthsPerRenewal: {\r\n value: data[0].monthsPerRenewal,\r\n changed: false,\r\n },\r\n hasFlatCost: data[0].programFlatCost > 0 ? true : false,\r\n hasRecurringCost: data[0].programCostPerYear > 0 ? true : false,\r\n })\r\n\r\n const employees: {name: string; id: number}[] = []\r\n data[0].listOfEmployees.map((i: {employeeName: string; employeeId: number}) =>\r\n employees.push({\r\n name: i.employeeName,\r\n id: i.employeeId,\r\n })\r\n )\r\n setEmployeeDropdown(employees)\r\n setSelectedEmployee({name: data[0].employeeName, id: data[0].employeeId})\r\n })\r\n .catch((err: any) => console.error(err))\r\n }, [])\r\n\r\n async function handleSubmit() {\r\n //update program info\r\n if (programInput) {\r\n var updateProgram = {\r\n program: {\r\n ProgramName: progData.name,\r\n ProgramCostPerYear:\r\n Number.isNaN(programInput.cost.value) || programInput.cost.value <= 0\r\n ? 0\r\n : programInput.cost.value * (12 / programInput.monthsPerRenewal.value),\r\n ProgramFlatCost: Number.isNaN(programInput.flatCost.value) ? 0 : programInput.flatCost.value,\r\n ProgramLicenseKey: programInput.licenseKey.value,\r\n Description: programInput.description.value,\r\n ProgramPurchaseLink: programInput.purchaseLink.value,\r\n DateBought: programInput.purchaseDate\r\n ? programInput.purchaseDate.value.toISOString()\r\n : progData.dateBought,\r\n RenewalDate: programInput.renewalDate.changed ? programInput.renewalDate.value.toISOString() : null,\r\n MonthsPerRenewal: Number.isNaN(programInput.monthsPerRenewal.value)\r\n ? 0\r\n : programInput.monthsPerRenewal.value,\r\n EmployeeId: selectedEmployee && selectedEmployee.id !== -1 ? selectedEmployee.id : null,\r\n },\r\n }\r\n await axios.put(`update/program/${match.params.id}`, updateProgram).catch((err: any) => console.error(err))\r\n\r\n history.push({pathname: `/programs/detail/${match.params.id}`, state: {prev: history.location}})\r\n }\r\n }\r\n\r\n return (\r\n <div className={s(styles.columns, isDarkMode ? styles.backgroundDark : {})}>\r\n {/* column 1 */}\r\n\r\n <div className={styles.firstColumn}>\r\n <BackButton history={history} className={styles.backButton} />\r\n </div>\r\n {/* column 2 */}\r\n <div className={styles.secondColumn}>\r\n <div className={s(styles.title, styles.paddingBottom, isDarkMode ? styles.dark : {})}>\r\n {progData.name + ' Copy ' + match.params.id + ' '} Information\r\n </div>\r\n\r\n {programInput && (\r\n <ProgramForm\r\n state={programInput}\r\n setState={setProgramInput}\r\n employeeDropdown={employeeDropdown}\r\n selectedEmployee={selectedEmployee}\r\n setSelectedEmployee={setSelectedEmployee}\r\n />\r\n )}\r\n\r\n <div className={styles.submitContainer}>\r\n <Button text='Submit' onClick={handleSubmit} />\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","/* Slight modification of this gist https://gist.github.com/pmckee11/13b1dffbf1d271a782ed7f65480b978f */\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { Helmet, HelmetProvider, HelmetTags } from \"react-helmet-async\";\r\n\r\nconst googleUrl = \"https://accounts.google.com/gsi/client\";\r\n\r\nexport interface GoogleCredentialResponse {\r\n credential: string;\r\n}\r\n\r\ninterface GoogleButtonParams {\r\n onCredentialResponse: (response: GoogleCredentialResponse) => void;\r\n}\r\n\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nexport const GoogleButton: React.FC<GoogleButtonParams> = ({\r\n onCredentialResponse,\r\n}: GoogleButtonParams): JSX.Element => {\r\n const [scriptLoaded, setScriptLoaded] = useState(\r\n typeof window !== \"undefined\" &&\r\n typeof (window as any).google !== \"undefined\",\r\n );\r\n const divRef = React.createRef<HTMLDivElement>();\r\n\r\n // Helmet does not support the onLoad property of the script tag, so we have to manually add it like so\r\n const handleChangeClientState = (\r\n newState: any,\r\n addedTags: HelmetTags,\r\n ): void => {\r\n if (addedTags && addedTags.scriptTags) {\r\n const foundScript = addedTags.scriptTags.find(\r\n (tag: HTMLScriptElement): boolean => {\r\n const { src } = tag;\r\n return src === googleUrl;\r\n },\r\n );\r\n if (foundScript) {\r\n foundScript.addEventListener(\r\n \"load\",\r\n (): void => {\r\n return setScriptLoaded(true);\r\n },\r\n {\r\n once: true,\r\n },\r\n );\r\n }\r\n }\r\n };\r\n\r\n useEffect((): void => {\r\n if (scriptLoaded && divRef.current) {\r\n (window as any).google.accounts.id.initialize({\r\n auto_select: false,\r\n callback: onCredentialResponse,\r\n client_id: process.env.REACT_APP_GOOGLE_CLIENT_ID,\r\n ux_mode: \"popup\",\r\n });\r\n (window as any).google.accounts.id.renderButton(divRef.current, {\r\n size: \"large\",\r\n theme: \"outline\",\r\n width: divRef.current.clientWidth,\r\n });\r\n }\r\n }, [scriptLoaded, divRef, onCredentialResponse]);\r\n\r\n return (\r\n <>\r\n <HelmetProvider>\r\n <Helmet onChangeClientState={handleChangeClientState}>\r\n <script async defer src={googleUrl} />\r\n </Helmet>\r\n </HelmetProvider>\r\n <div ref={divRef} />\r\n </>\r\n );\r\n};\r\n","import React, {useState, useContext} from 'react'\r\nimport axios from 'axios'\r\n\r\nimport {\r\n GoogleButton\r\n } from \"../../../components/reusables/GoogleButton/GoogleButton\";\r\n\r\n//useContext\r\nimport {LoginContext, ILoginContext} from '../../App/App'\r\nimport {Redirect} from 'react-router-dom'\r\n\r\n//styling\r\nimport styles from './Login.module.css'\r\nimport logo from '../../../content/Images/CQL-Logo-Reversed.png'\r\ninterface ILoginProps {\r\n history: any\r\n}\r\nexport const Login: React.FunctionComponent<ILoginProps> = props => {\r\n const {history} = props\r\n const [failMssg, setFailMssg] = useState('')\r\n const currentLoginContext = useContext(LoginContext)\r\n\r\n //if someone is logged in don't let them see the login page\r\n if (currentLoginContext.loginContextVariables.accessToken !== '') {\r\n history.push('/dashboard')\r\n }\r\n\r\n const handleSubmit = (googleUser: any) => {\r\n //e.preventDefault()\r\n\r\n axios\r\n .post(process.env.REACT_APP_API_URL + '/Login', {\r\n idtoken: googleUser.credential,\r\n })\r\n .then(function(response: any) {\r\n //oddly, axios can only handle sending an array of objects so\r\n //response.data looks like [{...data...}]\r\n //succesful login, so set context to response data and route to dash\r\n\r\n var userInfo: ILoginContext = {\r\n accessToken: response.data[0].accesstoken,\r\n refreshToken: response.data[0].refreshtoken,\r\n validTo: response.data[0].validTo,\r\n isAdmin: response.data[0].isAdmin,\r\n givenName: response.data[0].givenName,\r\n }\r\n currentLoginContext.setLoginContextVariables(userInfo)\r\n localStorage.setItem('user', JSON.stringify(userInfo))\r\n \r\n return <Redirect to='/dashboard' />\r\n })\r\n .catch(error => {\r\n //catching errors\r\n if (error.response) {\r\n //The request was made and the server responded with a status code\r\n setFailMssg('Incorrect username or password')\r\n } else if (error.request) {\r\n //The request was made but no response was received\r\n console.log('Request was made but no response was received')\r\n } else {\r\n //Something happened in setting up the request that triggered an Error\r\n console.log('Something happened in setting up the request that triggered an Error')\r\n }\r\n })\r\n } \r\n \r\n return (\r\n <div>\r\n <form className={styles.body}>\r\n <div className={styles.center}>\r\n <img className={styles.logo} src={logo} alt={''} />\r\n </div> \r\n <div className={styles.center}>\r\n <GoogleButton onCredentialResponse={handleSubmit} />\r\n </div>\r\n </form>\r\n </div>\r\n )\r\n}\r\n","import React, {useContext} from 'react'\r\nimport styles from './HelloUser.module.css'\r\nimport dropdownStyles from '../reusables/Dropdown/Dropdown.module.css'\r\nimport {DropdownList} from '../reusables/Dropdown/DropdownList'\r\nimport {concatStyles as s} from '../../utilities/mikesConcat'\r\nimport {LoginContext, initialValues, ThemeContext} from '../App/App'\r\n\r\ninterface IHelloUserProps {\r\n name: string\r\n className?: string\r\n}\r\n\r\nexport const HelloUser: React.FC<IHelloUserProps> = props => {\r\n const {name, className = ''} = props\r\n\r\n const userContext = useContext(LoginContext)\r\n const {isDarkMode, setIsDarkMode} = useContext(ThemeContext)\r\n return (\r\n <div className={s(styles.helloMain, className)}>\r\n <div className={(dropdownStyles.dropdownContainer, styles.helloContainer)}>\r\n <DropdownList\r\n triggerElement={({isOpen, toggle}) => (\r\n <button onClick={toggle} className={dropdownStyles.dropdownButton}>\r\n <div className={dropdownStyles.dropdownTitle}>\r\n <div className={s(styles.helloMessage, isDarkMode ? styles.dark : {})}>\r\n Hello, {name}\r\n </div>\r\n <div\r\n className={s(\r\n dropdownStyles.dropdownArrow,\r\n styles.dropdownArrow,\r\n isDarkMode ? styles.dropdownArrowDark : {}\r\n )}\r\n />\r\n </div>\r\n </button>\r\n )}\r\n choicesList={() => (\r\n <ul className={dropdownStyles.dropdownList}>\r\n <li\r\n className={dropdownStyles.dropdownListItem}\r\n key={'logout'}\r\n onClick={() => {\r\n userContext.setLoginContextVariables(initialValues)\r\n localStorage.removeItem('user')\r\n window.location.reload()\r\n }}\r\n >\r\n <button className={dropdownStyles.dropdownListItemButton}>\r\n <div className={dropdownStyles.dropdownItemLabel}>Logout</div>\r\n </button>\r\n </li>\r\n <li className={dropdownStyles.dropdownListItem}>\r\n <button\r\n className={dropdownStyles.dropdownListItemButton}\r\n onClick={() => {\r\n localStorage.setItem('darkMode', JSON.stringify(!isDarkMode))\r\n setIsDarkMode(!isDarkMode)\r\n }}\r\n >\r\n <div className={dropdownStyles.dropdownItemLabel}>\r\n {isDarkMode ? 'Dis' : 'En'}able Dark Mode\r\n </div>\r\n </button>\r\n </li>\r\n </ul>\r\n )}\r\n />\r\n <div />\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import React, {useContext} from 'react'\r\n\r\n// Packages\r\n\r\n// Components\r\nimport {Button} from '../Button/Button'\r\nimport {DropdownList} from './DropdownList'\r\n\r\n// Utils\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\n\r\n// Styles\r\nimport styles from './AddDropdown.module.css'\r\nimport dropdownStyles from './Dropdown.module.css'\r\nimport {ThemeContext} from '../../App'\r\n\r\n// Types\r\ninterface IAddDropdownProps {\r\n content: {name: string; id: string | number}[]\r\n //selected: {name: string; id: string}\r\n title: string\r\n onSelect: any\r\n className?: string\r\n}\r\n\r\n// Helpers\r\n\r\n// Primary Component\r\nexport const AddDropdown: React.SFC<IAddDropdownProps> = props => {\r\n const {content, onSelect, title, className = ''} = props\r\n const {isDarkMode} = useContext(ThemeContext)\r\n\r\n //filter out duplicates from content\r\n var contentWithNoDuplicates = Array.from(new Set(content.map(datum => datum.name))).map(name =>\r\n content.find(x => x.name === name)\r\n )\r\n\r\n return (\r\n <Button className={s(styles.addDropdownMain, className)} icon='add' onClick={() => {}} textInside={false}>\r\n <div className={dropdownStyles.dropdownContainer}>\r\n <DropdownList\r\n triggerElement={({toggle}) => (\r\n <button onClick={toggle} className={s(dropdownStyles.dropdownButton, styles.dropdownButton)}>\r\n <div\r\n className={s(\r\n dropdownStyles.dropdownTitle,\r\n styles.dropdownTitle,\r\n isDarkMode ? styles.dropdownTitleDark : {}\r\n )}\r\n >\r\n {title}\r\n </div>\r\n </button>\r\n )}\r\n choicesList={() => (\r\n <ul className={s(dropdownStyles.dropdownList, styles.dropdownList)}>\r\n {contentWithNoDuplicates.map(i => {\r\n if (i) {\r\n return (\r\n <li\r\n className={dropdownStyles.dropdownListItem}\r\n key={i.id}\r\n onClick={() => onSelect(i)}\r\n >\r\n <button className={dropdownStyles.dropdownListItemButton}>\r\n <div className={dropdownStyles.dropdownItemLabel}>{i.name}</div>\r\n </button>\r\n </li>\r\n )\r\n }\r\n })}\r\n </ul>\r\n )}\r\n />\r\n <div />\r\n </div>\r\n </Button>\r\n )\r\n}\r\n","import React, {useState, useEffect, useContext} from 'react'\r\nimport {History} from 'history'\r\nimport {match} from 'react-router-dom'\r\n\r\n// Components\r\nimport {DetailPageTable, ITableItem} from '../../reusables/DetailPageTable/DetailPageTable'\r\nimport {FaUserShield, FaUser} from 'react-icons/fa'\r\nimport {DropdownList} from '../../reusables/Dropdown/DropdownList'\r\nimport DatePicker from 'react-datepicker'\r\nimport {PictureInput} from '../../reusables/PictureInput/PictureInput'\r\nimport {AddDropdown} from '../../reusables/Dropdown/AddDropdown'\r\nimport {BackButton} from '../../reusables/BackButton/BackButton'\r\nimport {Input} from '../../reusables/Input/Input'\r\n\r\n// Utils\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\nimport {checkImage} from '../../../utilities/CheckImage'\r\nimport {putUploadImage} from '../../../utilities/UploadImage'\r\nimport {formatMoney} from '../../../utilities/FormatCost'\r\n\r\n// Styles\r\nimport styles from './EmployeeDetailEditPage.module.css'\r\nimport dropdownStyles from '../../reusables/Dropdown/Dropdown.module.css'\r\nimport {Button} from '../../reusables/Button/Button'\r\nimport {AxiosService} from '../../../services/AxiosService/AxiosService'\r\nimport {LoginContext, ThemeContext} from '../../App/App'\r\nimport {formatDate} from '../../../utilities/FormatDate'\r\nimport {format} from '../../../utilities/formatEmptyStrings'\r\nimport deptPlaceholder from '../../../content/Images/Placeholders/department-placeholder.png'\r\n\r\n// Types\r\ninterface IDepartment {\r\n departmentName: string\r\n departmentId: number\r\n icon: string\r\n defaultHardware: string[]\r\n defaultSoftware: string[]\r\n defaultLicenses: string[]\r\n}\r\n\r\ninterface IEmployeeDetailEditPageProps {\r\n match: match<{id: string}>\r\n history: History\r\n}\r\n\r\ninterface IEmployee {\r\n isAdmin: boolean\r\n photo: string\r\n firstName: string\r\n lastName: string\r\n name: string\r\n department: string\r\n role: string\r\n hireDate: string\r\n hwCost: number\r\n swCost: number\r\n}\r\n\r\n// Primary Component\r\nexport const EmployeeDetailEditPage: React.SFC<IEmployeeDetailEditPageProps> = props => {\r\n const {history, match} = props\r\n\r\n const {loginContextVariables} = useContext(LoginContext)\r\n const {isDarkMode} = useContext(ThemeContext)\r\n\r\n const [userData, setUserData] = useState<IEmployee>({\r\n isAdmin: false,\r\n photo: '',\r\n firstName: '',\r\n lastName: '',\r\n name: '',\r\n department: '',\r\n role: '',\r\n hireDate: '',\r\n hwCost: 0,\r\n swCost: 0,\r\n })\r\n const [hardwareRows, setHardwareRows] = useState<{\r\n assigned: ITableItem[][]\r\n added: ITableItem[][]\r\n removed: ITableItem[][]\r\n }>({\r\n assigned: [],\r\n added: [],\r\n removed: [],\r\n })\r\n const [softwareRows, setSoftwareRows] = useState<{\r\n assigned: ITableItem[][]\r\n added: ITableItem[][]\r\n removed: ITableItem[][]\r\n }>({\r\n assigned: [],\r\n added: [],\r\n removed: [],\r\n })\r\n const [licenseRows, setLicenseRows] = useState<{\r\n assigned: ITableItem[][]\r\n added: ITableItem[][]\r\n removed: ITableItem[][]\r\n }>({\r\n assigned: [],\r\n added: [],\r\n removed: [],\r\n })\r\n\r\n const hardwareHeaders = ['Hardware', 'Serial Number', 'MFG Tag', 'Purchase Date']\r\n const softwareHeaders = ['Software', 'Key/Username', 'Monthly Cost']\r\n const licenseHeaders = ['Licenses', 'Key/Username', 'Monthly Cost']\r\n\r\n const [deptList, setDeptList] = useState<IDepartment[]>([])\r\n const [deptImages] = useState<{id: number; img: string}[]>([])\r\n const [useImages, setUseImages] = useState(false)\r\n\r\n //input field states:\r\n const [dateInput, setDateInput] = useState<Date>(new Date())\r\n const [deptInput, setDeptInput] = useState<IDepartment>()\r\n const [adminInput, setAdminInput] = useState<boolean>(false)\r\n const [imgInput, setImgInput] = useState<File>()\r\n const [roleInput, setRoleInput] = useState<string>('')\r\n const [firstNameInput, setFirstNameInput] = useState<string>('')\r\n const [lastNameInput, setLastNameInput] = useState<string>('')\r\n const [emailInput, setEmailInput] = useState<string>('')\r\n const [changed, setChanged] = useState(false)\r\n const [descriptionInput, setDescriptionInput] = useState('')\r\n\r\n const [hardwareDropdown, setHardwareDropdown] = useState<any[]>([])\r\n const [softwareDropdown, setSoftwareDropdown] = useState<any[]>([])\r\n const [licenseDropdown, setLicenseDropdown] = useState<any[]>([])\r\n\r\n useEffect(() => {\r\n const axios = new AxiosService(loginContextVariables)\r\n axios\r\n .get(`/add/employeePrep/`)\r\n .then((data: any) => {\r\n setDeptList(data[0].departments)\r\n setUseImages(true)\r\n\r\n let uhw: any[] = []\r\n data[0].unassignedHardware.map((i: any) =>\r\n uhw.push({\r\n name: i.hardwareName,\r\n id: i.type.toLowerCase() + '/' + i.hardwareId,\r\n serialNumber: format(i.serialNumber),\r\n mfg: format(i.mfg),\r\n purchaseDate: formatDate(i.purchaseDate),\r\n })\r\n )\r\n setHardwareDropdown(uhw)\r\n\r\n let usw: any[] = []\r\n data[0].unassignedSoftware.map((i: any) =>\r\n usw.push({\r\n name: i.programName,\r\n id: i.programId,\r\n key: format(i.programLicenseKey),\r\n monthlyCost: formatMoney(i.monthlyCost),\r\n })\r\n )\r\n setSoftwareDropdown(usw)\r\n\r\n let ul: any[] = []\r\n data[0].unassignedLicenses.map((i: any) =>\r\n ul.push({\r\n name: i.programName,\r\n id: i.programId,\r\n key: format(i.programLicenseKey),\r\n monthlyCost: formatMoney(i.monthlyCost),\r\n })\r\n )\r\n setLicenseDropdown(ul)\r\n })\r\n .catch((err: any) => console.error(err))\r\n if (match.params.id !== 'new') {\r\n axios\r\n .get(`/detail/employee/${match.params.id}`)\r\n .then((data: any) => {\r\n setUserData({\r\n isAdmin: data[0].admin,\r\n photo: data[0].picture,\r\n firstName: data[0].firstName,\r\n lastName: data[0].lastName,\r\n name: data[0].firstName + ' ' + data[0].lastName,\r\n department: data[0].department,\r\n role: data[0].role,\r\n hireDate: formatDate(data[0].hireDate),\r\n hwCost: Math.round(data[0].totalHardwareCost * 100) / 100,\r\n swCost: Math.round(data[0].totalProgramCostPerMonth * 100) / 100,\r\n })\r\n\r\n setAdminInput(data[0].isAdmin)\r\n setDateInput(new Date(formatDate(data[0].hireDate)))\r\n setRoleInput(data[0].role)\r\n setFirstNameInput(data[0].firstName)\r\n setLastNameInput(data[0].lastName)\r\n setEmailInput(data[0].email)\r\n setDescriptionInput(data[0].textField)\r\n\r\n let hw: any[] = []\r\n data[0].hardware.map((i: any) =>\r\n hw.push([\r\n {\r\n value: format(i.make + ' ' + i.model),\r\n id: format(i.type.toLowerCase() + '/' + i.id),\r\n sortBy: i.make + ' ' + i.model,\r\n },\r\n {value: format(i.serialNumber), id: format(i.id), sortBy: i.serialNumber},\r\n {value: format(i.mfg), id: format(i.id), sortBy: i.mfg},\r\n {value: formatDate(i.purchaseDate), id: format(i.id), sortBy: i.purchaseDate},\r\n ])\r\n )\r\n setHardwareRows(oldHardwareRows => {\r\n return {...oldHardwareRows, assigned: [...hw]}\r\n })\r\n\r\n let sw: any[] = []\r\n data[0].software.map((i: any) =>\r\n sw.push([\r\n {\r\n value: format(i.name),\r\n id: format(i.id),\r\n sortBy: i.name,\r\n },\r\n {value: format(i.licenseKey), id: format(i.id), sortBy: i.licenseKey},\r\n {\r\n value: formatMoney(i.costPerMonth),\r\n id: format(i.id),\r\n sortBy: i.costPerMonth,\r\n },\r\n ])\r\n )\r\n setSoftwareRows(oldSoftwareRows => {\r\n return {...oldSoftwareRows, assigned: [...sw]}\r\n })\r\n\r\n let l: any[] = []\r\n data[0].licenses.map((i: any) =>\r\n l.push([\r\n {\r\n value: format(i.name),\r\n id: format(i.id),\r\n sortBy: i.name,\r\n },\r\n {\r\n value: format(i.licensesKey),\r\n id: format(i.id),\r\n sortBy: format(i.licensesKey),\r\n },\r\n {\r\n value: formatMoney(i.costPerMonth),\r\n sortBy: i.costPerMonth,\r\n },\r\n {value: format(i.licensesCount), id: format(i.id), sortBy: i.licensesCount},\r\n ])\r\n )\r\n setLicenseRows(oldLicenseRows => {\r\n return {...oldLicenseRows, assigned: [...l]}\r\n })\r\n })\r\n .catch((err: any) => console.error(err))\r\n\r\n axios\r\n .get(`/add/employeePrep/`)\r\n .then((data: any) => {\r\n setDeptList(data[0].departments)\r\n\r\n setUseImages(true)\r\n })\r\n .catch((err: any) => console.error(err))\r\n }\r\n }, [loginContextVariables, match.params.id])\r\n\r\n //Set display Images\r\n useEffect(() => {\r\n const axios = new AxiosService(loginContextVariables)\r\n deptList.map((dept: any) =>\r\n checkImage(dept.icon, axios, deptPlaceholder).then(data => {\r\n //var list = deptList.filter(i => i.departmentId !== dept.departmentId)\r\n setDeptList(list => [...list.filter(i => i.departmentId !== dept.departmentId), {...dept, icon: data}])\r\n deptImages.push({id: dept.departmentId, img: data})\r\n })\r\n )\r\n }, [useImages, loginContextVariables])\r\n\r\n //Check the current employees department, if they don't have one yet check the first\r\n useEffect(() => {\r\n var d = deptList.filter((i: any) => i.departmentName === userData.department)\r\n d[0] ? setDeptInput({...d[0]}) : setDeptInput({...deptList[0]})\r\n d[0] ? applyDefaults({...d[0]}) : applyDefaults({...deptList[0]})\r\n }, [deptList, userData.department])\r\n\r\n //If the employee is new add the default hardware and programs to their tables to be assigned to them\r\n const applyDefaults = (dept: IDepartment) => {\r\n if (match.params.id === 'new' && dept) {\r\n /*APPLY HARDWARE DEFAULTS */\r\n if (dept.defaultHardware) {\r\n //clear out added\r\n hardwareRows.added.map(add => {\r\n return (\r\n !hardwareDropdown.filter(item => item.id === add[0].id).length &&\r\n hardwareDropdown.push({\r\n name: add[0].value.toString(),\r\n id: add[0].id ? add[0].id.toString() : '',\r\n serialNumber: add[1].value.toString(),\r\n mfg: add[2].value.toString(),\r\n purchaseDate: add[3].value.toString(),\r\n })\r\n )\r\n })\r\n setHardwareRows({...hardwareRows, added: []})\r\n\r\n var toBeAdded: any[] = []\r\n var unavailable: any[] = []\r\n var tempHardwareDropdown = [...hardwareDropdown]\r\n\r\n dept.defaultHardware.forEach(need => {\r\n var needFulfilled = false\r\n tempHardwareDropdown.forEach(available => {\r\n if (\r\n !needFulfilled &&\r\n (available.name.toLowerCase().search(need.toLowerCase()) >= 0 ||\r\n available.id.search(need.toLowerCase()) >= 0)\r\n ) {\r\n var arr = [\r\n {value: available.name, id: available.id, sortBy: available.name},\r\n {value: available.serialNumber, id: available.id, sortBy: available.serialNumber},\r\n {value: available.mfg, id: available.id, sortBy: available.mfg},\r\n {value: available.purchaseDate, id: available.id, sortBy: available.purchaseDate},\r\n ]\r\n\r\n toBeAdded.push(arr)\r\n needFulfilled = true\r\n }\r\n })\r\n if (!needFulfilled) {\r\n unavailable.push([\r\n {value: need + ' is unavailable', id: -1, sortBy: need, unavailable: true},\r\n {value: '', id: -1, sortBy: -1},\r\n {value: '', id: -1, sortBy: -1},\r\n {value: '', id: -1, sortBy: -1},\r\n ])\r\n } else {\r\n //remove from the temp dropdown\r\n tempHardwareDropdown = [\r\n ...tempHardwareDropdown.filter(\r\n (option: any) => option.id !== toBeAdded[toBeAdded.length - 1][0].id\r\n ),\r\n ]\r\n }\r\n })\r\n\r\n //add the hardware defaults\r\n setHardwareRows({...hardwareRows, added: [...toBeAdded], assigned: [...unavailable]})\r\n\r\n //remove the used defaults from the dropdown\r\n setHardwareDropdown(tempHardwareDropdown)\r\n }\r\n\r\n if (dept.defaultSoftware) {\r\n /*APPLY SOFTWARE DEFAULTS */\r\n //clear out added\r\n softwareRows.added.forEach(add => {\r\n if (!softwareDropdown.filter(item => item.id === add[0].id).length) {\r\n softwareDropdown.push({\r\n name: add[0].value.toString(),\r\n id: add[0].id ? add[0].id.toString() : '',\r\n key: add[1].value.toString(),\r\n monthlyCost: add[2].value.toString(),\r\n })\r\n }\r\n })\r\n setSoftwareRows({...softwareRows, added: []})\r\n toBeAdded = []\r\n unavailable = []\r\n var tempSoftwareDropdown = [...softwareDropdown]\r\n\r\n dept.defaultSoftware.forEach(need => {\r\n var needFulfilled = false\r\n tempSoftwareDropdown.forEach(available => {\r\n if (\r\n !needFulfilled &&\r\n (available.name.toLowerCase().search(need.toLowerCase()) >= 0 || available.name === need)\r\n ) {\r\n var arr = [\r\n {value: available.name, id: available.id, sortBy: available.name},\r\n {value: available.key, id: available.id, sortBy: available.key},\r\n {value: available.monthlyCost, id: available.id, sortBy: available.monthlyCost},\r\n ]\r\n\r\n toBeAdded.push(arr)\r\n needFulfilled = true\r\n }\r\n })\r\n if (!needFulfilled) {\r\n unavailable.push([\r\n {value: need + ' is unavailable', id: -1, sortBy: need, unavailable: true},\r\n {value: '', id: -1, sortBy: -1},\r\n {value: '', id: -1, sortBy: -1},\r\n ])\r\n } else {\r\n //remove from the temp dropdown\r\n tempSoftwareDropdown = [\r\n ...tempSoftwareDropdown.filter(\r\n (option: any) => option.id !== toBeAdded[toBeAdded.length - 1][0].id\r\n ),\r\n ]\r\n }\r\n })\r\n\r\n //add the software defaults\r\n setSoftwareRows({...softwareRows, added: [...toBeAdded], assigned: [...unavailable]})\r\n\r\n //remove the defaults from the dropdown\r\n setSoftwareDropdown([...tempSoftwareDropdown])\r\n }\r\n\r\n if (dept.defaultLicenses) {\r\n /*APPLY LICENSE DEFAULTS */\r\n //clear out added\r\n licenseRows.added.forEach(add => {\r\n if (!licenseDropdown.filter(item => item.id === add[0].id).length) {\r\n licenseDropdown.push({\r\n name: add[0].value.toString(),\r\n id: add[0].id ? add[0].id.toString() : '',\r\n key: add[1].value.toString(),\r\n monthlyCost: add[2].value.toString(),\r\n })\r\n }\r\n })\r\n setLicenseRows({...licenseRows, added: []})\r\n toBeAdded = []\r\n unavailable = []\r\n var tempLicenseDropdown = [...licenseDropdown]\r\n\r\n dept.defaultLicenses.forEach(need => {\r\n var needFulfilled = false\r\n tempLicenseDropdown.forEach(available => {\r\n if (\r\n !needFulfilled &&\r\n (available.name.toLowerCase().search(need.toLowerCase()) >= 0 || available.name === need)\r\n ) {\r\n var arr = [\r\n {value: available.name, id: available.id, sortBy: available.name},\r\n {value: available.key, id: available.id, sortBy: available.key},\r\n {value: available.monthlyCost, id: available.id, sortBy: available.monthlyCost},\r\n {value: '', id: available.id, sortBy: ''},\r\n ]\r\n\r\n toBeAdded.push(arr)\r\n needFulfilled = true\r\n }\r\n })\r\n if (!needFulfilled) {\r\n unavailable.push([\r\n {value: need + ' is unavailable', id: -1, sortBy: need, unavailable: true},\r\n {value: '', id: -1, sortBy: -1},\r\n {value: '', id: -1, sortBy: -1},\r\n {value: '', id: -1, sortBy: -1},\r\n ])\r\n } else {\r\n //remove from the temp dropdown\r\n tempLicenseDropdown = [\r\n ...tempLicenseDropdown.filter(\r\n (option: any) => option.id !== toBeAdded[toBeAdded.length - 1][0].id\r\n ),\r\n ]\r\n }\r\n })\r\n\r\n //add the license defaults\r\n setLicenseRows({...licenseRows, added: [...toBeAdded], assigned: [...unavailable]})\r\n\r\n //remove the defaults from the dropdown\r\n setLicenseDropdown([...tempLicenseDropdown])\r\n }\r\n }\r\n }\r\n\r\n const handleAddHardware = (newRow: any) => {\r\n setChanged(true)\r\n //first add to displayed table\r\n var arr = [\r\n [\r\n {value: newRow.name, id: newRow.id, sortBy: newRow.name},\r\n {value: newRow.serialNumber, id: newRow.id, sortBy: newRow.serialNumber},\r\n {value: newRow.mfg, id: newRow.id, sortBy: newRow.mfg},\r\n {value: newRow.purchaseDate, id: newRow.id, sortBy: newRow.purchaseDate},\r\n ],\r\n ]\r\n\r\n //take it out of remove if its there\r\n var rem = hardwareRows.removed.filter((remove: any) => remove[0].id !== arr[0][0].id)\r\n setHardwareRows({...hardwareRows, removed: [...rem]})\r\n\r\n //dont put in added if its already assigned\r\n var isAssigned = hardwareRows.assigned.filter((add: any) => add[0].id === arr[0][0].id)\r\n if (isAssigned.length <= 0) {\r\n setHardwareRows({...hardwareRows, added: [...hardwareRows.added, ...arr]})\r\n }\r\n\r\n //remove it from the dropdown list\r\n var drop = hardwareDropdown.filter((option: any) => option !== newRow)\r\n setHardwareDropdown([...drop])\r\n }\r\n\r\n const handleRemoveHardware = (row: any) => {\r\n setChanged(true)\r\n //if its in added then remove it\r\n var arr = hardwareRows.added.filter((add: any) => add[0].id !== row[0].id)\r\n\r\n //add to removed array\r\n setHardwareRows({...hardwareRows, added: [...arr], removed: [...hardwareRows.removed, [...row]]})\r\n\r\n //add it to the dropdown\r\n var drop = {\r\n name: row[0].value,\r\n id: row[0].id,\r\n serialNumber: row[1].value,\r\n mfg: row[2].value,\r\n purchaseDate: row[3].value,\r\n }\r\n setHardwareDropdown([...hardwareDropdown, drop])\r\n }\r\n\r\n const handleAddSoftware = (newRow: any) => {\r\n setChanged(true)\r\n var arr = [\r\n [\r\n {value: newRow.name, id: newRow.id, sortBy: newRow.name},\r\n {value: newRow.key, id: newRow.id, sortBy: newRow.key},\r\n {value: newRow.monthlyCost, id: newRow.id, sortBy: newRow.monthlyCost},\r\n ],\r\n ]\r\n //take it out of remove if its there\r\n var rem = softwareRows.removed.filter((remove: any) => remove[0].id !== arr[0][0].id)\r\n setSoftwareRows({...softwareRows, removed: [...rem]})\r\n\r\n //dont put in added if its already assigned\r\n var isAssigned = softwareRows.assigned.filter((add: any) => add[0].id === arr[0][0].id)\r\n if (isAssigned.length <= 0) {\r\n setSoftwareRows({...softwareRows, added: [...softwareRows.added, ...arr]})\r\n }\r\n\r\n //remove it from the dropdown list\r\n var drop = softwareDropdown.filter((option: any) => option !== newRow)\r\n setSoftwareDropdown([...drop])\r\n }\r\n const handleRemoveSoftware = (row: any) => {\r\n setChanged(true)\r\n //if its in added then remove it\r\n var arr = softwareRows.added.filter((add: any) => add[0].id !== row[0].id)\r\n\r\n //add to removed array\r\n setSoftwareRows({...softwareRows, added: [...arr], removed: [...softwareRows.removed, [...row]]})\r\n\r\n //add it to the dropdown\r\n var drop = {\r\n name: row[0].value,\r\n id: row[0].id,\r\n key: row[1].id,\r\n monthlyCost: row[2].id,\r\n }\r\n setSoftwareDropdown([...softwareDropdown, drop])\r\n }\r\n\r\n const handleAddLicense = (newRow: any) => {\r\n setChanged(true)\r\n var arr = [\r\n [\r\n {value: newRow.name, id: newRow.id, sortBy: newRow.name},\r\n {value: newRow.key, id: newRow.id, sortBy: newRow.key},\r\n {value: newRow.monthlyCost, id: newRow.id, sortBy: newRow.monthlyCost},\r\n {value: '', id: newRow.id, sortBy: ''},\r\n ],\r\n ]\r\n //take it out of remove if its there\r\n var rem = licenseRows.removed.filter((remove: any) => remove[0].id !== arr[0][0].id)\r\n setLicenseRows({...licenseRows, removed: [...rem]})\r\n\r\n //dont put in added if its already assigned\r\n var isAssigned = licenseRows.assigned.filter((add: any) => add[0].id === arr[0][0].id)\r\n if (isAssigned.length <= 0) {\r\n setLicenseRows({...licenseRows, added: [...licenseRows.added, ...arr]})\r\n }\r\n\r\n //remove it from the dropdown list\r\n var drop = licenseDropdown.filter((option: any) => option !== newRow)\r\n setLicenseDropdown([...drop])\r\n }\r\n\r\n const handleRemoveLicence = (row: any) => {\r\n setChanged(true)\r\n //if its in added then remove it\r\n var arr = licenseRows.added.filter((add: any) => add[0].id !== row[0].id)\r\n\r\n //add to removed array\r\n setLicenseRows({...licenseRows, added: [...arr], removed: [...licenseRows.removed, [...row]]})\r\n\r\n //add it to the dropdown\r\n var drop = {\r\n name: row[0].value,\r\n id: row[0].id,\r\n key: row[1].value,\r\n monthlyCost: row[2].value,\r\n }\r\n setLicenseDropdown([...licenseDropdown, drop])\r\n }\r\n\r\n async function handleSubmit() {\r\n const axios = new AxiosService(loginContextVariables)\r\n var msg = ''\r\n var newID = ''\r\n\r\n /*ADD NEW EMPLOYEE */\r\n if (\r\n //make sure no inputs are null/undefined/empty\r\n match.params.id === 'new' &&\r\n deptInput &&\r\n firstNameInput &&\r\n lastNameInput && \r\n emailInput\r\n ) {\r\n var postEmployee = {\r\n Employee: {\r\n FirstName: firstNameInput,\r\n LastName: lastNameInput,\r\n Email: emailInput,\r\n HireDate: dateInput.toISOString(),\r\n Role: roleInput ? roleInput : deptInput.departmentName,\r\n DepartmentID: deptInput.departmentId,\r\n IsAdmin: adminInput,\r\n TextField: descriptionInput,\r\n },\r\n HardwareAssigned: [\r\n ...hardwareRows.added.map(i => {\r\n var hw = i[0].id ? i[0].id.toString().split('/') : [null, null]\r\n return {Type: hw[0], ID: hw[1]}\r\n }),\r\n ],\r\n ProgramAssigned: [\r\n ...softwareRows.added.map(i => {\r\n return {ID: i[0].id}\r\n }),\r\n ...licenseRows.added.map(i => {\r\n return {ID: i[0].id}\r\n }),\r\n ],\r\n }\r\n\r\n await axios\r\n .post('/add/Employee', postEmployee)\r\n .then((response: any) => {\r\n if (response && response.status === 201) {\r\n newID = response.data\r\n window.alert(`${firstNameInput + ' ' + lastNameInput} was successfully added!`)\r\n }\r\n if (imgInput) {\r\n putUploadImage(imgInput, `image/employee/${newID}`, axios)\r\n }\r\n })\r\n .catch((err: any) => console.error(err))\r\n\r\n history.push({pathname: `/employees/detail/${newID}`, state: {prev: history.location}})\r\n } else if (match.params.id === 'new' && changed){\r\n //one or maore of the inputs was null/undefined/empty\r\n msg = 'Failed because:\\n'\r\n\r\n msg += roleInput === '' ? 'Role field is empty,' : ''\r\n msg += firstNameInput === '' ? 'First Name field is empty,' : ''\r\n msg += lastNameInput === '' ? 'Last Name field is empty,' : ''\r\n msg += emailInput === '' ? 'Email field is empty,' : ''\r\n\r\n window.alert(msg)\r\n }\r\n\r\n /*UPDATE EMPLOYEE */\r\n if (\r\n //make sure no inputs are null/undefined/empty\r\n match.params.id !== 'new' &&\r\n deptInput &&\r\n roleInput &&\r\n firstNameInput &&\r\n lastNameInput &&\r\n emailInput &&\r\n changed\r\n ) {\r\n var updateEmployee = {\r\n Employee: {\r\n EmployeeId: match.params.id,\r\n FirstName: firstNameInput,\r\n LastName: lastNameInput,\r\n Email: emailInput,\r\n HireDate: dateInput.toISOString(),\r\n Role: roleInput,\r\n DepartmentID: deptInput.departmentId,\r\n IsAdmin: adminInput,\r\n TextField: descriptionInput,\r\n },\r\n HardwareAssigned: [\r\n ...hardwareRows.added.map(i => {\r\n var hw = i[0].id ? i[0].id.toString().split('/') : [null, null]\r\n return {Type: hw[0], ID: hw[1]}\r\n }),\r\n ],\r\n ProgramAssigned: [\r\n ...softwareRows.added.map(i => {\r\n return {ID: i[0].id}\r\n }),\r\n ...licenseRows.added.map(i => {\r\n return {ID: i[0].id}\r\n }),\r\n ],\r\n\r\n HardwareUnassigned: [\r\n ...hardwareRows.removed.map(i => {\r\n var hw = i[0].id ? i[0].id.toString().split('/') : [null, null]\r\n return {Type: hw[0], ID: hw[1]}\r\n }),\r\n ],\r\n ProgramUnassigned: [\r\n ...softwareRows.removed.map(i => {\r\n return {ID: i[0].id}\r\n }),\r\n ...licenseRows.removed.map(i => {\r\n return {ID: i[0].id}\r\n }),\r\n ],\r\n }\r\n\r\n await axios.put(`/update/Employee`, updateEmployee).catch((err: any) => console.error(err))\r\n\r\n history.push({pathname: `/employees/detail/${match.params.id}`, state: {prev: history.location}})\r\n } else if (match.params.id !== 'new' && changed) {\r\n //one or maore of the inputs was null/undefined/empty\r\n msg = 'Failed because:\\n'\r\n\r\n msg += roleInput === '' ? 'Role field is empty,' : ''\r\n msg += firstNameInput === '' ? 'First Name field is empty,' : ''\r\n msg += lastNameInput === '' ? 'Last Name field is empty,' : ''\r\n msg += emailInput === '' ? 'Email field is empty,' : ''\r\n\r\n window.alert(msg)\r\n }\r\n\r\n /*CHANGE IMAGE */\r\n if (imgInput) {\r\n const cb = () =>\r\n history.push({pathname: `/employees/detail/${match.params.id}`, state: {prev: history.location}})\r\n putUploadImage(imgInput, userData.photo, axios, cb)\r\n }\r\n }\r\n\r\n const displayTable = (rows: any, type: string) => {\r\n let arr: any[] = []\r\n\r\n if (rows.removed.length === 0) {\r\n arr = [...rows.assigned]\r\n } else {\r\n var bools: any[] = [] //bools[i] will be true if assigned[i] is not in removed\r\n rows.assigned.forEach((row: any, index: number) => {\r\n bools[index] = true\r\n rows.removed.forEach((remove: any) => {\r\n bools[index] = bools[index] && remove[0].id !== row[0].id\r\n })\r\n })\r\n rows.assigned.forEach((row: any, index: number) => {\r\n if (bools[index]) {\r\n arr.push(row)\r\n }\r\n })\r\n }\r\n\r\n rows.added.forEach((add: any) => {\r\n if (type === 'hw' || type === 'l') {\r\n arr.push([\r\n {value: add[0].value, id: add[0].id, sortBy: add[0].sortBy, unavailable: add[0].unavailable},\r\n {value: add[1].value, id: add[1].id, sortBy: add[1].sortBy},\r\n {value: add[2].value, id: add[2].id, sortBy: add[2].sortBy},\r\n {value: add[3].value, id: add[3].id, sortBy: add[3].sortBy},\r\n ])\r\n }\r\n if (type === 'sw') {\r\n arr.push([\r\n {value: add[0].value, id: add[0].id, sortBy: add[0].sortBy, unavailable: add[0].unavailable},\r\n {value: add[1].value, id: add[1].id, sortBy: add[1].sortBy},\r\n {value: add[2].value, id: add[2].id, sortBy: add[2].sortBy},\r\n ])\r\n }\r\n })\r\n\r\n return arr\r\n }\r\n\r\n return (\r\n <div className={s(styles.columns, isDarkMode ? styles.backgroundDark : {})}>\r\n {/* column 1 */}\r\n\r\n <div className={styles.firstColumn}>\r\n <BackButton history={history} className={styles.backButton} />\r\n <div className={styles.imgContainer}>\r\n <PictureInput setImage={setImgInput} image={imgInput} />\r\n </div>\r\n <div className={styles.submitContainer}>\r\n <Button text='Submit' icon='submit' onClick={handleSubmit} className={styles.submitbutton} />\r\n </div>\r\n </div>\r\n {/* column 2 */}\r\n <div className={styles.secondColumn}>\r\n {/* name and date */}\r\n <div className={s(styles.title, styles.paddingTop, isDarkMode ? styles.titleDark : {})}>\r\n Employee Information\r\n </div>\r\n\r\n {/* Admin/nonadmin radio cards */}\r\n <div className={styles.adminCardContainer}>\r\n {/* admin card */}\r\n <div className={styles.paddingRight}>\r\n <div className={styles.adminCard}>\r\n <div className={styles.card}>\r\n <input\r\n type='radio'\r\n name='admin'\r\n className={s(styles.checkmark, isDarkMode ? styles.checkmarkDark : {})}\r\n checked={adminInput}\r\n onChange={() => {\r\n setAdminInput(true)\r\n setChanged(true)\r\n }}\r\n />\r\n <div className={s(styles.checkmark, isDarkMode ? styles.checkmarkDark : {})} />\r\n <div\r\n className={s(\r\n styles.insideCheckmarkAdmin,\r\n isDarkMode ? styles.insideCheckmarkAdminDark : {}\r\n )}\r\n />\r\n\r\n <div className={s(styles.title, isDarkMode ? styles.titleDark : {})}>Admin User</div>\r\n <div className={styles.adminText}>\r\n This user will be able to edit any detail pages and be able to add new hardware,\r\n software, etc.\r\n </div>\r\n </div>\r\n <FaUserShield className={s(styles.adminIconShield, isDarkMode ? styles.titleDark : {})} />\r\n </div>\r\n </div>\r\n {/* non admin card */}\r\n {/* // TODO: Make this a component */}\r\n <div className={styles.adminCard}>\r\n <div className={styles.card}>\r\n <input\r\n type='radio'\r\n name='admin'\r\n className={s(styles.checkmark, isDarkMode ? styles.checkmarkDark : {})}\r\n checked={!adminInput}\r\n onChange={() => {\r\n setAdminInput(false)\r\n setChanged(true)\r\n }}\r\n />\r\n <div className={s(styles.checkmark, isDarkMode ? styles.checkmarkDark : {})} />\r\n <div\r\n className={s(\r\n styles.insideCheckmarkAdmin,\r\n isDarkMode ? styles.insideCheckmarkAdminDark : {}\r\n )}\r\n />\r\n <div className={s(styles.title, isDarkMode ? styles.titleDark : {})}>Non Admin User</div>\r\n <div className={styles.adminText}>\r\n This user will be able to view all content and review the overall company as it grows.\r\n </div>\r\n </div>\r\n <FaUser className={s(styles.adminIconShield, isDarkMode ? styles.titleDark : {})} />\r\n </div>\r\n </div>\r\n\r\n <div className={styles.row}>\r\n <div className={styles.paddingRight}>\r\n <div className={styles.paddingBottom}>\r\n <Input\r\n label={'First Name'}\r\n value={firstNameInput}\r\n onChange={(e: any) => {\r\n setFirstNameInput(e.target.value)\r\n setChanged(true)\r\n }}\r\n maxChars={100}\r\n className={styles.employeeRoleInput}\r\n />\r\n\r\n <Input\r\n label={'Email'}\r\n value={emailInput}\r\n onChange={(e: any) => {\r\n setEmailInput(e.target.value)\r\n setChanged(true)\r\n }}\r\n maxChars={100}\r\n className={styles.employeeRoleInput}\r\n />\r\n\r\n <Input\r\n label={'Role'}\r\n value={roleInput}\r\n onChange={(e: any) => {\r\n setRoleInput(e.target.value)\r\n setChanged(true)\r\n }}\r\n maxChars={100}\r\n className={styles.employeeRoleInput}\r\n />\r\n </div>\r\n </div>\r\n <div>\r\n <Input\r\n label={'Last Name'}\r\n value={lastNameInput}\r\n onChange={(e: any) => {\r\n setLastNameInput(e.target.value)\r\n setChanged(true)\r\n }}\r\n maxChars={100}\r\n className={styles.employeeRoleInput}\r\n />\r\n\r\n <div className={styles.text}>Date Hired</div>\r\n <DatePicker\r\n dateFormat='MM/dd/yyyy'\r\n placeholderText={userData.hireDate}\r\n selected={dateInput}\r\n onChange={e => {\r\n e && setDateInput(e)\r\n setChanged(true)\r\n }}\r\n className={styles.input}\r\n />\r\n </div>\r\n </div>\r\n\r\n <div className={styles.line} />\r\n\r\n {/* Employee Dept radio buttons */}\r\n <div\r\n className={s(\r\n styles.title,\r\n styles.paddingTop,\r\n styles.paddingBottom,\r\n isDarkMode ? styles.titleDark : {}\r\n )}\r\n >\r\n Employee Department\r\n </div>\r\n {deptInput && deptList && (\r\n <div className={styles.employeeDepartment}>\r\n {deptList.map((dept: any) => (\r\n <div key={dept.departmentId} className={styles.container}>\r\n <input\r\n type='radio'\r\n name='employeeDept'\r\n className={s(styles.checkmark, isDarkMode ? styles.checkmarkDark : {})}\r\n checked={dept.departmentId === deptInput.departmentId}\r\n onChange={() => {\r\n setDeptInput(dept)\r\n applyDefaults(dept)\r\n setChanged(true)\r\n }}\r\n />\r\n <div className={s(styles.checkmark, isDarkMode ? styles.checkmarkDark : {})} />\r\n <div\r\n className={s(\r\n styles.insideCheckmark,\r\n isDarkMode ? styles.insideCheckmarkAdminDark : {}\r\n )}\r\n />\r\n <div className={styles.deptIconContainer}>\r\n {deptImages &&\r\n deptImages.filter(x => x.id === dept.departmentId) &&\r\n deptImages.filter(x => x.id === dept.departmentId)[0] ? (\r\n <img\r\n src={deptImages.filter(x => x.id === dept.departmentId)[0].img}\r\n alt={''}\r\n className={styles.deptIcon}\r\n />\r\n ) : (\r\n <img src={deptPlaceholder} alt={''} className={styles.deptIcon} />\r\n )}\r\n </div>\r\n <div className={styles.deptName}>{dept.departmentName}</div>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n\r\n <div className={styles.line} />\r\n\r\n {/* Tables */}\r\n <div className={styles.tableContainer}>\r\n <div className={styles.paddingTop}>\r\n <DetailPageTable\r\n headers={hardwareHeaders}\r\n rows={displayTable(hardwareRows, 'hw')}\r\n setRows={() => {}}\r\n style={styles.newRowThing}\r\n edit={true}\r\n remove={handleRemoveHardware}\r\n // sorting={false}\r\n />\r\n </div>\r\n {hardwareDropdown && (\r\n <AddDropdown\r\n title={'Assign new hardware'}\r\n content={hardwareDropdown}\r\n onSelect={handleAddHardware}\r\n className={s(styles.moveItRight, styles.dropdown3)}\r\n />\r\n )}\r\n\r\n <div className={styles.paddingTop}>\r\n <DetailPageTable\r\n headers={softwareHeaders}\r\n rows={displayTable(softwareRows, 'sw')}\r\n setRows={() => {}}\r\n style={styles.newRowThing}\r\n className={styles.paddingTop}\r\n edit={true}\r\n remove={handleRemoveSoftware}\r\n // sorting={false}\r\n />\r\n <div className={styles.ddc2}>\r\n {softwareDropdown && (\r\n <AddDropdown\r\n title={'Assign new software'}\r\n content={softwareDropdown}\r\n onSelect={handleAddSoftware}\r\n className={s(styles.moveItRight, styles.dropdown2)}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n\r\n <div className={styles.paddingTop}>\r\n <DetailPageTable\r\n headers={licenseHeaders}\r\n rows={displayTable(licenseRows, 'l')}\r\n setRows={() => {}}\r\n style={styles.newRowThing}\r\n edit={true}\r\n remove={handleRemoveLicence}\r\n />\r\n </div>\r\n\r\n <div className={styles.ddc1}>\r\n {licenseDropdown && (\r\n <AddDropdown\r\n title={'Assign new license'}\r\n content={licenseDropdown}\r\n onSelect={handleAddLicense}\r\n className={s(styles.moveItRight, styles.dropdown1)}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n\r\n <div className={s(styles.inputContainer, styles.descriptionContainer)}>\r\n <div className={styles.text}>Description</div>\r\n <textarea\r\n className={s(styles.input, styles.description)}\r\n value={descriptionInput ? descriptionInput : ''}\r\n onChange={e => {\r\n setChanged(true)\r\n setDescriptionInput(e.target.value)\r\n }}\r\n />\r\n </div>\r\n\r\n <div className={styles.submitContainer}>\r\n <Button text='Submit' icon='submit' onClick={handleSubmit} />\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import React, {useState, useEffect, useContext} from 'react'\r\n\r\n// Components\r\nimport {AddDropdown} from '../../reusables/Dropdown/AddDropdown'\r\nimport {Input} from '../../reusables/Input/Input'\r\nimport 'react-datepicker/dist/react-datepicker.css'\r\n\r\n// Utils\r\nimport {concatStyles as s} from '../../../utilities/mikesConcat'\r\n\r\n// Styles\r\nimport styles from './DepartmentDetailEditPage.module.css'\r\nimport {Button} from '../../reusables/Button/Button'\r\nimport {AxiosService} from '../../../services/AxiosService/AxiosService'\r\nimport {LoginContext, ThemeContext} from '../../App/App'\r\nimport {format} from '../../../utilities/formatEmptyStrings'\r\nimport {cloneDeep} from 'lodash'\r\nimport {DetailPageTable} from '../../reusables/DetailPageTable/DetailPageTable'\r\nimport {PictureInput} from '../../reusables/PictureInput/PictureInput'\r\nimport {BackButton} from '../../reusables/BackButton/BackButton'\r\nimport {putUploadImage} from '../../../utilities/UploadImage'\r\n\r\n// Types\r\ninterface IDepartmentDetailEditPageProps {\r\n match: any\r\n history: any\r\n}\r\ninterface Defaults {\r\n value: string\r\n sortBy: string\r\n id: number\r\n}\r\n\r\n// Primary Component\r\nexport const DepartmentDetailEditPage: React.SFC<IDepartmentDetailEditPageProps> = props => {\r\n const {history, match} = props\r\n\r\n const [deptList] = useState<any>([])\r\n var deptsRowOne: any[] = []\r\n var deptsRowTwo: any[] = []\r\n //push them into alternating rows so that rows are equal\r\n for (let i = 0; i < deptList.length; i++) {\r\n if (i % 2 === 0) {\r\n deptsRowOne.push(deptList[i].DepartmentName)\r\n } else {\r\n deptsRowTwo.push(deptList[i].DepartmentName)\r\n }\r\n }\r\n\r\n const {loginContextVariables} = useContext(LoginContext)\r\n const {isDarkMode} = useContext(ThemeContext)\r\n\r\n const axios = new AxiosService(loginContextVariables)\r\n const [deptData, setDeptData] = useState<any>({})\r\n const [hardwareRows, setHardwareRows] = useState<any[]>([])\r\n const [softwareRows, setSoftwareRows] = useState<any[]>([])\r\n const [licenseRows, setLicenseRows] = useState<any[]>([])\r\n\r\n const hardwareHeaders = ['Hardware']\r\n const softwareHeaders = ['Software']\r\n const licenseHeaders = ['Licenses']\r\n\r\n //all possible hardware, software, and licenses\r\n const [hardwareDropdown, setHardwareDropdown] = useState<{name: string; id: number}[]>([])\r\n const [softwareDropdown, setSoftwareDropdown] = useState<{name: string; id: number}[]>([])\r\n const [licenseDropdown, setLicenseDropdown] = useState<{name: string; id: number}[]>([])\r\n\r\n const [imgInput, setImgInput] = useState<File>()\r\n\r\n useEffect(() => {\r\n axios\r\n .get(`/detail/department/${match.params.id}`)\r\n .then((data: any) => {\r\n let dept: any = {\r\n // photo: data[0].picture,'\r\n departmentName: data[0].departmentName,\r\n }\r\n setDeptData(dept)\r\n\r\n let hw: any[] = []\r\n data[0].defaultHardware.map((item: string, index: number) =>\r\n hw.push([{value: format(item), sortBy: item, id: index}])\r\n )\r\n setHardwareRows(hw)\r\n\r\n let sw: any[] = []\r\n data[0].defaultSoftware.map((item: string, index: number) =>\r\n sw.push([{value: format(item), sortBy: item, id: index}])\r\n )\r\n setSoftwareRows(sw)\r\n\r\n let l: any[] = []\r\n data[0].defaultLicenses.map((item: string, index: number) =>\r\n l.push([{value: format(item), sortBy: item, id: index}])\r\n )\r\n setLicenseRows(l)\r\n })\r\n .catch((err: any) => console.error(err))\r\n }, [])\r\n\r\n //get the lists of all possible hardware, licenses, and software\r\n useEffect(() => {\r\n axios.get(`/add/departmentprep`).then((data: any) => {\r\n let hw: {name: string; id: number}[] = []\r\n data[0].hardware.map(\r\n (hardware: string, index: number) => hw.push({name: hardware, id: index}) //gives each hardware unique id\r\n )\r\n setHardwareDropdown(hw)\r\n let sw: {name: string; id: number}[] = []\r\n data[0].software.map(\r\n (software: string, index: number) => sw.push({name: software, id: index}) //gives each hardware unique id\r\n )\r\n setSoftwareDropdown(sw)\r\n\r\n let l: {name: string; id: number}[] = []\r\n data[0].licenses.map(\r\n (licenses: string, index: number) => l.push({name: licenses, id: index}) //gives each hardware unique id\r\n )\r\n setLicenseDropdown(l)\r\n })\r\n }, [])\r\n\r\n const handleAddHardware = (name: string) => {\r\n let tempArray = cloneDeep(hardwareRows)\r\n tempArray.push([{value: format(name), sortBy: name, id: tempArray.length}])\r\n setHardwareRows(tempArray)\r\n }\r\n const handleRemoveHardware = (name: Defaults[]) => {\r\n let tempArray = cloneDeep(hardwareRows)\r\n tempArray = tempArray.filter(item => item[0].id !== name[0].id)\r\n setHardwareRows(tempArray)\r\n }\r\n\r\n const handleAddSoftware = (name: string) => {\r\n let tempArray = cloneDeep(softwareRows)\r\n tempArray.push([{value: format(name), sortBy: name, id: tempArray.length}])\r\n setSoftwareRows(tempArray)\r\n }\r\n const handleRemoveSoftware = (name: Defaults[]) => {\r\n let tempArray = cloneDeep(softwareRows)\r\n tempArray = tempArray.filter(item => item[0].id !== name[0].id)\r\n setSoftwareRows(tempArray)\r\n }\r\n\r\n const handleAddLicense = (name: string) => {\r\n let tempArray = cloneDeep(licenseRows)\r\n tempArray.push([{value: format(name), sortBy: name, id: tempArray.length}])\r\n setLicenseRows(tempArray)\r\n }\r\n const handleRemoveLicense = (name: Defaults[]) => {\r\n let tempArray = cloneDeep(licenseRows)\r\n tempArray = tempArray.filter(item => item[0].id !== name[0].id)\r\n setLicenseRows(tempArray)\r\n }\r\n\r\n //takes in the array of array of objects (type:Defaults) and returns\r\n //an array of strings to send to the database\r\n function formatForPost(rows: Defaults[][]) {\r\n let tempArray: string[] = []\r\n for (let i = 0; i < rows.length; i++) {\r\n tempArray.push(rows[i][0].value)\r\n }\r\n return tempArray\r\n }\r\n async function handleSubmit() {\r\n var newID = ''\r\n var imgID\r\n if (\r\n //check to make sure there is a proper entry in department name\r\n deptData.departmentName === '' ||\r\n deptData.departmentName === null ||\r\n deptData.departmentName === undefined\r\n ) {\r\n window.alert('Department must have a name!')\r\n } else {\r\n let newDefaultHardware = formatForPost(hardwareRows)\r\n let newDefaultSoftware = formatForPost(softwareRows)\r\n let newDefaultLicenses = formatForPost(licenseRows)\r\n if (match.params.id === 'new') {\r\n await axios\r\n .post(`add/department`, {\r\n DefaultHardware: {DefaultHardware: newDefaultHardware},\r\n DefaultPrograms: {\r\n license: newDefaultLicenses,\r\n software: newDefaultSoftware,\r\n },\r\n name: deptData.departmentName,\r\n })\r\n .then((response: any) => {\r\n newID = imgID = response.data\r\n })\r\n history.push({pathname: `/departments/detail/${newID}`, state: {prev: history.location}})\r\n } else {\r\n await axios.put(`update/department`, {\r\n DefaultHardware: {DefaultHardware: newDefaultHardware},\r\n DefaultPrograms: {\r\n license: newDefaultLicenses,\r\n software: newDefaultSoftware,\r\n },\r\n name: deptData.departmentName,\r\n ID: match.params.id,\r\n })\r\n history.push({pathname: `/departments/detail/${match.params.id}`, state: {prev: history.location}})\r\n imgID = match.params.id\r\n }\r\n }\r\n // Update Image.\r\n if (imgInput) {\r\n putUploadImage(imgInput, `/image/department/${imgID}`, axios)\r\n }\r\n }\r\n\r\n return (\r\n <div className={s(styles.columns, isDarkMode ? styles.backgroundDark : {})}>\r\n {/* column 1 */}\r\n\r\n <div className={styles.firstColumn}>\r\n <BackButton history={history} className={styles.backButton} />\r\n\r\n <div className={styles.imgContainer}>\r\n <PictureInput setImage={setImgInput} image={imgInput} />\r\n </div>\r\n <div className={styles.submitContainer}>\r\n <Button text='Submit' onClick={handleSubmit} />\r\n </div>\r\n </div>\r\n {/* column 2 */}\r\n <div className={styles.secondColumn}>\r\n {/* name and date */}\r\n <div className={s(styles.title, styles.paddingTop, isDarkMode ? styles.textDark : {})}>\r\n Department Information\r\n </div>\r\n\r\n <div className={styles.row}>\r\n <Input\r\n label={'Department Name'}\r\n value={deptData.departmentName}\r\n onChange={(e: any) => setDeptData({...deptData, departmentName: e.target.value})}\r\n maxChars={50}\r\n className={styles.deptNameInput}\r\n />\r\n </div>\r\n\r\n {/* Tables */}\r\n <div className={styles.tableColumn}>\r\n <div className={styles.firstTableColumn}>\r\n {/* default hardware */}\r\n <div className={styles.table}>\r\n <DetailPageTable\r\n headers={hardwareHeaders}\r\n rows={hardwareRows}\r\n setRows={setHardwareRows}\r\n style={styles.newRowThing}\r\n edit={true}\r\n remove={handleRemoveHardware}\r\n />\r\n\r\n {hardwareDropdown && (\r\n <AddDropdown\r\n title={'Add default hardware'}\r\n content={hardwareDropdown}\r\n onSelect={(i: {name: string; id: string | number}) => handleAddHardware(i.name)}\r\n className={s(styles.addDefaultContainer, styles.zIndex3)}\r\n />\r\n )}\r\n </div>\r\n {/* default licenses */}\r\n <div className={styles.table}>\r\n <DetailPageTable\r\n headers={licenseHeaders}\r\n rows={licenseRows}\r\n setRows={setLicenseRows}\r\n style={styles.newRowThing}\r\n edit={true}\r\n remove={handleRemoveLicense}\r\n />\r\n\r\n {licenseDropdown && (\r\n <AddDropdown\r\n title={'Add default license'}\r\n content={licenseDropdown}\r\n onSelect={(i: {name: string; id: string | number}) => handleAddLicense(i.name)}\r\n className={styles.addDefaultContainer}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n {/* default software */}\r\n <div className={styles.secondTableColumn}>\r\n <div className={styles.table}>\r\n <DetailPageTable\r\n headers={softwareHeaders}\r\n rows={softwareRows}\r\n setRows={setSoftwareRows}\r\n style={styles.newRowThing}\r\n edit={true}\r\n remove={handleRemoveSoftware}\r\n />\r\n {softwareDropdown && (\r\n <AddDropdown\r\n title={'Add default software'}\r\n content={softwareDropdown}\r\n onSelect={(i: {name: string; id: string | number}) => handleAddSoftware(i.name)}\r\n className={styles.addDefaultContainer}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n <div className={styles.submitContainer}>\r\n <Button text='Submit' onClick={handleSubmit} />\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import React, { useState, useEffect, useContext } from 'react'\r\nimport { AxiosService } from '../../../services/AxiosService/AxiosService'\r\n\r\n// Components\r\nimport { Button } from '../../reusables/Button/Button'\r\nimport { HistoryLog, IHistoryLogArray } from '../../reusables/HistoryLog/HistoryLog'\r\nimport DatePicker from 'react-datepicker'\r\nimport { PictureInput } from '../../reusables/PictureInput/PictureInput'\r\nimport { Checkbox } from '../../reusables/Checkbox/Checkbox'\r\nimport { BackButton } from '../../reusables/BackButton/BackButton'\r\nimport { Group } from '../../reusables/Group/Group'\r\n\r\n// Utils\r\nimport { concatStyles as s } from '../../../utilities/mikesConcat'\r\nimport { putUploadImage } from '../../../utilities/UploadImage';\r\n\r\n// Styles\r\nimport styles from './HardwareDetailEditPage.module.css'\r\nimport dropdownStyles from '../../reusables/Dropdown/Dropdown.module.css'\r\n\r\n// Context\r\nimport { LoginContext, ThemeContext } from '../../App/App'\r\nimport { cloneDeep } from 'lodash'\r\nimport { sortByDate } from '../../../utilities/quickSort'\r\nimport { DropdownList } from '../../reusables/Dropdown/DropdownList'\r\n\r\n// Types\r\ninterface IHardwareDetailEditPageProps {\r\n history: any\r\n match: any\r\n}\r\nexport interface MonitorData {\r\n Make: string\r\n Model: string\r\n ScreenSize: number\r\n Resolution: number\r\n Inputs: number\r\n SerialNumber: number\r\n\r\n Location: string\r\n EmployeeId: number\r\n\r\n RenewalDate: Date\r\n PurchaseDate: Date\r\n EndOfLife: Date\r\n\r\n FlatCost: number\r\n CostPerYear: number\r\n MonthsPerRenewal: number\r\n Mfg: null\r\n TextField: string\r\n}\r\n\r\n// Primary Component\r\nexport const HardwareDetailEditPage: React.SFC<IHardwareDetailEditPageProps> = props => {\r\n const { history, match } = props\r\n\r\n const { loginContextVariables } = useContext(LoginContext)\r\n const { isDarkMode } = useContext(ThemeContext)\r\n\r\n const axios = new AxiosService(loginContextVariables)\r\n\r\n //default\r\n const [firstSectionHeaders, setFirstSectionHeaders] = useState<string[]>(['yeah something went wrong'])\r\n const [secondSectionHeaders, setSecondSectionHeaders] = useState<string[]>(['yeah something went wrong'])\r\n const [thirdSectionHeaders, setThirdSectionHeaders] = useState<string[]>(['yeah something went wrong'])\r\n\r\n const [firstSectionData, setFirstSectionData] = useState<(string | number)[]>([])\r\n // var returnFirstSectionData = {}\r\n const [secondSectionData, setSecondSectionData] = useState<(string | number)[]>([])\r\n const [thirdSectionData, setThirdSectionData] = useState<(string | number)[]>([])\r\n const [costSection, setCostSection] = useState<(number | string)[]>([])\r\n const [isVirtualized, setIsVirtualized] = useState<boolean>(false)\r\n\r\n const [purchaseDateInput, setPurchaseDateInput] = useState<Date>(new Date())\r\n const [renewalDateInput, setRenewalDateInput] = useState<Date>(new Date())\r\n const [endOfLifeInput, setEndOfLifeInput] = useState<Date>(new Date())\r\n\r\n const [commentText, setCommentText] = useState('')\r\n\r\n const [historyLogEntries, setHistoryLogEntries] = useState<IHistoryLogArray[]>([])\r\n const [addHistoryLog, setAddHistoryLog] = useState<IHistoryLogArray[]>([])\r\n const [removeHistoryLog, setRemoveHistoryLog] = useState<(number | undefined)[]>([])\r\n const [eventInput, setEventInput] = useState<'Broken' | 'Repaired'>()\r\n const [historyLogBool, setHistoryLogBool] = useState(false)\r\n const [dateInput, setDateInput] = useState<Date>(new Date())\r\n\r\n const [hasRecurringCost, setHasRecurringCost] = useState<boolean>(false)\r\n const [hasFlatCost, setHasFlatCost] = useState<boolean>(false)\r\n\r\n const [employeeDropdown, setEmployeeDropdown] = useState<{ name: string; id: number }[]>()\r\n const [selectedEmployee, setSelectedEmployee] = useState<{ name: string; id: number }>()\r\n\r\n const [imgInput, setImgInput] = useState<File>()\r\n\r\n var key = 0\r\n\r\n useEffect(() => {\r\n axios.get(`add/hardwarePrep`).then((data: any) => {\r\n const employees: { name: string; id: number }[] = []\r\n data.map((i: { employeeName: string; employeeId: number }) =>\r\n employees.push({\r\n name: i.employeeName,\r\n id: i.employeeId,\r\n })\r\n )\r\n setEmployeeDropdown(employees)\r\n })\r\n if (match.params.type === 'server') {\r\n setFirstSectionHeaders([\r\n 'Make',\r\n 'Model',\r\n 'OS',\r\n 'RAM (GB)',\r\n 'Local HHD (GB)',\r\n '# of Cores',\r\n 'MFG Tag',\r\n 'Serial #',\r\n 'IP Address',\r\n 'SAN',\r\n 'FQDN',\r\n ])\r\n setSecondSectionHeaders(['Purchase Date', 'End of Life', 'Renewal Date'])\r\n setThirdSectionHeaders(['Employee Assigned', 'Location'])\r\n if (match.params.id !== 'new') {\r\n axios\r\n .get(`/detail/server/${match.params.id}`)\r\n .then((data: any) => {\r\n setFirstSectionData([\r\n data[0].server.make,\r\n data[0].server.model,\r\n data[0].server.operatingSystem,\r\n data[0].server.ram,\r\n data[0].server.localHHD,\r\n data[0].server.numberOfCores,\r\n data[0].server.mfg,\r\n data[0].server.serialNumber,\r\n data[0].server.ipAddress,\r\n data[0].server.san,\r\n data[0].server.fqdn,\r\n ])\r\n setSecondSectionData([])\r\n setPurchaseDateInput(data[0].server.purchaseDate)\r\n setRenewalDateInput(data[0].server.renewalDate)\r\n setEndOfLifeInput(data[0].server.endOfLife)\r\n setThirdSectionData([data[0].employeeAssignedName, data[0].server.location])\r\n setIsVirtualized(data[0].server.virtualize)\r\n setCostSection([\r\n data[0].server.flatCost,\r\n data[0].server.costPerYear,\r\n data[0].server.monthsPerRenewal,\r\n ])\r\n checkCostStates(data[0].server.flatCost, data[0].server.costPerYear)\r\n setCommentText(data[0].server.textField)\r\n setHistoryLogEntries(data[0].serverHistory)\r\n setHistoryLogEntries(data[0].serverHistory)\r\n setSelectedEmployee({ name: data[0].employeeAssignedName, id: data[0].server.employeeId })\r\n })\r\n .catch((err: any) => console.error(err))\r\n }\r\n } else if (match.params.type === ('laptop' || 'computer')) {\r\n setFirstSectionHeaders([\r\n 'Make',\r\n 'Model',\r\n 'CPU',\r\n 'RAM (GB)',\r\n 'SSD (GB)',\r\n 'Screen Size (in)',\r\n 'Monitor Output',\r\n 'Serial #',\r\n 'MFG Tag',\r\n 'FQDN',\r\n ])\r\n setSecondSectionHeaders(['Purchase Date', 'End of Life', 'Renewal Date'])\r\n setThirdSectionHeaders(['Employee Assigned', 'Location'])\r\n if (match.params.id !== 'new') {\r\n axios\r\n .get(`/detail/computer/${match.params.id}`)\r\n .then((data: any) => {\r\n setFirstSectionData([\r\n data[0].computer.make,\r\n data[0].computer.model,\r\n data[0].computer.cpu,\r\n data[0].computer.ramgb,\r\n data[0].computer.ssdgb,\r\n data[0].computer.screenSize,\r\n data[0].computer.monitorOutput,\r\n data[0].computer.serialNumber,\r\n data[0].computer.mfg,\r\n data[0].computer.fqdn,\r\n ])\r\n\r\n setSecondSectionData([])\r\n setCostSection([\r\n data[0].computer.flatCost,\r\n data[0].computer.costPerYear,\r\n data[0].computer.monthsPerRenewal,\r\n ])\r\n checkCostStates(data[0].computer.flatCost, data[0].computer.costPerYear)\r\n setPurchaseDateInput(data[0].computer.purchaseDate)\r\n setRenewalDateInput(data[0].computer.renewalDate)\r\n setHistoryLogEntries(data[0].computerHistory)\r\n setEndOfLifeInput(data[0].computer.endOfLife)\r\n\r\n setThirdSectionData([\r\n data[0].employeeAssignedName,\r\n data[0].computer.location,\r\n data[0].computer.employeeId,\r\n ])\r\n setCommentText(data[0].computer.textField)\r\n setHistoryLogEntries(data[0].computerHistory)\r\n setSelectedEmployee({ name: data[0].employeeAssignedName, id: data[0].computer.employeeId })\r\n })\r\n .catch((err: any) => console.error(err))\r\n }\r\n } else if (match.params.type === 'monitor') {\r\n setFirstSectionHeaders(['Make', 'Model', 'Screen Size (in)', 'Resolution (k)', 'Inputs', 'Serial #'])\r\n setSecondSectionHeaders(['Purchase Date', 'End of Life', 'Renewal Date'])\r\n setThirdSectionHeaders(['Employee Assigned', 'Location'])\r\n if (match.params.id !== 'new') {\r\n axios\r\n .get(`/detail/monitor/${match.params.id}`)\r\n .then((data: any) => {\r\n setFirstSectionData([\r\n data[0].monitor.make,\r\n data[0].monitor.model,\r\n data[0].monitor.screenSize,\r\n data[0].monitor.resolution,\r\n data[0].monitor.inputs,\r\n data[0].monitor.serialNumber,\r\n ])\r\n setSecondSectionData([])\r\n setPurchaseDateInput(data[0].monitor.purchaseDate)\r\n setRenewalDateInput(data[0].monitor.renewalDate)\r\n setEndOfLifeInput(data[0].monitor.endOfLife)\r\n\r\n setThirdSectionData([\r\n data[0].employeeAssignedName,\r\n data[0].monitor.location,\r\n data[0].monitor.employeeId,\r\n ])\r\n setCostSection([\r\n data[0].monitor.flatCost,\r\n data[0].monitor.costPerYear,\r\n data[0].monitor.monthsPerRenewal,\r\n ])\r\n checkCostStates(data[0].monitor.flatCost, data[0].monitor.costPerYear)\r\n setCommentText(data[0].monitor.textField)\r\n setHistoryLogEntries(data[0].monitorHistory)\r\n setSelectedEmployee({ name: data[0].employeeAssignedName, id: data[0].monitor.employeeId })\r\n })\r\n .catch((err: any) => console.error(err))\r\n }\r\n } else if (match.params.type === 'peripheral') {\r\n setFirstSectionHeaders(['Name', 'Type', 'Serial #'])\r\n setSecondSectionHeaders(['Purchase Date', 'End Of Life'])\r\n setThirdSectionHeaders(['Employee Assigned'])\r\n if (match.params.id !== 'new') {\r\n axios\r\n .get(`/detail/peripheral/${match.params.id}`)\r\n .then((data: any) => {\r\n setFirstSectionData([\r\n data[0].peripheral.peripheralName,\r\n data[0].peripheral.peripheralType,\r\n data[0].peripheral.serialNumber,\r\n ])\r\n \r\n setSecondSectionData([])\r\n setPurchaseDateInput(data[0].peripheral.purchaseDate) \r\n setEndOfLifeInput(data[0].peripheral.endOfLife)\r\n\r\n setThirdSectionData([])\r\n setCostSection([\r\n data[0].peripheral.flatCost,\r\n data[0].peripheral.costPerYear,\r\n data[0].peripheral.monthsPerRenewal,\r\n ])\r\n checkCostStates(data[0].peripheral.flatCost, data[0].peripheral.costPerYear)\r\n\r\n setCommentText(data[0].peripheral.textField)\r\n setHistoryLogEntries(data[0].peripheralHistory)\r\n setSelectedEmployee({ name: data[0].employeeAssignedName, id: data[0].peripheral.employeeId })\r\n })\r\n .catch((err: any) => console.error(err))\r\n }\r\n }\r\n // checkCostStates()\r\n }, [])\r\n\r\n function checkCostStates(flatCost: number, recurringCost: number) {\r\n if (flatCost != null && flatCost > 0) {\r\n setHasFlatCost(true)\r\n }\r\n if (recurringCost != null && recurringCost > 0) {\r\n setHasRecurringCost(true)\r\n }\r\n }\r\n\r\n //checks for incorrectly filled out form\r\n //returns true if it is a bad form\r\n //returns false if it passes every check\r\n function badForm() {\r\n let alertMssg = ''\r\n //checks for every form\r\n if (hasRecurringCost) {\r\n if (costSection[1] === 0 || costSection[1] === null || costSection[2] === 0 || costSection[2] === null) {\r\n alertMssg += '\\n Recurring cost and months must have values greater than zero!'\r\n }\r\n }\r\n if (hasFlatCost) {\r\n if (costSection[0] === 0 || costSection[0] === null) {\r\n alertMssg += '\\n Initial cost must have a value greater than zero!'\r\n }\r\n }\r\n //everything must be filled out - sorting doesnt work with null values\r\n //this will only do something when creating a new piece of hardware\r\n if (firstSectionData.length !== firstSectionHeaders.length) {\r\n alertMssg += '\\n All hardware info fields must be filled out!'\r\n }\r\n\r\n //checks for server form\r\n if (match.params.type === 'server') {\r\n if (isNaN(Number(firstSectionData[3]))) {\r\n alertMssg += '\\n RAM must be a number!'\r\n }\r\n if (isNaN(Number(firstSectionData[5]))) {\r\n alertMssg += '\\n # of cores must be a number! '\r\n }\r\n }\r\n\r\n //check for laptop form\r\n if (match.params.type === 'laptop') {\r\n if (isNaN(Number(firstSectionData[3]))) {\r\n alertMssg += '\\n RAM must be a number!'\r\n }\r\n if (isNaN(Number(firstSectionData[4]))) {\r\n alertMssg += '\\n SSD must be a number!'\r\n }\r\n if (isNaN(Number(firstSectionData[5]))) {\r\n alertMssg += '\\n Screen size must be a number! '\r\n }\r\n }\r\n\r\n //check for monitor form\r\n if (match.params.type === 'monitor') {\r\n if (isNaN(Number(firstSectionData[2]))) {\r\n alertMssg += '\\n Screen size must be a number!'\r\n }\r\n if (isNaN(Number(firstSectionData[3]))) {\r\n alertMssg += '\\n Resolution must be a number!'\r\n }\r\n }\r\n\r\n if (alertMssg.length > 0) {\r\n window.alert(alertMssg)\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n async function handleSubmit() {\r\n\r\n var newID = ''\r\n\r\n if (badForm()) {\r\n return\r\n }\r\n\r\n if (match.params.id === 'new') {\r\n if (match.params.type === 'monitor') {\r\n await axios\r\n .post(`add/monitor`, {\r\n Entity: {\r\n Make: firstSectionData[0],\r\n Model: firstSectionData[1],\r\n ScreenSize: firstSectionData[2],\r\n Resolution: firstSectionData[3],\r\n Inputs: firstSectionData[4],\r\n SerialNumber: firstSectionData[5],\r\n\r\n Location: thirdSectionData[1],\r\n EmployeeId: selectedEmployee && selectedEmployee.id !== -1 ? selectedEmployee.id : null,\r\n\r\n RenewalDate: renewalDateInput,\r\n PurchaseDate: purchaseDateInput,\r\n EndOfLife: endOfLifeInput,\r\n\r\n FlatCost: hasFlatCost ? costSection[0] : null,\r\n CostPerYear: hasRecurringCost\r\n ? (parseFloat(costSection[1].toString()) * 12) / parseFloat(costSection[2].toString())\r\n : 0,\r\n MonthsPerRenewal: hasRecurringCost ? costSection[2] : 0,\r\n Mfg: 0,\r\n TextField: commentText,\r\n },\r\n })\r\n .then((response: any) => {\r\n newID = response.data\r\n })\r\n } else if (match.params.type === 'server') {\r\n await axios\r\n .post(`add/server`, {\r\n Entity: {\r\n Make: firstSectionData[0],\r\n Model: firstSectionData[1],\r\n OperatingSystem: firstSectionData[2],\r\n Ram: firstSectionData[3],\r\n LocalHHD: firstSectionData[4],\r\n NumberOfCores: firstSectionData[5],\r\n MFG: firstSectionData[6],\r\n SerialNumber: firstSectionData[7],\r\n IPAddress: firstSectionData[8],\r\n SAN: firstSectionData[9],\r\n Fqdn: firstSectionData[10],\r\n\r\n RenewalDate: renewalDateInput,\r\n PurchaseDate: purchaseDateInput,\r\n EndOfLife: endOfLifeInput,\r\n\r\n Virtualize: isVirtualized,\r\n\r\n Location: thirdSectionData[1],\r\n EmployeeId: selectedEmployee && selectedEmployee.id !== -1 ? selectedEmployee.id : null,\r\n\r\n FlatCost: hasFlatCost ? costSection[0] : 0,\r\n CostPerYear: hasRecurringCost\r\n ? (parseFloat(costSection[1].toString()) * 12) / parseFloat(costSection[2].toString())\r\n : 0,\r\n MonthsPerRenewal: hasRecurringCost ? costSection[2] : 0,\r\n\r\n TextField: commentText,\r\n },\r\n })\r\n .then((response: any) => {\r\n newID = response.data\r\n })\r\n } else if (match.params.type === 'laptop') {\r\n await axios\r\n .post(`add/laptop`, {\r\n Entity: {\r\n Make: firstSectionData[0],\r\n Model: firstSectionData[1],\r\n Cpu: firstSectionData[2],\r\n Ramgb: firstSectionData[3],\r\n Ssdgb: firstSectionData[4],\r\n ScreenSize: firstSectionData[5],\r\n MonitorOutput: firstSectionData[6],\r\n SerialNumber: firstSectionData[7],\r\n MFG: firstSectionData[8],\r\n Fqdn: firstSectionData[9],\r\n\r\n RenewalDate: renewalDateInput,\r\n PurchaseDate: purchaseDateInput,\r\n EndOfLife: endOfLifeInput,\r\n\r\n Location: thirdSectionData[1],\r\n EmployeeId: selectedEmployee && selectedEmployee.id !== -1 ? selectedEmployee.id : null,\r\n\r\n FlatCost: hasFlatCost ? costSection[0] : 0,\r\n CostPerYear: hasRecurringCost\r\n ? (parseFloat(costSection[1].toString()) * 12) / parseFloat(costSection[2].toString())\r\n : 0,\r\n MonthsPerRenewal: hasRecurringCost ? costSection[2] : 0,\r\n\r\n TextField: commentText,\r\n },\r\n })\r\n .then((response: any) => {\r\n newID = response.data\r\n })\r\n } else if (match.params.type === 'peripheral') {\r\n await axios\r\n .post(`add/peripheral`, {\r\n Entity: {\r\n PeripheralName: firstSectionData[0],\r\n PeripheralType: firstSectionData[1],\r\n SerialNumber: firstSectionData[2],\r\n\r\n PurchaseDate: purchaseDateInput,\r\n EndOfLife: endOfLifeInput,\r\n\r\n Location: thirdSectionData[1],\r\n EmployeeId: selectedEmployee && selectedEmployee.id !== -1 ? selectedEmployee.id : null,\r\n\r\n FlatCost: hasFlatCost ? costSection[0] : 0,\r\n CostPerYear: hasRecurringCost\r\n ? (parseFloat(costSection[1].toString()) * 12) / parseFloat(costSection[2].toString())\r\n : 0,\r\n MonthsPerRenewal: hasRecurringCost ? costSection[2] : 0,\r\n\r\n TextField: commentText,\r\n },\r\n })\r\n .then((response: any) => {\r\n newID = response.data\r\n })\r\n }\r\n history.push({ pathname: `/hardware/detail/${match.params.type}/${newID}`, state: { prev: history.location } })\r\n\r\n //update image on entity creation\r\n if (imgInput) {\r\n const imgLocation = `/image/${match.params.type}/${newID}`\r\n putUploadImage(imgInput, imgLocation, axios)\r\n }\r\n } else {\r\n //not new --> editing existing page\r\n if (match.params.type === 'monitor') {\r\n await axios.put(`update/monitor`, {\r\n Entity: {\r\n MonitorId: match.params.id,\r\n\r\n Make: firstSectionData[0],\r\n Model: firstSectionData[1],\r\n ScreenSize: firstSectionData[2],\r\n Resolution: firstSectionData[3],\r\n Inputs: firstSectionData[4],\r\n SerialNumber: firstSectionData[5],\r\n\r\n Location: thirdSectionData[1],\r\n EmployeeId: selectedEmployee && selectedEmployee.id !== -1 ? selectedEmployee.id : null,\r\n\r\n RenewalDate: renewalDateInput,\r\n PurchaseDate: purchaseDateInput,\r\n EndOfLife: endOfLifeInput,\r\n\r\n FlatCost: hasFlatCost ? costSection[0] : 0,\r\n CostPerYear: hasRecurringCost\r\n ? (parseFloat(costSection[1].toString()) * 12) / parseFloat(costSection[2].toString())\r\n : 0,\r\n MonthsPerRenewal: hasRecurringCost ? costSection[2] : 0,\r\n Mfg: null,\r\n TextField: commentText,\r\n },\r\n AddHistory: addHistoryLog,\r\n DeleteHistory: removeHistoryLog,\r\n })\r\n } else if (match.params.type === 'server') {\r\n await axios.put(`update/server`, {\r\n Entity: {\r\n ServerId: match.params.id,\r\n\r\n Make: firstSectionData[0],\r\n Model: firstSectionData[1],\r\n OperatingSystem: firstSectionData[2],\r\n Ram: firstSectionData[3],\r\n LocalHHD: firstSectionData[4],\r\n NumberOfCores: firstSectionData[5],\r\n MFG: firstSectionData[6],\r\n SerialNumber: firstSectionData[7],\r\n IPAddress: firstSectionData[8],\r\n SAN: firstSectionData[9],\r\n Fqdn: firstSectionData[10],\r\n\r\n Virtualize: isVirtualized,\r\n\r\n RenewalDate: renewalDateInput,\r\n PurchaseDate: purchaseDateInput,\r\n EndOfLife: endOfLifeInput,\r\n\r\n Location: thirdSectionData[1],\r\n EmployeeId: selectedEmployee && selectedEmployee.id !== -1 ? selectedEmployee.id : null,\r\n\r\n FlatCost: hasFlatCost ? costSection[0] : 0,\r\n CostPerYear: hasRecurringCost\r\n ? (parseFloat(costSection[1].toString()) * 12) / parseFloat(costSection[2].toString())\r\n : 0,\r\n MonthsPerRenewal: hasRecurringCost ? costSection[2] : 0,\r\n\r\n TextField: commentText,\r\n },\r\n AddHistory: addHistoryLog,\r\n DeleteHistory: removeHistoryLog,\r\n })\r\n } else if (match.params.type === 'laptop') {\r\n await axios.put(`update/computer`, {\r\n Entity: {\r\n ComputerId: match.params.id,\r\n\r\n Make: firstSectionData[0],\r\n Model: firstSectionData[1],\r\n Cpu: firstSectionData[2],\r\n Ramgb: firstSectionData[3],\r\n Ssdgb: firstSectionData[4],\r\n ScreenSize: firstSectionData[5],\r\n MonitorOutput: firstSectionData[6],\r\n SerialNumber: firstSectionData[7],\r\n MFG: firstSectionData[8],\r\n Fqdn: firstSectionData[9],\r\n\r\n RenewalDate: renewalDateInput,\r\n PurchaseDate: purchaseDateInput,\r\n EndOfLife: endOfLifeInput,\r\n\r\n Location: thirdSectionData[1],\r\n EmployeeId: selectedEmployee && selectedEmployee.id !== -1 ? selectedEmployee.id : null,\r\n\r\n FlatCost: hasFlatCost ? costSection[0] : 0,\r\n CostPerYear: hasRecurringCost\r\n ? (parseFloat(costSection[1].toString()) * 12) / parseFloat(costSection[2].toString())\r\n : 0,\r\n MonthsPerRenewal: hasRecurringCost ? costSection[2] : 0,\r\n\r\n TextField: commentText,\r\n },\r\n AddHistory: addHistoryLog,\r\n DeleteHistory: removeHistoryLog,\r\n })\r\n } else if (match.params.type === 'peripheral') {\r\n await axios.put(`update/peripheral`, {\r\n Entity: {\r\n PeripheralId: match.params.id,\r\n\r\n PeripheralName: firstSectionData[0],\r\n PeripheralType: firstSectionData[1],\r\n SerialNumber: firstSectionData[2],\r\n\r\n PurchaseDate: purchaseDateInput,\r\n EndOfLife: endOfLifeInput,\r\n\r\n Location: thirdSectionData[1],\r\n EmployeeId: selectedEmployee && selectedEmployee.id !== -1 ? selectedEmployee.id : null,\r\n\r\n FlatCost: hasFlatCost ? costSection[0] : 0,\r\n CostPerYear: hasRecurringCost\r\n ? (parseFloat(costSection[1].toString()) * 12) / parseFloat(costSection[2].toString())\r\n : 0,\r\n MonthsPerRenewal: hasRecurringCost ? costSection[2] : 0,\r\n\r\n TextField: commentText,\r\n },\r\n AddHistory: addHistoryLog,\r\n DeleteHistory: removeHistoryLog,\r\n })\r\n }\r\n history.push({\r\n pathname: `/hardware/detail/${match.params.type}/${match.params.id}`,\r\n state: { prev: history.location },\r\n })\r\n // update image\r\n if (imgInput) {\r\n const imgLocation = `/image/${match.params.type}/${match.params.id}`\r\n putUploadImage(imgInput, imgLocation, axios)\r\n }\r\n }\r\n }\r\n\r\n function handleInputChange(index: number, sectionData: any[], value: string | number) {\r\n let tempData = cloneDeep(sectionData)\r\n tempData[index] = value\r\n if (sectionData === firstSectionData) {\r\n setFirstSectionData(tempData)\r\n } else if (sectionData === secondSectionData) {\r\n setSecondSectionData(tempData)\r\n } else if (sectionData === thirdSectionData) {\r\n setThirdSectionData(tempData)\r\n }\r\n }\r\n\r\n // make first section\r\n function renderSection(sectionHeaders: string[], sectionData: any[]) {\r\n var rows = []\r\n if (sectionData === secondSectionData) {\r\n for (let i = 0; i < sectionHeaders.length; i += 3) {\r\n rows.push(\r\n <div className={styles.row}>\r\n {sectionHeaders[i] && (\r\n <div className={styles.inputContainer}>\r\n <div className={styles.inputHeader}>{sectionHeaders[i]}</div>\r\n <DatePicker\r\n dateFormat='MM/dd/yyyy'\r\n selected={new Date(purchaseDateInput)}\r\n onChange={e => e && setPurchaseDateInput(e)}\r\n className={styles.input}\r\n popperClassName={styles.rdp}\r\n />\r\n </div>\r\n )}\r\n {sectionHeaders[i + 1] && (\r\n <div className={styles.inputContainer}>\r\n <div className={styles.inputHeader}>{sectionHeaders[i + 1]}</div>\r\n <DatePicker\r\n dateFormat='MM/dd/yyyy'\r\n selected={new Date(endOfLifeInput)}\r\n onChange={e => e && setEndOfLifeInput(e)}\r\n className={styles.input}\r\n />\r\n </div>\r\n )}\r\n {sectionHeaders[i + 2] && (\r\n <div className={styles.inputContainer}>\r\n <div className={styles.inputHeader}>{sectionHeaders[i + 2]}</div>\r\n <DatePicker\r\n dateFormat='MM/dd/yyyy'\r\n selected={new Date(renewalDateInput)}\r\n onChange={e => e && setRenewalDateInput(e)}\r\n className={styles.input}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n )\r\n }\r\n //employee assigned\r\n } else if (sectionData === thirdSectionData) {\r\n for (let i = 0; i < sectionHeaders.length; i += 3) {\r\n rows.push(\r\n <div className={styles.row}>\r\n {sectionHeaders[i] && (\r\n <Group>\r\n <div className={styles.inputContainer}>\r\n <div className={styles.inputHeader}>{sectionHeaders[i]}</div>\r\n <Button className={s(styles.input, styles.employeeDropdownButton)}>\r\n <div\r\n className={s(\r\n dropdownStyles.dropdownContainer,\r\n styles.employeeDropdownContainer\r\n )}\r\n >\r\n {employeeDropdown && (\r\n <DropdownList\r\n triggerElement={({ isOpen, toggle }) => (\r\n <button onClick={toggle} className={dropdownStyles.dropdownButton}>\r\n <div\r\n className={s(\r\n dropdownStyles.dropdownTitle,\r\n styles.employeeDropdownTitle\r\n )}\r\n >\r\n <div>\r\n {selectedEmployee\r\n ? selectedEmployee.name\r\n : 'Select An Employee'}\r\n </div>\r\n <div\r\n className={s(\r\n dropdownStyles.dropdownArrow,\r\n styles.employeeDropdownArrow\r\n )}\r\n />\r\n </div>\r\n </button>\r\n )}\r\n choicesList={() => (\r\n <ul className={s(dropdownStyles.dropdownList, styles.dropdownList)}>\r\n {employeeDropdown.map(item => (\r\n <li\r\n className={dropdownStyles.dropdownListItem}\r\n key={item.name}\r\n onClick={() => {\r\n setSelectedEmployee(item)\r\n }}\r\n >\r\n <button\r\n className={dropdownStyles.dropdownListItemButton}\r\n >\r\n <div className={dropdownStyles.dropdownItemLabel}>\r\n {item.name}\r\n </div>\r\n </button>\r\n </li>\r\n ))}\r\n </ul>\r\n )}\r\n listWidthClass={styles.dropdownContent}\r\n />\r\n )}\r\n <div />\r\n </div>\r\n </Button>\r\n </div>\r\n {selectedEmployee && selectedEmployee.id > 0 && <Button text='Unassign' onClick={() => setSelectedEmployee({ id: -1, name: ' ' })} className={styles.unassign} />}\r\n </Group>\r\n )}\r\n {sectionHeaders[i + 1] && (\r\n <div className={styles.inputContainer}>\r\n <div className={styles.inputHeader}>{sectionHeaders[i + 1]}</div>\r\n <input\r\n type='text'\r\n className={styles.input}\r\n placeholder={sectionData[i + 1]}\r\n onChange={e => e && handleInputChange(i + 1, sectionData, e.target.value)}\r\n ></input>\r\n </div>\r\n )}\r\n {match.params.type === 'server' && (\r\n <div className={styles.inputContainer}>\r\n <div className={styles.inputHeader}>Virtualize</div>\r\n <Checkbox\r\n className={styles.checkBoxContainer}\r\n checked={isVirtualized}\r\n onClick={() => setIsVirtualized(!isVirtualized)}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n )\r\n }\r\n } else {\r\n for (let i = 0; i < sectionHeaders.length; i += 3) {\r\n rows.push(\r\n <div className={styles.row}>\r\n {sectionHeaders[i] && (\r\n <div className={styles.inputContainer}>\r\n <div className={styles.inputHeader}>{sectionHeaders[i]}</div>\r\n <input\r\n type='text'\r\n className={styles.input}\r\n value={sectionData[i]}\r\n onChange={e => e && handleInputChange(i, sectionData, e.target.value)}\r\n ></input>\r\n </div>\r\n )}\r\n {sectionHeaders[i + 1] && (\r\n <div className={styles.inputContainer}>\r\n <div className={styles.inputHeader}>{sectionHeaders[i + 1]}</div>\r\n <input\r\n type='text'\r\n className={styles.input}\r\n value={sectionData[i + 1]}\r\n onChange={e => e && handleInputChange(i + 1, sectionData, e.target.value)}\r\n ></input>\r\n </div>\r\n )}\r\n {sectionHeaders[i + 2] && (\r\n <div className={styles.inputContainer}>\r\n <div className={styles.inputHeader}>{sectionHeaders[i + 2]}</div>\r\n <input\r\n type='text'\r\n className={styles.input}\r\n value={sectionData[i + 2]}\r\n onChange={e => e && handleInputChange(i + 2, sectionData, e.target.value)}\r\n ></input>\r\n </div>\r\n )}\r\n </div>\r\n )\r\n }\r\n }\r\n\r\n return <div className={styles.section}>{rows}</div>\r\n }\r\n\r\n const handleSubmitHistoryLog = () => {\r\n if (eventInput === 'Broken' || eventInput === 'Repaired') {\r\n setHistoryLogBool(!historyLogBool)\r\n let tempHistoryLog = new Array()\r\n if (historyLogEntries !== undefined) {\r\n tempHistoryLog = cloneDeep(historyLogEntries)\r\n }\r\n tempHistoryLog.push({\r\n employeeName: thirdSectionData[0],\r\n eventType: eventInput,\r\n eventDate: dateInput.toISOString(),\r\n key: key,\r\n })\r\n setHistoryLogEntries(tempHistoryLog)\r\n\r\n //adding to add history log to send to backend\r\n tempHistoryLog = cloneDeep(addHistoryLog)\r\n tempHistoryLog.push({\r\n EventType: eventInput,\r\n EventDate: dateInput.toISOString(),\r\n key: key,\r\n })\r\n key = key + 1\r\n setAddHistoryLog(tempHistoryLog)\r\n } else {\r\n window.alert('History log must have an event!')\r\n }\r\n }\r\n\r\n function removeLog(index: number) {\r\n //the backend adds the id to the hardware history logs\r\n //so if there is an id then remove that log and add id to removeHistoryLog array\r\n //if not, then it was added but removed before submitted and saved in database\r\n if (historyLogEntries[index].hasOwnProperty('historyId')) {\r\n //add to removeHistoryLog\r\n let tempRemoveId = cloneDeep(removeHistoryLog)\r\n tempRemoveId.push(historyLogEntries[index].historyId)\r\n setRemoveHistoryLog(tempRemoveId)\r\n } else {\r\n //remove from addHistoryLog\r\n let tempAddHistoryLog = cloneDeep(addHistoryLog)\r\n tempAddHistoryLog = tempAddHistoryLog.filter(log => log.key !== historyLogEntries[index].key)\r\n\r\n setAddHistoryLog(tempAddHistoryLog)\r\n }\r\n\r\n let tempHistoryLog = cloneDeep(historyLogEntries)\r\n tempHistoryLog = tempHistoryLog.slice(0, index).concat(tempHistoryLog.slice(index + 1, tempHistoryLog.length))\r\n setHistoryLogEntries(tempHistoryLog)\r\n }\r\n\r\n const changeCost = (cost: string, index: number) => {\r\n let tempArray = cloneDeep(costSection)\r\n tempArray[index] = cost\r\n setCostSection(tempArray)\r\n }\r\n\r\n return (\r\n <div className={s(styles.columns, isDarkMode ? styles.backgroundDark : {})}>\r\n {/* column 1 */}\r\n <div className={styles.firstColumn}>\r\n <BackButton history={history} className={styles.backButton} />\r\n <div className={styles.imgContainer}>\r\n <PictureInput setImage={setImgInput} image={imgInput} />\r\n </div>\r\n </div>\r\n\r\n {/* column 2 */}\r\n <div className={styles.secondColumn}>\r\n <div className={s(styles.hardwareHeader, isDarkMode ? styles.headerDark : {})}>\r\n {match.params.type} Information\r\n </div>\r\n {/* first section */}\r\n {firstSectionHeaders.length > 0 && renderSection(firstSectionHeaders, firstSectionData)}\r\n {firstSectionHeaders.length > 0 && <div className={styles.line} />}\r\n {/* second section */}\r\n {secondSectionHeaders.length > 0 && renderSection(secondSectionHeaders, secondSectionData)}\r\n {secondSectionHeaders.length > 0 && <div className={styles.line} />}\r\n {/* third section */}\r\n {thirdSectionHeaders.length > 0 && renderSection(thirdSectionHeaders, thirdSectionData)}\r\n {thirdSectionHeaders.length > 0 && <div className={styles.line} />}\r\n {/* cost section */}\r\n <div className={styles.radioSection}>\r\n <div className={styles.radioContainer}>\r\n <div className={s(styles.radio, styles.marginTop)}>\r\n <Checkbox\r\n className={styles.checkBoxContainerOne}\r\n checked={hasFlatCost}\r\n onClick={() => setHasFlatCost(!hasFlatCost)}\r\n />\r\n </div>\r\n <div>\r\n <div className={styles.inputHeader}>Initial Cost</div>\r\n <input\r\n className={styles.radioInput}\r\n type='number'\r\n step='0.01'\r\n value={costSection[0]}\r\n onChange={e => {\r\n if (hasFlatCost) {\r\n changeCost(e.target.value, 0)\r\n }\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <div className={styles.radioContainer}>\r\n <Checkbox\r\n className={styles.checkBoxContainerTwo}\r\n checked={hasRecurringCost}\r\n onClick={() => setHasRecurringCost(!hasRecurringCost)}\r\n />\r\n <div>\r\n <div className={styles.inputHeader}>Recurring Cost</div>\r\n <input\r\n className={styles.radioInput}\r\n type='number'\r\n step='0.01'\r\n value={costSection[1]}\r\n onChange={e => {\r\n if (hasRecurringCost) {\r\n changeCost(e.target.value, 1)\r\n }\r\n }}\r\n />\r\n </div>\r\n {hasRecurringCost && (\r\n <div className={styles.marginLeft}>\r\n <div className={styles.inputHeader}>Months per Renewal</div>\r\n <input\r\n className={styles.monthsInput}\r\n type='number'\r\n step='1'\r\n value={costSection[2]}\r\n onChange={e => changeCost(e.target.value, 2)}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <div className={styles.historyLogContainer}>\r\n <HistoryLog historyLog={sortByDate(historyLogEntries)} remove={removeLog} canEdit={true} />\r\n {historyLogBool && (\r\n <div className={styles.row}>\r\n <div className={styles.inputContainer}>\r\n <div className={styles.inputHeader}>Date</div>\r\n <DatePicker\r\n dateFormat='MM/dd/yyyy'\r\n selected={dateInput}\r\n onChange={e => e && setDateInput(e)}\r\n className={styles.input}\r\n />\r\n </div>\r\n {/* TODO: make this a component. */}\r\n <div className={styles.inputContainer}>\r\n <div className={styles.inputHeader}>Event Type</div>\r\n <div className={styles.radioContainer}>\r\n <div className={styles.radio}>\r\n <input\r\n type='radio'\r\n name='event'\r\n className={styles.checkmark}\r\n checked={eventInput === 'Broken'}\r\n onChange={() => setEventInput('Broken')}\r\n />\r\n <div className={s(styles.checkmark, isDarkMode ? styles.checkmarkDark : {})} />\r\n <div\r\n className={s(\r\n styles.insideCheckmark,\r\n isDarkMode ? styles.insideCheckmarkDark : {}\r\n )}\r\n />\r\n </div>\r\n <div className={styles.inputHeader}>Broken</div>\r\n </div>\r\n <div className={styles.radioContainer}>\r\n <div className={styles.radio}>\r\n <input\r\n type='radio'\r\n name='event'\r\n className={styles.checkmark}\r\n checked={eventInput === 'Repaired'}\r\n onChange={() => setEventInput('Repaired')}\r\n />\r\n <div className={s(styles.checkmark, isDarkMode ? styles.checkmarkDark : {})} />\r\n <div\r\n className={s(\r\n styles.insideCheckmark,\r\n isDarkMode ? styles.insideCheckmarkDark : {}\r\n )}\r\n />\r\n <div className={styles.inputHeader}>Repaired</div>\r\n </div>\r\n </div>\r\n {/* the rest of the logs are done on the backend */}\r\n </div>\r\n {/* should send back the employee of this page */}\r\n <div className={s(styles.historyLogSubmit, isDarkMode ? styles.textDark : {})}>\r\n <Button\r\n icon='add'\r\n onClick={handleSubmitHistoryLog}\r\n className={styles.historyLogButton}\r\n />\r\n Submit Log\r\n </div>\r\n </div>\r\n )}\r\n {!historyLogBool && (\r\n <div className={s(styles.historyLogAdd, isDarkMode ? styles.textDark : {})}>\r\n <Button\r\n icon='add'\r\n onClick={() => setHistoryLogBool(!historyLogBool)}\r\n className={styles.historyLogButton}\r\n />\r\n add log\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* comment section */}\r\n <div>\r\n <div className={styles.header}>Text Field</div>\r\n\r\n <textarea\r\n className={styles.description}\r\n value={commentText}\r\n onChange={e => setCommentText(e.target.value)}\r\n ></textarea>\r\n </div>\r\n <div className={styles.submitContainer}>\r\n <Button text='Submit' onClick={handleSubmit} className={styles.submitbutton} />\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import React, { useState } from 'react'\r\nimport { Route, NavLink, BrowserRouter as Router, Switch, Redirect } from 'react-router-dom'\r\n\r\n// Components\r\nimport { DashboardPage } from '../pages/DashboardPage/DashboardPage'\r\nimport { DepartmentsListPage } from '../pages/DepartmentsListPage/DepartmentsListPage'\r\nimport { DepartmentDetailPage } from '../pages/DepartmentDetailPage/DepartmentDetailPage'\r\nimport { EmployeesListPage } from '../pages/EmployeesListPage/EmployeesListPage'\r\nimport { EmployeeDetailPage } from '../pages/EmployeeDetailPage/EmployeeDetailPage'\r\nimport { HardwareListPage } from '../pages/HardwareListPage/HardwareListPage'\r\nimport { HardwareDetailPage } from '../pages/HardwareDetailPage/HardwareDetailPage'\r\nimport { ProgramsListPage } from '../pages/ProgramsListPage/ProgramsListPage'\r\nimport { ProgramOverviewPage } from '../pages/ProgramOverviewPage/ProgramOverviewPage'\r\nimport { ProgramOverviewEditPage } from '../pages/ProgramOverviewPage/ProgramOverviewEditPage'\r\nimport { ProgramDetailPage } from '../pages/ProgramDetailPage/ProgramDetailPage'\r\nimport { ProgramDetailEditPage } from '../pages/ProgramDetailPage/ProgramDetailEditPage'\r\nimport { Login } from '../reusables/Login/Login'\r\nimport { HelloUser } from '../HelloUser/HelloUser'\r\nimport logo from '../../content/Images/CQL-Logo-Color.png'\r\nimport { EmployeeDetailEditPage } from '../pages/EmployeeDetailPage/EmployeeDetailEditPage'\r\nimport { DepartmentDetailEditPage } from '../pages/DepartmentDetailPage/DepartmentDetailEditPage'\r\nimport { HardwareDetailEditPage } from '../pages/HardwareDetailPage/HardwareDetailEditPage'\r\n\r\n// Styles\r\nimport styles from './App.module.css'\r\n\r\n// Utils\r\nimport { concatStyles as s } from '../../utilities/mikesConcat'\r\n\r\n//types\r\nexport interface ILoginContext {\r\n refreshToken: string\r\n accessToken: string\r\n validTo: string\r\n givenName: string\r\n isAdmin: boolean\r\n}\r\n\r\n//Login Context\r\nexport const initialValues: {\r\n loginContextVariables: ILoginContext\r\n setLoginContextVariables: any\r\n} = {\r\n loginContextVariables: {\r\n refreshToken: '',\r\n accessToken: '',\r\n validTo: '',\r\n givenName: '',\r\n isAdmin: false,\r\n },\r\n setLoginContextVariables: () => { },\r\n}\r\nexport const LoginContext = React.createContext(initialValues)\r\n\r\nconst themeDefault: {\r\n isDarkMode: boolean,\r\n setIsDarkMode: any\r\n} = {\r\n isDarkMode: false,\r\n setIsDarkMode: () => { },\r\n}\r\nexport const ThemeContext = React.createContext(themeDefault);\r\n\r\n\r\n// Primary Component\r\nexport const App: React.FC = () => {\r\n const user = localStorage.getItem('user')\r\n const [loginContextVariables, setLoginContextVariables] = useState(\r\n user\r\n ? JSON.parse(user)\r\n : {\r\n refreshToken: '',\r\n accessToken: '',\r\n validTo: '',\r\n givenName: '',\r\n isAdmin: false,\r\n }\r\n )\r\n\r\n const dark = localStorage.getItem('darkMode')\r\n const [isDarkMode, setIsDarkMode] = useState(dark ? JSON.parse(dark) : false);\r\n\r\n var contextValue = {\r\n loginContextVariables: loginContextVariables,\r\n setLoginContextVariables: setLoginContextVariables,\r\n }\r\n\r\n var ThemeContextValue = {\r\n isDarkMode: isDarkMode,\r\n setIsDarkMode: setIsDarkMode,\r\n }\r\n return (\r\n <LoginContext.Provider value={contextValue}>\r\n <ThemeContext.Provider value={ThemeContextValue}>\r\n <div className={s(styles.app, isDarkMode ? styles.dark : {})}>\r\n {/*header*/}\r\n\r\n <Router>\r\n {loginContextVariables.givenName === '' && <Redirect to='/login' />}\r\n {loginContextVariables.givenName !== '' && (\r\n <div className={s(styles.navContainer, isDarkMode ? styles.dark : {})}>\r\n <HelloUser name={loginContextVariables.givenName} className={styles.helloMesssage} />\r\n <nav className={s(styles.navBar, isDarkMode ? styles.navDark : {})}>\r\n <NavLink className={styles.logoContainer} to='/dashboard'>\r\n\r\n {isDarkMode\r\n ? <img className={styles.navBarLogo} src={require('../../content/Images/CQL-Logo-White.png')} alt={'CQL'} />\r\n :\r\n <img\r\n className={styles.navBarLogo}\r\n src={logo}\r\n alt={'CQL'}\r\n // onClick={() => <Redirect to='/dashboard' />}\r\n />\r\n }\r\n </NavLink>\r\n <div className={s(styles.navEllipse, isDarkMode ? styles.ellipseDark : {})} />\r\n <div className={s(styles.navRectangle, isDarkMode ? styles.navDark : {})} />\r\n\r\n <div className={styles.linkContainer}>\r\n <NavLink\r\n className={s(styles.navTab, isDarkMode ? styles.navTabDark : {})}\r\n activeClassName={styles.active}\r\n to='/departments'\r\n >\r\n <div className={s(styles.navTabRectangle, isDarkMode ? styles.navTabDark : {})} />\r\n <label>Departments</label>\r\n </NavLink>\r\n\r\n <NavLink className={s(styles.navTab, isDarkMode ? styles.navTabDark : {})} activeClassName={styles.active} to='/hardware'>\r\n <div className={s(styles.navTabRectangle, isDarkMode ? styles.navTabDark : {})} />\r\n <label>Hardware</label>\r\n </NavLink>\r\n\r\n <NavLink className={s(styles.navTab, isDarkMode ? styles.navTabDark : {})} activeClassName={styles.active} to='/programs'>\r\n <div className={s(styles.navTabRectangle, isDarkMode ? styles.navTabDark : {})} />\r\n <label>Programs</label>\r\n </NavLink>\r\n\r\n <NavLink className={s(styles.navTab, isDarkMode ? styles.navTabDark : {})} activeClassName={styles.active} to='/employees'>\r\n <div className={s(styles.navTabRectangle, isDarkMode ? styles.navTabDark : {})} />\r\n <label>Employees</label>\r\n </NavLink>\r\n\r\n <NavLink className={s(styles.navTab, isDarkMode ? styles.navTabDark : {})} activeClassName={styles.active} to='/dashboard'>\r\n <div className={s(styles.navTabRectangle, isDarkMode ? styles.navTabDark : {})} />\r\n <label>Dashboard</label>\r\n </NavLink>\r\n </div>\r\n </nav>\r\n </div>\r\n )}\r\n <Switch>\r\n {/* <Route />'s go here */}\r\n <Route path='/dashboard' component={DashboardPage} />\r\n <Route exact path='/employees' component={EmployeesListPage} />\r\n <Route exact path='/programs' component={ProgramsListPage} />\r\n <Route exact path='/hardware' component={HardwareListPage} />\r\n\r\n <Route exact path='/departments' component={DepartmentsListPage} />\r\n <Route exact path='/login' component={Login} />\r\n <Route exact path='/' component={Login} />\r\n\r\n <Route path={'/departments/detail/:id'} render={props => <DepartmentDetailPage {...props} />} />\r\n <Route path={'/employees/detail/:id'} render={props => <EmployeeDetailPage {...props} />} />\r\n <Route\r\n path={'/hardware/detail/:type/:id'}\r\n render={props => <HardwareDetailPage {...props} />}\r\n />\r\n <Route\r\n path={'/programs/overview/:id/:archived'}\r\n render={props => <ProgramOverviewPage {...props} />}\r\n />\r\n <Route path={'/programs/detail/:id'} render={props => <ProgramDetailPage {...props} />} />\r\n\r\n {loginContextVariables.isAdmin && (\r\n <Route exact path={'/employees/edit/:id'} component={EmployeeDetailEditPage} />\r\n )}\r\n\r\n {loginContextVariables.isAdmin && (\r\n <Route\r\n exact\r\n path={'/departments/edit/:id'}\r\n render={props => <DepartmentDetailEditPage {...props} />}\r\n />\r\n )}\r\n\r\n {loginContextVariables.isAdmin && (\r\n <Route\r\n exact\r\n path={'/hardware/edit/:type/:id'}\r\n render={props => <HardwareDetailEditPage {...props} />}\r\n />\r\n )}\r\n\r\n {loginContextVariables.isAdmin && (\r\n <Route path={'/programs/edit/detail/:id'} component={ProgramDetailEditPage} />\r\n )}\r\n\r\n {loginContextVariables.isAdmin && (\r\n <Route path={'/programs/edit/overview/:id/:archived'} component={ProgramOverviewEditPage} />\r\n )}\r\n </Switch>\r\n </Router>\r\n </div>\r\n </ThemeContext.Provider>\r\n </LoginContext.Provider>\r\n )\r\n}\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\ntype Config = {\r\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\r\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\r\n};\r\n\r\nexport function register(config?: Config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(\r\n (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\r\n window.location.href\r\n );\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl: string, config?: Config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import React from 'react'\r\nimport ReactDOM from 'react-dom'\r\nimport './index.css'\r\n\r\nimport {App} from './components/App'\r\n\r\nimport * as serviceWorker from './serviceWorker'\r\n\r\nReactDOM.render(<App />, document.getElementById('root'))\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister()\r\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"table\":\"DashboardTable_table__2zPY4\",\"name\":\"DashboardTable_name__3d3he\",\"numberOf\":\"DashboardTable_numberOf__2E6Vr\",\"cost\":\"DashboardTable_cost__2h509\",\"tr\":\"DashboardTable_tr__1Fsey\",\"dark\":\"DashboardTable_dark__2L9f-\",\"trDark\":\"DashboardTable_trDark__iBbbF\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"columns\":\"ProgramDetailEditPage_columns__2Zjps\",\"firstColumn\":\"ProgramDetailEditPage_firstColumn__ijP-c\",\"secondColumn\":\"ProgramDetailEditPage_secondColumn__Fs0jD\",\"backButton\":\"ProgramDetailEditPage_backButton__3qT0x\",\"imgContainer\":\"ProgramDetailEditPage_imgContainer__3FX6a\",\"title\":\"ProgramDetailEditPage_title__2CBtO\",\"formContainer\":\"ProgramDetailEditPage_formContainer__acd0J\",\"submitContainer\":\"ProgramDetailEditPage_submitContainer__3ay3t\",\"input\":\"ProgramDetailEditPage_input__3k7HB\",\"text\":\"ProgramDetailEditPage_text__MTquA\",\"dark\":\"ProgramDetailEditPage_dark__-QX39\",\"backgroundDark\":\"ProgramDetailEditPage_backgroundDark__3ESGZ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"line\":\"HardwareDetailEditPage_line__2DNGP\",\"backButton\":\"HardwareDetailEditPage_backButton__yzbPi\",\"columns\":\"HardwareDetailEditPage_columns__2yR9X\",\"firstColumn\":\"HardwareDetailEditPage_firstColumn__2LgFU\",\"secondColumn\":\"HardwareDetailEditPage_secondColumn__1Dy-f\",\"imgContainer\":\"HardwareDetailEditPage_imgContainer__1BiJy\",\"imgPadding\":\"HardwareDetailEditPage_imgPadding__E_iYD\",\"img\":\"HardwareDetailEditPage_img__QzXMU\",\"costText\":\"HardwareDetailEditPage_costText__1T0zu\",\"titleText\":\"HardwareDetailEditPage_titleText__38mrw\",\"hardwareHeader\":\"HardwareDetailEditPage_hardwareHeader__vAh3w\",\"hardwareText\":\"HardwareDetailEditPage_hardwareText__2Scpi\",\"section\":\"HardwareDetailEditPage_section__2Z4xi\",\"row\":\"HardwareDetailEditPage_row__1ACYY\",\"inputContainer\":\"HardwareDetailEditPage_inputContainer__1p2tB\",\"inputHeader\":\"HardwareDetailEditPage_inputHeader__1ZTU6\",\"input\":\"HardwareDetailEditPage_input__1W4Cw\",\"employeeDropdownButton\":\"HardwareDetailEditPage_employeeDropdownButton__ln3-Z\",\"employeeDropdownTitle\":\"HardwareDetailEditPage_employeeDropdownTitle__w-Erc\",\"employeeDropdownArrow\":\"HardwareDetailEditPage_employeeDropdownArrow__2B13H\",\"rdp\":\"HardwareDetailEditPage_rdp__yd3hR\",\"dropdownList\":\"HardwareDetailEditPage_dropdownList__2sFi4\",\"dropdownContent\":\"HardwareDetailEditPage_dropdownContent__3OOlK\",\"empText\":\"HardwareDetailEditPage_empText__7ZLW7\",\"unassign\":\"HardwareDetailEditPage_unassign__jAoc3\",\"checkBoxContainer\":\"HardwareDetailEditPage_checkBoxContainer__2iY6G\",\"checkBoxContainerOne\":\"HardwareDetailEditPage_checkBoxContainerOne__3perH\",\"checkBoxContainerTwo\":\"HardwareDetailEditPage_checkBoxContainerTwo__1hoTh\",\"radioSection\":\"HardwareDetailEditPage_radioSection__VXF2C\",\"radioContainer\":\"HardwareDetailEditPage_radioContainer__1y6lE\",\"radio\":\"HardwareDetailEditPage_radio__d3A_o\",\"marginTop\":\"HardwareDetailEditPage_marginTop__2azju\",\"radioInput\":\"HardwareDetailEditPage_radioInput__dKL_v\",\"monthsInput\":\"HardwareDetailEditPage_monthsInput__2bosR\",\"marginLeft\":\"HardwareDetailEditPage_marginLeft__1LESc\",\"checkmark\":\"HardwareDetailEditPage_checkmark__GfMTZ\",\"insideCheckmark\":\"HardwareDetailEditPage_insideCheckmark__3oqiN\",\"insideCheckmarkAdmin\":\"HardwareDetailEditPage_insideCheckmarkAdmin__3jOk4\",\"historyLogContainer\":\"HardwareDetailEditPage_historyLogContainer__2NRw5\",\"historyLogAdd\":\"HardwareDetailEditPage_historyLogAdd__UsRzC\",\"historyLogButton\":\"HardwareDetailEditPage_historyLogButton__ZhRNl\",\"historyLogSubmit\":\"HardwareDetailEditPage_historyLogSubmit__1HCME\",\"commentContainer\":\"HardwareDetailEditPage_commentContainer__1bYOo\",\"header\":\"HardwareDetailEditPage_header__1TJQ7\",\"text\":\"HardwareDetailEditPage_text__1Bek0\",\"description\":\"HardwareDetailEditPage_description__3lRTb\",\"submitContainer\":\"HardwareDetailEditPage_submitContainer__2S1FO\",\"submitButton\":\"HardwareDetailEditPage_submitButton__2x63R\",\"submitText\":\"HardwareDetailEditPage_submitText__MrgY9\",\"headerDark\":\"HardwareDetailEditPage_headerDark__1qTCj\",\"textDark\":\"HardwareDetailEditPage_textDark__2gONP\",\"checkmarkDark\":\"HardwareDetailEditPage_checkmarkDark__18Xcv\",\"insideCheckmarkDark\":\"HardwareDetailEditPage_insideCheckmarkDark__rPzAG\",\"insideCheckmarkAdminDark\":\"HardwareDetailEditPage_insideCheckmarkAdminDark__3DOXs\",\"backgroundDark\":\"HardwareDetailEditPage_backgroundDark__3vq1s\"};","module.exports = __webpack_public_path__ + \"static/media/department-placeholder.d3755f96.png\";","module.exports = __webpack_public_path__ + \"static/media/program-placeholder.10792a2c.png\";","// extracted by mini-css-extract-plugin\nmodule.exports = {\"searchContainer\":\"FilteredSearch_searchContainer__p6wjE\",\"searchBar\":\"FilteredSearch_searchBar__2aIhj\",\"searchIconContainer\":\"FilteredSearch_searchIconContainer__2LnoV\",\"searchIconButton\":\"FilteredSearch_searchIconButton__2Ei_9\",\"searchIcon\":\"FilteredSearch_searchIcon__2uxEp\",\"filterBy\":\"FilteredSearch_filterBy__inM5Q\",\"searchFilter\":\"FilteredSearch_searchFilter__1JU13\",\"dropdownIndicator\":\"FilteredSearch_dropdownIndicator__q6KrP\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"checkboxContainer\":\"Checkbox_checkboxContainer__2Lzer\",\"checkboxTitle\":\"Checkbox_checkboxTitle__10CWO\",\"check\":\"Checkbox_check__1_BMa\",\"checked\":\"Checkbox_checked__24zCk\",\"checkmark\":\"Checkbox_checkmark__20KJV\",\"checkedDark\":\"Checkbox_checkedDark__1z_ru\",\"checkmarkDark\":\"Checkbox_checkmarkDark__2Pa-R\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"columns\":\"EmployeeDetailEditPage_columns__2WVh6\",\"firstColumn\":\"EmployeeDetailEditPage_firstColumn__2JcC9\",\"secondColumn\":\"EmployeeDetailEditPage_secondColumn__1ZrWM\",\"backButton\":\"EmployeeDetailEditPage_backButton__2a4ew\",\"imgContainer\":\"EmployeeDetailEditPage_imgContainer__2j3h2\",\"title\":\"EmployeeDetailEditPage_title__2tA1e\",\"paddingTop\":\"EmployeeDetailEditPage_paddingTop__2AEDZ\",\"paddingRight\":\"EmployeeDetailEditPage_paddingRight__1_xoQ\",\"row\":\"EmployeeDetailEditPage_row__JxkQN\",\"line\":\"EmployeeDetailEditPage_line__1nWQU\",\"adminCardContainer\":\"EmployeeDetailEditPage_adminCardContainer__2uTOQ\",\"adminCard\":\"EmployeeDetailEditPage_adminCard__3dm3z\",\"card\":\"EmployeeDetailEditPage_card__9630G\",\"adminIcon\":\"EmployeeDetailEditPage_adminIcon__OD47H\",\"adminIconShield\":\"EmployeeDetailEditPage_adminIconShield__2Ru_n\",\"adminText\":\"EmployeeDetailEditPage_adminText__3YmFi\",\"input\":\"EmployeeDetailEditPage_input__1dogC\",\"text\":\"EmployeeDetailEditPage_text__1Hm1u\",\"container\":\"EmployeeDetailEditPage_container__2oa2v\",\"checkmark\":\"EmployeeDetailEditPage_checkmark__1z5dh\",\"insideCheckmark\":\"EmployeeDetailEditPage_insideCheckmark__2yF6y\",\"insideCheckmarkAdmin\":\"EmployeeDetailEditPage_insideCheckmarkAdmin__1_9ls\",\"employeeDepartment\":\"EmployeeDetailEditPage_employeeDepartment__29ELu\",\"deptIconContainer\":\"EmployeeDetailEditPage_deptIconContainer__hslHJ\",\"deptIcon\":\"EmployeeDetailEditPage_deptIcon__yTtf6\",\"deptName\":\"EmployeeDetailEditPage_deptName__Yyj8N\",\"tableContainer\":\"EmployeeDetailEditPage_tableContainer__72qmR\",\"newRowThing\":\"EmployeeDetailEditPage_newRowThing__1AD7u\",\"addContainer\":\"EmployeeDetailEditPage_addContainer__NiJOc\",\"addIconBorder\":\"EmployeeDetailEditPage_addIconBorder__2zOVn\",\"addIcon\":\"EmployeeDetailEditPage_addIcon__3TqZg\",\"assignText\":\"EmployeeDetailEditPage_assignText__3I4-Z\",\"submitContainer\":\"EmployeeDetailEditPage_submitContainer__1K4HV\",\"dropdownTitle\":\"EmployeeDetailEditPage_dropdownTitle__1GSZk\",\"dropdownList\":\"EmployeeDetailEditPage_dropdownList__2Nswp\",\"employeeDropdownButton\":\"EmployeeDetailEditPage_employeeDropdownButton__33MJM\",\"noNewEmpsMsg\":\"EmployeeDetailEditPage_noNewEmpsMsg__2HJHk\",\"employeeRoleInput\":\"EmployeeDetailEditPage_employeeRoleInput__37iAB\",\"employeeDropdownTitle\":\"EmployeeDetailEditPage_employeeDropdownTitle__1Dq6e\",\"employeeDropdownArrow\":\"EmployeeDetailEditPage_employeeDropdownArrow__3CIjn\",\"moveItRight\":\"EmployeeDetailEditPage_moveItRight__P-LJW\",\"ddc1\":\"EmployeeDetailEditPage_ddc1__BFE5M\",\"dropdown1\":\"EmployeeDetailEditPage_dropdown1__1KGMp\",\"ddc2\":\"EmployeeDetailEditPage_ddc2__rVJcb\",\"dropdown2\":\"EmployeeDetailEditPage_dropdown2__12NDy\",\"dropdown3\":\"EmployeeDetailEditPage_dropdown3__1bXm9\",\"descriptionContainer\":\"EmployeeDetailEditPage_descriptionContainer__1lxEq\",\"description\":\"EmployeeDetailEditPage_description__3CdK8\",\"titleDark\":\"EmployeeDetailEditPage_titleDark__GsW-q\",\"checkmarkDark\":\"EmployeeDetailEditPage_checkmarkDark__NNwNY\",\"insideCheckmarkAdminDark\":\"EmployeeDetailEditPage_insideCheckmarkAdminDark__2OOy8\",\"backgroundDark\":\"EmployeeDetailEditPage_backgroundDark__1AxWl\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"titleContainer\":\"Title_titleContainer__3rJ3Z\",\"title\":\"Title_title__1jAKo\",\"topCorner\":\"Title_topCorner__6Jf-d\",\"bottomCorner\":\"Title_bottomCorner__yHS2g\",\"bottomCornerDark\":\"Title_bottomCornerDark__3muXg\",\"topCornerDark\":\"Title_topCornerDark__jtcAg\"};"],"sourceRoot":""}