UNPKG

@stackend/api

Version:

JS bindings to api.stackend.com

131 lines 6.19 kB
"use strict"; // @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