@airbnb/lunar-apollo
Version:
Apollo and GraphQL utilities.
43 lines (32 loc) • 1.7 kB
JavaScript
;
exports.__esModule = true;
exports.default = removeFromList;
var _fp = require("lodash/fp");
var _prepareQuery = _interopRequireDefault(require("../utils/prepareQuery"));
var _getQueryName = _interopRequireDefault(require("../utils/getQueryName"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function removeFromList(docOrQuery, listPath, id, idName = 'id') {
const query = (0, _prepareQuery.default)(docOrQuery);
return cache => {
const queryResult = cache.readQuery(query);
const list = (0, _fp.get)(listPath, queryResult);
if (typeof list === 'undefined' || !Array.isArray(list)) {
if ("production" !== process.env.NODE_ENV) {
throw new TypeError("\"" + (0, _getQueryName.default)(query.query) + "\" list \"" + listPath + "\" is not an array.");
} else {
return;
}
}
const rootItem = listPath.split('.')[0]; // @ts-ignore
const resultRoot = queryResult[rootItem]; // Evict cache before writeQuery: https://github.com/apollographql/apollo-client/issues/6451
cache.evict({
id: cache.identify(resultRoot),
broadcast: false
});
const nextResult = (0, _fp.set)(listPath, list.filter(item => item[idName] !== id), _extends({}, queryResult));
cache.writeQuery(_extends({}, query, {
data: nextResult
}));
};
}