poi-plugin-leveling-plan 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,11 +9,13 @@ var _reactBootstrap = require("react-bootstrap");
9
9
 
10
10
  var _reactRedux = require("react-redux");
11
11
 
12
- var _reselect = require("reselect");
12
+ var _lodash = _interopRequireDefault(require("lodash"));
13
13
 
14
14
  var _planItem = _interopRequireDefault(require("./plan-item"));
15
15
 
16
- var _selectors = require("../../utils/selectors");
16
+ var _selectors = require("views/utils/selectors");
17
+
18
+ var _selectors2 = require("../../utils/selectors");
17
19
 
18
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
21
 
@@ -52,7 +54,11 @@ class PlanList extends _react.Component {
52
54
  completedPlans,
53
55
  onEdit,
54
56
  onDelete,
55
- onComplete
57
+ onComplete,
58
+ $ships,
59
+ resources,
60
+ useitems,
61
+ $useitems
56
62
  } = this.props; // 根据当前标签页选择要显示的计划
57
63
 
58
64
  let displayPlans = [];
@@ -86,18 +92,29 @@ class PlanList extends _react.Component {
86
92
  planDetail: plan,
87
93
  onEdit: () => onEdit(plan.id),
88
94
  onDelete: () => onDelete(plan.id),
89
- onComplete: () => onComplete(plan.id)
95
+ onComplete: () => onComplete(plan.id),
96
+ $ships: $ships,
97
+ resources: resources,
98
+ useitems: useitems,
99
+ $useitems: $useitems
90
100
  }))));
91
101
  }
92
102
 
93
- } // Redux 连接
94
-
95
-
96
- const mapStateToProps = (0, _reselect.createSelector)([_selectors.allPlanDetailsSelector, _selectors.activePlanDetailsSelector, _selectors.completedPlanDetailsSelector], (allPlans, activePlans, completedPlans) => ({
97
- allPlans,
98
- activePlans,
99
- completedPlans
100
- }));
103
+ } // Redux 连接(不处理equips,避免大量计算)
104
+
105
+
106
+ const mapStateToProps = state => {
107
+ const $const = (0, _selectors.constSelector)(state) || {};
108
+ return {
109
+ allPlans: (0, _selectors2.allPlanDetailsSelector)(state),
110
+ activePlans: (0, _selectors2.activePlanDetailsSelector)(state),
111
+ completedPlans: (0, _selectors2.completedPlanDetailsSelector)(state),
112
+ $ships: (0, _selectors2.$shipsSelector)(state),
113
+ resources: _lodash.default.get(state, 'info.resources', []),
114
+ useitems: _lodash.default.get(state, 'info.useitems', {}),
115
+ $useitems: _lodash.default.get($const, '$useitems', {})
116
+ };
117
+ };
101
118
 
102
119
  var _default = (0, _reactRedux.connect)(mapStateToProps)(PlanList);
103
120
 
@@ -15,11 +15,52 @@ var _selectors = require("../../utils/selectors");
15
15
 
16
16
  var _constants = require("../../utils/constants");
17
17
 
18
+ var _expCalculator = require("../../utils/exp-calculator");
19
+
20
+ var _planHelpers = require("../../utils/plan-helpers");
21
+
18
22
  function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
19
23
 
20
24
  const {
21
25
  __
22
- } = window.i18n['poi-plugin-leveling-plan']; // 计划设置组件
26
+ } = window.i18n['poi-plugin-leveling-plan'];
27
+
28
+ const MapExperienceOverview = ({
29
+ personalStats
30
+ }) => {
31
+ const mapIds = Object.keys(_constants.EXP_BY_POI_DB).sort((a, b) => Number(a) - Number(b));
32
+ return _react.default.createElement("div", {
33
+ className: "map-exp-table-container"
34
+ }, _react.default.createElement("table", {
35
+ className: "map-exp-table"
36
+ }, _react.default.createElement("thead", null, _react.default.createElement("tr", null, _react.default.createElement("th", null, __('Map')), _react.default.createElement("th", null, __('Preset Value')), _react.default.createElement("th", null, __('Personal Value')), _react.default.createElement("th", null, __('Sample Count')), _react.default.createElement("th", null, __('Currently Used')))), _react.default.createElement("tbody", null, mapIds.map(mapId => {
37
+ const mapExpData = (0, _expCalculator.getMapExp)(mapId, personalStats, 30);
38
+ const presetExp = _constants.EXP_BY_POI_DB[mapId] || 0;
39
+ const isPersonal = mapExpData.source === 'personal';
40
+ const hasPersonalData = mapExpData.count > 0;
41
+ const samplesInsufficient = hasPersonalData && !isPersonal;
42
+ return _react.default.createElement("tr", {
43
+ key: mapId
44
+ }, _react.default.createElement("td", {
45
+ className: "map-id"
46
+ }, (0, _planHelpers.formatMapName)(mapId)), _react.default.createElement("td", {
47
+ className: "preset-exp"
48
+ }, presetExp), _react.default.createElement("td", {
49
+ className: `personal-exp ${isPersonal ? 'active' : ''}`
50
+ }, hasPersonalData ? mapExpData.exp : __('No personal data')), _react.default.createElement("td", {
51
+ className: `sample-count ${samplesInsufficient ? 'insufficient' : ''}`
52
+ }, mapExpData.count, samplesInsufficient && _react.default.createElement("span", {
53
+ className: "insufficient-note"
54
+ }, " (", __('Samples Insufficient'), ")")), _react.default.createElement("td", {
55
+ className: "current-source"
56
+ }, isPersonal ? _react.default.createElement("span", {
57
+ className: "source-badge personal"
58
+ }, __('Personal'), " \u2605") : _react.default.createElement("span", {
59
+ className: "source-badge preset"
60
+ }, __('Preset'))));
61
+ }))));
62
+ }; // 计划设置组件
63
+
23
64
 
24
65
  class PlanSettings extends _react.Component {
25
66
  constructor(props) {
@@ -102,7 +143,10 @@ class PlanSettings extends _react.Component {
102
143
  defaultIsFlagship,
103
144
  defaultIsMVP
104
145
  } = this.state;
105
- return _react.default.createElement(_reactBootstrap.Panel, {
146
+ const {
147
+ personalStats
148
+ } = this.props;
149
+ return _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(_reactBootstrap.Panel, {
106
150
  className: "plan-settings"
107
151
  }, _react.default.createElement(_reactBootstrap.Panel.Heading, null, _react.default.createElement(_reactBootstrap.Panel.Title, null, __('Default Battle Conditions'))), _react.default.createElement(_reactBootstrap.Panel.Body, null, _react.default.createElement("p", {
108
152
  className: "help-block"
@@ -132,14 +176,19 @@ class PlanSettings extends _react.Component {
132
176
  }, __('Reset to Default')), _react.default.createElement(_reactBootstrap.Button, {
133
177
  bsStyle: "primary",
134
178
  onClick: this.handleSave
135
- }, __('Save Settings')))));
179
+ }, __('Save Settings'))))), _react.default.createElement(_reactBootstrap.Panel, {
180
+ className: "map-exp-overview-panel"
181
+ }, _react.default.createElement(_reactBootstrap.Panel.Heading, null, _react.default.createElement(_reactBootstrap.Panel.Title, null, __('Map Experience Overview'))), _react.default.createElement(_reactBootstrap.Panel.Body, null, _react.default.createElement(MapExperienceOverview, {
182
+ personalStats: personalStats
183
+ }))));
136
184
  }
137
185
 
138
186
  } // Redux 连接
139
187
 
140
188
 
141
- const mapStateToProps = (0, _reselect.createSelector)([_selectors.planSettingsSelector], settings => ({
142
- settings
189
+ const mapStateToProps = (0, _reselect.createSelector)([_selectors.planSettingsSelector, _selectors.personalStatsSelector], (settings, personalStats) => ({
190
+ settings,
191
+ personalStats
143
192
  }));
144
193
 
145
194
  var _default = (0, _reactRedux.connect)(mapStateToProps)(PlanSettings);
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.UseitemIcon = void 0;
5
+
6
+ var _classnames = _interopRequireDefault(require("classnames"));
7
+
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+
10
+ var _react = _interopRequireWildcard(require("react"));
11
+
12
+ var _path = require("path");
13
+
14
+ var _reactRedux = require("react-redux");
15
+
16
+ var _selectors = require("views/utils/selectors");
17
+
18
+ var _lodash = _interopRequireDefault(require("lodash"));
19
+
20
+ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
21
+
22
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
+
24
+ const fallback = (0, _path.resolve)(__dirname, '../../assets/icon/useitem.svg'); // 有图标文件的 useitem id 集合(75/77/78/94 命名正确,其余 fallback)
25
+
26
+ const AVAILABLE_ICONS = new Set([75, 77, 78, 94]);
27
+
28
+ class StaticUseitemIcon extends _react.Component {
29
+ constructor(...args) {
30
+ var _temp;
31
+
32
+ return _temp = super(...args), Object.defineProperty(this, "shouldComponentUpdate", {
33
+ configurable: true,
34
+ enumerable: true,
35
+ writable: true,
36
+ value: nextProps => !_lodash.default.isEqual(nextProps, this.props)
37
+ }), _temp;
38
+ }
39
+
40
+ render() {
41
+ const {
42
+ useitemId,
43
+ className,
44
+ useSVGIcon
45
+ } = this.props;
46
+ const classNames = (0, _classnames.default)(useSVGIcon ? 'svg' : 'png', className);
47
+ let _src = fallback;
48
+
49
+ try {
50
+ if (AVAILABLE_ICONS.has(useitemId)) {
51
+ _src = (0, _path.resolve)(__dirname, `../../assets/icon/${useitemId}.png`);
52
+ }
53
+ } catch (e) {
54
+ _src = fallback;
55
+ }
56
+
57
+ return _react.default.createElement("img", {
58
+ src: _src,
59
+ alt: `useitem #${useitemId}`,
60
+ className: (0, _classnames.default)(classNames, 'useitem-icon')
61
+ });
62
+ }
63
+
64
+ }
65
+
66
+ Object.defineProperty(StaticUseitemIcon, "propTypes", {
67
+ configurable: true,
68
+ enumerable: true,
69
+ writable: true,
70
+ value: {
71
+ useitemId: _propTypes.default.number.isRequired,
72
+ className: _propTypes.default.string,
73
+ useSVGIcon: _propTypes.default.bool.isRequired
74
+ }
75
+ });
76
+ Object.defineProperty(StaticUseitemIcon, "defaultProps", {
77
+ configurable: true,
78
+ enumerable: true,
79
+ writable: true,
80
+ value: {
81
+ className: ''
82
+ }
83
+ });
84
+ const UseitemIcon = (0, _reactRedux.connect)(state => ({
85
+ useSVGIcon: _lodash.default.get((0, _selectors.configSelector)(state), 'poi.useSVGIcon')
86
+ }))(StaticUseitemIcon);
87
+ exports.UseitemIcon = UseitemIcon;