import React from 'react'; import { observer } from 'mobx-react-lite'; import { useTranslation } from 'react-i18next'; import { Input } from 'antd'; import { VList, VListHandle } from 'virtua'; import { PlayerContext } from 'App/components/Session/playerContext'; import JumpButton from '../JumpButton'; import { useRegExListFilterMemo } from '../useListFilter'; import BottomBlock from '../BottomBlock'; import { NoContent, Icon } from 'UI'; import { InfoCircleOutlined } from '@ant-design/icons'; import { mockData } from './__mock'; import { Segmented } from 'antd'; import { LongAnimationTask } from './type'; import Script from './Script' import TaskTimeline from "./TaskTimeline"; interface Row extends LongAnimationTask { time: number; } function LongTaskPanel() { const { t } = useTranslation(); const [tab, setTab] = React.useState('all'); const _list = React.useRef(null); const { player, store } = React.useContext(PlayerContext); const [searchValue, setSearchValue] = React.useState(''); const { currentTab, tabStates } = store.get(); const longTasks: LongAnimationTask[] = mockData; //tabStates[currentTab]?.longTasksList || []; const filteredList = useRegExListFilterMemo( longTasks, (task: LongAnimationTask) => [ task.name, task.scripts.map((script) => script.name).join(','), task.scripts.map((script) => script.sourceURL).join(','), ], searchValue, ) const onFilterChange = (e: React.ChangeEvent) => { const value = e.target.value; setSearchValue(value); }; const onRowClick = (time: number) => { player.jump(time); }; const rows: Row[] = React.useMemo(() => { const rowMap = filteredList.map((task) => ({ ...task, time: task.time ?? task.startTime, })) if (tab === 'blocking') { return rowMap.filter((task) => task.blockingDuration > 0); } return rowMap; }, [filteredList.length, tab]); const blockingTasks = rows.filter((task) => task.blockingDuration > 0); return (
{t('Long Tasks')}
{t('Blocking')} ({blockingTasks.length})
), value: 'blocking', }, ]} />
{t('No Data')} } size="small" show={filteredList.length === 0} > {rows.map((task) => ( ))}
); } function LongTaskRow({ task, onJump, }: { task: Row; onJump: (time: number) => void; }) { const [expanded, setExpanded] = React.useState(false); return (
setExpanded(!expanded)} >
{expanded ? ( <>
First UI event timestamp:
{task.firstUIEventTimestamp.toFixed(2)} ms
Scripts:
{task.scripts.map((script, index) => (