poi-plugin-senka-calc
Version:
Ranking point calculator for poi
67 lines (49 loc) • 1.73 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.questHistory;
}
case '@@Request/kcsapi/api_req_quest/clearitemget':
{
const current = _momentTimezone.default.tz('Asia/Tokyo');
const lastOfSenkaCycle = _momentTimezone.default.tz('Asia/Tokyo').endOf('month').subtract(10, 'hours');
const monthlyTaskRefresh = _momentTimezone.default.tz('Asia/Tokyo').startOf('month').add(5, 'hours'); // The task is from last quarterly cycle. Senka goes to blackhole.
if (_const.QUARTERLY_QUEST_REFRESH_MONTH.includes(current.month()) && current.isBefore(monthlyTaskRefresh)) {
return state;
}
const {
body
} = payload;
const id = parseInt(body.api_quest_id);
const quest = _const.SENKA_QUESTS.find(quest => quest.id === id);
if (quest) {
// 1000: will move to next month
const rankNo = current.isAfter(lastOfSenkaCycle) ? 1000 : (0, _util.getDateNo)();
const list = [...(state[rankNo] || []), id];
return { ...state,
[rankNo]: list
};
}
return state;
}
default:
{
return state;
}
}
};
exports.reducer = reducer;