import { Popover, Transition } from '@headlessui/react'; import { useStore } from '@nanostores/react'; import classNames from 'classnames'; import { type Change, diffLines } from 'diff'; import { memo, useCallback, useMemo, useState } from 'react'; import { webBuilderStore } from '~/.client/stores/web-builder'; interface PageModifiedDropdownProps { onSelectPage: (pageName: string) => void; } export const PageModifiedDropdown = memo(({ onSelectPage }: PageModifiedDropdownProps) => { const pageHistory = useStore(webBuilderStore.pagesStore.pageHistory); const currentSelectedPage = useStore(webBuilderStore.editorStore.selectedDocument); const modifiedPages = Object.entries(pageHistory); const hasChanges = modifiedPages.length > 0; const [searchQuery, setSearchQuery] = useState(''); const filteredPages = useMemo(() => { return modifiedPages.filter(([pageName]) => pageName.toLowerCase().includes(searchQuery.toLowerCase())); }, [modifiedPages, searchQuery]); const handleSelectPage = useCallback( (pageName: string, close: () => void) => { // 如果是当前已选中的页面,不执行任何操作 if (pageName === currentSelectedPage) { return; } onSelectPage(pageName); webBuilderStore.currentView.set('diff'); // 关闭下拉菜单 close(); }, [onSelectPage, currentSelectedPage], ); return (
{({ open, close }: { open: boolean; close: () => void }) => ( <> 更改页面 {hasChanges && ( {modifiedPages.length} )}
setSearchQuery(e.target.value)} className="w-full pl-8 pr-3 py-1.5 text-sm rounded-lg bg-upage-elements-background-depth-1 border border-upage-elements-borderColor focus:outline-none focus:ring-2 focus:ring-blue-500/50" />
{filteredPages.length > 0 ? ( filteredPages.map(([pageName, history]) => { const isActive = pageName === currentSelectedPage; return ( ); }) ) : (

{searchQuery ? '没有匹配的页面' : '没有修改的页面'}

{searchQuery ? '尝试其他搜索' : '更改将在此处显示'}

)}
)}
); }); PageModifiedDropdown.displayName = 'PageModifiedDropdown';