import { Icon } from '@teambit/evangelist.elements.icon'; import classNames from 'classnames'; import { useSearchParams } from 'react-router-dom'; import React, { useCallback } from 'react'; import { MenuWidgetIcon } from '@teambit/ui-foundation.ui.menu-widget-icon'; import { Tooltip } from '@teambit/design.ui.tooltip'; import { useNavigate, useLocation } from '@teambit/base-react.navigation.link'; import { useLiveControls } from '@teambit/compositions.ui.composition-live-controls'; import styles from './compositions-panel.module.scss'; import type { Composition } from '../../composition'; export type CompositionsPanelProps = { compositions: Composition[]; onSelectComposition: (composition: Composition) => void; onToggleLiveControls?: () => void; hasLiveControls?: boolean; liveControlsActive?: boolean; active?: Composition; url: string; isScaling?: boolean; includesEnvTemplate?: boolean; useNameParam?: boolean; } & React.HTMLAttributes; export function CompositionsPanel({ url, compositions, isScaling, onSelectComposition: onSelect, onToggleLiveControls, hasLiveControls, liveControlsActive, active, includesEnvTemplate, useNameParam, className, ...rest }: CompositionsPanelProps) { const { setTimestamp } = useLiveControls(); const shouldAddNameParam = useNameParam || (isScaling && includesEnvTemplate === false); const location = useLocation(); const [searchParams] = useSearchParams(); const versionFromQueryParams = searchParams.get('version'); const navigate = useNavigate(); const handleSelect = useCallback( (selected: Composition) => { onSelect && onSelect(selected); if (selected === active) return; setTimestamp(0); }, [onSelect, active, setTimestamp] ); const onCompositionCodeClicked = useCallback( (composition: Composition) => (e: React.MouseEvent) => { e.preventDefault(); setTimestamp(0); const queryParams = new URLSearchParams(); if (versionFromQueryParams) { queryParams.set('version', versionFromQueryParams); } const basePath = location?.pathname.split('/~compositions')[0]; navigate(`${basePath}/~code/${composition.filepath}?${queryParams.toString()}#search=${composition.identifier}`); }, [location?.pathname, navigate, setTimestamp, versionFromQueryParams] ); return (
    {compositions.map((composition) => { const href = shouldAddNameParam ? `${url}&name=${composition.identifier}` : `${url}&${composition.identifier}`; return (
  • handleSelect(composition)}> {composition.displayName}
    {hasLiveControls && onToggleLiveControls && composition === active && ( )}
  • ); })}
); }