-
Notifications
You must be signed in to change notification settings - Fork 638
feat: node-specific error tab with selection-aware grouping and error overlay #8956
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 16 commits
Commits
Show all changes
19 commits
Select commit
Hold shift + click to select a range
aa1c25f
feat: node-specific error tab, selection-aware grouping, and error ov…
jaeone94 4fbf89a
refactor: consolidate error logic and split errorGroups by scope
jaeone94 33f136b
fix: use allErrorGroups in expandFocusedErrorGroup to restore See Err…
jaeone94 c54b470
chore: remove unused useRightSidePanelStore import from app.ts
jaeone94 cc151d3
fix: remove redundant cn() in ErrorOverlay and fix prompt error clear…
jaeone94 f48ae46
fix: fix service-level error guard and null exception_type in message
jaeone94 e02d58d
fix: clear lastNodeErrors on execution start and guard node_id in all…
jaeone94 864b14b
Merge branch 'main' into feat/node-specific-error-tab
jaeone94 2bc045f
fix: handle plain text 500 server errors in queuePrompt
jaeone94 4aa27c7
fix: hide See Error button in SectionWidgets when ShowErrorsTab is di…
jaeone94 bbb2a44
style: truncate and wrap long error messages
jaeone94 c47ae8c
feat(settings): enable ShowErrorsTab by default
jaeone94 6896998
Merge branch 'main' into feat/node-specific-error-tab
jaeone94 0960ba5
[automated] Apply ESLint and Oxfmt fixes
actions-user 0d3c9e0
refactor: address PR review feedback for error handling
jaeone94 54925c1
Merge branch 'main' into feat/node-specific-error-tab
jaeone94 ad92bc2
fix: update Playwright tests to target ErrorOverlay instead of legacy…
jaeone94 09ab537
Merge branch 'main' into feat/node-specific-error-tab
jaeone94 60b04c7
[automated] Update test expectations
invalid-email-address File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,104 @@ | ||
| <template> | ||
| <Transition | ||
| enter-active-class="transition-all duration-300 ease-out" | ||
| enter-from-class="-translate-y-3 opacity-0" | ||
| enter-to-class="translate-y-0 opacity-100" | ||
| > | ||
| <div v-if="isVisible" class="flex justify-end w-full pointer-events-none"> | ||
| <div | ||
| role="alert" | ||
| aria-live="assertive" | ||
| class="pointer-events-auto flex w-80 min-w-72 flex-col overflow-hidden rounded-lg border border-interface-stroke bg-comfy-menu-bg shadow-interface transition-colors duration-200 ease-in-out" | ||
| > | ||
| <!-- Header --> | ||
| <div class="flex h-12 items-center gap-2 px-4"> | ||
| <span class="flex-1 text-sm font-bold text-destructive-background"> | ||
| {{ errorCountLabel }} | ||
| </span> | ||
| <Button | ||
| variant="muted-textonly" | ||
| size="icon-sm" | ||
| :aria-label="t('g.close')" | ||
| @click="dismiss" | ||
| > | ||
| <i class="icon-[lucide--x] block size-5 leading-none" /> | ||
| </Button> | ||
| </div> | ||
|
|
||
| <!-- Body --> | ||
| <div class="px-4 pb-3"> | ||
| <ul class="m-0 flex list-none flex-col gap-1.5 p-0"> | ||
| <li | ||
| v-for="(message, idx) in groupedErrorMessages" | ||
| :key="idx" | ||
| class="flex items-baseline gap-2 text-sm leading-snug text-muted-foreground min-w-0" | ||
| > | ||
| <span | ||
| class="mt-1.5 size-1 shrink-0 rounded-full bg-muted-foreground" | ||
| /> | ||
| <span class="break-words line-clamp-3 whitespace-pre-wrap">{{ | ||
| message | ||
| }}</span> | ||
| </li> | ||
| </ul> | ||
| </div> | ||
|
|
||
| <!-- Footer --> | ||
| <div class="flex items-center justify-end gap-4 px-4 py-3"> | ||
| <Button variant="muted-textonly" size="unset" @click="dismiss"> | ||
| {{ t('g.dismiss') }} | ||
| </Button> | ||
| <Button variant="secondary" size="lg" @click="seeErrors"> | ||
| {{ t('errorOverlay.seeErrors') }} | ||
| </Button> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </Transition> | ||
| </template> | ||
|
|
||
| <script setup lang="ts"> | ||
| import { computed, ref } from 'vue' | ||
| import { useI18n } from 'vue-i18n' | ||
| import { storeToRefs } from 'pinia' | ||
|
|
||
| import Button from '@/components/ui/button/Button.vue' | ||
| import { useExecutionStore } from '@/stores/executionStore' | ||
| import { useRightSidePanelStore } from '@/stores/workspace/rightSidePanelStore' | ||
| import { useCanvasStore } from '@/renderer/core/canvas/canvasStore' | ||
| import { useErrorGroups } from '@/components/rightSidePanel/errors/useErrorGroups' | ||
|
|
||
| const { t } = useI18n() | ||
| const executionStore = useExecutionStore() | ||
| const rightSidePanelStore = useRightSidePanelStore() | ||
| const canvasStore = useCanvasStore() | ||
|
|
||
| const { totalErrorCount, isErrorOverlayOpen } = storeToRefs(executionStore) | ||
| const { groupedErrorMessages } = useErrorGroups(ref(''), t) | ||
|
|
||
| const errorCountLabel = computed(() => | ||
| t( | ||
| 'errorOverlay.errorCount', | ||
| { count: totalErrorCount.value }, | ||
| totalErrorCount.value | ||
| ) | ||
| ) | ||
|
|
||
| const isVisible = computed( | ||
| () => isErrorOverlayOpen.value && totalErrorCount.value > 0 | ||
| ) | ||
|
|
||
| function dismiss() { | ||
| executionStore.dismissErrorOverlay() | ||
| } | ||
|
|
||
| function seeErrors() { | ||
| if (canvasStore.canvas) { | ||
| canvasStore.canvas.deselectAll() | ||
| canvasStore.updateSelectedItems() | ||
| } | ||
|
|
||
| rightSidePanelStore.openPanel('errors') | ||
| executionStore.dismissErrorOverlay() | ||
| } | ||
| </script> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.