Skip to content

Commit b5c4461

Browse files
Fix "Copy Mod List" silently erroring, include dependency mods, markdown codeblock format output (#272 -> #331)
* Don't try to copy disabled mods (silently errors) * Properly catch any errors that occur during CopyModList. Fence output text in markdown codeblock * switch "Copy Mods" to build from lockfileMods, which includes dependencies * Include pnpm build approvals --------- Co-authored-by: Rob B <computerguy440+gh@gmail.com>
1 parent ad9aa85 commit b5c4461

3 files changed

Lines changed: 21 additions & 5 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ You may also need to manually run the frontend linter. First, navigate to the `f
103103

104104
```bash
105105
pnpm run format
106+
pnpm run check
106107
```
107108

108109
### Assorted Development Helpers

frontend/pnpm-workspace.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
onlyBuiltDependencies:
2+
- esbuild
3+
- svelte-preprocess

frontend/src/lib/components/left-bar/Settings.svelte

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import { languages } from '$lib/localization';
1212
import { type PopupSettings, getModalStore, popup } from '$lib/skeletonExtensions';
1313
import { addQueuedModAction, hasPendingProfileChange, queuedMods } from '$lib/store/actionQueue';
14-
import { lockfileMods, manifestMods } from '$lib/store/ficsitCLIStore';
14+
import { lockfileMods } from '$lib/store/ficsitCLIStore';
1515
import { error } from '$lib/store/generalStore';
1616
import {
1717
debug,
@@ -148,7 +148,7 @@
148148
149149
async function copyModList() {
150150
// Generate mod entries
151-
const modList = await Promise.all(Object.keys($manifestMods).map(async (modReference) => {
151+
const modList = (await Promise.all(Object.keys($lockfileMods).map(async (modReference) => {
152152
let modName = modReference;
153153
if($offline) {
154154
modName = (await OfflineGetMod(modReference)).name;
@@ -158,12 +158,13 @@
158158
modName = result.data.getModByReference.name;
159159
}
160160
}
161+
161162
return {
162163
friendlyName: modName,
163164
modReference,
164165
version: $lockfileMods[modReference].version,
165166
};
166-
}));
167+
})));
167168
// Sort by Friendly Name
168169
modList.sort((a, b) => {
169170
const x = a.friendlyName.toLowerCase();
@@ -180,14 +181,20 @@
180181
mod.modReference = mod.modReference.padEnd(maxModReferenceLen, ' ');
181182
modListString += `${mod.friendlyName} ${mod.modReference} ${mod.version}\n`;
182183
});
183-
navigator.clipboard.writeText(modListString.trim());
184+
const markdownCodeblockFence = '```';
185+
navigator.clipboard.writeText(`${markdownCodeblockFence}\n${modListString.trim()}\n${markdownCodeblockFence}`);
184186
}
185187
186188
function localeName(locale: string) {
187189
if (!locale) return 'N/A';
188190
return new Intl.DisplayNames([locale], { type: 'language' }).of(locale);
189191
}
190192
193+
// appease svelte "stores must be declared at the top of the file"
194+
function displayError(err: string) {
195+
$error = err;
196+
}
197+
191198
$: if ($queueAutoStart && $queuedMods.length === 0 && $hasPendingProfileChange) {
192199
$hasPendingProfileChange = false;
193200
addQueuedModAction('__apply__', 'apply', Apply).catch((e) => error.set(e));
@@ -336,7 +343,12 @@
336343
</li>
337344
<hr class="divider" />
338345
<li>
339-
<button on:click={() => copyModList()}>
346+
<button
347+
on:click={() => {
348+
copyModList().catch((error) => {
349+
displayError(`failed to copy mod list: ${error}`);
350+
});
351+
}}>
340352
<span class="h-5 w-5"/>
341353
<span class="flex-auto">
342354
<T defaultValue="Copy mod list" keyName="settings.copy-mod-list"/>

0 commit comments

Comments
 (0)