887e66b0f9
CI/CD Pipeline / Validate - Type Check (mypy) (push) Successful in 2m26s
CI/CD Pipeline / Validate - Migration (alembic) (push) Successful in 2m28s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 3m16s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 3m17s
CI/CD Pipeline / Build Staging Web Image (push) Failing after 3m18s
CI/CD Pipeline / Build Staging API Image (push) Successful in 6m20s
CI/CD Pipeline / Validate - Code Quality (push) Successful in 7m4s
CI/CD Pipeline / Unit Tests (push) Failing after 8m0s
CI/CD Pipeline / Integration Tests (push) Successful in 3m15s
CI/CD Pipeline / CI Gate (push) Failing after 838h15m23s
CI/CD Pipeline / Production Browser E2E (push) Failing after 838h17m39s
CI/CD Pipeline / Deploy Production (push) Failing after 838h17m39s
CI/CD Pipeline / Build Production Worker Image (push) Failing after 838h17m41s
CI/CD Pipeline / Build Production Web Image (push) Failing after 838h17m41s
CI/CD Pipeline / ACR Image Cleanup (push) Failing after 838h19m20s
CI/CD Pipeline / Staging API Integration Tests (push) Failing after 838h19m21s
CI/CD Pipeline / Staging E2E Tests (push) Failing after 838h19m21s
CI/CD Pipeline / PR Build Web Image (push) Failing after 838h25m43s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Failing after 838h19m22s
CI/CD Pipeline / PR Build API Image (push) Failing after 838h25m43s
CI/CD Pipeline / Check if frontend-only change (push) Failing after 838h25m45s
CI/CD Pipeline / Canary Release to Production (push) Failing after 838h51m8s
CI/CD Pipeline / Build Production API Image (push) Failing after 838h51m10s
CI/CD Pipeline / PR Build Worker Image (push) Failing after 838h59m11s
CI/CD Pipeline / Frontend Lint (push) Failing after 838h59m13s
79 lines
2.6 KiB
TypeScript
79 lines
2.6 KiB
TypeScript
import { useState, useCallback } from "react"
|
|
|
|
/**
|
|
* 编辑器 Drawer 开关管理
|
|
* 集中管理 11 个抽屉的开关状态 + 3 个目标片段 ID + 快捷打开方法
|
|
*/
|
|
export const useEditorDrawers = () => {
|
|
/* ── 抽屉开关 ── */
|
|
const [bgmDrawerOpen, setBgmDrawerOpen] = useState(false)
|
|
const [subtitleDrawerOpen, setSubtitleDrawerOpen] = useState(false)
|
|
const [transitionDrawerOpen, setTransitionDrawerOpen] = useState(false)
|
|
const [speedDrawerOpen, setSpeedDrawerOpen] = useState(false)
|
|
const [ttsDrawerOpen, setTtsDrawerOpen] = useState(false)
|
|
const [watermarkDrawerOpen, setWatermarkDrawerOpen] = useState(false)
|
|
const [introOutroDrawerOpen, setIntroOutroDrawerOpen] = useState(false)
|
|
const [pipDrawerOpen, setPipDrawerOpen] = useState(false)
|
|
const [filterDrawerOpen, setFilterDrawerOpen] = useState(false)
|
|
const [chromaKeyDrawerOpen, setChromaKeyDrawerOpen] = useState(false)
|
|
const [stickerDrawerOpen, setStickerDrawerOpen] = useState(false)
|
|
|
|
/* ── 目标片段 ID ── */
|
|
/** 当前正在编辑转场的片段 ID(null = 全局默认转场) */
|
|
const [transitionTargetClipId, setTransitionTargetClipId] = useState<string | null>(null)
|
|
/** 当前正在调速的片段 ID */
|
|
const [speedTargetClipId, setSpeedTargetClipId] = useState<string | null>(null)
|
|
/** 当前正在配置 TTS 的片段 ID */
|
|
const [ttsTargetClipId, setTtsTargetClipId] = useState<string | null>(null)
|
|
|
|
/* ── 快捷打开 ── */
|
|
const openTransitionDrawer = useCallback((clipId?: string) => {
|
|
setTransitionTargetClipId(clipId ?? null)
|
|
setTransitionDrawerOpen(true)
|
|
}, [])
|
|
|
|
const openSpeedDrawer = useCallback((clipId: string) => {
|
|
setSpeedTargetClipId(clipId)
|
|
setSpeedDrawerOpen(true)
|
|
}, [])
|
|
|
|
const openTtsDrawer = useCallback((clipId: string) => {
|
|
setTtsTargetClipId(clipId)
|
|
setTtsDrawerOpen(true)
|
|
}, [])
|
|
|
|
return {
|
|
// 开关 state
|
|
bgmDrawerOpen,
|
|
setBgmDrawerOpen,
|
|
subtitleDrawerOpen,
|
|
setSubtitleDrawerOpen,
|
|
transitionDrawerOpen,
|
|
setTransitionDrawerOpen,
|
|
speedDrawerOpen,
|
|
setSpeedDrawerOpen,
|
|
ttsDrawerOpen,
|
|
setTtsDrawerOpen,
|
|
watermarkDrawerOpen,
|
|
setWatermarkDrawerOpen,
|
|
introOutroDrawerOpen,
|
|
setIntroOutroDrawerOpen,
|
|
pipDrawerOpen,
|
|
setPipDrawerOpen,
|
|
filterDrawerOpen,
|
|
setFilterDrawerOpen,
|
|
chromaKeyDrawerOpen,
|
|
setChromaKeyDrawerOpen,
|
|
stickerDrawerOpen,
|
|
setStickerDrawerOpen,
|
|
// 目标 ID
|
|
transitionTargetClipId,
|
|
speedTargetClipId,
|
|
ttsTargetClipId,
|
|
// 快捷方法
|
|
openTransitionDrawer,
|
|
openSpeedDrawer,
|
|
openTtsDrawer,
|
|
}
|
|
}
|