refactor(editing-planner): 拆分 BgmSelector 组件,抽离 Hook + 子组件 #1009
Closed
xiaoxia
wants to merge 4 commits from
refactor/bgm-selector-split into develop
pull from: refactor/bgm-selector-split
merge into: xiaoxia:develop
xiaoxia:main
xiaoxia:feat/1714-upload-dedup
xiaoxia:feature/upload-complete-idempotency-hevc-orphan-1714
xiaoxia:develop
xiaoxia:fix/1677-review-followups
xiaoxia:feat/1677-canvas-batch-preview
xiaoxia:feat/1677-batch-generation
xiaoxia:fix/dedup-exclude-self-1702
xiaoxia:fix/dedup-zero-rate-1702
xiaoxia:fix/style-main-sync
xiaoxia:release/sync-develop-20260904
xiaoxia:fix/voice-duration-filter-and-warning-removal
xiaoxia:feature/clip-duration-voice-alignment
xiaoxia:fix/title-position-fallback-wrap-consistency
xiaoxia:fix/dedup-coverage-and-retry-bug
xiaoxia:feature/1659-dynamic-keyframe-sliding-window
xiaoxia:fix/ai-badge-overflow
xiaoxia:feat/cross-video-avoidance-1670
xiaoxia:feat/fingerprint-chunks-1657
xiaoxia:fix/ai-badge-fallback
xiaoxia:fix/extract-voice-api-path
xiaoxia:fix/ruff-b904-voices
xiaoxia:feat/segment-random-shuffle-1663
xiaoxia:fix/tts-duration-and-video-extract
xiaoxia:feat/extract-video-voice-and-source-label
xiaoxia:fix/auto-merge-race-condition
xiaoxia:diag/ref-env-test
xiaoxia:fix/upload-asset-not-visible-immediately
xiaoxia:infra/fix-main-workflows
xiaoxia:fix/ci-mypy-integ
xiaoxia:fix/disable-pr-auto-scan-schedule
xiaoxia:ci/canary-workflow
xiaoxia:fix/playwright-base-image
xiaoxia:feat/config-phase4-env-render
xiaoxia:fix/ci-production-deploy-skip
xiaoxia:fix/remove-duplicate-034-migration
xiaoxia:feat/ci-base-image-autobuild
xiaoxia:fix/preset-4items
xiaoxia:feat/smart-match-integration
xiaoxia:fix/video-duration-mismatch
xiaoxia:fix/title-preset-t-render
xiaoxia:fix/web-duplicate-rate-mapping
xiaoxia:feat/auto-duplicate-rate-user-scope
xiaoxia:fix/title-drag-pointer-events-and-size
xiaoxia:fix/smart-match-empty-results
xiaoxia:feat/title-drag-position
xiaoxia:fix/smart-match-limit-algorithm
xiaoxia:feat/title-drag-custom
xiaoxia:fix/from-assets-400-clip-config-fallback
xiaoxia:chore/pr-auto-scan-cron-15min
xiaoxia:sync/develop-to-main-v2
xiaoxia:fix/auto-merge-contexts-v2
xiaoxia:fix/psycopg2-to-psycopg3
xiaoxia:fix/prebake-ffmpeg-ci-image
xiaoxia:fix/cache-continue-on-error
xiaoxia:fix/auto-approve-contexts
xiaoxia:fix/buildx-web-cache-bust
xiaoxia:fix/ci-cache-robustness
xiaoxia:fix/check-push-paths-no-checkout
xiaoxia:fix/ci-check-push-paths-checkout
xiaoxia:fix/deploy-staging-skip-bug
xiaoxia:ci/pipeline-speedup-batch2
xiaoxia:feat/product-inline-player
xiaoxia:ci/transient-fault-auto-retry
xiaoxia:ci/image-content-verification
xiaoxia:ci/selfcheck-zombie-run-and-dedupe
xiaoxia:ci/fix-scheduled-jobs-zombie-timeout
xiaoxia:fix/test-hevc-mock-no-sysmodules
xiaoxia:fix/ingest-jobs-404-not-found
xiaoxia:feat/segment-duplication-control
xiaoxia:feat/persist-used-segments
xiaoxia:chore/remove-random-asset-mode
xiaoxia:fix/e2e-6step-generate-flow
xiaoxia:fix/audio-mime-inference
xiaoxia:fix/cover-from-final-video
xiaoxia:feat/merge-step4-step5
xiaoxia:fix/asset-thumbnails
xiaoxia:fix/thumbnail-v2
xiaoxia:fix/thumbnail-url-not-saved
xiaoxia:fix/title-position-default-top
xiaoxia:feat/from-assets-by-template-segments
xiaoxia:feat/mediakit-smart-clip-selection
xiaoxia:fix/restore-backend-files
xiaoxia:fix/cross-task-segment-dedup
xiaoxia:fix/ui-template-thumb-and-material-grid
xiaoxia:fix/cover-title-consistency
xiaoxia:fix/voice-library-id-passthrough
xiaoxia:fix/mark-clips-ready-after-from-assets
xiaoxia:fix/ass-fontsize-compensation-1.35
xiaoxia:fix/call-clips-from-assets
xiaoxia:fix/font-name-map-noto-sans-sc
xiaoxia:fix/restore-preview-step4-5-step7-video
xiaoxia:fix/editor-clips-random-start-time
xiaoxia:fix/remove-preview-and-generate-count
xiaoxia:fix/title-line-height
xiaoxia:fix/title-margin-top-120
xiaoxia:fix/title-size-max-128
xiaoxia:fix/preview-coord-system
xiaoxia:fix/title-fullwidth-slash
xiaoxia:fix/voice-preview-materials-v2
xiaoxia:fix/voice-preview-materials
xiaoxia:fix/preview-resolution
xiaoxia:feat/server-rendered-preview
xiaoxia:fix/source-edit-plan-id-v2
xiaoxia:chore/cleanup-template-editor-generation
xiaoxia:feat/sync-edit-plan-clips
xiaoxia:refactor/worker-use-edit-plan-clips
xiaoxia:fix/cover-title-style-e2
xiaoxia:fix/batch-writeback-once
xiaoxia:fix/edit-flow-data-chain
xiaoxia:fix/cover-ffmpeg-title-overlay
xiaoxia:fix/mediakit-completed-status
xiaoxia:fix/cover-mediakit-timeout
xiaoxia:fix/cover-extract-from-source-asset
xiaoxia:fix/webcodecs-decode-failure-fallback
xiaoxia:feat/hevc-auto-transcode
xiaoxia:fix/ai-code-review-blocking-v2
xiaoxia:fix/ai-code-review-blocking
xiaoxia:fix/hevc-description
xiaoxia:fix/infinity-samples
xiaoxia:fix/all-canvas-issues
xiaoxia:fix/promise-timeout
xiaoxia:fix/demux-async
xiaoxia:fix/optional-chaining-safety
xiaoxia:fix/frontend-segment-extraction
xiaoxia:fix/canvas-description-cache-and-keyframe
xiaoxia:fix/fullbox-offset-and-title-split
xiaoxia:fix/preview-player-4-issues
xiaoxia:fix/canvas-black-screen-voice-validation
xiaoxia:fix/canvas-player-issues
xiaoxia:fix/preview-player-v8
xiaoxia:fix/preview-player-v7
xiaoxia:fix/preview-player-v5
xiaoxia:fix/preview-player-v4
xiaoxia:fix/preview-player-v3
xiaoxia:fix/preview-player-v2
xiaoxia:fix/preview-player-playback-and-title
xiaoxia:fix/assets-batch-endpoint
xiaoxia:fix/usePreviewAssets-infinite-loop
xiaoxia:fix/token-refresh-bugs
xiaoxia:cleanup/remove-unused-preview-props
xiaoxia:refactor/frontend-preview-player
xiaoxia:fix/cover-url-in-finalize
xiaoxia:feat/upload-cover-and-title-in-generate
xiaoxia:fix/batch-download-session-flaky-v2
xiaoxia:fix/test-clip-mock-fields
xiaoxia:feat/title-style-panel-to-step5
xiaoxia:fix/flaky-batch-download-session-test
xiaoxia:fix/clips-api-response-structure
xiaoxia:fix/proactive-token-refresh
xiaoxia:fix/token-refresh-test-fix
xiaoxia:feat/clips-asset-url
xiaoxia:fix/canvas-video-resolution-match
xiaoxia:fix/worker-cjk-fonts
xiaoxia:fix/preview-title-render
xiaoxia:fix/cover-extract-frames
xiaoxia:fix/render-bool-config-crash
xiaoxia:fix/restore-showTitlePreview-prop
xiaoxia:fix/ts-errors-pr1382
xiaoxia:fix/bool-config-crash
xiaoxia:fix/e2e-step-order-adapt
xiaoxia:feat/title-preview-right-panel
xiaoxia:fix/title-config-param-mapping
xiaoxia:feat/title-preview-canvas-v2
xiaoxia:fix/auto-merge-ai-review-check
xiaoxia:fix/cover-title-overlay
xiaoxia:fix/cover-title-asr-path
xiaoxia:fix/cover-500-logger-and-source-plan-fallback
xiaoxia:fix/flaky-test-batch-download
xiaoxia:fix/auto-format-merge-commit-consistency
xiaoxia:fix/cover-generation-unify
xiaoxia:fix/custom-title-render
xiaoxia:fix/video-ratio-resolution-parsing
xiaoxia:fix/cover-templates-double-encoded-config
xiaoxia:fix/api-ffmpeg-missing
xiaoxia:fix/double-slash-oss-path
xiaoxia:fix/cover-types-import-paths
xiaoxia:refactor/decouple-cover-types-from-editing-planner
xiaoxia:optimize/cover-generation-speed
xiaoxia:fix/cover-issues-1341
xiaoxia:fix/confirm-api-path-1341
xiaoxia:fix/cover-error-logging-1347
xiaoxia:fix/remove-unused-useRef-import
xiaoxia:fix/cover-generation-issues-1341
xiaoxia:fix/totalDuration-duplicate-develop
xiaoxia:feat/cover-generation-ui-1341
xiaoxia:fix/cover-generation-progress-modal
xiaoxia:fix/remove-selected-template-text
xiaoxia:feature/unify-preview-confirm-render-path
xiaoxia:fix/generate-fallback-user-assets
xiaoxia:fix/worker-entrypoint-w-flag
xiaoxia:fix/cover-stub-placeholder-url
xiaoxia:fix/cover-field-name-1317
xiaoxia:fix/thumbnail-yuv-format
xiaoxia:fix/cover-templates-error-handling
xiaoxia:feat/cover-templates-api-integration
xiaoxia:feat/cover-settings-redesign
xiaoxia:fix/audio-only-clips-in-filter-complex
xiaoxia:fix/preview-voice-ids-fallback
xiaoxia:fix/confirm-generation-api-develop
xiaoxia:fix/sync-confirm-api-to-develop
xiaoxia:fix/issue-1294-preview-voiceover-asr-fallback
xiaoxia:fix/issue-1294-preview-voiceover-asr-init
xiaoxia:fix/worker-concurrency-default-4
xiaoxia:fix/auto-approve-skipped-status
xiaoxia:fix/e2e-title-input-timing
xiaoxia:bugfix/1294-preview-voice-injection
xiaoxia:fix/e2e-title-placeholder-v2
xiaoxia:fix/ci-lower-coverage-threshold
xiaoxia:fix/e2e-title-placeholder
xiaoxia:fix/preview-improvements
xiaoxia:feature/1286-preview-count-validation-and-worker-concurrency
xiaoxia:bugfix/1286-staging-ci-shell-quoting
xiaoxia:feature/1286-can-generate-auto-repair
xiaoxia:bugfix/1286-staging-ci-tests-fix
xiaoxia:fix/ci-concurrency-lock
xiaoxia:feature/1280-preview-generation-speedup
xiaoxia:fix/staging-tests-npm-retry
xiaoxia:feature/1256-random-asset-selection-preview
xiaoxia:feat/issue-1256-auto-smart-match
xiaoxia:fix/quota-test-wave78-pro-sync
xiaoxia:feat/upload-voice-modal-visual
xiaoxia:feat/remove-result-panel-and-plan-info
xiaoxia:fix/quota-pro-tier-fallback
xiaoxia:fix/asset-create-optional-project-id
xiaoxia:feature/integrate-cover-generation
xiaoxia:fix/step6-cover-ratio-label
xiaoxia:feat/step4-title-autocomplete
xiaoxia:fix/canvas-titlecentering-v2
xiaoxia:fix/skip-source-audio-in-mix
xiaoxia:feat/no-video-cleanup-and-centering-fix
xiaoxia:feat/title-preview-canvas
xiaoxia:feat/unify-asset-selection
xiaoxia:fix/pip-removal-and-title-wrap
xiaoxia:fix/preset-font-preview
xiaoxia:fix/preview-strategy-id-from-template
xiaoxia:fix/title-preview-overlay
xiaoxia:fix/preview-generation-3-issues
xiaoxia:fix/1221-auth-401-interceptor
xiaoxia:feat/preset-voice-previews-round2
xiaoxia:feat/preset-voice-previews
xiaoxia:feat/mediakit-ai-cover-1208
xiaoxia:fix/download-assets-allow-asset-ids-only
xiaoxia:feat/preview-generation-1197
xiaoxia:feat/voice-clone-preview-1195
xiaoxia:refactor/bind-contact-modal-split
xiaoxia:test/wave207-inmemory-small-repos
xiaoxia:test/wave219-template-clip-config
xiaoxia:refactor/asset-selector-split
xiaoxia:test/wave218-batch-download
xiaoxia:test/wave214-text-splitter
xiaoxia:test/wave213-bind-contact
xiaoxia:test/wave212-login-use-case
xiaoxia:test/wave211-password-reset
xiaoxia:test/wave210-verification-code
xiaoxia:test/wave209-jwt-auth
xiaoxia:test/wave203-bgm-mixer-pure
xiaoxia:test/wave202-multi-track-mixer-pure
xiaoxia:test/wave200-pip-engine-pure
xiaoxia:test/wave191-edit-template
xiaoxia:test/wave208-password-auth
xiaoxia:test/wave206-inmemory-repos
xiaoxia:test/wave205-path-security
xiaoxia:test/wave204-text-splitter-pagination
xiaoxia:test/wave201-concat-engine-pure
xiaoxia:refactor/generate-video-split
xiaoxia:test/wave199-sticker-engine-pure
xiaoxia:refactor/video-player-hook
xiaoxia:test/wave198-shared-ai-service
xiaoxia:test/wave196-auth-session-store
xiaoxia:test/wave197-asset-compat
xiaoxia:test/wave195-verification-code
xiaoxia:test/wave194-tts-config
xiaoxia:test/wave193-video-share
xiaoxia:test/wave192-media-validation
xiaoxia:refactor/generate-form-state
xiaoxia:test/wave190-preset-voices
xiaoxia:test/wave189-preset-bgm
xiaoxia:test/wave188-video-concat
xiaoxia:test/wave187-speed-config
xiaoxia:test/wave186-subtitle
xiaoxia:refactor/task-table
xiaoxia:test/wave185-audio-track-config
xiaoxia:test/wave184-intro-outro-config
xiaoxia:test/wave183-voice-presets
xiaoxia:test/wave182-config-schemas
xiaoxia:fix/develop-unit-tests-failure
xiaoxia:fix/frontend-unit-test-smoke-test
xiaoxia:fix/ci-unit-test-coverage-threshold
xiaoxia:fix/tts-panel-voices-api-v2
xiaoxia:fix/voice-clone-preview-play-1195
xiaoxia:test-branch-123
xiaoxia:fix/main-deploy-staging-manual
xiaoxia:merge/develop-ci-scripts
xiaoxia:fix/vitest-exclude-e2e
xiaoxia:test/wave173-pip-config
xiaoxia:fix/ci-staging-deploy-and-notify-0728
xiaoxia:fix/ci-production-build-bugs-0728
xiaoxia:fix/preview-cleanup-ssh-default
xiaoxia:fix/daily-check-outputs
xiaoxia:fix/auto-merge-short-job
xiaoxia:fix/build-production-needs-tests
xiaoxia:fix/pr-path-filter-skip
xiaoxia:fix/code-review-ci-gate
xiaoxia:test/wave164-filter-presets
xiaoxia:fix/pr-automation-concurrency
xiaoxia:fix/ci-pr-automation-optimization-0728
xiaoxia:refactor/generate-result-panel
xiaoxia:test/wave163-watermark-config
xiaoxia:refactor/step6-cover-settings
xiaoxia:test/wave162-asset-scoring
xiaoxia:refactor/use-product-actions
xiaoxia:test/wave161-domain-entities
xiaoxia:test/wave160-job-domain
xiaoxia:refactor/use-timeline-menus
xiaoxia:refactor/step7-confirm
xiaoxia:refactor/use-step5-voice
xiaoxia:test/wave140-watermark-config
xiaoxia:test/wave139-url-security
xiaoxia:test/wave159-template-clip-config
xiaoxia:test/wave158-edit-plan
xiaoxia:test/wave157-domain-small-modules
xiaoxia:test/wave156-generation-task
xiaoxia:test/wave155-generated-video
xiaoxia:test/wave154-classification
xiaoxia:test/wave153-edit-plan-clip
xiaoxia:fix/ci-p1-p2-optimizations-0728
xiaoxia:test/wave152-duplication
xiaoxia:test/wave151-quota
xiaoxia:fix/clone-upload-422-and-types-path
xiaoxia:test/wave172-color-grade-config
xiaoxia:test/wave171-subtitle-style
xiaoxia:test/wave170-chroma-key-config
xiaoxia:test/wave169-ass-subtitle-builder
xiaoxia:test/wave168-transition-presets
xiaoxia:test/wave167-sticker-config
xiaoxia:test/wave166-plan-generator-utils
xiaoxia:refactor/green-screen-panel
xiaoxia:test/wave165-trim-config
xiaoxia:refactor/clip-mutations
xiaoxia:fix/ci-p0-bugs-0728
xiaoxia:refactor/material-form
xiaoxia:refactor/clone-voice-card
xiaoxia:refactor/tag-selector
xiaoxia:fix/voice-material-types-path
xiaoxia:refactor/use-voice-material-actions
xiaoxia:fix/ruff-config-pyproject
xiaoxia:test/wave144-tts-job
xiaoxia:test/wave142-transition-presets
xiaoxia:fix/ci-gate-exit-code-develop
xiaoxia:fix/ci-gate-exit-code-main
xiaoxia:fix/auto-fix-loop-detection
xiaoxia:refactor/asset-selector
xiaoxia:refactor/generate-video-hook
xiaoxia:test/auto-format-verify-0727
xiaoxia:refactor/voice-materials-p4
xiaoxia:feature/ai-review-status
xiaoxia:refactor/use-voice-materials-split
xiaoxia:refactor/voice-library-deepen
xiaoxia:refactor/generate-page-phase1
xiaoxia:refactor/router-split
xiaoxia:refactor/my-voices
xiaoxia:refactor/clone-modal
xiaoxia:refactor/title-library
xiaoxia:refactor/timeline-panel-phase3-pr
xiaoxia:feature/ai-review-status-develop
xiaoxia:feature/auto-fix-all-prs-develop
xiaoxia:test/wave132-wechat-oauth-unit
xiaoxia:test/ci-format-auto-fix-0727
xiaoxia:test/wave131-password-hasher
xiaoxia:test/wave130-jwt-service
xiaoxia:test/wave129-asset-scoring
xiaoxia:test/wave128-url-security
xiaoxia:test/wave127-template-data-unit
xiaoxia:test/wave126-small-domain-unit
xiaoxia:test/wave125-entities-unit
xiaoxia:test/wave124-quota-unit
xiaoxia:test/wave123-job-unit
xiaoxia:refactor/asset-operations-hook
xiaoxia:test/wave117-speed-config
xiaoxia:feature/auto-fix-all-prs
xiaoxia:test/wave118-chroma-key-config
xiaoxia:test/wave119-noise-reduction-config
xiaoxia:test/wave120-ass-subtitle-builder
xiaoxia:test/wave121-xfade-builder
xiaoxia:test/wave122-trim-config
xiaoxia:test/wave91-generation-plan-builder
xiaoxia:test/wave92-asset-scoring
xiaoxia:test/wave93-duplication-domain
xiaoxia:test/wave94-media-validation
xiaoxia:test/wave95-domain-entities
xiaoxia:test/wave96-job-domain
xiaoxia:test/wave97-quota-domain
xiaoxia:test/wave98-preset-bgm
xiaoxia:test/wave99-small-domain-modules
xiaoxia:refactor/duplication-detail
xiaoxia:refactor/upload-voice-modal-split
xiaoxia:refactor/product-detail
xiaoxia:refactor/task-history
xiaoxia:refactor/use-clip-operations-split
xiaoxia:refactor/template-management-hook
xiaoxia:refactor/asset-library-deepen
xiaoxia:refactor/duplication-results-split
xiaoxia:refactor/clip-detail-section-split
xiaoxia:refactor/layer-config-split
xiaoxia:refactor/cover-selector-split
xiaoxia:refactor/template-editor-api
xiaoxia:refactor/assets-api
xiaoxia:refactor/editing-planner-api
xiaoxia:refactor/voice-clone-api
xiaoxia:refactor/tts-api
xiaoxia:refactor/products-api
xiaoxia:refactor/templates-api
xiaoxia:refactor/voices-api
xiaoxia:refactor/tasks-api
xiaoxia:refactor/titles-api
xiaoxia:refactor/subscription-api
xiaoxia:refactor/duplication-api
xiaoxia:refactor/bgm-projects-tags-api
xiaoxia:refactor/task-center
xiaoxia:refactor/voice-clone-page
xiaoxia:refactor/home-page
xiaoxia:refactor/template-library
xiaoxia:refactor/step5-voice-hook
xiaoxia:refactor/editing-drawers
xiaoxia:refactor/use-step4-title-split
xiaoxia:refactor/use-edit-plan-clips-split
xiaoxia:refactor/editing-planner-deepen
xiaoxia:refactor/editing-planner-types-split
xiaoxia:refactor/product-library-deepen
xiaoxia:refactor/upgrade-subscription-split
xiaoxia:fix/test-agent-docs-path
xiaoxia:fix/ci-daily-check-dood-mount
xiaoxia:fix/ci-daily-check-shell-bash
xiaoxia:refactor/my-templates-split
xiaoxia:fix/ci-format-cleanup-20260727
xiaoxia:test/wave116-trim-config
xiaoxia:test/wave115-watermark-config
xiaoxia:test/wave114-color-grade-config
xiaoxia:test/wave113-transition-config
xiaoxia:test/wave112-intro-outro-config
xiaoxia:test/wave111-audio-track-config
xiaoxia:test/wave110-pip-config
xiaoxia:test/wave90-plan-generator-utils
xiaoxia:test/wave88-streaming-service
xiaoxia:test/wave109-sticker-config
xiaoxia:test/wave108-ai-parsing
xiaoxia:test/wave107-subtitle-style
xiaoxia:test/wave106-video-concat-config
xiaoxia:test/wave105-render-layer-utils
xiaoxia:test/wave104-template-clip-converter
xiaoxia:test/wave100-application-modules
xiaoxia:test/wave103-clip-operations
xiaoxia:test/wave101-video-filter-builder
xiaoxia:pr-932
xiaoxia:test/wave102-template-effect-mapper
xiaoxia:sync/ci-scripts-to-main-20260726
xiaoxia:fix/frontend-lint-clip-type-import
xiaoxia:test/wave89-asset-analyzer-split
xiaoxia:test/wave87-worker-deep-coverage
xiaoxia:refactor/editing-planner-round2
xiaoxia:fix/ci-monitor-workflows-909-910-911
xiaoxia:fix/ci-daily-check-hardcoded-creds-912
xiaoxia:fix/ci-acr-cleanup-pr-days-908
xiaoxia:fix/ci-code-quality-905-914
xiaoxia:fix/ci-preview-deploy-907
xiaoxia:refactor/timeline-panel-phase1-pr
xiaoxia:refactor/timeline-panel-phase1
xiaoxia:refactor/product-library-phase3-final
xiaoxia:fix/ci-unit-tests-collection-906
xiaoxia:refactor/product-library-phase2-pr
xiaoxia:refactor/product-library-phase1
xiaoxia:refactor/editing-planner-phase3
xiaoxia:refactor/editing-planner-phase1
xiaoxia:test/wave86-worker-layer-coverage
xiaoxia:test/wave80-module-registry-subtitle-more
xiaoxia:test/wave85-exceptions-bgm-utils-subtitle-deep
xiaoxia:test/wave84-classification-tts-config-entities-more
xiaoxia:test/wave83-generated-video-verification-video-share-more
xiaoxia:test/wave82-exceptions-template-generated-video-more
xiaoxia:test/wave81-filter-transition-voice-presets-more
xiaoxia:test/wave79-subtitle-generator-text-splitter-more
xiaoxia:test/wave78-duplication-domain
xiaoxia:test/wave75-more-domain-utils
xiaoxia:test/wave77-generation-task-more-domain
xiaoxia:test/wave76-tts-job-state-machine
xiaoxia:test/wave74-classification-bgm-utils-subtitle
xiaoxia:refactor/asset-library-phase2
xiaoxia:fix/052-generation-task-bgm-config-migration
xiaoxia:fix/dedup-pure-test-db-import
xiaoxia:refactor/voice-library-phase3
xiaoxia:feat/ci-canary-release
xiaoxia:feat/ci-sync-renovate-to-main
xiaoxia:test/wave70-dedup-render-subtitles-tts-engine
xiaoxia:test/wave56-worker-more-engines
xiaoxia:refactor/voice-library-phase1
xiaoxia:chore/ci-acr-cleanup-main-sync
xiaoxia:chore/ci-acr-cleanup-enhance
xiaoxia:chore/ci-migration-upgrade-sync-main
xiaoxia:chore/ci-migration-validation-upgrade
xiaoxia:test/wave61-title-library-config-base
xiaoxia:test/wave58-in-memory-repositories
xiaoxia:fix/ci-preview-deploy-npm-ci
xiaoxia:fix/ci-worker-cache-optimization
xiaoxia:fix/staging-shell-sh-to-bash-main
xiaoxia:fix/staging-shell-sh-to-bash
xiaoxia:fix/ruff-f841-b007-detector
xiaoxia:fix/ruff-f401-cleanup
xiaoxia:test/unit-test-wave35
xiaoxia:ci/port-env-cleanup
xiaoxia:chore/sync-main-ci-config
xiaoxia:refactor/unified-enums
xiaoxia:fix/staging-e2e-container-cleanup
xiaoxia:fix/ci-systematic-p0-round2
xiaoxia:fix/jwt-tampered-test-flaky
xiaoxia:fix/black-format-ai-files
xiaoxia:fix/ci-staging-e2e-dood
xiaoxia:fix/wechat-callback-token-order
xiaoxia:fix/ci-systematic-p0-fix
xiaoxia:fix/ci-worker-base-registry
xiaoxia:fix/code-quality-black-format
xiaoxia:fix/ruff-format-2files
xiaoxia:feat/p3-1-tts-job-tests
xiaoxia:feat/p3-1-auth-handlers-tests
xiaoxia:feat/p3-1-wechat-oauth-tests
xiaoxia:feat/video-share-backend
xiaoxia:fix/ai-review-critical-match
xiaoxia:emergency-disk-cleanup
xiaoxia:fix/ci-simplify-merge-speed
xiaoxia:fix/ci-integration-oom-workers
xiaoxia:fix/flaky-jwt-tampered-test
xiaoxia:fix/462-pass-through-watermark
xiaoxia:test/p3-1-wave29-template-use-cases-tests
xiaoxia:fix/633-virtual-clip-transition-duration
xiaoxia:test/p3-1-wave26-tts-workflow-tests
xiaoxia:test/p3-1-wave23-cosyvoice-service-tests
xiaoxia:test/p3-1-wave24-register-password-reset-tests
xiaoxia:test/p3-1-wave28-cosyvoice-service-tests
xiaoxia:fix/login-token-order-bug
xiaoxia:fix/ci-architecture-bugs-3items
xiaoxia:test/p3-1-wave9-auth-service-tests
xiaoxia:test/p3-1-wave7-entities-domain-tests
xiaoxia:feat/ci-pytest-xdist-parallel
xiaoxia:feat/p3-1-validation-utils-tests
xiaoxia:feat/p3-1-module-registry-tests
xiaoxia:feat/p3-1-text-splitter-tests
xiaoxia:fix/ci-auto-merge-short-job-mode
xiaoxia:fix/auto-merge-no-approval-needed
xiaoxia:fix/vitest-related-flag-bug
xiaoxia:fix/worker-build-dood-fallback
xiaoxia:ci/repeated-failure-detection
xiaoxia:ci/validate-parallelization-phase2
xiaoxia:fix/auto-fix-ci-skip
xiaoxia:ci/failure-diagnosis-enhanced
xiaoxia:ci/validate-parallelization
xiaoxia:ci/worker-layered-cache
xiaoxia:fix/check-ci-status-order
xiaoxia:ci/autofix-distinguish-agent
xiaoxia:ci/cache-optimization-plus
xiaoxia:fix/558-wechat-login-fixes
xiaoxia:feat/558-wechat-login-polish
xiaoxia:test/unit-test-coverage-p3-batch2
xiaoxia:opt/restore-registry-cache-to
xiaoxia:p2-6-ci-health-daily
xiaoxia:fix/frontend-ts-error-message-type
xiaoxia:fix/ci-autoapprove-match-branch-protection
xiaoxia:fix/ci-autofix-checkout-force
xiaoxia:fix/ci-p02-checkout-retry
xiaoxia:fix/ci-black-format-worker
xiaoxia:fix/549-preset-voice-one-click-gen
xiaoxia:fix/ci-p01-preview-ssh-key
xiaoxia:fix/ci-pg-container-ip
xiaoxia:feature/agentloop-ci-trace
xiaoxia:feat/smart-edit-flow-restructure
xiaoxia:feat/smart-edit-cover-migration
xiaoxia:feat/frontend-coverage-phase3
xiaoxia:feat/frontend-coverage-phase2
xiaoxia:fix/p1-preset-voice-no-sound
xiaoxia:ci/fix-frontend-test-exclude-e2e
xiaoxia:fix/p1-asset-list-status-and-pagination
xiaoxia:fix/asset-batch-delete-crash
xiaoxia:test/cleanup-verify
xiaoxia:test/preview-e2e-verify
xiaoxia:fix/hevc-encoding-filter-and-auto-select
xiaoxia:ci/p1-4-preview-environment
xiaoxia:fix/download-asset-storage-key
xiaoxia:ci/p1-3-coverage-gate
xiaoxia:ci/fix-auto-approve-sha-and-scheduling
xiaoxia:ci/fix-scheduling-and-sha
xiaoxia:ci/fix-scheduling-label-mismatch
xiaoxia:ci/fix-build-review-prompt
xiaoxia:fix/docker-login-v2
xiaoxia:fix/docker-login-yaml
xiaoxia:feature/p1-2-edit-plan-render-link
xiaoxia:test/auto-merge-verify
xiaoxia:test/ci-trigger-rebase-verify
xiaoxia:test/auto-approve-validation
xiaoxia:feat/ci-auto-approve
xiaoxia:fix/buildx-builder-name-conflict
xiaoxia:fix/auto-merge-token
xiaoxia:fix/registry-login-v3
xiaoxia:fix/registry-login-v2
xiaoxia:fix/ci-build-registry-login
xiaoxia:feature/ai-code-review
xiaoxia:feat/ci-frontend-path-filter
xiaoxia:fix/migration-safety-push-event
xiaoxia:feat/runner-layered-scheduling
xiaoxia:feat/staging-auto-rollback
xiaoxia:feat/registry-retry-stability
xiaoxia:feat/ci-deploy-concurrency
xiaoxia:feat/ci-concurrency-fix
xiaoxia:fix/ci-validate-pg-container
xiaoxia:feat/ci-validate-isolated-pg
xiaoxia:feat/save-plan-as-template
xiaoxia:feat/frontend-ci-speedup
xiaoxia:ci/runner-diagnose
xiaoxia:feat/edit-plan-clips-api
xiaoxia:fix/voice-clone-ssrf
xiaoxia:fix/migration-safety-reliability
xiaoxia:fix/edit-plan-resume-editing
xiaoxia:fix/mypy-hardgate
xiaoxia:feat/mypy-incremental
xiaoxia:fix/task-id-prefix-polling
xiaoxia:fix/generation-put-status-restriction
xiaoxia:debug/ci-build-runs-on
xiaoxia:fix/ci-disable-registry-cache-to
xiaoxia:fix/ci-build-checkout-print
xiaoxia:debug/ci-build-schedule
xiaoxia:fix/runner-build-verify
xiaoxia:test/runner-build-verify
xiaoxia:test/build-farm-label
xiaoxia:fix/ci-build-checkout-parser
xiaoxia:fix/ci-build-checkout-syntax
xiaoxia:fix/ci-build-yaml
xiaoxia:feat/split-build-workflow-v2
xiaoxia:chore/cleanup-main-workflows
xiaoxia:feat/acr-registry-migration
xiaoxia:feat/split-build-workflow
xiaoxia:feat/ci-runner-saas-label
xiaoxia:fix/add-result-count-migration
xiaoxia:fix/matrix-run-newline
xiaoxia:ci/matrix-build-parallelism
xiaoxia:feature/product-center-ui-upgrade
xiaoxia:fix/hard-cut-use-concat
xiaoxia:fix/b007-unused-loop-var
xiaoxia:fix/b011-assert-false
xiaoxia:ci/local-cache-optimization
xiaoxia:fix/migration-diff-ci
xiaoxia:fix/frontend-lint-cache-validation
xiaoxia:ci/registry-cache-stability-fix
xiaoxia:fix/edit-plan-p0-asset-ids-and-p1-fixes
xiaoxia:fix/incremental-scan-api-based
xiaoxia:fix/unified-render-black-format
xiaoxia:fix/ci-incremental-scan-api-based
xiaoxia:fix/edit-plan-result-count-and-logs
xiaoxia:fix/prettier-format-frontend
xiaoxia:fix/ci-trigger-branch-patterns
xiaoxia:perf/web-build-cache-p1
xiaoxia:fix/eslint-npx-version-mismatch
xiaoxia:feat/ci-incremental-lint
xiaoxia:feat/ruff-replace-flake8
xiaoxia:fix/frontend-lint-npx-local
xiaoxia:fix/worker-pythonpath
xiaoxia:feat/worker-image-slimming
xiaoxia:fix/staging-ssh-deploy-call
xiaoxia:fix/staging-ssh-syntax
xiaoxia:feat/staging-ssh-deploy
xiaoxia:fix/code-quality-batch1
xiaoxia:fix/ci-bot-fix-pr
xiaoxia:feat/production-healthcheck
xiaoxia:fix/tech-debt-security-round2
xiaoxia:feat/staging-healthcheck-ci-v2
xiaoxia:temp-clean-npm-cache
xiaoxia:feat/ci-notify-final
xiaoxia:fix/frontend-type-debt-round2
xiaoxia:fix/deploy-notify-continue-on-error
xiaoxia:fix/render-engine-security-p0-p1
xiaoxia:feat/ci-notify-card-and-cache
xiaoxia:feature/task-center-page
xiaoxia:feat/ci-p2-optimization
xiaoxia:fix/pr312-security-debt-p1
xiaoxia:feat/ci-runner-layered
xiaoxia:feat/staging-healthcheck-ci
xiaoxia:fix/ci-buildx-builder
xiaoxia:feat/ci-parallel-build
xiaoxia:feat/multi-track-mix-subtitle-concat
xiaoxia:feat/changelog-auto-generate
xiaoxia:docs/audit-report-20260714
xiaoxia:feat/runner-label-routing
xiaoxia:ops/runner-labels
xiaoxia:feat/release-scripts-clean
xiaoxia:fix/deploy-production-ssh-key
xiaoxia:feat/ci-security-scans
xiaoxia:feat/release-scripts
xiaoxia:feat/video-speed-control
xiaoxia:fix/e2e-unroute-all-stability
xiaoxia:feat/cover-reverse-sticker
xiaoxia:feat/transition-engine
xiaoxia:fix/stub-generation-task-repository-filtered-methods
xiaoxia:feat/video-trimming
xiaoxia:feat/chroma-key-and-noise-reduction
xiaoxia:feat/watermark-intro-outro
xiaoxia:feat/bgm-mixing
xiaoxia:feat/picture-in-picture
xiaoxia:feat/tts-voiceover
xiaoxia:feat/template-and-plan-backend
xiaoxia:fix/build-script-grep-set-e
xiaoxia:feat/color-grading-engine
xiaoxia:feat/asr-auto-subtitles
xiaoxia:feat/video-center-backend
xiaoxia:feat/asset-batch-operations
xiaoxia:fix/build-cache-to-driver
xiaoxia:fix/e2e-disable-gpu
xiaoxia:fix/build-cache-tag
xiaoxia:fix/delete-204-response-body
xiaoxia:fix/ci-quick-fix
xiaoxia:ops/downgrade-runners
xiaoxia:cleanup/phase4-backend-p0
xiaoxia:bugfix/pip-break-system-packages-env
xiaoxia:cleanup/phase4-frontend-p2
xiaoxia:test-ci-verification
xiaoxia:fix/format-all-black-isort-flake8
xiaoxia:feature/ci-verification
xiaoxia:cleanup/phase4-frontend-p0p1
xiaoxia:ops/register-saas-runners
xiaoxia:fix/ci-runs-on-label
xiaoxia:fix/black-isort-format-fix
xiaoxia:fix/ci-pip-and-concurrency
xiaoxia:fix/pip-break-system-packages-compat
xiaoxia:ops/install-cmd-agent
xiaoxia:fix/pip-compatibility-all-runners
xiaoxia:cleanup/phase3-frontend
xiaoxia:feat/ci-security-scanning
xiaoxia:feat/frontend-build-gate
xiaoxia:fix/black-format-check-migration-safety
xiaoxia:ci/migration-safety-mypy
xiaoxia:ci/unify-cicd-config
xiaoxia:docs/ci-runner-planning
xiaoxia:feat/npm-audit-frontend
xiaoxia:cleanup/phase3-backend
xiaoxia:cleanup/phase2-backend
xiaoxia:fix/runner-labels
xiaoxia:cleanup/phase2-frontend
xiaoxia:ci/deploy-script-versioning
xiaoxia:feat/ci-vulture-dead-code
xiaoxia:feat/build-optimization
xiaoxia:feat/frontend-cache-optimization
xiaoxia:fix/redis-url-config
xiaoxia:feat/render-metrics
xiaoxia:cleanup/phase1-backend-v2
xiaoxia:cleanup/frontend-phase1-v2
xiaoxia:fix/develop-black-format
xiaoxia:cleanup/phase1-backend
xiaoxia:fix/generation-task-feature-flag
xiaoxia:cleanup/frontend-phase1
xiaoxia:feat/docker-cache-branch-isolation
xiaoxia:feat/ci-pr-gate-optimization
xiaoxia:feat/stream-copy-optimization
xiaoxia:fix/ffmpeg-timeout-protection
xiaoxia:feat/internal-render-download-api
xiaoxia:fix/dedup-float32-json
xiaoxia:fix/render-compare-p1
xiaoxia:fix/render-edit-plan-bugs
xiaoxia:feature/fix-format-render-adapter
xiaoxia:feat/unified-render-phase2
xiaoxia:feat/unified-render-phase1
xiaoxia:feat/ci-notify-all-jobs-v2
xiaoxia:feat/ci-notify-all-jobs
xiaoxia:fix/asset-status-enum-compat
xiaoxia:fix/generation-project-asset-download
xiaoxia:ci/runner-fix
xiaoxia:fix/classification-status-done-enum
xiaoxia:ci/runner-label-fix
xiaoxia:debug/cmd-agent
xiaoxia:temp/runner-expander
xiaoxia:temp/cmd-agent-fix
xiaoxia:temp/expand-runner
xiaoxia:feat/ci-split-v2
xiaoxia:feat/ci-split-integration-tests
xiaoxia:fix/voice-clone-source-audio-url-sign
xiaoxia:feat/task-queue-rate-limit
xiaoxia:fix/voice-clone-integration-test-assertions
xiaoxia:feat/ci-coverage-gate-and-notify
xiaoxia:fix/ci-validate-cache-exclude
xiaoxia:debug/cosyvoice-418-request-logging
xiaoxia:fix/cosyvoice-v3-flash-model
xiaoxia:fix/generation-task-enqueue-failure
xiaoxia:fix/cosyvoice-v3-voice-names
xiaoxia:fix/cosyvoice-full-rewrite
xiaoxia:feature/generation-logging-minimal
xiaoxia:fix/p02-deep-root-cause
xiaoxia:fix/p03-fps-setpts-order
xiaoxia:fix/p02-oss-credential-validation
xiaoxia:feat/worker-concurrency-env
xiaoxia:fix/p02-p03-deep-fix
xiaoxia:fix/generated-video-url-403
xiaoxia:fix/oneclick-gen-p0-fixes
xiaoxia:fix/ingest-job-library-id-length
xiaoxia:feat/app-version-in-dockerfile
xiaoxia:fix/cryptography-version
xiaoxia:fix/generation-task-status
xiaoxia:feature/ci-optimization
xiaoxia:feature/test-quality
xiaoxia:feature/ci-full-audit-fix
xiaoxia:feature/optimize-docker-tags
xiaoxia:feat/use-local-registry-mirrors
xiaoxia:feat/add-p1-api-tests
xiaoxia:feat/add-p1-e2e-tests
xiaoxia:feat/add-daily-health-check
xiaoxia:feat/add-performance-baseline
xiaoxia:feat/add-p0-e2e-tests
xiaoxia:fix/chunked-upload-route-order
xiaoxia:feat/add-p0-api-tests
xiaoxia:fix/config-standardization
xiaoxia:feat/editing-planner-frontend
xiaoxia:fix/editing-planner-mock-data
xiaoxia:feat/video-editing-modes-design
No Reviewers
Dismiss Review
Are you sure you want to dismiss this review?
No Label
Milestone
No items
No Milestone
Projects
Clear projects
No project
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: xiaoxia/xiaoxia-saas#1009
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "refactor/bgm-selector-split"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
变更说明
拆分 BgmSelector 组件(273 行),按职责拆分为目录结构:
主文件 273 → 120 行(-56%)
导入路径保持不变,向后兼容。
CI全绿,自动审批通过。
CI全绿,自动审批通过。
代码审查结果 - PR #1009
⚠️ 问题(3个需要修改)
useBgmSelector.ts 第58行:
useEffect依赖loadPresets导致搜索时频繁触发 API 请求。loadPresets的依赖数组包含activeCategory和keyword,而useEffect又依赖loadPresets。这意味着每当keyword状态改变(用户输入字符时),loadPresets引用变化,进而触发useEffect执行 API 请求。这会导致搜索框输入时每个字符都发起一次请求,且index.tsx中的Search组件配置了onSearch,造成了逻辑冲突和性能浪费。useEffect应仅在open变化时触发;分类切换和搜索提交时手动调用loadPresets,或者将keyword从loadPresets的依赖中移除,改为通过参数传递。useBgmSelector.ts 第46行:API 请求失败时未清空旧数据,导致 UI 展示错误。
loadPresets的catch块中仅提示了错误信息,未调用setPresets([])。如果用户在有数据的情况下切换分类导致请求失败,列表仍会显示上一个分类的数据。catch块中添加setPresets([])。useBgmSelector.ts 第68行:音频资源未彻底释放,存在内存泄漏风险。
handlePreview中创建新的Audio对象前,仅调用了audioRef.current?.pause()并覆盖了引用。旧的 Audio 对象可能仍在进行网络请求(缓冲),且未被销毁。if (audioRef.current) { audioRef.current.pause(); audioRef.current.src = ''; audioRef.current.load(); }或将旧对象置空。💡 建议(1个可选)
formatDuration函数定义在组件内部,每次渲染都会重新创建函数。formatDuration提取到组件外部作为纯函数工具,或使用useCallback包裹(提取到外部最佳)。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能
🤖 由 AI 代码审查机器人自动生成 | 2026-07-27 08:55:12 | 模型:
🚀 预览环境已部署
🗑️ 预览环境已清理
PR #1009 已关闭或合并,对应的预览环境已被清理。
Pull request closed