1 | "use strict";
|
2 | var actions_1 = require('../actions');
|
3 | var store_1 = require('../data/store');
|
4 | var store_2 = require('../store');
|
5 | var assign = require('lodash.assign');
|
6 | var pick = require('lodash.pick');
|
7 | var optimisticDefaultState = [];
|
8 | function optimistic(previousState, action, store, config) {
|
9 | if (previousState === void 0) { previousState = optimisticDefaultState; }
|
10 | if (actions_1.isMutationInitAction(action) && action.optimisticResponse) {
|
11 | var fakeMutationResultAction = {
|
12 | type: 'APOLLO_MUTATION_RESULT',
|
13 | result: { data: action.optimisticResponse },
|
14 | mutationId: action.mutationId,
|
15 | resultBehaviors: action.resultBehaviors,
|
16 | };
|
17 | var fakeStore = assign({}, store, { optimistic: previousState });
|
18 | var optimisticData_1 = store_2.getDataWithOptimisticResults(fakeStore);
|
19 | var fakeDataResultState_1 = store_1.data(optimisticData_1, fakeMutationResultAction, store.queries, store.mutations, config);
|
20 | var changedKeys = Object.keys(fakeDataResultState_1).filter(function (key) { return optimisticData_1[key] !== fakeDataResultState_1[key]; });
|
21 | var patch = pick(fakeDataResultState_1, changedKeys);
|
22 | var optimisticState = {
|
23 | data: patch,
|
24 | mutationId: action.mutationId,
|
25 | };
|
26 | var newState = previousState.concat([optimisticState]);
|
27 | return newState;
|
28 | }
|
29 | else if ((actions_1.isMutationErrorAction(action) || actions_1.isMutationResultAction(action))
|
30 | && previousState.some(function (change) { return change.mutationId === action.mutationId; })) {
|
31 | var newState = previousState.filter(function (change) { return change.mutationId !== action.mutationId; });
|
32 | return newState;
|
33 | }
|
34 | return previousState;
|
35 | }
|
36 | exports.optimistic = optimistic;
|
37 |
|
\ | No newline at end of file |