From 9a9f83ee3711b68d453d4c9421194593ae083a8f Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Mon, 4 Mar 2024 14:15:22 +0000 Subject: [PATCH 1/3] feat(site): warn user if they leave the editor without publish the version --- .../TemplateVersionEditor.tsx | 33 ++++++++++++++----- .../TemplateVersionEditorPage.tsx | 22 ++++++++----- 2 files changed, 39 insertions(+), 16 deletions(-) diff --git a/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditor.tsx b/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditor.tsx index 879ddc3abbc76..4e8811b1f2684 100644 --- a/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditor.tsx +++ b/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditor.tsx @@ -65,8 +65,8 @@ export interface TemplateVersionEditorProps { defaultFileTree: FileTree; buildLogs?: ProvisionerJobLog[]; resources?: WorkspaceResource[]; - disablePreview?: boolean; - disableUpdate?: boolean; + isBuilding?: boolean; + canPublish?: boolean; onPreview: (files: FileTree) => Promise; onPublish: () => void; onConfirmPublish: (data: PublishVersionData) => void; @@ -88,8 +88,8 @@ export interface TemplateVersionEditorProps { } export const TemplateVersionEditor: FC = ({ - disablePreview, - disableUpdate, + isBuilding, + canPublish, template, templateVersion, defaultFileTree, @@ -179,6 +179,23 @@ export const TemplateVersionEditor: FC = ({ } }, [buildLogs]); + useEffect(() => { + const onBeforeUnload = (e: BeforeUnloadEvent) => { + if (canPublish) { + e.preventDefault(); + return "You have unpublished changes. Are you sure you want to leave?"; + } + }; + + window.addEventListener("beforeunload", onBeforeUnload); + + return () => { + window.removeEventListener("beforeunload", onBeforeUnload); + }; + }, [canPublish]); + + const canBuild = !isBuilding && dirty; + return ( <>
@@ -242,7 +259,7 @@ export const TemplateVersionEditor: FC = ({ borderLeft: "1px solid #FFF", }, }} - disabled={disablePreview} + disabled={!canBuild} > = ({ /> } title="Build template (Ctrl + Enter)" - disabled={disablePreview} + disabled={!canBuild} onClick={async () => { await triggerPreview(); }} @@ -276,7 +293,7 @@ export const TemplateVersionEditor: FC = ({ Publish @@ -540,7 +557,7 @@ export const TemplateVersionEditor: FC = ({