diff --git a/gulpfile.js b/gulpfile.js index 8734af0cc..9d333d296 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -26,11 +26,20 @@ gulp.task('getVersion', done => { }) }) -gulp.task('build', gulp.series('getVersion', () => build(poiVersion))) - -gulp.task('build_plugins', gulp.series('getVersion', () => installPlugins(poiVersion))) - -gulp.task('pack_win_release', gulp.series('getVersion', () => packWinRelease(poiVersion))) +gulp.task( + 'build', + gulp.series('getVersion', () => build(poiVersion)), +) + +gulp.task( + 'build_plugins', + gulp.series('getVersion', () => installPlugins(poiVersion)), +) + +gulp.task( + 'pack_win_release', + gulp.series('getVersion', () => packWinRelease(poiVersion)), +) gulp.task('deploy_nightlies', () => deployNightlies()) diff --git a/views/components/info/map-reminder.es b/views/components/info/map-reminder.es index 4f592097f..67f97e3b7 100644 --- a/views/components/info/map-reminder.es +++ b/views/components/info/map-reminder.es @@ -145,7 +145,10 @@ const MapRoutes = connect(state => ({ const locHistory = spotHistory.map(i => mapspots[get(maproutes, `${i}.1`)] || [-1, -1]) const lineHistory = histLen ? zip(locHistory.slice(0, histLen - 1), locHistory.slice(1)) - : [[-1, -1], [-1, -1]] + : [ + [-1, -1], + [-1, -1], + ] const SCALE = 1 / 6 return ( diff --git a/views/components/main/parts/admiral-panel.es b/views/components/main/parts/admiral-panel.es index 68de81fc9..97750c0b0 100644 --- a/views/components/main/parts/admiral-panel.es +++ b/views/components/main/parts/admiral-panel.es @@ -371,26 +371,20 @@ const CountdownContent = ({ moments }) => ( ) -const admiralInfoSelector = createSelector( - [basicSelector], - basic => ({ - level: get(basic, 'api_level', -1), - nickname: get(basic, 'api_nickname', ''), - rank: get(basic, 'api_rank', 0), - maxShip: get(basic, 'api_max_chara', 0), - maxSlotitem: get(basic, 'api_max_slotitem', 0), - }), -) +const admiralInfoSelector = createSelector([basicSelector], basic => ({ + level: get(basic, 'api_level', -1), + nickname: get(basic, 'api_nickname', ''), + rank: get(basic, 'api_rank', 0), + maxShip: get(basic, 'api_max_chara', 0), + maxSlotitem: get(basic, 'api_max_slotitem', 0), +})) -const numCheckSelector = createSelector( - [configSelector], - config => ({ - shipNumCheck: get(config, 'poi.mapStartCheck.ship.enable', false), - minShipNum: get(config, 'poi.mapStartCheck.ship.minFreeSlots', 4), - slotNumCheck: get(config, 'poi.mapStartCheck.item.enable', false), - minSlotNum: get(config, 'poi.mapStartCheck.item.minFreeSlots', 10), - }), -) +const numCheckSelector = createSelector([configSelector], config => ({ + shipNumCheck: get(config, 'poi.mapStartCheck.ship.enable', false), + minShipNum: get(config, 'poi.mapStartCheck.ship.minFreeSlots', 4), + slotNumCheck: get(config, 'poi.mapStartCheck.item.enable', false), + minSlotNum: get(config, 'poi.mapStartCheck.item.minFreeSlots', 10), +})) export const AdmiralPanel = withNamespaces(['main'])( connect(state => ({ diff --git a/views/components/main/parts/expedition-panel.es b/views/components/main/parts/expedition-panel.es index 091be383e..e2693f1df 100644 --- a/views/components/main/parts/expedition-panel.es +++ b/views/components/main/parts/expedition-panel.es @@ -45,18 +45,11 @@ export const ExpeditionName = styled.span` `} ` -const fleetsExpeditionSelector = createSelector( - fleetsSelector, - fleets => map(fleets, 'api_mission'), -) -const fleetsNamesSelector = createSelector( - fleetsSelector, - fleets => map(fleets, 'api_name'), -) -const fleetInBattleSelector = createSelector( - fleetInBattleSelectorFactory, - inBattle => inBattle, +const fleetsExpeditionSelector = createSelector(fleetsSelector, fleets => + map(fleets, 'api_mission'), ) +const fleetsNamesSelector = createSelector(fleetsSelector, fleets => map(fleets, 'api_name')) +const fleetInBattleSelector = createSelector(fleetInBattleSelectorFactory, inBattle => inBattle) const FleetStatus = withNamespaces(['main'])( connect((state, { fleetId }) => { diff --git a/views/components/main/parts/mini-ship/index.es b/views/components/main/parts/mini-ship/index.es index a7657cb8a..cac98ad2b 100644 --- a/views/components/main/parts/mini-ship/index.es +++ b/views/components/main/parts/mini-ship/index.es @@ -38,12 +38,9 @@ const CardWrapper = styled(CardWrapperL)` ` const shipViewSwitchButtonDataSelectorFactory = memoize(fleetId => - createSelector( - [fleetStateSelectorFactory(fleetId)], - fleetState => ({ - fleetState, - }), - ), + createSelector([fleetStateSelectorFactory(fleetId)], fleetState => ({ + fleetState, + })), ) const ShipViewSwitchButton = connect((state, { fleetId }) => diff --git a/views/components/settings/about/app-metrics.es b/views/components/settings/about/app-metrics.es index c1b96fd48..6c5a5f5fe 100644 --- a/views/components/settings/about/app-metrics.es +++ b/views/components/settings/about/app-metrics.es @@ -33,7 +33,10 @@ export class AppMetrics extends PureComponent { // prop => (total[prop] = round(sumBy(metrics, metric => metric.memory[prop]) / 1000, 2)), // ) - total.percentCPUUsage = round(sumBy(metrics, metric => metric.cpu.percentCPUUsage), 2) + total.percentCPUUsage = round( + sumBy(metrics, metric => metric.cpu.percentCPUUsage), + 2, + ) this.getAllWindows().map(win => { const pid = win.webContents.getOSProcessId() diff --git a/views/components/settings/main/screenshot-config.es b/views/components/settings/main/screenshot-config.es index ba59e69e2..a7a67fbbd 100644 --- a/views/components/settings/main/screenshot-config.es +++ b/views/components/settings/main/screenshot-config.es @@ -19,7 +19,10 @@ export const ScreenshotConfig = withNamespaces(['setting'])(({ t }) => ( label={t('setting:Screenshot Format')} configName="poi.misc.screenshot.format" defaultValue="png" - availableVal={[{ name: 'PNG', value: 'png' }, { name: 'JPEG', value: 'jpg' }]} + availableVal={[ + { name: 'PNG', value: 'png' }, + { name: 'JPEG', value: 'jpg' }, + ]} /> diff --git a/views/components/ship-parts/fleet-stat.es b/views/components/ship-parts/fleet-stat.es index b1d2ba7b0..0e0f82f29 100644 --- a/views/components/ship-parts/fleet-stat.es +++ b/views/components/ship-parts/fleet-stat.es @@ -132,16 +132,12 @@ class CountdownLabel extends Component { } const tykuSelectorFactory = memoize(fleetId => - createSelector( - fleetShipsEquipDataWithEscapeSelectorFactory(fleetId), - (equipsData = []) => getTyku(equipsData), + createSelector(fleetShipsEquipDataWithEscapeSelectorFactory(fleetId), (equipsData = []) => + getTyku(equipsData), ), ) -const admiralLevelSelector = createSelector( - basicSelector, - basic => basic.api_level, -) +const admiralLevelSelector = createSelector(basicSelector, basic => basic.api_level) const sakuSelectorFactory = memoize(fleetId => createSelector( @@ -161,9 +157,8 @@ const sakuSelectorFactory = memoize(fleetId => ) const speedSelectorFactory = memoize(fleetId => - createSelector( - [fleetShipsDataWithEscapeSelectorFactory(fleetId)], - (shipsData = []) => getFleetSpeed(shipsData), + createSelector([fleetShipsDataWithEscapeSelectorFactory(fleetId)], (shipsData = []) => + getFleetSpeed(shipsData), ), ) diff --git a/views/components/ship/aaci-indicator.es b/views/components/ship/aaci-indicator.es index 077fb0f23..2ca04f3d8 100644 --- a/views/components/ship/aaci-indicator.es +++ b/views/components/ship/aaci-indicator.es @@ -47,13 +47,10 @@ const AACISelectorFactory = memoize(shipId => ) const maxAACIShotdownSelectorFactory = memoize(shipId => - createSelector( - [shipDataSelectorFactory(shipId)], - ([_ship = {}, $ship = {}] = []) => { - const AACIs = getShipAllAACIs({ ...$ship, ..._ship }) - return Math.max(...AACIs.map(id => AACITable[id].fixed || 0)) - }, - ), + createSelector([shipDataSelectorFactory(shipId)], ([_ship = {}, $ship = {}] = []) => { + const AACIs = getShipAllAACIs({ ...$ship, ..._ship }) + return Math.max(...AACIs.map(id => AACITable[id].fixed || 0)) + }), ) export const AACIIndicator = withNamespaces(['main'])( diff --git a/views/components/ship/index.es b/views/components/ship/index.es index 2b3099977..f0ba33ca8 100644 --- a/views/components/ship/index.es +++ b/views/components/ship/index.es @@ -57,12 +57,9 @@ const ShipViewSwitchButton = connect((state, { fleetId }) => )) const fleetShipViewDataSelectorFactory = memoize(fleetId => - createSelector( - [fleetShipsIdSelectorFactory(fleetId)], - shipsId => ({ - shipsId, - }), - ), + createSelector([fleetShipsIdSelectorFactory(fleetId)], shipsId => ({ + shipsId, + })), ) const FleetShipView = connect((state, { fleetId }) => diff --git a/views/components/ship/oasw-indicator.es b/views/components/ship/oasw-indicator.es index 5e2928961..cc5700c43 100644 --- a/views/components/ship/oasw-indicator.es +++ b/views/components/ship/oasw-indicator.es @@ -13,10 +13,7 @@ import { isOASWWith } from 'views/utils/oasw' import { withNamespaces } from 'react-i18next' import { ShipLabel } from 'views/components/ship-parts/styled-components' -const isOASWFuncSelector = createSelector( - allCVEIdsSelector, - allCVEIds => isOASWWith(allCVEIds), -) +const isOASWFuncSelector = createSelector(allCVEIdsSelector, allCVEIds => isOASWWith(allCVEIds)) const OASWSelectorFactory = memoize(shipId => createSelector( diff --git a/views/env-parts/getter.es b/views/env-parts/getter.es index 927483a1a..381463918 100644 --- a/views/env-parts/getter.es +++ b/views/env-parts/getter.es @@ -14,10 +14,7 @@ function object2Array(obj) { } function object2ArraySelectorFactory(path) { const pathSelector = state => get(state, path) - return createSelector( - pathSelector, - obj => object2Array(obj), - ) + return createSelector(pathSelector, obj => object2Array(obj)) } // User config diff --git a/views/env-parts/i18next.es b/views/env-parts/i18next.es index f3b704799..64c943819 100644 --- a/views/env-parts/i18next.es +++ b/views/env-parts/i18next.es @@ -41,13 +41,16 @@ const i18nFiles = glob.sync(path.join(ROOT, 'i18n', '*')) const mainPoiNs = i18nFiles.map(i => path.basename(i)) const mainPoiRes = {} -each(LOCALES.map(lng => lng.locale), locale => { - mainPoiRes[locale] = {} - each(i18nFiles, i18nFile => { - const namespace = path.basename(i18nFile) - mainPoiRes[locale][namespace] = readI18nResources(path.join(i18nFile, `${locale}.json`)) - }) -}) +each( + LOCALES.map(lng => lng.locale), + locale => { + mainPoiRes[locale] = {} + each(i18nFiles, i18nFile => { + const namespace = path.basename(i18nFile) + mainPoiRes[locale][namespace] = readI18nResources(path.join(i18nFile, `${locale}.json`)) + }) + }, +) window.LOCALES = LOCALES window.language = window.config.get('poi.misc.language', navigator.language) diff --git a/views/redux/info/equips.es b/views/redux/info/equips.es index ac33e8cec..32949844d 100644 --- a/views/redux/info/equips.es +++ b/views/redux/info/equips.es @@ -23,7 +23,10 @@ export function reducer(state = {}, { type, postBody, body }, store) { } case '@@Response/kcsapi/api_req_kousyou/createitem': if (body.api_create_flag == 1) { - const items = keyBy(filter(body.api_get_items, item => item?.api_id > 0), 'api_id') + const items = keyBy( + filter(body.api_get_items, item => item?.api_id > 0), + 'api_id', + ) return { ...state, ...items, diff --git a/views/services/plugin-manager/index.es b/views/services/plugin-manager/index.es index e667412cd..ec39c68af 100644 --- a/views/services/plugin-manager/index.es +++ b/views/services/plugin-manager/index.es @@ -264,11 +264,13 @@ class PluginManager extends EventEmitter { async getOutdatedPlugins(isNotif) { const plugins = this.getInstalledPlugins() - const outdatedList = (await Promise.all( - plugins.map(plugin => - this.getPluginOutdateInfo(plugin).catch(err => console.error(err.stack)), - ), - )).filter(Boolean) + const outdatedList = ( + await Promise.all( + plugins.map(plugin => + this.getPluginOutdateInfo(plugin).catch(err => console.error(err.stack)), + ), + ) + ).filter(Boolean) if (isNotif && outdatedList.length > 0) { const content = `${map(outdatedList, 'name').join(' / ')} ${i18next.t( 'setting:PluginUpdateMsg', diff --git a/views/services/plugin-manager/utils.es b/views/services/plugin-manager/utils.es index 9a12e154e..32373177c 100644 --- a/views/services/plugin-manager/utils.es +++ b/views/services/plugin-manager/utils.es @@ -143,16 +143,19 @@ export function updateI18n(plugin) { } if (i18nFile != null) { const namespace = plugin.id - each(window.LOCALES.map(lng => lng.locale), language => { - i18next.addGlobalI18n(namespace) - i18next.addResourceBundleDebounce( - language, - namespace, - readI18nResources(join(i18nFile, `${language}.json`)), - true, - true, - ) - }) + each( + window.LOCALES.map(lng => lng.locale), + language => { + i18next.addGlobalI18n(namespace) + i18next.addResourceBundleDebounce( + language, + namespace, + readI18nResources(join(i18nFile, `${language}.json`)), + true, + true, + ) + }, + ) plugin = { ...plugin, name: i18next.t(`${namespace}:${plugin.name}`), @@ -465,9 +468,11 @@ export function notifyFailed(state, npmConfig) { } export async function repairDep(brokenList, npmConfig) { - const depList = (await new Promise(res => { - glob(path.join(npmConfig.prefix, 'node_modules', '*'), (err, matches) => res(matches)) - })).filter(p => !p.includes('poi-plugin')) + const depList = ( + await new Promise(res => { + glob(path.join(npmConfig.prefix, 'node_modules', '*'), (err, matches) => res(matches)) + }) + ).filter(p => !p.includes('poi-plugin')) depList.forEach(p => { try { require(p) diff --git a/views/utils/aaci.es b/views/utils/aaci.es index 74f7f86cb..0349fa2a0 100644 --- a/views/utils/aaci.es +++ b/views/utils/aaci.es @@ -592,7 +592,10 @@ export const getShipAACIs = (ship, equips) => { export const getFleetAvailableAACIs = (ships, equips) => { const aaciSet = {} ships.forEach((ship, index) => { - getShipAACIs(ship, equips[index].map(([equip, onslot]) => equip)).forEach(id => { + getShipAACIs( + ship, + equips[index].map(([equip, onslot]) => equip), + ).forEach(id => { aaciSet[id] = true }) }) diff --git a/views/utils/oasw.es b/views/utils/oasw.es index 7564b65d5..d8ed6efd0 100644 --- a/views/utils/oasw.es +++ b/views/utils/oasw.es @@ -80,7 +80,10 @@ export const isOASWWith = allCVEIds => // 必要対潜60 + ソナー _.overEvery(taisenAbove(60), overEquips(hasSome(isSonar))), // 必要対潜値75 + 装備のみの対潜値が合計4以上 - _.overEvery(taisenAbove(75), overEquips(equips => _.sum(equips.map(equipTais)) >= 4)), + _.overEvery( + taisenAbove(75), + overEquips(equips => _.sum(equips.map(equipTais)) >= 4), + ), ), ), _.overEvery( diff --git a/views/utils/selectors.es b/views/utils/selectors.es index 091aeffcf..b70277ef0 100644 --- a/views/utils/selectors.es +++ b/views/utils/selectors.es @@ -94,21 +94,17 @@ export const fcdShipTagColorSelector = state => get(state.fcd, 'shipTag.color', export const extensionSelectorFactory = key => state => get(state.ext, [key, '_']) || {} -export const configLayoutSelector = createSelector( - configSelector, - config => get(config, 'poi.layout.mode', 'horizontal'), +export const configLayoutSelector = createSelector(configSelector, config => + get(config, 'poi.layout.mode', 'horizontal'), ) -export const configDoubleTabbedSelector = createSelector( - configSelector, - config => get(config, 'poi.tabarea.double', false), +export const configDoubleTabbedSelector = createSelector(configSelector, config => + get(config, 'poi.tabarea.double', false), ) -export const configZoomLevelSelector = createSelector( - configSelector, - config => get(config, 'poi.appearance.zoom', 1), +export const configZoomLevelSelector = createSelector(configSelector, config => + get(config, 'poi.appearance.zoom', 1), ) -export const configReverseLayoutSelector = createSelector( - configSelector, - config => get(config, 'poi.layout.reverse', false), +export const configReverseLayoutSelector = createSelector(configSelector, config => + get(config, 'poi.layout.reverse', false), ) export const condTickSelector = state => state.timers.cond.tick @@ -116,13 +112,13 @@ export const condTickSelector = state => state.timers.cond.tick // Returns [shipId for every ship in repair] // Returns undefined if uninitialized export const inRepairShipsIdSelector = arrayResultWrapper( - createSelector( - repairsSelector, - repairs => { - if (!repairs) return - return map(repairs.filter(repair => repair.api_state == 1), 'api_ship_id') - }, - ), + createSelector(repairsSelector, repairs => { + if (!repairs) return + return map( + repairs.filter(repair => repair.api_state == 1), + 'api_ship_id', + ) + }), ) export const fleetSelectorFactory = memoize(fleetId => state => (state.info.fleets || [])[fleetId]) @@ -134,39 +130,28 @@ export const landbaseSelectorFactory = memoize(landbaseId => state => // Returns undefined if fleet not found export const fleetShipsIdSelectorFactory = memoize(fleetId => arrayResultWrapper( - createSelector( - fleetSelectorFactory(fleetId), - fleet => { - if (fleet == null) return - return fleet.api_ship.filter(n => n != -1) - }, - ), + createSelector(fleetSelectorFactory(fleetId), fleet => { + if (fleet == null) return + return fleet.api_ship.filter(n => n != -1) + }), ), ) export const fleetSlotCountSelectorFactory = memoize(fleetId => - createSelector( - [fleetSelectorFactory(fleetId)], - fleet => get(fleet, 'api_ship.length', 0), - ), + createSelector([fleetSelectorFactory(fleetId)], fleet => get(fleet, 'api_ship.length', 0)), ) export const fleetInBattleSelectorFactory = memoize(fleetId => - createSelector( - sortieStatusSelector, - sortieStatus => sortieStatus[fleetId], - ), + createSelector(sortieStatusSelector, sortieStatus => sortieStatus[fleetId]), ) export const fleetInExpeditionSelectorFactory = memoize(fleetId => - createSelector( - fleetSelectorFactory(fleetId), - fleet => (typeof fleet === 'object' ? fleet.api_mission[0] : false), + createSelector(fleetSelectorFactory(fleetId), fleet => + typeof fleet === 'object' ? fleet.api_mission[0] : false, ), ) export const fleetNameSelectorFactory = memoize(fleetId => - createSelector( - fleetSelectorFactory(fleetId), - fleet => (typeof fleet === 'object' ? fleet.api_name : ''), + createSelector(fleetSelectorFactory(fleetId), fleet => + typeof fleet === 'object' ? fleet.api_name : '', ), ) export const fleetStateSelectorFactory = memoize(fleetId => @@ -184,9 +169,8 @@ export const fleetStateSelectorFactory = memoize(fleetId => const emptyExpedition = [0, 0, 0, 0] export const fleetExpeditionSelectorFactory = memoize(fleetId => - createSelector( - fleetSelectorFactory(fleetId), - fleet => (fleet ? fleet.api_mission : emptyExpedition), + createSelector(fleetSelectorFactory(fleetId), fleet => + fleet ? fleet.api_mission : emptyExpedition, ), ) @@ -194,13 +178,10 @@ export const fleetExpeditionSelectorFactory = memoize(fleetId => // Returns if this ship is in repair // Returns undefined if uninitialized or not in repair export const shipRepairDockSelectorFactory = memoize(shipId => - createSelector( - repairsSelector, - repairs => { - if (repairs == null) return - return repairs.find(({ api_state, api_ship_id }) => api_state == 1 && api_ship_id == shipId) - }, - ), + createSelector(repairsSelector, repairs => { + if (repairs == null) return + return repairs.find(({ api_state, api_ship_id }) => api_state == 1 && api_ship_id == shipId) + }), ) // Selector for all ship ids that in sortie, including the -1 placeholders @@ -225,9 +206,8 @@ export const escapeStatusSelectorFactory = memoize(shipId => // There's a Number type check const shipBaseDataSelectorFactory = memoize(shipId => - createSelector( - [shipsSelector], - ships => (ships && typeof shipId === 'number' && shipId ? ships[shipId] : undefined), + createSelector([shipsSelector], ships => + ships && typeof shipId === 'number' && shipId ? ships[shipId] : undefined, ), ) @@ -238,48 +218,32 @@ const shipBaseDataSelectorFactory = memoize(shipId => // otherwise will always return undefined export const shipDataSelectorFactory = memoize(shipId => arrayResultWrapper( - createSelector( - [shipBaseDataSelectorFactory(shipId), constSelector], - (ship, { $ships }) => - $ships && typeof ship === 'object' && ship ? [ship, $ships[ship.api_ship_id]] : undefined, + createSelector([shipBaseDataSelectorFactory(shipId), constSelector], (ship, { $ships }) => + $ships && typeof ship === 'object' && ship ? [ship, $ships[ship.api_ship_id]] : undefined, ), ), ) const shipSlotnumSelectorFactory = memoize(shipId => - createSelector( - shipBaseDataSelectorFactory(shipId), - ship => (ship ? ship.api_slotnum : 0), - ), + createSelector(shipBaseDataSelectorFactory(shipId), ship => (ship ? ship.api_slotnum : 0)), ) const shipSlotSelectorFactory = memoize(shipId => - createSelector( - shipBaseDataSelectorFactory(shipId), - ship => (ship ? ship.api_slot : undefined), - ), + createSelector(shipBaseDataSelectorFactory(shipId), ship => (ship ? ship.api_slot : undefined)), ) const shipExslotSelectorFactory = memoize(shipId => - createSelector( - shipBaseDataSelectorFactory(shipId), - ship => (ship ? ship.api_slot_ex : -1), - ), + createSelector(shipBaseDataSelectorFactory(shipId), ship => (ship ? ship.api_slot_ex : -1)), ) const shipOnSlotSelectorFactory = memoize(shipId => - createSelector( - shipBaseDataSelectorFactory(shipId), - ship => (ship ? ship.api_onslot : undefined), - ), + createSelector(shipBaseDataSelectorFactory(shipId), ship => (ship ? ship.api_onslot : undefined)), ) const landbaseSlotnumSelectorFactory = memoize(landbaseId => - createSelector( - landbaseSelectorFactory(landbaseId), - landbase => (landbase ? landbase.api_plane_info.length : 0), + createSelector(landbaseSelectorFactory(landbaseId), landbase => + landbase ? landbase.api_plane_info.length : 0, ), ) const landbaseOnSlotSelectorFactory = memoize(landbaseId => - createSelector( - landbaseSelectorFactory(landbaseId), - landbase => (landbase ? landbase.api_plane_info.map(l => l.api_count) : undefined), + createSelector(landbaseSelectorFactory(landbaseId), landbase => + landbase ? landbase.api_plane_info.map(l => l.api_count) : undefined, ), ) // Returns [equipId for each slot on the ship] @@ -296,18 +260,16 @@ const shipEquipsIdSelectorFactory = memoize(shipId => ) const landbaseEquipsIdSelectorFactory = memoize(landbaseId => arrayResultWrapper( - createSelector( - landbaseSelectorFactory(landbaseId), - landbase => (landbase ? landbase.api_plane_info.map(l => l.api_slotid) : []), + createSelector(landbaseSelectorFactory(landbaseId), landbase => + landbase ? landbase.api_plane_info.map(l => l.api_slotid) : [], ), ), ) // There's a Number type check const equipBaseDataSelectorFactory = memoize(equipId => - createSelector( - [equipsSelector], - equips => (equips && typeof equipId === 'number' && equipId ? equips[equipId] : undefined), + createSelector([equipsSelector], equips => + equips && typeof equipId === 'number' && equipId ? equips[equipId] : undefined, ), ) @@ -317,13 +279,10 @@ const equipBaseDataSelectorFactory = memoize(equipId => // otherwise will always return undefined export const equipDataSelectorFactory = memoize(equipId => arrayResultWrapper( - createSelector( - [equipBaseDataSelectorFactory(equipId), constSelector], - (equip, { $equips }) => { - if (!equip || !$equips || !$equips[equip.api_slotitem_id]) return - return [equip, $equips[equip.api_slotitem_id]] - }, - ), + createSelector([equipBaseDataSelectorFactory(equipId), constSelector], (equip, { $equips }) => { + if (!equip || !$equips || !$equips[equip.api_slotitem_id]) return + return [equip, $equips[equip.api_slotitem_id]] + }), ), ) @@ -405,27 +364,20 @@ export const landbaseEquipDataSelectorFactory = memoize(landbaseId => // Return [map, $map] or undefined export const mapDataSelectorFactory = memoize(mapId => arrayResultWrapper( - createSelector( - [mapsSelector, constSelector], - (maps, { $maps }) => { - if (!maps[mapId] || !$maps[mapId]) return - return [maps[mapId], $maps[mapId]] - }, - ), + createSelector([mapsSelector, constSelector], (maps, { $maps }) => { + if (!maps[mapId] || !$maps[mapId]) return + return [maps[mapId], $maps[mapId]] + }), ), ) -export const sortieMapIdSelector = createSelector( - sortieSelector, - sortie => sortie.sortieMapId, -) +export const sortieMapIdSelector = createSelector(sortieSelector, sortie => sortie.sortieMapId) export const sortieMapDataSelector = createSelector( [sortieMapIdSelector, mapsSelector, constSelector], (mapId, maps, { $maps }) => getMapData(mapId, maps, $maps), ) -export const sortieMapHpSelector = createSelector( - sortieMapDataSelector, - mapData => (mapData ? getMapHp(mapData[0], mapData[1]) : undefined), +export const sortieMapHpSelector = createSelector(sortieMapDataSelector, mapData => + mapData ? getMapHp(mapData[0], mapData[1]) : undefined, ) // Returns [ [_ship, $ship] for ship in thisFleet] @@ -434,12 +386,10 @@ export const sortieMapHpSelector = createSelector( // A ship not found in $ships is filled with [_ship, undefined] export const fleetShipsDataSelectorFactory = memoize(fleetId => arrayResultWrapper( - createSelector( - [stateSelector, fleetShipsIdSelectorFactory(fleetId)], - (state, fleetShipsId) => - !fleetShipsId - ? undefined - : fleetShipsId.map(shipId => shipDataSelectorFactory(shipId)(state)), + createSelector([stateSelector, fleetShipsIdSelectorFactory(fleetId)], (state, fleetShipsId) => + !fleetShipsId + ? undefined + : fleetShipsId.map(shipId => shipDataSelectorFactory(shipId)(state)), ), ), ) @@ -448,12 +398,10 @@ export const fleetShipsDataSelectorFactory = memoize(fleetId => // See shipDataToEquipData export const fleetShipsEquipDataSelectorFactory = memoize(fleetId => arrayResultWrapper( - createSelector( - [stateSelector, fleetShipsIdSelectorFactory(fleetId)], - (state, fleetShipsId) => - !fleetShipsId - ? undefined - : fleetShipsId.map(shipId => shipEquipDataSelectorFactory(shipId)(state)), + createSelector([stateSelector, fleetShipsIdSelectorFactory(fleetId)], (state, fleetShipsId) => + !fleetShipsId + ? undefined + : fleetShipsId.map(shipId => shipEquipDataSelectorFactory(shipId)(state)), ), ), ) @@ -461,48 +409,42 @@ export const fleetShipsEquipDataSelectorFactory = memoize(fleetId => // excludes escaped ships export const fleetShipsDataWithEscapeSelectorFactory = memoize(fleetId => arrayResultWrapper( - createSelector( - [stateSelector, fleetShipsIdSelectorFactory(fleetId)], - (state, fleetShipsId) => - !fleetShipsId - ? undefined - : fleetShipsId - .filter(shipId => !escapeStatusSelectorFactory(shipId)(state)) - .map(shipId => shipDataSelectorFactory(shipId)(state)), + createSelector([stateSelector, fleetShipsIdSelectorFactory(fleetId)], (state, fleetShipsId) => + !fleetShipsId + ? undefined + : fleetShipsId + .filter(shipId => !escapeStatusSelectorFactory(shipId)(state)) + .map(shipId => shipDataSelectorFactory(shipId)(state)), ), ), ) export const fleetShipsEquipDataWithEscapeSelectorFactory = memoize(fleetId => arrayResultWrapper( - createSelector( - [stateSelector, fleetShipsIdSelectorFactory(fleetId)], - (state, fleetShipsId) => - !fleetShipsId - ? undefined - : fleetShipsId - .filter(shipId => !escapeStatusSelectorFactory(shipId)(state)) - .map(shipId => shipEquipDataSelectorFactory(shipId)(state)), + createSelector([stateSelector, fleetShipsIdSelectorFactory(fleetId)], (state, fleetShipsId) => + !fleetShipsId + ? undefined + : fleetShipsId + .filter(shipId => !escapeStatusSelectorFactory(shipId)(state)) + .map(shipId => shipEquipDataSelectorFactory(shipId)(state)), ), ), ) -export const allCVEIdsSelector = createSelector( - constSelector, - c => - values(get(c, '$ships')) - .filter( - x => - // our ships - x.api_id <= 1500 && - // must be CVL - x.api_stype === 7 && - // have ASW stat - Array.isArray(x.api_tais) && - // in case Tanaka happens - x.api_tais[0] > 0, - ) - .map(x => x.api_id), +export const allCVEIdsSelector = createSelector(constSelector, c => + values(get(c, '$ships')) + .filter( + x => + // our ships + x.api_id <= 1500 && + // must be CVL + x.api_stype === 7 && + // have ASW stat + Array.isArray(x.api_tais) && + // in case Tanaka happens + x.api_tais[0] > 0, + ) + .map(x => x.api_id), ) /* @@ -525,57 +467,54 @@ export const allCVEIdsSelector = createSelector( in the order of remodeling. */ -export const shipRemodelInfoSelector = createSelector( - constSelector, - ({ $ships }) => { - // master id of all non-abyssal ships - const mstIds = values($ships) - .map(x => x.api_id) - .filter(x => x <= 1500) - // set of masterIds that has some other ship pointing to it (through remodeling) - const afterMstIdSet = new Set() - - mstIds.map(mstId => { - const $ship = $ships[mstId] - const afterMstId = Number($ship.api_aftershipid) - if (afterMstId !== 0) afterMstIdSet.add(afterMstId) - }) +export const shipRemodelInfoSelector = createSelector(constSelector, ({ $ships }) => { + // master id of all non-abyssal ships + const mstIds = values($ships) + .map(x => x.api_id) + .filter(x => x <= 1500) + // set of masterIds that has some other ship pointing to it (through remodeling) + const afterMstIdSet = new Set() + + mstIds.map(mstId => { + const $ship = $ships[mstId] + const afterMstId = Number($ship.api_aftershipid) + if (afterMstId !== 0) afterMstIdSet.add(afterMstId) + }) - // all those that has nothing pointing to them are originals - const originMstIds = mstIds.filter(mstId => !afterMstIdSet.has(mstId)) + // all those that has nothing pointing to them are originals + const originMstIds = mstIds.filter(mstId => !afterMstIdSet.has(mstId)) - /* + /* remodelChains[originMstId] = - originMstId: master id of the original ship - RemodelChain: an Array of master ids, sorted by remodeling order. */ - const remodelChains = fromPairs( - originMstIds.map(originMstId => { - // chase remodel chain until we either reach an end or hit a loop - const searchRemodels = (mstId, results = []) => { - if (results.includes(mstId)) return results - - const newResults = [...results, mstId] - const $ship = $ships[mstId] - const afterMstId = Number(get($ship, 'api_aftershipid', 0)) - if (afterMstId !== 0) { - return searchRemodels(afterMstId, newResults) - } else { - return newResults - } + const remodelChains = fromPairs( + originMstIds.map(originMstId => { + // chase remodel chain until we either reach an end or hit a loop + const searchRemodels = (mstId, results = []) => { + if (results.includes(mstId)) return results + + const newResults = [...results, mstId] + const $ship = $ships[mstId] + const afterMstId = Number(get($ship, 'api_aftershipid', 0)) + if (afterMstId !== 0) { + return searchRemodels(afterMstId, newResults) + } else { + return newResults } - return [originMstId, searchRemodels(originMstId)] - }), - ) - - // originMstIdOf[] = - const originMstIdOf = {} - Object.entries(remodelChains).map(([originMstId, remodelChain]) => { - remodelChain.map(mstId => { - originMstIdOf[mstId] = originMstId - }) + } + return [originMstId, searchRemodels(originMstId)] + }), + ) + + // originMstIdOf[] = + const originMstIdOf = {} + Object.entries(remodelChains).map(([originMstId, remodelChain]) => { + remodelChain.map(mstId => { + originMstIdOf[mstId] = originMstId }) - return { remodelChains, originMstIdOf } - }, -) + }) + return { remodelChains, originMstIdOf } +})