UNPKG

poi-plugin-senka-calc

Version:
80 lines (60 loc) 2.1 kB
"use strict"; 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;