import React from 'react'; import { connect } from 'react-redux'; import withPageTitle from 'HOCs/withPageTitle'; import { Loader, Button, Tooltip, TextLink, NoContent } from 'UI'; import { init, remove, fetchGDPR } from 'Duck/site'; import { RED, YELLOW, GREEN, STATUS_COLOR_MAP } from 'Types/site'; import stl from './sites.module.css'; import NewSiteForm from './NewSiteForm'; import { confirm, PageTitle } from 'UI'; import SiteSearch from './SiteSearch'; import AddProjectButton from './AddProjectButton'; import InstallButton from './InstallButton'; import ProjectKey from './ProjectKey'; import { useModal } from 'App/components/Modal'; import { getInitials } from 'App/utils'; import AnimatedSVG, { ICONS } from 'Shared/AnimatedSVG/AnimatedSVG'; import cn from 'classnames' const STATUS_MESSAGE_MAP = { [RED]: ' There seems to be an issue (please verify your installation)', [YELLOW]: "We're collecting data from time to time (perhaps low traffic)", [GREEN]: 'All good!', }; const NEW_SITE_FORM = 'NEW_SITE_FORM'; @connect( (state) => ({ 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']), }), { init, remove, fetchGDPR, } ) @withPageTitle('Projects - OpenReplay Preferences') class Sites extends React.PureComponent { state = { searchQuery: '', }; edit = (site) => { this.props.init(site); this.setState({ modalContent: NEW_SITE_FORM }); }; remove = async (site) => { if ( await confirm({ header: 'Projects', confirmation: `Are you sure you want to delete this Project? We won't be able to record anymore sessions.`, }) ) { this.props.remove(site.id); } }; render() { const { loading, sites, user } = this.props; const isAdmin = user.admin || user.superAdmin; const filteredSites = sites.filter((site) => site.name.toLowerCase().includes(this.state.searchQuery.toLowerCase())); return ( Projects} actionButton={} /> this.setState({ searchQuery: value })} /> No matching results. } size="small" show={!loading && filteredSites.size === 0} > Project Name Key {filteredSites.map((_site) => ( {getInitials(_site.name)} {_site.host} this.props.init(_site)} /> ))} ); } } export default Sites; function EditButton({ isAdmin, onClick }) { const { showModal, hideModal } = useModal(); const _onClick = () => { onClick(); showModal(); }; return ; }