import React, { useCallback } from "react"; import styled from "styled-components"; import { AUTOCOMMIT_IN_PROGRESS_MESSAGE, COMMIT_CHANGES, createMessage, DISCARD_AND_PULL_SUCCESS, GIT_SETTINGS, MERGE, } from "ee/constants/messages"; import AnalyticsUtil from "ee/utils/AnalyticsUtil"; import { GitOpsTab } from "../../constants/enums"; import { GitSettingsTab } from "../../constants/enums"; import ConnectButton from "./ConnectButton"; import QuickActionButton from "./QuickActionButton"; import Statusbar from "../Statusbar"; import getPullBtnStatus from "./helpers/getPullButtonStatus"; import noop from "lodash/noop"; import BranchButton from "./BranchButton"; const Container = styled.div` height: 100%; display: flex; align-items: center; `; interface QuickActionsViewProps { currentBranch: string | null; discard: (successMessage: string) => void; isAutocommitEnabled: boolean; isAutocommitPolling: boolean; isBranchPopupOpen: boolean; isConnectPermitted: boolean; isDiscardLoading: boolean; isFetchStatusLoading: boolean; isInitialized: boolean; isConnected: boolean; isProtectedMode: boolean; isPullFailing: boolean; isPullLoading: boolean; isStatusClean: boolean; isTriggerAutocommitLoading: boolean; pull: () => void; statusBehindCount: number; statusChangeCount: number; toggleConnectModal: (open: boolean) => void; toggleOpsModal: (open: boolean, tab: keyof typeof GitOpsTab) => void; toggleSettingsModal: ( open: boolean, tab: keyof typeof GitSettingsTab, ) => void; toggleBranchPopup: (open: boolean) => void; } function QuickActionsView({ currentBranch = null, discard = noop, isAutocommitEnabled = false, isAutocommitPolling = false, isBranchPopupOpen = false, isConnected = false, isConnectPermitted = false, isDiscardLoading = false, isFetchStatusLoading = false, isInitialized = false, isProtectedMode = false, isPullFailing = false, isPullLoading = false, isStatusClean = true, isTriggerAutocommitLoading = false, pull = noop, statusBehindCount = 0, statusChangeCount = 0, toggleBranchPopup = noop, toggleConnectModal = noop, toggleOpsModal = noop, toggleSettingsModal = noop, }: QuickActionsViewProps) { const { isDisabled: isPullDisabled, message: pullTooltipMessage } = getPullBtnStatus({ isStatusClean, isProtectedMode, isPullFailing, statusBehindCount, }); const isPullButtonLoading = isDiscardLoading || isPullLoading || isFetchStatusLoading; const onCommitBtnClick = useCallback(() => { if (!isFetchStatusLoading && !isProtectedMode) { toggleOpsModal(true, GitOpsTab.Deploy); AnalyticsUtil.logEvent("GS_DEPLOY_GIT_MODAL_TRIGGERED", { source: "BOTTOM_BAR_GIT_COMMIT_BUTTON", }); } }, [isFetchStatusLoading, isProtectedMode, toggleOpsModal]); const onPullBtnClick = useCallback(() => { if (!isPullButtonLoading && !isPullDisabled) { AnalyticsUtil.logEvent("GS_PULL_GIT_CLICK", { source: "BOTTOM_BAR_GIT_PULL_BUTTON", }); if (isProtectedMode) { discard(createMessage(DISCARD_AND_PULL_SUCCESS)); } else { pull(); } } }, [discard, isProtectedMode, pull, isPullDisabled, isPullButtonLoading]); const onMergeBtnClick = useCallback(() => { AnalyticsUtil.logEvent("GS_MERGE_GIT_MODAL_TRIGGERED", { source: "BOTTOM_BAR_GIT_MERGE_BUTTON", }); toggleOpsModal(true, GitOpsTab.Merge); }, [toggleOpsModal]); const onSettingsClick = useCallback(() => { toggleSettingsModal(true, GitSettingsTab.General); AnalyticsUtil.logEvent("GS_SETTING_CLICK", { source: "BOTTOM_BAR_GIT_SETTING_BUTTON", }); }, [toggleSettingsModal]); const onConnectBtnClick = useCallback(() => { AnalyticsUtil.logEvent("GS_CONNECT_GIT_CLICK", { source: "BOTTOM_BAR_GIT_CONNECT_BUTTON", }); toggleConnectModal(true); }, [toggleConnectModal]); if (!isInitialized) { return null; } return isConnected ? ( {isAutocommitEnabled && isAutocommitPolling ? (
) : ( <> )}
) : ( ); } export default QuickActionsView;