Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
2a1cb3a
fix: remove cloud guard for clear history menu
benceruleanlu Feb 18, 2026
df4489d
Add the sidebar placeholder
benceruleanlu Feb 18, 2026
554fb06
Gate on APOV2 flag
benceruleanlu Feb 18, 2026
3ef02e7
Adjust sidebar tab positioning
benceruleanlu Feb 18, 2026
4d1fbf7
feat: add job history actions menu and filters bar
benceruleanlu Feb 18, 2026
b2cfeaa
refactor: always show workflow filter controls
benceruleanlu Feb 18, 2026
cd0f493
feat: move active jobs UI out of media assets panel
benceruleanlu Feb 18, 2026
3df6b11
Make Clear job history menu button match design
benceruleanlu Feb 18, 2026
db10c75
feat: expand job history actions menu
benceruleanlu Feb 18, 2026
a8ca16a
fix: keep job history tab first when toggling qpov2
benceruleanlu Feb 18, 2026
ac7415a
feat: add job history search and split job filter bar
benceruleanlu Feb 18, 2026
d9e30cb
fix: align storybook useJobList mock exports
benceruleanlu Feb 18, 2026
d1d785c
fix: remove redundant menu aria labels
benceruleanlu Feb 18, 2026
3c1ea52
refactor: use v-model bindings for job history filters
benceruleanlu Feb 18, 2026
45553d0
refactor: avoid important padding override in clear history dialog
benceruleanlu Feb 18, 2026
044cadf
test: use satisfies for assets sidebar test asset helper
benceruleanlu Feb 18, 2026
5c4662a
refactor: wrap job menu actions with shared error handling
benceruleanlu Feb 18, 2026
64de72f
fix: reuse shared popover in job filter actions
benceruleanlu Feb 18, 2026
c6106d0
fix: resolve JobFilterActions click handler parse error
benceruleanlu Feb 18, 2026
02738b3
test: use stable selectors for queue header menu actions
benceruleanlu Feb 18, 2026
843fed5
Styling tweaks
benceruleanlu Feb 18, 2026
0958718
Migrate once again to popover component
benceruleanlu Feb 18, 2026
5f4b3e8
fix: toggle media assets button in queue overlay
benceruleanlu Feb 18, 2026
8aba946
Readd isCloud gate
benceruleanlu Feb 18, 2026
edcf750
Merge branch 'main' into feat/job-history-sidebar-tab-scaffold
benceruleanlu Feb 18, 2026
5301a30
Use defineModel
benceruleanlu Feb 18, 2026
7631afd
Styling tweaks
benceruleanlu Feb 18, 2026
04210e1
Update src/composables/queue/useQueueClearHistoryDialog.ts
benceruleanlu Feb 18, 2026
85390db
nit
benceruleanlu Feb 18, 2026
47f72f8
Update src/stores/workspace/sidebarTabStore.test.ts
benceruleanlu Feb 18, 2026
ee4e193
Merge branch 'feat/job-history-sidebar-tab-scaffold' of https://githu…
benceruleanlu Feb 18, 2026
15b5b68
[automated] Apply ESLint and Oxfmt fixes
actions-user Feb 18, 2026
dd42fcc
test: explicitly set disabled QPO V2 in sidebar tab test
benceruleanlu Feb 18, 2026
15a4c72
Merge branch 'feat/job-history-sidebar-tab-scaffold' of https://githu…
benceruleanlu Feb 18, 2026
4e45334
fix: truncate AssetsListItem fallback text
benceruleanlu Feb 18, 2026
0ac92c8
fix: make sidebar tab setting mocks explicit per test
benceruleanlu Feb 19, 2026
8b6663f
Merge origin/main into feat/job-history-sidebar-tab-scaffold
benceruleanlu Feb 19, 2026
93101fa
test: cover persistence draft types for knip
benceruleanlu Feb 19, 2026
6da7156
Revert "test: cover persistence draft types for knip"
benceruleanlu Feb 19, 2026
a987c79
Delete unused types file
benceruleanlu Feb 19, 2026
8cd6e14
fix: restore draftTypes from main
benceruleanlu Feb 20, 2026
a39d11f
Merge remote-tracking branch 'origin/main' into feat/job-history-side…
benceruleanlu Feb 20, 2026
d326a9d
Merge remote-tracking branch 'origin/main' into feat/job-history-side…
benceruleanlu Feb 20, 2026
c5a4ab5
fix: update asset video previews for card and list
benceruleanlu Feb 19, 2026
584ad49
fix: support text and misc generated asset states
benceruleanlu Feb 19, 2026
f961291
fix: load 3D dialog content with defineAsyncComponent (#8990)
benceruleanlu Feb 20, 2026
91ad50b
fix: wrap load3d dialog content in defineAsyncComponent
benceruleanlu Feb 19, 2026
50698de
fix: disable inspect for non-previewable assets
benceruleanlu Feb 19, 2026
292f460
Merge remote-tracking branch 'origin/main' into fix/non-previewable-i…
benceruleanlu Feb 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions packages/shared-frontend-utils/src/formatUtil.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { describe, expect, it } from 'vitest'
import {
getMediaTypeFromFilename,
highlightQuery,
isPreviewableMediaType,
truncateFilename
} from './formatUtil'

Expand Down Expand Up @@ -196,4 +197,18 @@ describe('formatUtil', () => {
)
})
})

describe('isPreviewableMediaType', () => {
it('returns true for image/video/audio/3D', () => {
expect(isPreviewableMediaType('image')).toBe(true)
expect(isPreviewableMediaType('video')).toBe(true)
expect(isPreviewableMediaType('audio')).toBe(true)
expect(isPreviewableMediaType('3D')).toBe(true)
})

it('returns false for text/other', () => {
expect(isPreviewableMediaType('text')).toBe(false)
expect(isPreviewableMediaType('other')).toBe(false)
})
})
})
9 changes: 9 additions & 0 deletions packages/shared-frontend-utils/src/formatUtil.ts
Original file line number Diff line number Diff line change
Expand Up @@ -583,3 +583,12 @@ export function getMediaTypeFromFilename(

return 'other'
}

export function isPreviewableMediaType(mediaType: MediaType): boolean {
return (
mediaType === 'image' ||
mediaType === 'video' ||
mediaType === 'audio' ||
mediaType === '3D'
)
}
27 changes: 20 additions & 7 deletions src/components/sidebar/tabs/AssetsSidebarTab.vue
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,11 @@ import { resolveOutputAssetItems } from '@/platform/assets/utils/outputAssetUtil
import { isCloud } from '@/platform/distribution/types'
import { useDialogStore } from '@/stores/dialogStore'
import { ResultItemImpl } from '@/stores/queueStore'
import { formatDuration, getMediaTypeFromFilename } from '@/utils/formatUtil'
import {
formatDuration,
getMediaTypeFromFilename,
isPreviewableMediaType
} from '@/utils/formatUtil'
import { cn } from '@/utils/tailwindUtil'
const { t } = useI18n()
Expand Down Expand Up @@ -405,6 +409,12 @@ const visibleAssets = computed(() => {
return listViewSelectableAssets.value
})
const previewableVisibleAssets = computed(() =>
visibleAssets.value.filter((asset) =>
isPreviewableMediaType(getMediaTypeFromFilename(asset.name))
)
)
const selectedAssets = computed(() => getSelectedAssets(visibleAssets.value))
const isBulkMode = computed(
Expand All @@ -430,12 +440,10 @@ watch(visibleAssets, (newAssets) => {
// so selection stays consistent with what this view can act on.
reconcileSelection(newAssets)
if (currentGalleryAssetId.value && galleryActiveIndex.value !== -1) {
const newIndex = newAssets.findIndex(
const newIndex = previewableVisibleAssets.value.findIndex(
(asset) => asset.id === currentGalleryAssetId.value
)
if (newIndex !== -1) {
galleryActiveIndex.value = newIndex
}
galleryActiveIndex.value = newIndex
}
})
Expand All @@ -446,7 +454,7 @@ watch(galleryActiveIndex, (index) => {
})
const galleryItems = computed(() => {
return visibleAssets.value.map((asset) => {
return previewableVisibleAssets.value.map((asset) => {
const mediaType = getMediaTypeFromFilename(asset.name)
const resultItem = new ResultItemImpl({
filename: asset.name,
Expand Down Expand Up @@ -552,6 +560,9 @@ const handleDeleteSelected = async () => {
const handleZoomClick = (asset: AssetItem) => {
const mediaType = getMediaTypeFromFilename(asset.name)
if (!isPreviewableMediaType(mediaType)) {
return
}
if (mediaType === '3D') {
const dialogStore = useDialogStore()
Expand All @@ -571,7 +582,9 @@ const handleZoomClick = (asset: AssetItem) => {
}
currentGalleryAssetId.value = asset.id
const index = visibleAssets.value.findIndex((a) => a.id === asset.id)
const index = previewableVisibleAssets.value.findIndex(
(a) => a.id === asset.id
)
if (index !== -1) {
galleryActiveIndex.value = index
}
Expand Down
8 changes: 6 additions & 2 deletions src/platform/assets/components/MediaAssetCard.vue
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
>
<IconGroup background-class="bg-white">
<Button
v-if="canInspect"
variant="overlay-white"
size="icon"
:aria-label="$t('mediaAsset.actions.zoom')"
Expand Down Expand Up @@ -141,7 +142,8 @@ import {
formatDuration,
formatSize,
getFilenameDetails,
getMediaTypeFromFilename
getMediaTypeFromFilename,
isPreviewableMediaType
} from '@/utils/formatUtil'
import { cn } from '@/utils/tailwindUtil'

Expand Down Expand Up @@ -217,6 +219,8 @@ const previewKind = computed((): PreviewKind => {
return getMediaTypeFromFilename(asset?.name || '')
})

const canInspect = computed(() => isPreviewableMediaType(fileKind.value))

// Get filename without extension
const fileName = computed(() => {
return getFilenameDetails(asset?.name || '').filename
Expand Down Expand Up @@ -278,7 +282,7 @@ const showActionsOverlay = computed(() => {
})

const handleZoomClick = () => {
if (asset) {
if (asset && canInspect.value) {
emit('zoom', asset)
}
}
Expand Down
5 changes: 3 additions & 2 deletions src/platform/assets/components/MediaAssetContextMenu.vue
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import { useI18n } from 'vue-i18n'
import Button from '@/components/ui/button/Button.vue'
import { isCloud } from '@/platform/distribution/types'
import { supportsWorkflowMetadata } from '@/platform/workflow/utils/workflowExtractionUtil'
import { isPreviewableMediaType } from '@/utils/formatUtil'
import { detectNodeTypeFromFilename } from '@/utils/loaderNodeUtil'
import { cn } from '@/utils/tailwindUtil'

Expand Down Expand Up @@ -206,8 +207,8 @@ const contextMenuItems = computed<MenuItem[]>(() => {

// Individual mode: Show all menu options

// Inspect (if not 3D)
if (fileKind !== '3D') {
// Inspect
if (isPreviewableMediaType(fileKind)) {
items.push({
label: t('mediaAsset.actions.inspect'),
icon: 'icon-[lucide--zoom-in]',
Expand Down
Loading