From 8cb1f722c3bd6e252b11f79aa3526c4e8c9e56ff Mon Sep 17 00:00:00 2001 From: Sahaj Jain Date: Sun, 12 Oct 2025 00:10:48 +0530 Subject: [PATCH] add reset button + update some ui --- components/dynamic-website-preview.tsx | 51 ++++++++++++++++++-------- hooks/use-website-preview.ts | 11 +++++- 2 files changed, 45 insertions(+), 17 deletions(-) diff --git a/components/dynamic-website-preview.tsx b/components/dynamic-website-preview.tsx index 4c89e521..ce82796a 100644 --- a/components/dynamic-website-preview.tsx +++ b/components/dynamic-website-preview.tsx @@ -133,11 +133,12 @@ function DynamicToolbarControls() { loadUrl, refreshIframe, openInNewTab, + reset, allowCrossOrigin, } = useDynamicWebsitePreview(); return ( -
+
setInputUrl(e.target.value)} + onBlur={(e) => { + if (e.target.value !== currentUrl) { + loadUrl(); + } + }} onKeyDown={(e) => { if (!inputUrl) return; if (e.key === "Enter") { loadUrl(); } }} - className="peer bg-input h-8 pl-8 text-sm shadow-none" + className={cn( + "peer bg-background text-foreground h-8 pl-8 text-sm shadow-none transition-all duration-200", + "focus:bg-input/50 hover:bg-input/20", + currentUrl && "pr-8" + )} /> - -
+ - + {currentUrl && ( + + )} +
); diff --git a/hooks/use-website-preview.ts b/hooks/use-website-preview.ts index 7974e9ad..c490c515 100644 --- a/hooks/use-website-preview.ts +++ b/hooks/use-website-preview.ts @@ -15,7 +15,8 @@ type Action = | { type: "SET_LOADING"; payload: boolean } | { type: "SET_LOAD_SUCCESS" } | { type: "SET_LOAD_ERROR"; payload: string } - | { type: "CLEAR_ERROR" }; + | { type: "CLEAR_ERROR" } + | { type: "RESET" }; const initialState: WebsitePreviewState = { inputUrl: "", @@ -38,6 +39,8 @@ function reducer(state: WebsitePreviewState, action: Action): WebsitePreviewStat return { ...state, isLoading: false, error: action.payload }; case "CLEAR_ERROR": return { ...state, error: null }; + case "RESET": + return initialState; default: return state; } @@ -132,6 +135,11 @@ export function useWebsitePreview({ allowCrossOrigin = false }: UseWebsitePrevie window.open(state.currentUrl, "_blank", "noopener,noreferrer"); }, [state.currentUrl]); + const reset = useCallback(() => { + clearLoadingTimeout(); + dispatch({ type: "RESET" }); + }, []); + return { ...state, iframeRef, @@ -139,6 +147,7 @@ export function useWebsitePreview({ allowCrossOrigin = false }: UseWebsitePrevie loadUrl, refreshIframe, openInNewTab, + reset, handleIframeLoad, handleIframeError, allowCrossOrigin,