@stackend/api
Version:
JS bindings to api.stackend.com
131 lines • 6.19 kB
JavaScript
;
// @flow
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.forumThreads = exports.DELETE_FORUM_THREAD = exports.UPDATE_FORUM_THREAD_ENTRY = exports.RECEIVE_LIKE_FORUM_THREAD = exports.RECEIVE_VOTE_FORUM_THREAD = exports.INVALIDATE_FORUM_THREADS = exports.REQUEST_FORUM_THREADS = exports.RECEIVE_FORUM_THREADS = void 0;
var get_1 = __importDefault(require("lodash/get"));
var immutability_helper_1 = __importDefault(require("immutability-helper"));
var createReducer_1 = __importDefault(require("../api/createReducer"));
exports.RECEIVE_FORUM_THREADS = 'RECEIVE_FORUM_THREADS';
exports.REQUEST_FORUM_THREADS = 'REQUEST_FORUM_THREADS';
exports.INVALIDATE_FORUM_THREADS = 'INVALIDATE_FORUM_THREADS';
exports.RECEIVE_VOTE_FORUM_THREAD = 'RECEIVE_VOTE_FORUM_THREAD';
exports.RECEIVE_LIKE_FORUM_THREAD = 'RECEIVE_LIKE_FORUM_THREAD';
exports.UPDATE_FORUM_THREAD_ENTRY = 'UPDATE_FORUM_THREAD_ENTRY';
exports.DELETE_FORUM_THREAD = 'DELETE_FORUM_THREAD';
var initialState = {
isFetching: false,
didInvalidate: false,
lastUpdated: 0,
forums: {}
};
exports.forumThreads = (0, createReducer_1.default)(initialState, {
REQUEST_FORUM_THREADS: function (state) {
return (0, immutability_helper_1.default)(state, {
isFetching: { $set: true },
didInvalidate: { $set: false }
});
},
RECEIVE_FORUM_THREADS: function (state, action) {
var _a;
var allForumThreads = action.entries.concat((0, get_1.default)(state, "forums[".concat(action.forumPermalink, "]"), []));
var uniqueForumThreads = allForumThreads
.filter(function (a, i) { return allForumThreads.findIndex(function (s) { return a.id === s.id; }) === i; })
.sort(function (a, b) { return (a.sticky ? 1 : 0) - (b.sticky ? 1 : 0); });
// const uniqueForumThreads = chain(action.entries)
// .concat(get(state, `forums[${action.forumPermalink}]`, []))
// .groupBy('id')
// .map(spread(merge))
// .value()
// .sort((a: ForumThreadEntry, b: ForumThreadEntry) => (a.sticky ? 1 : 0) - (b.sticky ? 1 : 0));
return (0, immutability_helper_1.default)(state, {
isFetching: { $set: false },
didInvalidate: { $set: false },
lastUpdated: { $set: Date.now() },
// @ts-ignore
forums: (_a = {},
_a[action.forumPermalink] = {
// FIXME: Error?
// @ts-ignore
$apply: function (forumPermalink) { return (0, immutability_helper_1.default)(forumPermalink || [], { $set: uniqueForumThreads }); }
},
_a)
});
},
UPDATE_FORUM_THREAD_ENTRY: function (state, action) {
var _a, _b;
var indexOfUpdatedEntry = state.forums[action.forumPermalink].map(function (entry) { return entry.id; }).indexOf(action.entry.id);
if (indexOfUpdatedEntry === -1) {
// Addition
indexOfUpdatedEntry = state.forums[action.forumPermalink].length;
}
return (0, immutability_helper_1.default)(state, {
isFetching: { $set: false },
didInvalidate: { $set: false },
lastUpdated: { $set: Date.now() },
forums: (_a = {},
_a[action.forumPermalink] = (_b = {},
_b[indexOfUpdatedEntry] = { $set: action.entry },
_b),
_a)
});
},
INVALIDATE_FORUM_THREADS: function (state) {
return (0, immutability_helper_1.default)(state, {
didInvalidate: { $set: true }
});
},
RECEIVE_VOTE_FORUM_THREAD: function (state, action) {
var _a, _b;
var forumThreadKey = state.forums[action.forumPermalink].findIndex(function (thread) { return thread.id === action.voteJson.referenceId; });
return (0, immutability_helper_1.default)(state, {
// @ts-ignore
forums: (_a = {},
_a[action.forumPermalink] = (_b = {},
_b[forumThreadKey] = {
voteByCurrentUser: { $set: action.voteJson.score },
voteSummary: { $set: action.voteJson.voteSummary }
},
_b),
_a)
});
},
RECEIVE_LIKE_FORUM_THREAD: function (state, action) {
var _a, _b;
var forumThreadKey = state.forums[action.forumPermalink].findIndex(function (thread) { return thread.id === action.referenceId; });
return (0, immutability_helper_1.default)(state, {
// @ts-ignore
forums: (_a = {},
_a[action.forumPermalink] = (_b = {},
_b[forumThreadKey] = {
numberOfLikes: { $set: action.receivedLikes.numberOfLikes },
likedByCurrentUser: {
$apply: function (context) {
return (0, immutability_helper_1.default)(context || {}, {
likes: { $set: action.receivedLikes.numberOfLikes },
likedByCurrentUser: {
$set: !action.receivedLikes.remove
}
});
}
}
},
_b),
_a)
});
},
DELETE_FORUM_THREAD: function (state, action) {
var _a, _b;
var forumThreadEntryKey = state.forums[action.entry.forumRef.permalink].findIndex(function (thread) { return thread.id === action.entry.id; });
return (0, immutability_helper_1.default)(state, {
forums: (_a = {},
_a[action.entry.forumRef.permalink] = (_b = {},
_b[forumThreadEntryKey] = { $set: action.entry },
_b),
_a)
});
}
});
//# sourceMappingURL=forumThreadReducer.js.map