+
{chip}
- {
- isReference &&
- copyURL(toFullAPIURL(props.expression))} style={{marginLeft: '5px'}} />
-
- }
)
}
diff --git a/src/components/common/ReferenceTypeChips.jsx b/src/components/common/ReferenceTypeChips.jsx
new file mode 100644
index 00000000..04b04b21
--- /dev/null
+++ b/src/components/common/ReferenceTypeChips.jsx
@@ -0,0 +1,34 @@
+import React from 'react';
+import Chip from '@mui/material/Chip'
+import { useTranslation } from 'react-i18next'
+
+
+const ReferenceTypeChips = ({ reference }) => {
+ const { t } = useTranslation()
+ return (
+
+ {
+ reference.include === false &&
+
+ }
+ {
+ reference.transform?.toLowerCase() === 'extensional' &&
+
+ }
+ {
+ ['resourceversions', 'intensional'].includes(reference.transform?.toLowerCase()) &&
+
+ }
+ {
+ reference.cascade &&
+
+ }
+ {
+ !reference.last_resolved_at && !reference.concepts && !reference.mappings &&
+
+ }
+
+ )
+}
+
+export default ReferenceTypeChips
diff --git a/src/components/search/ResultConstants.js b/src/components/search/ResultConstants.js
index 8bc89d13..02e9a7a1 100644
--- a/src/components/search/ResultConstants.js
+++ b/src/components/search/ResultConstants.js
@@ -1,5 +1,7 @@
import React from 'react';
import find from 'lodash/find'
+import map from 'lodash/map'
+import isNumber from 'lodash/isNumber'
import {
formatDate,
formatWebsiteLink,
@@ -7,10 +9,12 @@ import {
import Retired from '../common/Retired';
import OwnerIcon from '../common/OwnerIcon';
import RepoVersionButton from '../repos/RepoVersionButton';
+import RepoChip from '../repos/RepoChip';
import FromAndTargetSource from '../mappings/FromAndTargetSource'
import ConceptCell from '../mappings/ConceptCell'
import ReferenceChip from '../common/ReferenceChip';
import ReferenceTranslation from '../common/ReferenceTranslation';
+import ReferenceTypeChips from '../common/ReferenceTypeChips'
const getLocale = (concept, synonym) => {
@@ -20,6 +24,26 @@ const getLocale = (concept, synonym) => {
return {locale?.locale ? `[${locale.locale}] ${[locale.name]}` : cleaned}
}
+const getReferenceSummary = (reference) => {
+ let label = '';
+ if(reference.last_resolved_at && reference.concepts === 0 && reference.mappings === 0) {
+ if(reference.reference_type === 'mappings')
+ return '0 mappings'
+ if(reference.reference_type === 'concepts')
+ return '0 concepts'
+ return '0 concepts, 0 mappings'
+ }
+ if(isNumber(reference.concepts) && reference.concepts > 0)
+ label += `${reference.concepts.toLocaleString()} concepts`
+ if(isNumber(reference.mappings) && reference.mappings > 0) {
+ if(label?.length)
+ label += ', '
+ label += `${reference.mappings.toLocaleString()} mappings`
+ }
+
+ return label
+}
+
export const ALL_COLUMNS = {
concepts: [
@@ -52,9 +76,26 @@ export const ALL_COLUMNS = {
{id: 'toConcept', labelKey: 'mapping.toConcept', value: 'toConceptCode', className: 'searchable', sortable: false, renderer: item => },
],
references: [
- {id: 'expression', labelKey: 'reference.reference', value: 'expression', sortable: false, translation: true, renderer: (reference, translation) => translation ? : },
- {id: 'concepts', labelKey: 'concept.concepts', value: 'concepts', sortable: false, align: 'center', renderer: reference => reference.last_resolved_at ? : '-'},
- {id: 'mappings', labelKey: 'mapping.mappings', value: 'mappings', sortable: false, align: 'center', renderer: reference => reference.last_resolved_at ? : '-'}
+ {
+ id: 'expression',
+ labelKey: 'reference.expression',
+ value: 'expression',
+ sortable: false,
+ translation: true,
+ renderer: (reference, translation) => translation ?
+ :
+
+ },
+ {id: 'ref_types', labelKey: 'reference.reference_type', value: 'ref_type', sortable: false, renderer: (reference) => },
+ {id: 'resolved_repo_versions', labelKey: 'reference.resolved_repo', value: 'resolved_repo_versions', sortable: false, renderer: (reference) => {
+ return map(reference?.resolved_repo_versions, (version, index) => {
+ return
+ })
+ }},
+ {id: 'summary', labelKey: 'common.results', value: 'summary', sortable: false, renderer: reference => reference.last_resolved_at ? getReferenceSummary(reference) : '-'},
],
repos: [
{id: 'id', labelKey: 'common.id', value: 'id', sortOn: 'id', className: 'searchable'},
diff --git a/src/components/search/Search.jsx b/src/components/search/Search.jsx
index 52ef35f8..6168732b 100644
--- a/src/components/search/Search.jsx
+++ b/src/components/search/Search.jsx
@@ -272,6 +272,8 @@ const Search = props => {
})
if(['users', 'orgs', 'references'].includes(__resource))
params.verbose = true
+ if(__resource === 'references')
+ params.includeResolvedRepoVersions = true
APIService.new().overrideURL(getURL(__resource)).get(null, null, params).then(response => {
if(response?.detail) {
setAlert({message: response.detail, severity: 'error', duration: 5000})
diff --git a/src/components/search/TableResults.jsx b/src/components/search/TableResults.jsx
index 7939c355..5a9e77da 100644
--- a/src/components/search/TableResults.jsx
+++ b/src/components/search/TableResults.jsx
@@ -8,6 +8,8 @@ import TableContainer from '@mui/material/TableContainer';
import TableHead from '@mui/material/TableHead';
import TableRow from '@mui/material/TableRow';
import TableSortLabel from '@mui/material/TableSortLabel';
+import FormControlLabel from '@mui/material/FormControlLabel';
+import Switch from '@mui/material/Switch';
import Checkbox from '@mui/material/Checkbox';
import Skeleton from '@mui/material/Skeleton'
import { visuallyHidden } from '@mui/utils';
@@ -17,7 +19,7 @@ import { ALL_COLUMNS } from './ResultConstants';
const EnhancedTableHead = props => {
const { t } = useTranslation()
- const { onSelectAllClick, order, orderBy, numSelected, rowCount, onRequestSort, columns } = props;
+ const { onSelectAllClick, order, orderBy, numSelected, rowCount, onRequestSort, columns, refTranslation, setRefTranslation } = props;
const createSortHandler = property => event => {
onRequestSort(event, property);
};
@@ -54,20 +56,43 @@ const EnhancedTableHead = props => {
sortDirection={orderBy === headCell.id ? order : false}
sx={{background: 'inherit', ...headCell.sx}}
>
-
- {label}
- {
- orderBy === headCell.id ? (
-
- {order === 'desc' ? 'sorted descending' : 'sorted ascending'}
-
- ) : null
- }
-
+ {
+ headCell?.translation ?
+
+ {label}
+
+ setRefTranslation(event.target.checked)} />
+ }
+ label={
+
+ {refTranslation ? t('reference.raw') : t('reference.translation')}
+
+ }
+ />
+
+ :
+
+ {label}
+ {
+ orderBy === headCell.id ? (
+
+ {order === 'desc' ? 'sorted descending' : 'sorted ascending'}
+
+ ) : null
+ }
+
+ }
)
})}
@@ -77,13 +102,14 @@ const EnhancedTableHead = props => {
}
const TableResults = ({selected, bgColor, handleClick, handleRowClick, handleSelectAllClick, results, resource, nested, isSelected, isItemShown, order, orderBy, className, style, onOrderByChange, selectedToShowItem, size, excludedColumns, extraColumns, properties, propertyFilters, loading}) => {
+ const [refTranslation, setRefTranslation] = React.useState(true)
const rows = results?.results || []
const getValue = (row, column) => {
let val = get(row, column.value)
if(column.formatter)
return column.formatter(val)
if(column.renderer)
- return column.translation ? column.renderer(row, column.translation) : column.renderer(row, Boolean(selectedToShowItem))
+ return column.translation ? column.renderer(row, refTranslation) : column.renderer(row, Boolean(selectedToShowItem))
return val
}
@@ -156,6 +182,8 @@ const TableResults = ({selected, bgColor, handleClick, handleRowClick, handleSel
rowCount={rows.length || 0}
resource={resource}
columns={columns}
+ refTranslation={refTranslation}
+ setRefTranslation={setRefTranslation}
/>
{
diff --git a/src/i18n/locales/en/translations.json b/src/i18n/locales/en/translations.json
index 86fdebe4..bd1a4924 100644
--- a/src/i18n/locales/en/translations.json
+++ b/src/i18n/locales/en/translations.json
@@ -136,7 +136,8 @@
"copy_api_url": "Copy API URL",
"copy_standard_checksum": "Copy Standard Checksum",
"copy_smart_checksum": "Copy Smart Checksum",
- "committed": "committed"
+ "committed": "committed",
+ "results": "Results"
},
"errors": {
"404": "Sorry your page could not be found.",
@@ -251,8 +252,17 @@
"edit_mapping": "Edit Mapping"
},
"reference": {
+ "expression": "Expression",
"references": "References",
- "reference": "Reference"
+ "reference": "Reference",
+ "reference_type": "Ref Type",
+ "exclude": "Exclude",
+ "intensional": "Intensional",
+ "extensional": "Extensional",
+ "cascade": "Cascade",
+ "resolved_repo": "Resolved Repo",
+ "raw": "Raw",
+ "translation": "Translation"
},
"checksums": {
"standard": "Standard Checksum",