{"version":3,"file":"8c1528e48c470a5ea56b05fb864fc4eddc37b78c-19dd3ec3bfd8c46a7112.js","mappings":"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","sources":["webpack://phmsa-enforcement-data/./src/components/filter-caption.js","webpack://phmsa-enforcement-data/./src/components/Tables/case-list-grid.js","webpack://phmsa-enforcement-data/./src/utils/abbreviation-utils.js","webpack://phmsa-enforcement-data/./src/utils/case-detail-renderers.js","webpack://phmsa-enforcement-data/./src/utils/custom-filters/custom-dropdown-floating-filter.js","webpack://phmsa-enforcement-data/./src/utils/custom-filters/custom-matcher-filter.js","webpack://phmsa-enforcement-data/./src/utils/custom-filters/custom-text-filter.js","webpack://phmsa-enforcement-data/./src/utils/custom-filters/custom-text-floating-filter.js","webpack://phmsa-enforcement-data/./src/utils/custom-filters/custom-year-filter.js","webpack://phmsa-enforcement-data/./src/utils/grid-utils.js","webpack://phmsa-enforcement-data/./src/utils/utils.js"],"sourcesContent":["const FilterCaption = ({filterModel}) => {\r\n const opened_filter_caption = filterModel['openedDt']\r\n ? `Displaying cases initiated in ${filterModel['openedDt'].state}`\r\n : '';\r\n const closed_filter_caption = filterModel['closedDt']\r\n ? `Displaying cases closed in ${filterModel['closedDt'].state}`\r\n : '';\r\n const order_filter_caption = filterModel['orderDt']\r\n ? `Displaying orders issued in ${filterModel['orderDt'].state}`\r\n : '';\r\n\r\n let filter_caption = '';\r\n if (opened_filter_caption && closed_filter_caption)\r\n filter_caption = `${opened_filter_caption} & ${closed_filter_caption}`;\r\n filter_caption ||= opened_filter_caption || closed_filter_caption || order_filter_caption;\r\n return filter_caption ?

{filter_caption}

: <>;\r\n};\r\n\r\nexport default FilterCaption;\r\n","import {useState, useRef} from 'react';\nimport {AgGridReact} from 'ag-grid-react';\nimport {formatDate, dateSorter, createYearsArr} from '../../utils/date-utils';\nimport {decodeAbbreviation, getRegionName} from '../../utils/abbreviation-utils';\nimport {renderLinkedCellData} from '../../utils/render-link-utils';\nimport {grid_accessibility_options} from '../../utils/grid-utils';\nimport {csv_headers} from '../../utils/csv-utils';\nimport {renderCaseStatus} from '../../utils/case-detail-renderers';\nimport {defaultSort} from '../../utils/utils';\nimport {region_arr, status_arr} from '../../utils/text-utils';\nimport customMatcherFilter from '../../utils/custom-filters/custom-matcher-filter';\nimport customYearFilter from '../../utils/custom-filters/custom-year-filter';\nimport customDropdownFloatingFilter from '../../utils/custom-filters/custom-dropdown-floating-filter';\nimport customTextFilter from '../../utils/custom-filters/custom-text-filter';\nimport textFloatingFilter from '../../utils/custom-filters/custom-text-floating-filter';\nimport ExportCSV from '../export-csv';\nimport FilterCaption from '../filter-caption';\n\nexport const default_column_defs = [\n {\n field: 'cpfNum',\n cellRenderer: renderLinkedCellData,\n cellRendererParams: (params) => {\n return {\n path: `/case/${params.value}`,\n };\n },\n headerName: 'Case Number',\n minWidth: 195,\n filter: customTextFilter,\n suppressMenu: true,\n floatingFilter: true,\n floatingFilterComponent: textFloatingFilter,\n },\n {\n field: 'openedDt',\n headerName: 'Date Opened',\n width: 140,\n flex: 0,\n valueGetter: (params) => {\n return formatDate(params.data.openedDt);\n },\n comparator: dateSorter,\n filter: customYearFilter,\n suppressMenu: true,\n floatingFilter: true,\n floatingFilterComponent: customDropdownFloatingFilter,\n floatingFilterComponentParams: {\n filter_id: 'opened',\n suppressFilterButton: true,\n options: createYearsArr(),\n initial_value: 'All Years',\n },\n },\n {\n field: 'operatorName',\n headerName: 'Operator',\n minWidth: 175,\n resizable: true,\n cellRenderer: renderLinkedCellData,\n cellRendererParams: (params) => {\n return {\n path: `/operator/${params.data.operatorId}`,\n value: params.data.operatorId,\n displayName: params.data.operatorName,\n };\n },\n filter: customTextFilter,\n suppressMenu: true,\n floatingFilter: true,\n floatingFilterComponent: textFloatingFilter,\n },\n {\n field: 'region',\n headerName: 'Region',\n width: 130,\n flex: 0,\n sortable: true,\n cellRenderer: getRegionName,\n filter: customMatcherFilter,\n suppressMenu: true,\n floatingFilter: true,\n floatingFilterComponent: customDropdownFloatingFilter,\n floatingFilterComponentParams: {\n filter_id: 'region',\n suppressFilterButton: true,\n options: region_arr,\n initial_value: 'All Regions',\n },\n },\n {\n field: 'closedDt',\n headerName: 'Date Closed',\n width: 120,\n flex: 0,\n comparator: dateSorter,\n valueGetter: (params) => {\n return formatDate(params.data.closedDt);\n },\n filter: customYearFilter,\n suppressMenu: true,\n floatingFilter: true,\n floatingFilterComponent: customDropdownFloatingFilter,\n floatingFilterComponentParams: {\n filter_id: 'closed',\n suppressFilterButton: true,\n options: createYearsArr(),\n initial_value: 'All Years',\n },\n },\n {\n field: 'caseStatus',\n headerName: 'Case Status',\n width: 120,\n flex: 0,\n cellRenderer: renderCaseStatus,\n filter: customMatcherFilter,\n suppressMenu: true,\n floatingFilter: true,\n floatingFilterComponent: customDropdownFloatingFilter,\n floatingFilterComponentParams: {\n filter_id: 'status',\n suppressFilterButton: true,\n options: status_arr,\n },\n },\n {\n field: 'caseType',\n hide: true,\n headerName: 'Case Type',\n cellRenderer: (params) => decodeAbbreviation(params.value),\n },\n];\n\nconst default_col_def = {sortable: true, comparator: defaultSort, resizable: true, flex: 1};\n\nconst query_dict = {\n opened_yr: 'openedDt',\n closed_yr: 'closedDt',\n action_yr: 'orderDt',\n};\n\nconst CaseListGrid = ({\n data,\n col_defs = default_column_defs,\n show_csv = true,\n csv_name_root = 'cases',\n search_query: initial_search_query = {},\n grid_class_name = 'grid-col-10',\n label_string,\n label_footnote,\n aria_labelledby = 'table-label',\n csv_only_column_defs = [],\n}) => {\n const gridRef = useRef();\n const cases = data;\n\n const [csv_data, setCsvData] = useState(data);\n const [csv_filter_note, setCsvFilterNote] = useState(false);\n const [is_manually_filtered, setIsManuallyFiltered] = useState(false);\n\n // add default column definitions for any csv-only fields here, if desired\n const default_csv_only_column_defs = [\n // {\n // field: 'howdiscove',\n // headerName: 'Discovery Method',\n // },\n ];\n\n // Merge the incoming csv-only column defs with the defaults, then\n // exclude any of the fields that are not found in the query's first object\n csv_only_column_defs = [...new Set([...default_csv_only_column_defs, ...csv_only_column_defs])].filter((col) => {\n return Object.keys(cases[0]).includes(col.field);\n });\n\n const updateQueryStrings = (filter_model) => {\n // Only update the query strings the filter has been manually applied\n // If this isn't guarded, the query strings flash before `setFilterModel` is applied in `onGridReady`\n if (is_manually_filtered) {\n // Specify the object for two reasons:\n // The order of the object seems to dictate the order of the query strings (even though it's important to note that objects don't have order)\n // By specifying keys, non-specified filters won't be concatenated as query strings (i.e. Region)\n const search_query = {\n opened_yr: '',\n closed_yr: '',\n action_yr: '',\n };\n Object.keys(search_query).map((key) => {\n const curr_filter = filter_model[query_dict[key]];\n if (curr_filter) {\n search_query[key] = curr_filter['state'];\n } else {\n delete search_query[key];\n }\n });\n // Change the URL without navigating anywhere\n // https://stackoverflow.com/questions/10970078/modifying-a-query-string-without-reloading-the-page\n if (!Object.keys(search_query).length) {\n window.history.replaceState({path: location.pathname}, '', location.pathname);\n } else {\n // compile the updated query keys and values into a query string\n const query_string = '?' + new URLSearchParams(search_query).toString();\n window.history.replaceState({path: location.pathname + query_string}, '', location.pathname + query_string);\n }\n }\n };\n\n const updateCsvData = () => {\n // the `data` value for each node in `rowsToDisplay`\n // contains the full set of queried attributes,\n // so it can furnish what the CSV exporter needs\n // even if the AG-Grid is only displaying a subset\n if (gridRef.current) {\n let new_csv_data = [];\n gridRef.current.api.forEachNodeAfterFilter((node) => {\n let new_csv_row = {...node.data};\n new_csv_data.push(new_csv_row);\n });\n setCsvData(new_csv_data);\n }\n };\n\n const onGridReady = () => {\n const filter_model = {};\n Object.entries(initial_search_query).map(([key, value]) => {\n const col_field = query_dict[key];\n filter_model[col_field] = {state: value};\n });\n gridRef.current.api.setFilterModel(filter_model);\n // Per client's request, .nopv-grid wraps the header, thus needs bigger height\n if (col_defs.some((col) => col.field == 'proposedPenalties')) gridRef.current.api.setHeaderHeight(60);\n };\n\n const onFilterChanged = (grid) => {\n const curr_filters = grid.api.getFilterModel();\n updateQueryStrings(curr_filters);\n setCsvFilterNote(true);\n updateCsvData();\n };\n\n // TODO: make the name of the file reflect the case/order/action\n // taxonomy as well as any applied filters\n\n // Let AGGrid calculate table height if there aren't many rows\n let height = 'normal';\n let height_class = '';\n if (cases.length <= 25) {\n height = 'autoHeight';\n } else {\n height_class = 'set-height';\n }\n return (\n <>\n {label_string && (\n

\n {label_string}\n {label_footnote && (\n \n (\n \n 1\n \n )\n \n )}\n

\n )}\n
\n {gridRef.current && }\n
\n setIsManuallyFiltered(true)}\n domLayout={height}\n />\n
\n
\n {show_csv && (\n \n )}\n \n );\n};\n\nexport default CaseListGrid;\n","export const getRegionName = (data) => {\r\n let region_code;\r\n data.value ? (region_code = data.value) : (region_code = data);\r\n // Certain DB tables contain whitespace-surrounded region names\r\n region_code = region_code.trim();\r\n\r\n switch (region_code) {\r\n default:\r\n return region_code;\r\n case '1 - EASTERN':\r\n return 'Eastern';\r\n case '2 - SOUTHERN':\r\n return 'Southern';\r\n case '3 - CENTRAL':\r\n return 'Central';\r\n case '4 - SOUTHWEST':\r\n return 'Southwest';\r\n case '5 - WESTERN':\r\n return 'Western';\r\n case '9 - HEADQUARTERS':\r\n return 'Headquarters';\r\n }\r\n};\r\n\r\n// Note: LOC case types don't appear on the legacy site, but they exist in the data so I left them in this object\r\nexport const case_abbrevs = {\r\n cao: 'Corrective Action Order',\r\n nopv: 'Notice of Probable Violation',\r\n noa: 'Notice of Amendment',\r\n wl: 'Warning Letter',\r\n pso: 'Notice of Proposed Safety Order',\r\n loc: 'Letter of Concern',\r\n};\r\n\r\n// Note: there are a ton of order types in the SQL. For now, I just included those used on the currently created pages\r\n// TODO: this remapping is no longer needed\r\nexport const order_abbrevs = {\r\n cao: 'Corrective Action Order',\r\n fo: 'Final Order',\r\n co: 'Consent Order',\r\n oda: 'Order Directing Amendment',\r\n so: 'Safety Order',\r\n dop: 'Decision on Petition',\r\n other: 'Other Order',\r\n urlAbbrevs: {\r\n cao: 'cao',\r\n fo: 'fo',\r\n co: 'co',\r\n oda: 'oda',\r\n so: 'so',\r\n dop: 'dop',\r\n other: 'other',\r\n },\r\n};\r\n\r\nexport const decodeAbbreviation = (str) => {\r\n let abbrev = str.toLowerCase();\r\n\r\n if (abbrev in case_abbrevs) {\r\n return case_abbrevs[abbrev];\r\n }\r\n\r\n if (abbrev in order_abbrevs) {\r\n return order_abbrevs[abbrev];\r\n }\r\n\r\n return str;\r\n};\r\n","import {formatDate} from '../utils/date-utils';\nimport {Table} from '@trussworks/react-uswds';\n\nimport {renderCurrency} from '../utils/utils';\n\nconst renderSummaryCaseTypesRow = (scCase) => {\n return (\n \n Case Type\n {scCase.typeOfCase}\n \n );\n};\n\nconst renderCaseStatus = (params) => {\n if (params) return `${params.value && params.value.toLowerCase() === 'open' ? 'Open' : 'Closed'}`;\n};\n\nconst renderSummarySubjectsRow = (scCase) => {\n if (['NOPV', 'NOA', 'WL', 'Other'].includes(scCase.caseType) && scCase.proposedSubjectEt) {\n return (\n \n Item Subject(s)\n {scCase.proposedSubjectEt.replace(/\\|/g, '\\n')}\n \n );\n }\n};\n\nconst renderProposedPenaltyRow = (scCase) => {\n if (['NOPV', 'Other'].includes(scCase.caseType) && scCase.cpInd === 'Yes') {\n return (\n \n Proposed Civil Penalty\n {renderCurrency(scCase.proposedPenalties)}\n \n );\n }\n};\n\nconst renderSummaryTotalPaidRow = (scCase) => {\n if (scCase.cpInd === 'Yes' && ['NOPV', 'Other'].includes(scCase.caseType)) {\n return (\n \n Collected Civil Penalty\n {renderCurrency(scCase.collected)}\n \n );\n }\n};\n\nconst renderSummaryAssessedPenaltyRow = (scCase) => {\n if (scCase.assessedPenalties > 0 && ['NOPV', 'Other'].includes(scCase.caseType)) {\n return (\n \n Assessed Civil Penalty\n {renderCurrency(scCase.assessedPenalties)}\n \n );\n }\n};\n\nconst renderNoticeActionEtRow = (scCase) => {\n if (['NOA', 'NOPV', 'WL', 'Other'].includes(scCase.caseType)) {\n return (\n \n Proposed Actions\n {scCase.noticeActionEt}\n \n );\n }\n};\n\nconst renderProposedTotalItemsRow = (scCase) => {\n if (['NOA', 'NOPV', 'WL'].includes(scCase.caseType)) {\n return (\n \n Total Proposed Item(s)\n {scCase.proposedTotalItems}\n \n );\n }\n};\n\nconst renderSummaryReducedReasonsRow = (scCase) => {\n if (['NOPV'].includes(scCase.caseType) && scCase.reducedReason) {\n return (\n \n Basis for Penalty Reduction\n {scCase.reducedReason}\n \n );\n }\n};\n\nconst renderWithdrawnAllegationsRow = (scCase) => {\n if (['NOPV', 'NOA'].includes(scCase.caseType) && scCase.withdrawAllegationEt) {\n {\n return (\n \n Withdrawn Allegation(s)\n {scCase.withdrawAllegationEt.replace(/\\|/g, '\\n')}\n \n );\n }\n }\n};\n\nconst renderWithdrawReasonRow = (scCase) => {\n if (['NOPV', 'NOA'].includes(scCase.caseType) && scCase.withdrawReason) {\n return (\n \n Basis for Withdrawn\n {scCase.withdrawReason}\n \n );\n }\n};\n\nconst renderWithdrawDtRow = (scCase) => {\n if (['CAO', 'PSO'].includes(scCase.caseType) && scCase.withdrawDt) {\n return (\n \n Case Withdrawn?\n {scCase.withdrawInd ? 'Withdrawn as of ' + formatDate(scCase.withdrawDt) : 'No'}\n \n );\n }\n};\n\nconst renderSummaryComplianceOrderRow = (scCase) => {\n if (scCase.coInd === 'Yes') {\n if (scCase.consentOrderDt || scCase.finalOrderDt) {\n return (\n \n Compliance Order\n {scCase.coInd === 'Yes' ? 'Yes' : 'No'}\n \n );\n }\n }\n};\n\nconst renderSummaryConsentOrderDateRow = (scCase) => {\n if (scCase.consentOrderDt) {\n return (\n \n Consent Order Date\n {formatDate(scCase.consentOrderDt)}\n \n );\n }\n};\n\nconst renderSummaryClosedDateRow = (scCase) => {\n if (scCase.caseStatus === 'CLOSED') {\n return (\n \n Date Closed\n {formatDate(scCase.closedDt)}\n \n );\n }\n};\n\nconst renderSummaryFinalOrderDateRow = (scCase) => {\n if (scCase.finalOrderDt) {\n return (\n \n Final Order Date\n {formatDate(scCase.finalOrderDt)}\n \n );\n }\n};\n\nconst renderLatestOrderTypeRow = (scCase) => {\n if (['NOPV', 'NOA', 'CAO', 'PSO'].includes(scCase.caseType) && scCase.latestOrderType) {\n return (\n \n Latest Order Type\n {scCase.latestOrderType}\n \n );\n }\n};\n\nconst renderLatestOrderDtRow = (scCase) => {\n if (['NOPV', 'NOA', 'CAO', 'PSO'].includes(scCase.caseType) && scCase.latestOrderDt) {\n return (\n \n Latest Order Date\n {formatDate(scCase.latestOrderDt)}\n \n );\n }\n};\n\nconst renderIncidentDetailRow = (scCase) => {\n if (scCase.incidentDetail) {\n return (\n \n 30 Days Incident Report\n {scCase.incidentDetail}\n \n );\n } else return;\n};\n\nconst renderTableCaption = (table_alt_caption) => {\n if (table_alt_caption) {\n return table_alt_caption;\n } else\n return (\n <>\n

Documents

\n

\n Response options for NOPV and NOA cases are included in the enclosure “Response Options for Pipeline\n Operators & Excavators in Enforcement Proceedings”, this document is also available on the PHMSA\n Pipeline Enforcement webpage. All other case types include response details in the issued notice or order (as\n appropriate).\n

\n

The corresponding document format at the time the case was opened may differ from document displayed.

\n \n );\n};\n\nconst renderDocumentTable = (case_documents, options) => {\n options = options || {};\n options.is_excavation = Object.hasOwn(options, 'is_excavation') ? options.is_excavation : false;\n const table_title = Object.hasOwn(options, 'alt_title') ? options.alt_title : 'File';\n const table_alt_caption = Object.hasOwn(options, 'alt_caption') ? options.alt_caption : undefined;\n\n if (case_documents.length > 0) {\n // assign the public URL path to each document\n // the test will fail if process.env.GATSBY_DOCUMENT_SERVER_PATH is undefined\n case_documents.forEach((doc) => {\n doc.publicUrl = `${process.env.GATSBY_DOCUMENT_SERVER_PATH}/${doc.cpf}/${doc.name}`;\n });\n return (\n <>\n {renderTableCaption(table_alt_caption)}\n\n \n \n \n \n \n \n \n {case_documents.map((doc) => (\n \n \n \n ))}\n \n
{table_title}
\n \n {doc.name}\n \n
\n \n );\n } else {\n return (\n <>\n

Documents

\n

There are no documents available for this case.

\n \n );\n }\n};\n\nexport {\n renderDocumentTable,\n renderCaseStatus,\n renderSummaryCaseTypesRow,\n renderProposedPenaltyRow,\n renderSummarySubjectsRow,\n renderNoticeActionEtRow,\n renderProposedTotalItemsRow,\n renderWithdrawnAllegationsRow,\n renderWithdrawReasonRow,\n renderWithdrawDtRow,\n renderIncidentDetailRow,\n renderSummaryTotalPaidRow,\n renderSummaryAssessedPenaltyRow,\n renderSummaryReducedReasonsRow,\n renderSummaryComplianceOrderRow,\n renderSummaryConsentOrderDateRow,\n renderSummaryClosedDateRow,\n renderSummaryFinalOrderDateRow,\n renderLatestOrderTypeRow,\n renderLatestOrderDtRow,\n};\n","import {useState, useImperativeHandle, forwardRef} from 'react';\r\n\r\nexport default forwardRef((props, ref) => {\r\n const [value, setValue] = useState('');\r\n\r\n let options_arr = props.options;\r\n\r\n let filter_id = props.filter_id ? `${props.filter_id}-custom-dropdown-filter` : 'custom-dropdown-filter';\r\n let select_id = props.filter_id ? `${props.filter_id}-dropdown` : 'dropdown';\r\n\r\n let initial_value = props.initial_value ? props.initial_value : 'All Cases';\r\n\r\n useImperativeHandle(ref, () => {\r\n return {\r\n onParentModelChanged(parentModel) {\r\n if (parentModel) {\r\n setValue(parentModel.state);\r\n } else {\r\n setValue('');\r\n }\r\n },\r\n };\r\n });\r\n\r\n const onFloatingFilterChange = (input) => {\r\n setValue(input);\r\n props.parentFilterInstance((instance) => {\r\n instance.setValue(input);\r\n });\r\n };\r\n\r\n return (\r\n
\r\n onFloatingFilterChange(e.target.value)}\r\n >\r\n \r\n {options_arr.map((value) => (\r\n \r\n ))}\r\n \r\n
\r\n );\r\n});\r\n","import {useState, useEffect, useImperativeHandle, forwardRef} from 'react';\r\n\r\nexport default forwardRef((props, ref) => {\r\n const [filterState, setFilterState] = useState('off');\r\n\r\n // expose AG Grid Filter Lifecycle callbacks\r\n useImperativeHandle(ref, () => {\r\n return {\r\n doesFilterPass(params) {\r\n const field = props.colDef.field;\r\n if (field == 'caseStatus') {\r\n let filter_abbrev = filterState == 'Closed' ? 'Closed' : 'Open';\r\n return params.data[field].toLowerCase() == filter_abbrev.toLowerCase();\r\n } else {\r\n // Certain DB tables contain whitespace-surrounded region names\r\n return params.data[field].toLowerCase().trim() == filterState.toLowerCase();\r\n }\r\n },\r\n\r\n isFilterActive() {\r\n return filterState !== 'off';\r\n },\r\n getModel() {\r\n if (filterState == 'off') {\r\n return undefined;\r\n }\r\n return {\r\n state: filterState,\r\n };\r\n },\r\n setModel(model) {\r\n if (!model) {\r\n setFilterState('off');\r\n } else {\r\n setValue(model.state);\r\n }\r\n },\r\n setValue(value) {\r\n return setFilterState(value);\r\n },\r\n getModelAsString() {\r\n return filterState == 'off' ? '' : filterState;\r\n },\r\n };\r\n });\r\n\r\n useEffect(() => {\r\n props.filterChangedCallback();\r\n }, [filterState]);\r\n\r\n return <>;\r\n});\r\n","import {forwardRef, useImperativeHandle, useRef, useCallback, useEffect, useState} from 'react';\r\n\r\nexport default forwardRef((props, ref) => {\r\n const [filterState, setFilterState] = useState('');\r\n const textInput = useRef();\r\n\r\n useImperativeHandle(ref, () => {\r\n return {\r\n isFilterActive() {\r\n return filterState;\r\n },\r\n doesFilterPass(params) {\r\n const filterLowerCase = filterState.toLowerCase();\r\n const field = props.colDef.field;\r\n const value = params.data[field] ? params.data[field].toString().toLowerCase() : '';\r\n return value.indexOf(filterLowerCase) >= 0;\r\n },\r\n getModel() {\r\n if (!filterState) return undefined;\r\n return {\r\n state: filterState,\r\n };\r\n },\r\n setModel(model) {\r\n if (!model) {\r\n setFilterState('');\r\n } else {\r\n setFilterState(model.state);\r\n }\r\n },\r\n setValue(value) {\r\n setFilterState(value);\r\n },\r\n afterGuiAttached() {\r\n textInput.current && textInput.current.focus();\r\n },\r\n };\r\n });\r\n\r\n useEffect(() => {\r\n props.filterChangedCallback();\r\n }, [filterState]);\r\n\r\n const clearFilter = (e) => {\r\n textInput.current.value = '';\r\n offListener();\r\n };\r\n\r\n const onFilterChange = (e) => {\r\n setFilterState(e.target.value);\r\n };\r\n\r\n const offListener = useCallback(() => setFilterState(''), []);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n});\r\n","import {forwardRef, useImperativeHandle, useState, useRef, useEffect} from 'react';\r\n\r\nexport default forwardRef((props, ref) => {\r\n const [value, setValue] = useState('');\r\n const textInput = useRef();\r\n\r\n let input_class = props.custom_class ? props.custom_class : 'text-filter-default';\r\n\r\n let placeholder_text = 'Filter';\r\n\r\n // legacy code for using the column name as the placeholder,\r\n // removed at client request but we might want it back someday\r\n // if (props.column.colDef.headerName) {\r\n // placeholder_text = `Filter by ${props.column.colDef.headerName}`;\r\n // } else {\r\n // placeholder_text = 'Filter by name';\r\n // }\r\n\r\n const updateInput = (value) => {\r\n textInput.current.value = value;\r\n };\r\n\r\n useImperativeHandle(ref, () => {\r\n return {\r\n onParentModelChanged(parentModel) {\r\n if (parentModel) {\r\n setValue(parentModel.state);\r\n updateInput(parentModel.state);\r\n } else {\r\n setValue('');\r\n updateInput('');\r\n }\r\n },\r\n };\r\n });\r\n\r\n const onFloatingFilterChange = (input) => {\r\n setValue(input);\r\n props.parentFilterInstance((instance) => {\r\n instance.setValue(input);\r\n });\r\n };\r\n\r\n return (\r\n
\r\n onFloatingFilterChange(e.target.value)}\r\n />\r\n
\r\n );\r\n});\r\n","import {useState, useEffect, useImperativeHandle, forwardRef} from 'react';\r\nimport {getYear} from '../date-utils';\r\n\r\n// Logic from: https://www.ag-grid.com/react-data-grid/component-filter/#simple-filter\r\nexport default forwardRef((props, ref) => {\r\n const [filterState, setFilterState] = useState('off');\r\n\r\n // expose AG Grid Filter Lifecycle callbacks\r\n useImperativeHandle(ref, () => {\r\n return {\r\n doesFilterPass(params) {\r\n const field = props.colDef.field;\r\n return getYear(params.data[field]) == filterState;\r\n },\r\n\r\n isFilterActive() {\r\n return filterState !== 'off';\r\n },\r\n getModel() {\r\n if (filterState == 'off') {\r\n return undefined;\r\n }\r\n return {\r\n state: filterState,\r\n };\r\n },\r\n setModel(model) {\r\n if (!model) {\r\n setFilterState('off');\r\n } else {\r\n setFilterState(model.state);\r\n }\r\n },\r\n setValue(value) {\r\n setFilterState(value);\r\n },\r\n getModelAsString() {\r\n return filterState == 'off' ? '' : filterState;\r\n },\r\n };\r\n });\r\n\r\n useEffect(() => {\r\n props.filterChangedCallback();\r\n }, [filterState]);\r\n\r\n return <>;\r\n});\r\n","export const grid_accessibility_options = {\r\n ensureDomOrder: true,\r\n suppressColumnVirtualisation: true,\r\n};\r\n","export const getObjKey = (obj, value) => {\n return Object.keys(obj).find((key) => obj[key] === value);\n};\n\nexport const getTotalRow = (row, grid_headers) => {\n // The total data should be an array of one object. Any longer, and it's the wrong data being passed in\n if (row.length !== 1) return;\n // In order to append total row data to the AG Grid component as a pinned row,\n // it must have the same column names as the rest of the table data\n let row_obj = row[0];\n const total_row_value = [{}];\n let first_column_name = grid_headers[0]['field'];\n\n grid_headers.forEach((column) => {\n total_row_value[0][column['field']] = '';\n });\n\n total_row_value[0][first_column_name] = 'Totals';\n for (let field in row_obj) {\n // The table's total column has one different column name than the yearly totals column\n // But, the columns will contain the string \"total\"\n if (!(field in total_row_value[0])) {\n if (!field.includes('total')) return;\n total_row_value[0][grid_headers[grid_headers.length - 1]['field']] = row_obj[field];\n } else {\n total_row_value[0][field] = row_obj[field];\n }\n }\n\n return total_row_value;\n};\n\nexport const getPercent = (numerator, denominator) => {\n let percent = Math.round((parseInt(numerator) / parseInt(denominator)) * 100);\n return `${percent}`;\n};\n\nexport const getPercentCompleteCases = (opened, closed) => {\n let percent_cases = Math.round((closed / opened) * 100);\n return opened > 0 ? `${percent_cases}%` : '0%';\n};\n\nexport const getPercentPendingCases = (opened, closed) => {\n return opened > 0 ? `${Math.round(((opened - closed) / opened) * 100)}%` : '0%';\n};\n\nexport const renderCurrency = (data) => {\n // Data should either be a value, or an object where data.value is a number.\n // data.value can be either a number, 0, or null. 0 values should be displayed\n // as currency, null values should return an empty cell\n let num;\n if (data !== 0 && !data) {\n return '';\n } else if (typeof data === 'object') {\n if (data.value || data.value === 0) {\n num = data.value;\n } else {\n // Handle null values for data.value\n return '';\n }\n } else {\n num = parseInt(data);\n }\n if (typeof num === 'string') num = parseInt(num);\n\n return num.toLocaleString('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 0,\n });\n};\n\nexport const defaultSort = (valueA, valueB) => {\n if (valueA == null) return -1;\n if (valueB == null) return 1;\n if (!valueA.substring || !valueB.substring) return valueA - valueB;\n if (valueA.length < 1 || valueB.length < 1) return valueA - valueB;\n if (!isNaN(valueA.replace('%', '')) && !isNaN(valueB.replace('%', ''))) {\n // values will come in as strings\n return Number(valueA.replace('%', '')) - Number(valueB.replace('%', ''));\n }\n return valueA < valueB ? -1 : valueA > valueB ? 1 : 0;\n};\n\nexport const VALID_CASE_TYPES = process.env.VALID_CASE_TYPES ?? ['CAO', 'NOA', 'NOPV', 'PSO', 'WL', 'Other'];\n\nexport const addEmptyYearRows = (rows, year_key, start_year, end_year) => {\n // Given an array of annual values, return a version in which\n // any missing years have been filled with zeros\n const all_years = Array(end_year - start_year + 1)\n .fill(start_year)\n .map((x, y) => x + y);\n let filled_rows = [];\n all_years.map((year) => {\n if (!rows.find((x) => x[year_key] == year)) {\n // replace the missing row with a dummy built\n // from the first record provided\n let dummy_row = {...rows[0]};\n // assign the year\n dummy_row[year_key] = year;\n // overwrite all the values with zeroes\n Object.keys(dummy_row).map((key) => {\n if (key != year_key && key != 'operatorId') dummy_row[key] = '0';\n });\n // add the dummy row to the array\n filled_rows.push(dummy_row);\n } else filled_rows.push(rows.find((x) => x[year_key] == year));\n });\n return filled_rows;\n};\n\nexport const replaceZerosWithNullByYear = (rows, year_col_key, value_col_key, replacement_years) => {\n const rows_out = rows.map((row) => {\n return {\n ...row,\n [value_col_key]: replacement_years.includes(row[year_col_key]) ? '' : row[value_col_key],\n };\n });\n return rows_out;\n};\n"],"names":["_ref","filterModel","opened_filter_caption","state","closed_filter_caption","order_filter_caption","filter_caption","_jsx","id","children","_Fragment","default_column_defs","field","cellRenderer","renderLinkedCellData","cellRendererParams","params","path","value","headerName","minWidth","filter","customTextFilter","suppressMenu","floatingFilter","floatingFilterComponent","textFloatingFilter","width","flex","valueGetter","formatDate","data","openedDt","comparator","dateSorter","customYearFilter","customDropdownFloatingFilter","floatingFilterComponentParams","filter_id","suppressFilterButton","options","createYearsArr","initial_value","resizable","operatorId","displayName","operatorName","sortable","getRegionName","customMatcherFilter","region_arr","closedDt","renderCaseStatus","status_arr","hide","decodeAbbreviation","default_col_def","defaultSort","query_dict","opened_yr","closed_yr","action_yr","col_defs","show_csv","csv_name_root","search_query","initial_search_query","grid_class_name","label_string","label_footnote","aria_labelledby","csv_only_column_defs","gridRef","useRef","cases","csv_data","setCsvData","useState","csv_filter_note","setCsvFilterNote","is_manually_filtered","setIsManuallyFiltered","_toConsumableArray","Set","concat","col","Object","keys","includes","height","height_class","length","_jsxs","className","href","current","FilterCaption","api","getFilterModel","AgGridReact","ref","rowData","defaultColDef","columnDefs","ensureDomOrder","grid_accessibility_options","suppressColumnVirtualisation","onGridReady","filter_model","entries","map","_ref2","key","setFilterModel","some","setHeaderHeight","onFilterChanged","grid","curr_filter","query_string","URLSearchParams","toString","window","history","replaceState","location","pathname","updateQueryStrings","updateCsvData","new_csv_data","forEachNodeAfterFilter","node","new_csv_row","push","onFilterOpened","domLayout","ExportCSV","exported_filename","headers","csv_headers","filter_note","region_code","trim","case_abbrevs","cao","nopv","noa","wl","pso","loc","order_abbrevs","fo","co","oda","so","dop","other","urlAbbrevs","str","abbrev","toLowerCase","renderSummaryCaseTypesRow","scCase","scope","style","whiteSpace","typeOfCase","renderSummarySubjectsRow","caseType","proposedSubjectEt","replace","renderProposedPenaltyRow","cpInd","renderCurrency","proposedPenalties","renderSummaryTotalPaidRow","collected","renderSummaryAssessedPenaltyRow","assessedPenalties","renderNoticeActionEtRow","noticeActionEt","renderProposedTotalItemsRow","proposedTotalItems","renderSummaryReducedReasonsRow","reducedReason","renderWithdrawnAllegationsRow","withdrawAllegationEt","renderWithdrawReasonRow","withdrawReason","renderWithdrawDtRow","withdrawDt","withdrawInd","renderSummaryClosedDateRow","caseStatus","renderLatestOrderTypeRow","latestOrderType","renderLatestOrderDtRow","latestOrderDt","renderIncidentDetailRow","incidentDetail","renderTableCaption","table_alt_caption","renderDocumentTable","case_documents","is_excavation","hasOwn","table_title","alt_title","alt_caption","undefined","forEach","doc","publicUrl","cpf","name","Table","bordered","target","rel","forwardRef","props","setValue","options_arr","select_id","useImperativeHandle","onParentModelChanged","parentModel","onChange","e","onFloatingFilterChange","input","parentFilterInstance","instance","filterState","setFilterState","doesFilterPass","colDef","filter_abbrev","isFilterActive","getModel","setModel","model","getModelAsString","useEffect","filterChangedCallback","textInput","filterLowerCase","indexOf","afterGuiAttached","focus","offListener","useCallback","type","placeholder","onClick","input_class","custom_class","updateInput","column","getYear","getTotalRow","row","grid_headers","row_obj","total_row_value","first_column_name","getPercent","numerator","denominator","Math","round","parseInt","getPercentCompleteCases","opened","closed","percent_cases","getPercentPendingCases","num","toLocaleString","currency","minimumFractionDigits","valueA","valueB","substring","isNaN","Number","_process$env$VALID_CA","process","VALID_CASE_TYPES"],"sourceRoot":""}