import { Duration } from 'luxon'; import { observer } from 'mobx-react-lite'; import React, { useEffect } from 'react'; import { PlayerContext } from 'App/components/Session/playerContext'; import { getRE } from 'App/utils'; import TimeTable from 'Components/shared/DevTools/TimeTable'; import { CloseButton, Input, NoContent, SlideModal } from 'UI'; import BottomBlock from '../BottomBlock'; import GQLDetails from './GQLDetails'; import { useTranslation } from 'react-i18next'; export function renderStart(r) { return (
{Duration.fromMillis(r.time).toFormat('mm:ss.SSS')} {/* */}
); } function renderDefaultStatus() { return '2xx-3xx'; } function GraphQL({ panelHeight }: { panelHeight: number }) { const { player, store } = React.useContext(PlayerContext); const { time, livePlay, tabStates, currentTab } = store.get(); const { graphqlList: list = [], graphqlListNow: listNow = [] } = tabStates[currentTab]; const defaultState = { filter: '', filteredList: list, filteredListNow: listNow, // @ts-ignore current: null, currentIndex: 0, showFetchDetails: false, hasNextError: false, hasPreviousError: false, lastActiveItem: 0, }; const [state, setState] = React.useState(defaultState); const { t } = useTranslation(); function renderName(r: Record) { return (
{r.operationName}
); } const filterList = (list: any, value: string) => { const filterRE = getRE(value, 'i'); const { t } = useTranslation(); return value ? list.filter( (r: any) => filterRE.test(r.operationKind) || filterRE.test(r.operationName) || filterRE.test(r.variables), ) : list; }; const onFilterChange = ({ target: { value }, }: React.ChangeEvent) => { const filtered = filterList(list, value); setState((prevState) => ({ ...prevState, filter: value, filteredList: filtered, currentIndex: 0, })); }; const setCurrent = (item: any, index: number) => { setState((prevState) => ({ ...prevState, current: item, currentIndex: index, })); }; const onJump = ({ time }: { time: number }) => { if (!livePlay) { player.pause(); player.jump(time); } }; const closeModal = () => setState((prevState) => ({ ...prevState, current: null, showFetchDetails: false, })); useEffect(() => { const filtered = filterList(listNow, state.filter); if (filtered.length !== lastActiveItem) { setState((prevState) => ({ ...prevState, lastActiveItem: listNow.length, })); } }, [time]); const { current, currentIndex, filteredList, lastActiveItem } = state; return ( <>

{t('GraphQL')}

} isDisplayed={current != null} content={ current && ( ) } onClose={closeModal} /> {t('GraphQL')}
{[ { label: t('Start'), width: 90, render: renderStart, }, { label: t('Type'), dataKey: 'operationKind', width: 80, }, { label: t('Name'), width: 300, render: renderName, }, ]}
); } export default observer(GraphQL);