Line data Source code
1 : /*
2 : * Copyright (C) 2019 Red Hat, Inc.
3 : * SPDX-License-Identifier: LGPL-2.1-or-later
4 : */
5 :
6 710 : import React from "react";
7 : import { Button } from "@patternfly/react-core/dist/esm/components/Button/index.js";
8 : import type { ButtonProps } from "@patternfly/react-core/dist/esm/components/Button/index.js";
9 : import {
10 : EmptyStateActions, EmptyState, EmptyStateBody, EmptyStateFooter, EmptyStateVariant
11 : } from "@patternfly/react-core/dist/esm/components/EmptyState/index.js";
12 : import type { EmptyStateProps } from "@patternfly/react-core/dist/esm/components/EmptyState/index.js";
13 : import { Spinner } from "@patternfly/react-core/dist/esm/components/Spinner/index.js";
14 : import "./cockpit-components-empty-state.css";
15 :
16 238 : export const EmptyStatePanel = ({
17 238 : title,
18 238 : paragraph,
19 238 : loading = false,
20 238 : icon,
21 238 : action,
22 238 : isActionInProgress = false,
23 238 : onAction,
24 238 : actionVariant = "primary",
25 238 : secondary,
26 238 : headingLevel = "h1"
27 238 : }: {
28 : title?: EmptyStateProps["titleText"],
29 : paragraph?: React.ReactNode,
30 : loading?: boolean,
31 : icon?: EmptyStateProps["icon"],
32 : action?: React.ReactNode | string,
33 : isActionInProgress?: boolean,
34 : onAction?: ButtonProps["onClick"],
35 : actionVariant?: ButtonProps["variant"],
36 : secondary?: React.ReactNode,
37 : headingLevel?: EmptyStateProps['headingLevel'],
38 238 : }) => {
39 49 : const slimType = title || paragraph ? "" : "slim";
40 76 : const emptyStateHeaderIcon = loading ? Spinner : icon;
41 :
42 238 : return (
43 238 : <EmptyState headingLevel={headingLevel} titleText={title} variant={EmptyStateVariant.full} {...emptyStateHeaderIcon && { icon: emptyStateHeaderIcon }}>
44 238 : <EmptyStateBody>
45 238 : {paragraph}
46 238 : </EmptyStateBody>
47 225 : {(action || secondary) &&
48 82 : <EmptyStateFooter>
49 71 : { action && (typeof action == "string"
50 48 : ? <Button variant={actionVariant} className={slimType}
51 48 : isLoading={isActionInProgress}
52 48 : isDisabled={isActionInProgress}
53 48 : onClick={onAction}>
54 48 : {action}
55 48 : </Button>
56 55 : : action)}
57 44 : { secondary && <EmptyStateActions>{secondary}</EmptyStateActions> }
58 82 : </EmptyStateFooter>}
59 238 : </EmptyState>
60 : );
61 238 : };
|