import React, { useState } from 'react'; import { connect, ConnectedProps } from 'react-redux'; import { Drawer, 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 { getInitials, sliceListPerPage } from 'App/utils'; import AnimatedSVG, { ICONS } from 'Shared/AnimatedSVG/AnimatedSVG'; import { useModal } from 'App/components/Modal'; import CaptureRate from 'Shared/SessionSettings/components/CaptureRate'; type Project = { id: number; name: string; 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 (
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} />
setShowCaptureRate(!showCaptureRate)} title='Capture Rate' closable={false} destroyOnClose > {activeProject && }
); }; 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));