From 7f2ae891fae07fe6759a7d6ce4ea3e9e896e507f Mon Sep 17 00:00:00 2001 From: Nate Kelley Date: Mon, 21 Apr 2025 09:39:13 -0600 Subject: [PATCH] reset file popup changes --- .../features/popups/SaveResetFilePopup.tsx | 16 ++++++------ .../ui/layouts/PreventNavigation.tsx | 26 ++++++++++--------- .../context/Metrics/useIsMetricChanged.tsx | 20 +++++++++----- .../ChatContent/ChatInput/useChatInputFlow.ts | 5 +++- 4 files changed, 39 insertions(+), 28 deletions(-) diff --git a/web/src/components/features/popups/SaveResetFilePopup.tsx b/web/src/components/features/popups/SaveResetFilePopup.tsx index 766bb09a1..d6df93f13 100644 --- a/web/src/components/features/popups/SaveResetFilePopup.tsx +++ b/web/src/components/features/popups/SaveResetFilePopup.tsx @@ -25,15 +25,15 @@ export const SaveResetFilePopup: React.FC<{ open={open} showHotsKeys={showHotsKeys} /> - - + + ); } diff --git a/web/src/components/ui/layouts/PreventNavigation.tsx b/web/src/components/ui/layouts/PreventNavigation.tsx index cc52b29b1..44291981f 100644 --- a/web/src/components/ui/layouts/PreventNavigation.tsx +++ b/web/src/components/ui/layouts/PreventNavigation.tsx @@ -1,6 +1,6 @@ 'use client'; -import { useMemoizedFn, useMount } from '@/hooks'; +import { useMemoizedFn, useMount, useUnmount } from '@/hooks'; import { useRouter } from 'next/navigation'; import { useState, useRef, useEffect, useMemo } from 'react'; import React from 'react'; @@ -190,17 +190,19 @@ export const PreventNavigation: React.FC = React.memo( if (!isDirty) return null; return ( - + <> + + ); } ); diff --git a/web/src/context/Metrics/useIsMetricChanged.tsx b/web/src/context/Metrics/useIsMetricChanged.tsx index e157fa8c0..50617ad97 100644 --- a/web/src/context/Metrics/useIsMetricChanged.tsx +++ b/web/src/context/Metrics/useIsMetricChanged.tsx @@ -5,6 +5,7 @@ import { metricsQueryKeys } from '@/api/query_keys/metric'; import { useGetMetric } from '@/api/buster_rest/metrics'; import { compareObjectsByKeys } from '@/lib/objects'; import { useMemo } from 'react'; +import last from 'lodash/last'; export const useIsMetricChanged = ({ metricId }: { metricId: string | undefined }) => { const queryClient = useQueryClient(); @@ -23,10 +24,14 @@ export const useIsMetricChanged = ({ metricId }: { metricId: string | undefined description: x.description, chart_config: x.chart_config, file: x.file, - version_number: x.version_number + version_number: x.version_number, + versions: x.versions }) } ); + const isLatestVersion = useMemo(() => { + return currentMetric?.version_number === last(currentMetric?.versions)?.version_number; + }, [currentMetric]); const onResetMetricToOriginal = useMemoizedFn(() => { const options = metricsQueryKeys.metricsGetMetric( @@ -39,9 +44,10 @@ export const useIsMetricChanged = ({ metricId }: { metricId: string | undefined refetchCurrentMetric(); }); - const isMetricChanged = useMemo( - () => - !originalMetric || + const isMetricChanged = useMemo(() => { + if (!originalMetric || !isLatestVersion) return false; + + return ( !currentMetric || !compareObjectsByKeys(originalMetric, currentMetric, [ 'name', @@ -49,9 +55,9 @@ export const useIsMetricChanged = ({ metricId }: { metricId: string | undefined 'chart_config', 'file', 'version_number' - ]), - [originalMetric, currentMetric] - ); + ]) + ); + }, [originalMetric, currentMetric, isLatestVersion]); return { onResetMetricToOriginal, diff --git a/web/src/layouts/ChatLayout/ChatContainer/ChatContent/ChatInput/useChatInputFlow.ts b/web/src/layouts/ChatLayout/ChatContainer/ChatContent/ChatInput/useChatInputFlow.ts index 67e8b4b89..60c31a04e 100644 --- a/web/src/layouts/ChatLayout/ChatContainer/ChatContent/ChatInput/useChatInputFlow.ts +++ b/web/src/layouts/ChatLayout/ChatContainer/ChatContent/ChatInput/useChatInputFlow.ts @@ -117,5 +117,8 @@ export const useChatInputFlow = ({ textAreaRef.current?.select(); }); - return { onSubmitPreflight, onStopChat }; + return useMemo( + () => ({ onSubmitPreflight, onStopChat, isFileChanged }), + [onSubmitPreflight, onStopChat, isFileChanged] + ); };