Skip to content

Commit

Permalink
Updated fhir.js with support for fetchAllWithReferences convenience m…
Browse files Browse the repository at this point in the history
…ethod
  • Loading branch information
Nikolai Schwertner committed Feb 13, 2016
1 parent ff796eb commit 2223afe
Show file tree
Hide file tree
Showing 5 changed files with 127 additions and 10 deletions.
4 changes: 2 additions & 2 deletions dist/fhir-client-angularjs.min.js

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions dist/fhir-client-jquery.min.js

Large diffs are not rendered by default.

61 changes: 61 additions & 0 deletions dist/fhir-client.js
Original file line number Diff line number Diff line change
Expand Up @@ -1169,6 +1169,8 @@ return /******/ (function(modules) { // webpackBootstrap
}, function(err) {
fail(err);
});
}, function(err) {
fail(err);
});
};

Expand All @@ -1185,17 +1187,76 @@ return /******/ (function(modules) { // webpackBootstrap
},
function () {
ret.resolve(results);
},
function (err) {
ret.reject(err);
}
);

return ret.promise;
};

function fetchAllWithReferences (searchParams, resolveParams) {
var ret = adapter.defer();

fhirAPI.search(searchParams)
.then(function(results){

var resolvedReferences = {};

var queue = [function() {ret.resolve(results, resolvedReferences);}];

function enqueue (bundle,resource,reference) {
queue.push(function() {resolveReference(bundle,resource,reference)});
}

function next() {
(queue.pop())();
}

function resolveReference (bundle,resource,reference) {
var referenceID = reference.reference;
fhirAPI.resolve({'bundle': bundle, 'resource': resource, 'reference':reference}).then(function(res){
var referencedObject = res.data || res.content;
resolvedReferences[referenceID] = referencedObject;
next();
});
}

var bundle = results.data;

bundle.entry && bundle.entry.forEach(function(element){
var resource = element.resource;
var type = resource.resourceType;
resolveParams && resolveParams.forEach(function(resolveParam){
var param = resolveParam.split('.');
var targetType = param[0];
var targetElement = param[1];
var reference = resource[targetElement];
if (type === targetType && reference) {
var referenceID = reference.reference;
if (!resolvedReferences[referenceID]) {
enqueue(bundle,resource,reference);
}
}
});
});

next();

}, function(){
ret.reject("Could not fetch search results");
});

return ret.promise;
};

function decorate (client, newAdapter) {
fhirAPI = client;
adapter = newAdapter;
client["drain"] = drain;
client["fetchAll"] = fetchAll;
client["fetchAllWithReferences"] = fetchAllWithReferences;
return client;
}

Expand Down
12 changes: 6 additions & 6 deletions dist/fhir-client.min.js

Large diffs are not rendered by default.

56 changes: 56 additions & 0 deletions lib/jqFhir.js
Original file line number Diff line number Diff line change
Expand Up @@ -1194,12 +1194,68 @@ return /******/ (function(modules) { // webpackBootstrap

return ret.promise;
};

function fetchAllWithReferences (searchParams, resolveParams) {
var ret = adapter.defer();

fhirAPI.search(searchParams)
.then(function(results){

var resolvedReferences = {};

var queue = [function() {ret.resolve(results, resolvedReferences);}];

function enqueue (bundle,resource,reference) {
queue.push(function() {resolveReference(bundle,resource,reference)});
}

function next() {
(queue.pop())();
}

function resolveReference (bundle,resource,reference) {
var referenceID = reference.reference;
fhirAPI.resolve({'bundle': bundle, 'resource': resource, 'reference':reference}).then(function(res){
var referencedObject = res.data || res.content;
resolvedReferences[referenceID] = referencedObject;
next();
});
}

var bundle = results.data;

bundle.entry && bundle.entry.forEach(function(element){
var resource = element.resource;
var type = resource.resourceType;
resolveParams && resolveParams.forEach(function(resolveParam){
var param = resolveParam.split('.');
var targetType = param[0];
var targetElement = param[1];
var reference = resource[targetElement];
if (type === targetType && reference) {
var referenceID = reference.reference;
if (!resolvedReferences[referenceID]) {
enqueue(bundle,resource,reference);
}
}
});
});

next();

}, function(){
ret.reject("Could not fetch search results");
});

return ret.promise;
};

function decorate (client, newAdapter) {
fhirAPI = client;
adapter = newAdapter;
client["drain"] = drain;
client["fetchAll"] = fetchAll;
client["fetchAllWithReferences"] = fetchAllWithReferences;
return client;
}

Expand Down

0 comments on commit 2223afe

Please sign in to comment.