[PR #32063] refactor: extract hooks and add tests for text-generation Result component #33532

Closed
opened 2026-02-21 20:53:27 -05:00 by yindo · 0 comments
Owner

Original Pull Request: https://github.com/langgenius/dify/pull/32063

State: closed
Merged: No


Summary

Refactor the Result component (web/app/components/share/text-generation/result/index.tsx): Reduced complexity from 86/100 to ~20/100 and lines from 608 to ~130 by extracting all state management, side effects, and business logic into a custom useTextGeneration hook, and extracting workflow SSE event handlers into a createWorkflowCallbacks factory function.
Reorganize file structure: Moved sub-components (header.tsx, content.tsx) into a components/ subdirectory and created a hooks/ subdirectory for the extracted use-text-generation.ts and workflow-callbacks.ts, improving module separation.
Add comprehensive test coverage: Created test suites for all refactored modules (index.spec.tsx, use-text-generation.spec.ts, workflow-callbacks.spec.ts) achieving 99.6% statement, 97.1% branch, 98.4% function, and 100% line coverage for the hooks directory. Tests cover handleStop with active tasks, SSE callback handling, timeout scenarios, file processing, validation edge cases, markNodesStopped recursive traversal, and workflow lifecycle events.

Checklist

  • This change requires a documentation update, included: Dify Document
  • I understand that this PR may be closed in case there was no previous discussion or issues. (This doesn't apply to typos!)
  • I've added a test for each change that was introduced, and I tried as much as possible to make a single atomic change.
  • I've updated the documentation accordingly.
  • I ran make lint and make type-check (backend) and cd web && npx lint-staged (frontend) to appease the lint gods
**Original Pull Request:** https://github.com/langgenius/dify/pull/32063 **State:** closed **Merged:** No --- ## Summary Refactor the Result component (web/app/components/share/text-generation/result/index.tsx): Reduced complexity from 86/100 to ~20/100 and lines from 608 to ~130 by extracting all state management, side effects, and business logic into a custom useTextGeneration hook, and extracting workflow SSE event handlers into a createWorkflowCallbacks factory function. Reorganize file structure: Moved sub-components (header.tsx, content.tsx) into a components/ subdirectory and created a hooks/ subdirectory for the extracted use-text-generation.ts and workflow-callbacks.ts, improving module separation. Add comprehensive test coverage: Created test suites for all refactored modules (index.spec.tsx, use-text-generation.spec.ts, workflow-callbacks.spec.ts) achieving 99.6% statement, 97.1% branch, 98.4% function, and 100% line coverage for the hooks directory. Tests cover handleStop with active tasks, SSE callback handling, timeout scenarios, file processing, validation edge cases, markNodesStopped recursive traversal, and workflow lifecycle events. ## Checklist - [ ] This change requires a documentation update, included: [Dify Document](https://github.com/langgenius/dify-docs) - [x] I understand that this PR may be closed in case there was no previous discussion or issues. (This doesn't apply to typos!) - [x] I've added a test for each change that was introduced, and I tried as much as possible to make a single atomic change. - [x] I've updated the documentation accordingly. - [x] I ran `make lint` and `make type-check` (backend) and `cd web && npx lint-staged` (frontend) to appease the lint gods
yindo added the pull-request label 2026-02-21 20:53:27 -05:00
yindo closed this issue 2026-02-21 20:53:27 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: langgenius/dify#33532