full circle ModalitiesInStudy filtering

This commit is contained in:
dannyrb 2020-05-12 09:43:32 -04:00 committed by James A. Petts
parent 3ce4b886ac
commit 053ed36e8f
4 changed files with 25 additions and 21 deletions

View File

@ -61,24 +61,15 @@ InputMultiSelect.propTypes = {
onLabelClick: PropTypes.func.isRequired, onLabelClick: PropTypes.func.isRequired,
onChange: PropTypes.func.isRequired, onChange: PropTypes.func.isRequired,
placeholder: PropTypes.string, placeholder: PropTypes.string,
/** Array of options to list as options */
options: PropTypes.arrayOf( options: PropTypes.arrayOf(
PropTypes.shape({ PropTypes.shape({
value: PropTypes.string, value: PropTypes.string,
label: PropTypes.string, label: PropTypes.string,
}) })
), ),
value: PropTypes.oneOfType([ /** Array of string values that exist in our list of options */
PropTypes.arrayOf( value: PropTypes.arrayOf(PropTypes.string),
PropTypes.shape({
value: PropTypes.string,
label: PropTypes.string,
})
),
PropTypes.shape({
value: PropTypes.string,
label: PropTypes.string,
}),
]),
}; };
export default InputMultiSelect; export default InputMultiSelect;

View File

@ -104,13 +104,18 @@ const StudyListFilter = ({
StudyListFilter.propTypes = { StudyListFilter.propTypes = {
filtersMeta: PropTypes.arrayOf( filtersMeta: PropTypes.arrayOf(
PropTypes.shape({ PropTypes.shape({
/** Identifier used to map a field to it's value in `filterValues` */
name: PropTypes.string.isRequired, name: PropTypes.string.isRequired,
/** Friendly label for filter field */
displayName: PropTypes.string.isRequired, displayName: PropTypes.string.isRequired,
/** One of the supported filter field input types */
inputType: PropTypes.oneOf(['Text', 'MultiSelect', 'DateRange', 'None']) inputType: PropTypes.oneOf(['Text', 'MultiSelect', 'DateRange', 'None'])
.isRequired, .isRequired,
isSortable: PropTypes.bool.isRequired, isSortable: PropTypes.bool.isRequired,
/** Size of filter field in a 12-grid system */
gridCol: PropTypes.oneOf([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) gridCol: PropTypes.oneOf([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
.isRequired, .isRequired,
/** Options for a "MultiSelect" inputType */
option: PropTypes.arrayOf( option: PropTypes.arrayOf(
PropTypes.shape({ PropTypes.shape({
value: PropTypes.string, value: PropTypes.string,

View File

@ -91,17 +91,22 @@ function _getQueryFilterValues(query) {
query = new URLSearchParams(query); query = new URLSearchParams(query);
const queryFilterValues = { const queryFilterValues = {
// DCM
patientName: query.get('patientName'), patientName: query.get('patientName'),
// mrn: query.get('mrn'), patientId? // mrn: query.get('mrn'), patientId?
studyDescription: query.get('description'),
modalitiesInStudy: query.get('modalities')
? query.get('modalities').split(',')
: [],
accessionNumber: query.get('accession'),
//
startDate: query.get('startDate'), startDate: query.get('startDate'),
endDate: query.get('endDate'), endDate: query.get('endDate'),
studyDescription: query.get('description'),
//modalitiesInStudy: _tryParseJson(query.get('modality'), undefined),
accessionNumber: query.get('accession'),
sortBy: query.get('soryBy'),
sortDirection: query.get('sortDirection'),
page: _tryParseInt(query.get('page'), undefined), page: _tryParseInt(query.get('page'), undefined),
resultsPerPage: _tryParseInt(query.get('resultsPerPage'), undefined), resultsPerPage: _tryParseInt(query.get('resultsPerPage'), undefined),
// Rarely supported server-side
sortBy: query.get('sortBy'),
sortDirection: query.get('sortDirection'),
}; };
// patientName: good // patientName: good

View File

@ -54,7 +54,6 @@ function StudyListContainer({ history, data: studies }) {
const currValue = debouncedFilterValues[key]; const currValue = debouncedFilterValues[key];
// TODO: nesting/recursion? // TODO: nesting/recursion?
// TODO: modalities array
if (key === 'studyDate') { if (key === 'studyDate') {
if ( if (
currValue.startDate && currValue.startDate &&
@ -65,6 +64,8 @@ function StudyListContainer({ history, data: studies }) {
if (currValue.endDate && defaultValue.endDate !== currValue.endDate) { if (currValue.endDate && defaultValue.endDate !== currValue.endDate) {
queryString.endDate = currValue.endDate; queryString.endDate = currValue.endDate;
} }
} else if (key === 'modalities' && currValue.length) {
queryString.modalities = currValue.join(',');
} else if (currValue !== defaultValue) { } else if (currValue !== defaultValue) {
queryString[key] = currValue; queryString[key] = currValue;
} }
@ -110,7 +111,7 @@ function StudyListContainer({ history, data: studies }) {
gridCol: 4, gridCol: 4,
}, },
{ {
name: 'modality', name: 'modalities',
displayName: 'Modality', displayName: 'Modality',
inputType: 'MultiSelect', inputType: 'MultiSelect',
inputProps: { inputProps: {
@ -383,7 +384,7 @@ const defaultFilterValues = {
endDate: undefined, endDate: undefined,
}, },
description: '', description: '',
modality: [], modalities: [],
accession: '', accession: '',
sortBy: '', sortBy: '',
sortDirection: 'none', sortDirection: 'none',
@ -400,7 +401,9 @@ function _getQueryFilterValues(query) {
endDate: query.get('endDate'), endDate: query.get('endDate'),
}, },
description: query.get('description'), description: query.get('description'),
// modality: _tryParseJson(query.get('modality'), undefined), modalities: query.get('modalities')
? query.get('modalities').split(',')
: [],
accession: query.get('accession'), accession: query.get('accession'),
sortBy: query.get('soryBy'), sortBy: query.get('soryBy'),
sortDirection: query.get('sortDirection'), sortDirection: query.get('sortDirection'),