'use client' import type { FC } from 'react' import { RiAddLine, RiFileAddLine, RiFolderAddLine, RiFolderUploadLine, RiUploadLine, } from '@remixicon/react' import * as React from 'react' import { useMemo, useState } from 'react' import { useTranslation } from 'react-i18next' import Button from '@/app/components/base/button' import { PortalToFollowElem, PortalToFollowElemContent, PortalToFollowElemTrigger, } from '@/app/components/base/portal-to-follow-elem' import SearchInput from '@/app/components/base/search-input' import { useStore, useWorkflowStore } from '@/app/components/workflow/store' import { cn } from '@/utils/classnames' import { ROOT_ID } from './constants' import { useFileOperations } from './hooks/use-file-operations' import { useSkillAssetTreeData } from './hooks/use-skill-asset-tree' import { getTargetFolderIdFromSelection } from './utils/tree-utils' type MenuItemProps = { icon: React.ElementType label: string onClick: () => void disabled?: boolean } const MenuItem: React.FC = ({ icon: Icon, label, onClick, disabled }) => ( ) const SidebarSearchAdd: FC = () => { const { t } = useTranslation('workflow') const searchValue = useStore(s => s.fileTreeSearchTerm) const storeApi = useWorkflowStore() const [showMenu, setShowMenu] = useState(false) const { data: treeData } = useSkillAssetTreeData() const selectedTreeNodeId = useStore(s => s.selectedTreeNodeId) const treeChildren = treeData?.children const targetFolderId = useMemo(() => { if (!treeChildren) return ROOT_ID return getTargetFolderIdFromSelection(selectedTreeNodeId, treeChildren) }, [selectedTreeNodeId, treeChildren]) const menuOffset = useMemo(() => ({ mainAxis: 4 }), []) const { fileInputRef, folderInputRef, isLoading, handleNewFile, handleNewFolder, handleFileChange, handleFolderChange, } = useFileOperations({ nodeId: targetFolderId, onClose: () => setShowMenu(false), }) return (
storeApi.getState().setFileTreeSearchTerm(v)} className="!h-6 flex-1 !rounded-md" placeholder={t('skillSidebar.searchPlaceholder')} /> setShowMenu(!showMenu)}>
fileInputRef.current?.click()} disabled={isLoading} /> folderInputRef.current?.click()} disabled={isLoading} />
) } export default React.memo(SidebarSearchAdd)