poi-plugin-senka-calc
Version:
Ranking point calculator for poi
80 lines (60 loc) • 2.1 kB
JavaScript
;
exports.__esModule = true;
exports.reducer = void 0;
var _util = require("../lib/util");
var _const = require("../lib/const");
var _momentTimezone = _interopRequireDefault(require("moment-timezone"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const reducer = (state = {}, payload) => {
const {
type
} = payload;
switch (type) {
case '@@poi-plugin-senka-calc/initialize':
{
const {
archive
} = payload;
return archive.exHistory;
}
case '@@Response/kcsapi/api_get_member/mapinfo':
{
const current = _momentTimezone.default.tz('Asia/Tokyo');
const lastOfSenka = _momentTimezone.default.tz('Asia/Tokyo').endOf('month').subtract(2, 'hours'); // Don't record senka after 22:00 of the end day of month
if (current.isAfter(lastOfSenka)) {
return state;
}
const {
body
} = payload;
const newState = { ...state
};
const clearedMapList = Object.keys(_const.EX_MAPS).map(id => parseInt(id)).filter(id => {
const map = body.api_map_info.find(({
api_id
}) => api_id === id);
return map && map.api_cleared > 0;
});
const clearedMapSet = new Set(clearedMapList); // Keep state sync with map data
for (const key of Object.keys(newState)) {
const ts = parseInt(key);
newState[ts] = newState[ts].filter(id => clearedMapSet.has(id));
}
const currentExSet = new Set(Object.values(state).reduce((a, b) => [...a, ...b], []));
const newClearedEx = clearedMapList.filter(id => !currentExSet.has(id));
if (newClearedEx.length) {
const rankNo = (0, _util.getDateNo)();
if (!newState[rankNo]) {
newState[rankNo] = [];
}
newState[rankNo] = [...newState[rankNo], ...newClearedEx];
}
return newState;
}
default:
{
return state;
}
}
};
exports.reducer = reducer;