From 867bb0c646e86620bdc559781f9e7e22df6b724e Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Tue, 12 Dec 2023 00:02:54 +0100 Subject: [PATCH] Add ModInfo.id getter Provide a simple unique identifier for mods consisting of the name followed by an underscore and then the version. --- packages/ctl/src/commands.ts | 2 +- packages/lib/src/data/ModInfo.ts | 8 ++++++++ packages/web_ui/src/components/ModPackViewPage.tsx | 6 +++--- packages/web_ui/src/components/ModsPage.tsx | 2 +- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/ctl/src/commands.ts b/packages/ctl/src/commands.ts index 68459905..c112c162 100644 --- a/packages/ctl/src/commands.ts +++ b/packages/ctl/src/commands.ts @@ -867,7 +867,7 @@ modPackCommands.add(new lib.Command({ }], handler: async function(args: { modPack: string }, control: Control) { let mods = new Map( - (await control.send(new lib.ModListRequest())).map(m => [`${m.name}_${m.version}`, m]) + (await control.send(new lib.ModListRequest())).map(m => [m.id, m]) ); let modPack = await control.send( new lib.ModPackGetRequest(await lib.resolveModPack(control, args.modPack)) diff --git a/packages/lib/src/data/ModInfo.ts b/packages/lib/src/data/ModInfo.ts index 83f71fc3..fb29a8d4 100644 --- a/packages/lib/src/data/ModInfo.ts +++ b/packages/lib/src/data/ModInfo.ts @@ -16,6 +16,14 @@ import { integerModVersion, integerFactorioVersion, modVersionRegExp } from "./v * details of the invidiual fields sourced from info.json. */ export default class ModInfo { + /** + * String containing {mod.name}_{mod.version}, uniquely identifies this + * mod. + */ + get id() { + return `${this.name}_${this.version}`; + } + /** * Internal name of this mod. * This is the name of the zip file as well as the name that appears in diff --git a/packages/web_ui/src/components/ModPackViewPage.tsx b/packages/web_ui/src/components/ModPackViewPage.tsx index 99ca8a3d..1f244bcd 100644 --- a/packages/web_ui/src/components/ModPackViewPage.tsx +++ b/packages/web_ui/src/components/ModPackViewPage.tsx @@ -261,7 +261,7 @@ function ModsTable(props: ModsTableProps) { } } - const modListMap = new Map(modList.map(mod => [`${mod.name}_${mod.version}`, mod])); + const modListMap = new Map(modList.map(mod => [mod.id, mod])); const mods = [...props.modPack.mods.values(), ...deletedMods.values()].map( (mod: lib.ModRecord|lib.ModInfo): lib.ModInfo|lib.ModRecord => { const candidate = modListMap.get(`${mod.name}_${mod.version}`); @@ -481,8 +481,8 @@ function SettingsTable(props: SettingsTableProps) { const [modList] = useModList(); const modsInPack = new Set([...props.modPack.mods.values()].map(mod => `${mod.name}_${mod.version}`)); const modTitles = new Map(modList - .filter(mod => modsInPack.has(`${mod.name}_${mod.version}`)) - .map(mod => [`${mod.name}`, mod.title]) + .filter(mod => modsInPack.has(mod.id)) + .map(mod => [mod.name, mod.title]) ); const types = ["bool-setting", "int-setting", "double-setting", "string-setting"]; diff --git a/packages/web_ui/src/components/ModsPage.tsx b/packages/web_ui/src/components/ModsPage.tsx index 3bc03e8a..0b299ec5 100644 --- a/packages/web_ui/src/components/ModsPage.tsx +++ b/packages/web_ui/src/components/ModsPage.tsx @@ -265,7 +265,7 @@ export default function ModsPage() { }} dataSource={modList} pagination={false} - rowKey={mod => `${mod.name}_${mod.version}`} + rowKey={mod => mod.id} /> ;