import React, { useState } from 'react'; import { Tag, Button } from 'antd'; import cn from 'classnames'; import { Loader, TextLink, NoContent, Pagination, PageTitle, Divider, Icon, } from 'UI'; import withPageTitle from 'HOCs/withPageTitle'; import { sliceListPerPage } from 'App/utils'; import AnimatedSVG, { ICONS } from 'Shared/AnimatedSVG/AnimatedSVG'; import { useModal } from 'App/components/Modal'; import CaptureRate from 'Shared/SessionSettings/components/CaptureRate'; import { BranchesOutlined } from '@ant-design/icons'; import { observer } from 'mobx-react-lite'; import { useStore } from 'App/mstore'; import ProjectKey from './ProjectKey'; import InstallButton from './InstallButton'; import AddProjectButton from './AddProjectButton'; import SiteSearch from './SiteSearch'; import NewSiteForm from './NewSiteForm'; import stl from './sites.module.css'; import { useTranslation } from 'react-i18next'; type Project = { id: string; name: string; conditionsCount: number; platform: 'web' | 'mobile'; host: string; projectKey: string; sampleRate: number; }; function Sites() { const { t } = useTranslation(); const { projectsStore, userStore } = useStore(); const user = userStore.account; const sites = projectsStore.list; const loading = projectsStore.sitesLoading; const init = projectsStore.initProject; const [searchQuery, setSearchQuery] = useState(''); const [showCaptureRate, setShowCaptureRate] = useState(true); const [activeProject, setActiveProject] = useState(null); const [page, setPage] = useState(1); const pageSize: number = 10; const isAdmin = user.admin || user.superAdmin; const filteredSites = sites.filter((site: { name: string }) => site.name.toLowerCase().includes(searchQuery.toLowerCase()), ); const { showModal, hideModal } = useModal(); function EditButton({ isAdmin, onClick, }: { isAdmin: boolean; onClick: () => void; }) { const _onClick = () => { onClick(); showModal(, { right: true }); }; return ( {project.conditionsCount > 0 ? ( ) : null}
init(project)} />
); } return (
{t('Projects')}
} actionButton={ } />
setSearchQuery(value)} />
{t('No matching results')}
} size="small" show={!loading && filteredSites.length === 0} >
{t('Project Name')}
{t('Key')}
{t('Capture Rate')}
{sliceListPerPage(filteredSites, page - 1, pageSize).map( (project: Project) => ( ), )}
updatePage(page)} limit={pageSize} />
); } export default withPageTitle('Projects - OpenReplay Preferences')( observer(Sites), );