UNPKG

@uimkit/uikit-react

Version:

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

96 lines (93 loc) 4.08 kB
import { __assign, __spreadArray } from 'tslib'; import '../../types/models.js'; import '../../types/events.js'; import { ContactListActionType } from './actions.js'; // 优先星标,再按时间排序 var sortContacts = function (a, b) { if (!!a.marked === !!b.marked) { return b.created_at - a.created_at; } return !!a.marked ? -1 : 1; }; var createInitialState = function () { return ({}); }; var createContactListReducer = function () { return function (state, action) { if (state === void 0) { state = createInitialState(); } switch (action.type) { case ContactListActionType.FETCHING_CONTACT_LIST: { return handleFetchingContactList(state, action.payload); } case ContactListActionType.CONTACT_LIST_FETCHED: { return handleContactListFetched(state, action.payload); } case ContactListActionType.ERROR_FETCHING_CONTACT_LIST: { return handleErrorFetchingContactList(state, action.payload); } case ContactListActionType.CONTACT_RECEIVED: { return handleContactReceived(state, action.payload); } default: return state; } }; }; var handleFetchingContactList = function (state, payload) { var _a; var account_id = payload.account_id; var stateByAccount = state[account_id] || newState(); return __assign(__assign({}, state), (_a = {}, _a[account_id] = __assign(__assign({}, stateByAccount), { fetchingRequest: payload, loading: true, error: null }), _a)); }; var handleContactListFetched = 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 contacts = stateByAccount.contacts; var contactIndexes = {}; contacts.forEach(function (it, idx) { return contactIndexes[it.id] = idx; }); // 有游标是查询更多,追加结果;没有游标是重新查询,重置结果 var results = !!cursor ? __spreadArray([], contacts, true) : []; data.forEach(function (it) { var idx = contactIndexes[it.id]; var c = idx === undefined ? it : __assign(__assign({}, contacts[idx]), it); if (!!cursor && idx !== undefined) { results[idx] = c; } else { results.push(c); } }); // 让后端排序,不要在前端排序 // results.sort(sortContacts) return __assign(__assign({}, state), (_a = {}, _a[account_id] = __assign(__assign({}, stateByAccount), { fetchingRequest: null, loading: false, error: null, cursor: extra, contacts: results }), _a)); }; var handleErrorFetchingContactList = 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 __assign(__assign({}, state), (_a = {}, _a[account_id] = __assign(__assign({}, stateByAccount), { fetchingRequest: null, loading: false, error: error }), _a)); }; var handleContactReceived = function (state, payload) { var _a; var account = payload.account; var stateByAccount = state[account] || newState(); var contacts = stateByAccount.contacts; var idx = contacts.findIndex(function (it) { return it.id === payload.id; }); if (idx >= 0) { contacts[idx] = __assign(__assign({}, contacts[idx]), payload); } else { contacts.push(payload); } contacts.sort(sortContacts); contacts = __spreadArray([], contacts, true); return __assign(__assign({}, state), (_a = {}, _a[account] = __assign(__assign({}, stateByAccount), { contacts: contacts }), _a)); }; var newState = function () { return ({ fetchingRequest: null, cursor: null, contacts: [] }); }; var ContactListReducer = createContactListReducer(); export { ContactListReducer, createContactListReducer }; //# sourceMappingURL=reducers.js.map