import React, { useState } from 'react'; import { connect, ConnectedProps } from 'react-redux'; import { Tag } from 'antd'; import cn from 'classnames'; import { Loader, Button, TextLink, NoContent, Pagination, PageTitle, Divider, Icon } from 'UI'; import { init, remove, fetchGDPR, setSiteId } from 'Duck/site'; import withPageTitle from 'HOCs/withPageTitle'; import stl from './sites.module.css'; import NewSiteForm from './NewSiteForm'; import SiteSearch from './SiteSearch'; import AddProjectButton from './AddProjectButton'; import InstallButton from './InstallButton'; import ProjectKey from './ProjectKey'; 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'; type Project = { id: number; name: string; conditionsCount: number; platform: 'web' | 'mobile'; host: string; projectKey: string; sampleRate: number; }; type PropsFromRedux = ConnectedProps; const Sites = ({ loading, sites, user, init }: PropsFromRedux) => { 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(); const EditButton = ({ isAdmin, onClick }: { isAdmin: boolean; onClick: () => void }) => { const _onClick = () => { onClick(); showModal(, { right: true }); }; return {project.conditionsCount > 0 ? ( ) : null}
init(project)} />
); return (
Projects
} actionButton={ } />
setSearchQuery(value)} />
No matching results
} size="small" show={!loading && filteredSites.size === 0} >
Project Name
Key
Capture Rate
{sliceListPerPage(filteredSites, page - 1, pageSize).map((project: Project) => ( <> ))}
updatePage(page)} limit={pageSize} />
); }; const mapStateToProps = (state: any) => ({ site: state.getIn(['site', 'instance']), sites: state.getIn(['site', 'list']), loading: state.getIn(['site', 'loading']), user: state.getIn(['user', 'account']), account: state.getIn(['user', 'account']), }); const connector = connect(mapStateToProps, { init, remove, fetchGDPR, setSiteId, }); export default connector(withPageTitle('Projects - OpenReplay Preferences')(Sites));