Skip to content

Commit 4051fef

Browse files
authored
Export ToastContainer and allow left alignment for toasts (#616)
* Export ToastContainer and allow left alignment for toasts * Make align as optional for toast * Fix incorrect toastProvider props in clickuiprovider
1 parent 6f241b3 commit 4051fef

File tree

3 files changed

+23
-8
lines changed

3 files changed

+23
-8
lines changed

src/components/ClickUIProvider/ClickUIProvider.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,15 @@ import {
22
Provider as TooltipProvider,
33
TooltipProviderProps,
44
} from "@radix-ui/react-tooltip";
5-
import { ToastProps } from "@radix-ui/react-toast";
6-
import { ToastProvider } from "@/components/Toast/Toast";
5+
import { ToastProvider, ToastProviderProps } from "@/components/Toast/Toast";
76
import { ThemeName } from "@/theme";
87
import { ThemeProvider } from "@/theme/theme";
98
import { ReactNode } from "react";
109

1110
interface Props {
1211
config?: {
1312
tooltip?: Omit<TooltipProviderProps, "children">;
14-
toast?: Omit<ToastProps, "children">;
13+
toast?: Omit<ToastProviderProps, "children">;
1514
};
1615
theme: ThemeName;
1716
children: ReactNode;

src/components/Toast/Toast.tsx

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -179,11 +179,18 @@ const Toast = ({
179179
);
180180
};
181181

182-
const Viewport = styled(RadixUIToast.Viewport)`
182+
const Viewport = styled(RadixUIToast.Viewport)<{ $align: "start" | "end" }>`
183183
--viewport-padding: 25px;
184184
position: fixed;
185185
bottom: 0;
186-
right: 0;
186+
${({ $align }) => {
187+
if ($align === "start") {
188+
return "left: 0";
189+
}
190+
return `
191+
right: 0;
192+
`;
193+
}};
187194
display: flex;
188195
flex-direction: column;
189196
padding: var(--viewport-padding);
@@ -196,7 +203,15 @@ const Viewport = styled(RadixUIToast.Viewport)`
196203
outline: none;
197204
`;
198205

199-
export const ToastProvider = ({ children, ...props }: RadixUIToast.ToastProps) => {
206+
export interface ToastProviderProps extends RadixUIToast.ToastProps {
207+
align?: "start" | "end";
208+
}
209+
210+
export const ToastProvider = ({
211+
children,
212+
align = "end",
213+
...props
214+
}: ToastProviderProps) => {
200215
const [toasts, setToasts] = useState<Map<string, ToastProps>>(new Map());
201216

202217
useEffect(() => {
@@ -234,7 +249,7 @@ export const ToastProvider = ({ children, ...props }: RadixUIToast.ToastProps) =
234249

235250
return (
236251
<RadixUIToast.Provider
237-
swipeDirection="right"
252+
swipeDirection={align === "start" ? "left" : "right"}
238253
{...props}
239254
>
240255
<ToastContext.Provider value={value}>
@@ -247,7 +262,7 @@ export const ToastProvider = ({ children, ...props }: RadixUIToast.ToastProps) =
247262
/>
248263
))}
249264
</ToastContext.Provider>
250-
<Viewport />
265+
<Viewport $align={align} />
251266
</RadixUIToast.Provider>
252267
);
253268
};

src/components/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,4 @@ export { createToast } from "./Toast/toastEmitter";
7171
export { UserIcon as ProfileIcon } from "./icons/UserIcon";
7272
export { default as VerticalStepper } from "./VerticalStepper/VerticalStepper";
7373
export { MultiAccordion } from "./MultiAccordion/MultiAccordion";
74+
export { ToastProvider } from "./Toast/Toast";

0 commit comments

Comments
 (0)