mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-26 01:34:07 +00:00
## Summary
Migrate frontend from legacy `/history`, `/history_v2`, and `/queue`
endpoints to the unified `/jobs` API with memory optimization and lazy
loading.
**This is PR 2 of 3** - Core migration, depends on PR 1.
## Changes
- **What**:
- Replace `api.getQueue()` and `api.getHistory()` implementations to use
Jobs API fetchers
- Implement lazy loading for workflow and full outputs via `/jobs/{id}`
endpoint in `useJobMenu`
- Add `TaskItemImpl` class wrapping `JobListItem` for queue store
compatibility
- Rename `reconcileHistory` to `reconcileJobs` for clarity
- Use `execution_start_time` and `execution_end_time` from API for
execution timing
- Use `workflowId` from job instead of nested `workflow.id`
- Update `useJobMenu` to fetch job details on demand (`openJobWorkflow`,
`exportJobWorkflow`)
- **Breaking**: Requires backend Jobs API support (ComfyUI with `/jobs`
endpoint)
## Review Focus
1. **Lazy loading in `useJobMenu`**: `openJobWorkflow` and
`exportJobWorkflow` now fetch from API on demand instead of accessing
`taskRef.workflow`
2. **`TaskItemImpl` wrapper**: Adapts `JobListItem` to existing queue
store interface
3. **Error reporting**: Uses `execution_error` field from API for rich
error dialogs
4. **Memory optimization**: Only fetches full job details when needed
## Files Changed
- `src/scripts/api.ts` - Updated `getQueue()` and `getHistory()` to use
Jobs API
- `src/stores/queueStore.ts` - Added `TaskItemImpl`, updated to use
`JobListItem`
- `src/composables/useJobMenu.ts` - Lazy loading for workflow access
- `src/composables/useJobList.ts` - Updated types
- Various test files updated
## Dependencies
- **Depends on**: PR 1 (Jobs API Infrastructure) - #7169
## Next PR
- **PR 3**: Remove legacy history code and unused types
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-7170-feat-Migrate-to-Jobs-API-PR-2-of-3-2bf6d73d3650811b94f4fbe69944bba6)
by [Unito](https://www.unito.io)
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Christian Byrne <cbyrne@comfy.org>
59 lines
1.4 KiB
TypeScript
59 lines
1.4 KiB
TypeScript
import { computed } from 'vue'
|
|
import type { ComputedRef } from 'vue'
|
|
|
|
import type { ExecutionErrorDialogInput } from '@/services/dialogService'
|
|
import type { TaskItemImpl } from '@/stores/queueStore'
|
|
|
|
type CopyHandler = (value: string) => void | Promise<void>
|
|
|
|
export type JobErrorDialogService = {
|
|
showExecutionErrorDialog: (executionError: ExecutionErrorDialogInput) => void
|
|
showErrorDialog: (
|
|
error: Error,
|
|
options?: {
|
|
reportType?: string
|
|
[key: string]: unknown
|
|
}
|
|
) => void
|
|
}
|
|
|
|
type UseJobErrorReportingOptions = {
|
|
taskForJob: ComputedRef<TaskItemImpl | null>
|
|
copyToClipboard: CopyHandler
|
|
dialog: JobErrorDialogService
|
|
}
|
|
|
|
export const useJobErrorReporting = ({
|
|
taskForJob,
|
|
copyToClipboard,
|
|
dialog
|
|
}: UseJobErrorReportingOptions) => {
|
|
const errorMessageValue = computed(() => taskForJob.value?.errorMessage ?? '')
|
|
|
|
const copyErrorMessage = () => {
|
|
if (errorMessageValue.value) {
|
|
void copyToClipboard(errorMessageValue.value)
|
|
}
|
|
}
|
|
|
|
const reportJobError = () => {
|
|
const executionError = taskForJob.value?.executionError
|
|
if (executionError) {
|
|
dialog.showExecutionErrorDialog(executionError)
|
|
return
|
|
}
|
|
|
|
if (errorMessageValue.value) {
|
|
dialog.showErrorDialog(new Error(errorMessageValue.value), {
|
|
reportType: 'queueJobError'
|
|
})
|
|
}
|
|
}
|
|
|
|
return {
|
|
errorMessageValue,
|
|
copyErrorMessage,
|
|
reportJobError
|
|
}
|
|
}
|