@uimkit/uikit-react
Version:
<img style="width:64px" src="https://mgmt.uimkit.chat/media/img/avatar.png"/>
101 lines (96 loc) • 4.35 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 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 actions.ContactListActionType.FETCHING_CONTACT_LIST: {
return handleFetchingContactList(state, action.payload);
}
case actions.ContactListActionType.CONTACT_LIST_FETCHED: {
return handleContactListFetched(state, action.payload);
}
case actions.ContactListActionType.ERROR_FETCHING_CONTACT_LIST: {
return handleErrorFetchingContactList(state, action.payload);
}
case actions.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 tslib.__assign(tslib.__assign({}, state), (_a = {}, _a[account_id] = tslib.__assign(tslib.__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 ? tslib.__spreadArray([], contacts, true) : [];
data.forEach(function (it) {
var idx = contactIndexes[it.id];
var c = idx === undefined ? it : tslib.__assign(tslib.__assign({}, contacts[idx]), it);
if (!!cursor && idx !== undefined) {
results[idx] = c;
}
else {
results.push(c);
}
});
// 让后端排序,不要在前端排序
// results.sort(sortContacts)
return tslib.__assign(tslib.__assign({}, state), (_a = {}, _a[account_id] = tslib.__assign(tslib.__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 tslib.__assign(tslib.__assign({}, state), (_a = {}, _a[account_id] = tslib.__assign(tslib.__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] = tslib.__assign(tslib.__assign({}, contacts[idx]), payload);
}
else {
contacts.push(payload);
}
contacts.sort(sortContacts);
contacts = tslib.__spreadArray([], contacts, true);
return tslib.__assign(tslib.__assign({}, state), (_a = {}, _a[account] = tslib.__assign(tslib.__assign({}, stateByAccount), { contacts: contacts }), _a));
};
var newState = function () { return ({
fetchingRequest: null,
cursor: null,
contacts: []
}); };
var ContactListReducer = createContactListReducer();
exports.ContactListReducer = ContactListReducer;
exports.createContactListReducer = createContactListReducer;
//# sourceMappingURL=reducers.js.map