Skip to content

Commit 77fd62a

Browse files
committed
Merge remote-tracking branch 'origin/cal/content-tab-rewrite-hosting' into cal/creation-flow-modals
2 parents 3ddb2f9 + 4236cea commit 77fd62a

File tree

6 files changed

+59
-27
lines changed

6 files changed

+59
-27
lines changed

apps/app-frontend/src/pages/instance/Mods.vue

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
:loading="loadingVersions"
4040
:loading-changelog="loadingChangelog"
4141
@update="handleModalUpdate"
42+
@cancel="resetUpdateState"
4243
@version-select="handleVersionSelect"
4344
@version-hover="handleVersionHover"
4445
/>
@@ -294,6 +295,7 @@ async function handleUpdate(id: string) {
294295
const item = projects.value.find((p) => p.file_name === id)
295296
if (!item?.has_update || !item.project?.id || !item.version?.id) return
296297
298+
updatingModpack.value = false
297299
updatingProject.value = item
298300
updatingProjectVersions.value = []
299301
loadingVersions.value = true
@@ -401,6 +403,14 @@ async function handleVersionHover(version: Labrinth.Versions.v2.Version) {
401403
}
402404
}
403405
406+
function resetUpdateState() {
407+
updatingModpack.value = false
408+
updatingProject.value = null
409+
updatingProjectVersions.value = []
410+
loadingVersions.value = false
411+
loadingChangelog.value = false
412+
}
413+
404414
async function handleModalUpdate(selectedVersion: Labrinth.Versions.v2.Version) {
405415
if (updatingModpack.value) {
406416
if (!props.instance?.path) return
@@ -411,10 +421,7 @@ async function handleModalUpdate(selectedVersion: Labrinth.Versions.v2.Version)
411421
await initProjects()
412422
} finally {
413423
isModpackUpdating.value = false
414-
updatingModpack.value = false
415-
updatingProjectVersions.value = []
416-
loadingVersions.value = false
417-
loadingChangelog.value = false
424+
resetUpdateState()
418425
}
419426
} else if (updatingProject.value) {
420427
const mod = updatingProject.value
@@ -423,10 +430,7 @@ async function handleModalUpdate(selectedVersion: Labrinth.Versions.v2.Version)
423430
424431
await updateProject(mod)
425432
426-
updatingProject.value = null
427-
updatingProjectVersions.value = []
428-
loadingVersions.value = false
429-
loadingChangelog.value = false
433+
resetUpdateState()
430434
}
431435
}
432436

apps/frontend/src/composables/featureFlags.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export const DEFAULT_FEATURE_FLAGS = validateValues({
4343
hidePreviewBanner: false,
4444
i18nDebug: false,
4545
showDiscoverProjectButtons: false,
46-
useV1ContentTabAPI: false,
46+
useV1ContentTabAPI: true,
4747
} as const)
4848

4949
export type FeatureFlag = keyof typeof DEFAULT_FEATURE_FLAGS

packages/app-lib/src/state/instances/content.rs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -235,11 +235,16 @@ fn check_modpack_update(
235235
let supports_game = v.game_versions.contains(game_version);
236236

237237
// Must support the profile's loader
238-
// Modpacks list "mrpack" as a loader, but also list actual loaders
239-
let supports_loader = v.loaders.iter().any(|l| {
240-
let l_lower = l.to_lowercase();
241-
l_lower == loader_str || l_lower == "mrpack"
242-
});
238+
// The v2 API replaces "mrpack" with actual loaders from mrpack_loaders,
239+
// but if mrpack_loaders is missing, loaders may be just ["mrpack"].
240+
// In that case we can't filter by loader, so accept the version.
241+
let real_loaders: Vec<_> = v
242+
.loaders
243+
.iter()
244+
.filter(|l| l.to_lowercase() != "mrpack")
245+
.collect();
246+
let supports_loader = real_loaders.is_empty()
247+
|| real_loaders.iter().any(|l| l.to_lowercase() == loader_str);
243248

244249
supports_game && supports_loader
245250
})

packages/ui/src/components/instances/ContentPageLayout.vue

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -303,8 +303,11 @@ async function handleToggleEnabledById(id: string, _value: boolean) {
303303
const item = ctx.items.value.find((i) => ctx.getItemId(i) === id)
304304
if (!item) return
305305
markChanging(id)
306-
await ctx.toggleEnabled(item)
307-
unmarkChanging(id)
306+
try {
307+
await ctx.toggleEnabled(item)
308+
} finally {
309+
unmarkChanging(id)
310+
}
308311
}
309312
310313
async function bulkEnable() {

packages/ui/src/composables/content/bulk-operations.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,18 @@ export function useBulkOperation() {
2020
bulkTotal.value = items.length
2121
bulkProgress.value = 0
2222

23-
for (const item of items) {
24-
await fn(item)
25-
bulkProgress.value++
26-
if (delayMs > 0 && bulkProgress.value < items.length) {
27-
await new Promise((resolve) => setTimeout(resolve, delayMs))
23+
try {
24+
for (const item of items) {
25+
await fn(item)
26+
bulkProgress.value++
27+
if (delayMs > 0 && bulkProgress.value < items.length) {
28+
await new Promise((resolve) => setTimeout(resolve, delayMs))
29+
}
2830
}
31+
} finally {
32+
isBulkOperating.value = false
33+
bulkOperation.value = null
2934
}
30-
31-
isBulkOperating.value = false
32-
bulkOperation.value = null
3335
}
3436

3537
function handleBeforeUnload(e: BeforeUnloadEvent) {

packages/ui/src/pages/hosting/manage/content.vue

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -528,9 +528,27 @@ provideContentManager({
528528
contentTypeLabel: type,
529529
toggleEnabled: handleToggleEnabled,
530530
deleteItem: handleDeleteItem,
531-
bulkDeleteItems: useV1.value ? handleBulkDelete : undefined,
532-
bulkEnableItems: useV1.value ? handleBulkEnable : undefined,
533-
bulkDisableItems: useV1.value ? handleBulkDisable : undefined,
531+
bulkDeleteItems: async (items) => {
532+
if (useV1.value) {
533+
await handleBulkDelete(items)
534+
} else {
535+
for (const item of items) await handleDeleteItem(item)
536+
}
537+
},
538+
bulkEnableItems: async (items) => {
539+
if (useV1.value) {
540+
await handleBulkEnable(items)
541+
} else {
542+
for (const item of items) await handleToggleEnabled(item)
543+
}
544+
},
545+
bulkDisableItems: async (items) => {
546+
if (useV1.value) {
547+
await handleBulkDisable(items)
548+
} else {
549+
for (const item of items) await handleToggleEnabled(item)
550+
}
551+
},
534552
refresh: async () => {
535553
await refetchContent()
536554
},

0 commit comments

Comments
 (0)