mirror of
https://github.com/khairul169/vaulterm.git
synced 2025-04-29 00:59:40 +07:00
59 lines
1.2 KiB
TypeScript
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;
|