addons/isl/src/codeReview/DraftCheckbox.tsxblame
View source
b69ab311/**
b69ab312 * Copyright (c) Meta Platforms, Inc. and affiliates.
b69ab313 *
b69ab314 * This source code is licensed under the MIT license found in the
b69ab315 * LICENSE file in the root directory of this source tree.
b69ab316 */
b69ab317
b69ab318import type {CommitInfo} from '../types';
b69ab319
b69ab3110import {Checkbox} from 'isl-components/Checkbox';
b69ab3111import {Tooltip} from 'isl-components/Tooltip';
b69ab3112import {useAtom, useAtomValue} from 'jotai';
b69ab3113import {submitAsDraft} from '../atoms/submitOptionAtoms';
b69ab3114import {t, T} from '../i18n';
b69ab3115import {codeReviewProvider} from './CodeReviewInfo';
b69ab3116
b69ab3117export {submitAsDraft} from '../atoms/submitOptionAtoms';
b69ab3118
b69ab3119export function SubmitAsDraftCheckbox({
b69ab3120 commitsToBeSubmit,
b69ab3121 forceShow,
b69ab3122}:
b69ab3123 | {commitsToBeSubmit: Array<CommitInfo>; forceShow?: undefined}
b69ab3124 | {forceShow: true; commitsToBeSubmit?: undefined}) {
b69ab3125 const [isDraft, setIsDraft] = useAtom(submitAsDraft);
b69ab3126 const provider = useAtomValue(codeReviewProvider);
b69ab3127
b69ab3128 if (
b69ab3129 !forceShow &&
b69ab3130 (provider == null ||
b69ab3131 (provider?.supportSubmittingAsDraft === 'newDiffsOnly' &&
b69ab3132 // empty array => commit to submit is not yet created (this counts as a new Diff)
b69ab3133 commitsToBeSubmit.length > 0 &&
b69ab3134 // some commits don't have a diff ID => those are "new" Diffs
b69ab3135 commitsToBeSubmit.some(commit => commit.diffId != null)))
b69ab3136 ) {
b69ab3137 // hide draft button for diffs being resubmitted, if the provider doesn't support drafts on resubmission
b69ab3138 return null;
b69ab3139 }
b69ab3140 return (
b69ab3141 <Checkbox checked={isDraft} onChange={setIsDraft}>
b69ab3142 <Tooltip
b69ab3143 title={
b69ab3144 forceShow
b69ab3145 ? t('Whether to submit diffs as drafts')
b69ab3146 : t('whetherToSubmitDiffAsDraft', {
b69ab3147 // we don't actually support submitting zero commits, instead this means we're submitting the head commit.
b69ab3148 count: commitsToBeSubmit?.length || 1,
b69ab3149 })
b69ab3150 }>
b69ab3151 <T>Submit as Draft</T>
b69ab3152 </Tooltip>
b69ab3153 </Checkbox>
b69ab3154 );
b69ab3155}