diff --git a/addons/isl/src/SettingsTooltip.css b/addons/isl/src/SettingsTooltip.css index 4069b5bce5..fbe3aee8fd 100644 --- a/addons/isl/src/SettingsTooltip.css +++ b/addons/isl/src/SettingsTooltip.css @@ -9,3 +9,11 @@ padding-bottom: var(--halfpad); font-size: 13px; } + +.multiple-settings { + display: flex; + flex-direction: column; + flex-wrap: wrap; + max-width: 500px; + gap: var(--pad); +} diff --git a/addons/isl/src/SettingsTooltip.tsx b/addons/isl/src/SettingsTooltip.tsx index d465a109bd..6683ea7d10 100644 --- a/addons/isl/src/SettingsTooltip.tsx +++ b/addons/isl/src/SettingsTooltip.tsx @@ -9,9 +9,12 @@ import type {ThemeColor} from './theme'; import type {PreferredSubmitCommand} from './types'; import type {ReactNode} from 'react'; +import {confirmShouldSubmitEnabledAtom} from './ConfirmSubmitStack'; import {DropdownField, DropdownFields} from './DropdownFields'; import {Tooltip} from './Tooltip'; +import {codeReviewProvider} from './codeReview/CodeReviewInfo'; import {showDiffNumberConfig} from './codeReview/DiffBadge'; +import {SubmitAsDraftCheckbox} from './codeReview/DraftCheckbox'; import {debugToolsEnabledState} from './debug/DebugToolsState'; import {t, T} from './i18n'; import {SetConfigOperation} from './operations/SetConfigOperation'; @@ -25,7 +28,7 @@ import { VSCodeLink, VSCodeOption, } from '@vscode/webview-ui-toolkit/react'; -import {useRecoilState} from 'recoil'; +import {useRecoilState, useRecoilValue} from 'recoil'; import {Icon} from 'shared/Icon'; import {unwrap} from 'shared/utils'; @@ -111,20 +114,48 @@ function SettingsDropdown() { ) : null} - Show Diff Numbers}> - { - setShowDiffNumber((e.target as HTMLInputElement).checked); - }}> - Show copyable Diff / Pull Request numbers inline for each commit - + Code Review}> +
+ { + setShowDiffNumber((e.target as HTMLInputElement).checked); + }}> + Show copyable Diff / Pull Request numbers inline for each commit + + + +
); } +function ConfirmSubmitStackSetting() { + const [value, setValue] = useRecoilState(confirmShouldSubmitEnabledAtom); + const provider = useRecoilValue(codeReviewProvider); + if (provider == null || !provider.supportSubmittingAsDraft) { + return null; + } + return ( + + { + setValue((e.target as HTMLInputElement).checked); + }}> + Show confirmation when submitting a stack + + + ); +} + function DebugToolsField() { const [isDebug, setIsDebug] = useRecoilState(debugToolsEnabledState); diff --git a/addons/isl/src/codeReview/DraftCheckbox.tsx b/addons/isl/src/codeReview/DraftCheckbox.tsx index c683cab432..9a42c96216 100644 --- a/addons/isl/src/codeReview/DraftCheckbox.tsx +++ b/addons/isl/src/codeReview/DraftCheckbox.tsx @@ -20,16 +20,22 @@ export const submitAsDraft = atom({ effects: [persistAtomToConfigEffect('isl.submitAsDraft')], }); -export function SubmitAsDraftCheckbox({commitsToBeSubmit}: {commitsToBeSubmit: Array}) { +export function SubmitAsDraftCheckbox({ + commitsToBeSubmit, + forceShow, +}: + | {commitsToBeSubmit: Array; forceShow?: undefined} + | {forceShow: true; commitsToBeSubmit?: undefined}) { const [isDraft, setIsDraft] = useRecoilState(submitAsDraft); const provider = useRecoilValue(codeReviewProvider); if ( - provider == null || - (provider?.supportSubmittingAsDraft === 'newDiffsOnly' && - // empty array => commit to submit is not yet created (this counts as a new Diff) - commitsToBeSubmit.length > 0 && - // some commits don't have a diff ID => those are "new" Diffs - commitsToBeSubmit.some(commit => commit.diffId != null)) + !forceShow && + (provider == null || + (provider?.supportSubmittingAsDraft === 'newDiffsOnly' && + // empty array => commit to submit is not yet created (this counts as a new Diff) + commitsToBeSubmit.length > 0 && + // some commits don't have a diff ID => those are "new" Diffs + commitsToBeSubmit.some(commit => commit.diffId != null))) ) { // hide draft button for diffs being resubmitted, if the provider doesn't support drafts on resubmission return null; @@ -40,10 +46,14 @@ export function SubmitAsDraftCheckbox({commitsToBeSubmit}: {commitsToBeSubmit: A checked={isDraft} onChange={e => setIsDraft((e.target as HTMLInputElement).checked)}> + title={ + forceShow + ? t('Whether to submit diffs as drafts') + : t('whetherToSubmitDiffAsDraft', { + // we don't actually support submitting zero commits, instead this means we're submitting the head commit. + count: commitsToBeSubmit?.length || 1, + }) + }> Submit as Draft