From 56018b0d97b062653b4775d5330c0e6aaaa9d779 Mon Sep 17 00:00:00 2001 From: Ashit Rath Date: Mon, 27 Jan 2025 13:24:14 +0530 Subject: [PATCH] fix: git merge button visibility on branch change after a successful merge (#38847) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Description The `mergeSuccess` status in the reducer was not getting reset on branch change. Introduced a new action to reset it on change Fixes https://github.com/appsmithorg/appsmith/issues/38844 ## Automation /ok-to-test tags="@tag.Git" ### :mag: Cypress test results > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: > Commit: f012fbbee3bbf48f85b8262264c3cd525791a246 > Cypress dashboard. > Tags: `@tag.Git` > Spec: >
Mon, 27 Jan 2025 07:39:33 UTC ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No ## Summary by CodeRabbit - **New Features** - Enhanced merge state management with a new `resetMergeSuccessState` function - Improved ability to reset merge success state during branch selection - **Bug Fixes** - Resolved potential state persistence issues in merge operations - **Refactor** - Updated hooks and components to support more flexible merge state handling --- .../git/components/OpsModal/TabMerge/TabMergeView.tsx | 10 +++++++++- .../src/git/components/OpsModal/TabMerge/index.tsx | 2 ++ app/client/src/git/hooks/useMerge.ts | 7 +++++++ app/client/src/git/store/actions/mergeActions.ts | 6 ++++++ app/client/src/git/store/gitArtifactSlice.ts | 2 ++ 5 files changed, 26 insertions(+), 1 deletion(-) diff --git a/app/client/src/git/components/OpsModal/TabMerge/TabMergeView.tsx b/app/client/src/git/components/OpsModal/TabMerge/TabMergeView.tsx index eef1529ac5..9f90411a2b 100644 --- a/app/client/src/git/components/OpsModal/TabMerge/TabMergeView.tsx +++ b/app/client/src/git/components/OpsModal/TabMerge/TabMergeView.tsx @@ -80,6 +80,7 @@ interface TabMergeViewProps { mergeStatus: FetchMergeStatusResponseData | null; protectedBranches: FetchProtectedBranchesResponseData | null; resetMergeState: () => void; + resetMergeSuccessState: () => void; } export default function TabMergeView({ @@ -99,6 +100,7 @@ export default function TabMergeView({ mergeStatus = null, protectedBranches = null, resetMergeState = noop, + resetMergeSuccessState = noop, }: TabMergeViewProps) { const [selectedBranchOption, setSelectedBranchOption] = useState(); @@ -208,9 +210,15 @@ export default function TabMergeView({ // when user selects a branch to merge if (currentBranch && selectedBranchOption?.value) { fetchMergeStatus(currentBranch, selectedBranchOption?.value); + resetMergeSuccessState(); } }, - [currentBranch, selectedBranchOption?.value, fetchMergeStatus], + [ + currentBranch, + selectedBranchOption?.value, + fetchMergeStatus, + resetMergeSuccessState, + ], ); useEffect( diff --git a/app/client/src/git/components/OpsModal/TabMerge/index.tsx b/app/client/src/git/components/OpsModal/TabMerge/index.tsx index 0bb0be8069..dcedd36aca 100644 --- a/app/client/src/git/components/OpsModal/TabMerge/index.tsx +++ b/app/client/src/git/components/OpsModal/TabMerge/index.tsx @@ -16,6 +16,7 @@ export default function TabMerge() { mergeError, mergeStatus, resetMergeState, + resetMergeSuccessState, } = useMerge(); const { isFetchStatusLoading, status } = useStatus(); const { branches, currentBranch, fetchBranches, isFetchBranchesLoading } = @@ -42,6 +43,7 @@ export default function TabMerge() { mergeStatus={mergeStatus} protectedBranches={protectedBranches} resetMergeState={resetMergeState} + resetMergeSuccessState={resetMergeSuccessState} /> ); } diff --git a/app/client/src/git/hooks/useMerge.ts b/app/client/src/git/hooks/useMerge.ts index 1cdbadca28..444d513666 100644 --- a/app/client/src/git/hooks/useMerge.ts +++ b/app/client/src/git/hooks/useMerge.ts @@ -66,6 +66,12 @@ export default function useMerge() { } }, [artifactDef, dispatch]); + const resetMergeSuccessState = useCallback(() => { + if (artifactDef) { + dispatch(gitArtifactActions.resetMergeSuccessState({ artifactDef })); + } + }, [artifactDef, dispatch]); + return { isMergeLoading: mergeState?.loading ?? false, mergeError: mergeState?.error ?? null, @@ -77,5 +83,6 @@ export default function useMerge() { clearMergeStatus, isMergeSuccess: isMergeSuccess ?? false, resetMergeState, + resetMergeSuccessState, }; } diff --git a/app/client/src/git/store/actions/mergeActions.ts b/app/client/src/git/store/actions/mergeActions.ts index 035651c1bd..15f7c1a33d 100644 --- a/app/client/src/git/store/actions/mergeActions.ts +++ b/app/client/src/git/store/actions/mergeActions.ts @@ -40,3 +40,9 @@ export const resetMergeStateAction = createArtifactAction((state) => { return state; }); + +export const resetMergeSuccessAction = createArtifactAction((state) => { + state.ui.mergeSuccess = false; + + return state; +}); diff --git a/app/client/src/git/store/gitArtifactSlice.ts b/app/client/src/git/store/gitArtifactSlice.ts index 7109bcfbfe..e3ad784a29 100644 --- a/app/client/src/git/store/gitArtifactSlice.ts +++ b/app/client/src/git/store/gitArtifactSlice.ts @@ -85,6 +85,7 @@ import { mergeInitAction, mergeSuccessAction, resetMergeStateAction, + resetMergeSuccessAction, } from "./actions/mergeActions"; import { pollAutocommitProgressStopAction, @@ -192,6 +193,7 @@ export const gitArtifactSlice = createSlice({ mergeSuccess: mergeSuccessAction, mergeError: mergeErrorAction, resetMergeState: resetMergeStateAction, + resetMergeSuccessState: resetMergeSuccessAction, pullInit: pullInitAction, pullSuccess: pullSuccessAction, pullError: pullErrorAction,