Skip to content

Commit af71601

Browse files
Move All Templates category into ComfyUI Examples
1 parent c9270ea commit af71601

File tree

6 files changed

+100
-51
lines changed

6 files changed

+100
-51
lines changed

src/components/templates/TemplateWorkflowCard.vue

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,26 +105,33 @@ const isHovered = useElementHover(cardRef)
105105
const { getTemplateThumbnailUrl, getTemplateTitle, getTemplateDescription } =
106106
useTemplateWorkflows()
107107
108+
// Determine the effective source module to use (from template or prop)
109+
const effectiveSourceModule = computed(
110+
() => template.sourceModule || sourceModule
111+
)
112+
108113
const baseThumbnailSrc = computed(() =>
109114
getTemplateThumbnailUrl(
110115
template,
111-
sourceModule,
112-
sourceModule === 'default' ? '1' : ''
116+
effectiveSourceModule.value,
117+
effectiveSourceModule.value === 'default' ? '1' : ''
113118
)
114119
)
115120
116121
const overlayThumbnailSrc = computed(() =>
117122
getTemplateThumbnailUrl(
118123
template,
119-
sourceModule,
120-
sourceModule === 'default' ? '2' : ''
124+
effectiveSourceModule.value,
125+
effectiveSourceModule.value === 'default' ? '2' : ''
121126
)
122127
)
123128
124129
const description = computed(() =>
125-
getTemplateDescription(template, sourceModule)
130+
getTemplateDescription(template, effectiveSourceModule.value)
131+
)
132+
const title = computed(() =>
133+
getTemplateTitle(template, effectiveSourceModule.value)
126134
)
127-
const title = computed(() => getTemplateTitle(template, sourceModule))
128135
129136
defineEmits<{
130137
loadWorkflow: [name: string]

src/components/templates/TemplateWorkflowList.vue

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,38 @@
77
>
88
<Column field="title" :header="$t('g.title')">
99
<template #body="slotProps">
10-
<span :title="getTemplateTitle(slotProps.data, sourceModule)">{{
11-
getTemplateTitle(slotProps.data, sourceModule)
12-
}}</span>
10+
<span
11+
:title="
12+
getTemplateTitle(
13+
slotProps.data,
14+
slotProps.data.sourceModule || sourceModule
15+
)
16+
"
17+
>{{
18+
getTemplateTitle(
19+
slotProps.data,
20+
slotProps.data.sourceModule || sourceModule
21+
)
22+
}}</span
23+
>
1324
</template>
1425
</Column>
1526
<Column field="description" :header="$t('g.description')">
1627
<template #body="slotProps">
17-
<span :title="getTemplateDescription(slotProps.data, sourceModule)">
18-
{{ getTemplateDescription(slotProps.data, sourceModule) }}
28+
<span
29+
:title="
30+
getTemplateDescription(
31+
slotProps.data,
32+
slotProps.data.sourceModule || sourceModule
33+
)
34+
"
35+
>
36+
{{
37+
getTemplateDescription(
38+
slotProps.data,
39+
slotProps.data.sourceModule || sourceModule
40+
)
41+
}}
1942
</span>
2043
</template>
2144
</Column>

src/composables/useTemplateWorkflows.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,15 @@ export function useTemplateWorkflows() {
106106
try {
107107
// Handle "All" category as a special case
108108
if (sourceModule === 'all') {
109-
// Find template to determine its source module
110-
const allCategory = allTemplateGroups.value.find((g) =>
111-
g.label.includes('All')
112-
)?.modules[0]
109+
// Find "All" category in the ComfyUI Examples group
110+
const comfyExamplesGroup = allTemplateGroups.value.find(
111+
(g) =>
112+
g.label ===
113+
t('templateWorkflows.category.ComfyUI Examples', 'ComfyUI Examples')
114+
)
115+
const allCategory = comfyExamplesGroup?.modules.find(
116+
(m) => m.moduleName === 'all'
117+
)
113118
const template = allCategory?.templates.find((t) => t.name === id)
114119

115120
if (!template || !template.sourceModule) return false

src/locales/en/main.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -492,8 +492,7 @@
492492
"Audio": "Audio",
493493
"Image API": "Image API",
494494
"Video API": "Video API",
495-
"All": "All Templates",
496-
"AllTemplates": "All Templates"
495+
"All": "All Templates"
497496
},
498497
"templateDescription": {
499498
"Basics": {

src/stores/workflowTemplatesStore.ts

Lines changed: 46 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -103,30 +103,43 @@ export const useWorkflowTemplatesStore = defineStore(
103103

104104
// Create an "All" category that combines all templates
105105
const createAllCategory = () => {
106-
// Get all templates and include source module
106+
// First, get core templates with source module added
107+
const coreTemplatesWithSourceModule = coreTemplates.value.flatMap(
108+
(category) =>
109+
// For each template in each category, add the sourceModule and pass through any localized fields
110+
category.templates.map((template) => {
111+
// Get localized template with its original category title for i18n lookup
112+
const localizedTemplate = addLocalizedFieldsToTemplate(
113+
template,
114+
category.title
115+
)
116+
return {
117+
...localizedTemplate,
118+
sourceModule: category.moduleName
119+
}
120+
})
121+
)
122+
123+
// Now handle custom templates
124+
const customTemplatesWithSourceModule = Object.entries(
125+
customTemplates.value
126+
).flatMap(([moduleName, templates]) =>
127+
templates.map((name) => ({
128+
name,
129+
mediaType: 'image',
130+
mediaSubtype: 'jpg',
131+
description: name,
132+
sourceModule: moduleName
133+
}))
134+
)
135+
107136
return {
108137
moduleName: 'all',
109138
title: 'All',
110139
localizedTitle: st('templateWorkflows.category.All', 'All Templates'),
111140
templates: [
112-
// Core templates
113-
...coreTemplates.value.flatMap((category) =>
114-
category.templates.map((template) => ({
115-
...template,
116-
sourceModule: category.moduleName
117-
}))
118-
),
119-
// Custom templates
120-
...Object.entries(customTemplates.value).flatMap(
121-
([moduleName, templates]) =>
122-
templates.map((name) => ({
123-
name,
124-
mediaType: 'image',
125-
mediaSubtype: 'jpg',
126-
description: name,
127-
sourceModule: moduleName
128-
}))
129-
)
141+
...coreTemplatesWithSourceModule,
142+
...customTemplatesWithSourceModule
130143
]
131144
}
132145
}
@@ -155,8 +168,8 @@ export const useWorkflowTemplatesStore = defineStore(
155168
)
156169
]
157170

158-
// Create regular groups
159-
const regularGroups = Object.entries(
171+
// Group templates by their main category
172+
const groupedByCategory = Object.entries(
160173
groupBy(allTemplates, (template) =>
161174
template.moduleName === 'default'
162175
? st(
@@ -167,13 +180,20 @@ export const useWorkflowTemplatesStore = defineStore(
167180
)
168181
).map(([label, modules]) => ({ label, modules }))
169182

170-
// Create All category group and add it to the beginning
171-
const allGroup = {
172-
label: st('templateWorkflows.category.AllTemplates', 'All Templates'),
173-
modules: [createAllCategory()]
183+
// Insert the "All" category at the top of the "ComfyUI Examples" group
184+
const comfyExamplesGroupIndex = groupedByCategory.findIndex(
185+
(group) =>
186+
group.label ===
187+
st('templateWorkflows.category.ComfyUI Examples', 'ComfyUI Examples')
188+
)
189+
190+
if (comfyExamplesGroupIndex !== -1) {
191+
groupedByCategory[comfyExamplesGroupIndex].modules.unshift(
192+
createAllCategory()
193+
)
174194
}
175195

176-
return [allGroup, ...regularGroups]
196+
return groupedByCategory
177197
})
178198

179199
async function loadWorkflowTemplates() {

tests-ui/tests/composables/useTemplateWorkflows.test.ts

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ describe('useTemplateWorkflows', () => {
5050
loadWorkflowTemplates: vi.fn().mockResolvedValue(true),
5151
groupedTemplates: [
5252
{
53-
label: 'All Templates',
53+
label: 'ComfyUI Examples',
5454
modules: [
5555
{
5656
moduleName: 'all',
@@ -72,12 +72,7 @@ describe('useTemplateWorkflows', () => {
7272
description: 'A custom template'
7373
}
7474
]
75-
}
76-
]
77-
},
78-
{
79-
label: 'Default Templates',
80-
modules: [
75+
},
8176
{
8277
moduleName: 'default',
8378
title: 'Default',
@@ -130,7 +125,7 @@ describe('useTemplateWorkflows', () => {
130125

131126
it('should select a template category', () => {
132127
const { selectTemplateCategory, selectedTemplate } = useTemplateWorkflows()
133-
const category = mockWorkflowTemplatesStore.groupedTemplates[1].modules[0]
128+
const category = mockWorkflowTemplatesStore.groupedTemplates[0].modules[1] // Default category
134129

135130
const result = selectTemplateCategory(category)
136131

0 commit comments

Comments
 (0)