import React from "react"; import { css, keyframes } from "@emotion/css"; import { Bullseye, Card, Button, TextContent, Text, ButtonProps, Backdrop, EmptyStateIcon, EmptyState, EmptyStateBody, EmptyStateActions, EmptyStateFooter, } from "@patternfly/react-core"; import { WarningTriangleIcon, ErrorCircleOIcon } from "@patternfly/react-icons"; import globalWarningColor100 from "@patternfly/react-tokens/dist/js/global_warning_color_100"; import globalDangerColor100 from "@patternfly/react-tokens/dist/js/global_danger_color_100"; import { useLocation, useParams } from "react-router-dom"; const bounce = keyframes` from, 20%, 53%, 80%, to { transform: translate3d(0,0,0); } 40%, 43% { transform: translate3d(0, -30px, 0); } 70% { transform: translate3d(0, -15px, 0); } 90% { transform: translate3d(0,-4px,0); } `; const classes = { icon: css({ fontSize: "6rem", animation: `${bounce} 1s ease infinite`, transformOrigin: "center bottom", }), } as const; type Props = { code?: string; message?: string; additionalDetails?: string; /** A list of actions, the first entry is considered primary and the rest are secondary. */ actions?: Array>; }; const ErrorPage: React.FC = (props) => { const params = useParams(); const location = useLocation(); const { code = params.code ?? "500", message = location.state?.message ?? "That's on us...", additionalDetails, actions = [], } = props; const [primaryAction, ...otherActions] = actions; return ( <> {code} {message} {additionalDetails ?? {additionalDetails}} {actions.length > 0 && (