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