lore-hook-connect
Provides the connect decorator for data retrieval
Provides the connect decorator for data retrieval
Extend or override the built-in blueprints. This is helpful if you want to change the interface for a getState
method call.
Each blueprint is responsible for:
Lore has seven built-in blueprints:
import all from 'lore-hook-connect/es/blueprints/all';
import byCid from 'lore-hook-connect/es/blueprints/byCid';
import byId from 'lore-hook-connect/es/blueprints/byId';
import find from 'lore-hook-connect/es/blueprints/find';
import findAll from 'lore-hook-connect/es/blueprints/findAll';
import first from 'lore-hook-connect/es/blueprints/first';
import singleton from 'lore-hook-connect/es/blueprints/singleton';
blueprints: {
all, // used for calls like getState('tweet.all')
byCid, // used for calls like getState('tweet.byCid')
byId, // used for calls like getState('tweet.byId')
find, // used for calls like getState('tweet.find')
findAll, // used for calls like getState('tweet.findAll')
first, // used for calls like getState('tweet.first')
singleton // used for calls like getState('currentUser')
}
To illustrate how to override a blueprint, let's examine the default syntax to fetch a model by id, which looks like this:
getState('tweet.byId', {
id: 1
})
Now let's say you wanted to modify the syntax to use a 'where' clause, to make it similar to the find
blueprint like this:
getState('tweet.byId', {
where: {
id: 1
}
})
You could achieve that by overriding the byId
blueprint with the implementation below.
blueprints: {
byId: {
defaults: {
where: {
id: null
}
},
verifyParams: function(params) {
if (!params.where.id) {
throw new Error('Missing required field: id');
}
},
getPayload: function(reducerState, params) {
const key = params.where.id;
return reducerState[key];
},
callAction: function(action, params) {
const id = params.where.id;
return action(id).payload;
}
}
}