2021-07-21 08:59:52 +00:00
|
|
|
import { makeStyles } from "@saleor/macaw-ui";
|
2019-06-19 14:40:52 +00:00
|
|
|
import classNames from "classnames";
|
2019-08-09 10:26:22 +00:00
|
|
|
import React from "react";
|
2019-06-19 14:40:52 +00:00
|
|
|
|
2019-12-03 15:28:40 +00:00
|
|
|
const useStyles = makeStyles(
|
|
|
|
theme => ({
|
|
|
|
"@keyframes skeleton-animation": {
|
|
|
|
"0%": {
|
|
|
|
opacity: 0.6
|
|
|
|
},
|
|
|
|
"100%": {
|
|
|
|
opacity: 1
|
|
|
|
}
|
2019-06-19 14:40:52 +00:00
|
|
|
},
|
2019-12-03 15:28:40 +00:00
|
|
|
primary: {
|
|
|
|
"&$skeleton": {
|
|
|
|
background: theme.palette.primary.main
|
|
|
|
}
|
|
|
|
},
|
|
|
|
skeleton: {
|
|
|
|
animation: "skeleton-animation .75s linear infinite forwards alternate",
|
|
|
|
background: theme.palette.background.default,
|
|
|
|
borderRadius: 4,
|
|
|
|
display: "block",
|
|
|
|
height: "0.8em",
|
|
|
|
margin: "0.2em 0"
|
2019-06-19 14:40:52 +00:00
|
|
|
}
|
2019-12-03 15:28:40 +00:00
|
|
|
}),
|
|
|
|
{ name: "Skeleton" }
|
|
|
|
);
|
2019-06-19 14:40:52 +00:00
|
|
|
|
2019-10-30 14:34:24 +00:00
|
|
|
interface SkeletonProps {
|
2019-06-19 14:40:52 +00:00
|
|
|
className?: string;
|
2019-08-09 11:14:35 +00:00
|
|
|
primary?: boolean;
|
2019-06-19 14:40:52 +00:00
|
|
|
style?: React.CSSProperties;
|
2021-08-16 13:44:00 +00:00
|
|
|
children?: React.ReactNode;
|
2019-06-19 14:40:52 +00:00
|
|
|
}
|
|
|
|
|
2019-10-30 14:34:24 +00:00
|
|
|
const Skeleton: React.FC<SkeletonProps> = props => {
|
2021-08-16 13:44:00 +00:00
|
|
|
const { className, primary, style, children } = props;
|
2019-10-30 14:34:24 +00:00
|
|
|
|
|
|
|
const classes = useStyles(props);
|
|
|
|
|
2021-08-16 13:44:00 +00:00
|
|
|
return children ? (
|
|
|
|
(children as React.ReactElement)
|
|
|
|
) : (
|
2019-08-09 11:14:35 +00:00
|
|
|
<span
|
2021-05-16 11:38:53 +00:00
|
|
|
data-test-id="skeleton"
|
2019-08-09 11:14:35 +00:00
|
|
|
className={classNames(classes.skeleton, className, {
|
|
|
|
[classes.primary]: primary
|
|
|
|
})}
|
|
|
|
style={style}
|
|
|
|
>
|
2019-06-19 14:40:52 +00:00
|
|
|
‌
|
|
|
|
</span>
|
2019-10-30 14:34:24 +00:00
|
|
|
);
|
|
|
|
};
|
2019-06-19 14:40:52 +00:00
|
|
|
|
|
|
|
Skeleton.displayName = "Skeleton";
|
|
|
|
export default Skeleton;
|