poi-plugin-koushu-rate 2.0.14 → 2.0.16
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.
- package/index.js +156 -45
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -40,6 +40,7 @@ const WEEKDAY_KEYS = ["monday", "tuesday", "wednesday", "thursday", "friday", "s
|
|
|
40
40
|
const WEEKDAY_LABELS = { monday: "周一", tuesday: "周二", wednesday: "周三", thursday: "周四", friday: "周五", saturday: "周六", sunday: "周日" };
|
|
41
41
|
const ALL_DAYS_KEY = "all";
|
|
42
42
|
|
|
43
|
+
|
|
43
44
|
function japanWeekdayKey() {
|
|
44
45
|
const japanNow = new Date(Date.now() + 9 * 60 * 60 * 1000)
|
|
45
46
|
return ["sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"][japanNow.getUTCDay()]
|
|
@@ -505,6 +506,10 @@ const CSS = `
|
|
|
505
506
|
border-color: #2d72d2;
|
|
506
507
|
color: #fff;
|
|
507
508
|
}
|
|
509
|
+
.kr2-plan-target-btn:disabled {
|
|
510
|
+
opacity: 0.4;
|
|
511
|
+
cursor: not-allowed;
|
|
512
|
+
}
|
|
508
513
|
.kr2-level-max-blue {
|
|
509
514
|
color: #4fc3f7;
|
|
510
515
|
font-weight: 700;
|
|
@@ -858,6 +863,42 @@ const CSS = `
|
|
|
858
863
|
.kr2-row:hover {
|
|
859
864
|
background: #252a31;
|
|
860
865
|
}
|
|
866
|
+
.kr2-row-not-improveable {
|
|
867
|
+
color: #abb3bf;
|
|
868
|
+
cursor: default;
|
|
869
|
+
}
|
|
870
|
+
.kr2-row-not-improveable .kr2-name,
|
|
871
|
+
.kr2-row-not-improveable .kr2-secretary,
|
|
872
|
+
.kr2-row-not-improveable .kr2-meta {
|
|
873
|
+
color: #abb3bf;
|
|
874
|
+
}
|
|
875
|
+
.kr2-reco-empty {
|
|
876
|
+
min-height: 34px;
|
|
877
|
+
}
|
|
878
|
+
.kr2-not-improveable-group {
|
|
879
|
+
border-top: 1px solid rgba(255, 255, 255, 0.12);
|
|
880
|
+
}
|
|
881
|
+
.kr2-collapse-toggle {
|
|
882
|
+
width: 100%;
|
|
883
|
+
padding: 10px 14px;
|
|
884
|
+
border: 0;
|
|
885
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
|
|
886
|
+
background: #252a31;
|
|
887
|
+
color: #abb3bf;
|
|
888
|
+
text-align: center;
|
|
889
|
+
font-size: 14px;
|
|
890
|
+
cursor: pointer;
|
|
891
|
+
}
|
|
892
|
+
.kr2-collapse-toggle:hover {
|
|
893
|
+
background: #2f343c;
|
|
894
|
+
}
|
|
895
|
+
.kr2-improveable-group {
|
|
896
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.12);
|
|
897
|
+
}
|
|
898
|
+
.kr2-fav-btn:disabled {
|
|
899
|
+
opacity: 0.4;
|
|
900
|
+
cursor: default;
|
|
901
|
+
}
|
|
861
902
|
.kr2-fav-btn {
|
|
862
903
|
width: 24px;
|
|
863
904
|
height: 24px;
|
|
@@ -1077,6 +1118,7 @@ const CSS = `
|
|
|
1077
1118
|
align-items: flex-end;
|
|
1078
1119
|
gap: 6px;
|
|
1079
1120
|
}
|
|
1121
|
+
|
|
1080
1122
|
.kr2-material-list {
|
|
1081
1123
|
display: flex;
|
|
1082
1124
|
flex-direction: column;
|
|
@@ -2280,6 +2322,33 @@ function buildRows(staticData, masterEquips, fallbackNames, akashi, recommendati
|
|
|
2280
2322
|
if (ib >= 0) return 1
|
|
2281
2323
|
return Number(a.id) - Number(b.id)
|
|
2282
2324
|
})
|
|
2325
|
+
const improveableKeys = new Set(Object.keys(stepsByEquip))
|
|
2326
|
+
const nonImproveableIds = Object.keys(fallbackNames).filter((id) => !improveableKeys.has(id)).map(Number).sort((a, b) => a - b)
|
|
2327
|
+
for (const id of nonImproveableIds) {
|
|
2328
|
+
const key = String(id)
|
|
2329
|
+
const fallback = fallbackNames[key] || {}
|
|
2330
|
+
const master = masterEquips[key] || {}
|
|
2331
|
+
const category = CATEGORY_ALIASES[translateTypeName(fallback.type || master.api_type_name)] || "其他"
|
|
2332
|
+
const name = String(master.api_name || fallback.name || ("装备 " + id))
|
|
2333
|
+
rows.push({
|
|
2334
|
+
id: key,
|
|
2335
|
+
name,
|
|
2336
|
+
typeName: String(fallback.type || master.api_type_name || ""),
|
|
2337
|
+
icon: master.api_type && master.api_type[3] != null ? Number(master.api_type[3]) : (fallback.icon != null ? Number(fallback.icon) : 0),
|
|
2338
|
+
base: null,
|
|
2339
|
+
days: [],
|
|
2340
|
+
category,
|
|
2341
|
+
reco: false,
|
|
2342
|
+
akashiName: "",
|
|
2343
|
+
recommend: null,
|
|
2344
|
+
secretaries: null,
|
|
2345
|
+
searchText: normalizeText([name, category, id].join(" ")),
|
|
2346
|
+
phase0: null,
|
|
2347
|
+
phase1: null,
|
|
2348
|
+
upgrades: null,
|
|
2349
|
+
improveable: false,
|
|
2350
|
+
})
|
|
2351
|
+
}
|
|
2283
2352
|
return rows
|
|
2284
2353
|
}
|
|
2285
2354
|
|
|
@@ -2436,7 +2505,7 @@ function planCopyCosts(row, target, current, upgradeId) {
|
|
|
2436
2505
|
const ensure = rec.tone === "ensure"
|
|
2437
2506
|
const expected = Number.isFinite(rec.expected) ? rec.expected : step.consume_improvement_min / lv.p
|
|
2438
2507
|
const screws = ensure ? step.consume_improvement_max : expected
|
|
2439
|
-
const attempts = ensure ? 1 :
|
|
2508
|
+
const attempts = ensure ? 1 : 1 / lv.p
|
|
2440
2509
|
const dev = ensure ? step.consume_development_max : step.consume_development_min * attempts
|
|
2441
2510
|
out.screws += screws
|
|
2442
2511
|
out.dev += dev
|
|
@@ -2456,7 +2525,7 @@ function planCopyCosts(row, target, current, upgradeId) {
|
|
|
2456
2525
|
const ensure = rec.tone === "ensure"
|
|
2457
2526
|
const expected = Number.isFinite(rec.expected) ? rec.expected : upg.consume_improvement_min / 0.62
|
|
2458
2527
|
const screws = ensure ? upg.consume_improvement_max : expected
|
|
2459
|
-
const attempts = ensure ? 1 :
|
|
2528
|
+
const attempts = ensure ? 1 : 1 / 0.62
|
|
2460
2529
|
const dev = ensure ? upg.consume_development_max : upg.consume_development_min * attempts
|
|
2461
2530
|
out.screws += screws
|
|
2462
2531
|
out.dev += dev
|
|
@@ -2732,8 +2801,8 @@ function PlanningPage({ rows, inventoryByEquip, useItemCounts, selection, onTogg
|
|
|
2732
2801
|
React.createElement(
|
|
2733
2802
|
"div",
|
|
2734
2803
|
{ className: "kr2-plan-target-group" },
|
|
2735
|
-
React.createElement("button", { type: "button", className: "kr2-plan-target-btn" + (!p.evoUpgradeId && p.target !== "max" ? " kr2-plan-target-active" : ""), onClick: () => onTarget(p.row.id, "6") }, "+6"),
|
|
2736
|
-
React.createElement("button", { type: "button", className: "kr2-plan-target-btn" + (!p.evoUpgradeId && p.target === "max" ? " kr2-plan-target-active" : ""), onClick: () => onTarget(p.row.id, "max") }, "max"),
|
|
2804
|
+
React.createElement("button", { type: "button", disabled: p.row.improveable === false, className: "kr2-plan-target-btn" + (!p.evoUpgradeId && p.target !== "max" ? " kr2-plan-target-active" : ""), onClick: () => onTarget(p.row.id, "6") }, "+6"),
|
|
2805
|
+
React.createElement("button", { type: "button", disabled: p.row.improveable === false, className: "kr2-plan-target-btn" + (!p.evoUpgradeId && p.target === "max" ? " kr2-plan-target-active" : ""), onClick: () => onTarget(p.row.id, "max") }, "max"),
|
|
2737
2806
|
React.createElement(EvolutionButton, { rowId: p.row.id, branches: p.row.upgrades || [], value: p.evoUpgradeId, onSelect: onEvo })
|
|
2738
2807
|
)
|
|
2739
2808
|
),
|
|
@@ -2847,7 +2916,7 @@ class StrongPage extends React.Component {
|
|
|
2847
2916
|
? Object.assign({}, row, { id: row.id + ":evo:" + evoUpgrade.upgrade_id, name: evoUpgrade.targetName, category: evoUpgrade.targetCategory || row.category })
|
|
2848
2917
|
: row
|
|
2849
2918
|
const targetEquipId = evoUpgrade ? String(evoUpgrade.upgrade_id) : row.id
|
|
2850
|
-
const targetLevelValue = evoUpgrade ? 0 : (sel.target === "max" ? 10 : 6)
|
|
2919
|
+
const targetLevelValue = evoUpgrade ? 0 : (row.improveable === false ? 0 : (sel.target === "max" ? 10 : 6))
|
|
2851
2920
|
const bucket = demandMap[targetEquipId] || (demandMap[targetEquipId] = { equipId: targetEquipId, displayRow, demands: {} })
|
|
2852
2921
|
bucket.demands[String(targetLevelValue)] = (bucket.demands[String(targetLevelValue)] || 0) + qty
|
|
2853
2922
|
}
|
|
@@ -2979,6 +3048,7 @@ class LevelOneTable extends React.Component {
|
|
|
2979
3048
|
|
|
2980
3049
|
render() {
|
|
2981
3050
|
const phase = this.props.phase
|
|
3051
|
+
const kcDevData = this.props.kcDevData
|
|
2982
3052
|
if (!phase) {
|
|
2983
3053
|
return React.createElement(
|
|
2984
3054
|
"div",
|
|
@@ -2989,6 +3059,7 @@ class LevelOneTable extends React.Component {
|
|
|
2989
3059
|
const normal = phase.consume_improvement_min
|
|
2990
3060
|
const materials = phase.materials || []
|
|
2991
3061
|
const hasMaterials = materials.some((item) => item && (item.item_name || item.item_material_key || item.item_equipment_id != null))
|
|
3062
|
+
|
|
2992
3063
|
const rows = []
|
|
2993
3064
|
LEVEL_ONE_ROWS.forEach((rate) => {
|
|
2994
3065
|
const key = rate.range
|
|
@@ -3008,6 +3079,7 @@ class LevelOneTable extends React.Component {
|
|
|
3008
3079
|
"div",
|
|
3009
3080
|
{ className: "kr2-material-cell" },
|
|
3010
3081
|
React.createElement(RateCell, { range: "素材详情", open: !!this.state.open[key], onToggle: () => this.toggle(key) }),
|
|
3082
|
+
|
|
3011
3083
|
!!this.state.open[key]
|
|
3012
3084
|
? React.createElement(MaterialDetail, { materials, onMaterialClick: this.props.onMaterialClick, inventoryByEquip: this.props.inventoryByEquip, useItemCounts: this.props.useItemCounts, onInventoryClick: this.props.onInventoryClick })
|
|
3013
3085
|
: null
|
|
@@ -3050,6 +3122,7 @@ class LevelTwoTable extends React.Component {
|
|
|
3050
3122
|
const phase0 = this.props.phase0
|
|
3051
3123
|
const phase1 = this.props.phase1
|
|
3052
3124
|
const upgrades = this.props.upgrades || null
|
|
3125
|
+
const kcDevData = this.props.kcDevData
|
|
3053
3126
|
const rows = []
|
|
3054
3127
|
const pushRateRow = (step, range, label, key, p, subText, evolTarget, maxBlue) => {
|
|
3055
3128
|
const normal = step ? step.consume_improvement_min : null
|
|
@@ -3057,6 +3130,7 @@ class LevelTwoTable extends React.Component {
|
|
|
3057
3130
|
const rec = buildRecommendation(normal, certain, p)
|
|
3058
3131
|
const materials = step ? step.materials || [] : []
|
|
3059
3132
|
const hasMaterials = materials.some((item) => item && (item.item_name || item.item_material_key || item.item_equipment_id != null))
|
|
3133
|
+
|
|
3060
3134
|
const rangeNode = maxBlue
|
|
3061
3135
|
? React.createElement("span", null, "★9→", React.createElement("span", { className: "kr2-level-max-blue" }, "max"))
|
|
3062
3136
|
: range
|
|
@@ -3093,6 +3167,7 @@ class LevelTwoTable extends React.Component {
|
|
|
3093
3167
|
"div",
|
|
3094
3168
|
{ className: "kr2-material-cell" },
|
|
3095
3169
|
React.createElement(RateCell, { range: rec.text, open: !!this.state.open[key], onToggle: () => this.toggle(key), tone: rec.tone }),
|
|
3170
|
+
|
|
3096
3171
|
!!this.state.open[key]
|
|
3097
3172
|
? React.createElement(MaterialDetail, { materials, onMaterialClick: this.props.onMaterialClick, inventoryByEquip: this.props.inventoryByEquip, useItemCounts: this.props.useItemCounts, onInventoryClick: this.props.onInventoryClick })
|
|
3098
3173
|
: null
|
|
@@ -3171,13 +3246,13 @@ class LevelSection extends React.Component {
|
|
|
3171
3246
|
}
|
|
3172
3247
|
}
|
|
3173
3248
|
|
|
3174
|
-
function EquipmentRow({ row, expanded, onToggle, onMaterialClick, inventoryByEquip, useItemCounts, onInventoryClick, isFavorite, onFavoriteClick, secretaryText }) {
|
|
3249
|
+
function EquipmentRow({ row, expanded, onToggle, onMaterialClick, inventoryByEquip, useItemCounts, onInventoryClick, isFavorite, onFavoriteClick, secretaryText, kcDevData }) {
|
|
3175
3250
|
return React.createElement(
|
|
3176
3251
|
"div",
|
|
3177
3252
|
null,
|
|
3178
3253
|
React.createElement(
|
|
3179
3254
|
"div",
|
|
3180
|
-
{ className: "kr2-row", onClick: onToggle },
|
|
3255
|
+
{ className: "kr2-row" + (row.improveable === false ? " kr2-row-not-improveable" : ""), onClick: row.improveable === false ? null : onToggle },
|
|
3181
3256
|
React.createElement(
|
|
3182
3257
|
"button",
|
|
3183
3258
|
{ className: "kr2-fav-btn" + (isFavorite ? " kr2-fav-active" : ""), onClick: (e) => { e.stopPropagation(); onFavoriteClick && onFavoriteClick(row.id) }, title: isFavorite ? "取消收藏" : "收藏" },
|
|
@@ -3187,33 +3262,35 @@ function EquipmentRow({ row, expanded, onToggle, onMaterialClick, inventoryByEqu
|
|
|
3187
3262
|
"span",
|
|
3188
3263
|
{ className: "kr2-expand" },
|
|
3189
3264
|
React.createElement(SlotitemIcon, { slotitemId: row.icon, className: "kr2-icon" }),
|
|
3190
|
-
React.createElement("span", { className: "kr2-arrow" }, expanded ? "▼" : "▶")
|
|
3265
|
+
React.createElement("span", { className: "kr2-arrow" }, row.improveable === false ? "" : expanded ? "▼" : "▶")
|
|
3191
3266
|
),
|
|
3192
3267
|
React.createElement("span", { className: "kr2-name" }, row.name),
|
|
3193
|
-
React.createElement("span", { className: "kr2-secretary" }, secretaryText || "-"),
|
|
3268
|
+
React.createElement("span", { className: "kr2-secretary" }, row.improveable === false ? "" : (secretaryText || "-")),
|
|
3194
3269
|
React.createElement(
|
|
3195
3270
|
"span",
|
|
3196
3271
|
{ className: "kr2-meta" },
|
|
3197
|
-
row.days && row.days.length >= 7 ? "每日可改修" : (row.days || []).map((d) => WEEKDAY_LABELS[d] || d).join("·")
|
|
3272
|
+
row.improveable === false ? "改修未开放" : (row.days && row.days.length >= 7 ? "每日可改修" : (row.days || []).map((d) => WEEKDAY_LABELS[d] || d).join("·"))
|
|
3198
3273
|
),
|
|
3199
|
-
|
|
3200
|
-
"
|
|
3201
|
-
|
|
3202
|
-
|
|
3203
|
-
|
|
3204
|
-
|
|
3205
|
-
|
|
3206
|
-
|
|
3207
|
-
|
|
3208
|
-
|
|
3209
|
-
|
|
3210
|
-
|
|
3211
|
-
|
|
3212
|
-
|
|
3213
|
-
|
|
3214
|
-
|
|
3274
|
+
row.improveable === false
|
|
3275
|
+
? React.createElement("div", { className: "kr2-reco kr2-reco-empty" }, "")
|
|
3276
|
+
: React.createElement(
|
|
3277
|
+
"span",
|
|
3278
|
+
{ className: "kr2-reco" },
|
|
3279
|
+
React.createElement(
|
|
3280
|
+
"span",
|
|
3281
|
+
{ className: "kr2-reco-line" },
|
|
3282
|
+
React.createElement("span", { className: "kr2-reco-label" }, "推荐星级"),
|
|
3283
|
+
React.createElement("span", { className: "kr2-stars kr2-stars-priority" }, row.recommend && Number(row.recommend.priority) > 0 ? starText(row.recommend.priority) : "")
|
|
3284
|
+
),
|
|
3285
|
+
React.createElement(
|
|
3286
|
+
"span",
|
|
3287
|
+
{ className: "kr2-reco-line" },
|
|
3288
|
+
React.createElement("span", { className: "kr2-reco-label" }, "活动强度"),
|
|
3289
|
+
React.createElement("span", { className: "kr2-stars kr2-stars-activity" }, row.recommend && Number(row.recommend.activity) > 0 ? starText(row.recommend.activity) : "")
|
|
3290
|
+
)
|
|
3291
|
+
)
|
|
3215
3292
|
),
|
|
3216
|
-
expanded
|
|
3293
|
+
row.improveable !== false && expanded
|
|
3217
3294
|
? React.createElement(
|
|
3218
3295
|
"div",
|
|
3219
3296
|
{ className: "kr2-detail" },
|
|
@@ -3223,7 +3300,7 @@ function EquipmentRow({ row, expanded, onToggle, onMaterialClick, inventoryByEqu
|
|
|
3223
3300
|
React.createElement(
|
|
3224
3301
|
LevelSection,
|
|
3225
3302
|
{ title: "0→5", defaultOpen: false, resourceText: "成功率100% · 改修资材 " + (row.phase0 ? row.phase0.consume_improvement_min : "--") },
|
|
3226
|
-
React.createElement(LevelOneTable, { phase: row.phase0, onMaterialClick, inventoryByEquip, useItemCounts, onInventoryClick })
|
|
3303
|
+
React.createElement(LevelOneTable, { phase: row.phase0, onMaterialClick, inventoryByEquip, useItemCounts, onInventoryClick, kcDevData })
|
|
3227
3304
|
)
|
|
3228
3305
|
),
|
|
3229
3306
|
React.createElement(
|
|
@@ -3232,7 +3309,7 @@ function EquipmentRow({ row, expanded, onToggle, onMaterialClick, inventoryByEqu
|
|
|
3232
3309
|
React.createElement(
|
|
3233
3310
|
LevelSection,
|
|
3234
3311
|
{ title: "6→max", defaultOpen: true, resourceText: "成功率 95 / 90 / 82 / 77 / 67 / 62 %" },
|
|
3235
|
-
React.createElement(LevelTwoTable, { phase0: row.phase0, phase1: row.phase1, upgrades: row.upgrades, onMaterialClick, inventoryByEquip, useItemCounts, onInventoryClick })
|
|
3312
|
+
React.createElement(LevelTwoTable, { phase0: row.phase0, phase1: row.phase1, upgrades: row.upgrades, onMaterialClick, inventoryByEquip, useItemCounts, onInventoryClick, kcDevData })
|
|
3236
3313
|
)
|
|
3237
3314
|
)
|
|
3238
3315
|
)
|
|
@@ -3481,6 +3558,8 @@ class KoushuRateApp extends React.Component {
|
|
|
3481
3558
|
favoritesOnly: readFavoritesOnly(),
|
|
3482
3559
|
starSort: readUiState().starSort || null,
|
|
3483
3560
|
activeTab: "list",
|
|
3561
|
+
improveableOpen: true,
|
|
3562
|
+
nonImproveableOpen: false,
|
|
3484
3563
|
planSelection: readPlanSelection(),
|
|
3485
3564
|
includeDevExpected: readPlanIncludeDev(),
|
|
3486
3565
|
}
|
|
@@ -3759,7 +3838,7 @@ class KoushuRateApp extends React.Component {
|
|
|
3759
3838
|
const favoritesOnly = !!this.state.favoritesOnly
|
|
3760
3839
|
let rows = this.state.rows.filter((row) => {
|
|
3761
3840
|
if (favoritesOnly && !this.state.favorites[row.id]) return false
|
|
3762
|
-
if (day !== ALL_DAYS_KEY && (row.days || []).indexOf(day) < 0) return false
|
|
3841
|
+
if (row.improveable !== false && day !== ALL_DAYS_KEY && (row.days || []).indexOf(day) < 0) return false
|
|
3763
3842
|
if (category !== "all" && row.category !== category) return false
|
|
3764
3843
|
return true
|
|
3765
3844
|
})
|
|
@@ -3782,6 +3861,23 @@ class KoushuRateApp extends React.Component {
|
|
|
3782
3861
|
})
|
|
3783
3862
|
.map((item) => item.row)
|
|
3784
3863
|
}
|
|
3864
|
+
const improveableRows = rows.filter((row) => row.improveable !== false)
|
|
3865
|
+
const notImproveableRows = rows.filter((row) => row.improveable === false)
|
|
3866
|
+
const renderEquipmentRow = (row) =>
|
|
3867
|
+
React.createElement(EquipmentRow, {
|
|
3868
|
+
key: row.id,
|
|
3869
|
+
row,
|
|
3870
|
+
expanded: !!this.state.expanded[row.id],
|
|
3871
|
+
onToggle: () => this.toggle(row.id),
|
|
3872
|
+
onMaterialClick: this.openKcDevPopup,
|
|
3873
|
+
inventoryByEquip,
|
|
3874
|
+
useItemCounts,
|
|
3875
|
+
onInventoryClick: this.openInventoryPopup,
|
|
3876
|
+
isFavorite: !!this.state.favorites[row.id],
|
|
3877
|
+
onFavoriteClick: this.toggleFavorite,
|
|
3878
|
+
secretaryText: secretaryText(row.secretaries, day),
|
|
3879
|
+
kcDevData: this.state.kcDevData,
|
|
3880
|
+
})
|
|
3785
3881
|
|
|
3786
3882
|
return React.createElement(
|
|
3787
3883
|
"div",
|
|
@@ -3931,21 +4027,36 @@ class KoushuRateApp extends React.Component {
|
|
|
3931
4027
|
{ className: "kr2-list", style: this.state.activeTab === "plan" || this.state.activeTab === "strong" ? { display: "none" } : null },
|
|
3932
4028
|
rows.length === 0
|
|
3933
4029
|
? React.createElement("div", { className: "kr2-empty" }, favoritesOnly ? "还没有收藏装备" : "没有匹配的装备")
|
|
3934
|
-
:
|
|
3935
|
-
React.createElement(
|
|
3936
|
-
|
|
3937
|
-
|
|
3938
|
-
|
|
3939
|
-
|
|
3940
|
-
|
|
3941
|
-
|
|
3942
|
-
|
|
3943
|
-
|
|
3944
|
-
|
|
3945
|
-
|
|
3946
|
-
|
|
3947
|
-
|
|
3948
|
-
|
|
4030
|
+
: [
|
|
4031
|
+
React.createElement(
|
|
4032
|
+
"div",
|
|
4033
|
+
{ key: "improveable-group", className: "kr2-improveable-group" },
|
|
4034
|
+
React.createElement(
|
|
4035
|
+
"button",
|
|
4036
|
+
{ type: "button", className: "kr2-collapse-toggle", onClick: () => this.setState((prev) => ({ improveableOpen: !prev.improveableOpen })) },
|
|
4037
|
+
this.state.improveableOpen ? "▼ " : "▶ ",
|
|
4038
|
+
"可改修装备 (",
|
|
4039
|
+
String(improveableRows.length),
|
|
4040
|
+
")"
|
|
4041
|
+
),
|
|
4042
|
+
this.state.improveableOpen ? improveableRows.map((row) => renderEquipmentRow(row)) : null
|
|
4043
|
+
),
|
|
4044
|
+
notImproveableRows.length > 0
|
|
4045
|
+
? React.createElement(
|
|
4046
|
+
"div",
|
|
4047
|
+
{ key: "not-improveable-group", className: "kr2-not-improveable-group" },
|
|
4048
|
+
React.createElement(
|
|
4049
|
+
"button",
|
|
4050
|
+
{ type: "button", className: "kr2-collapse-toggle", onClick: () => this.setState((prev) => ({ nonImproveableOpen: !prev.nonImproveableOpen })) },
|
|
4051
|
+
this.state.nonImproveableOpen ? "▼ " : "▶ ",
|
|
4052
|
+
"不可改修装备 (",
|
|
4053
|
+
String(notImproveableRows.length),
|
|
4054
|
+
")"
|
|
4055
|
+
),
|
|
4056
|
+
this.state.nonImproveableOpen ? notImproveableRows.map((row) => renderEquipmentRow(row)) : null
|
|
4057
|
+
)
|
|
4058
|
+
: null,
|
|
4059
|
+
]
|
|
3949
4060
|
),
|
|
3950
4061
|
this.state.activeTab === "plan"
|
|
3951
4062
|
? React.createElement(PlanningPage, {
|