loopback-graphql-relay
Version:
Add Relay based Apollo Server or GraphQL queries on your Loopback server
47 lines (37 loc) • 1.51 kB
JavaScript
/**
* @deprecated since version 0.10.1
*/
const SubscriptionManager = require('graphql-subscriptions');
const _ = require('lodash');
function getOptions(model, options, args) {
const basicOpts = {
context: options.context,
create: (!_.isNil(args.input.create)) ? args.input.create : false,
update: (!_.isNil(args.input.update)) ? args.input.update : false,
remove: (!_.isNil(args.input.remove)) ? args.input.remove : false,
options: (!_.isNil(args.input.options)) ? args.input.options : false,
clientSubscriptionId: (!_.isNil(args.input.clientSubscriptionId)) ? args.input.clientSubscriptionId : false,
};
basicOpts.model = model;
return basicOpts;
}
module.exports = function (models, schema, pubsub) {
const setupFunctions = {};
_.forEach(models, (model) => {
if (!model.shared) {
return;
}
setupFunctions[model.modelName] = (options, args) => {
const ret = {};
ret[_.lowerCase(model.modelName)] = {
// filter: comment => comment.repository_name === args.repoFullName,
channelOptions: getOptions(model, options, args),
};
return ret;
};
});
// setupFunctions maps from subscription name to a map of channel names and their filter functions
// in this case it will subscribe to the commentAddedChannel and re-run the subscription query
// every time a new comment is posted whose repository name matches args.repoFullName.
return new SubscriptionManager({ schema, pubsub, setupFunctions });
};