Differentiate between no playbooks from api server unreachable

Fixes: https://github.com/ansible-community/ara-web/issues/9
Change-Id: I651af7f967038bc6077a8749dedc03bffa22d0ca
This commit is contained in:
Guillaume Vincent 2019-05-29 13:05:13 +02:00
parent 7dfa434849
commit acadff27db
1 changed files with 48 additions and 10 deletions

View File

@ -14,34 +14,66 @@ import {
PageSectionVariants, PageSectionVariants,
Title Title
} from "@patternfly/react-core"; } from "@patternfly/react-core";
import { CubesIcon } from "@patternfly/react-icons"; import { CubesIcon, ErrorCircleOIcon } from "@patternfly/react-icons";
import { LoadingContainer } from "../containers"; import { LoadingContainer } from "../containers";
import { getPlaybooks } from "./playbooksActions"; import { getPlaybooks } from "./playbooksActions";
import PlaybookSummary from "./PlaybookSummary"; import PlaybookSummary from "./PlaybookSummary";
export class PlaybooksContainer extends Component { export class PlaybooksContainer extends Component {
state = { state = {
isLoading: true isLoading: true,
hasError: false,
errorMessage: ""
}; };
componentDidMount() { componentDidMount() {
this.props const { getPlaybooks, config } = this.props;
.getPlaybooks() getPlaybooks()
.catch(error => console.log(error)) .catch(error => {
let errorMessage = "";
if (error.status) {
errorMessage = error.message;
} else {
errorMessage = `Server located at ${
config.apiURL
} is unreachable. Check your configuration. Verify that cross-origin requests are not blocked.`;
}
this.setState({ errorMessage, hasError: true });
})
.then(() => this.setState({ isLoading: false })); .then(() => this.setState({ isLoading: false }));
} }
render() { render() {
const { playbooks, history } = this.props; const { playbooks, history } = this.props;
const { isLoading } = this.state; const { isLoading, hasError, errorMessage } = this.state;
if (isLoading) { if (isLoading) {
return <LoadingContainer />; return <LoadingContainer />;
} }
return ( if (!isLoading && hasError) {
<PageSection variant={PageSectionVariants.default}> return (
{!isLoading && isEmpty(playbooks) && ( <PageSection variant={PageSectionVariants.default}>
<Bullseye>
<Card>
<CardBody>
<EmptyState variant={EmptyStateVariant.large}>
<EmptyStateIcon icon={ErrorCircleOIcon} />
<Title headingLevel="h5" size="lg">
Error
</Title>
<EmptyStateBody>{errorMessage}</EmptyStateBody>
</EmptyState>
</CardBody>
</Card>
</Bullseye>
</PageSection>
);
}
if (!isLoading && isEmpty(playbooks)) {
return (
<PageSection variant={PageSectionVariants.default}>
<Bullseye> <Bullseye>
<Card> <Card>
<CardBody> <CardBody>
@ -66,7 +98,12 @@ export class PlaybooksContainer extends Component {
</CardBody> </CardBody>
</Card> </Card>
</Bullseye> </Bullseye>
)} </PageSection>
);
}
return (
<PageSection variant={PageSectionVariants.default}>
{playbooks.map(playbook => ( {playbooks.map(playbook => (
<PlaybookSummary <PlaybookSummary
key={playbook.id} key={playbook.id}
@ -81,6 +118,7 @@ export class PlaybooksContainer extends Component {
function mapStateToProps(state) { function mapStateToProps(state) {
return { return {
config: state.config,
playbooks: Object.values(state.playbooks) playbooks: Object.values(state.playbooks)
}; };
} }