PWV-1: Refactoring ohif:measurements import structure for templates
This commit is contained in:
parent
7bbd380983
commit
8e6ac3bf1e
2
Packages/ohif-measurements/both/configuration/index.js
Normal file
2
Packages/ohif-measurements/both/configuration/index.js
Normal file
@ -0,0 +1,2 @@
|
||||
import './measurements.js';
|
||||
import './timepoints.js';
|
||||
2
Packages/ohif-measurements/both/index.js
Normal file
2
Packages/ohif-measurements/both/index.js
Normal file
@ -0,0 +1,2 @@
|
||||
import './configuration';
|
||||
import './schema';
|
||||
2
Packages/ohif-measurements/both/schema/index.js
Normal file
2
Packages/ohif-measurements/both/schema/index.js
Normal file
@ -0,0 +1,2 @@
|
||||
import './measurements.js';
|
||||
import './timepoints.js';
|
||||
@ -3,25 +3,25 @@ import { SimpleSchema } from 'meteor/aldeed:simple-schema';
|
||||
const Measurement = new SimpleSchema({
|
||||
userId: {
|
||||
type: String,
|
||||
label: "User ID"
|
||||
label: 'User ID'
|
||||
},
|
||||
patientId: {
|
||||
type: String,
|
||||
label: "Patient ID"
|
||||
label: 'Patient ID'
|
||||
},
|
||||
measurementNumber: {
|
||||
type: Number,
|
||||
label: "Measurement Number",
|
||||
label: 'Measurement Number',
|
||||
optional: true
|
||||
},
|
||||
measurementNumberOverall: {
|
||||
type: Number,
|
||||
label: "Measurement Number Overall",
|
||||
label: 'Measurement Number Overall',
|
||||
optional: true
|
||||
},
|
||||
timepointId: {
|
||||
type: String,
|
||||
label: "Timepoint ID",
|
||||
label: 'Timepoint ID',
|
||||
optional: true
|
||||
},
|
||||
// Force value to be current date (on server) upon insert
|
||||
@ -51,70 +51,88 @@ const Measurement = new SimpleSchema({
|
||||
},
|
||||
// denyInsert: true, // Commenting this out for now since we are constantly re-adding entries to client-side collections
|
||||
optional: true
|
||||
},
|
||||
})
|
||||
|
||||
const StudyLevelMeasurement = new SimpleSchema([Measurement, {
|
||||
studyInstanceUid: {
|
||||
type: String,
|
||||
label: 'Study Instance UID'
|
||||
}
|
||||
}]);
|
||||
});
|
||||
|
||||
const SeriesLevelMeasurement = new SimpleSchema([StudyLevelMeasurement, {
|
||||
seriesInstanceUid: {
|
||||
type: String,
|
||||
label: 'Series Instance UID'
|
||||
const StudyLevelMeasurement = new SimpleSchema([
|
||||
Measurement,
|
||||
{
|
||||
studyInstanceUid: {
|
||||
type: String,
|
||||
label: 'Study Instance UID'
|
||||
}
|
||||
}
|
||||
}]);
|
||||
]);
|
||||
|
||||
const InstanceLevelMeasurement = new SimpleSchema([StudyLevelMeasurement, SeriesLevelMeasurement, {
|
||||
sopInstanceUid: {
|
||||
type: String,
|
||||
label: 'SOP Instance UID'
|
||||
const SeriesLevelMeasurement = new SimpleSchema([
|
||||
StudyLevelMeasurement,
|
||||
{
|
||||
seriesInstanceUid: {
|
||||
type: String,
|
||||
label: 'Series Instance UID'
|
||||
}
|
||||
}
|
||||
}]);
|
||||
]);
|
||||
|
||||
const FrameLevelMeasurement = new SimpleSchema([StudyLevelMeasurement, SeriesLevelMeasurement, InstanceLevelMeasurement, {
|
||||
frameIndex: {
|
||||
type: Number,
|
||||
min: 0,
|
||||
label: 'Frame index in Instance'
|
||||
},
|
||||
// TODO: In the future we should remove this in favour of searching ViewerStudies and display sets when
|
||||
// re-displaying measurements. Otherwise if a study moves servers the measurements will not be displayed correctly
|
||||
imageId: {
|
||||
type: String,
|
||||
label: 'Cornerstone Image Id'
|
||||
const InstanceLevelMeasurement = new SimpleSchema([
|
||||
StudyLevelMeasurement,
|
||||
SeriesLevelMeasurement,
|
||||
{
|
||||
sopInstanceUid: {
|
||||
type: String,
|
||||
label: 'SOP Instance UID'
|
||||
}
|
||||
}
|
||||
}]);
|
||||
]);
|
||||
|
||||
const CornerstoneToolMeasurement = new SimpleSchema([StudyLevelMeasurement,
|
||||
SeriesLevelMeasurement,
|
||||
InstanceLevelMeasurement,
|
||||
FrameLevelMeasurement, {
|
||||
toolType: {
|
||||
type: String,
|
||||
label: 'Cornerstone Tool Type',
|
||||
optional: true
|
||||
},
|
||||
visible: {
|
||||
type: Boolean,
|
||||
label: 'Visible',
|
||||
defaultValue: true
|
||||
},
|
||||
active: {
|
||||
type: Boolean,
|
||||
label: 'Active',
|
||||
defaultValue: false
|
||||
},
|
||||
invalidated: {
|
||||
type: Boolean,
|
||||
label: 'Invalidated',
|
||||
defaultValue: false,
|
||||
optional: true
|
||||
const FrameLevelMeasurement = new SimpleSchema([
|
||||
StudyLevelMeasurement,
|
||||
SeriesLevelMeasurement,
|
||||
InstanceLevelMeasurement,
|
||||
{
|
||||
frameIndex: {
|
||||
type: Number,
|
||||
min: 0,
|
||||
label: 'Frame index in Instance'
|
||||
},
|
||||
// TODO: In the future we should remove this in favour of searching ViewerStudies and display sets when
|
||||
// re-displaying measurements. Otherwise if a study moves servers the measurements will not be displayed correctly
|
||||
imageId: {
|
||||
type: String,
|
||||
label: 'Cornerstone Image Id'
|
||||
}
|
||||
}
|
||||
}]);
|
||||
]);
|
||||
|
||||
const CornerstoneToolMeasurement = new SimpleSchema([
|
||||
StudyLevelMeasurement,
|
||||
SeriesLevelMeasurement,
|
||||
InstanceLevelMeasurement,
|
||||
FrameLevelMeasurement,
|
||||
{
|
||||
toolType: {
|
||||
type: String,
|
||||
label: 'Cornerstone Tool Type',
|
||||
optional: true
|
||||
},
|
||||
visible: {
|
||||
type: Boolean,
|
||||
label: 'Visible',
|
||||
defaultValue: true
|
||||
},
|
||||
active: {
|
||||
type: Boolean,
|
||||
label: 'Active',
|
||||
defaultValue: false
|
||||
},
|
||||
invalidated: {
|
||||
type: Boolean,
|
||||
label: 'Invalidated',
|
||||
defaultValue: false,
|
||||
optional: true
|
||||
}
|
||||
}
|
||||
]);
|
||||
|
||||
const CornerstoneHandleSchema = new SimpleSchema({
|
||||
x: {
|
||||
@ -178,7 +196,7 @@ const CornerstoneHandleSchema = new SimpleSchema({
|
||||
label: 'Locked',
|
||||
optional: true,
|
||||
defaultValue: false
|
||||
},
|
||||
}
|
||||
});
|
||||
|
||||
export const MeasurementSchemaTypes = {
|
||||
@ -189,4 +207,4 @@ export const MeasurementSchemaTypes = {
|
||||
FrameLevelMeasurement: FrameLevelMeasurement,
|
||||
CornerstoneToolMeasurement: CornerstoneToolMeasurement,
|
||||
CornerstoneHandleSchema: CornerstoneHandleSchema
|
||||
};
|
||||
};
|
||||
|
||||
@ -28,5 +28,5 @@ export const schema = new SimpleSchema({
|
||||
latestDate: {
|
||||
type: Date,
|
||||
label: 'Most recent Study Date from associated studies',
|
||||
},
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
<h4 class="modal-title" id="associationModalLabel">Study Association</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
{{ >studyAssociationTable }}
|
||||
{{>studyAssociationTable}}
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-primary" id="saveAssociations">Save</button>
|
||||
@ -16,4 +16,4 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</template>
|
||||
|
||||
@ -4,8 +4,7 @@
|
||||
<div class="col-md-12">
|
||||
<h4>Instructions</h4>
|
||||
<p>Associate the selected studies with timepoints in the clinical trial. Only 1 follow-up time point can be associated at the same time.</p>
|
||||
<p>We have automatically retrieved all studies within 14 days (<strong>{{formatDA earliestDate}}</strong> to <strong>{{formatDA latestDate}}</strong>) of your selected studies, in case you forgot to
|
||||
select a study.</p>
|
||||
<p>We have automatically retrieved all studies within 14 days (<strong>{{formatDA this.earliestDate}}</strong> to <strong>{{formatDA latestDate}}</strong>) of your selected studies, in case you forgot to select a study.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -21,44 +20,44 @@
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
{{ #each relevantStudies }}
|
||||
<tr>
|
||||
<td class="center">
|
||||
<input type="checkbox" class="includeStudy" {{valueIf autoselected '' 'checked'}}/>
|
||||
</td>
|
||||
<td class="center studyDataCell {{ #if autoselected }}disabled{{ /if }}">
|
||||
{{ #if autoselected}}
|
||||
<p class="studyDate autoselected"
|
||||
data-toggle="tooltip"
|
||||
title="This study was autoselected.">
|
||||
{{formatDA studyDate}}
|
||||
</p>
|
||||
{{ else }}
|
||||
<p class="studyDate">{{formatDA studyDate}}</p>
|
||||
{{ /if }}
|
||||
</td>
|
||||
<td class="center studyDataCell {{ #if autoselected }}disabled{{ /if }}">
|
||||
<p>{{formatPN patientName}}</p>
|
||||
</td>
|
||||
<td class="studyDataCell {{ #if autoselected }}disabled{{ /if }}">
|
||||
<p>{{studyDescription}}</p>
|
||||
</td>
|
||||
<td class="timepointOptions center studyDataCell noselect {{ #if autoselected }}disabled{{ /if }}">
|
||||
{{ #each timepointOptions }}
|
||||
<label class="noselect">
|
||||
<input type="radio"
|
||||
name="{{../_id}}"
|
||||
value="{{value}}"
|
||||
class="timepointOption"
|
||||
{{ valueIf checked 'checked' ''}}
|
||||
{{ valueIf autoselected 'disabled' ''}}>
|
||||
{{name}}
|
||||
</label>
|
||||
{{ /each }}
|
||||
</td>
|
||||
</tr>
|
||||
{{ /each }}
|
||||
{{#each relevantStudies}}
|
||||
<tr>
|
||||
<td class="center">
|
||||
<input type="checkbox" class="includeStudy" {{valueIf autoselected '' 'checked'}}/>
|
||||
</td>
|
||||
<td class="center studyDataCell {{#if autoselected}}disabled{{/if}}">
|
||||
{{#if autoselected}}
|
||||
<p class="studyDate autoselected"
|
||||
data-toggle="tooltip"
|
||||
title="This study was autoselected.">
|
||||
{{formatDA studyDate}}
|
||||
</p>
|
||||
{{else}}
|
||||
<p class="studyDate">{{formatDA studyDate}}</p>
|
||||
{{/if}}
|
||||
</td>
|
||||
<td class="center studyDataCell {{#if autoselected}}disabled{{/if}}">
|
||||
<p>{{formatPN patientName}}</p>
|
||||
</td>
|
||||
<td class="studyDataCell {{#if autoselected}}disabled{{/if}}">
|
||||
<p>{{studyDescription}}</p>
|
||||
</td>
|
||||
<td class="timepointOptions center studyDataCell noselect {{#if autoselected}}disabled{{/if}}">
|
||||
{{#each timepointOptions}}
|
||||
<label class="noselect">
|
||||
<input type="radio"
|
||||
name="{{../_id}}"
|
||||
value="{{value}}"
|
||||
class="timepointOption"
|
||||
{{valueIf checked 'checked' ''}}
|
||||
{{valueIf autoselected 'disabled' ''}}>
|
||||
{{name}}
|
||||
</label>
|
||||
{{/each}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</template>
|
||||
</template>
|
||||
|
||||
@ -0,0 +1,11 @@
|
||||
// Study-Timepoint Association imports
|
||||
import './associationModal/associationModal.html';
|
||||
import './associationModal/associationModal.styl';
|
||||
import './associationModal/associationModal.js';
|
||||
|
||||
import './associationModal/studyAssociationTable/studyAssociationTable.html';
|
||||
import './associationModal/studyAssociationTable/studyAssociationTable.styl';
|
||||
import './associationModal/studyAssociationTable/studyAssociationTable.js';
|
||||
|
||||
import './confirmRemoveTimepointAssociation/confirmRemoveTimepointAssociation.html';
|
||||
import './confirmRemoveTimepointAssociation/confirmRemoveTimepointAssociation.js';
|
||||
@ -0,0 +1,8 @@
|
||||
// Case Progress imports
|
||||
import './caseProgress.html';
|
||||
import './caseProgress.styl';
|
||||
import './caseProgress.js';
|
||||
|
||||
import './radialProgressBar/radialProgressBar.html';
|
||||
import './radialProgressBar/radialProgressBar.styl';
|
||||
import './radialProgressBar/radialProgressBar.js';
|
||||
4
Packages/ohif-measurements/client/components/index.js
Normal file
4
Packages/ohif-measurements/client/components/index.js
Normal file
@ -0,0 +1,4 @@
|
||||
import './association';
|
||||
import './caseProgress';
|
||||
import './longitudinal';
|
||||
import './measurementTable';
|
||||
@ -0,0 +1,10 @@
|
||||
// Longitudinal Components imports
|
||||
import './longitudinalStudyListStudy/longitudinalStudyListStudy.html';
|
||||
import './longitudinalStudyListStudy/longitudinalStudyListStudy.styl';
|
||||
import './longitudinalStudyListStudy/longitudinalStudyListStudy.js';
|
||||
|
||||
import './longitudinalStudyListContextMenu/longitudinalStudyListContextMenu.html';
|
||||
import './longitudinalStudyListContextMenu/longitudinalStudyListContextMenu.js';
|
||||
|
||||
import './longitudinalViewportOverlay/longitudinalViewportOverlay.html';
|
||||
import './longitudinalViewportOverlay/longitudinalViewportOverlay.js';
|
||||
@ -0,0 +1,28 @@
|
||||
// Measurement Table Components imports
|
||||
import './measurementTable.html';
|
||||
import './measurementTable.styl';
|
||||
import './measurementTable.js';
|
||||
|
||||
import './measurementTableView/measurementTableView.html';
|
||||
import './measurementTableView/measurementTableView.styl';
|
||||
import './measurementTableView/measurementTableView.js';
|
||||
|
||||
import './measurementTableHUD/measurementTableHUD.html';
|
||||
import './measurementTableHUD/measurementTableHUD.styl';
|
||||
import './measurementTableHUD/measurementTableHUD.js';
|
||||
|
||||
import './measurementTableRow/measurementTableRow.html';
|
||||
import './measurementTableRow/measurementTableRow.styl';
|
||||
import './measurementTableRow/measurementTableRow.js';
|
||||
|
||||
import './measurementTableHeaderRow/measurementTableHeaderRow.html';
|
||||
import './measurementTableHeaderRow/measurementTableHeaderRow.styl';
|
||||
import './measurementTableHeaderRow/measurementTableHeaderRow.js';
|
||||
|
||||
import './measurementTableTimepointCell/measurementTableTimepointCell.html';
|
||||
import './measurementTableTimepointCell/measurementTableTimepointCell.styl';
|
||||
import './measurementTableTimepointCell/measurementTableTimepointCell.js';
|
||||
|
||||
import './measurementTableTimepointHeader/measurementTableTimepointHeader.html';
|
||||
import './measurementTableTimepointHeader/measurementTableTimepointHeader.styl';
|
||||
import './measurementTableTimepointHeader/measurementTableTimepointHeader.js';
|
||||
@ -1,2 +1,3 @@
|
||||
import './components';
|
||||
import './lib';
|
||||
import './helpers';
|
||||
|
||||
@ -29,75 +29,11 @@ Package.onUse(function(api) {
|
||||
api.use('ohif:log');
|
||||
api.use('ohif:study-list');
|
||||
|
||||
api.addFiles('both/schema/measurements.js', ['client', 'server']);
|
||||
api.addFiles('both/schema/timepoints.js', ['client', 'server']);
|
||||
// Client and server imports
|
||||
api.addFiles('both/index.js', ['client', 'server']);
|
||||
|
||||
api.addFiles('both/configuration/measurements.js', ['client', 'server']);
|
||||
api.addFiles('both/configuration/timepoints.js', ['client', 'server']);
|
||||
|
||||
// Client imports and routes
|
||||
// Client imports
|
||||
api.addFiles('client/index.js', 'client');
|
||||
|
||||
// Measurement Table Components
|
||||
api.addFiles('client/components/measurementTable/measurementTable.html', 'client');
|
||||
api.addFiles('client/components/measurementTable/measurementTable.styl', 'client');
|
||||
api.addFiles('client/components/measurementTable/measurementTable.js', 'client');
|
||||
|
||||
api.addFiles('client/components/measurementTable/measurementTableView/measurementTableView.html', 'client');
|
||||
api.addFiles('client/components/measurementTable/measurementTableView/measurementTableView.styl', 'client');
|
||||
api.addFiles('client/components/measurementTable/measurementTableView/measurementTableView.js', 'client');
|
||||
|
||||
api.addFiles('client/components/measurementTable/measurementTableHUD/measurementTableHUD.html', 'client');
|
||||
api.addFiles('client/components/measurementTable/measurementTableHUD/measurementTableHUD.styl', 'client');
|
||||
api.addFiles('client/components/measurementTable/measurementTableHUD/measurementTableHUD.js', 'client');
|
||||
|
||||
api.addFiles('client/components/measurementTable/measurementTableRow/measurementTableRow.html', 'client');
|
||||
api.addFiles('client/components/measurementTable/measurementTableRow/measurementTableRow.styl', 'client');
|
||||
api.addFiles('client/components/measurementTable/measurementTableRow/measurementTableRow.js', 'client');
|
||||
|
||||
api.addFiles('client/components/measurementTable/measurementTableHeaderRow/measurementTableHeaderRow.html', 'client');
|
||||
api.addFiles('client/components/measurementTable/measurementTableHeaderRow/measurementTableHeaderRow.styl', 'client');
|
||||
api.addFiles('client/components/measurementTable/measurementTableHeaderRow/measurementTableHeaderRow.js', 'client');
|
||||
|
||||
api.addFiles('client/components/measurementTable/measurementTableTimepointCell/measurementTableTimepointCell.html', 'client');
|
||||
api.addFiles('client/components/measurementTable/measurementTableTimepointCell/measurementTableTimepointCell.styl', 'client');
|
||||
api.addFiles('client/components/measurementTable/measurementTableTimepointCell/measurementTableTimepointCell.js', 'client');
|
||||
|
||||
api.addFiles('client/components/measurementTable/measurementTableTimepointHeader/measurementTableTimepointHeader.html', 'client');
|
||||
api.addFiles('client/components/measurementTable/measurementTableTimepointHeader/measurementTableTimepointHeader.styl', 'client');
|
||||
api.addFiles('client/components/measurementTable/measurementTableTimepointHeader/measurementTableTimepointHeader.js', 'client');
|
||||
|
||||
// Longitudinal Components
|
||||
api.addFiles('client/components/longitudinal/longitudinalStudyListStudy/longitudinalStudyListStudy.html', 'client');
|
||||
api.addFiles('client/components/longitudinal/longitudinalStudyListStudy/longitudinalStudyListStudy.styl', 'client');
|
||||
api.addFiles('client/components/longitudinal/longitudinalStudyListStudy/longitudinalStudyListStudy.js', 'client');
|
||||
|
||||
api.addFiles('client/components/longitudinal/longitudinalStudyListContextMenu/longitudinalStudyListContextMenu.html', 'client');
|
||||
api.addFiles('client/components/longitudinal/longitudinalStudyListContextMenu/longitudinalStudyListContextMenu.js', 'client');
|
||||
|
||||
api.addFiles('client/components/longitudinal/longitudinalViewportOverlay/longitudinalViewportOverlay.html', 'client');
|
||||
api.addFiles('client/components/longitudinal/longitudinalViewportOverlay/longitudinalViewportOverlay.js', 'client');
|
||||
|
||||
// Case Progress
|
||||
api.addFiles('client/components/caseProgress/caseProgress.html', 'client');
|
||||
api.addFiles('client/components/caseProgress/caseProgress.styl', 'client');
|
||||
api.addFiles('client/components/caseProgress/caseProgress.js', 'client');
|
||||
|
||||
api.addFiles('client/components/caseProgress/radialProgressBar/radialProgressBar.html', 'client');
|
||||
api.addFiles('client/components/caseProgress/radialProgressBar/radialProgressBar.styl', 'client');
|
||||
api.addFiles('client/components/caseProgress/radialProgressBar/radialProgressBar.js', 'client');
|
||||
|
||||
// Study-Timepoint Association
|
||||
api.addFiles('client/components/association/associationModal/associationModal.html', 'client');
|
||||
api.addFiles('client/components/association/associationModal/associationModal.styl', 'client');
|
||||
api.addFiles('client/components/association/associationModal/associationModal.js', 'client');
|
||||
|
||||
api.addFiles('client/components/association/associationModal/studyAssociationTable/studyAssociationTable.html', 'client');
|
||||
api.addFiles('client/components/association/associationModal/studyAssociationTable/studyAssociationTable.styl', 'client');
|
||||
api.addFiles('client/components/association/associationModal/studyAssociationTable/studyAssociationTable.js', 'client');
|
||||
|
||||
api.addFiles('client/components/association/confirmRemoveTimepointAssociation/confirmRemoveTimepointAssociation.html', 'client');
|
||||
api.addFiles('client/components/association/confirmRemoveTimepointAssociation/confirmRemoveTimepointAssociation.js', 'client');
|
||||
|
||||
api.export('MeasurementSchemaTypes', ['client', 'server']);
|
||||
});
|
||||
|
||||
Loading…
Reference in New Issue
Block a user