@uimkit/uikit-react
Version:
<img style="width:64px" src="https://mgmt.uimkit.chat/media/img/avatar.png"/>
104 lines (99 loc) • 4.69 kB
JavaScript
;
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