{"version":3,"sources":["components/auditor/pages/AuditorWelcomeOverview.js","components/auditor/table/AuditorReportTable.js","components/auditor/pages/event/AuditorEventTablePage.js","components/auditor/pages/usage/AuditorUsageTablePage.js","components/auditor/pages/user_activity/AuditorUserActivityTablePage.js","components/auditor/table/TaskDetailsDialog.js","components/auditor/table/AuditorTasksTable.js","components/auditor/pages/AuditorTasksPage.js","components/auditor/AuditorApplication.js","index.js"],"names":["AuditorWelcomeOverview","_ref","path","React","createElement","Fragment","Typography","component","variant","color","useStyles","makeStyles","theme","button","marginLeft","marginBottom","grid","position","width","display","backdrop","zIndex","drawer","backgroundColor","columnPickerIcon","cursor","margin","columnPickerDiv","columnPicker","gridTemplateColumns","gridGap","columns","padding","marginTop","boxShadow","pageSizeSelect","eventRangeSelect","frozenColumnsSelect","marginRight","AuditorReportPage","entityName","epsNodes","objectIds","ignoredFields","refreshVisible","refreshDataAlways","resizeAutomatically","loadCustomFields","loadCustomFieldsColumns","reloadColumnsVisible","incrementalDataRetrieval","handleClickExport","useAnyReportServlet","dateRangeVisible","appSettings","requireObjectFilter","showUndoButton","handleUndoButtonClicked","undoUndeleteActive","undeletingChanges","handleCancelUndoButtonClicked","handleSubmitUndoButtonClicked","console","log","classes","useRef","uuid","uuidv4","flexFilterGrid","_useState","useState","_useState2","_slicedToArray","flexGrid","setFlexGrid","_useState3","_useState4","flexGridView","setFlexGridView","_useState5","_useState6","flexGridColumnOrder","setFlexGridColumnOrder","_useState7","_useState8","columnsResized","setColumnsResized","_useState9","_useState10","loading","setLoading","_useState11","_useState12","firstLoad","setFirstLoad","_useState13","_useState14","pageSize","setPageSize","_useState15","Config","data","value","_useState16","eventRangeOptions","setEventRangeOptions","_useState17","_useState18","pageMarker","setPageMarker","_useState19","_useState20","errorMessageTitle","setErrorMessageTitle","_useState21","_useState22","hideGridFilterError","setHideGridFilterError","_useState23","_useState24","dataSetInformation","setDataSetInformation","_useState25","_useState26","frozenColumns","setFrozenColumns","_useState27","_useState28","configurationColumnLayout","setConfigurationColumnLayout","_useState29","_useState30","needToRefreshDataAfterDataSetRetrieval","setNeedToRefreshDataAfterDataSetRetrieval","_useErrorMessageDialo","useErrorMessageDialog","_useErrorMessageDialo2","errorMessageContents","setErrorMessageContents","isTableCurrentlyEmpty","items","length","useEffect","url","Utils","oDataView","odata","pageOnServer","pageChanged","onPageChanged","refreshRequestHeaders","refresh","load","loaded","addHandler","handleLoadedRows","handleLoadingRows","error","handleError","removeHandler","current","picker","itemsSource","checkedMemberPath","displayMemberPath","isContentHtml","lostFocus","hidePopup","hostElement","Array","isArray","updateColumns","firstEmptyResponse","configureFiltersFromDataset","param","errorEventArgs","table","request","status","errorMessageDescription","errorJson","responseText","JSON","parse","e","message","SessionInfo","collectionView","eventArgs","concat","loadTableState","processDataSetInformation","handleRefresh","onFilterChanged","event","filters","saveColumnFilters","saveColumnLayout","columnLayout","getTableConfigPath","filterDefinition","arguments","undefined","requestHeaders","toString","includes","filterObject","map","obj","binding","join","resizeColumns","autoSizeColumns","validDataResponse","numberOfRows","totalRowCount","then","response","catch","dataSetColumnOrder","updateColumnsFromDataset","updateColumnOrderFromMap","updateColumnOrderFromSavedGridLayout","updateColumnOrderFromConfigurationColumnLayout","forEach","column","cssClass","isReadOnly","align","Selector","_step","removeColumns","filter","_iterator","_createForOfIteratorHelper","s","n","done","removeColumn","remove","err","f","targetColumns","columnsFromLayout","Set","hasColumns","sourceColumns","pos","el","add","_step2","dataSetColumnsFromMeta","sourceColumnBindingArray","formattedName","sourceColumnSet","targetColumnBindingArray","targetColumnSet","_iterator2","sourceColumn","has","startsWith","newColumn","Column","name","header","push","_step3","_iterator3","_step4","_iterator4","targetColumn","targetColumnFilter","getColumnFilter","isActive","_step5","_iterator5","_step6","sourceColumnPositionMap","Map","_iterator6","set","index","savedColumnLayout","sourceColumnWidthMap","get","sort","el1","el2","pos1","pos2","isNaN","configurePredefinedCustomColumnFilters","primaveraDataServicesSource","stringOperators","op","Operator","EQ","NE","customFilters","_i","_Object$entries","Object","entries","_Object$entries$_i","key","valueFilter","uniqueValues","filterType","FilterType","Value","sortDescriptions","pageSizeFromConfig","frozenColumnsFromConfig","filtersChanged","forceSet","configureFilters","view","deferUpdate","clear","i","sortDesc","wjcCore","property","ascending","parseInt","open","Alert","severity","AlertTitle","style","Box","flexDirection","className","grow","description","CollectionViewNavigator","headerFormat","byPage","cv","Button","onClick","wjcGridXlsx","saveAsync","includeColumnHeaders","includeCellStyles","formatItem","selectedItems","item","AuditRecordKey","FormControl","Select","onChange","target","MenuItem","FormHelperText","option","frozenColumnsFromEvent","rowLimitReached","Tooltip","title","FlexGrid","stickyHeaders","initialized","ctl","wjGridFilter","defaultFilterType","panel","topLeftCells","cell","innerHTML","ref","querySelector","addEventListener","hasClass","host","offsetHeight","focus","showPopup","preventDefault","window","contains","closest","alternatingRowStep","draggedColumn","resizedColumn","sortedColumn","Backdrop","CircularProgress","size","ListBox","p","accordion","expandablePanel","expandablePanelIcon","StyledBadge","withStyles","badge","left","top","Badge","AuditorEventTablePage","selectedEntity","navigateToResults","_React$useState","_React$useState2","ignoredFieldsDialogOpen","setIgnoredFieldsDialogOpen","_React$useState3","_React$useState4","undoDialogOpen","setUndoDialogOpen","_React$useState5","_React$useState6","setUndoUndeleteActive","_React$useState7","_React$useState8","undoingChanges","setUndoingChanges","_React$useState9","_React$useState10","setUndeletingChanges","_React$useState11","_React$useState12","ignoredFieldsFilterEnabled","setIgnoredFieldsFilterEnabled","_React$useState13","_React$useState14","setIncrementalDataRetrieval","_React$useState15","_React$useState16","setLoadCustomFields","_React$useState17","_React$useState18","setLoadCustomFieldsColumns","_React$useState19","_React$useState20","refreshAutomatically","setRefreshAutomatically","_React$useState21","_React$useState22","setResizeAutomatically","String","Grid","container","xs","displayName","Accordion","elevation","AccordionSummary","expandIcon","ExpandMoreIcon","aria-controls","id","AccordionDetails","spacing","badgeContent","SettingsIcon","ConfigurationSwitch","handleChanged","MessageDialog","handleClose","maxWidth","fullWidth","ConfigurationAsyncComboBox","multiple","alignItems","AuditorReportTable","visibleKey","updateColumnsOnPageChange","supportsUndoOrUndeletion","records","undoType","params","undoKeys","entityKey","submitBody","method","credentials","headers","body","alert","paper","palette","text","secondary","maxHeight","overflow","height","AuditorUsageTablePage","selectedEpsNodes","setSelectedEpsNodes","selectedObjectIds","setSelectedObjectIds","Label","defaultExpanded","filterGrid","Paper","TreeView","allowRefresh","selectedNodeIdsReceiver","nodeIds","treeSelectionRootName","forceLabel","reloadColumnsAutomatically","AuditorUserActivityTablePage","metadataChangeCounter","setMetadataChangeCounter","setChart","chartData","onMetadataChanged","wjChart","bindingName","flex","content","ht","wijmo","val","TaskDetailsDialog","taskId","handleClosed","_useMessageDialog","useMessageDialog","_useMessageDialog2","setMessage","messageProps","setMessageProps","info","htmlContents","detailHtml","assign","buttons","root","addItem","minWidth","visuallyHidden","border","clip","AuditorTasksTable","lastFileUploadTimestamp","tasks","setTasks","displayDetailsForTask","setDisplayDetailsForTask","errorMessage","setErrorMessage","populateTable","useCallback","_ref2","interval","setInterval","clearInterval","isTableEmpty","ErrorMessageDialog","TableContainer","Table","aria-labelledby","aria-label","TableBody","TableRow","TableCell","TableHead","task","hover","role","tabIndex","scope","submitter","Date","lastUpdateTimestamp","toLocaleString","timestampMillis","Moment","fromNow","database","completed","success","startIcon","DetailsIcon","ErrorIcon","IconButton","InfoIcon","updatedTasks","_toConsumableArray","splice","indexOf","removeResults","DeleteIcon","LoaderTasksPage","AuditorApplication","manageUsersDialogOpen","setManageUsersDialogOpen","_useConfigProfile","useConfigProfile","profile","_useSessionInfo","useSessionInfo","sessionInfo","jdbcSource","userCategories","eventTabs","setAppSettings","usageTabs","setUsageTabs","userTabs","setUserTabs","navigationIndex","setNavigationIndex","subNavigationIndex","setSubNavigationIndex","eventNavigation","setEventNavigation","eventGroups","eventTabMap","groupName","eventTab","collection","label","tabName","navigation","section","icon","FindInPageIcon","subNavigation","usageTabCollection","_objectSpread","userTabCollection","Router","Application","login","Login","useDatabase","appName","application","routes","ConfigurationDashboard","navigationPanelWidth","handleNavigationChange","subIndex","AssignmentTurnedInIcon","AuditorTasksPage","DonutLargeIcon","PeopleIcon","welcomeContent","configuration","headerButtons","ConfigurationProfileButton","MessagesButton","HelpButton","AccountButton","ManageUsersButton","handleClick","actionButtons","SaveConfigurationButton","profileLabel","doNotWarnUserOfPendingEdits","PermissionConfigurationComponent","TeamsConfigurationPermission","defaultRoute","ManageUsersDialog","allowConfiguringTeams","App","oldFn","formatDate","format","call","this","initializeGlobals","ReactDOM","render","document","getElementById"],"mappings":"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","file":"static/js/main.aef0bc0a.chunk.js","sourcesContent":["//\r\n// Copyright 2020 Emerald Associates, Inc. All Rights Reserved.\r\n//\r\n// Use of this file other than by Emerald Associates, Inc. is forbidden\r\n// unless otherwise authorized by a separate written license agreement.\r\n//\r\n// $Id$\r\n//\r\nimport React from \"react\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\n\r\nconst AuditorWelcomeOverview = ({ path }) => {\r\n return (\r\n \r\n \r\n
About the P6-Auditor
\r\n\r\n
\r\n Display information from Primavera P6 audit tables in a user-friendly\r\n format\r\n
\r\n
\r\n Take better control of your P6 EPPM database Have the ability to\r\n effectively report on the changes to your database and the activity of\r\n all of your users Get data from database level records in easy-to-use\r\n pre-built reports for auditing, usage, licenses, etc.\r\n
\r\n \r\n \r\n );\r\n};\r\nexport default AuditorWelcomeOverview;\r\n","//\r\n// Copyright 2020 Emerald Associates, Inc. All Rights Reserved.\r\n//\r\n// Use of this file other than by Emerald Associates, Inc. is forbidden\r\n// unless otherwise authorized by a separate written license agreement.\r\n//\r\n// $Id$\r\n//\r\n\r\n// noinspection JSUnresolvedReference\r\nimport React, {useEffect, useRef, useState} from \"react\";\r\nimport {makeStyles} from \"@material-ui/core/styles\";\r\nimport {FlexGrid} from \"@grapecity/wijmo.react.grid\";\r\nimport {Selector} from \"@grapecity/wijmo.grid.selector\";\r\nimport {Column} from \"@grapecity/wijmo.grid\";\r\nimport {CollectionViewNavigator, ListBox} from \"@grapecity/wijmo.react.input\";\r\nimport * as odata from \"@grapecity/wijmo.odata\";\r\nimport * as wjGridFilter from \"@grapecity/wijmo.grid.filter\";\r\nimport {FilterType, Operator} from \"@grapecity/wijmo.grid.filter\";\r\nimport * as wjcCore from \"@grapecity/wijmo\";\r\nimport {closest, contains, hasClass, hidePopup, showPopup} from \"@grapecity/wijmo\";\r\nimport * as wjcGridXlsx from \"@grapecity/wijmo.grid.xlsx\";\r\nimport \"@grapecity/wijmo.styles/wijmo.css\";\r\nimport \"src/components/auditor/wijmo.css\";\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport Tooltip from \"@material-ui/core/Tooltip\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport * as Config from \"eai-configurator-ui/components/configuration/utils/ConfigurationRegistry\";\r\nimport MenuItem from \"@material-ui/core/MenuItem\";\r\nimport FormHelperText from \"@material-ui/core/FormHelperText\";\r\nimport FormControl from \"@material-ui/core/FormControl\";\r\nimport Select from \"@material-ui/core/Select\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport * as Utils from \"eai-configurator-ui/components/Utils\";\r\nimport {useErrorMessageDialog} from \"eai-configurator-ui/components/configuration/dialog/ErrorMessageDialog\";\r\nimport {Alert, AlertTitle} from \"@material-ui/lab\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport * as SessionInfo from \"eai-configurator-ui/components/SessionInfo\";\r\nimport {v4 as uuidv4} from 'uuid';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n button: {\r\n marginLeft: \"7px\",\r\n marginBottom: \"3px\",\r\n },\r\n grid: {\r\n position: \"relative\",\r\n width: \"100%\",\r\n display: \"grid\",\r\n },\r\n backdrop: {\r\n zIndex: theme.zIndex.drawer + 1,\r\n color: \"#00A994\",\r\n position: \"absolute\",\r\n backgroundColor: \"rgba(255,255, 255, 0.5)\",\r\n },\r\n columnPickerIcon: {\r\n cursor: \"pointer\",\r\n color: \"#FF8754\",\r\n margin: \"3px\",\r\n },\r\n columnPickerDiv: {\r\n display: \"none\",\r\n },\r\n columnPicker: {\r\n display: \"grid\",\r\n gridTemplateColumns: \"repeat(4, 1fr)\",\r\n gridGap: \"0 10px\",\r\n columns: \"4\",\r\n /* IE fallback */\r\n padding: \"12px\",\r\n marginLeft: \"12px\",\r\n marginTop: \"26px\",\r\n boxShadow: \"0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23)\",\r\n },\r\n pageSizeSelect: {\r\n marginLeft: \"15px\",\r\n },\r\n eventRangeSelect: {\r\n marginLeft: \"15px\",\r\n },\r\n frozenColumnsSelect: {\r\n marginLeft: \"5px\",\r\n marginRight: \"15px\",\r\n },\r\n}));\r\n\r\nconst AuditorReportPage = ({\r\n path,\r\n entityName,\r\n epsNodes,\r\n objectIds,\r\n ignoredFields,\r\n refreshVisible,\r\n refreshDataAlways,\r\n resizeAutomatically,\r\n loadCustomFields,\r\n loadCustomFieldsColumns,\r\n reloadColumnsVisible,\r\n incrementalDataRetrieval,\r\n handleClickExport,\r\n useAnyReportServlet,\r\n dateRangeVisible,\r\n appSettings,\r\n requireObjectFilter,\r\n showUndoButton,\r\n handleUndoButtonClicked,\r\n undoUndeleteActive,\r\n undeletingChanges,\r\n handleCancelUndoButtonClicked,\r\n handleSubmitUndoButtonClicked\r\n }) => {\r\n\r\n //\r\n console.log(\"> AuditorReportPage\");\r\n\r\n const classes = useStyles();\r\n\r\n const eventRangeInitialState = () => {\r\n if (dateRangeVisible) {\r\n return Config.fromPath(path + \":eventRangeOption\", true).data.value;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n const columnPicker = useRef(null);\r\n const uuid = useRef(uuidv4())\r\n const flexFilterGrid = useRef(null);\r\n\r\n const [flexGrid, setFlexGrid] = useState(null);\r\n const [flexGridView, setFlexGridView] = useState(null);\r\n const [flexGridColumnOrder, setFlexGridColumnOrder] = useState(null);\r\n\r\n // const [addedSelector, setAddedSelector] = useState(false);\r\n const [columnsResized, setColumnsResized] = useState(false);\r\n const [loading, setLoading] = useState(false);\r\n const [firstLoad, setFirstLoad] = useState(true);\r\n const [pageSize, setPageSize] = useState(20);\r\n const [eventRangeOptions, setEventRangeOptions] = useState(eventRangeInitialState());\r\n const [pageMarker, setPageMarker] = useState(false);\r\n const [errorMessageTitle, setErrorMessageTitle] = useState(\"\");\r\n const [hideGridFilterError, setHideGridFilterError] = useState(false);\r\n const [dataSetInformation, setDataSetInformation] = useState()\r\n const [frozenColumns, setFrozenColumns] = useState(0);\r\n const [configurationColumnLayout, setConfigurationColumnLayout] = useState(null);\r\n const [needToRefreshDataAfterDataSetRetrieval, setNeedToRefreshDataAfterDataSetRetrieval] = useState(false);\r\n\r\n const [errorMessageContents, setErrorMessageContents] = useErrorMessageDialog();\r\n\r\n const rangeOptions = [\r\n \"Full\",\r\n \"< 5m\",\r\n \"< 15m\",\r\n \"< 1h\",\r\n \"< 2h\",\r\n \"< 6h\",\r\n \"< 1d\",\r\n \"< 2d\",\r\n \"< 5d\",\r\n \"< 15d\"\r\n ]\r\n\r\n const isTableCurrentlyEmpty =\r\n !loading && flexGridView && flexGridView.items && flexGridView.items.length === 0;\r\n\r\n //-------------------------------------------------------------------------\r\n // EFFECTS\r\n //-------------------------------------------------------------------------\r\n\r\n /*\r\n This effect is fired when the page starts loading. Should be called just once.\r\n */\r\n useEffect(() => {\r\n console.log(\">> useEffect [] - new odata.ODataCollectionView\")\r\n\r\n let url = (useAnyReportServlet ?\r\n Utils.getBaseUrl() + \"auditor/data/Any.svc/\" :\r\n Utils.getBaseUrl() + \"auditor/data/\" + entityName + \".svc/\");\r\n console.log(\"Report URL: \" + url)\r\n let oDataView = new odata.ODataCollectionView(\r\n url,\r\n entityName,\r\n {\r\n pageSize: pageSize,\r\n pageOnServer: true,\r\n pageChanged: onPageChanged\r\n }\r\n );\r\n\r\n refreshRequestHeaders(oDataView);\r\n oDataView.refresh();\r\n setLoading(true);\r\n setFlexGridView(oDataView);\r\n }, []);\r\n\r\n /*\r\n This effect is fired when the data needs to be loaded from the server.\r\n */\r\n useEffect(() => {\r\n console.log(\">> useEffect [flexGridView, epsNodes, objectIds, ignoredFields, eventRangeOptions, loadCustomFields, loadCustomFieldsColumns, incrementalDataRetrieval, undoUndeleteActive] - view.load, loading: \" + loading);\r\n\r\n if (!loading) {\r\n if (flexGridView) {\r\n refreshRequestHeaders(flexGridView);\r\n flexGridView.load();\r\n }\r\n }\r\n }, [flexGridView, epsNodes, objectIds, ignoredFields, eventRangeOptions, loadCustomFields, loadCustomFieldsColumns, incrementalDataRetrieval, undoUndeleteActive]);\r\n\r\n /*\r\n * This effect is used to add and remove handlers to the flex grid for things like data loading/ error handling, etc...\r\n */\r\n useEffect(() => {\r\n console.log(\">> useEffect [view, loading, columnCount] - view handlers and add handler\")\r\n\r\n if (flexGridView) {\r\n flexGridView.loaded.addHandler(handleLoadedRows);\r\n flexGridView.loading.addHandler(handleLoadingRows);\r\n flexGridView.error.addHandler(handleError);\r\n return () => {\r\n flexGridView.loaded.removeHandler(handleLoadedRows);\r\n flexGridView.loading.removeHandler(handleLoadingRows);\r\n flexGridView.error.removeHandler(handleError);\r\n };\r\n }\r\n }, [flexGridView, loading]);\r\n\r\n /*\r\n Initializes the column picker.\r\n */\r\n useEffect(() => {\r\n console.log(\">> useEffect [flex, columnPicker.current] - picker source\")\r\n\r\n if (flexGrid && columnPicker.current) {\r\n const picker = columnPicker.current;\r\n picker.itemsSource = flexGrid.columns;\r\n picker.checkedMemberPath = \"visible\";\r\n picker.displayMemberPath = \"header\";\r\n picker.isContentHtml = true;\r\n picker.lostFocus.addHandler(() => {\r\n hidePopup(picker.hostElement);\r\n });\r\n }\r\n }, [flexGrid, columnPicker.current]);\r\n\r\n /*\r\n Shows/ hide the grid depending if some object is selected or not.\r\n */\r\n useEffect(() => {\r\n console.log(\">> useEffect [objectIds] - hiding or showing grid\")\r\n\r\n if (requireObjectFilter) {\r\n if (Array.isArray(objectIds) && objectIds.length > 0) {\r\n setHideGridFilterError(false);\r\n } else {\r\n console.log(\"Hiding grid\");\r\n setHideGridFilterError(true);\r\n }\r\n } else {\r\n setHideGridFilterError(false);\r\n }\r\n }, [objectIds])\r\n\r\n /*\r\n Update the columns as needed.\r\n */\r\n useEffect(() => {\r\n console.log(\">> useEffect [columnLayout, dataSetInformation, pageMarker] - updateColumns()\")\r\n\r\n updateColumns(dataSetInformation && dataSetInformation.firstEmptyResponse);\r\n configureFiltersFromDataset();\r\n if (dataSetInformation && dataSetInformation.firstEmptyResponse && needToRefreshDataAfterDataSetRetrieval && flexGridView) {\r\n setNeedToRefreshDataAfterDataSetRetrieval(false);\r\n flexGridView.load();\r\n flexGridView.refresh();\r\n }\r\n }, [configurationColumnLayout, dataSetInformation, pageMarker]);\r\n\r\n //-------------------------------------------------------------------------\r\n // EVENT HANDLERS\r\n //-------------------------------------------------------------------------\r\n\r\n const onPageChanged = () => {\r\n console.log(\">> onPageChanged\")\r\n\r\n setPageMarker(pageMarker => !pageMarker)\r\n }\r\n\r\n const onClearFiltersButtonClick = () => {\r\n console.log(\">> handleClearFilters\")\r\n\r\n flexFilterGrid.current.clear();\r\n\r\n // Clear sort as well\r\n flexGridView.sortDescriptions.length = 0;\r\n\r\n setErrorMessageTitle(null);\r\n setErrorMessageContents(null);\r\n\r\n // For some reason Wijmo resets the configured columns when clearing so make sure to configure them again\r\n configurePredefinedCustomColumnFilters();\r\n\r\n // Argh\r\n flexGridView.refresh()\r\n };\r\n\r\n const onReloadColumnsButtonClick = () => {\r\n updateColumns();\r\n }\r\n\r\n const handleError = (param, errorEventArgs) => {\r\n console.log(\">> handleError (param:, errorEventArgs) - table follows\")\r\n console.table(param)\r\n console.table(errorEventArgs)\r\n\r\n if (errorEventArgs.request.status === 401) {\r\n SessionInfo.clear();\r\n return;\r\n }\r\n\r\n let errorMessageTitle = \"Server Error\";\r\n let errorMessageDescription;\r\n let errorJson = errorEventArgs.request.responseText;\r\n if (errorJson) {\r\n try {\r\n errorJson = JSON.parse(errorJson);\r\n } catch (e) {\r\n // Ignore json parsing issues\r\n console.log(\"Error parsing json response: \", e)\r\n }\r\n if (errorJson && errorJson.error) {\r\n errorMessageDescription = errorJson.error.message;\r\n }\r\n }\r\n if (!errorMessageDescription) {\r\n errorMessageDescription = \"Unknown internal server error\";\r\n }\r\n setErrorMessageTitle(errorMessageTitle);\r\n setErrorMessageContents(errorMessageDescription);\r\n };\r\n\r\n const handleInitializeColumnPicker = (p) => {\r\n console.log(\">> handleInitializeColumnPicker\")\r\n\r\n columnPicker.current = p;\r\n };\r\n\r\n const handleChangeFrozenColumns = (event) => {\r\n console.log(\">> handleChangeFrozenColumns - event):\")\r\n\r\n const frozenColumnsFromEvent = event.target.value;\r\n setFrozenColumns(frozenColumnsFromEvent);\r\n Config.setDataValue(getTableConfigPath() + \":frozenColumns\", frozenColumnsFromEvent);\r\n //issueSaveRequest();\r\n\r\n if (flexGrid) {\r\n flexGrid.frozenColumns = parseInt(frozenColumnsFromEvent, 10);\r\n }\r\n };\r\n\r\n const handleChangeEventRange = (event) => {\r\n setEventRangeOptions(event.target.value)\r\n Config.setDataValue(path + \":eventRangeOption\", event.target.value);\r\n //issueSaveRequest();\r\n };\r\n\r\n const handleLoadedRows = (collectionView, eventArgs) => {\r\n console.log(`>> handleLoadedRows (firstLoad: ${firstLoad}, flex: ${flexGrid}, loading: ${loading}`)\r\n\r\n if (firstLoad && flexGrid && !loading) {\r\n setFirstLoad(false);\r\n const filtersChanged = loadTableState();\r\n\r\n // If the filters have NOT changed, and this is the first load, the data needs to be refreshed after the data set information is retrieved\r\n // This of course only applies if the response is the first one\r\n if (!filtersChanged) {\r\n setNeedToRefreshDataAfterDataSetRetrieval(true);\r\n }\r\n }\r\n\r\n if (loading) {\r\n setLoading(false);\r\n } else {\r\n // Always reset the headers on the response to make sure the refresh flag is set to false in the headers\r\n refreshRequestHeaders(flexGridView, false)\r\n processDataSetInformation();\r\n }\r\n };\r\n\r\n const handleChangeRowsPerPage = (event) => {\r\n console.log(\">> handleChangeRowsPerPage - event:\")\r\n\r\n const pageSize = event.target.value;\r\n setPageSize(pageSize);\r\n if (flexGridView) {\r\n refreshRequestHeaders(flexGridView, false, pageSize)\r\n }\r\n\r\n flexGridView.pageSize = pageSize;\r\n Config.setDataValue(getTableConfigPath() + \":pageSize\", pageSize);\r\n };\r\n\r\n const handleLoadingRows = (param) => {\r\n console.log(\">> handleLoadingRows\")\r\n\r\n setLoading(true);\r\n setErrorMessageContents(null);\r\n };\r\n\r\n const onRefreshButtonClick = () => {\r\n handleRefresh();\r\n };\r\n\r\n const handleRefresh = () => {\r\n console.log(\">> handleRefresh\")\r\n\r\n refreshRequestHeaders(flexGridView, true);\r\n\r\n flexGridView.load();\r\n\r\n setErrorMessageTitle(null);\r\n setErrorMessageContents(null);\r\n\r\n flexGridView.refresh()\r\n }\r\n\r\n const initializedGridHandler = (ctl) => {\r\n console.log(\">> initializedGrid\")\r\n\r\n //\r\n // Sets the filter expressions to be the only ones allowed on string columns\r\n // if (appSettings && appSettings.primaveraDataServicesSource) {\r\n // wjcCore.culture.FlexGridFilter.stringOperators = [{name: '(not set)', op: null},\r\n // {name: 'Equals', op: Operator.EQ},\r\n // {name: 'Does not equal', op: Operator.NE}]\r\n // }\r\n\r\n const filter = new wjGridFilter.FlexGridFilter(ctl);\r\n filter.defaultFilterType = \"Condition\";\r\n flexFilterGrid.current = filter;\r\n filter.onFilterChanged = onFilterChanged\r\n setFlexGrid(ctl);\r\n\r\n //ct\r\n\r\n ctl.formatItem.addHandler((s, e) => {\r\n if (e.panel === s.topLeftCells) {\r\n e.cell.innerHTML =\r\n '';\r\n }\r\n });\r\n\r\n\r\n // show the column picker when the user clicks the top-left cell\r\n let ref = ctl.hostElement.querySelector(\".wj-topleft\");\r\n ref.addEventListener(\"mousedown\", (e) => {\r\n if (hasClass(e.target, \"wj-glyph-filter\")) {\r\n let host = columnPicker.current.hostElement;\r\n if (!host.offsetHeight) {\r\n showPopup(host, ref, false, true, false);\r\n columnPicker.current.focus();\r\n } else {\r\n hidePopup(host, true, true);\r\n ctl.focus();\r\n }\r\n columnPicker.current.focus();\r\n e.preventDefault();\r\n }\r\n });\r\n\r\n // ctl.itemsSource.onPageChange += () => {\r\n // console.log(\"Page changed\");\r\n // }\r\n\r\n // work around Safari/IOS bug (TFS 321525, 361500, 402670)\r\n // https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\r\n window.addEventListener(\"touchstart\", (e) => {\r\n let host = columnPicker.current.hostElement;\r\n if (!contains(host, e.target) && !closest(e.target, \".wj-flexgrid\")) {\r\n hidePopup(host, true, true);\r\n }\r\n });\r\n };\r\n\r\n const exportToExcelHandler = () => {\r\n console.log(\">> exportToExcel\")\r\n\r\n wjcGridXlsx.FlexGridXlsxConverter.saveAsync(\r\n flexGrid,\r\n {\r\n includeColumnHeaders: true,\r\n includeCellStyles: false,\r\n formatItem: null,\r\n },\r\n entityName + \"Grid.xlsx\"\r\n );\r\n if (handleClickExport) {\r\n handleClickExport();\r\n }\r\n };\r\n\r\n const columnDraggedHandler = (flexGrid, eventArgs) => {\r\n console.log(\">> columnDraggedHandler\");\r\n if (flexGrid) {\r\n setFlexGridColumnOrder(flexGrid.columnLayout);\r\n saveColumnLayout(flexGrid);\r\n }\r\n }\r\n\r\n const columnResizedHandler = (flexGrid, eventArgs) => {\r\n console.log(\">> columnResizedHandler\");\r\n if (flexGrid) {\r\n saveColumnLayout(flexGrid);\r\n }\r\n }\r\n\r\n const columnSortedColumn = (flexGrid, eventArgs) => {\r\n console.log(\">> columnSortedColumn\");\r\n if (flexGrid) {\r\n saveColumnLayout(flexGrid);\r\n }\r\n }\r\n\r\n const onFilterChanged = (event) => {\r\n let filters = flexFilterGrid.current\r\n if (filters) {\r\n saveColumnFilters(filters);\r\n }\r\n }\r\n\r\n //-------------------------------------------------------------------------\r\n // FUNCTIONS\r\n //-------------------------------------------------------------------------\r\n\r\n const saveColumnLayout = (flexGrid) => {\r\n if (flexGrid && flexGrid.columnLayout) {\r\n Config.setDataValue(\r\n getTableConfigPath() + \":columnLayout\",\r\n flexGrid.columnLayout\r\n );\r\n }\r\n }\r\n\r\n const saveColumnFilters = (filters) => {\r\n if (filters) {\r\n Config.setDataValue(\r\n getTableConfigPath() + \":filterDefinition\",\r\n filters.filterDefinition\r\n );\r\n }\r\n }\r\n\r\n const refreshRequestHeaders = (oDataView, refresh = false, setPageSize = pageSize) => {\r\n console.log(`>> refreshRequestHeaders(refresh=${refresh}, firstLoad=${firstLoad}, refreshDataAlways=${refreshDataAlways}, loadCustomFields=${loadCustomFields}, loadCustomFieldsColumns=${loadCustomFieldsColumns}`)\r\n\r\n const requestHeaders = {};\r\n if (firstLoad) {\r\n requestHeaders[\"FirstRequest\"] = \"true\";\r\n }\r\n if (refresh === true || refreshDataAlways === true) {\r\n requestHeaders[\"ForceRefresh\"] = \"true\";\r\n }\r\n if (loadCustomFields === true) {\r\n requestHeaders[\"LoadCustomFields\"] = \"true\";\r\n }\r\n if (incrementalDataRetrieval === true) {\r\n if (undoUndeleteActive) {\r\n console.log(\">>> refreshRequestHeaders, undo is active, set incremental data retrieval to false\")\r\n requestHeaders[\"IncrementalDataRetrieval\"] = \"false\";\r\n } else {\r\n requestHeaders[\"IncrementalDataRetrieval\"] = \"true\";\r\n }\r\n }\r\n if (loadCustomFieldsColumns === true) {\r\n requestHeaders[\"LoadCustomFieldsColumns\"] = \"true\";\r\n }\r\n if (eventRangeOptions) {\r\n requestHeaders[\"EventRangeOptions\"] = eventRangeOptions.toString();\r\n }\r\n if (setPageSize) {\r\n requestHeaders[\"PageSize\"] = setPageSize.toString();\r\n }\r\n if (undoUndeleteActive) {\r\n requestHeaders[\"UndoUndeleteActive\"] = \"true\";\r\n }\r\n if (undeletingChanges) {\r\n requestHeaders[\"UndeletingChanges\"] = \"true\";\r\n }\r\n if (epsNodes && epsNodes.toString()) {\r\n if (epsNodes.includes(\"projects\")) {\r\n requestHeaders[\"EpsFilter\"] = \"projects\";\r\n } else {\r\n requestHeaders[\"EpsFilter\"] = epsNodes.toString();\r\n }\r\n }\r\n if (objectIds && objectIds.toString()) {\r\n if (objectIds.includes(\"objects\")) {\r\n requestHeaders[\"ObjectFilter\"] = \"objects\";\r\n } else {\r\n requestHeaders[\"ObjectFilter\"] = objectIds.toString();\r\n }\r\n }\r\n if (ignoredFields) {\r\n requestHeaders[\"IgnoredFields\"] = ignoredFields;\r\n }\r\n if (uuid.current) {\r\n requestHeaders[\"RequestUUID\"] = uuid.current\r\n }\r\n const filters = Config.getDataValue(\r\n getTableConfigPath() + \":filterDefinition\",\r\n );\r\n if (filters) {\r\n const filterObject = JSON.parse(filters)\r\n if (filterObject.filters && Array.isArray(filterObject.filters)) {\r\n requestHeaders[\"FilterColumns\"] = filterObject.filters.map((obj) => obj.binding).join(\",\");\r\n }\r\n }\r\n\r\n\r\n console.log(\"Request headers - table follows:\");\r\n console.table(requestHeaders);\r\n\r\n oDataView.requestHeaders = requestHeaders;\r\n };\r\n\r\n const resizeColumns = () => {\r\n if (flexGrid && dataSetInformation && dataSetInformation.firstEmptyResponse) {\r\n flexGrid.autoSizeColumns();\r\n return;\r\n }\r\n\r\n if (flexGrid && resizeAutomatically) {\r\n flexGrid.autoSizeColumns();\r\n return;\r\n }\r\n\r\n if (flexGrid && columnsResized) {\r\n return;\r\n }\r\n\r\n if (flexGrid && dataSetInformation && dataSetInformation.validDataResponse) {\r\n let numberOfRows = dataSetInformation.totalRowCount\r\n if (numberOfRows && numberOfRows > 0) {\r\n setColumnsResized(true);\r\n flexGrid.autoSizeColumns();\r\n }\r\n }\r\n }\r\n\r\n const processDataSetInformation = () => {\r\n Utils.fetchData(\"auditor/data/datasetInformation?uuid=\" + uuid.current, null, false, true)\r\n .then((response) => {\r\n setDataSetInformation(response);\r\n }).catch((response) => {\r\n Utils.getErrorMessage(response, \"Error getting dataset information\").then(setErrorMessageContents);\r\n setErrorMessageTitle(\"Error\")\r\n });\r\n };\r\n\r\n const updateColumns = (firstEmptyResponse) => {\r\n console.log(\">> updateColumns\");\r\n const dataSetColumnOrder = updateColumnsFromDataset();\r\n\r\n if (firstEmptyResponse) {\r\n updateColumnOrderFromMap(dataSetColumnOrder)\r\n } else if (flexGridColumnOrder) {\r\n updateColumnOrderFromSavedGridLayout(flexGridColumnOrder);\r\n } else if (configurationColumnLayout) {\r\n updateColumnOrderFromConfigurationColumnLayout();\r\n } else if (dataSetColumnOrder) {\r\n updateColumnOrderFromMap(dataSetColumnOrder)\r\n }\r\n\r\n resizeColumns();\r\n\r\n if (undoUndeleteActive) {\r\n if (flexGrid && flexGrid.columns) {\r\n flexGrid.columns.forEach((column) => {\r\n if (column.binding === \"Undo\") {\r\n if (column.cssClass !== \"column-set\") {\r\n //setAddedSelector(true);\r\n\r\n column.width = 90;\r\n column.isReadOnly = false;\r\n column.align = 'center';\r\n column.cssClass = \"column-set\"\r\n\r\n new Selector(column, {});\r\n }\r\n }\r\n });\r\n }\r\n } else {\r\n if (flexGrid && flexGrid.columns) {\r\n let removeColumns = flexGrid.columns.filter((column) => column.binding === \"Undo\");\r\n for (const removeColumn of removeColumns) {\r\n //setAddedSelector(false);\r\n flexGrid.columns.remove(removeColumn);\r\n }\r\n }\r\n }\r\n // add a SelectorColumn to the first row data column\r\n }\r\n\r\n const updateColumnsFromDataset = () => {\r\n console.log(\">> updateColumnsFromDataset\");\r\n\r\n if (!(flexGrid && flexGrid.columns && dataSetInformation)) {\r\n return\r\n }\r\n\r\n let targetColumns = flexGrid.columns\r\n let columnsFromLayout = new Set();\r\n let hasColumns = false\r\n if (configurationColumnLayout) {\r\n const columnLayoutObj = JSON.parse(configurationColumnLayout);\r\n const sourceColumns = columnLayoutObj.columns\r\n if (sourceColumns) {\r\n hasColumns = true;\r\n let pos = 0;\r\n while (pos < sourceColumns.length) {\r\n let el = sourceColumns[pos];\r\n columnsFromLayout.add(el.binding);\r\n pos++;\r\n }\r\n }\r\n }\r\n\r\n if (!(targetColumns)) {\r\n return\r\n }\r\n\r\n //\r\n // Adds any missing event columns and remove any extra event columns - make navigation clean \r\n //\r\n let sourceColumns = dataSetInformation.dataSetColumnsFromMeta\r\n let sourceColumnBindingArray = sourceColumns.map((column) => column.formattedName)\r\n let sourceColumnSet = new Set(sourceColumnBindingArray);\r\n let targetColumnBindingArray = targetColumns.map((column) => column.binding)\r\n let targetColumnSet = new Set(targetColumnBindingArray);\r\n\r\n //\r\n // Adds any missing regular columns \r\n for (let sourceColumn of sourceColumns) {\r\n if (targetColumnSet.has(sourceColumn.formattedName)) {\r\n continue\r\n }\r\n\r\n if (sourceColumn && sourceColumn.formattedName && !sourceColumn.formattedName.startsWith(\":\")) {\r\n let newColumn = new Column(\r\n {\r\n name: sourceColumn.formattedName,\r\n header: sourceColumn.formattedName,\r\n binding: sourceColumn.formattedName\r\n });\r\n flexGrid.columns.push(newColumn);\r\n }\r\n }\r\n\r\n //\r\n // Adds any missing event columns \r\n for (let sourceColumn of sourceColumns) {\r\n if (targetColumnSet.has(sourceColumn.formattedName)) {\r\n continue\r\n }\r\n\r\n if (sourceColumn && sourceColumn.formattedName && sourceColumn.formattedName.startsWith(\":\")) {\r\n let newColumn = new Column(\r\n {\r\n name: sourceColumn.formattedName,\r\n header: sourceColumn.formattedName,\r\n binding: sourceColumn.formattedName\r\n });\r\n flexGrid.columns.push(newColumn);\r\n }\r\n }\r\n\r\n //\r\n // Removes any extra event columns that are not in the layout\r\n let removeColumns = new Set()\r\n let filters = flexFilterGrid.current\r\n console.table(filters)\r\n for (const targetColumn of targetColumns) {\r\n if (targetColumn.binding && targetColumn.binding === \"LoadingData...\" && dataSetInformation && dataSetInformation.validDataResponse) {\r\n removeColumns.add(targetColumn)\r\n continue\r\n }\r\n\r\n if (targetColumn.binding && targetColumn.binding.startsWith(\":\")) {\r\n let targetColumnFilter = flexFilterGrid.current.getColumnFilter(targetColumn.binding);\r\n if (targetColumnFilter && targetColumnFilter.isActive) {\r\n // Won't remove an active filter\r\n continue\r\n }\r\n\r\n if (!sourceColumnSet.has(targetColumn.binding)) {\r\n if (hasColumns && columnsFromLayout.has(targetColumn.binding)) {\r\n console.log(`Column ${targetColumn.binding} is in layout, won't remove it`)\r\n } else {\r\n console.log(\"Will remove column [\" + targetColumn.binding + \"]\")\r\n removeColumns.add(targetColumn)\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (const removeColumn of removeColumns) {\r\n flexGrid.columns.remove(removeColumn);\r\n }\r\n\r\n const sourceColumnPositionMap = new Map();\r\n for (const sourceColumn of sourceColumns) {\r\n sourceColumnPositionMap.set(sourceColumn.formattedName, sourceColumn.index);\r\n }\r\n //updateColumnOrderFromMap(sourceColumnPositionMap);\r\n\r\n return sourceColumnPositionMap;\r\n }\r\n\r\n const updateColumnOrderFromConfigurationColumnLayout = () => {\r\n console.log(\">> updateColumnOrderFromConfigurationColumnLayout\");\r\n\r\n if (configurationColumnLayout && flexGrid && flexGrid.columns) {\r\n updateColumnOrderFromSavedGridLayout(configurationColumnLayout);\r\n }\r\n }\r\n\r\n const updateColumnOrderFromSavedGridLayout = (savedColumnLayout) => {\r\n console.log(\">> updateColumnOrderFromSavedGridLayout\");\r\n\r\n if (savedColumnLayout && flexGrid && flexGrid.columns) {\r\n const columnLayoutObj = JSON.parse(savedColumnLayout);\r\n const sourceColumns = columnLayoutObj.columns\r\n\r\n if (sourceColumns) {\r\n const sourceColumnPositionMap = new Map();\r\n const sourceColumnWidthMap = new Map();\r\n\r\n let pos = 0;\r\n while (pos < sourceColumns.length) {\r\n let el = sourceColumns[pos];\r\n sourceColumnPositionMap.set(el.binding, pos);\r\n sourceColumnWidthMap.set(el.binding, el.width);\r\n pos++;\r\n }\r\n\r\n updateColumnOrderFromMap(sourceColumnPositionMap);\r\n\r\n let targetColumns = flexGrid.columns\r\n targetColumns.forEach((column) => {\r\n let width = sourceColumnWidthMap.get(column.binding)\r\n if (width) {\r\n column.width = width;\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n const updateColumnOrderFromMap = (sourceColumnPositionMap) => {\r\n console.log(\">> updateColumnOrderFromMap\");\r\n\r\n if (flexGrid && flexGrid.columns) {\r\n let targetColumns = flexGrid.columns\r\n targetColumns.sort((el1, el2) => {\r\n if (el1.binding === \"Undo\") {\r\n return -1;\r\n } else if (el2.binding === \"Undo\") {\r\n return +1;\r\n }\r\n\r\n const pos1 = sourceColumnPositionMap.get(el1.binding);\r\n const pos2 = sourceColumnPositionMap.get(el2.binding);\r\n if (!isNaN(pos1) && !isNaN(pos2)) {\r\n if (pos1 < pos2) {\r\n return -1;\r\n } else if (pos1 > pos2) {\r\n return +1;\r\n } else {\r\n return 0;\r\n }\r\n } else if (!isNaN(pos1)) {\r\n return -1;\r\n } else if (!isNaN(pos2)) {\r\n return +1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n }\r\n }\r\n\r\n// const queueSaveTableStateTimer = () => {\r\n// console.log(\">> queueSaveTableStateTimer\");\r\n// setTimeout(saveTableState);\r\n// };\r\n\r\n const getTableConfigPath = () => {\r\n return `${path}:${entityName}`;\r\n };\r\n\r\n /**\r\n * Customize common enum columns by defining special filter editors.\r\n */\r\n const configurePredefinedCustomColumnFilters = () => {\r\n console.log(\">> configureCustomColumnFilters\")\r\n\r\n //\r\n // Sets the filter expressions to be the only ones allowed on string columns\r\n if (appSettings && appSettings.primaveraDataServicesSource) {\r\n flexFilterGrid.current.stringOperators = [{name: '(not set)', op: null},\r\n {name: 'Equals', op: Operator.EQ},\r\n {name: 'Does not equal', op: Operator.NE}]\r\n }\r\n };\r\n\r\n /**\r\n * Customize common enum columns by defining special filter editors.\r\n */\r\n const configureFiltersFromDataset = () => {\r\n console.log(\">> configureFiltersFromDataset\")\r\n\r\n const filter = flexFilterGrid.current\r\n if (filter && dataSetInformation && dataSetInformation.customFilters) {\r\n for (let [key, value] of Object.entries(dataSetInformation.customFilters)) {\r\n console.log(key)\r\n let column = flexFilterGrid.current.getColumnFilter(\r\n key\r\n );\r\n if (column) {\r\n column.valueFilter.uniqueValues = value\r\n column.filterType = FilterType.Value; // set the filter type\r\n }\r\n }\r\n }\r\n };\r\n\r\n const configureFilters = (forceSet) => {\r\n console.log(\">> configureFilters\")\r\n\r\n let filtersChanged = false\r\n\r\n try {\r\n const filterDefinition = Config.fromPath(\r\n getTableConfigPath() + \":filterDefinition\",\r\n true\r\n ).data.value;\r\n\r\n console.log(`>>> configureFilters - filter definition (wanted) - ${filterDefinition}`);\r\n console.log(`>>> configureFilters - filter definition (current.filterDefinition) - ${flexFilterGrid.current.filterDefinition}`);\r\n\r\n if (filterDefinition && (\r\n flexFilterGrid.current.filterDefinition !== filterDefinition || forceSet)\r\n ) {\r\n console.log(`>>> configureFilters - setting grid definition to ${filterDefinition}`);\r\n flexFilterGrid.current.filterDefinition = filterDefinition;\r\n filtersChanged = true;\r\n }\r\n\r\n configurePredefinedCustomColumnFilters();\r\n } catch (e) {\r\n console.error(\"Error in configureFilters: \" + e);\r\n }\r\n\r\n return filtersChanged\r\n }\r\n\r\n const loadTableState = () => {\r\n console.log(\">> loadTableState\")\r\n\r\n const columnLayout = Config.fromPath(\r\n getTableConfigPath() + \":columnLayout\",\r\n true\r\n ).data.value;\r\n\r\n let sortDescriptions = Config.fromPath(\r\n getTableConfigPath() + \":sortDescriptions\",\r\n true\r\n ).data.value;\r\n\r\n let pageSizeFromConfig = Config.fromPath(\r\n getTableConfigPath() + \":pageSize\", true\r\n ).data.value;\r\n\r\n let frozenColumnsFromConfig = Config.fromPath(\r\n getTableConfigPath() + \":frozenColumns\", true\r\n ).data.value;\r\n\r\n if (columnLayout) {\r\n setColumnsResized(true);\r\n setConfigurationColumnLayout(columnLayout);\r\n } else {\r\n resizeColumns();\r\n }\r\n\r\n let filtersChanged = configureFilters();\r\n configureFiltersFromDataset();\r\n\r\n const view = flexGrid.collectionView;\r\n if (sortDescriptions) {\r\n sortDescriptions = JSON.parse(sortDescriptions);\r\n // restore sort state\r\n view.deferUpdate(function () {\r\n view.sortDescriptions.clear();\r\n for (var i = 0; i < sortDescriptions.length; i++) {\r\n var sortDesc = sortDescriptions[i];\r\n view.sortDescriptions.push(\r\n new wjcCore.SortDescription(sortDesc.property, sortDesc.ascending)\r\n );\r\n }\r\n });\r\n }\r\n\r\n if (!isNaN(pageSizeFromConfig) && parseInt(pageSizeFromConfig)) {\r\n setPageSize(pageSizeFromConfig);\r\n view.pageSize = parseInt(pageSizeFromConfig);\r\n }\r\n if (!isNaN(frozenColumnsFromConfig) && parseInt(frozenColumnsFromConfig)) {\r\n setFrozenColumns(frozenColumnsFromConfig);\r\n if (flexGrid) {\r\n flexGrid.frozenColumns = parseInt(frozenColumnsFromConfig);\r\n }\r\n }\r\n\r\n return filtersChanged;\r\n };\r\n\r\n const handleSubmitUndoButtonClickedInternal = () => {\r\n if (handleSubmitUndoButtonClicked && flexGrid) {\r\n const selectedItems = flexGrid.selectedItems.map((item) => item.AuditRecordKey);\r\n handleSubmitUndoButtonClicked(selectedItems);\r\n }\r\n }\r\n //\r\n // const onFlexgridChange = (event) => {\r\n // console.log(\"event\");\r\n // }\r\n\r\n return (\r\n <>\r\n {errorMessageContents.open && (\r\n \r\n \r\n \r\n {errorMessageTitle}\r\n
\r\n {!hideGridFilterError && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n No records found\r\n \r\n \r\n \r\n )}\r\n {hideGridFilterError && (\r\n \"Please select one or more objects in the 'Filter by' area to show usage results\"\r\n )}\r\n
\r\n \r\n
\r\n
\r\n >\r\n );\r\n}\r\nexport default AuditorReportPage;\r\n","//\r\n// Copyright 2020 Emerald Associates, Inc. All Rights Reserved.\r\n//\r\n// Use of this file other than by Emerald Associates, Inc. is forbidden\r\n// unless otherwise authorized by a separate written license agreement.\r\n//\r\n// $Id$\r\n//\r\n\r\nimport React from \"react\";\r\nimport {makeStyles, withStyles} from \"@material-ui/core/styles\";\r\nimport {ListBox} from \"@grapecity/wijmo.react.input\";\r\nimport \"@grapecity/wijmo.styles/wijmo.css\";\r\nimport \"src/components/auditor/wijmo.css\";\r\nimport * as Config from \"eai-configurator-ui/components/configuration/utils/ConfigurationRegistry\";\r\nimport AuditorReportTable from \"src/components/auditor/table/AuditorReportTable\";\r\nimport ConfigurationSwitch from \"eai-configurator-ui/components/configuration/base/ConfigurationSwitch\";\r\nimport ConfigurationAsyncComboBox from \"eai-configurator-ui/components/configuration/base/ConfigurationAsyncComboBox\";\r\nimport MessageDialog from \"eai-configurator-ui/components/configuration/dialog/MessageDialog\";\r\nimport Badge from \"@material-ui/core/Badge\";\r\nimport SettingsIcon from \"@material-ui/icons/Settings\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Accordion from \"@material-ui/core/ExpansionPanel\";\r\nimport AccordionSummary from \"@material-ui/core/ExpansionPanelSummary\";\r\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\r\nimport AccordionDetails from \"@material-ui/core/ExpansionPanelDetails\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport * as Utils from \"eai-configurator-ui/components/Utils\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n button: {\r\n margin: \"3px\",\r\n },\r\n grid: {\r\n position: \"relative\",\r\n },\r\n backdrop: {\r\n zIndex: theme.zIndex.drawer + 1,\r\n color: \"#00A994\",\r\n position: \"absolute\",\r\n backgroundColor: \"rgba(255,255, 255, 0.5)\",\r\n },\r\n columnPickerIcon: {\r\n cursor: \"pointer\",\r\n color: \"#FF8754\",\r\n margin: \"3px\",\r\n },\r\n columnPickerDiv: {\r\n display: \"none\",\r\n },\r\n columnPicker: {\r\n /* IE fallback */\r\n padding: \"12px\",\r\n marginLeft: \"12px\",\r\n marginTop: \"26px\",\r\n boxShadow: \"0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23)\",\r\n },\r\n accordion: {marginTop: -6},\r\n expandablePanel: {margin: 0},\r\n expandablePanelIcon: {},\r\n}));\r\n\r\nconst StyledBadge = withStyles((theme) => ({\r\n badge: {\r\n left: -3,\r\n top: 18,\r\n padding: \"0 4px\",\r\n },\r\n}))(Badge);\r\n\r\nconst AuditorEventTablePage = ({path, appSettings, selectedEntity, navigateToResults}) => {\r\n const columnPicker = React.useRef(null);\r\n\r\n //\r\n const [ignoredFieldsDialogOpen, setIgnoredFieldsDialogOpen] = React.useState(false);\r\n const [undoDialogOpen, setUndoDialogOpen] = React.useState(false);\r\n const [undoUndeleteActive, setUndoUndeleteActive] = React.useState(false);\r\n const [undoingChanges, setUndoingChanges] = React.useState(false);\r\n const [undeletingChanges, setUndeletingChanges] = React.useState(false);\r\n\r\n React.useEffect(() => {\r\n setUndoUndeleteActive(undoingChanges || undeletingChanges);\r\n }, [undoingChanges, undeletingChanges])\r\n\r\n //\r\n const [ignoredFieldsFilterEnabled, setIgnoredFieldsFilterEnabled,] = React.useState(\r\n Config.fromPath(path + \":ignoredFieldsFilterEnabled\", true).data.value\r\n );\r\n\r\n //\r\n const [incrementalDataRetrieval, setIncrementalDataRetrieval,] = React.useState(\r\n Config.fromPath(path + \":incrementalDataRetrieval\", true).data.value\r\n );\r\n\r\n //\r\n const [loadCustomFields, setLoadCustomFields,] = React.useState(\r\n Config.fromPath(path + \":loadCustomFields\", true).data.value\r\n );\r\n\r\n //\r\n const [loadCustomFieldsColumns, setLoadCustomFieldsColumns,] = React.useState(\r\n Config.fromPath(path + \":loadCustomFieldsColumns\", true).data.value\r\n );\r\n\r\n //\r\n const [refreshAutomatically, setRefreshAutomatically,] = React.useState(\r\n Config.fromPath(path + \":refreshAutomatically\", true).data.value\r\n );\r\n\r\n //\r\n const [resizeAutomatically, setResizeAutomatically,] = React.useState(\r\n Config.fromPath(path + \":resizeColumnsAutomatically\", true).data.value\r\n );\r\n\r\n const handleIncrementalDataRetrievalChanged = (value) => {\r\n setIncrementalDataRetrieval(() => value === true || value === \"true\");\r\n Config.setDataValue(path + \":incrementalDataRetrieval\", value === true || value === \"true\");\r\n };\r\n\r\n const handleLoadCustomFieldsChanged = (value) => {\r\n setLoadCustomFields(() => value === true || value === \"true\");\r\n Config.setDataValue(path + \":loadCustomFields\", value === true || value === \"true\");\r\n };\r\n\r\n const handleLoadCustomFieldsColumnsChanged = (value) => {\r\n setLoadCustomFieldsColumns(() => value === true || value === \"true\");\r\n Config.setDataValue(path + \":loadCustomFieldsColumns\", value === true || value === \"true\");\r\n };\r\n\r\n const handleRefreshAutomaticallyChanged = (value) => {\r\n setRefreshAutomatically(() => value === true || value === \"true\");\r\n Config.setDataValue(path + \":refreshAutomatically\", value === true || value === \"true\");\r\n };\r\n\r\n const handleResizeColumnsAutomaticallyChanged = (value) => {\r\n setResizeAutomatically(() => value === true || value === \"true\");\r\n Config.setDataValue(path + \":resizeColumnsAutomatically\", value === true || value === \"true\");\r\n };\r\n\r\n const handleUndoButtonClicked = () => {\r\n setUndoDialogOpen(true);\r\n }\r\n\r\n const handleUndeleteChangesButtonClicked = () => {\r\n setUndoDialogOpen(false);\r\n setUndeletingChanges(true);\r\n }\r\n const handleCancelUndoButtonClicked = () => {\r\n setUndoingChanges(false);\r\n setUndeletingChanges(false);\r\n // setUndoDialogOpen(true);\r\n }\r\n const handleSubmitUndoButtonClicked = (records) => {\r\n let undoType = \"INVALID\";\r\n if (undeletingChanges) {\r\n undoType = \"UNDELETE\";\r\n }\r\n setUndoingChanges(false);\r\n setUndeletingChanges(false);\r\n\r\n let params = {\r\n undoType: undoType,\r\n undoKeys: records,\r\n entityKey: selectedEntity.key,\r\n entityName: selectedEntity.name\r\n }\r\n const submitBody = Utils.createFormBody(params)\r\n\r\n Utils.fetchNonJsonDataUsingNonJson(\r\n \"auditor/submitUndo\",\r\n {\r\n method: \"post\",\r\n credentials: \"include\",\r\n headers: {\r\n \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n },\r\n body: submitBody\r\n }).catch((response) => {\r\n // Need to show error\r\n Utils.getErrorMessage(response, \"Submit undo failed.\")\r\n .then(alert);\r\n // setUndoDialogOpen(true);\r\n }).then(() => {\r\n console.log(\"navigateToResults\")\r\n navigateToResults();\r\n }\r\n );\r\n }\r\n\r\n const handleInitializeColumnPicker = (p) => {\r\n columnPicker.current = p;\r\n };\r\n\r\n const classes = useStyles();\r\n\r\n let ignoredFields = null;\r\n if (String(ignoredFieldsFilterEnabled) === \"true\") {\r\n ignoredFields = Config.fromPath(\r\n `${path}:ignoredField${selectedEntity.key}`,\r\n true\r\n ).data.value;\r\n }\r\n\r\n return (\r\n
\r\n \r\n Undo/ undelete changes made by other users. Please select the action you want to perform:\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Undelete data from the database.\r\n \r\n \r\n \r\n \r\n After selecting an action to perform, the data will be filtered to show only relevant events.\r\n \r\n \r\n Select the events on which you perform the action and click the [Submit Undo] button. You can also cancel\r\n the undo operation by clicking the [Cancel Undo] button.\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\nexport default AuditorEventTablePage;\r\n","//\r\n// Copyright 2020 Emerald Associates, Inc. All Rights Reserved.\r\n//\r\n// Use of this file other than by Emerald Associates, Inc. is forbidden\r\n// unless otherwise authorized by a separate written license agreement.\r\n//\r\n// $Id$\r\n//\r\n\r\nimport React from \"react\";\r\nimport {makeStyles} from \"@material-ui/core/styles\";\r\nimport Label from \"eai-configurator-ui/components/base/Label\";\r\nimport \"@grapecity/wijmo.styles/wijmo.css\";\r\nimport \"src/components/auditor/wijmo.css\";\r\nimport AuditorReportTable from \"src/components/auditor/table/AuditorReportTable\";\r\nimport Paper from \"@material-ui/core/Paper\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport AccordionSummary from \"@material-ui/core/ExpansionPanelSummary\";\r\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\r\nimport AccordionDetails from \"@material-ui/core/ExpansionPanelDetails\";\r\nimport Accordion from \"@material-ui/core/ExpansionPanel\";\r\nimport TreeView from \"eai-configurator-ui/components/base/TreeView\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n button: {\r\n margin: \"3px\",\r\n },\r\n grid: {\r\n position: \"relative\",\r\n },\r\n backdrop: {\r\n zIndex: theme.zIndex.drawer + 1,\r\n color: \"#00A994\",\r\n position: \"absolute\",\r\n backgroundColor: \"rgba(255,255, 255, 0.5)\",\r\n },\r\n columnPickerIcon: {\r\n cursor: \"pointer\",\r\n color: \"#FF8754\",\r\n margin: \"3px\",\r\n },\r\n columnPickerDiv: {\r\n display: \"none\",\r\n },\r\n columnPicker: {\r\n /* IE fallback */\r\n padding: \"12px\",\r\n marginLeft: \"12px\",\r\n marginTop: \"26px\",\r\n boxShadow: \"0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23)\",\r\n },\r\n paper: {\r\n padding: theme.spacing(2),\r\n color: theme.palette.text.secondary,\r\n maxHeight: \"300px\",\r\n overflow: \"auto\",\r\n height: \"100%\",\r\n },\r\n accordion: {marginTop: -6},\r\n expandablePanel: {margin: 0},\r\n expandablePanelIcon: {},\r\n}));\r\n\r\nconst AuditorUsageTablePage = ({path, appSettings, selectedEntity}) => {\r\n const classes = useStyles();\r\n const [selectedEpsNodes, setSelectedEpsNodes] = React.useState(null);\r\n const [selectedObjectIds, setSelectedObjectIds] = React.useState(null);\r\n\r\n const handleCheckedObjectIdsChanged = (nodeIds) => {\r\n console.log(\">> AuditorUsageTablePage.handleCheckedObjectIdsChanged\")\r\n setSelectedObjectIds(nodeIds);\r\n };\r\n\r\n const handleCheckedProjectIdsChanged = (nodeIds) => {\r\n console.log(\">> AuditorUsageTablePage.handleCheckedProjectIdsChanged\")\r\n setSelectedEpsNodes(nodeIds);\r\n };\r\n\r\n const title = selectedEntity.displayName + \" Usage Report\"\r\n\r\n return (\r\n \r\n \r\n )\r\n};\r\nexport default AuditorUsageTablePage;\r\n","//\r\n// Copyright 2020 Emerald Associates, Inc. All Rights Reserved.\r\n//\r\n// Use of this file other than by Emerald Associates, Inc. is forbidden\r\n// unless otherwise authorized by a separate written license agreement.\r\n//\r\n// $Id$\r\n//\r\n\r\nimport React from \"react\";\r\nimport {makeStyles} from \"@material-ui/core/styles\";\r\nimport Label from \"eai-configurator-ui/components/base/Label\";\r\nimport * as wijmo from \"@grapecity/wijmo\";\r\nimport \"@grapecity/wijmo.styles/wijmo.css\";\r\nimport \"src/components/auditor/wijmo.css\";\r\nimport * as Config from \"eai-configurator-ui/components/configuration/utils/ConfigurationRegistry\";\r\nimport AuditorReportTable from \"src/components/auditor/table/AuditorReportTable\";\r\nimport * as wjChart from \"@grapecity/wijmo.react.chart\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n button: {\r\n margin: \"3px\",\r\n },\r\n grid: {\r\n position: \"relative\",\r\n },\r\n backdrop: {\r\n zIndex: theme.zIndex.drawer + 1,\r\n color: \"#00A994\",\r\n position: \"absolute\",\r\n backgroundColor: \"rgba(255,255, 255, 0.5)\",\r\n },\r\n columnPickerIcon: {\r\n cursor: \"pointer\",\r\n color: \"#FF8754\",\r\n margin: \"3px\",\r\n },\r\n columnPickerDiv: {\r\n display: \"none\",\r\n },\r\n columnPicker: {\r\n /* IE fallback */\r\n padding: \"12px\",\r\n marginLeft: \"12px\",\r\n marginTop: \"26px\",\r\n boxShadow: \"0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23)\",\r\n },\r\n paper: {\r\n padding: theme.spacing(2),\r\n color: theme.palette.text.secondary,\r\n maxHeight: \"300px\",\r\n overflow: \"auto\",\r\n height: \"100%\",\r\n },\r\n}));\r\n\r\nconst AuditorUserActivityTablePage = ({path, appSettings, selectedEntity}) => {\r\n const [renderCounter, setRenderCounter] = React.useState(0);\r\n const [selectedEpsNodes, setSelectedEpsNodes] = React.useState(null);\r\n const [selectedObjectIds, setSelectedObjectIds] = React.useState(null);\r\n const [metadataChangeCounter, setMetadataChangeCounter] = React.useState(0);\r\n const [chart, setChart] = React.useState(null);\r\n const [chartData, setChartData] = React.useState(null);\r\n\r\n const classes = useStyles();\r\n\r\n const chartInitialized = (flex) => {\r\n setChart(flex);\r\n };\r\n\r\n const handleMetadataChanged = () => {\r\n setMetadataChangeCounter(metadataChangeCounter + 1);\r\n };\r\n\r\n // let sum = chartData.map((c) => c.sales).reduce((sum, cur) => sum + cur);\r\n const title = selectedEntity.displayName + \" - User Report\"\r\n\r\n return (\r\n \r\n \r\n );\r\n};\r\nexport default AuditorUserActivityTablePage;\r\n","//\r\n// Copyright 2023 Emerald Associates, Inc. All Rights Reserved.\r\n//\r\n// Use of this file other than by Emerald Associates, Inc. is forbidden\r\n// unless otherwise authorized by a separate written license agreement.\r\n//\r\n// $Id$\r\n//\r\nimport React, {useEffect} from \"react\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport * as Utils from \"eai-configurator-ui/components/Utils\";\r\nimport MessageDialog, {useMessageDialog,} from \"eai-configurator-ui/components/configuration/dialog/MessageDialog\";\r\n\r\nconst TaskDetailsDialog = ({taskId, handleClosed}) => {\r\n const [message, setMessage] = useMessageDialog();\r\n const [messageProps, setMessageProps] = React.useState(null);\r\n\r\n useEffect(() => {\r\n const fetchDetails = () => {\r\n if (taskId) {\r\n Utils.fetchData(\"auditor/taskDetails?id=\" + taskId)\r\n .then((data) => {\r\n setMessageProps({info: true, htmlContents: true});\r\n setMessage(data.detailHtml);\r\n })\r\n .catch(function (response) {\r\n setMessageProps({error: true});\r\n Utils.getErrorMessage(response, \"Request failed.\").then(setMessage);\r\n });\r\n }\r\n };\r\n\r\n if (taskId) {\r\n fetchDetails();\r\n }\r\n // eslint-disable-next-line\r\n }, [taskId]);\r\n\r\n useEffect(() => {\r\n if (!message.open) {\r\n handleClosed();\r\n }\r\n }, [message.open, handleClosed]);\r\n\r\n const handleCopyToClipboard = () => {\r\n Utils.copyFormattedHtmlToClipboard(message.description);\r\n };\r\n\r\n return (\r\n \r\n Copy to clipboard\r\n \r\n ]}\r\n />\r\n );\r\n};\r\nexport default TaskDetailsDialog;\r\n","//\r\n// Copyright 2020 Emerald Associates, Inc. All Rights Reserved.\r\n//\r\n// Use of this file other than by Emerald Associates, Inc. is forbidden\r\n// unless otherwise authorized by a separate written license agreement.\r\n//\r\n// $Id$\r\n//\r\nimport React from \"react\";\r\nimport {makeStyles} from \"@material-ui/core/styles\";\r\nimport Table from \"@material-ui/core/Table\";\r\nimport TableBody from \"@material-ui/core/TableBody\";\r\nimport TableCell from \"@material-ui/core/TableCell\";\r\nimport TableContainer from \"@material-ui/core/TableContainer\";\r\nimport TableHead from \"@material-ui/core/TableHead\";\r\nimport TableRow from \"@material-ui/core/TableRow\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Paper from \"@material-ui/core/Paper\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport * as Utils from \"eai-configurator-ui/components/Utils\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport DetailsIcon from \"@material-ui/icons/Subject\";\r\nimport ErrorIcon from \"@material-ui/icons/Error\";\r\nimport DeleteIcon from \"@material-ui/icons/Delete\";\r\nimport InfoIcon from \"@material-ui/icons/InfoOutlined\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport TaskDetailsDialog from \"src/components/auditor/table/TaskDetailsDialog\";\r\nimport Tooltip from \"@material-ui/core/Tooltip\";\r\nimport Moment from \"moment\";\r\nimport ErrorMessageDialog, {useErrorMessageDialog,} from \"eai-configurator-ui/components/configuration/dialog/ErrorMessageDialog\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n width: \"100%\",\r\n },\r\n paper: {\r\n width: \"100%\",\r\n marginBottom: theme.spacing(2),\r\n },\r\n addItem: {\r\n padding: theme.spacing(2),\r\n },\r\n button: {\r\n marginTop: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n },\r\n table: {\r\n minWidth: 500,\r\n },\r\n visuallyHidden: {\r\n border: 0,\r\n clip: \"rect(0 0 0 0)\",\r\n height: 1,\r\n margin: -1,\r\n overflow: \"hidden\",\r\n padding: 0,\r\n position: \"absolute\",\r\n top: 20,\r\n width: 1,\r\n },\r\n}));\r\n\r\nconst createTimestampMessage = (timestampMillis) => {\r\n return Moment(new Date(timestampMillis)).fromNow();\r\n};\r\n\r\nexport default function AuditorTasksTable({lastFileUploadTimestamp}) {\r\n const classes = useStyles();\r\n const [tasks, setTasks] = React.useState([]);\r\n const [displayDetailsForTask, setDisplayDetailsForTask] = React.useState(null);\r\n const [errorMessage, setErrorMessage] = useErrorMessageDialog();\r\n\r\n const populateTable = React.useCallback(() => {\r\n Utils.fetchData(\"auditor/tasks\")\r\n .then(({tasks}) => {\r\n setTasks(tasks);\r\n })\r\n .catch(function (response) {\r\n Utils\r\n .getErrorMessage(response, \"Failed to refresh tasks.\")\r\n .then(setErrorMessage);\r\n });\r\n }, [setErrorMessage]);\r\n\r\n /**\r\n * Schedule the table re-population every 3 seconds\r\n */\r\n React.useEffect(() => {\r\n let interval = setInterval(() => {\r\n populateTable()\r\n }, 3000)\r\n\r\n return () => {\r\n clearInterval(interval)\r\n }\r\n }, [populateTable]\r\n )\r\n\r\n React.useEffect(() => {\r\n populateTable()\r\n // eslint-disable-next-line\r\n }, []) // Do not accept React's suggestion to fix this. I want it to be an empty array.\r\n\r\n const removeResults = (task) => {\r\n const updatedTasks = [...tasks];\r\n updatedTasks.splice(updatedTasks.indexOf(task), 1);\r\n setTasks(updatedTasks);\r\n\r\n Utils\r\n .fetchNonJsonDataUsingNonJson(\"auditor/remove?id=\" + task.id)\r\n .catch(function (response) {\r\n Utils\r\n .getErrorMessage(response, \"Request failed.\")\r\n .then(setErrorMessage);\r\n });\r\n };\r\n\r\n const isTableEmpty = tasks === undefined || tasks === null || Array.isArray(tasks) === false || tasks.length === 0;\r\n\r\n return (\r\n
\r\n );\r\n}\r\n","//\r\n// Copyright 2021 Emerald Associates, Inc. All Rights Reserved.\r\n//\r\n// Use of this file other than by Emerald Associates, Inc. is forbidden\r\n// unless otherwise authorized by a separate written license agreement.\r\n//\r\n// $Id$\r\n//\r\nimport React from \"react\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport \"react-bootstrap-table-next/dist/react-bootstrap-table2.min.css\";\r\nimport AuditorTasksTable from \"src/components/auditor/table/AuditorTasksTable\";\r\n\r\nconst LoaderTasksPage = () => {\r\n return (\r\n <>\r\n \r\n Results\r\n \r\n \r\n
\r\n \r\n
\r\n >\r\n );\r\n};\r\nexport default LoaderTasksPage;\r\n","//\r\n// Copyright 2020 Emerald Associates, Inc. All Rights Reserved.\r\n//\r\n// Use of this file other than by Emerald Associates, Inc. is forbidden\r\n// unless otherwise authorized by a separate written license agreement.\r\n//\r\n// $Id$\r\n//\r\nimport React from \"react\";\r\nimport Application from \"eai-configurator-ui/components/Application\";\r\nimport ConfigurationDashboard from \"eai-configurator-ui/components/configuration/ConfigurationDashboard\";\r\nimport AccountButton from \"eai-configurator-ui/components/header/buttons/AccountButton\";\r\nimport HelpButton from \"eai-configurator-ui/components/header/buttons/HelpButton\";\r\nimport MessagesButton from \"eai-configurator-ui/components/header/buttons/MessagesButton\";\r\nimport FindInPageIcon from \"@material-ui/icons/FindInPage\";\r\nimport DonutLargeIcon from \"@material-ui/icons/DonutLarge\";\r\nimport PeopleIcon from \"@material-ui/icons/People\";\r\nimport ConfigurationProfileButton from \"eai-configurator-ui/components/configuration/buttons/ConfigurationProfileButton\";\r\nimport SaveConfigurationButton from \"eai-configurator-ui/components/configuration/buttons/SaveConfigurationButton\";\r\nimport {HashRouter as Router} from \"react-router-dom\";\r\nimport AuditorWelcomeOverview from \"src/components/auditor/pages/AuditorWelcomeOverview\";\r\nimport AuditorEventTablePage from \"src/components/auditor/pages/event/AuditorEventTablePage\";\r\nimport AuditorUsageTablePage from \"src/components/auditor/pages/usage/AuditorUsageTablePage\";\r\nimport AuditorUserActivityTablePage from \"src/components/auditor/pages/user_activity/AuditorUserActivityTablePage\";\r\nimport Login from \"eai-configurator-ui/components//login/Login\";\r\nimport ManageUsersButton from \"eai-configurator-ui/components/header/buttons/ManageUsersButton\";\r\nimport ManageUsersDialog from \"eai-configurator-ui/components/configuration/dialog/ManageUsersDialog\";\r\nimport {useConfigProfile} from \"eai-configurator-ui/components/configuration/profile/ConfigurationProfile\";\r\nimport * as Utils from \"eai-configurator-ui/components/Utils\";\r\nimport * as wjcCore from \"@grapecity/wijmo\";\r\nimport {useSessionInfo} from \"eai-configurator-ui/components/SessionInfo\";\r\nimport TeamsConfigurationPermission from \"eai-configurator-ui/components/configuration/permission/TeamsConfigurationPermission\";\r\nimport AssignmentTurnedInIcon from \"@material-ui/icons/AssignmentTurnedIn\";\r\nimport AuditorTasksPage from \"src/components/auditor/pages/AuditorTasksPage\";\r\n\r\nfunction AuditorApplication() {\r\n const [manageUsersDialogOpen, setManageUsersDialogOpen] = React.useState(\r\n false\r\n );\r\n const [profile] = useConfigProfile();\r\n const [sessionInfo] = useSessionInfo();\r\n const [appSettings, setAppSettings] = React.useState({\r\n primaveraDataServicesSource: false,\r\n jdbcSource: false,\r\n userCategories: [],\r\n eventTabs: []\r\n });\r\n const [usageTabs, setUsageTabs] = React.useState([]);\r\n const [userTabs, setUserTabs] = React.useState([]);\r\n\r\n const [navigationIndex, setNavigationIndex] = React.useState(0);\r\n const [subNavigationIndex, setSubNavigationIndex] = React.useState(null);\r\n\r\n //\r\n // Process the event tabs\r\n const [eventNavigation, setEventNavigation] = React.useState([]);\r\n\r\n React.useEffect(() => {\r\n if (appSettings && Array.isArray(appSettings.eventTabs) && Array.isArray(appSettings.eventGroups)) {\r\n //\r\n // Builds the event navigation options\r\n //\r\n const eventTabMap = new Map();\r\n\r\n // Create all groups\r\n appSettings.eventGroups.forEach((groupName) => {\r\n eventTabMap.set(groupName, []);\r\n })\r\n\r\n // Maps all entities to those groups\r\n appSettings.eventTabs.forEach((eventTab) => {\r\n const groupName = eventTab.groupName;\r\n const collection = eventTabMap.get(groupName);\r\n const component = {\r\n label: eventTab.displayName,\r\n component: (\r\n ),\r\n subNavigationIndex: eventTab.tabIndex\r\n }\r\n if (collection == null) {\r\n eventTabMap.set(groupName, [component]);\r\n } else {\r\n collection.push(component);\r\n }\r\n });\r\n\r\n // Builds the navigation\r\n const navigation = [];\r\n eventTabMap.forEach((value, key) => {\r\n navigation.push({\r\n key: key,\r\n section: \"Reporting\",\r\n label: key,\r\n icon: ,\r\n subNavigation: [...value]\r\n });\r\n });\r\n setEventNavigation([...navigation]);\r\n }\r\n\r\n if (appSettings && Array.isArray(appSettings.usageTabs)) {\r\n //\r\n // Builds the usage navigation options\r\n //\r\n const usageTabCollection = [];\r\n appSettings.usageTabs.forEach((eventTab) => {\r\n const component = {\r\n label: eventTab.displayName,\r\n component: (\r\n ),\r\n subNavigationIndex: eventTab.tabIndex\r\n }\r\n usageTabCollection.push(component);\r\n });\r\n setUsageTabs(usageTabCollection);\r\n }\r\n\r\n if (appSettings && Array.isArray(appSettings.userTabs)) {\r\n //\r\n // Builds the user navigation options\r\n //\r\n const userTabCollection = [];\r\n appSettings.userTabs.forEach((eventTab) => {\r\n const component = {\r\n label: eventTab.displayName,\r\n component: (\r\n ),\r\n subNavigationIndex: eventTab.tabIndex\r\n }\r\n userTabCollection.push(component);\r\n });\r\n setUserTabs(userTabCollection);\r\n }\r\n }, [appSettings])\r\n\r\n React.useEffect(() => {\r\n if (sessionInfo) {\r\n Utils.fetchData(\"auditor/wijmo/license\", null, false, false)\r\n .then((response) => response.text())\r\n .then((data) => {\r\n wjcCore.setLicenseKey(data);\r\n })\r\n .catch(function (error) {\r\n // Do not inform the user but print some traces in the console log\r\n console.log(\"Wijmo license fetch failed\");\r\n console.log(error);\r\n });\r\n }\r\n }, [sessionInfo]);\r\n\r\n React.useEffect(() => {\r\n if (sessionInfo) {\r\n Utils.fetchData(\"auditor/appSettings\", null, false, true)\r\n .then((response) => {\r\n console.table(response);\r\n setAppSettings(response);\r\n }).catch((response) => {\r\n // Need to show error\r\n Utils.getErrorMessage(response, \"Retrieve settings failed.\")\r\n .then(alert);\r\n });\r\n }\r\n }, [sessionInfo]);\r\n\r\n const handleNavigationChange = (index, subIndex) => {\r\n setSubNavigationIndex(subIndex);\r\n setNavigationIndex(index);\r\n console.log(\">> handleNavigationChange(\" + index + \", \" + subIndex + \")\");\r\n };\r\n\r\n const navigateToResults = () => {\r\n console.log(\"navigateToResults\")\r\n // setSubNavigationIndex(null);\r\n // setNavigationIndex(0);\r\n };\r\n\r\n return (\r\n \r\n }\r\n application={{\r\n routes: [\r\n {\r\n path: \"/auditor\",\r\n component: (\r\n ,\r\n component: ,\r\n },\r\n ...eventNavigation,\r\n appSettings.jdbcSource && {\r\n key: \"Reporting-Usage\",\r\n section: \"Reporting\",\r\n label: \"Usage Reports\",\r\n icon: ,\r\n subNavigation: [...usageTabs]\r\n },\r\n appSettings.jdbcSource && {\r\n section: \"Reporting\",\r\n label: \"User Reports\",\r\n icon: ,\r\n subNavigation: [...userTabs]\r\n },\r\n ].filter(function (el) {\r\n return el != null && el !== false;\r\n })}\r\n welcomeContent={{\r\n label: \"Welcome\",\r\n component: ,\r\n configuration: \"auditor\",\r\n }}\r\n headerButtons={[\r\n ,\r\n ,\r\n ,\r\n setManageUsersDialogOpen(true)}\r\n />,\r\n ]}\r\n />,\r\n ]}\r\n actionButtons={[\r\n ,\r\n ]}\r\n />\r\n ),\r\n },\r\n ],\r\n defaultRoute: \"auditor\",\r\n }}\r\n >\r\n setManageUsersDialogOpen(false)}\r\n />\r\n \r\n \r\n );\r\n}\r\n\r\nexport default AuditorApplication;\r\n","//\r\n// Copyright 2020 Emerald Associates, Inc. All Rights Reserved.\r\n//\r\n// Use of this file other than by Emerald Associates, Inc. is forbidden\r\n// unless otherwise authorized by a separate written license agreement.\r\n//\r\n// $Id$\r\n//\r\nimport React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport AuditorApplication from \"src/components/auditor/AuditorApplication\";\r\nimport * as wjcCore from \"@grapecity/wijmo\";\r\n\r\nfunction App() {\r\n initializeGlobals();\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\nfunction initializeGlobals() {\r\n // By default, Wijmo formats dates without the time (ie. MM/dd/yyyy)\r\n // Change it to include the time\r\n const oldFn = wjcCore.Globalize.formatDate;\r\n wjcCore.Globalize.formatDate = function (value, format) {\r\n // override default \"d\" format\r\n if (format === \"d\") {\r\n return oldFn.call(this, value, \"MM/dd/yyyy hh:mm tt\");\r\n } else {\r\n return oldFn.call(this, value, format);\r\n }\r\n };\r\n}\r\n\r\nReactDOM.render(, document.getElementById(\"root\"));\r\n"],"sourceRoot":""}