Skip to content

Commit 3f208b5

Browse files
authored
feat: let users dismiss blocking error in unsupported browsers (#5158)
Ref #1818 Users want to use builder in safari and firefox even though we don't officially support them. So we will let users dismiss blocking error. <img width="522" alt="image" src="https://github.com/user-attachments/assets/4871fb06-38c9-41b9-8595-0d01a62b9f20" />
1 parent fd3e4bf commit 3f208b5

File tree

2 files changed

+32
-3
lines changed

2 files changed

+32
-3
lines changed

apps/builder/app/builder/features/blocking-alerts/alert.tsx

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1+
import { atom } from "nanostores";
2+
import { useStore } from "@nanostores/react";
13
import type { ReactNode } from "react";
24
import {
5+
Button,
36
css,
47
Flex,
58
Popover,
@@ -23,7 +26,19 @@ const contentStyle = css({
2326
color: theme.colors.foregroundDestructive,
2427
});
2528

26-
export const Alert = ({ message }: { message: string | ReactNode }) => {
29+
const $isAlertDismissed = atom(false);
30+
31+
export const Alert = ({
32+
message,
33+
isDismissable,
34+
}: {
35+
message: string | ReactNode;
36+
isDismissable?: boolean;
37+
}) => {
38+
const isAlertDismissed = useStore($isAlertDismissed);
39+
if (isAlertDismissed) {
40+
return;
41+
}
2742
return (
2843
<Popover open>
2944
<PopoverContent css={{ zIndex: theme.zIndices.max }}>
@@ -38,6 +53,14 @@ export const Alert = ({ message }: { message: string | ReactNode }) => {
3853
<Text color="contrast" align="center">
3954
{message}
4055
</Text>
56+
{isDismissable && (
57+
<Button
58+
color="destructive"
59+
onClick={() => $isAlertDismissed.set(true)}
60+
>
61+
Dismiss
62+
</Button>
63+
)}
4164
</Flex>
4265
</Flex>
4366
</PopoverContent>

apps/builder/app/builder/features/blocking-alerts/blocking-alerts.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,9 @@ export const BlockingAlerts = () => {
9393
const isPreviewMode = useStore($isPreviewMode);
9494
const loadingState = useStore($loadingState);
9595

96+
const unsupportedBrowsersMessage = useUnsupportedBrowser();
9697
// Takes the latest message, order matters
97-
const message = [useTooSmallMessage(), useUnsupportedBrowser()]
98+
const message = [useTooSmallMessage(), unsupportedBrowsersMessage]
9899
.filter(Boolean)
99100
.pop();
100101

@@ -107,5 +108,10 @@ export const BlockingAlerts = () => {
107108
return;
108109
}
109110

110-
return <Alert message={message} />;
111+
return (
112+
<Alert
113+
message={message}
114+
isDismissable={unsupportedBrowsersMessage !== undefined}
115+
/>
116+
);
111117
};

0 commit comments

Comments
 (0)