{"version":3,"sources":["app/hooks.ts","features/theme/themeSlice.ts","features/system/systemSlice.ts","features/workitems/WorkItemDetail.tsx","features/workitems/WorkItemRow.tsx","features/sorting/sortingSlice.ts","features/search/searchSlice.ts","features/sorting/sorting.ts","features/filter/functions.ts","features/workitems/workItemSlice.ts","features/filter/TypeParser.tsx","features/filter/filterSlice.ts","features/workitems/WorkItemTableHead.tsx","app/components/footer.tsx","app/components/HeaderLogo.tsx","features/filter/ProductLinesFilterForm.tsx","features/filter/DateFilterBase.tsx","features/filter/DateFilterFrom.tsx","features/filter/DateFilterTo.tsx","app/components/SearchForm.tsx","app/components/navigation/ApplicationBar.tsx","app/components/util/Layout.tsx","features/workitems/WorkItems.Styles.tsx","app/components/csvexport/csvExporter.tsx","features/parameters/ParameterHandler.tsx","app/components/pdfexport/PdfGenerator.tsx","features/workitems/WorkItems.tsx","app/components/navigation/NotFound.tsx","app/components/StartPage.tsx","App.tsx","app/store.ts","index.tsx"],"names":["useAppDispatch","useDispatch","useAppSelector","useSelector","useDeepEffect","func","deps","isFirst","React","useRef","prevDeps","useEffect","isSame","current","every","obj","index","isEqual","useQuery","search","useLocation","useMemo","URLSearchParams","themeSlice","createSlice","name","initialState","mode","reducers","setTheme","state","action","payload","selectTheme","actions","s","theme","systemSlice","status","workItems","productLines","adminView","setWorkitemStatus","setProductLineStatus","toggleAdminView","selectStatus","system","selectAdminView","useStyles","makeStyles","divider","marginBottom","marginTop","paddingTop","subtitle","fontSize","fontWeight","flexBoxTitle","display","flexDirection","icon","height","marginRight","bugIcon","color","storyIcon","WorkItemDetail","props","wi","classes","Card","CardContent","className","type","clsx","AutoStories","Typography","sx","id","productLineDisplayName","version","length","Divider","parse","title","tags","useTags","split","map","x","Chip","style","label","trim","variant","link","textDecorationLine","tableRow","borderBottom","titleCell","minWidth","expandedField","paddingBottom","tableCell","borderTop","tagsCell","width","padding","WorkItemRow","displayData","colSpan","expanded","setExpanded","getFormattedDate","timeStamp","date","Date","getFullYear","getMonth","getDate","TableRow","TableCell","size","KeyboardArrowUp","onClick","visibility","canExpandTitle","KeyboardArrowDown","Fade","in","timeout","products","replaceAll","component","shortTitle","href","target","rel","Tooltip","toLowerCase","placement","paddingLeft","justifyContent","reportedVersion","developmentStatus","incidentNumber","Collapse","order","orderBy","orderByTechnical","sortingSlice","setOrder","setOrderBy","setOrderByTechnical","clearSort","selectOrder","sorting","selectOrderBy","generalSearchText","types","components","versions","reportedVersions","devStates","incidentNumbers","showFilter","searchSlice","setGeneralSearchText","resetSearch","Object","keys","forEach","key","skey","toggleShowFilter","setDate","setId","setTypes","setTitle","setProductLines","setProducts","setComponents","setVersions","setReportedVersion","setTags","setDevStates","setIncidentNumbers","selectSearch","selectNoFilterActive","descendingComparator","a","b","getComparator","stableSort","array","comparator","stabilizedThis","el","sort","buildQueryString","filter","projects","join","queryString","i","conditions","workItemType","bug","userStory","dateRange","from","to","fetchWorkItemsFunc","args","thunkApi","setBusy","dispatch","lastId","axios","post","query","response","data","fetchWorkItems","createAsyncThunk","fetchPagedWorkItems","sortWorkItems","getState","newItems","cloneDeep","workItemSlice","tableConfig","page","rowsPerPage","setPage","setRowsPerPage","clearWorkItems","extraReducers","builder","addCase","fulfilled","w","findIndex","push","getFilteredTags","fullWorkItems","fullTags","splittedTags","y","trimmedTag","tagAlreadyExists","z","selectWorkItems","selectTableConfig","TypeParser","value","initialFilterState","valid","appliedFilter","currentFilter","availableProductLines","productLinesIsSelected","filterWorkItems","checkStringInArray","searchString","seperator","searchTerms","term","some","string","includes","item","toString","padStart","parseType","productLine","searchTerm","workItem","formattedDate","getSearchStringFromWorkItem","fetchProductLines","get","displayName","localeCompare","filterSlice","setWorkItemTypeBug","setWorkItemTypeUserStory","setValid","toggleSelectedProductLine","splice","applyFilter","resetFilter","validate","productLinesValid","workItemTypeValid","fromDateValid","toDateValid","numberOfDateSelected","toDateGreaterThanFromDate","setFromDate","setToDate","selectFilter","selectAppliedFilter","selectAvailableProductLines","selectProductLinesIsSelected","createStyles","headCell","filterRow","option","titleSearch","WorkItemTableHead","headCells","localClasses","noFilterActive","onFilter","renderAutocompleteTags","getTagProps","substring","CustomAutocomplete","options","onChange","renderTags","renderOption","Autocomplete","disablePortal","multiple","filterSelectedOptions","freeSolo","fullWidth","PaperComponent","children","Paper","renderInput","params","TextField","TableHead","position","top","background","zIndex","cell","align","disablePadding","sortDirection","span","TableSortLabel","disabled","disableSorting","active","direction","property","visuallyHidden","Grow","IconButton","Clear","verticalAlign","names","displayNames","find","p","returnDisplayNamesFromNames","event","newValue","NamesOfSelectedProjects","selectedProject","undefined","setProductLinesToSearch","setProductLinesToFilter","Set","product","returnFilteredProducts","onInputChange","console","warn","indexOf","fullIn","subIn","returnFilteredIncidentNumbers","root","backgroundImage","process","backgroundPosition","alignItems","footerText","margin","footerLink","textDecoration","textShadow","CustomFooter","palette","primary","contrastText","flexGrow","breakpoints","up","image","HeaderLogo","BuildNumber","noWrap","src","alt","marginLeft","defaultProps","backgroundColor","paper","listSection","ul","subHeader","textAlign","listItem","listItemAll","allText","checkBox","selectOneOptionText","toggleButton","textTransform","ProductLinesFilterForm","history","useHistory","infoTextVisible","setInfoTextVisible","location","pathname","onProductLineToggle","allSelected","noneSelected","onSelectAll","isLoadingProductLines","renderPlaceholder","labelId","ToggleButton","ListItemText","Skeleton","disableTypography","renderFilteredListItems","filteredProductLines","flexWrap","isSelected","ListSubheader","Checkbox","edge","tabIndex","disableRipple","inputProps","checked","indeterminate","List","dense","subheader","slice","FormHelperText","datePicker","DateFilterBase","handleChange","showFormat","inputStyles","error","setError","DatePicker","DialogProps","InputAdornmentProps","helperText","placeholder","inputFormat","mask","changeDate","checkDateValidation","DateFilterFrom","getTime","DateFilterTo","useCallback","minHeight","filterForm","maxWidth","borderColor","formRoot","searchBar","border","borderTopLeftRadius","borderBottomLeftRadius","searchIcon","spacing","pointerEvents","alignSelf","searchAnimation","transition","transitions","create","searchAnimationOpen","searchAnimationClosed","inputRoot","inputInput","removeInputButtonCollapsed","removeInputButtonVisible","productLinePlacer","list","productLineList","showLabelList","transform","dateFilter","dateForm","dateFromPadding","paddingRight","dateToPadding","submitButton","SearchForm","searchBarRef","executeOnOpen","executeOnClose","focused","setFocused","searchAnimationClass","InputBase","inputRef","onFocus","onBlur","input","e","onKeyUp","keyCode","Button","focus","viewBox","fill","d","disableElevation","currentSearchParams","window","NamesOfSelectedProductLines","productline","drawerWidth","appBar","drawer","easing","sharp","duration","leavingScreen","backgroundSize","headerPosition","appBarShift","enteringScreen","hide","flexShrink","drawerPaper","drawerHeader","mixins","toolbar","menuButton","content","contentShift","easeOut","noBorder","buttonDiv","filterRoot","placeHolder","filterIcon","applyButton","helpLink","helpIcon","overlay","left","popup","outline","boxShadow","shadows","borderRadius","shape","closePopupButton","right","ApplicationBar","showFilterPopup","setShowFilterPopup","hideFilterPopup","AppBar","Toolbar","Menu","Popover","open","onClose","anchorOrigin","vertical","horizontal","transformOrigin","layoutBorder","Layout","clip","overflow","selectLabel","displayedRows","iconContainer","exportIcon","noResultsCell","noResultsIcon","noResultsText","chip","collapsedSize","viewText","fontStyle","cursor","filterButton","noLinkStyle","mobileProjectButton","collapse","aline","tableContent","CSVExporter","columns","addToData","row","column","document","createElement","innerHTML","textContent","innerText","extractContent","parseInt","toISOString","filename","enclosingCharacter","separator","headers","c","ParameterHandler","titles","ids","releasedates","states","searchParams","dateFrom","dateTo","productLineDisplayNames","reportedversion","tag","releasedate","incidentnumber","datefrom","dateto","namesOfSelectedProductLines","selectedProductLine","timestamp","Alert","severity","bottom","Close","AlertTitle","doc","jsPDF","orientation","unit","format","compress","addImage","setTextColor","setFontSize","setFont","text","autoTable","head","body","toLocaleDateString","headStyles","minCellWidth","fillColor","columnStyles","cellWidth","startY","pageCount","getNumberOfPages","currentPage","getCurrentPageInfo","pageNumber","save","skeletonHeight","WorkItems","systemStatus","filterState","tableBodyRef","setDisplayData","productUrlParameters","allProductLinesSelected","selectAllProjects","then","renderSkeletonRow","filteredWorkItems","scrollTop","emptyRows","FilterAlt","FilterAltOutlined","onDelete","Stack","GeneratePdf","TableContainer","ref","Table","TableBody","ManageSearch","Array","_","TablePagination","rowsPerPageOptions","count","onPageChange","newPage","onRowsPerPageChange","NotFound","alert","searchFormBorder","StartPage","App","prefersDarkmode","useMediaQuery","finalTheme","createTheme","adaptV4Theme","main","dark","typography","fontFamily","StyledEngineProvider","injectFirst","ThemeProvider","path","exact","interceptors","request","use","config","REACT_APP_SPA_PROXY_PORT","proxy","host","port","store","configureStore","reducer","themeReducer","searchReducer","sortingReducer","workItemReducer","systemReducer","filterReducer","baseUrl","getElementsByTagName","getAttribute","rootElement","getElementById","ReactDOM","render","basename","LocalizationProvider","dateAdapter","AdapterDateFns"],"mappings":"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","file":"static/js/main.bdf333cf.chunk.js","sourcesContent":["import React from 'react';\r\nimport { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux';\r\nimport { isEqual } from 'lodash';\r\nimport { useLocation } from 'react-router-dom';\r\nimport { AppDispatch, RootState } from './store';\r\n\r\nexport const useAppDispatch = () => useDispatch();\r\nexport const useAppSelector: TypedUseSelectorHook = useSelector;\r\n\r\nexport function useDeepEffect(func: any, deps: any) {\r\n const isFirst = React.useRef(true);\r\n const prevDeps = React.useRef(deps);\r\n\r\n React.useEffect(() => {\r\n const isSame = prevDeps.current.every((obj: any, index: any) => isEqual(obj, deps[index]));\r\n\r\n if (isFirst.current || !isSame) {\r\n func();\r\n }\r\n\r\n isFirst.current = false;\r\n prevDeps.current = deps;\r\n }, deps);\r\n}\r\n\r\nexport function useWindowSize() {\r\n const [windowSize, setWindowSize] = React.useState({\r\n width: 0,\r\n height: 0,\r\n });\r\n React.useEffect(() => {\r\n function handleResize() {\r\n setWindowSize({\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n });\r\n }\r\n window.addEventListener('resize', handleResize);\r\n handleResize();\r\n return () => window.removeEventListener('resize', handleResize);\r\n }, []);\r\n return windowSize;\r\n}\r\n\r\nexport function useQuery() {\r\n const { search } = useLocation();\r\n\r\n return React.useMemo(() => new URLSearchParams(search), [search]);\r\n}\r\n","/* eslint-disable no-param-reassign */\r\nimport { createSlice, PayloadAction } from '@reduxjs/toolkit';\r\nimport { RootState } from '../../app/store';\r\n\r\nexport type ThemeMode = 'light' | 'dark' | 'system';\r\n\r\nexport interface Theme {\r\n mode: ThemeMode;\r\n}\r\n\r\nconst initialState: Theme = {\r\n mode: 'light',\r\n};\r\n\r\nexport const themeSlice = createSlice({\r\n name: 'theme',\r\n initialState,\r\n reducers: {\r\n setTheme: (state, action: PayloadAction) => {\r\n state.mode = action.payload;\r\n },\r\n },\r\n});\r\n\r\nexport const { setTheme } = themeSlice.actions;\r\n\r\nexport const selectTheme = (s: RootState) => s.theme;\r\n\r\nexport default themeSlice.reducer;\r\n","/* eslint-disable no-param-reassign */\nimport { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { RootState } from '../../app/store';\n\nexport type Status = 'idle' | 'busy';\nexport interface SystemState {\n status: {\n workItems: Status;\n productLines: Status;\n };\n adminView: boolean;\n}\n\nexport const initialState: SystemState = {\n status: {\n workItems: 'idle',\n productLines: 'idle',\n },\n adminView: false,\n};\n\nexport const systemSlice = createSlice({\n name: 'system',\n initialState,\n reducers: {\n setWorkitemStatus: (state, action: PayloadAction) => {\n state.status.workItems = action.payload;\n },\n setProductLineStatus: (state, action: PayloadAction) => {\n state.status.productLines = action.payload;\n },\n toggleAdminView: (state) => {\n state.adminView = !state.adminView;\n },\n },\n});\n\nexport const {\n setWorkitemStatus, setProductLineStatus, toggleAdminView,\n} = systemSlice.actions;\n\nexport const selectStatus = (state: RootState) => state.system.status;\nexport const selectAdminView = (state: RootState) => state.system.adminView;\n\nexport default systemSlice.reducer;\n","// eslint-disable-next-line no-unused-vars\nimport * as React from 'react';\nimport { makeStyles } from '@mui/styles';\nimport {\n Card, CardContent, Chip, Divider, Typography,\n} from '@mui/material';\nimport parse from 'html-react-parser';\nimport clsx from 'clsx';\nimport { AutoStories, BugReport } from '@mui/icons-material';\nimport { WorkItem } from './Types';\n\ninterface Props {\n wi: WorkItem;\n}\n\nconst useStyles = makeStyles({\n divider: {\n marginBottom: 10,\n marginTop: 5,\n },\n paddingTop: {\n paddingTop: 10,\n },\n subtitle: {\n fontSize: 14,\n fontWeight: 'bold',\n },\n flexBoxTitle: {\n display: 'flex',\n flexDirection: 'row',\n },\n icon: {\n marginTop: 5,\n height: 20,\n marginRight: 5,\n },\n bugIcon: {\n color: '#7d232a',\n },\n storyIcon: {\n color: '#234f91',\n },\n});\n\nexport default function WorkItemDetail(props: Props) {\n const { wi } = props;\n const classes = useStyles();\n return (\n \n \n
\n
\n {wi.type === 'Bug' ? (\n \n ) : (\n \n )}\n
\n
\n {`${wi.id}`}\n
\n
\n \n {`${wi.type} - ${wi.productLineDisplayName} ${\n wi.version.length > 0 && wi.version !== '-' ? `, integrated in ${wi.version}` : ''\n }`}\n \n\n \n
{parse(wi.title)}
\n {wi.tags.length > 1 && wi.useTags === true && (\n Tags\n )}\n
\n {wi.tags.length >= 2 && wi.useTags === true\n ? wi.tags\n .split('; ')\n .map((x) => (\n \n ))\n : ''}\n
\n
\n
\n );\n}\n","import * as React from 'react';\nimport {\n TableRow, TableCell, Fade, Collapse, Tooltip,\n} from '@mui/material';\nimport { makeStyles } from '@mui/styles';\nimport { KeyboardArrowDown, KeyboardArrowUp } from '@mui/icons-material';\nimport BugIcon from '@mui/icons-material/BugReport';\nimport FeatureIcon from '@mui/icons-material/MenuBook';\nimport { useAppSelector } from '../../app/hooks';\nimport { selectAdminView } from '../system/systemSlice';\nimport WorkItemDetail from './WorkItemDetail';\nimport { WorkItem } from './Types';\n\ninterface Props {\n wi: WorkItem;\n displayData: boolean;\n colSpan: number;\n}\n\nconst useStyles = makeStyles({\n link: {\n textDecorationLine: 'underline',\n },\n tableRow: {\n '& > *': {\n borderBottom: 'unset',\n },\n },\n titleCell: {\n minWidth: 420,\n },\n expandedField: {\n paddingBottom: 15,\n paddingTop: 10,\n },\n tableCell: {\n paddingBottom: 0,\n paddingTop: 0,\n borderTop: 'none',\n },\n tagsCell: {\n width: 150,\n },\n padding: {\n paddingTop: 10,\n },\n});\n\nexport default function WorkItemRow(props: Props) {\n const { wi, displayData, colSpan } = props;\n const classes = useStyles();\n const [expanded, setExpanded] = React.useState(false);\n const adminView = useAppSelector(selectAdminView);\n\n const getFormattedDate = React.useCallback((timeStamp: number) => {\n const date = new Date(timeStamp);\n return `${date.getFullYear()}-${\n date.getMonth() + 1 > 9 ? date.getMonth() + 1 : `0${date.getMonth() + 1}`\n }-${date.getDate() > 9 ? date.getDate() : `0${date.getDate()}`}`;\n }, []);\n\n return (\n <>\n \n \n {expanded ? (\n setExpanded(false)}\n visibility={wi.canExpandTitle || wi.tags.length > 10 ? 'visible' : 'hidden'}\n />\n ) : (\n setExpanded(true)}\n visibility={wi.canExpandTitle || wi.tags.length > 10 ? 'visible' : 'hidden'}\n />\n )}\n \n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n \n {wi.productLineDisplayName}\n \n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n \n \n {wi.products.replaceAll(',', ', ')}\n \n \n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n \n {wi.version}\n \n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n \n {wi.component}\n \n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n \n \n {wi.shortTitle}\n \n \n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n \n \n {adminView ? (\n \n {wi.id}\n \n ) : (\n wi.id\n )}\n \n \n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n \n \n \n {wi.type.toLowerCase() === 'bug' ? : }\n \n \n \n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n \n {wi.reportedVersion}\n \n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n \n {wi.useTags ? `${wi.tags}` : ''}\n \n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n \n \n {wi.date > 949363200000 ? `${getFormattedDate(wi.date)}` : '-'}\n \n \n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n \n {wi.developmentStatus}\n \n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n \n {wi.incidentNumber.replaceAll(',', ', ')}\n \n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n \n \n \n \n \n \n 10)}>\n
\n \n
\n
\n
\n
\n \n );\n}\n","/* eslint-disable no-param-reassign */\nimport { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { Order } from './sorting';\nimport { RootState } from '../../app/store';\nimport { WorkItem } from '../workitems/Types';\n\nexport interface Sorting {\n order: Order;\n orderBy: keyof WorkItem;\n orderByTechnical: any;\n}\n\nexport const initialState: Sorting = {\n order: 'asc',\n orderBy: 'productLine',\n orderByTechnical: 'System.TeamProject',\n};\n\nexport const sortingSlice = createSlice({\n name: 'sorting',\n initialState,\n reducers: {\n setOrder: (state, action: PayloadAction) => {\n state.order = action.payload;\n },\n setOrderBy: (state, action: PayloadAction) => {\n state.orderBy = action.payload;\n },\n setOrderByTechnical: (state, action: PayloadAction) => {\n state.orderByTechnical = action.payload;\n },\n clearSort: (state) => {\n state.order = initialState.order;\n state.orderBy = initialState.orderBy;\n state.orderByTechnical = initialState.orderByTechnical;\n },\n },\n});\n\nexport const {\n setOrder, setOrderBy, setOrderByTechnical, clearSort,\n} = sortingSlice.actions;\n\n// selectors\nexport const selectOrder = (state: RootState) => state.sorting.order;\nexport const selectOrderBy = (state: RootState) => state.sorting.orderBy;\nexport const selectOrderByTechnical = (state: RootState) => state.sorting.orderByTechnical;\n\nexport default sortingSlice.reducer;\n","/* eslint-disable no-param-reassign */\nimport { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { RootState } from '../../app/store';\n\nexport interface Search {\n generalSearchText: string;\n date: string;\n id: string;\n types: string[];\n title: string;\n productLines: string[];\n products: string[];\n components: string[];\n versions: string[];\n reportedVersions: string[];\n tags: string[];\n devStates: string[];\n incidentNumbers: string[];\n showFilter: boolean;\n}\n\nexport const initialState: Search = {\n generalSearchText: '',\n date: '',\n id: '',\n types: [],\n title: '',\n productLines: [],\n products: [],\n components: [],\n versions: [],\n reportedVersions: [],\n tags: [],\n devStates: [],\n incidentNumbers: [],\n showFilter: false,\n};\n\nexport const searchSlice = createSlice({\n name: 'search',\n initialState,\n reducers: {\n setGeneralSearchText: (state, action: PayloadAction) => {\n state.generalSearchText = action.payload;\n },\n resetSearch: (state) => {\n Object.keys(state).forEach((key) => {\n const skey = key as keyof Search;\n if (skey !== 'showFilter') {\n (state as any)[skey] = initialState[skey];\n }\n });\n },\n toggleShowFilter: (state) => {\n state.showFilter = !state.showFilter;\n },\n setDate: (state, action: PayloadAction) => {\n state.date = action.payload;\n },\n setId: (state, action: PayloadAction) => {\n state.id = action.payload;\n },\n setTypes: (state, action: PayloadAction) => {\n state.types = action.payload;\n },\n setTitle: (state, action: PayloadAction) => {\n state.title = action.payload;\n },\n setProductLines: (state, action: PayloadAction) => {\n state.productLines = action.payload;\n },\n setProducts: (state, action: PayloadAction) => {\n state.products = action.payload;\n },\n setComponents: (state, action: PayloadAction) => {\n state.components = action.payload;\n },\n setVersions: (state, action: PayloadAction) => {\n state.versions = action.payload;\n },\n setReportedVersion: (state, action: PayloadAction) => {\n state.reportedVersions = action.payload;\n },\n setTags: (state, action: PayloadAction) => {\n state.tags = action.payload;\n },\n setDevStates: (state, action: PayloadAction) => {\n state.devStates = action.payload;\n },\n setIncidentNumbers: (state, action: PayloadAction) => {\n state.incidentNumbers = action.payload;\n },\n },\n});\n\nexport const {\n setGeneralSearchText,\n resetSearch,\n toggleShowFilter,\n setDate,\n setId,\n setTypes,\n setTitle,\n setProductLines,\n setProducts,\n setComponents,\n setVersions,\n setReportedVersion,\n setTags,\n setDevStates,\n setIncidentNumbers,\n} = searchSlice.actions;\n\nexport const selectSearch = (s: RootState) => s.search;\n\nexport const selectNoFilterActive = (s: RootState) => {\n const { search } = s;\n return (\n search.generalSearchText === ''\n && search.date === ''\n && search.components.length === 0\n && search.id === ''\n && search.productLines.length === 0\n && search.products.length === 0\n && search.tags.length === 0\n && search.title === ''\n && search.versions.length === 0\n && search.reportedVersions.length === 0\n && search.types.length === 0\n && search.devStates.length === 0\n );\n};\n\nexport default searchSlice.reducer;\n","/* eslint-disable no-unused-vars */\nexport type Order = 'asc' | 'desc';\n\n/**\n * compares two properties of objects a and b\n * @param a first object\n * @param b second object\n * @param orderBy property of object that will be compared\n * @returns -1 if b.orderBy < a.orderBy, 1 if a.orderBy > b.orderBy, otherwise 0\n */\nfunction descendingComparator(a: T, b: T, orderBy: keyof T) {\n if (b[orderBy] < a[orderBy]) {\n return -1;\n }\n if (b[orderBy] > a[orderBy]) {\n return 1;\n }\n return 0;\n}\n\nexport function getComparator(\n order: Order,\n orderBy: Key,\n // eslint-disable-next-line no-unused-vars\n): (\n a: { [key in Key]: number | string | Date | boolean },\n b: { [key in Key]: number | string | Date | boolean },\n) => number {\n return order === 'desc'\n ? (a, b) => descendingComparator(a, b, orderBy)\n : (a, b) => -descendingComparator(a, b, orderBy);\n}\n\n/**\n * sorts an array using 'stable - sort'\n * @param array array to sort\n * @param comparator comparator to use for sorting\n */\n// eslint-disable-next-line no-unused-vars\nexport function stableSort(array: T[], comparator: (a: T, b: T) => number) {\n const stabilizedThis = array.map((el, index) => [el, index] as [T, number]);\n stabilizedThis.sort((a, b) => {\n const order = comparator(a[0], b[0]);\n if (order !== 0) return order;\n return a[1] - b[1];\n });\n return stabilizedThis.map((el) => el[0]);\n}\n","import { FilterState } from './filterSlice';\n\nexport default function buildQueryString(filter: FilterState) {\n const projects = filter.productLines.map((x) => `'${x}'`).join(',');\n let queryString = `SELECT [Id] from WorkItems WHERE [System.TeamProject] IN (${projects}) AND [Custom.Changelog] = 'True' AND [System.State] = 'Closed' `;\n for (let i = 0; i < filter.conditions.length; i++) {\n queryString += `AND ${filter.conditions[i]} `;\n }\n if (!(filter.workItemType.bug && filter.workItemType.userStory)) {\n if (filter.workItemType.bug) {\n queryString += 'AND [System.WorkItemType] = \"Bug\" ';\n }\n if (filter.workItemType.userStory) {\n queryString += 'AND [System.WorkItemType] = \"User Story\" ';\n }\n }\n if (filter.dateRange.from !== -1) {\n const date = new Date(filter.dateRange.from);\n queryString += `AND [Microsoft.VSTS.Common.ClosedDate] >= '${date.getFullYear()}-${\n date.getMonth() + 1\n }-${date.getDate()}T00:00Z' `;\n }\n if (filter.dateRange.to !== -1) {\n const date = new Date(filter.dateRange.to);\n queryString += `AND [Microsoft.VSTS.Common.ClosedDate] <= '${date.getFullYear()}-${\n date.getMonth() + 1\n }-${date.getDate()}T00:00Z' `;\n }\n queryString += 'ORDER BY [System.Id] desc';\n return queryString;\n}\n","/* eslint-disable no-param-reassign */\r\n/* eslint-disable no-unused-vars */\r\nimport { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit';\r\nimport axios from 'axios';\r\nimport { cloneDeep } from 'lodash';\r\nimport { WorkItem } from './Types';\r\nimport { RootState } from '../../app/store';\r\nimport { setWorkitemStatus } from '../system/systemSlice';\r\nimport { getComparator, stableSort } from '../sorting/sorting';\r\nimport buildQueryString from '../filter/functions';\r\nimport { FilterState } from '../filter/filterSlice';\r\n\r\nexport interface WorkItemState {\r\n workItems: WorkItem[];\r\n lastId: number;\r\n tableConfig: {\r\n page: number;\r\n rowsPerPage: number;\r\n };\r\n}\r\n\r\nexport const initialState: WorkItemState = {\r\n workItems: [],\r\n lastId: -1,\r\n tableConfig: {\r\n page: 0,\r\n rowsPerPage: 10,\r\n },\r\n};\r\n\r\nconst fetchWorkItemsFunc = async (\r\n args: { filter: FilterState },\r\n thunkApi: any,\r\n setBusy: boolean,\r\n) => {\r\n if (setBusy) thunkApi.dispatch(setWorkitemStatus('busy'));\r\n const { filter } = args;\r\n\r\n if (filter.productLines.length < 1) return { workItems: [], lastId: -1 };\r\n const queryString = buildQueryString(filter);\r\n\r\n try {\r\n const response = await axios.post<{ workItems: WorkItem[]; lastId: number }>('workitem', {\r\n query: queryString,\r\n });\r\n thunkApi.dispatch(setWorkitemStatus('idle'));\r\n return response.data;\r\n } catch (e) {\r\n thunkApi.dispatch(setWorkitemStatus('idle'));\r\n throw e;\r\n }\r\n};\r\n\r\nexport const fetchWorkItems = createAsyncThunk(\r\n 'workItems/fetchWorkItems',\r\n (args: { filter: FilterState }, thunkApi) => fetchWorkItemsFunc(args, thunkApi, true),\r\n);\r\n\r\nexport const fetchPagedWorkItems = createAsyncThunk(\r\n 'workItems/fetchPagedWorkItems',\r\n (args: { filter: FilterState }, thunkApi) => fetchWorkItemsFunc(args, thunkApi, false),\r\n);\r\n\r\nexport const sortWorkItems = createAsyncThunk('workItems/sortWorkItems', async (args, thunkApi) => {\r\n const state = thunkApi.getState() as RootState;\r\n const newItems = cloneDeep(state.workItems.workItems);\r\n const { order, orderBy } = state.sorting;\r\n return stableSort(newItems, getComparator(order, orderBy as keyof WorkItem));\r\n});\r\n\r\nexport const workItemSlice = createSlice({\r\n name: 'workItems',\r\n initialState,\r\n reducers: {\r\n setPage: (state, action: PayloadAction) => {\r\n state.tableConfig.page = action.payload;\r\n },\r\n setRowsPerPage: (state, action: PayloadAction) => {\r\n state.tableConfig.rowsPerPage = action.payload;\r\n },\r\n clearWorkItems: (state) => {\r\n state.workItems = [];\r\n state.lastId = -1;\r\n },\r\n },\r\n extraReducers: (builder) => {\r\n builder.addCase(fetchPagedWorkItems.fulfilled, (state, action) => {\r\n action.payload.workItems.forEach((w) => {\r\n if (state.workItems.findIndex((x) => x.id === w.id) < 0) {\r\n state.workItems.push(w);\r\n }\r\n });\r\n state.lastId = action.payload.lastId;\r\n });\r\n builder.addCase(fetchWorkItems.fulfilled, (state, action) => {\r\n state.workItems = action.payload.workItems;\r\n state.lastId = action.payload.lastId;\r\n });\r\n builder.addCase(sortWorkItems.fulfilled, (state, action) => {\r\n state.workItems = [];\r\n for (let i = 0; i < action.payload.length; i++) {\r\n state.workItems.push(action.payload[i]);\r\n }\r\n });\r\n },\r\n});\r\n\r\nexport const getFilteredTags = (fullWorkItems: WorkItem[]) => {\r\n const fullTags = fullWorkItems.filter((x) => x.tags !== '-' && x.useTags).map((x) => x.tags);\r\n const splittedTags: string[] = [];\r\n fullTags.forEach((x) => {\r\n const tagsOfWorkItem = x.split(';');\r\n tagsOfWorkItem.forEach((y) => {\r\n const trimmedTag = y.trim();\r\n let tagAlreadyExists = false;\r\n splittedTags.forEach((z) => {\r\n if (trimmedTag === z) {\r\n tagAlreadyExists = true;\r\n }\r\n });\r\n if (!tagAlreadyExists) {\r\n splittedTags.push(trimmedTag);\r\n }\r\n });\r\n });\r\n splittedTags.sort((a, b) => (a.toLowerCase() > b.toLowerCase() ? 1 : -1));\r\n return splittedTags;\r\n};\r\n\r\nexport const selectWorkItems = (state: RootState) => state.workItems.workItems;\r\n\r\nexport const selectTableConfig = (state: RootState) => state.workItems.tableConfig;\r\n\r\nexport const { setPage, setRowsPerPage, clearWorkItems } = workItemSlice.actions;\r\n\r\nexport default workItemSlice.reducer;\r\n","// This class changes the terms \"bug\" and \"feature\", which are rather unknown to users, to terms that are easier to understand.\nexport default class TypeParser {\n // In the case that we want to adjust the type of a work item, the switch is made so that we get the conventional value from the user-specified terms \"Fixed\" and \"Added\".\n static parseType(value: string): string {\n switch (value) {\n case 'Added': {\n return 'User Story';\n }\n case 'Fixed': {\n return 'Bug';\n }\n case 'Bug': {\n return 'Fixed';\n }\n case 'User Story': {\n return 'Added';\n }\n default: {\n return '';\n }\n }\n }\n}\n","/* eslint-disable no-param-reassign */\nimport { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport axios from 'axios';\nimport { cloneDeep } from 'lodash';\nimport TypeParser from './TypeParser';\nimport { RootState } from '../../app/store';\nimport { setProductLineStatus } from '../system/systemSlice';\nimport { WorkItem } from '../workitems/Types';\nimport { Search } from '../search/searchSlice';\n\nexport interface ProductLine {\n name: string;\n displayName: string;\n}\n\nexport interface FilterState {\n productLines: string[];\n conditions: string[];\n workItemType: {\n bug: boolean;\n userStory: boolean;\n };\n valid: boolean;\n dateRange: {\n from: number;\n to: number;\n };\n}\n\nexport interface Filter {\n appliedFilter: FilterState;\n currentFilter: FilterState;\n productLinesIsSelected: boolean;\n availableProductLines: ProductLine[];\n}\n\nconst initialFilterState: FilterState = {\n productLines: [],\n conditions: [],\n workItemType: {\n bug: true,\n userStory: true,\n },\n valid: true,\n dateRange: {\n from: -1,\n to: -1,\n },\n};\n\nexport const initialState: Filter = {\n appliedFilter: initialFilterState,\n currentFilter: cloneDeep(initialFilterState),\n availableProductLines: [],\n productLinesIsSelected: true,\n};\nexport const filterWorkItems = (workItems: WorkItem[], search: Search) => {\n const checkStringInArray = (array: string[], searchString: string, seperator: string = '') => {\n if (array.length === 0) {\n return true;\n }\n if (seperator !== '') {\n const searchTerms = searchString.split(seperator).map((term) => term.trim());\n return searchTerms.some(\n (term) => array.map((string) => string.trim()).includes(term.trim()) && term !== '-',\n );\n }\n return array.some((item) => item === searchString && searchString !== '-');\n };\n\n const getFormattedDate = (timeStamp: number) => {\n const date = new Date(timeStamp);\n return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date\n .getDate()\n .toString()\n .padStart(2, '0')}`;\n };\n\n const getSearchStringFromWorkItem = (workItem: WorkItem) => {\n const formattedDate = getFormattedDate(workItem.date);\n return `${formattedDate}${workItem.component}${workItem.id}${workItem.productLine}${workItem.products}${workItem.tags}${workItem.title}${workItem.type}${workItem.version}${workItem.reportedVersion}${workItem.developmentStatus}${workItem.incidentNumber}`;\n };\n\n return workItems.filter(\n (wi) => wi.title.toLowerCase().includes(search.title.toLowerCase().trim())\n && wi.id.toString().includes(search.id.toLowerCase().trim())\n && checkStringInArray(search.types, TypeParser.parseType(wi.type))\n && checkStringInArray(search.productLines, wi.productLine)\n && checkStringInArray(search.products, wi.products, ',')\n && checkStringInArray(search.components, wi.component)\n && checkStringInArray(search.versions, wi.version)\n && checkStringInArray(search.reportedVersions, wi.reportedVersion)\n && checkStringInArray(search.tags, wi.tags, ';')\n && getFormattedDate(wi.date).toLowerCase().includes(search.date.toLowerCase().trim())\n && checkStringInArray(search.devStates, wi.developmentStatus)\n && checkStringInArray(search.incidentNumbers, wi.incidentNumber, ',')\n && search.generalSearchText\n .toLowerCase()\n .split(',')\n .some((searchTerm) => getSearchStringFromWorkItem(wi).toLowerCase().includes(searchTerm.trim())),\n );\n};\n\nexport const fetchProductLines = createAsyncThunk('filter/fetchProjects', async (args, thunkApi) => {\n const state = thunkApi.getState() as RootState;\n if (state.filter.availableProductLines.length <= 0) {\n thunkApi.dispatch(setProductLineStatus('busy'));\n }\n const response = await axios.get('workitem/projects');\n thunkApi.dispatch(setProductLineStatus('idle'));\n return response.data.sort((a, b) => a.displayName.localeCompare(b.displayName));\n});\n\nexport const filterSlice = createSlice({\n name: 'filter',\n initialState,\n reducers: {\n setWorkItemTypeBug: (state, action: PayloadAction) => {\n state.currentFilter.workItemType.bug = action.payload;\n },\n setWorkItemTypeUserStory: (state, action: PayloadAction) => {\n state.currentFilter.workItemType.userStory = action.payload;\n },\n setValid: (state, action: PayloadAction) => {\n state.currentFilter.valid = action.payload;\n },\n setProductLines: (state, action: PayloadAction) => {\n state.currentFilter.productLines = action.payload;\n },\n toggleSelectedProductLine: (state, action: PayloadAction) => {\n if (!state.currentFilter.productLines.includes(action.payload)) {\n state.currentFilter.productLines.push(action.payload);\n } else {\n const index = state.currentFilter.productLines.findIndex((x) => x === action.payload);\n if (index !== -1) {\n state.currentFilter.productLines.splice(index, 1);\n }\n }\n },\n applyFilter: (state) => {\n state.appliedFilter = cloneDeep(state.currentFilter);\n },\n resetFilter: (state) => {\n state.currentFilter = cloneDeep(initialFilterState);\n },\n validate: (state) => {\n const productLinesValid = (state.productLinesIsSelected && state.currentFilter.productLines.length > 0);\n\n // WorkItemType validation\n const workItemTypeValid = [state.currentFilter.workItemType.bug, state.currentFilter.workItemType.userStory].filter(\n (x) => x,\n ).length !== 0;\n\n // Date validation\n const fromDateValid = state.currentFilter.dateRange.from !== -2;\n const toDateValid = state.currentFilter.dateRange.to !== -2;\n const numberOfDateSelected = [\n state.currentFilter.dateRange.from,\n state.currentFilter.dateRange.to,\n ].filter((x) => x !== -1).length;\n const toDateGreaterThanFromDate = state.currentFilter.dateRange.from < state.currentFilter.dateRange.to\n || numberOfDateSelected !== 2;\n\n // Final validation\n state.currentFilter.valid = workItemTypeValid\n && productLinesValid\n && fromDateValid\n && toDateValid\n && toDateGreaterThanFromDate;\n },\n setFromDate: (state, action: PayloadAction) => {\n state.currentFilter.dateRange.from = action.payload;\n },\n setToDate: (state, action: PayloadAction) => {\n state.currentFilter.dateRange.to = action.payload;\n },\n },\n extraReducers: (builder) => {\n builder.addCase(fetchProductLines.fulfilled, (state, action) => {\n state.availableProductLines = action.payload;\n });\n },\n});\n\nexport const selectWorkItemType = (state: RootState) => state.filter.currentFilter.workItemType;\nexport const selectFilter = (state: RootState) => state.filter.currentFilter;\nexport const selectAppliedFilter = (state: RootState) => state.filter.appliedFilter;\nexport const selectAvailableProductLines = (state: RootState) => state.filter.availableProductLines;\nexport const selectProductLinesIsSelected = (state: RootState) => state.filter.productLinesIsSelected;\nexport const {\n setWorkItemTypeBug,\n setWorkItemTypeUserStory,\n setValid,\n setProductLines,\n validate,\n toggleSelectedProductLine,\n applyFilter,\n resetFilter,\n setFromDate,\n setToDate,\n} = filterSlice.actions;\nexport default filterSlice.reducer;\n","import * as React from 'react';\r\nimport {\r\n Autocomplete,\r\n Chip,\r\n Collapse,\r\n Grow,\r\n IconButton,\r\n Paper,\r\n TableCell,\r\n TableHead,\r\n TableRow,\r\n TableSortLabel,\r\n TextField,\r\n Tooltip,\r\n Typography,\r\n} from '@mui/material';\r\nimport { Clear } from '@mui/icons-material';\r\nimport BugIcon from '@mui/icons-material/BugReport';\r\nimport FeatureIcon from '@mui/icons-material/MenuBook';\r\nimport createStyles from '@mui/styles/createStyles';\r\nimport makeStyles from '@mui/styles/makeStyles';\r\nimport { useAppDispatch, useAppSelector } from '../../app/hooks';\r\nimport {\r\n clearSort,\r\n selectOrder,\r\n selectOrderBy,\r\n setOrder,\r\n setOrderBy,\r\n} from '../sorting/sortingSlice';\r\nimport { WorkItem } from './Types';\r\nimport {\r\n resetSearch,\r\n selectNoFilterActive,\r\n selectSearch,\r\n setComponents,\r\n setDate,\r\n setDevStates,\r\n setId,\r\n setIncidentNumbers,\r\n setProductLines as setProductLinesToSearch,\r\n setProducts,\r\n setReportedVersion,\r\n setTags,\r\n setTitle,\r\n setTypes,\r\n setVersions,\r\n} from '../search/searchSlice';\r\nimport {\r\n selectWorkItems, setPage, sortWorkItems, getFilteredTags,\r\n} from './workItemSlice';\r\nimport TypeParser from '../filter/TypeParser';\r\nimport { selectAvailableProductLines, setProductLines as setProductLinesToFilter } from '../filter/filterSlice';\r\n\r\nexport interface HeadCell {\r\n disablePadding: boolean;\r\n id: keyof T;\r\n label: string;\r\n align: 'left' | 'right' | 'center' | 'justify' | undefined;\r\n span?: number;\r\n toolTip?: any;\r\n disableSorting?: boolean;\r\n}\r\n\r\ninterface TableHeadProps {\r\n classes: any;\r\n headCells: HeadCell[];\r\n}\r\n\r\nconst useStyles = makeStyles(() => createStyles({\r\n headCell: {\r\n borderBottom: 0,\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n },\r\n filterRow: {\r\n '& th': {\r\n '& div': {\r\n '& div': {\r\n '& div': {\r\n fontSize: 'small',\r\n },\r\n },\r\n },\r\n paddingTop: 0,\r\n },\r\n },\r\n option: {\r\n fontSize: 'small',\r\n },\r\n titleSearch: {\r\n width: '100%',\r\n },\r\n}));\r\n\r\nexport default function WorkItemTableHead(props: TableHeadProps) {\r\n const { classes, headCells } = props;\r\n const localClasses = useStyles();\r\n const search = useAppSelector(selectSearch);\r\n\r\n const order = useAppSelector(selectOrder);\r\n const orderBy = useAppSelector(selectOrderBy);\r\n const availableProductLines = useAppSelector(selectAvailableProductLines);\r\n\r\n const dispatch = useAppDispatch();\r\n\r\n const workItems = useAppSelector(selectWorkItems);\r\n\r\n const noFilterActive = useAppSelector(selectNoFilterActive);\r\n\r\n const onSort = (property: keyof T) => {\r\n const isAsc = orderBy === property && order === 'asc';\r\n\r\n const newOrder = isAsc ? 'desc' : 'asc';\r\n\r\n dispatch(setOrder(newOrder));\r\n dispatch(setOrderBy(property as keyof WorkItem));\r\n dispatch(setPage(0));\r\n dispatch(sortWorkItems());\r\n };\r\n\r\n const onFilter = (func: () => void) => {\r\n dispatch(setPage(0));\r\n func();\r\n };\r\n const renderAutocompleteTags = (value: readonly string[], getTagProps: any) => value.map((option: string, index: number) => (\r\n \r\n 10 ? `${option.substring(0, 10)}...` : option}\r\n // eslint-disable-next-line react/jsx-props-no-spreading\r\n {...getTagProps({ index })}\r\n />\r\n \r\n ));\r\n const CustomAutocomplete = ({\r\n options,\r\n onChange,\r\n value,\r\n renderTags = renderAutocompleteTags,\r\n renderOption,\r\n }: any) => (\r\n {children}}\r\n options={options}\r\n onChange={onChange}\r\n value={value}\r\n renderOption={renderOption}\r\n // eslint-disable-next-line react/jsx-props-no-spreading\r\n renderInput={(params) => }\r\n />\r\n );\r\n\r\n const returnFilteredIncidentNumbers = () => {\r\n const incidentNumbers: string[] = [];\r\n\r\n workItems\r\n .filter((x) => x.incidentNumber !== '-')\r\n .map((x) => x.incidentNumber)\r\n .forEach((fullIn) => {\r\n fullIn.split(',').forEach((subIn) => {\r\n if (incidentNumbers.indexOf(subIn) === -1) incidentNumbers.push(subIn);\r\n });\r\n });\r\n\r\n return incidentNumbers.sort((a, b) => (a.toLowerCase() > b.toLowerCase() ? 1 : -1));\r\n };\r\n\r\n const returnDisplayNamesFromNames = (names:string[]) => {\r\n const displayNames:string[] = [];\r\n names.forEach((name) => {\r\n const displayName = availableProductLines.find((p) => p.name === name);\r\n if (displayName !== null) {\r\n displayNames.push(displayName!.displayName);\r\n }\r\n });\r\n return displayNames;\r\n };\r\n\r\n const returnFilteredProducts = () => {\r\n const products: string[] = [];\r\n\r\n workItems\r\n .forEach((wi) => wi.products.split(',')\r\n .forEach((p) => {\r\n if (p !== null && p !== '' && p !== '-' && products.find((product) => product === p) === undefined) products.push(p);\r\n }));\r\n\r\n return products.sort((a, b) => (a.toLowerCase() > b.toLowerCase() ? 1 : -1));\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n {headCells.map((cell) => (\r\n \r\n {} : () => onSort(cell.id)}\r\n >\r\n {cell.label}\r\n {orderBy === cell.id ? (\r\n \r\n {order === 'desc' ? 'sorted descending' : 'sorted ascending'}\r\n \r\n ) : null}\r\n \r\n \r\n ))}\r\n \r\n \r\n Reset ordering}>\r\n dispatch(clearSort())} size=\"large\">\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 if (newValue != null) {\r\n onFilter(() => {\r\n const NamesOfSelectedProjects: string[] = [];\r\n newValue.forEach((x: string) => {\r\n const selectedProject = availableProductLines.find((y) => y.displayName === x);\r\n if (selectedProject !== undefined) {\r\n NamesOfSelectedProjects.push(selectedProject.name);\r\n }\r\n });\r\n dispatch(setProductLinesToSearch([...NamesOfSelectedProjects]));\r\n dispatch(setProductLinesToFilter([...NamesOfSelectedProjects]));\r\n });\r\n }\r\n }}\r\n options={[\r\n // @ts-ignore\r\n ...new Set(\r\n workItems\r\n .filter((x) => x.productLine !== '-')\r\n .map((x) => x.productLineDisplayName)\r\n .sort((a, b) => (a.toLowerCase() > b.toLowerCase() ? 1 : -1)),\r\n ),\r\n ]}\r\n />\r\n \r\n \r\n \r\n \r\n {\r\n if (newValue != null) {\r\n onFilter(() => dispatch(setProducts([...newValue])));\r\n }\r\n }}\r\n options={[\r\n // @ts-ignore\r\n ...new Set(returnFilteredProducts()),\r\n ]}\r\n />\r\n \r\n \r\n \r\n \r\n {\r\n if (newValue != null) {\r\n onFilter(() => dispatch(setVersions([...newValue])));\r\n }\r\n }}\r\n options={[\r\n // @ts-ignore\r\n ...new Set(\r\n workItems\r\n .filter((x) => x.version !== '-')\r\n .map((x) => x.version)\r\n .sort(),\r\n ),\r\n ]}\r\n />\r\n \r\n \r\n \r\n \r\n {\r\n if (newValue != null) {\r\n onFilter(() => dispatch(setComponents([...newValue])));\r\n }\r\n }}\r\n options={[\r\n // @ts-ignore\r\n ...new Set(\r\n workItems\r\n .filter((x) => x.component !== '-')\r\n .map((x) => x.component)\r\n .sort(),\r\n ),\r\n ]}\r\n />\r\n \r\n \r\n \r\n \r\n onFilter(() => dispatch(setTitle(newValue ?? '')))}\r\n options={[]}\r\n fullWidth\r\n PaperComponent={({ children }) => (\r\n {children}\r\n )}\r\n // eslint-disable-next-line react/jsx-props-no-spreading\r\n renderInput={(params) => }\r\n />\r\n \r\n \r\n \r\n \r\n onFilter(() => dispatch(setId(newValue ?? '')))}\r\n options={[]}\r\n fullWidth\r\n PaperComponent={({ children }) => (\r\n {children}\r\n )}\r\n // eslint-disable-next-line react/jsx-props-no-spreading\r\n renderInput={(params) => }\r\n />\r\n \r\n \r\n \r\n \r\n value.map((option: string, index: number) => (\r\n {\r\n if (option.toLowerCase().includes('added')) {\r\n return ();\r\n }\r\n if (option.toLowerCase().includes('fixed')) {\r\n return ();\r\n }\r\n return undefined;\r\n }}\r\n label={option.toLowerCase().includes('added') ? 'Feature added' : 'Bug fixed'}\r\n // eslint-disable-next-line react/jsx-props-no-spreading\r\n {...getTagProps({ index })}\r\n />\r\n ))}\r\n value={search.types}\r\n onChange={(event: any, newValue: any) => {\r\n if (newValue != null) {\r\n onFilter(() => dispatch(setTypes([...newValue])));\r\n }\r\n }}\r\n options={[\r\n // @ts-ignore\r\n ...new Set(\r\n workItems\r\n .filter((x) => x.type !== '-')\r\n .map((x) => TypeParser.parseType(x.type))\r\n .sort(),\r\n ),\r\n ]}\r\n renderOption={(p: any, option: any) => {\r\n console.warn(p, option, option.indexOf('Fixed'));\r\n return (\r\n // eslint-disable-next-line react/jsx-props-no-spreading\r\n
  • {option.indexOf('Fixed') > -1 ? : }
  • \r\n );\r\n }}\r\n />\r\n
    \r\n
    \r\n \r\n \r\n {\r\n if (newValue != null) {\r\n onFilter(() => dispatch(setReportedVersion([...newValue])));\r\n }\r\n }}\r\n options={[\r\n // @ts-ignore\r\n ...new Set(\r\n workItems\r\n .filter((x) => x.reportedVersion !== '-')\r\n .map((x) => x.reportedVersion)\r\n .sort(),\r\n ),\r\n ]}\r\n />\r\n \r\n \r\n \r\n \r\n {\r\n if (newValue != null) onFilter(() => dispatch(setTags([...newValue])));\r\n }}\r\n options={getFilteredTags(workItems)}\r\n />\r\n \r\n \r\n \r\n \r\n onFilter(() => dispatch(setDate(newValue ?? '')))}\r\n options={[]}\r\n fullWidth\r\n PaperComponent={({ children }) => (\r\n {children}\r\n )}\r\n // eslint-disable-next-line react/jsx-props-no-spreading\r\n renderInput={(params) => }\r\n />\r\n \r\n \r\n \r\n \r\n {\r\n if (newValue != null) {\r\n onFilter(() => dispatch(setDevStates([...newValue])));\r\n }\r\n }}\r\n options={[\r\n // @ts-ignore\r\n ...new Set(\r\n workItems\r\n .filter((x) => x.developmentStatus !== '-')\r\n .map((x) => x.developmentStatus)\r\n .sort((a, b) => (a.toLowerCase() > b.toLowerCase() ? 1 : -1)),\r\n ),\r\n ]}\r\n />\r\n \r\n \r\n \r\n \r\n {\r\n if (newValue != null) {\r\n onFilter(() => dispatch(setIncidentNumbers([...newValue])));\r\n }\r\n }}\r\n options={[\r\n // @ts-ignore\r\n ...new Set(returnFilteredIncidentNumbers()),\r\n ]}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n Reset filter}>\r\n onFilter(() => dispatch(resetSearch()))} size=\"large\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n );\r\n}\r\n","import React from 'react';\nimport createStyles from '@mui/styles/createStyles';\nimport makeStyles from '@mui/styles/makeStyles';\n\nconst useStyles = makeStyles(() => createStyles({\n root: {\n width: '100%',\n height: '64px',\n backgroundImage: `url(${process.env.PUBLIC_URL}/footer-background.png)`,\n backgroundPosition: 'bottom',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n footerText: {\n color: 'white',\n margin: '0px 7px',\n },\n footerLink: {\n color: 'white',\n textDecoration: 'none',\n '&:hover': {\n textShadow: '0 0 5px #ffffff',\n color: 'white',\n textDecoration: 'none',\n },\n },\n}));\n\nfunction CustomFooter() {\n const classes = useStyles();\n\n return (\n
    \n

    \n ©\n {' '}\n {new Date().getFullYear()}\n {' '}\n VertiGIS. All rights reserved.\n

    \n

    |

    \n \n Privacy Center\n \n

    |

    \n \n Imprint\n \n
    \n );\n}\n\nexport default CustomFooter;\n","import React from 'react';\nimport createStyles from '@mui/styles/createStyles';\nimport { Link } from 'react-router-dom';\nimport { Typography, Theme } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n link: {\n textDecoration: 'none',\n color: theme.palette.primary.contrastText,\n '&:hover': {\n textDecoration: 'none',\n color: theme.palette.primary.contrastText,\n },\n },\n title: {\n flexGrow: 1,\n display: 'none',\n [theme.breakpoints.up('sm')]: {\n display: 'block',\n },\n },\n image: {\n marginBottom: '4px',\n height: '35px',\n },\n}));\n\ninterface Props {\n link: string;\n className?: string;\n}\n\n// returns the logo of the website.\n// in case that the link is non existent there wont be a link element.\nfunction HeaderLogo({ link, className = '' }: Props) {\n const classes = useStyles();\n const BuildNumber = 'v1.3.0';\n\n if (link) {\n return (\n \n
    \n \n \"logo\"\n Product Change Logs\n \n

    {BuildNumber}

    \n
    \n \n );\n }\n\n return (\n
    \n
    \n \n \"logo\"\n Product Change Logs\n \n

    {BuildNumber}

    \n
    \n
    \n );\n}\n\nHeaderLogo.defaultProps = {\n className: '',\n};\n\nexport default HeaderLogo;\n","import * as React from 'react';\nimport {\n Checkbox,\n FormHelperText,\n List,\n ListItemText,\n ListSubheader,\n Skeleton,\n ToggleButton,\n Typography,\n} from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { useHistory } from 'react-router-dom';\nimport {\n ProductLine,\n selectAvailableProductLines,\n selectFilter,\n setProductLines,\n toggleSelectedProductLine,\n} from './filterSlice';\nimport { useAppDispatch, useAppSelector } from '../../app/hooks';\nimport { selectStatus } from '../system/systemSlice';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n width: '100%',\n // maxWidth: 360,\n // @ts-ignore\n backgroundColor: theme.palette.background.paper,\n position: 'relative',\n // overflowY: 'scroll',\n // maxHeight: 220,\n height: 'auto',\n },\n listSection: {\n backgroundColor: 'inherit',\n },\n ul: {\n backgroundColor: 'inherit',\n padding: 0,\n },\n subHeader: {\n textAlign: 'left',\n paddingLeft: 4,\n },\n listItem: {\n paddingLeft: 0,\n },\n listItemAll: {\n paddingLeft: 0,\n borderBottom: '1px solid lightgray',\n display: 'flex',\n },\n allText: {\n textAlign: 'center',\n paddingBottom: 7.5,\n paddingTop: 7.5,\n color: 'black',\n paddingLeft: 26,\n },\n checkBox: {\n paddingTop: 0,\n paddingBottom: 0,\n },\n selectOneOptionText: {\n color: 'red',\n },\n // hideSelectOneOptionText: {\n // // visibility: 'hidden',\n // background: 'red',\n // },\n toggleButton: {\n width: '150px',\n margin: '5px',\n fontSize: '9pt',\n textTransform: 'none',\n },\n}));\n\nexport default function ProductLinesFilterForm() {\n const filter = useAppSelector(selectFilter);\n const availableProductLines = useAppSelector(selectAvailableProductLines);\n const status = useAppSelector(selectStatus);\n const classes = useStyles();\n const dispatch = useAppDispatch();\n const history = useHistory();\n const [infoTextVisible, setInfoTextVisible] = React.useState(true);\n\n React.useEffect(() => {\n if (!history.location.pathname.includes('workitems')) {\n setInfoTextVisible(false);\n }\n }, []);\n\n const onProductLineToggle = React.useCallback(\n (value: ProductLine) => dispatch(toggleSelectedProductLine(value.name)),\n [dispatch],\n );\n const allSelected = React.useMemo(\n () => availableProductLines.every((x) => filter.productLines.includes(x.name)),\n [filter.productLines.length, availableProductLines.length],\n );\n const noneSelected = React.useMemo(\n () => filter.productLines.length === 0,\n [filter.productLines.length],\n );\n\n React.useEffect(() => {\n if (!infoTextVisible) {\n setInfoTextVisible(true);\n }\n }, [noneSelected]);\n\n const onSelectAll = React.useCallback(() => {\n if (allSelected) {\n dispatch(setProductLines([]));\n } else {\n dispatch(setProductLines(availableProductLines.map((x) => x.name)));\n }\n }, [dispatch, availableProductLines, allSelected]);\n\n const isLoadingProductLines = React.useMemo(() => status.productLines === 'busy', [status.productLines]);\n\n const renderPlaceholder = React.useCallback(\n () => [0, 1, 2, 3, 4, 5].map((value) => {\n const labelId = `togglebutton-list-label-${value}`;\n return (\n \n }\n disableTypography\n />\n \n );\n }),\n [],\n );\n\n const renderFilteredListItems = React.useCallback(\n (filteredProductLines: ProductLine[]) => (\n \n {filteredProductLines.map((value) => {\n const isSelected = filter.productLines.includes(value.name);\n return (\n onProductLineToggle(value)}\n style={\n isSelected\n ? { backgroundColor: '#138943', color: 'white' }\n : { backgroundColor: 'lightgray' }\n }\n className={classes.toggleButton}\n >\n {value.displayName === '' ? value.name : value.displayName}\n \n );\n })}\n \n ),\n [filter.productLines, onProductLineToggle, classes.listItem, classes.checkBox],\n );\n return (\n
    \n
    \n \n onSelectAll()}\n indeterminate={!allSelected && !noneSelected}\n />\n \n All\n \n \n
    \n }>\n {availableProductLines.length > 0 && !isLoadingProductLines\n ? renderFilteredListItems(availableProductLines.slice().sort())\n : null}\n {isLoadingProductLines && renderPlaceholder()}\n \n {noneSelected && infoTextVisible ? (\n \n Select at least one option\n \n ) : null}\n
    \n );\n}\n","/* eslint-disable react/no-children-prop */\nimport * as React from 'react';\nimport DatePicker from '@mui/lab/DatePicker';\nimport { TextField } from '@mui/material';\nimport { makeStyles } from '@mui/styles';\n\ninterface Props {\n value: Date | null;\n label: string;\n showFormat: boolean;\n // eslint-disable-next-line no-unused-vars\n handleChange: (date: unknown) => void;\n // eslint-disable-next-line react/require-default-props\n inputStyles?: any;\n}\n\nconst useStyles = makeStyles({\n datePicker: {\n '& .MuiPickersModal-dialog': {\n backgroundColor: 'red !important',\n },\n },\n});\n\nexport default function DateFilterBase(props: Props) {\n const {\n value, label, handleChange, showFormat, inputStyles,\n } = props;\n\n const classes = useStyles();\n // checkDateValidation combines the validatioin and the handlechange event together.\n // eslint-disable-next-line no-unused-vars\n const checkDateValidation = (changeDate: (date: unknown) => void, date: Date | null) => {\n changeDate(date);\n if (date !== null) {\n if ((date as any)?.toString() === 'Invalid Date') {\n setError(true);\n } else {\n setError(false);\n }\n }\n };\n\n const [error, setError] = React.useState(false);\n\n return (\n
    \n (\n \n )}\n inputFormat=\"yyyy/MM/dd\"\n mask=\"____/__/__\"\n label={label}\n value={value}\n onChange={(date) => checkDateValidation(handleChange, date)}\n />\n
    \n );\n}\n","import * as React from 'react';\nimport { useAppDispatch, useAppSelector } from '../../app/hooks';\nimport DateFilterBase from './DateFilterBase';\nimport { selectFilter, setFromDate } from './filterSlice';\n\ninterface Props {\n placeholder: string | null;\n showFormat: boolean;\n}\n\nexport default function DateFilterFrom(props: Props) {\n const { placeholder, showFormat } = props;\n const filter = useAppSelector(selectFilter);\n const dispatch = useAppDispatch();\n const handleChange = React.useCallback(\n (date: unknown) => {\n if ((date as any)?.toString() === 'Invalid Date') {\n return;\n }\n dispatch(setFromDate((date as Date)?.getTime() ?? -1));\n },\n [dispatch],\n );\n return (\n \n );\n}\n","import React from 'react';\nimport { useAppSelector, useAppDispatch } from '../../app/hooks';\nimport DateFilterBase from './DateFilterBase';\nimport { selectFilter, setToDate } from './filterSlice';\n\ninterface Props {\n placeholder: string | null;\n showFormat: boolean;\n}\n\nexport default function DateFilterTo(props: Props) {\n const { placeholder, showFormat } = props;\n const filter = useAppSelector(selectFilter);\n const dispatch = useAppDispatch();\n const handleChange = React.useCallback(\n (date: unknown) => {\n if ((date as any)?.toString() === 'Invalid Date') {\n return;\n }\n dispatch(setToDate((date as Date)?.getTime() ?? -1));\n },\n [dispatch],\n );\n return (\n \n );\n}\n","import * as React from 'react';\r\nimport createStyles from '@mui/styles/createStyles';\r\nimport makeStyles from '@mui/styles/makeStyles';\r\nimport {\r\n InputBase, Theme, Button, Paper, Typography,\r\n} from '@mui/material';\r\nimport SearchIcon from '@mui/icons-material/Search';\r\nimport clsx from 'clsx';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useAppDispatch, useAppSelector } from '../hooks';\r\nimport { selectSearch, setGeneralSearchText, setProductLines } from '../../features/search/searchSlice';\r\nimport ProductLinesFilterForm from '../../features/filter/ProductLinesFilterForm';\r\nimport DateFilterFrom from '../../features/filter/DateFilterFrom';\r\nimport DateFilterTo from '../../features/filter/DateFilterTo';\r\nimport {\r\n selectAvailableProductLines,\r\n applyFilter,\r\n selectFilter,\r\n setWorkItemTypeBug,\r\n setWorkItemTypeUserStory,\r\n setFromDate,\r\n setToDate,\r\n validate,\r\n} from '../../features/filter/filterSlice';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => createStyles({\r\n root: {\r\n margin: 'auto',\r\n minHeight: 'calc(100vh - 160px)',\r\n // marginTop: 96,\r\n textAlign: 'center',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n },\r\n filterForm: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n padding: 25,\r\n minWidth: '35%',\r\n maxWidth: 600,\r\n borderColor: 'white',\r\n },\r\n formRoot: {\r\n textAlign: 'left',\r\n alignItems: 'center',\r\n flexDirection: 'column',\r\n marginTop: 20,\r\n marginBottom: 20,\r\n },\r\n searchBar: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n minWidth: '40%',\r\n },\r\n search: {\r\n border: 'lightgrey 1px solid',\r\n borderTopLeftRadius: 5,\r\n borderBottomLeftRadius: 5,\r\n display: 'flex',\r\n width: '100%',\r\n backgroundColor: theme.palette.background.paper,\r\n },\r\n searchIcon: {\r\n padding: theme.spacing(2),\r\n height: '100%',\r\n pointerEvents: 'none',\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n position: 'relative',\r\n alignSelf: 'center',\r\n },\r\n searchAnimation: {\r\n transition: theme.transitions.create('width'),\r\n },\r\n searchAnimationOpen: {\r\n width: 0,\r\n },\r\n searchAnimationClosed: {\r\n width: 40,\r\n },\r\n inputRoot: {\r\n color: 'inherit',\r\n width: '100%',\r\n },\r\n inputInput: {\r\n padding: theme.spacing(1, 1, 1, 0),\r\n width: 'inherit',\r\n },\r\n removeInputButtonCollapsed: {\r\n visibility: 'collapse',\r\n padding: 18,\r\n },\r\n removeInputButtonVisible: {\r\n visibility: 'visible',\r\n padding: 18,\r\n },\r\n productLinePlacer: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n margin: '20px',\r\n },\r\n list: {\r\n width: '100%',\r\n },\r\n productLineList: {\r\n paddingBottom: 5,\r\n },\r\n showLabelList: {\r\n transform: 'translateY(7px)',\r\n paddingBottom: 5,\r\n paddingTop: 5,\r\n },\r\n dateFilter: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexWrap: 'wrap',\r\n justifyContent: 'space-between',\r\n minWidth: '40%',\r\n },\r\n dateForm: {\r\n width: '50%',\r\n },\r\n dateFromPadding: {\r\n paddingTop: 20,\r\n paddingRight: 20,\r\n },\r\n dateToPadding: {\r\n paddingTop: 20,\r\n paddingLeft: 20,\r\n },\r\n submitButton: {\r\n marginTop: 20,\r\n padding: '5px 40px',\r\n },\r\n}));\r\n\r\ninterface Props {\r\n // eslint-disable-next-line react/require-default-props\r\n executeOnOpen?: () => void;\r\n // eslint-disable-next-line react/require-default-props\r\n executeOnClose?: () => void;\r\n}\r\n\r\nexport default function SearchForm(props: Props) {\r\n const classes = useStyles();\r\n const searchBarRef = React.useRef(null);\r\n const dispatch = useAppDispatch();\r\n const history = useHistory();\r\n const search = useAppSelector(selectSearch);\r\n const availableProductLines = useAppSelector(selectAvailableProductLines);\r\n const filter = useAppSelector(selectFilter);\r\n const { executeOnOpen, executeOnClose } = props;\r\n\r\n const [focused, setFocused] = React.useState(false);\r\n const searchAnimationClass = focused\r\n ? classes.searchAnimationOpen\r\n : classes.searchAnimationClosed;\r\n\r\n const handleSearch = () => {\r\n dispatch(setWorkItemTypeBug(true));\r\n dispatch(setWorkItemTypeUserStory(true));\r\n dispatch(setFromDate(-1));\r\n dispatch(setToDate(-1));\r\n dispatch(applyFilter());\r\n history.push('/workitems');\r\n if (executeOnClose !== undefined) {\r\n executeOnClose();\r\n }\r\n };\r\n\r\n const goButtonClick = () => {\r\n const currentSearchParams = new URLSearchParams(window.location.search);\r\n\r\n dispatch(applyFilter());\r\n const NamesOfSelectedProductLines: string[] = [];\r\n filter.productLines.forEach((productline) => {\r\n const selectedProject = availableProductLines.find((x) => x.name === productline);\r\n if (selectedProject !== undefined) {\r\n NamesOfSelectedProductLines.push(selectedProject.name);\r\n }\r\n });\r\n dispatch(setProductLines([...NamesOfSelectedProductLines]));\r\n history.push({\r\n pathname: '/workitems',\r\n search: currentSearchParams.toString(),\r\n });\r\n if (executeOnClose !== undefined) {\r\n executeOnClose();\r\n }\r\n };\r\n\r\n React.useEffect(() => {\r\n if (executeOnOpen !== undefined) {\r\n executeOnOpen();\r\n }\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n dispatch(validate());\r\n }, [filter]);\r\n\r\n return (\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n setFocused(true)}\r\n onBlur={() => setFocused(false)}\r\n placeholder=\"search for keyword, productline, ticket number, ...\"\r\n classes={{\r\n root: classes.inputRoot,\r\n input: classes.inputInput,\r\n }}\r\n onChange={(e) => {\r\n dispatch(setGeneralSearchText(e.target.value));\r\n }}\r\n onKeyUp={(e) => {\r\n if (e.keyCode === 13) {\r\n handleSearch();\r\n }\r\n }}\r\n value={search.generalSearchText}\r\n inputProps={{ 'aria-label': 'search' }}\r\n />\r\n {\r\n dispatch(setGeneralSearchText(''));\r\n searchBarRef.current?.focus();\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n Productlines\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
    \r\n
    \r\n
    \r\n \r\n GO\r\n \r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport AppBar from '@mui/material/AppBar';\r\nimport Toolbar from '@mui/material/Toolbar';\r\nimport { IconButton, Popover, Theme } from '@mui/material';\r\nimport createStyles from '@mui/styles/createStyles';\r\nimport makeStyles from '@mui/styles/makeStyles';\r\nimport { Menu, Clear } from '@mui/icons-material';\r\nimport { useAppDispatch, useAppSelector, useDeepEffect } from '../../hooks';\r\nimport {\r\n selectFilter,\r\n selectProductLinesIsSelected,\r\n validate,\r\n} from '../../../features/filter/filterSlice';\r\nimport CustomFooter from '../footer';\r\nimport HeaderLogo from '../HeaderLogo';\r\nimport SearchForm from '../SearchForm';\r\n\r\nconst drawerWidth = 350;\r\n\r\nconst useStyles = makeStyles((theme: Theme) => createStyles({\r\n root: {\r\n flexGrow: 1,\r\n },\r\n appBar: {\r\n zIndex: theme.zIndex.drawer + 1,\r\n transition: theme.transitions.create(['width', 'margin'], {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n }),\r\n backgroundImage: 'url(\"backdrop.png\")',\r\n backgroundSize: 'cover',\r\n },\r\n headerPosition: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n appBarShift: {\r\n marginLeft: drawerWidth,\r\n width: `calc(100% - ${drawerWidth}px)`,\r\n transition: theme.transitions.create(['width', 'margin'], {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.enteringScreen,\r\n }),\r\n },\r\n hide: {\r\n display: 'none',\r\n },\r\n drawer: {\r\n width: drawerWidth,\r\n flexShrink: 0,\r\n },\r\n drawerPaper: {\r\n width: drawerWidth,\r\n },\r\n drawerHeader: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: theme.spacing(0, 1),\r\n // necessary for content to be below app bar\r\n ...theme.mixins.toolbar,\r\n justifyContent: 'flex-end',\r\n },\r\n toolbar: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-start',\r\n padding: theme.spacing(0, 1),\r\n // necessary for content to be below app bar\r\n ...theme.mixins.toolbar,\r\n },\r\n menuButton: {\r\n marginRight: theme.spacing(2),\r\n position: 'absolute',\r\n },\r\n content: {\r\n marginTop: theme.spacing(4),\r\n minHeight: 'calc(100vh - 96px)',\r\n flexGrow: 1,\r\n padding: theme.spacing(3),\r\n transition: theme.transitions.create('margin', {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n }),\r\n marginLeft: -drawerWidth,\r\n },\r\n contentShift: {\r\n transition: theme.transitions.create('margin', {\r\n easing: theme.transitions.easing.easeOut,\r\n duration: theme.transitions.duration.enteringScreen,\r\n }),\r\n marginLeft: 0,\r\n },\r\n noBorder: {\r\n '& td': {\r\n borderBottom: 'none',\r\n borderTop: 'none',\r\n },\r\n },\r\n buttonDiv: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-evenly',\r\n width: '100%',\r\n },\r\n filterRoot: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n },\r\n formRoot: {\r\n paddingTop: 10,\r\n paddingBottom: 10,\r\n display: 'flex',\r\n alignItems: 'center',\r\n flexDirection: 'column',\r\n width: '100vw',\r\n },\r\n list: {\r\n width: 210,\r\n paddingBottom: 5,\r\n },\r\n showLabelList: {\r\n transform: 'translateY(7px)',\r\n paddingBottom: 5,\r\n paddingTop: 5,\r\n },\r\n placeHolder: {\r\n width: '100%',\r\n display: 'none',\r\n [theme.breakpoints.up('sm')]: {\r\n display: 'block',\r\n },\r\n },\r\n dateFilter: {\r\n paddingTop: 8,\r\n paddingBottom: 8,\r\n paddingLeft: 20,\r\n width: 225,\r\n display: 'none',\r\n [theme.breakpoints.up('sm')]: {\r\n display: 'block',\r\n },\r\n },\r\n filterIcon: {\r\n marginLeft: 15,\r\n marginRight: 30,\r\n color: 'white',\r\n },\r\n applyButton: {\r\n margin: 10,\r\n marginBottom: 3,\r\n },\r\n helpLink: {\r\n width: 35,\r\n paddingLeft: '12px',\r\n },\r\n helpIcon: {\r\n width: 'inherit',\r\n height: 'inherit',\r\n },\r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n backgroundColor: 'rgba(0, 0, 0, 0.5)', // Semi-transparent gray background\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: 999,\r\n },\r\n popup: {\r\n outline: 'none',\r\n backgroundColor: theme.palette.background.paper,\r\n boxShadow: theme.shadows[5],\r\n padding: theme.spacing(2),\r\n borderRadius: theme.shape.borderRadius,\r\n textAlign: 'center',\r\n },\r\n closePopupButton: {\r\n position: 'absolute',\r\n top: '5px',\r\n right: '5px',\r\n },\r\n}));\r\n\r\ninterface Props {\r\n children: any;\r\n}\r\n\r\nexport default function ApplicationBar(props: Props) {\r\n const classes = useStyles();\r\n const dispatch = useAppDispatch();\r\n const [showFilterPopup, setShowFilterPopup] = React.useState(false);\r\n\r\n const { children } = props;\r\n\r\n const toggleFilterPopup = () => {\r\n setShowFilterPopup(!showFilterPopup);\r\n };\r\n\r\n const hideFilterPopup = () => {\r\n setShowFilterPopup(false);\r\n };\r\n\r\n const filter = useAppSelector(selectFilter);\r\n\r\n const projectsIsSelected = useAppSelector(selectProductLinesIsSelected);\r\n\r\n useDeepEffect(() => {\r\n dispatch(validate());\r\n }, [filter, projectsIsSelected]);\r\n\r\n return (\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 \r\n \r\n \r\n \r\n {showFilterPopup && (\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
    {children}
    \r\n \r\n
    \r\n );\r\n}\r\n","import { Paper } from '@mui/material';\r\nimport createStyles from '@mui/styles/createStyles';\r\nimport makeStyles from '@mui/styles/makeStyles';\r\nimport * as React from 'react';\r\n\r\ninterface Props {\r\n children: any;\r\n // eslint-disable-next-line react/require-default-props\r\n toolbar?: any;\r\n}\r\n\r\nconst useStyles = makeStyles(() => createStyles({\r\n layoutBorder: {\r\n marginTop: 40,\r\n marginLeft: 350,\r\n marginRight: 50,\r\n },\r\n}));\r\n\r\nexport default function Layout({ children, toolbar = null }: Props) {\r\n const classes = useStyles();\r\n return (\r\n
    \r\n {toolbar}\r\n {children}\r\n
    \r\n );\r\n}\r\n","import { Theme } from '@mui/material';\nimport createStyles from '@mui/styles/createStyles';\nimport makeStyles from '@mui/styles/makeStyles';\n\n// eslint-disable-next-line import/prefer-default-export\nexport const useStyles = makeStyles((theme: Theme) => createStyles({\n visuallyHidden: {\n border: 0,\n clip: 'rect(0 0 0 0)',\n height: 1,\n margin: -1,\n overflow: 'hidden',\n padding: 0,\n position: 'absolute',\n top: 20,\n width: 1,\n },\n selectLabel: {\n marginTop: 14,\n },\n displayedRows: {\n marginTop: 14,\n },\n iconContainer: {\n display: 'flex',\n },\n exportIcon: {\n marginLeft: 'auto',\n order: 2,\n },\n right: {\n marginLeft: 'auto',\n display: 'flex',\n },\n noResultsCell: {\n textAlign: 'center',\n },\n noResultsIcon: {\n height: 165,\n width: 165,\n color: 'lightgray',\n },\n noResultsText: {\n color: 'lightgray',\n },\n chip: {\n marginTop: 8,\n marginRight: 5,\n collapsedSize: 0,\n },\n viewText: {\n textDecorationLine: 'underline',\n fontStyle: 'italic',\n },\n adminView: {\n paddingTop: 4,\n '&:hover': {\n cursor: 'pointer',\n },\n },\n filterButton: {\n display: 'none',\n [theme.breakpoints.up('sm')]: {\n display: 'block',\n },\n },\n noLinkStyle: {\n color: 'black',\n '&:hover': {\n color: 'black',\n textDecoration: 'none',\n },\n },\n mobileProjectButton: {\n display: 'block',\n [theme.breakpoints.up('sm')]: {\n display: 'none',\n },\n },\n collapse: {\n aline: 'left',\n },\n tableContent: {\n height: 'calc(100vh - 300px)',\n },\n}));\n","import React from 'react';\nimport { CSVLink } from 'react-csv';\nimport Chip from '@mui/material/Chip';\nimport clsx from 'clsx';\nimport Tooltip from '@mui/material/Tooltip';\nimport { WorkItem } from '../../../features/workitems/Types';\nimport { useStyles } from '../../../features/workitems/WorkItems.Styles';\n\ninterface Props {\n workItems: WorkItem[];\n}\n\nfunction extractContent(s: string) {\n const span = document.createElement('span');\n span.innerHTML = s;\n return span.textContent || span.innerText;\n}\n\n// exports a link that provides the current list as a csv download\nfunction CSVExporter(props: Props) {\n const classes = useStyles();\n const { workItems } = props;\n const data: any = [];\n\n // the variable columns defines which values are written into the csv file.\n const columns = [\n 'productLine',\n 'products',\n 'version',\n 'component',\n 'title',\n 'id',\n 'type',\n 'reportedVersion',\n 'tags',\n 'date',\n 'developmentStatus',\n 'incidentNumber',\n ];\n\n // adds a workitem as a row to the data variable\n const addToData = (wi: WorkItem) => {\n const row: string[] = [];\n columns.forEach((column) => row.push((wi[column as keyof WorkItem]).toString()));\n row[4] = extractContent(row[4]); // title\n row[7] = row[7].replaceAll(';', ','); // reportedVersion\n if (parseInt(row[9], 10) > 0) { // date\n row[9] = new Date(parseInt(row[9], 10)).toISOString().split('T')[0].toString();\n } else {\n row[9] = '';\n }\n data.push(row);\n };\n\n workItems.forEach((wi) => addToData(wi));\n\n return (\n /* eslint-disable-next-line react/jsx-props-no-spreading */\n (c !== 'products' ? c : 'product'))}\n >\n \n \n \n \n );\n}\n\nexport default CSVExporter;\n","/* eslint-disable no-unused-vars */\r\nimport * as React from 'react';\r\nimport {\r\n Alert, Grow, AlertTitle, IconButton,\r\n} from '@mui/material';\r\nimport { Close } from '@mui/icons-material';\r\nimport { useHistory } from 'react-router-dom';\r\nimport {\r\n selectAvailableProductLines,\r\n setProductLines as setProductLinesToFilter,\r\n applyFilter,\r\n setToDate,\r\n setFromDate,\r\n setWorkItemTypeUserStory,\r\n setWorkItemTypeBug,\r\n fetchProductLines,\r\n selectFilter,\r\n} from '../../features/filter/filterSlice';\r\nimport { useAppDispatch, useAppSelector, useQuery } from '../../app/hooks';\r\nimport {\r\n selectSearch,\r\n setComponents,\r\n setDevStates,\r\n setGeneralSearchText,\r\n setId,\r\n setIncidentNumbers,\r\n setProductLines as setProductLinesToSearch,\r\n setReportedVersion,\r\n setTags,\r\n setDate,\r\n setTitle,\r\n setTypes,\r\n setVersions,\r\n setProducts,\r\n} from '../search/searchSlice';\r\n// This component handles the url parameters.\r\n// This component reads the url parameters and sets the filters accordingly.\r\n// In addition, it sets the url parameters depending on which filters have been set.\r\nfunction ParameterHandler() {\r\n const [error, setError] = React.useState('');\r\n const availableProductLines = useAppSelector(selectAvailableProductLines);\r\n const search = useAppSelector(selectSearch);\r\n const query = useQuery();\r\n const history = useHistory();\r\n const dispatch = useAppDispatch();\r\n const filter = useAppSelector(selectFilter);\r\n const productLines = query.get('productLine')?.split(';');\r\n const products = query.get('product')?.split(';');\r\n const versions = query.get('version')?.split(';');\r\n const components = query.get('component')?.split(';');\r\n const titles = query.get('title');\r\n const ids = query.get('id');\r\n const types = query.get('type')?.split(';');\r\n const reportedVersions = query.get('reportedversion')?.split(';');\r\n const tags = query.get('tag')?.split(';');\r\n const releasedates = query.get('releasedate');\r\n const states = query.get('state')?.split(';');\r\n const incidentNumbers = query.get('incidentnumber')?.split(';');\r\n const searchParams = query.get('search');\r\n const dateFrom = query.get('datefrom');\r\n const dateTo = query.get('dateto');\r\n\r\n // checks if the url has parameters.\r\n const HasParameters = () => {\r\n if (\r\n productLines == null\r\n && products == null\r\n && versions == null\r\n && components == null\r\n && titles == null\r\n && ids == null\r\n && types == null\r\n && reportedVersions == null\r\n && tags == null\r\n && releasedates == null\r\n && states == null\r\n && incidentNumbers == null\r\n && searchParams == null\r\n && dateFrom == null\r\n && dateTo == null\r\n ) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n\r\n // checks if the filter has settings\r\n const HasFilterSettings = () => {\r\n if (\r\n filter.productLines.length > 0\r\n || search.products.length > 0\r\n || search.versions.length > 0\r\n || search.components.length > 0\r\n || search.title.length > 0\r\n || search.id.length > 0\r\n || search.types.length > 0\r\n || search.reportedVersions.length > 0\r\n || search.tags.length > 0\r\n || search.date.length > 0\r\n || search.devStates.length > 0\r\n || search.incidentNumbers.length > 0\r\n || search.generalSearchText.length > 0\r\n || filter.dateRange.from > -1\r\n || filter.dateRange.to > -1\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n // handles a change on the filter to set the parameters.\r\n React.useEffect(() => {\r\n if (HasFilterSettings()) {\r\n const productLineDisplayNames: string[] = availableProductLines\r\n .filter((productLine) => filter.productLines.includes(productLine.name))\r\n .map((productLine) => productLine.displayName);\r\n\r\n history.push({\r\n search: `${new URLSearchParams({\r\n ...(filter.productLines.length > 0\r\n && filter.productLines.length < availableProductLines.length && {\r\n productLine: productLineDisplayNames.join(';'),\r\n }),\r\n ...(search.products.length > 0 && { product: search.products.join(';') }),\r\n ...(search.versions.length > 0 && { version: search.versions.join(';') }),\r\n ...(search.components.length > 0 && { component: search.components.join(';') }),\r\n ...(search.title.length > 0 && { title: search.title }),\r\n ...(search.id.length > 0 && { id: search.id }),\r\n ...(search.types.length > 0 && { type: search.types.join(';') }),\r\n ...(search.reportedVersions.length > 0 && {\r\n reportedversion: search.reportedVersions.join(';'),\r\n }),\r\n ...(search.tags.length > 0 && { tag: search.tags.join(';') }),\r\n ...(search.date.length > 0 && { releasedate: search.date }),\r\n ...(search.devStates.length > 0 && { state: search.devStates.join(';') }),\r\n ...(search.incidentNumbers.length > 0 && {\r\n incidentnumber: search.incidentNumbers.join(';'),\r\n }),\r\n ...(search.generalSearchText.length > 0 && { search: search.generalSearchText }),\r\n ...(filter.dateRange.from > 0 && {\r\n datefrom: new Date(filter.dateRange.from).toISOString(),\r\n }),\r\n ...(filter.dateRange.to > 0 && {\r\n dateto: new Date(filter.dateRange.to).toISOString(),\r\n }),\r\n }).toString()}`,\r\n });\r\n }\r\n }, [search, filter.dateRange, filter.productLines, availableProductLines.length]);\r\n\r\n // handles a parameterized-URL-call\r\n // This useEffect sets the filter depending on what the parameters are.\r\n React.useEffect(() => {\r\n if (HasParameters() && availableProductLines.length > 0) {\r\n if (productLines !== undefined && productLines.length > 0) {\r\n const namesOfSelectedProductLines: string[] = [];\r\n productLines.forEach((productLine) => {\r\n const selectedProductLine = availableProductLines.find((x) => x.displayName === productLine);\r\n if (selectedProductLine !== undefined) {\r\n namesOfSelectedProductLines.push(selectedProductLine.name);\r\n }\r\n });\r\n dispatch(setProductLinesToSearch([...namesOfSelectedProductLines]));\r\n dispatch(setProductLinesToFilter([...namesOfSelectedProductLines]));\r\n }\r\n if (products !== undefined && products.length > 0) {\r\n dispatch(setProducts([...products]));\r\n }\r\n if (versions !== undefined && versions.length > 0) {\r\n dispatch(setVersions([...versions]));\r\n }\r\n if (components !== undefined && components.length > 0) {\r\n dispatch(setComponents([...components]));\r\n }\r\n if (titles !== undefined && titles !== null && titles.length > 0) {\r\n dispatch(setTitle(titles));\r\n }\r\n if (ids !== undefined && ids !== null && ids.length > 0) {\r\n dispatch(setId(ids));\r\n }\r\n if (types !== undefined && types.length > 0) {\r\n dispatch(setTypes([...types]));\r\n }\r\n if (reportedVersions !== undefined && reportedVersions.length > 0) {\r\n dispatch(setReportedVersion([...reportedVersions]));\r\n }\r\n if (tags !== undefined && tags.length > 0) {\r\n dispatch(setTags([...tags]));\r\n }\r\n if (releasedates !== undefined && releasedates) {\r\n dispatch(setDate(releasedates));\r\n }\r\n if (states !== undefined && states.length > 0) {\r\n dispatch(setDevStates([...states]));\r\n }\r\n if (incidentNumbers !== undefined && incidentNumbers.length > 0) {\r\n dispatch(setIncidentNumbers([...incidentNumbers]));\r\n }\r\n\r\n if (searchParams != null) dispatch(setGeneralSearchText(searchParams));\r\n\r\n if (productLines === undefined) {\r\n dispatch(setProductLinesToFilter(availableProductLines.map((p) => p.name)));\r\n }\r\n if (dateFrom !== undefined && dateFrom) {\r\n const dateString = dateFrom;\r\n const dateObj = new Date(dateString);\r\n const timestamp = dateObj.getTime();\r\n dispatch(setFromDate(timestamp));\r\n }\r\n if (dateTo !== undefined && dateTo) {\r\n const dateString = dateTo;\r\n const dateObj = new Date(dateString);\r\n const timestamp = dateObj.getTime();\r\n dispatch(setToDate(timestamp));\r\n }\r\n\r\n dispatch(setWorkItemTypeBug(true));\r\n dispatch(setWorkItemTypeUserStory(true));\r\n }\r\n }, [availableProductLines.length]);\r\n\r\n React.useEffect(() => {\r\n dispatch(fetchProductLines());\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n dispatch(applyFilter());\r\n }, [filter.productLines]);\r\n return (\r\n \r\n setError('')}>\r\n \r\n \r\n )}\r\n >\r\n Invalid URL Parameters\r\n {error}\r\n \r\n \r\n );\r\n}\r\n\r\nexport default ParameterHandler;\r\n","import jsPDF from 'jspdf';\nimport autoTable from 'jspdf-autotable';\nimport { WorkItem } from '../../../features/workitems/Types';\n\nexport default async function GeneratePdf(workItems: WorkItem[]) {\n // eslint-disable-next-line new-cap\n const doc = new jsPDF({\n orientation: 'landscape',\n unit: 'mm',\n format: 'a4',\n compress: true,\n });\n\n // Add header on first page\n doc.addImage(`${process.env.PUBLIC_URL}/backdrop.png`, 'PNG', 5, 5, 287, 30, '');\n doc.setTextColor('#FFFFFF');\n doc.setFontSize(25);\n doc.setFont('Helvetica', '');\n doc.text('Verti Product Changelogs', 10, 23);\n doc.setFont('Helvetica', 'bold');\n doc.text('GIS', 28, 23);\n\n // Add table\n autoTable(doc, {\n head: [\n [\n 'ProductLine',\n 'Product',\n 'Version',\n 'Component',\n 'Title',\n 'Id',\n 'Type',\n 'Reported Version',\n 'Tags',\n 'Date',\n 'Status',\n 'Incident Nr.',\n ],\n ],\n body: workItems.map((wi) => [\n wi.productLine,\n wi.products,\n wi.version,\n wi.component,\n wi.shortTitle,\n wi.id.toString(),\n wi.type,\n wi.reportedVersion,\n wi.tags,\n new Date(wi.date).toLocaleDateString().replaceAll('.', '-'),\n wi.developmentStatus,\n wi.incidentNumber.replaceAll(',', ', '),\n ]),\n headStyles: {\n fontStyle: 'bold',\n minCellWidth: 25,\n fillColor: [18, 138, 68],\n },\n columnStyles: {\n 0: {\n cellWidth: 18,\n },\n 1: {\n cellWidth: 20,\n },\n 2: {\n cellWidth: 22,\n },\n 3: {\n cellWidth: 25,\n },\n 4: {\n cellWidth: 53,\n },\n 5: {\n cellWidth: 18,\n },\n 6: {\n cellWidth: 13,\n },\n 7: {\n cellWidth: 22,\n },\n 8: {\n cellWidth: 18,\n },\n 9: {\n cellWidth: 18,\n },\n 10: {\n cellWidth: 18,\n },\n 11: {\n cellWidth: 22,\n },\n },\n margin: 0,\n theme: 'striped',\n startY: 40,\n });\n\n // Add pagenumber on end of page\n const pageCount = doc.getNumberOfPages();\n doc.setFont('Helvetica', '');\n doc.setFontSize(9);\n doc.setTextColor('#303030');\n for (let i = 0; i < pageCount; i++) {\n doc.setPage(i);\n const currentPage = doc.getCurrentPageInfo();\n doc.text(`Page: ${currentPage.pageNumber} / ${pageCount}`, 265, 202);\n }\n\n doc.save('VertiGIS_Product_Change_Logs_Download.pdf');\n}\n","/* eslint-disable react/jsx-props-no-spreading */\r\n/* eslint-disable max-len */\r\nimport * as React from 'react';\r\nimport {\r\n Table,\r\n TableBody,\r\n TableContainer,\r\n TableRow,\r\n TableCell,\r\n TablePagination,\r\n Skeleton,\r\n IconButton,\r\n Chip,\r\n Tooltip,\r\n Typography,\r\n Collapse,\r\n Stack,\r\n} from '@mui/material';\r\n\r\nimport { FilterAlt, FilterAltOutlined, ManageSearch } from '@mui/icons-material';\r\nimport clsx from 'clsx';\r\nimport { useEffect, useRef } from 'react';\r\nimport WorkItemRow from './WorkItemRow';\r\nimport WorkItemTableHead, { HeadCell } from './WorkItemTableHead';\r\nimport {\r\n useAppDispatch, useAppSelector, useDeepEffect, useQuery,\r\n} from '../../app/hooks';\r\nimport {\r\n fetchPagedWorkItems,\r\n fetchWorkItems,\r\n selectTableConfig,\r\n selectWorkItems,\r\n setPage,\r\n setRowsPerPage,\r\n sortWorkItems,\r\n} from './workItemSlice';\r\nimport { WorkItem } from './Types';\r\nimport { selectAdminView, selectStatus, toggleAdminView } from '../system/systemSlice';\r\nimport ApplicationBar from '../../app/components/navigation/ApplicationBar';\r\nimport Layout from '../../app/components/util/Layout';\r\nimport CSVExporter from '../../app/components/csvexport/csvExporter';\r\nimport {\r\n selectAppliedFilter,\r\n selectAvailableProductLines,\r\n setProductLines as setProductLinesToFilter,\r\n selectFilter,\r\n applyFilter,\r\n filterWorkItems,\r\n} from '../filter/filterSlice';\r\nimport {\r\n resetSearch,\r\n selectNoFilterActive,\r\n selectSearch,\r\n toggleShowFilter,\r\n setProductLines as setProductLinesToSearch,\r\n} from '../search/searchSlice';\r\nimport ParameterHandler from '../../features/parameters/ParameterHandler';\r\nimport { useStyles } from './WorkItems.Styles';\r\nimport GeneratePdf from '../../app/components/pdfexport/PdfGenerator';\r\n\r\nconst headCells: HeadCell[] = [\r\n {\r\n id: 'productLineDisplayName',\r\n align: 'left',\r\n disablePadding: false,\r\n label: 'ProductLine',\r\n },\r\n {\r\n id: 'products',\r\n align: 'left',\r\n disablePadding: false,\r\n label: 'Product',\r\n },\r\n {\r\n id: 'version',\r\n align: 'left',\r\n disablePadding: false,\r\n label: 'Version',\r\n },\r\n {\r\n id: 'component',\r\n align: 'left',\r\n disablePadding: false,\r\n label: 'Component',\r\n },\r\n {\r\n id: 'title',\r\n align: 'left',\r\n disablePadding: false,\r\n label: 'Title',\r\n disableSorting: true,\r\n },\r\n {\r\n id: 'id',\r\n align: 'left',\r\n disablePadding: false,\r\n label: 'ID',\r\n },\r\n {\r\n id: 'type',\r\n align: 'left',\r\n disablePadding: false,\r\n label: 'Type',\r\n },\r\n {\r\n id: 'reportedVersion',\r\n align: 'left',\r\n disablePadding: false,\r\n label: 'Reported Version',\r\n },\r\n {\r\n id: 'tags',\r\n align: 'center',\r\n disablePadding: false,\r\n label: 'Tags',\r\n disableSorting: true,\r\n },\r\n {\r\n id: 'date',\r\n align: 'left',\r\n disablePadding: false,\r\n label: 'Release Date',\r\n },\r\n {\r\n id: 'developmentStatus',\r\n align: 'left',\r\n disablePadding: false,\r\n label: 'State',\r\n },\r\n {\r\n id: 'incidentNumber',\r\n align: 'left',\r\n disablePadding: false,\r\n label: 'IncidentNumber',\r\n },\r\n];\r\n\r\nconst skeletonHeight = 20;\r\n\r\nexport default function WorkItems() {\r\n const classes = useStyles();\r\n const dispatch = useAppDispatch();\r\n const workItems = useAppSelector(selectWorkItems);\r\n const systemStatus = useAppSelector(selectStatus);\r\n const adminView = useAppSelector(selectAdminView);\r\n const filter = useAppSelector(selectAppliedFilter);\r\n const filterState = useAppSelector(selectFilter);\r\n const { page, rowsPerPage } = useAppSelector(selectTableConfig);\r\n const search = useAppSelector(selectSearch);\r\n const tableBodyRef = useRef(null);\r\n const [displayData, setDisplayData] = React.useState(false);\r\n const query = useQuery();\r\n const productUrlParameters = query.get('product')?.split(';');\r\n const colSpan = 14;\r\n\r\n const handleChangeRowsPerPage = (event: React.ChangeEvent) => {\r\n dispatch(setRowsPerPage(parseInt(event.target.value, 10)));\r\n dispatch(setPage(0));\r\n };\r\n\r\n const onAdminViewClick = () => {\r\n dispatch(toggleAdminView());\r\n };\r\n const availableProductLines = useAppSelector(selectAvailableProductLines);\r\n\r\n // In case there is no product filter or url param set, this will hook select all products.\r\n React.useEffect(() => {\r\n if (productUrlParameters == null && filter.productLines.length < 1) {\r\n dispatch(setProductLinesToFilter(availableProductLines.map((x) => x.name)));\r\n dispatch(applyFilter());\r\n }\r\n }, [filter.productLines.length]);\r\n\r\n const allProductLinesSelected = React.useMemo(\r\n () => availableProductLines.every((x) => filterState.productLines.includes(x.name)),\r\n [filterState.productLines.length, availableProductLines.length],\r\n );\r\n\r\n const selectAllProjects = React.useCallback(() => {\r\n // useEffect on Line 161 ensures that if no productLine filter is set, all productLines will be selected.\r\n // Thus, if we remove our productLine filter, all productLines will be selected.\r\n dispatch(setProductLinesToSearch([]));\r\n dispatch(setProductLinesToFilter([]));\r\n dispatch(applyFilter());\r\n }, []);\r\n\r\n const noFilterActive = useAppSelector(selectNoFilterActive);\r\n useDeepEffect(() => {\r\n setDisplayData(false);\r\n dispatch(\r\n fetchWorkItems({\r\n filter,\r\n }),\r\n ).then(() => dispatch(sortWorkItems()));\r\n setDisplayData(true);\r\n }, [filter]);\r\n\r\n const renderSkeletonRow = (key: number) => (\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 \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 \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 const filteredWorkItems = filterWorkItems(workItems, search);\r\n const handleChangePage = (event: unknown, newPage: number) => {\r\n if (rowsPerPage * newPage + rowsPerPage >= filteredWorkItems.length) {\r\n dispatch(fetchPagedWorkItems({ filter }));\r\n }\r\n dispatch(setPage(newPage));\r\n };\r\n\r\n // Resets the scroll bar position to the beginning on filter change\r\n useEffect(() => {\r\n if (tableBodyRef.current) {\r\n tableBodyRef.current.scrollTop = 0;\r\n }\r\n }, [filteredWorkItems]);\r\n\r\n // emptyRows exists for when the rowsPerPage is set to 20/50, but there are less than 20/50 workItems.\r\n // with emtyRows the total number of rows will always be at least 10.\r\n\r\n const emptyRows = (() => {\r\n if (filteredWorkItems.length >= 10) {\r\n return 0;\r\n }\r\n return 10 - filteredWorkItems.length;\r\n })();\r\n\r\n const renderRow = () => {\r\n if (systemStatus.workItems !== 'busy') {\r\n if (filteredWorkItems.length < 1) {\r\n return (\r\n \r\n \r\n No results ...\r\n \r\n \r\n \r\n );\r\n }\r\n return (\r\n <>\r\n {filteredWorkItems\r\n .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)\r\n .map((wi) => (\r\n \r\n ))}\r\n {emptyRows > 0 && (\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n }\r\n return Array.from({ length: rowsPerPage }, (_, i) => i + 1).map(renderSkeletonRow);\r\n };\r\n return (\r\n \r\n \r\n dispatch(toggleShowFilter())}\r\n >\r\n {search.showFilter ? : }\r\n \r\n \r\n \r\n dispatch(resetSearch())}\r\n />\r\n \r\n \r\n \r\n \r\n selectAllProjects()}\r\n />\r\n \r\n \r\n
    \r\n \r\n \r\n onAdminViewClick()}\r\n />\r\n \r\n\r\n \r\n GeneratePdf(filteredWorkItems)}\r\n />\r\n \r\n \r\n \r\n
    \r\n
    \r\n )}\r\n >\r\n
    \r\n {/* for future mobile version: {width > 600 ? ( */}\r\n <>\r\n \r\n \r\n \r\n {renderRow()}\r\n
    \r\n
    \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n );\r\n}\r\n","import { Button, Typography } from '@mui/material';\r\nimport createStyles from '@mui/styles/createStyles';\r\nimport makeStyles from '@mui/styles/makeStyles';\r\nimport * as React from 'react';\r\nimport { useHistory } from 'react-router-dom';\r\nimport Layout from '../util/Layout';\r\nimport ApplicationBar from './ApplicationBar';\r\n\r\nconst useStyles = makeStyles(() => createStyles({\r\n paper: {\r\n textAlign: 'center',\r\n paddingTop: 200,\r\n paddingBottom: 200,\r\n },\r\n text: {\r\n paddingBottom: 20,\r\n },\r\n}));\r\n\r\nexport default function NotFound() {\r\n const classes = useStyles();\r\n const history = useHistory();\r\n\r\n return (\r\n \r\n \r\n
    \r\n \r\n Page Not Found\r\n \r\n history.push('/')}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n disableElevation\r\n >\r\n Home\r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n}\r\n","import { AppBar, Theme } from '@mui/material';\nimport createStyles from '@mui/styles/createStyles';\nimport makeStyles from '@mui/styles/makeStyles';\nimport * as React from 'react';\nimport CustomFooter from './footer';\nimport ParameterHandler from '../../features/parameters/ParameterHandler';\nimport HeaderLogo from './HeaderLogo';\nimport SearchForm from './SearchForm';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n appBar: {\n zIndex: theme.zIndex.drawer + 1,\n transition: theme.transitions.create(['width', 'margin'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n backgroundImage: 'url(\"backdrop.png\")',\n backgroundSize: 'cover',\n height: 64,\n display: 'flex',\n flexDirection: 'row-reverse',\n textAlign: 'center',\n alignItems: 'center',\n },\n title: {\n margin: 0,\n position: 'absolute',\n top: '50%',\n transform: 'translate(-50%, -50%)',\n left: '50%',\n flexGrow: 1,\n display: 'block',\n },\n root: {\n margin: 'auto',\n minHeight: 'calc(100vh - 160px)',\n marginTop: 96,\n textAlign: 'center',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n },\n alert: {\n position: 'fixed',\n bottom: 20,\n right: 10,\n },\n helpLink: {\n width: 35,\n paddingRight: '16px',\n },\n helpIcon: {\n width: 'inherit',\n height: 'inherit',\n },\n searchFormBorder: {\n border: '1px solid #ccc',\n borderRadius: theme.shape.borderRadius,\n },\n}));\n\nexport default function StartPage() {\n const classes = useStyles();\n\n return (\n <>\n \n
    \n \n
    \n \n \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n \n \n );\n}\n","import {\r\n useMediaQuery,\r\n createTheme,\r\n ThemeProvider,\r\n StyledEngineProvider,\r\n // @ts-ignore\r\n PaletteType,\r\n adaptV4Theme,\r\n} from '@mui/material';\r\nimport * as React from 'react';\r\nimport { Route, Switch } from 'react-router-dom';\r\nimport axios from 'axios';\r\nimport { useAppSelector } from './app/hooks';\r\nimport { selectTheme, Theme } from './features/theme/themeSlice';\r\nimport WorkItems from './features/workitems/WorkItems';\r\nimport NotFound from './app/components/navigation/NotFound';\r\nimport StartPage from './app/components/StartPage';\r\n\r\ndeclare module '@mui/styles/defaultTheme' {\r\n // eslint-disable-next-line @typescript-eslint/no-empty-interface\r\n // eslint-disable-next-line no-unused-vars\r\n interface DefaultTheme extends Theme {}\r\n}\r\n\r\naxios.interceptors.request.use((config) => {\r\n if (process.env.REACT_APP_SPA_PROXY_PORT) {\r\n return {\r\n ...config,\r\n proxy: {\r\n host: '.',\r\n port: parseInt(process.env.REACT_APP_SPA_PROXY_PORT, 10),\r\n },\r\n };\r\n }\r\n return config;\r\n});\r\n\r\nexport default function App() {\r\n const prefersDarkmode = useMediaQuery('(prefers-color-scheme: dark)');\r\n\r\n const setTheme: Theme = useAppSelector(selectTheme);\r\n\r\n let finalTheme = 'nothing';\r\n if (setTheme.mode === 'system') {\r\n finalTheme = prefersDarkmode ? 'dark' : 'light';\r\n } else {\r\n finalTheme = setTheme.mode;\r\n }\r\n const theme = createTheme(\r\n adaptV4Theme({\r\n palette: {\r\n mode: finalTheme as PaletteType,\r\n primary: {\r\n main: '#138943',\r\n dark: '#138943',\r\n },\r\n },\r\n typography: {\r\n fontFamily: [\r\n '\"Segoe UI\"',\r\n 'Roboto',\r\n '\"Helvetica Neue\"',\r\n 'Arial',\r\n 'sans-serif',\r\n '\"Apple Color Emoji\"',\r\n '\"Segoe UI Emoji\"',\r\n '\"Segoe UI Symbol\"',\r\n ].join(','),\r\n },\r\n }),\r\n );\r\n\r\n return (\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","import { Action, configureStore, ThunkAction } from '@reduxjs/toolkit';\r\nimport themeReducer from '../features/theme/themeSlice';\r\nimport searchReducer from '../features/search/searchSlice';\r\nimport sortingReducer from '../features/sorting/sortingSlice';\r\nimport workItemReducer from '../features/workitems/workItemSlice';\r\nimport systemReducer from '../features/system/systemSlice';\r\nimport filterReducer from '../features/filter/filterSlice';\r\n\r\nexport const store = configureStore({\r\n reducer: {\r\n theme: themeReducer,\r\n search: searchReducer,\r\n sorting: sortingReducer,\r\n workItems: workItemReducer,\r\n system: systemReducer,\r\n filter: filterReducer,\r\n },\r\n});\r\n\r\nexport type AppDispatch = typeof store.dispatch;\r\nexport type RootState = ReturnType;\r\nexport type AppThunk = ThunkAction<\r\n ReturnType,\r\n RootState,\r\n unknown,\r\n Action\r\n>;\r\n","import 'bootstrap/dist/css/bootstrap.css';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { Provider } from 'react-redux';\r\nimport { BrowserRouter as Router } from 'react-router-dom';\r\nimport AdapterDateFns from '@mui/lab/AdapterDateFns';\r\nimport { LocalizationProvider } from '@mui/lab';\r\nimport App from './App';\r\nimport { store } from './app/store';\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n rootElement,\r\n);\r\n"],"sourceRoot":""}