import { Edit2, FolderClosed, FolderOpen, Layers, Lock, Palette, Ungroup, Unlock, Users } from "lucide-react" import React from "react" import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuSeparator, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, } from "@/components/ui/context-menu" import { useClipGroups } from "../../hooks/use-clip-groups" import { useTimeline } from "../../hooks/use-timeline" import { type GroupColorKey, GroupColors } from "../../types/clip-groups" import type { TimelineClip } from "../../types/timeline" interface GroupContextMenuProps { children: React.ReactNode } export function GroupContextMenu({ children }: GroupContextMenuProps) { const { uiState, project } = useTimeline() const { createGroup, ungroupClips, getGroupByClip, toggleCollapse, lockGroup, setGroupColor, createNestedSequence } = useClipGroups() const selectedClipCount = uiState.selectedClipIds.length const firstSelectedClipId = uiState.selectedClipIds[0] const group = firstSelectedClipId ? getGroupByClip(firstSelectedClipId) : null const handleCreateGroup = () => { if (!project || selectedClipCount < 2) return // Получаем выбранные клипы const selectedClips: TimelineClip[] = [] project.globalTracks.forEach((track) => { track.clips.forEach((clip) => { if (uiState.selectedClipIds.includes(clip.id)) { selectedClips.push(clip) } }) }) project.sections.forEach((section) => { section.tracks.forEach((track) => { track.clips.forEach((clip) => { if (uiState.selectedClipIds.includes(clip.id)) { selectedClips.push(clip) } }) }) }) if (selectedClips.length >= 2) { createGroup(selectedClips) } } const handleUngroup = () => { if (group) { ungroupClips(group.id) } } const handleToggleLock = () => { if (group) { lockGroup(group.id, !group.locked) } } const handleToggleCollapse = () => { if (group) { toggleCollapse(group.id) } } const handleColorChange = (color: string) => { if (group) { setGroupColor(group.id, color) } } const handleCreateNested = () => { if (!project || selectedClipCount < 1) return // Получаем выбранные клипы const selectedClips: TimelineClip[] = [] project.globalTracks.forEach((track) => { track.clips.forEach((clip) => { if (uiState.selectedClipIds.includes(clip.id)) { selectedClips.push(clip) } }) }) project.sections.forEach((section) => { section.tracks.forEach((track) => { track.clips.forEach((clip) => { if (uiState.selectedClipIds.includes(clip.id)) { selectedClips.push(clip) } }) }) }) if (selectedClips.length >= 1) { createNestedSequence(selectedClips) } } return ( {children} {/* Group operations */} {selectedClipCount >= 2 && !group && ( Group Selected Clips )} {group && ( <> Ungroup {group.collapsed ? ( <> Expand Group ) : ( <> Collapse Group )} {group.locked ? ( <> Unlock Group ) : ( <> Lock Group )} Group Color {Object.entries(GroupColors as Record).map(([key, color]) => ( handleColorChange(color)}>
{key.charAt(0).toUpperCase() + key.slice(1)} ))} Rename Group )} {/* Nested sequence */} {selectedClipCount >= 1 && ( Create Nested Sequence )} ) }