@uimkit/uikit-react
Version:
<img style="width:64px" src="https://mgmt.uimkit.chat/media/img/avatar.png"/>
72 lines (69 loc) • 2.83 kB
JavaScript
import { __assign, __spreadArray } from 'tslib';
import '../../types/models.js';
import '../../types/events.js';
import { AccountListActionType } from './actions.js';
var createInitialState = function () { return ({
fetchingRequest: null,
accounts: []
}); };
var createAccountListReducer = function () { return function (state, action) {
if (state === void 0) { state = createInitialState(); }
switch (action.type) {
case AccountListActionType.ACCOUNT_FETCHED: {
return handleAccountFetched(state, action.payload);
}
case AccountListActionType.FETCHING_ACCOUNT_LIST: {
return handleFetchingAccountList(state, action.payload);
}
case AccountListActionType.ACCOUNT_LIST_FETCHED: {
return handleAccountListFetched(state, action.payload);
}
case AccountListActionType.ERROR_FETCHING_ACCOUNT_LIST: {
return __assign(__assign({}, state), { fetchingRequest: null });
}
default:
return state;
}
}; };
var handleAccountFetched = function (state, payload) {
var accounts = state.accounts;
var idx = accounts.findIndex(function (it) { return it.id === payload.id; });
if (idx < 0) {
accounts.push(payload);
}
else {
accounts[idx] = __assign(__assign({}, accounts[idx]), payload);
}
accounts.sort(function (a, b) { return b.created_at - a.created_at; });
accounts = __spreadArray([], accounts, true);
return __assign(__assign({}, state), { accounts: accounts });
};
var handleFetchingAccountList = function (state, payload) {
return __assign(__assign({}, state), { fetchingRequest: payload });
};
var handleAccountListFetched = function (state, payload) {
var accounts = state.accounts;
var request = payload.request, response = payload.response;
var offset = request.offset;
var data = response.data;
var accountIndexes = {};
accounts.forEach(function (it, idx) { return accountIndexes[it.id] = idx; });
// 有offset是查询更多,追加结果;没有offset是重新查询,重置结果
var results = !!offset ? __spreadArray([], accounts, true) : [];
data.forEach(function (it) {
var idx = accountIndexes[it.id];
var acct = idx === undefined ? it : __assign(__assign({}, accounts[idx]), it);
if (!!offset && idx !== undefined) {
results[idx] = acct;
}
else {
results.push(acct);
}
});
// 排序
results.sort(function (a, b) { return b.created_at - a.created_at; });
return __assign(__assign({}, state), { fetchingRequest: null, accounts: results });
};
var AccountListReducer = createAccountListReducer();
export { AccountListReducer, createAccountListReducer };
//# sourceMappingURL=reducers.js.map