reorganize packages, start converting overall app to react (very broken at the moment)
This commit is contained in:
1 parent
024fe1a448
commit
5f30f7bd35
479 files changed
+5364
-11611
No files matched your search
@@ -0,0 +1,2 @@
|
||||
import './measurements.js';
|
||||
import './timepoints.js';
|
||||
@@ -0,0 +1,318 @@
|
||||
import { SimpleSchema } from 'meteor/aldeed:simple-schema';
|
||||
|
||||
const Measurement = new SimpleSchema({
|
||||
additionalData: {
|
||||
type: Object,
|
||||
label: 'Additional Data',
|
||||
defaultValue: {},
|
||||
optional: true,
|
||||
blackbox: true
|
||||
},
|
||||
userId: {
|
||||
type: String,
|
||||
label: 'User ID',
|
||||
optional: true
|
||||
},
|
||||
patientId: {
|
||||
type: String,
|
||||
label: 'Patient ID',
|
||||
optional: true
|
||||
},
|
||||
measurementNumber: {
|
||||
type: Number,
|
||||
label: 'Measurement Number',
|
||||
optional: true
|
||||
},
|
||||
timepointId: {
|
||||
type: String,
|
||||
label: 'Timepoint ID',
|
||||
optional: true
|
||||
},
|
||||
// Force value to be current date (on server) upon insert
|
||||
// and prevent updates thereafter.
|
||||
createdAt: {
|
||||
type: Date,
|
||||
autoValue: function() {
|
||||
if (this.isInsert) {
|
||||
return new Date();
|
||||
} else if (this.isUpsert) {
|
||||
return { $setOnInsert: new Date() };
|
||||
} else {
|
||||
// [PWV-184] Preventing unset due to child tools updating
|
||||
// this.unset(); // Prevent user from supplying their own value
|
||||
}
|
||||
}
|
||||
},
|
||||
// Force value to be current date (on server) upon update
|
||||
updatedAt: {
|
||||
type: Date,
|
||||
autoValue: function() {
|
||||
if (this.isUpdate) {
|
||||
// return new Date();
|
||||
}
|
||||
},
|
||||
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 CornerstoneVOI = new SimpleSchema({
|
||||
windowWidth: {
|
||||
type: Number,
|
||||
label: 'Window Width',
|
||||
decimal: true,
|
||||
optional: true
|
||||
},
|
||||
windowCenter: {
|
||||
type: Number,
|
||||
label: 'Window Center',
|
||||
decimal: true,
|
||||
optional: true
|
||||
},
|
||||
});
|
||||
|
||||
const CornerstoneViewportTranslation = new SimpleSchema({
|
||||
x: {
|
||||
type: Number,
|
||||
label: 'X',
|
||||
decimal: true,
|
||||
optional: true
|
||||
},
|
||||
y: {
|
||||
type: Number,
|
||||
label: 'Y',
|
||||
decimal: true,
|
||||
optional: true
|
||||
},
|
||||
});
|
||||
|
||||
const CornerstoneViewport = new SimpleSchema({
|
||||
scale: {
|
||||
type: Number,
|
||||
label: 'Scale',
|
||||
decimal: true,
|
||||
optional: true
|
||||
},
|
||||
translation: {
|
||||
type: CornerstoneViewportTranslation,
|
||||
label: 'Translation',
|
||||
optional: true
|
||||
},
|
||||
voi: {
|
||||
type: CornerstoneVOI,
|
||||
label: 'VOI',
|
||||
optional: true
|
||||
},
|
||||
invert: {
|
||||
type: Boolean,
|
||||
label: 'Invert',
|
||||
optional: true
|
||||
},
|
||||
pixelReplication: {
|
||||
type: Boolean,
|
||||
label: 'Pixel Replication',
|
||||
optional: true
|
||||
},
|
||||
hFlip: {
|
||||
type: Boolean,
|
||||
label: 'Horizontal Flip',
|
||||
optional: true
|
||||
},
|
||||
vFlip: {
|
||||
type: Boolean,
|
||||
label: 'Vertical Flip',
|
||||
optional: true
|
||||
},
|
||||
rotation: {
|
||||
type: Number,
|
||||
label: 'Rotation (degrees)',
|
||||
decimal: true,
|
||||
optional: true
|
||||
}
|
||||
});
|
||||
|
||||
const InstanceLevelMeasurement = new SimpleSchema([
|
||||
StudyLevelMeasurement,
|
||||
SeriesLevelMeasurement,
|
||||
{
|
||||
sopInstanceUid: {
|
||||
type: String,
|
||||
label: 'SOP Instance UID'
|
||||
},
|
||||
viewport: {
|
||||
type: CornerstoneViewport,
|
||||
label: 'Viewport Parameters',
|
||||
optional: true
|
||||
}
|
||||
}
|
||||
]);
|
||||
|
||||
const FrameLevelMeasurement = new SimpleSchema([
|
||||
StudyLevelMeasurement,
|
||||
SeriesLevelMeasurement,
|
||||
InstanceLevelMeasurement,
|
||||
{
|
||||
frameIndex: {
|
||||
type: Number,
|
||||
min: 0,
|
||||
label: 'Frame index in Instance'
|
||||
},
|
||||
imagePath: {
|
||||
type: String,
|
||||
label: 'Identifier for the measurement\'s image' // studyInstanceUid_seriesInstanceUid_sopInstanceUid_frameIndex
|
||||
}
|
||||
}
|
||||
]);
|
||||
|
||||
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 CornerstoneHandleBoundingBoxSchema = new SimpleSchema({
|
||||
width: {
|
||||
type: Number,
|
||||
label: 'Width',
|
||||
decimal: true
|
||||
},
|
||||
height: {
|
||||
type: Number,
|
||||
label: 'Height',
|
||||
decimal: true
|
||||
},
|
||||
left: {
|
||||
type: Number,
|
||||
label: 'Left',
|
||||
decimal: true
|
||||
},
|
||||
top: {
|
||||
type: Number,
|
||||
label: 'Top',
|
||||
decimal: true
|
||||
}
|
||||
});
|
||||
|
||||
const CornerstoneHandleSchema = new SimpleSchema({
|
||||
x: {
|
||||
type: Number,
|
||||
label: 'X',
|
||||
decimal: true,
|
||||
optional: true // Not actually optional, but sometimes values like x/y position are missing
|
||||
},
|
||||
y: {
|
||||
type: Number,
|
||||
label: 'Y',
|
||||
decimal: true,
|
||||
optional: true // Not actually optional, but sometimes values like x/y position are missing
|
||||
},
|
||||
highlight: {
|
||||
type: Boolean,
|
||||
label: 'Highlight',
|
||||
defaultValue: false
|
||||
},
|
||||
active: {
|
||||
type: Boolean,
|
||||
label: 'Active',
|
||||
defaultValue: false,
|
||||
optional: true
|
||||
},
|
||||
drawnIndependently: {
|
||||
type: Boolean,
|
||||
label: 'Drawn Independently',
|
||||
defaultValue: false,
|
||||
optional: true
|
||||
},
|
||||
movesIndependently: {
|
||||
type: Boolean,
|
||||
label: 'Moves Independently',
|
||||
defaultValue: false,
|
||||
optional: true
|
||||
},
|
||||
allowedOutsideImage: {
|
||||
type: Boolean,
|
||||
label: 'Allowed Outside Image',
|
||||
defaultValue: false,
|
||||
optional: true
|
||||
},
|
||||
hasMoved: {
|
||||
type: Boolean,
|
||||
label: 'Has Already Moved',
|
||||
defaultValue: false,
|
||||
optional: true
|
||||
},
|
||||
hasBoundingBox: {
|
||||
type: Boolean,
|
||||
label: 'Has Bounding Box',
|
||||
defaultValue: false,
|
||||
optional: true
|
||||
},
|
||||
boundingBox: {
|
||||
type: CornerstoneHandleBoundingBoxSchema,
|
||||
label: 'Bounding Box',
|
||||
optional: true
|
||||
},
|
||||
index: { // TODO: Remove 'index' from bidirectionalTool since it's useless
|
||||
type: Number,
|
||||
optional: true
|
||||
},
|
||||
locked: {
|
||||
type: Boolean,
|
||||
label: 'Locked',
|
||||
optional: true,
|
||||
defaultValue: false
|
||||
}
|
||||
});
|
||||
|
||||
export const MeasurementSchemaTypes = {
|
||||
Measurement: Measurement,
|
||||
StudyLevelMeasurement: StudyLevelMeasurement,
|
||||
SeriesLevelMeasurement: SeriesLevelMeasurement,
|
||||
InstanceLevelMeasurement: InstanceLevelMeasurement,
|
||||
FrameLevelMeasurement: FrameLevelMeasurement,
|
||||
CornerstoneToolMeasurement: CornerstoneToolMeasurement,
|
||||
CornerstoneHandleSchema: CornerstoneHandleSchema
|
||||
};
|
||||
@@ -0,0 +1,47 @@
|
||||
import { SimpleSchema } from 'meteor/aldeed:simple-schema';
|
||||
|
||||
export const schema = new SimpleSchema({
|
||||
patientId: {
|
||||
type: String,
|
||||
label: 'Patient ID',
|
||||
optional: true
|
||||
},
|
||||
timepointId: {
|
||||
type: String,
|
||||
label: 'Timepoint ID'
|
||||
},
|
||||
timepointType: {
|
||||
type: String,
|
||||
label: 'Timepoint Type',
|
||||
allowedValues: ['baseline', 'followup'],
|
||||
defaultValue: 'baseline',
|
||||
},
|
||||
isLocked: {
|
||||
type: Boolean,
|
||||
label: 'Timepoint Locked'
|
||||
},
|
||||
studyInstanceUids: {
|
||||
type: [String],
|
||||
label: 'Study Instance Uids',
|
||||
defaultValue: []
|
||||
},
|
||||
earliestDate: {
|
||||
type: Date,
|
||||
label: 'Earliest Study Date from associated studies',
|
||||
},
|
||||
latestDate: {
|
||||
type: Date,
|
||||
label: 'Most recent Study Date from associated studies',
|
||||
},
|
||||
visitNumber: {
|
||||
type: Number,
|
||||
label: 'Number of patient\'s visit',
|
||||
optional: true
|
||||
},
|
||||
studiesData: {
|
||||
type: [Object],
|
||||
label: 'Studies data to allow lazy loading',
|
||||
optional: true,
|
||||
blackbox: true
|
||||
}
|
||||
});
|
||||
Reference in new issue
Block a user