2024-11-09 14:37:09 +00:00

59 lines
1.2 KiB
TypeScript

import { Card, GetProps, styled, Text, XStack } from "tamagui";
import Icons from "./icons";
const AlertFrame = styled(Card, {
px: "$4",
py: "$3",
bordered: true,
variants: {
variant: {
default: {},
error: {
backgroundColor: "$red2",
borderColor: "$red5",
},
},
} as const,
});
const icons: Record<string, string> = {
error: "alert-circle-outline",
};
type AlertProps = GetProps<typeof AlertFrame>;
const Alert = ({ children, variant = "default", ...props }: AlertProps) => {
return (
<AlertFrame variant={variant} {...props}>
<XStack gap="$2">
{icons[variant] != null && (
<Icons name={icons[variant] as never} size={18} />
)}
<Text fontSize="$3" f={1}>
{children}
</Text>
</XStack>
</AlertFrame>
);
};
type ErrorAlert = AlertProps & {
error?: unknown | null;
};
export const ErrorAlert = ({ error, ...props }: ErrorAlert) => {
if (!error) {
return null;
}
const message = (error as any)?.message || "Something went wrong";
return (
<Alert variant="error" {...props}>
{message}
</Alert>
);
};
export default Alert;