feat: update version badge logic for same-base update strategy, see #676

- Remove unused isNewer variable calculation
- Use dividerThresholdVersionId instead of latestLibraryVersionId for badge logic
- Add test case to verify newer version badge appears with same-base strategy
- Ensures correct badge display when filtering by same base model versions
This commit is contained in:
Will Miao
2025-11-18 11:18:32 +08:00
parent 6000e08640
commit 831a9da9d7
2 changed files with 67 additions and 4 deletions

View File

@@ -567,9 +567,6 @@ function render(record) {
const rowsMarkup = filteredVersions const rowsMarkup = filteredVersions
.map(version => { .map(version => {
const isNewer =
typeof latestLibraryVersionId === 'number' &&
version.versionId > latestLibraryVersionId;
let markup = ''; let markup = '';
if ( if (
!dividerInserted && !dividerInserted &&
@@ -580,7 +577,7 @@ function render(record) {
markup += '<div class="version-divider" role="presentation"></div>'; markup += '<div class="version-divider" role="presentation"></div>';
} }
markup += renderRow(version, { markup += renderRow(version, {
latestLibraryVersionId, latestLibraryVersionId: dividerThresholdVersionId,
currentVersionId: normalizedCurrentVersionId, currentVersionId: normalizedCurrentVersionId,
modelId: record?.modelId ?? modelId, modelId: record?.modelId ?? modelId,
}); });

View File

@@ -283,4 +283,70 @@ describe('ModelVersionsTab media rendering', () => {
const toggleTextAfter = document.querySelector('.versions-filter-toggle .sr-only'); const toggleTextAfter = document.querySelector('.versions-filter-toggle .sr-only');
expect(toggleTextAfter?.textContent?.trim()).toContain('All versions'); expect(toggleTextAfter?.textContent?.trim()).toContain('All versions');
}); });
it('shows a newer version badge when viewing same-base results', async () => {
stateMock.global.settings.update_flag_strategy = 'same_base';
fetchModelUpdateVersions.mockResolvedValue({
success: true,
record: {
shouldIgnore: false,
inLibraryVersionIds: [3, 1],
versions: [
{
versionId: 4,
name: 'V4',
baseModel: 'Base IL',
previewUrl: '/api/lm/previews/v4.png',
sizeBytes: 1024,
isInLibrary: false,
shouldIgnore: false,
},
{
versionId: 3,
name: 'V3',
baseModel: 'Base IL',
previewUrl: '/api/lm/previews/v3.png',
sizeBytes: 2048,
isInLibrary: true,
shouldIgnore: false,
},
{
versionId: 2,
name: 'V2',
baseModel: 'Base Flux',
previewUrl: '/api/lm/previews/v2.png',
sizeBytes: 4096,
isInLibrary: false,
shouldIgnore: false,
},
{
versionId: 1,
name: 'V1',
baseModel: 'Base Flux',
previewUrl: '/api/lm/previews/v1.png',
sizeBytes: 8192,
isInLibrary: true,
shouldIgnore: false,
},
],
},
});
const { initVersionsTab } = await import(MODEL_VERSIONS_MODULE);
const controller = initVersionsTab({
modalId: 'model-versions-modal',
modelType: 'loras',
modelId: 333,
currentVersionId: 1,
});
await controller.load();
const rows = document.querySelectorAll('.model-version-row');
expect(rows.length).toBe(2);
const firstBadges = Array.from(rows[0].querySelectorAll('.version-badge')).map(
badge => badge.textContent?.trim()
);
expect(firstBadges).toContain('Newer Version');
});
}); });