"use client"; import { useTranslation } from "react-i18next"; import { IconAlertTriangle, IconCloudDownload, IconCloudUpload, IconGitCherryPick, IconGitMerge, IconGitPullRequest, } from "@tabler/icons-react"; import { DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, } from "@kandev/ui/dropdown-menu"; import { AHEAD_MARK, BEHIND_MARK, DEFAULT_BASE_BRANCH } from "./vcs-constants"; import { RemoteContributionActionItems } from "@/components/task/remote-contribution-action-items"; function StandardPushDropdownItems({ disabled, hasUpstream, aheadCount, pushDisabled, onPush, disabledTitle, }: { disabled: boolean; hasUpstream: boolean; aheadCount: number; pushDisabled: boolean; onPush: (force: boolean) => void; disabledTitle: string; }) { const { t } = useTranslation(); return ( {t("integrations:push")} {hasUpstream && aheadCount > 0 && ( {AHEAD_MARK} {aheadCount} )} onPush(false)} disabled={disabled || pushDisabled} title={pushDisabled ? disabledTitle : undefined} > {t("integrations:push")} onPush(true)} disabled={disabled || pushDisabled} title={pushDisabled ? disabledTitle : undefined} > {t("integrations:forcePush")} ); } function ContributionDropdownItems({ disabled, replaceDisabled, useDisabled, onReplaceContribution, onUseContribution, onViewPRVersion, onCompareVersions, replaceLabelKey, useLabelKey, viewLabelKey, replaceDescriptionKey, useDescriptionKey, prNumber, }: { disabled: boolean; replaceDisabled: boolean; useDisabled: boolean; onReplaceContribution: () => void; onUseContribution: () => void; onViewPRVersion: () => void; onCompareVersions?: () => void; replaceLabelKey?: string; useLabelKey?: string; viewLabelKey?: string; replaceDescriptionKey?: string; useDescriptionKey?: string; prNumber?: number; }) { return ( <> ); } export type VcsDropdownItemsProps = { disabled: boolean; baseBranch?: string; hasUpstream: boolean; behindCount: number; aheadCount: number; pushDisabled: boolean; pullDisabled: boolean; pushDisabledReason?: string; pullDisabledReason?: string; showContributionResolution: boolean; replaceDisabled: boolean; useDisabled: boolean; onPR: () => void; onPull: () => void; onPush: (force: boolean) => void; onReplaceContribution: () => void; onUseContribution: () => void; onViewPRVersion: () => void; onCompareVersions?: () => void; prNumber?: number; onRebase: () => void; onMerge: () => void; }; export function VcsDropdownItems({ disabled, baseBranch, hasUpstream, behindCount, aheadCount, pushDisabled, pullDisabled, pushDisabledReason, pullDisabledReason, showContributionResolution, replaceDisabled, useDisabled, onPR, onPull, onPush, onReplaceContribution, onUseContribution, onViewPRVersion, onCompareVersions, prNumber, onRebase, onMerge, }: VcsDropdownItemsProps) { const { t } = useTranslation(); const pushDisabledTitle = pushDisabledReason ?? t("task:divergedActionsUnavailable"); const pullDisabledTitle = pullDisabledReason ?? t("task:divergedActionsUnavailable"); return ( {t("integrations:createPr")} {t("integrations:pull")} {hasUpstream && behindCount > 0 && ( {BEHIND_MARK} {behindCount} )} {!showContributionResolution && ( )} {showContributionResolution && ( )} {t("integrations:rebase")} {t("integrations:ontoBranch", { branch: baseBranch || DEFAULT_BASE_BRANCH })} {t("integrations:merge")} {t("integrations:fromBranch", { branch: baseBranch || DEFAULT_BASE_BRANCH })} ); }