import { ReactNode, useRef } from 'react';
import { useTheme } from 'styled-components';
import { Box } from '../box/Box';
import { Button } from '../buttonv2/Buttonv2.component';
import { Icon } from '../icon/Icon.component';
import { BasicText } from '../text/Text.component';
import { ToastPosition, positionOutput } from './ToastPositionHelpers';
import { DurationBasedProgressBar } from './DurationBasedProgressBar';
import { useToastParameters } from './useToastParameters';
import styled from 'styled-components';
export type ToastStatus = 'success' | 'error' | 'warning' | 'info';
export type ToastProps = {
open: boolean;
message: ReactNode;
onClose: () => void;
status?: ToastStatus;
position?: ToastPosition;
autoDismiss?: boolean;
duration?: number;
icon?: React.ReactNode;
width?: React.CSSProperties['width'];
withProgressBar?: boolean;
style?: React.CSSProperties;
};
export const useGetBackgroundColor = (status: string) => {
const theme = useTheme();
switch (status) {
case 'success':
return theme.statusHealthy;
case 'error':
return theme.statusCritical;
case 'warning':
return theme.statusWarning;
default:
return theme.infoPrimary;
}
};
const useGetRgbBackgroundColor = (status: string) => {
const theme = useTheme();
switch (status) {
case 'success':
return `rgba(${theme.statusHealthyRGB}, 0.4)`;
case 'error':
return `rgba(${theme.statusCriticalRGB}, 0.4)`;
case 'warning':
return `rgba(${theme.statusWarningRGB}, 0.4)`;
default:
return theme.infoSecondary;
}
};
const defaultIconName = (status: string) => {
switch (status) {
case 'success':
return 'Check-circle';
case 'error':
return 'Times-circle';
case 'warning':
return 'Exclamation-circle';
default:
return 'Info-circle';
}
};
const DefaultIcon = ({ status }: { status: string }) => {
const color = useGetBackgroundColor(status);
const iconName = defaultIconName(status);
return