UNPKG

@uimkit/uikit-react

Version:

<img style="width:64px" src="https://mgmt.uimkit.chat/media/img/avatar.png"/>

104 lines (99 loc) 4.69 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var tslib = require('tslib'); require('../../types/models.js'); require('../../types/events.js'); var actions = require('./actions.js'); // 优先置顶,再按时间排序 var sortConversations = function (a, b) { if (!!a.pinned === !!b.pinned) { return b.active_at - a.active_at; } return !!a.pinned ? -1 : 1; }; var createInitialState = function () { return ({}); }; var createConversationListReducer = function () { return function (state, action) { if (state === void 0) { state = createInitialState(); } switch (action.type) { case actions.ConversationListActionType.FETCHING_CONVERSATION_LIST: { return handleFetchingConversationList(state, action.payload); } case actions.ConversationListActionType.CONVERSATION_LIST_FETCHED: { return handleConversationListFetched(state, action.payload); } case actions.ConversationListActionType.ERROR_FETCHING_CONVERSATION_LIST: { return handleErrorFetchingConversationList(state, action.payload); } case actions.ConversationListActionType.CONVERSATION_RECEIVED: { return handleUpdateConversation(state, action.payload); } case actions.ConversationListActionType.CONVERSATION_UPDATE: { return handleUpdateConversation(state, action.payload); } default: return state; } }; }; var handleFetchingConversationList = function (state, payload) { var _a; var account_id = payload.account_id; var stateByAccount = state[account_id] || newState(); return tslib.__assign(tslib.__assign({}, state), (_a = {}, _a[account_id] = tslib.__assign(tslib.__assign({}, stateByAccount), { fetchingRequest: payload, loading: true }), _a)); }; var handleConversationListFetched = function (state, payload) { var _a; var request = payload.request, response = payload.response; var account_id = request.account_id, cursor = request.cursor; var data = response.data, extra = response.extra; var stateByAccount = state[account_id] || newState(); var conversations = stateByAccount.conversations; var conversationIndexes = {}; conversations.forEach(function (it, idx) { return conversationIndexes[it.id] = idx; }); // 有游标是查询更多,追加结果;没有游标是重新查询,重置结果 var results = !!cursor ? tslib.__spreadArray([], conversations, true) : []; data.forEach(function (it) { var idx = conversationIndexes[it.id]; var conv = idx === undefined ? it : tslib.__assign(tslib.__assign({}, conversations[idx]), it); if (!!cursor && idx !== undefined) { results[idx] = conv; } else { results.push(conv); } }); // 排序 results.sort(sortConversations); return tslib.__assign(tslib.__assign({}, state), (_a = {}, _a[account_id] = tslib.__assign(tslib.__assign({}, stateByAccount), { fetchingRequest: null, loading: false, cursor: extra, conversations: results }), _a)); }; var handleErrorFetchingConversationList = function (state, payload) { var _a; var request = payload.request, error = payload.error; var account_id = request.account_id; var stateByAccount = state[account_id] || newState(); return tslib.__assign(tslib.__assign({}, state), (_a = {}, _a[account_id] = tslib.__assign(tslib.__assign({}, stateByAccount), { fetchingRequest: null, error: error, loading: false }), _a)); }; var handleUpdateConversation = function (state, payload) { var _a; var _b; var account = payload.account; var stateByAccount = state[account] || newState(); var conversations = tslib.__spreadArray([], ((_b = stateByAccount.conversations) !== null && _b !== void 0 ? _b : []), true); var idx = conversations.findIndex(function (it) { return it.id === payload.id; }); if (idx >= 0) { conversations[idx] = tslib.__assign(tslib.__assign({}, conversations[idx]), payload); } else { conversations.push(payload); } conversations.sort(sortConversations); return tslib.__assign(tslib.__assign({}, state), (_a = {}, _a[account] = tslib.__assign(tslib.__assign({}, stateByAccount), { conversations: conversations }), _a)); }; var newState = function () { return ({ fetchingRequest: null, cursor: null, conversations: [] }); }; var ConversationListReducer = createConversationListReducer(); exports.ConversationListReducer = ConversationListReducer; exports.createConversationListReducer = createConversationListReducer; //# sourceMappingURL=reducers.js.map