import { Component, ReactElement } from 'react'; import { observer } from 'mobx-react'; import { Link } from 'react-router-dom'; import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl'; import { To } from 'history'; import SearchInput from '../../ui/SearchInput'; import Infobox from '../../ui/Infobox'; import Loader from '../../ui/Loader'; import FAB from '../../ui/FAB'; import ServiceItem from './ServiceItem'; import Appear from '../../ui/effects/Appear'; import { H1 } from '../../ui/headline'; import Service from '../../../models/Service'; const messages = defineMessages({ headline: { id: 'settings.services.headline', defaultMessage: 'Your services', }, searchService: { id: 'settings.searchService', defaultMessage: 'Search service', }, noServicesAdded: { id: 'settings.services.noServicesAdded', defaultMessage: 'Start by adding a service.', }, noServiceFound: { id: 'settings.services.nothingFound', defaultMessage: 'Sorry, but no service matched your search term.', }, discoverServices: { id: 'settings.services.discoverServices', defaultMessage: 'Discover services', }, servicesRequestFailed: { id: 'settings.services.servicesRequestFailed', defaultMessage: 'Could not load your services', }, tryReloadServices: { id: 'settings.account.tryReloadServices', defaultMessage: 'Try again', }, updatedInfo: { id: 'settings.services.updatedInfo', defaultMessage: 'Your changes have been saved', }, deletedInfo: { id: 'settings.services.deletedInfo', defaultMessage: 'Service has been deleted', }, }); interface IProps extends WrappedComponentProps { services: Service[]; isLoading: boolean; // toggleService: any; // TODO: [TECH DEBT] check it later filterServices: any; resetFilter: () => void; goTo: (to: To, state?: any) => void; servicesRequestFailed: boolean; retryServicesRequest: () => void; status: any; searchNeedle: string | null; } @observer class ServicesDashboard extends Component { render(): ReactElement { const { services, isLoading, // toggleService, // TODO: [TECH DEBT] check it later filterServices, resetFilter, goTo, servicesRequestFailed, retryServicesRequest, status, searchNeedle = '', intl, } = this.props; return (

{intl.formatMessage(messages.headline)}

{(services.length > 0 || searchNeedle) && !isLoading && ( filterServices({ needle })} onReset={() => resetFilter()} autoFocus /> )} {!isLoading && servicesRequestFailed && ( {intl.formatMessage(messages.servicesRequestFailed)} )} {status.length > 0 && status.includes('updated') && ( {intl.formatMessage(messages.updatedInfo)} )} {status.length > 0 && status.includes('service-deleted') && ( {intl.formatMessage(messages.deletedInfo)} )} {!isLoading && services.length === 0 && !searchNeedle && (

{intl.formatMessage(messages.noServicesAdded)}

{intl.formatMessage(messages.discoverServices)}
)} {!isLoading && services.length === 0 && searchNeedle && (

{intl.formatMessage(messages.noServiceFound)}

)} {isLoading ? ( ) : ( {services.map(service => ( // toggleService({ serviceId: service.id }) // } goToServiceForm={() => goTo(`/settings/services/edit/${service.id}`) } /> ))}
)} +
); } } export default injectIntl(ServicesDashboard);