UNPKG

poi-plugin-senka-calc

Version:
176 lines (149 loc) 8.46 kB
"use strict"; exports.__esModule = true; exports.Info = void 0; var _react = _interopRequireWildcard(require("react")); var _core = require("@blueprintjs/core"); var _styledComponents = _interopRequireDefault(require("styled-components")); var _reactRedux = require("react-redux"); var _reactI18next = require("react-i18next"); var _selectors = require("../selectors"); var _magic = require("../lib/magic"); var _util = require("../lib/util"); var _const = require("../lib/const"); var _common = require("./common"); var _overlay = require("views/components/etc/overlay"); var remote = _interopRequireWildcard(require("@electron/remote")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } const gameAPIBroadcaster = remote.require('./lib/game-api-broadcaster'); const SenkaText = _styledComponents.default.span.withConfig({ displayName: "info__SenkaText", componentId: "sc-zntess-0" })(["padding-right:5px;"]); const IncreasementText = _styledComponents.default.span.withConfig({ displayName: "info__IncreasementText", componentId: "sc-zntess-1" })(["font-size:0.9;opacity:0.75;"]); const Td = _styledComponents.default.td.withConfig({ displayName: "info__Td", componentId: "sc-zntess-2" })(["position:relative;padding-top:18px !important;"]); const CornerLabel = _styledComponents.default.div.withConfig({ displayName: "info__CornerLabel", componentId: "sc-zntess-3" })(["display:flex;font-size:12px;position:absolute;padding:0 16px 0 5px;line-height:16px;border-bottom-right-radius:18px;top:0;left:0;white-space:nowrap;opacity:0.9;align-items:center;"]); const DateIcon = (0, _styledComponents.default)(_core.Icon).withConfig({ displayName: "info__DateIcon", componentId: "sc-zntess-4" })(["margin-left:4px;"]); const TooltipRightAlign = (0, _styledComponents.default)(_overlay.Tooltip).withConfig({ displayName: "info__TooltipRightAlign", componentId: "sc-zntess-5" })(["margin-left:auto;"]); const Info = prop => { const { rank5 = {}, rank20 = {}, rank100 = {}, rank501 = {}, rankUser = {}, experienceHistory = {}, exHistory = {}, questHistory = {}, currentRank } = (0, _reactRedux.useSelector)(_selectors.pluginDataSelector); const { t } = (0, _reactI18next.useTranslation)('poi-plugin-senka-calc'); const [isRefreshingMagic, setIsRefreshingMagic] = (0, _react.useState)(false); const onRefreshButtonClick = (0, _react.useCallback)(() => { setIsRefreshingMagic(true); _magic.magicManager.isParsingMagic = true; }, []); const callback = (0, _react.useCallback)(() => { setIsRefreshingMagic(false); }, []); (0, _react.useEffect)(() => { _magic.magicManager.addListener('magic-refreshed', callback); return () => { _magic.magicManager.removeListener('magic-refreshed', callback); }; }, [prop]); (0, _react.useEffect)(() => { const cb = (_method, [domain, path]) => { if (path === '/kcsapi/api_get_member/record') { onRefreshButtonClick(); } }; gameAPIBroadcaster.addListener('network.on.response', cb); return () => { gameAPIBroadcaster.removeListener('network.on.response', cb); }; }, [onRefreshButtonClick]); const rankList = [[5, rank5], [20, rank20], [100, rank100], [501, rank501], [currentRank, rankUser]]; const getDeltaForOtherUser = (0, _react.useCallback)(rankHistory => { return (0, _util.getElementFromNumberRecords)(rankHistory, -1) - (0, _util.getElementFromNumberRecords)(rankHistory, -2); }, []); const userSenkaDelta = (0, _react.useMemo)(() => { const lastUpdateDateNo = parseInt((0, _util.getElementByIndex)(Object.keys(rankUser), -1)); const experienceDelta = (0, _util.getElementFromNumberRecords)(experienceHistory, -1) - experienceHistory[lastUpdateDateNo]; const experienceSenka = experienceDelta * _const.EXPERIENCE_TO_SENKA_RATE; const uncountedExSenka = Object.keys(exHistory).map(dateNo => parseInt(dateNo)).filter(dateNo => dateNo >= lastUpdateDateNo).map(dateNo => exHistory[dateNo]).reduce((a, b) => [...a, ...b], []).map(id => _const.EX_MAPS[id] || 0).reduce((a, b) => a + b, 0); const uncountedQuestSenka = Object.keys(questHistory).map(dateNo => parseInt(dateNo)) // Senka of dateNo 1000 will be moved to next month .filter(dateNo => dateNo >= lastUpdateDateNo && dateNo < 1000).map(dateNo => questHistory[dateNo]).reduce((a, b) => [...a, ...b], []).map(questId => { var _SENKA_QUESTS$find; return ((_SENKA_QUESTS$find = _const.SENKA_QUESTS.find(({ id }) => id === questId)) === null || _SENKA_QUESTS$find === void 0 ? void 0 : _SENKA_QUESTS$find.senka) || 0; }).reduce((a, b) => a + b, 0); return (experienceSenka + uncountedExSenka + uncountedQuestSenka).toFixed(1); }, [rankUser, experienceHistory, exHistory, questHistory]); return /*#__PURE__*/_react.default.createElement(_common.Container, null, /*#__PURE__*/_react.default.createElement(_common.Title, null, /*#__PURE__*/_react.default.createElement(_core.Icon, { icon: "numbered-list", style: { paddingRight: 8 } }), t('Ranking Info'), /*#__PURE__*/_react.default.createElement(TooltipRightAlign, { position: _core.Position.BOTTOM_RIGHT, content: t('Click the button and load ranking page to correct ranking point values'), targetTagName: "div", wrapperTagName: "div" }, /*#__PURE__*/_react.default.createElement(_core.Button, { icon: "refresh", small: true, minimal: true, onClick: onRefreshButtonClick, loading: isRefreshingMagic, style: { minWidth: 16, minHeight: 16 } }))), /*#__PURE__*/_react.default.createElement(_core.HTMLTable, { striped: true, condensed: true, style: { width: '100%' } }, /*#__PURE__*/_react.default.createElement("thead", null, /*#__PURE__*/_react.default.createElement("tr", null, /*#__PURE__*/_react.default.createElement("th", null, t('Rank')), /*#__PURE__*/_react.default.createElement("th", null, t('Point')))), /*#__PURE__*/_react.default.createElement("tbody", null, rankList.map(([rank, rankHistory], index) => { const lastUpdateDateNo = parseInt((0, _util.getElementByIndex)(Object.keys(rankHistory), -1)); const [lastUpdateDate, isDate] = (0, _util.dateNoToDate)(lastUpdateDateNo); const senka = (0, _util.getElementFromNumberRecords)(rankHistory, -1); const delta = index !== rankList.length - 1 ? getDeltaForOtherUser(rankHistory) : // last one is user's senka, show the experience delta instead userSenkaDelta; return /*#__PURE__*/_react.default.createElement("tr", { key: index }, /*#__PURE__*/_react.default.createElement(Td, null, rank, /*#__PURE__*/_react.default.createElement(CornerLabel, { className: "bg-primary" }, t('Last Update {{ date }}', { date: lastUpdateDate }), /*#__PURE__*/_react.default.createElement(DateIcon, { size: 10, icon: isDate ? 'full-circle' : 'moon' }))), /*#__PURE__*/_react.default.createElement(Td, null, /*#__PURE__*/_react.default.createElement(SenkaText, null, senka), /*#__PURE__*/_react.default.createElement(IncreasementText, null, /*#__PURE__*/_react.default.createElement(_core.Icon, { icon: "arrow-up", size: 12 }), delta))); })))); }; exports.Info = Info;