e8f7788e56
AI Code Review / AI Code Review (pull_request) Failing after 0s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 21s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 32s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 54s
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m43s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 2m2s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 21s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m18s
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m20s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 22s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 3m38s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 3m41s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 17s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Failing after 22s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 47m35s
42 lines
1.1 KiB
TypeScript
42 lines
1.1 KiB
TypeScript
import type { EditingTemplate } from "@/api/editing-planner"
|
|
import type { ClipData } from "../types"
|
|
|
|
/**
|
|
* 计算所有片段的总时长
|
|
*/
|
|
export function calculateTotalDuration(clips: ClipData[]): number {
|
|
return clips.reduce((sum, c) => sum + c.duration, 0)
|
|
}
|
|
|
|
/**
|
|
* 获取当前选中的模板
|
|
*/
|
|
export function getCurrentTemplate(
|
|
templates: EditingTemplate[],
|
|
loadedTemplateId: string | null,
|
|
): EditingTemplate | undefined {
|
|
return templates.find((t) => t.id === loadedTemplateId)
|
|
}
|
|
|
|
/**
|
|
* 根据分类和搜索词筛选模板
|
|
*/
|
|
export function getFilteredTemplates(
|
|
templates: EditingTemplate[],
|
|
currentFilter: string,
|
|
searchQuery: string,
|
|
): EditingTemplate[] {
|
|
return templates.filter((t) => {
|
|
if (currentFilter !== "全部" && t.category !== currentFilter) return false
|
|
if (searchQuery && !t.name.toLowerCase().includes(searchQuery.toLowerCase())) return false
|
|
return true
|
|
})
|
|
}
|
|
|
|
/**
|
|
* 获取当前选中的片段
|
|
*/
|
|
export function getSelectedClip(clips: ClipData[], selectedClipId: string | null): ClipData | null {
|
|
return clips.find((c) => c.id === selectedClipId) || null
|
|
}
|