import { ShareAltOutlined } from '@ant-design/icons'; import { Button as AntButton, Switch, Tooltip, Dropdown } from 'antd'; import cn from 'classnames'; import { useModal } from "Components/Modal"; import IssuesModal from "Components/Session_/Issues/IssuesModal"; import { Link2, Keyboard } from 'lucide-react'; import { observer } from 'mobx-react-lite'; import React, { useMemo } from 'react'; import { MoreOutlined } from '@ant-design/icons' import { Icon } from 'UI'; import { PlayerContext } from 'App/components/Session/playerContext'; import { IFRAME } from 'App/constants/storageKeys'; import { useStore } from 'App/mstore'; import { checkParam, truncateStringToFit } from 'App/utils'; import SessionTabs from 'Components/Session/Player/SharedComponents/SessionTabs'; import { ShortcutGrid } from 'Components/Session_/Player/Controls/components/KeyboardHelp'; import WarnBadge from 'Components/Session_/WarnBadge'; import { toast } from "react-toastify"; import HighlightButton from './Highlight/HighlightButton'; import SharePopup from '../shared/SharePopup/SharePopup'; import QueueControls from './QueueControls'; import { Bookmark as BookmarkIcn, BookmarkCheck, Vault } from "lucide-react"; const disableDevtools = 'or_devtools_uxt_toggle'; function SubHeader(props) { const { uxtestingStore, integrationsStore, sessionStore, projectsStore, userStore, issueReportingStore, } = useStore(); const favorite = sessionStore.current.favorite; const isEnterprise = userStore.isEnterprise; const currentSession = sessionStore.current const projectId = projectsStore.siteId; const integrations = integrationsStore.issues.list; const { store } = React.useContext(PlayerContext); const { location: currentLocation = 'loading...' } = store.get(); const hasIframe = localStorage.getItem(IFRAME) === 'true'; const [hideTools, setHideTools] = React.useState(false); const [isFavorite, setIsFavorite] = React.useState(favorite); const { showModal, hideModal } = useModal(); React.useEffect(() => { const hideDevtools = checkParam('hideTools'); if (hideDevtools) { setHideTools(true); } }, []); const enabledIntegration = useMemo(() => { if (!integrations || !integrations.length) { return false; } return integrations.some((i) => i.token); }, [integrations]); const issuesIntegrationList = integrationsStore.issues.list; const handleOpenIssueModal = () => { issueReportingStore.init(); if (!issueReportingStore.projectsFetched) { issueReportingStore.fetchProjects().then((projects) => { if (projects && projects[0]) { void issueReportingStore.fetchMeta(projects[0].id); } }); } showModal( ) }; const reportingProvider = issuesIntegrationList[0]?.provider || ''; const locationTruncated = truncateStringToFit( currentLocation, window.innerWidth - 200 ); const toggleDevtools = (enabled) => { localStorage.setItem(disableDevtools, enabled ? '0' : '1'); uxtestingStore.setHideDevtools(!enabled); }; const showKbHelp = () => { showModal(, { right: true, width: 320 }); } const vaultIcon = isEnterprise ? ( ) : isFavorite ? ( ) : ( ); const toggleFavorite = () => { const onToggleFavorite = sessionStore.toggleFavorite; const ADDED_MESSAGE = isEnterprise ? 'Session added to vault' : 'Session added to your bookmarks'; const REMOVED_MESSAGE = isEnterprise ? 'Session removed from vault' : 'Session removed from your bookmarks'; onToggleFavorite(currentSession.sessionId).then(() => { toast.success(isFavorite ? REMOVED_MESSAGE : ADDED_MESSAGE); setIsFavorite(!isFavorite); }); } return ( <>
{!hideTools && (
} /> props.setActiveTab('HIGHLIGHT')} /> {vaultIcon} {isEnterprise ? 'Vault' : 'Bookmark'}
, onClick: toggleFavorite }, { key: '4', label:
Issues
, disabled: !enabledIntegration, onClick: handleOpenIssueModal, }, { key: '1', label:
Keyboard Shortcuts
, onClick: showKbHelp } ] }} > {uxtestingStore.isUxt() ? ( ) : (
)} )} {locationTruncated && ( )} ); } export default observer(SubHeader);