diff --git a/Packages/design/styles/components/selectTree.styl b/Packages/design/styles/components/selectTree.styl index f65135ec0..d47a988cf 100644 --- a/Packages/design/styles/components/selectTree.styl +++ b/Packages/design/styles/components/selectTree.styl @@ -8,50 +8,63 @@ $gray4 = #C0C0C0 $gray5 = #9B9B9B $gray6 = #303030 -.select-tree - background-color: white +.select-tree-root - &, a.tree-back, .tree-breadcrumb span, .tree-node, .tree-leaf - transition(all 0.3s ease) + .tree-content + background-color: white + position: relative + + & + .tree-search + a.tree-back + .tree-breadcrumb span + .tree-node + .tree-leaf + transition(all 0.3s ease) + + &.selected + + label.tree-leaf.active + box-shadow: 0 0 0 10px white, inset 0 0 0 200px white + + .tree-content + background-color: transparent + + &>.tree-content + border-color: transparent + border-radius: 0 + + .tree-search + opacity: 0 + + &, .select-tree + + &:not(.open)>.tree-content + + &>.tree-inputs + &>.tree-breadcrumb + display: none + + &>.tree-content>.tree-options + + &>.tree-inputs>label:not(.active) + &>.tree-breadcrumb a + &>.tree-breadcrumb span + color: transparent + + &>.tree-inputs>label.tree-node:not(.active) + border-color: transparent .select-tree-root - &>*:first-child - transition(all 0.3s ease) - -.select-tree-root.selected - border-color: transparent - border-radius: 0 - // height: 26px - - &, .select-tree - background-color: transparent - - &:not(.open)>.tree-options - &>.tree-inputs, &>.tree-breadcrumb - display: none - - &.open>.tree-options - &>.tree-inputs>label:not(.active), &>.tree-breadcrumb a, &>.tree-breadcrumb span - color: transparent - &>.tree-inputs>label.tree-node:not(.active) - border-color: transparent - - .tree-search - opacity: 0 - - &>.tree-options - background-color: transparent - - label.tree-leaf.active - box-shadow: 0 0 0 10px white, inset 0 0 0 200px white - -.select-tree-root - border: 1px solid $gray3 - border-radius: 5px display: inline-block - overflow: hidden + position: relative - &>.tree-options + &>.tree-content + border: 1px solid $gray3 + border-radius: 5px + overflow: hidden + + &>.tree-content>.tree-options transform(scale(1)) transition(height 0.3s ease) @@ -89,10 +102,16 @@ $gray6 = #303030 .select-tree-node left: 0 + overflow: hidden position: fixed width: 100% z-index: 2 + & + .tree-content + .tree-inputs + height: 100% + .tree-options overflow: hidden position: relative @@ -129,5 +148,87 @@ $gray6 = #303030 transition(box-shadow 0.3s ease) z-index: 0 + &:last-child:after + display: block + content: '' + height: 10px + &.collapsed - z-index: 2 + z-index: 1 + + .select-tree-common + height: 100% + overflow: hidden + padding-left: 6px + position: absolute + right: -100% + top: 0 + width: 100% + + .content + background-color: $gray6 + border: 1px solid $gray5 + border-radius: 5px + color: white + opacity: 0.9 + padding: 5px 12px 12px + position: absolute + top: 50% + transform(translateY(-50%)) + width: calc(100% - 6px) + + h5.title + color: $gray5 + font-size: 12px + font-weight: normal + line-height: 20px + margin: 0 + +.select-tree-root + + &>.tree-content + transform(scale(0)) + transform-origin(100% 50%) + transition(all 0.3s ease) + + .select-tree-common .content + margin-left: calc(-100% - 6px) + transition(all 0.3s ease 0.3s) + + &.started + + &>.tree-content + transform(scale(1)) + + .select-tree-common .content + margin-left: 0 + + &.interacted + + .select-tree-common + overflow: visible + + .content + animation-name: selectTreeCommonCloseLeft + animation-duration: 0.3s + animation-iteration-count: 1 + animation-direction: alternate + animation-timing-function: ease-out + animation-fill-mode: forwards + +@keyframes selectTreeCommonCloseLeft { + from { + height: 37px + display: table + margin-left: 0 + opacity: 1 + visibility: visible + } + to { + height: 100% + margin-left: calc(-100% - 6px) + opacity: 0 + visibility: hidden + width: calc(100% - 6px) + } +} diff --git a/Packages/ohif-core/components/base/component.js b/Packages/ohif-core/client/components/base/component.js similarity index 100% rename from Packages/ohif-core/components/base/component.js rename to Packages/ohif-core/client/components/base/component.js diff --git a/Packages/ohif-core/components/base/index.js b/Packages/ohif-core/client/components/base/index.js similarity index 100% rename from Packages/ohif-core/components/base/index.js rename to Packages/ohif-core/client/components/base/index.js diff --git a/Packages/ohif-core/components/base/mixin.js b/Packages/ohif-core/client/components/base/mixin.js similarity index 100% rename from Packages/ohif-core/components/base/mixin.js rename to Packages/ohif-core/client/components/base/mixin.js diff --git a/Packages/ohif-core/components/base/mixins/component.js b/Packages/ohif-core/client/components/base/mixins/component.js similarity index 100% rename from Packages/ohif-core/components/base/mixins/component.js rename to Packages/ohif-core/client/components/base/mixins/component.js diff --git a/Packages/ohif-core/components/base/mixins/form.js b/Packages/ohif-core/client/components/base/mixins/form.js similarity index 100% rename from Packages/ohif-core/components/base/mixins/form.js rename to Packages/ohif-core/client/components/base/mixins/form.js diff --git a/Packages/ohif-core/components/base/mixins/formItem.js b/Packages/ohif-core/client/components/base/mixins/formItem.js similarity index 100% rename from Packages/ohif-core/components/base/mixins/formItem.js rename to Packages/ohif-core/client/components/base/mixins/formItem.js diff --git a/Packages/ohif-core/components/base/mixins/group.js b/Packages/ohif-core/client/components/base/mixins/group.js similarity index 100% rename from Packages/ohif-core/components/base/mixins/group.js rename to Packages/ohif-core/client/components/base/mixins/group.js diff --git a/Packages/ohif-core/components/base/mixins/groupRadio.js b/Packages/ohif-core/client/components/base/mixins/groupRadio.js similarity index 100% rename from Packages/ohif-core/components/base/mixins/groupRadio.js rename to Packages/ohif-core/client/components/base/mixins/groupRadio.js diff --git a/Packages/ohif-core/components/base/mixins/input.js b/Packages/ohif-core/client/components/base/mixins/input.js similarity index 100% rename from Packages/ohif-core/components/base/mixins/input.js rename to Packages/ohif-core/client/components/base/mixins/input.js diff --git a/Packages/ohif-core/components/base/mixins/schemaData.js b/Packages/ohif-core/client/components/base/mixins/schemaData.js similarity index 100% rename from Packages/ohif-core/components/base/mixins/schemaData.js rename to Packages/ohif-core/client/components/base/mixins/schemaData.js diff --git a/Packages/ohif-core/components/base/mixins/select.js b/Packages/ohif-core/client/components/base/mixins/select.js similarity index 100% rename from Packages/ohif-core/components/base/mixins/select.js rename to Packages/ohif-core/client/components/base/mixins/select.js diff --git a/Packages/ohif-core/components/base/mixins/select2.js b/Packages/ohif-core/client/components/base/mixins/select2.js similarity index 100% rename from Packages/ohif-core/components/base/mixins/select2.js rename to Packages/ohif-core/client/components/base/mixins/select2.js diff --git a/Packages/ohif-core/components/base/mixins/selectTree.js b/Packages/ohif-core/client/components/base/mixins/selectTree.js similarity index 100% rename from Packages/ohif-core/components/base/mixins/selectTree.js rename to Packages/ohif-core/client/components/base/mixins/selectTree.js diff --git a/Packages/ohif-core/components/base/template.js b/Packages/ohif-core/client/components/base/template.js similarity index 100% rename from Packages/ohif-core/components/base/template.js rename to Packages/ohif-core/client/components/base/template.js diff --git a/Packages/ohif-core/components/base/templates/custom.html b/Packages/ohif-core/client/components/base/templates/custom.html similarity index 100% rename from Packages/ohif-core/components/base/templates/custom.html rename to Packages/ohif-core/client/components/base/templates/custom.html diff --git a/Packages/ohif-core/components/base/templates/div.html b/Packages/ohif-core/client/components/base/templates/div.html similarity index 100% rename from Packages/ohif-core/components/base/templates/div.html rename to Packages/ohif-core/client/components/base/templates/div.html diff --git a/Packages/ohif-core/components/base/templates/form.html b/Packages/ohif-core/client/components/base/templates/form.html similarity index 100% rename from Packages/ohif-core/components/base/templates/form.html rename to Packages/ohif-core/client/components/base/templates/form.html diff --git a/Packages/ohif-core/components/base/templates/input.html b/Packages/ohif-core/client/components/base/templates/input.html similarity index 100% rename from Packages/ohif-core/components/base/templates/input.html rename to Packages/ohif-core/client/components/base/templates/input.html diff --git a/Packages/ohif-core/components/base/templates/select.html b/Packages/ohif-core/client/components/base/templates/select.html similarity index 100% rename from Packages/ohif-core/components/base/templates/select.html rename to Packages/ohif-core/client/components/base/templates/select.html diff --git a/Packages/ohif-core/components/base/wrappers/label.html b/Packages/ohif-core/client/components/base/wrappers/label.html similarity index 100% rename from Packages/ohif-core/components/base/wrappers/label.html rename to Packages/ohif-core/client/components/base/wrappers/label.html diff --git a/Packages/ohif-core/components/base/wrappers/title.html b/Packages/ohif-core/client/components/base/wrappers/title.html similarity index 100% rename from Packages/ohif-core/components/base/wrappers/title.html rename to Packages/ohif-core/client/components/base/wrappers/title.html diff --git a/Packages/ohif-core/components/bootstrap/form/form.html b/Packages/ohif-core/client/components/bootstrap/form/form.html similarity index 100% rename from Packages/ohif-core/components/bootstrap/form/form.html rename to Packages/ohif-core/client/components/bootstrap/form/form.html diff --git a/Packages/ohif-core/components/bootstrap/form/group.html b/Packages/ohif-core/client/components/bootstrap/form/group.html similarity index 100% rename from Packages/ohif-core/components/bootstrap/form/group.html rename to Packages/ohif-core/client/components/bootstrap/form/group.html diff --git a/Packages/ohif-core/components/bootstrap/index.js b/Packages/ohif-core/client/components/bootstrap/index.js similarity index 100% rename from Packages/ohif-core/components/bootstrap/index.js rename to Packages/ohif-core/client/components/bootstrap/index.js diff --git a/Packages/ohif-core/components/bootstrap/input/groupRadio.html b/Packages/ohif-core/client/components/bootstrap/input/groupRadio.html similarity index 100% rename from Packages/ohif-core/components/bootstrap/input/groupRadio.html rename to Packages/ohif-core/client/components/bootstrap/input/groupRadio.html diff --git a/Packages/ohif-core/components/bootstrap/input/radio.html b/Packages/ohif-core/client/components/bootstrap/input/radio.html similarity index 100% rename from Packages/ohif-core/components/bootstrap/input/radio.html rename to Packages/ohif-core/client/components/bootstrap/input/radio.html diff --git a/Packages/ohif-core/components/bootstrap/input/select.html b/Packages/ohif-core/client/components/bootstrap/input/select.html similarity index 100% rename from Packages/ohif-core/components/bootstrap/input/select.html rename to Packages/ohif-core/client/components/bootstrap/input/select.html diff --git a/Packages/ohif-core/client/components/bootstrap/input/selectTree.html b/Packages/ohif-core/client/components/bootstrap/input/selectTree.html new file mode 100644 index 000000000..d04514164 --- /dev/null +++ b/Packages/ohif-core/client/components/bootstrap/input/selectTree.html @@ -0,0 +1,93 @@ + + + + + + + diff --git a/Packages/ohif-core/components/bootstrap/input/selectTree.js b/Packages/ohif-core/client/components/bootstrap/input/selectTree.js similarity index 82% rename from Packages/ohif-core/components/bootstrap/input/selectTree.js rename to Packages/ohif-core/client/components/bootstrap/input/selectTree.js index 799c07046..98315d451 100644 --- a/Packages/ohif-core/components/bootstrap/input/selectTree.js +++ b/Packages/ohif-core/client/components/bootstrap/input/selectTree.js @@ -4,16 +4,20 @@ import { _ } from 'meteor/underscore'; import { $ } from 'meteor/jquery'; // TODO: use npm dependency -import transition from 'meteor/ohif:core/lib/third-party/transition-to-from-auto'; +import transition from 'meteor/ohif:core/client/lib/third-party/transition-to-from-auto'; Template.selectTree.onRendered(() => { const instance = Template.instance(); const component = instance.$('.select-tree:first').data('component'); const rootComponent = instance.data.root || component; const rootInstance = rootComponent.templateInstance; + const $treeRoot = rootInstance.$('.select-tree-root:first').first(); instance.component = component; + // Start the component transitions + $treeRoot.addClass('started'); + // Update the component's viewport height instance.updateHeight = () => { const height = rootInstance.$('.tree-options:last').data('height'); @@ -28,18 +32,9 @@ Template.selectTree.onRendered(() => { // Put the component in selected state instance.setSelected = (flag) => { - const $treeRoot = rootInstance.$('.select-tree-root:first').first(); - const $firstChild = $treeRoot.children().first(); if (flag) { - const search = rootInstance.$('.tree-search').outerHeight() | 0; - const leaf = $treeRoot.find('.tree-leaf.active').position().top; - const martinTop = search + leaf; - // $firstChild.css('margin-top', -martinTop); - // $treeRoot.css('margin-top', martinTop).addClass('selected'); $treeRoot.addClass('selected'); } else { - // $treeRoot.removeClass('selected').css('margin-top', ''); - // $firstChild.css('margin-top', ''); $treeRoot.removeClass('selected'); } }; @@ -60,7 +55,7 @@ Template.selectTree.onRendered(() => { }); }); - const selector = '.select-tree:first>.tree-options>.tree-breadcrumb .path-link'; + const selector = '.select-tree:first>.tree-content>.tree-options>.tree-breadcrumb .path-link'; instance.$(selector).css('width', 0).each((index, element) => { transition({ element: element, @@ -72,7 +67,12 @@ Template.selectTree.onRendered(() => { }); Template.selectTree.events({ - 'change .select-tree:first>.tree-options>.tree-inputs>label>input'(event, instance) { + 'click .select-tree-root'(event, instance) { + // Detect the first interaction with the component and do the animation + $(event.currentTarget).addClass('interacted'); + }, + + 'change .select-tree:first>.tree-content>.tree-options>.tree-inputs>label>input'(event, instance) { const component = instance.component; const $target = $(event.target); const $label = $target.closest('label'); @@ -111,7 +111,7 @@ Template.selectTree.events({ } }, - 'click .select-tree:first>.tree-options>.tree-breadcrumb .tree-back'(event, instance) { + 'click .select-tree:first>.tree-content>.tree-options>.tree-breadcrumb .tree-back'(event, instance) { const rootComponent = instance.data.root || instance.component; const rootInstance = rootComponent.templateInstance; diff --git a/Packages/ohif-core/components/bootstrap/input/text.html b/Packages/ohif-core/client/components/bootstrap/input/text.html similarity index 100% rename from Packages/ohif-core/components/bootstrap/input/text.html rename to Packages/ohif-core/client/components/bootstrap/input/text.html diff --git a/Packages/ohif-core/components/index.js b/Packages/ohif-core/client/components/index.js similarity index 100% rename from Packages/ohif-core/components/index.js rename to Packages/ohif-core/client/components/index.js diff --git a/Packages/ohif-core/components/playground/playground.html b/Packages/ohif-core/client/components/playground/playground.html similarity index 100% rename from Packages/ohif-core/components/playground/playground.html rename to Packages/ohif-core/client/components/playground/playground.html diff --git a/Packages/ohif-core/components/playground/playground.js b/Packages/ohif-core/client/components/playground/playground.js similarity index 100% rename from Packages/ohif-core/components/playground/playground.js rename to Packages/ohif-core/client/components/playground/playground.js diff --git a/Packages/ohif-core/helpers/blaze.js b/Packages/ohif-core/client/helpers/blaze.js similarity index 100% rename from Packages/ohif-core/helpers/blaze.js rename to Packages/ohif-core/client/helpers/blaze.js diff --git a/Packages/ohif-core/helpers/data.js b/Packages/ohif-core/client/helpers/data.js similarity index 100% rename from Packages/ohif-core/helpers/data.js rename to Packages/ohif-core/client/helpers/data.js diff --git a/Packages/ohif-core/helpers/debug.js b/Packages/ohif-core/client/helpers/debug.js similarity index 100% rename from Packages/ohif-core/helpers/debug.js rename to Packages/ohif-core/client/helpers/debug.js diff --git a/Packages/ohif-core/helpers/index.js b/Packages/ohif-core/client/helpers/index.js similarity index 100% rename from Packages/ohif-core/helpers/index.js rename to Packages/ohif-core/client/helpers/index.js diff --git a/Packages/ohif-core/helpers/logical.js b/Packages/ohif-core/client/helpers/logical.js similarity index 100% rename from Packages/ohif-core/helpers/logical.js rename to Packages/ohif-core/client/helpers/logical.js diff --git a/Packages/ohif-core/helpers/number.js b/Packages/ohif-core/client/helpers/number.js similarity index 100% rename from Packages/ohif-core/helpers/number.js rename to Packages/ohif-core/client/helpers/number.js diff --git a/Packages/ohif-core/helpers/string.js b/Packages/ohif-core/client/helpers/string.js similarity index 100% rename from Packages/ohif-core/helpers/string.js rename to Packages/ohif-core/client/helpers/string.js diff --git a/Packages/ohif-core/helpers/typing.js b/Packages/ohif-core/client/helpers/typing.js similarity index 100% rename from Packages/ohif-core/helpers/typing.js rename to Packages/ohif-core/client/helpers/typing.js diff --git a/Packages/ohif-core/client/index.js b/Packages/ohif-core/client/index.js new file mode 100644 index 000000000..df6c99701 --- /dev/null +++ b/Packages/ohif-core/client/index.js @@ -0,0 +1,6 @@ +import './lib'; +import './components'; +import './helpers'; +import './ui'; + +import './routes.js'; diff --git a/Packages/ohif-core/lib/blaze.js b/Packages/ohif-core/client/lib/blaze.js similarity index 100% rename from Packages/ohif-core/lib/blaze.js rename to Packages/ohif-core/client/lib/blaze.js diff --git a/Packages/ohif-core/lib/index.js b/Packages/ohif-core/client/lib/index.js similarity index 68% rename from Packages/ohif-core/lib/index.js rename to Packages/ohif-core/client/lib/index.js index 8a85bfbf1..1699c91cd 100644 --- a/Packages/ohif-core/lib/index.js +++ b/Packages/ohif-core/client/lib/index.js @@ -1,2 +1,3 @@ import './blaze.js'; import './string.js'; +import './user.js'; diff --git a/Packages/ohif-core/lib/string.js b/Packages/ohif-core/client/lib/string.js similarity index 100% rename from Packages/ohif-core/lib/string.js rename to Packages/ohif-core/client/lib/string.js diff --git a/Packages/ohif-core/lib/third-party/transition-to-from-auto.js b/Packages/ohif-core/client/lib/third-party/transition-to-from-auto.js similarity index 100% rename from Packages/ohif-core/lib/third-party/transition-to-from-auto.js rename to Packages/ohif-core/client/lib/third-party/transition-to-from-auto.js diff --git a/Packages/ohif-core/client/lib/user.js b/Packages/ohif-core/client/lib/user.js new file mode 100644 index 000000000..fb0f00e36 --- /dev/null +++ b/Packages/ohif-core/client/lib/user.js @@ -0,0 +1,32 @@ +import { OHIF } from 'meteor/ohif:core'; + +OHIF.user = {}; + +// Throw error if there is no user logged in +OHIF.user.validate = () => { + if (!Meteor.userId()) { + throw new Meteor.Error('not-authorized'); + } +}; + +// Get the persistent data by key +OHIF.user.getData = key => { + // Check if there is an user logged in + OHIF.user.validate(); + + // Get the user persistent data + const data = Meteor.user().profile.persistent; + + if (data) { + return data[key]; + } +}; + +// Store the persistent data by giving a key and a value to store +OHIF.user.setData = (key, value) => { + // Check if there is an user logged in + OHIF.user.validate(); + + // Call the update method on server-side + Meteor.call('userDataSet', key, value); +}; diff --git a/Packages/ohif-core/client/routes.js b/Packages/ohif-core/client/routes.js new file mode 100644 index 000000000..4338aaea6 --- /dev/null +++ b/Packages/ohif-core/client/routes.js @@ -0,0 +1,5 @@ +import { Router } from 'meteor/clinical:router'; + +Router.route('/playground', function() { + this.render('componentPlayground'); +}); diff --git a/Packages/ohif-core/ui/draggable/draggable.js b/Packages/ohif-core/client/ui/draggable/draggable.js similarity index 100% rename from Packages/ohif-core/ui/draggable/draggable.js rename to Packages/ohif-core/client/ui/draggable/draggable.js diff --git a/Packages/ohif-core/ui/index.js b/Packages/ohif-core/client/ui/index.js similarity index 100% rename from Packages/ohif-core/ui/index.js rename to Packages/ohif-core/client/ui/index.js diff --git a/Packages/ohif-core/ui/resizable/resizable.js b/Packages/ohif-core/client/ui/resizable/resizable.js similarity index 100% rename from Packages/ohif-core/ui/resizable/resizable.js rename to Packages/ohif-core/client/ui/resizable/resizable.js diff --git a/Packages/ohif-core/ui/resizable/resizable.styl b/Packages/ohif-core/client/ui/resizable/resizable.styl similarity index 100% rename from Packages/ohif-core/ui/resizable/resizable.styl rename to Packages/ohif-core/client/ui/resizable/resizable.styl diff --git a/Packages/ohif-core/components/bootstrap/input/selectTree.html b/Packages/ohif-core/components/bootstrap/input/selectTree.html deleted file mode 100644 index 80ca4ea9d..000000000 --- a/Packages/ohif-core/components/bootstrap/input/selectTree.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - diff --git a/Packages/ohif-core/main.js b/Packages/ohif-core/main.js index e093844f5..fca3563d3 100644 --- a/Packages/ohif-core/main.js +++ b/Packages/ohif-core/main.js @@ -1,13 +1,12 @@ -export { OHIF } from './ohif.js'; +/* + * Defines the base OHIF object + */ -import { Meteor } from 'meteor/meteor'; -import { Router } from 'meteor/clinical:router'; +const OHIF = {}; -import './lib'; -import './components'; -import './helpers'; -import './ui'; +// Expose the OHIF object to the client if it is on development mode +if (Meteor.isDevelopment && Meteor.isClient) { + window.OHIF = OHIF; +} -Router.route('/playground', function() { - this.render('componentPlayground'); -}); +export { OHIF }; diff --git a/Packages/ohif-core/ohif.js b/Packages/ohif-core/ohif.js deleted file mode 100644 index 5af84d941..000000000 --- a/Packages/ohif-core/ohif.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Defines the base OHIF object - */ - -const OHIF = {}; - -if (Meteor.isDevelopment) { - window.OHIF = OHIF; -} - -export { OHIF }; diff --git a/Packages/ohif-core/package.js b/Packages/ohif-core/package.js index 5ff932499..67663fa32 100644 --- a/Packages/ohif-core/package.js +++ b/Packages/ohif-core/package.js @@ -23,8 +23,15 @@ Package.onUse(function(api) { // UI Styles api.addFiles([ - 'ui/resizable/resizable.styl' + 'client/ui/resizable/resizable.styl' ], 'client'); - api.mainModule('main.js', 'client'); + api.mainModule('main.js', ['client', 'server']); + + // Client imports and routes + api.addFiles('client/index.js', 'client'); + + // Server imports and methods + api.addFiles('server/index.js', 'server'); + }); diff --git a/Packages/ohif-core/server/index.js b/Packages/ohif-core/server/index.js new file mode 100644 index 000000000..b3741506a --- /dev/null +++ b/Packages/ohif-core/server/index.js @@ -0,0 +1,2 @@ +import './mongo.js'; +import './user.js'; diff --git a/Packages/ohif-core/server/mongo.js b/Packages/ohif-core/server/mongo.js new file mode 100644 index 000000000..0c28b402b --- /dev/null +++ b/Packages/ohif-core/server/mongo.js @@ -0,0 +1,26 @@ +import { OHIF } from 'meteor/ohif:core'; +import { Meteor } from 'meteor/meteor'; + +// Mongo data manipulation utilities +class MongoUtils { + + // Check if there is an user logged in + static validateUser() { + // Throw error if there is no user logged in + if (!Meteor.userId()) { + throw new Meteor.Error('not-authorized'); + } + } + + // Generic callback to MongoDB write operations + static writeCallback(error, affected) { + // Throw error if it was not possible to complete the write operation + if (error) { + throw new Meteor.Error('data-write', error); + } + } + +} + +// Expose the class in the OHIF object +OHIF.MongoUtils = MongoUtils; diff --git a/Packages/ohif-core/server/user.js b/Packages/ohif-core/server/user.js new file mode 100644 index 000000000..c18bb7e41 --- /dev/null +++ b/Packages/ohif-core/server/user.js @@ -0,0 +1,54 @@ +import { OHIF } from 'meteor/ohif:core'; +import { Meteor } from 'meteor/meteor'; + +// Manipulate user's persistent data +class UserData { + + // Get the persistent data by key + static get(key) { + // Check if there is an user logged in + OHIF.MongoUtils.validateUser(); + + // Get the user's profile data + const profileData = Meteor.user().profile; + + // Return the data if it is set + if (profileData.persistent) { + return profileData.persistent[key]; + } + } + + // Store the persistent data by giving a key and a value to store + static set(key, value) { + // Check if there is an user logged in + OHIF.MongoUtils.validateUser(); + + // Build the query to update only the current user's data + var query = { + _id: Meteor.userId() + }; + + // Build the path to the persistent data with the given key + const persistentPath = `profile.persistent.${key}`; + + // Build the data to be updated + var data = { + $set: { + [persistentPath]: value + } + }; + + // Update the user's profile data with the persistent information + Accounts.users.update(query, data, OHIF.MongoUtils.writeCallback); + } + +} + +// Register the methods +Meteor.methods({ + userDataGet: key => UserData.get(key), + userDataSet: (key, value) => UserData.set(key, value) +}); + +// Expose the class in the OHIF object +OHIF.UserData = UserData;