addons/isl/src/ComparisonView/OpenComparisonViewButton.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 {ReactNode} from 'react';
b69ab319import type {Comparison} from 'shared/Comparison';
b69ab3110
b69ab3111import {Button} from 'isl-components/Button';
b69ab3112import {Icon} from 'isl-components/Icon';
b69ab3113import {ComparisonType} from 'shared/Comparison';
b69ab3114import {T, t} from '../i18n';
b69ab3115import {short} from '../utils';
b69ab3116import {showComparison} from './atoms';
b69ab3117
b69ab3118export function OpenComparisonViewButton({
b69ab3119 comparison,
b69ab3120 buttonText,
b69ab3121 onClick,
b69ab3122}: {
b69ab3123 comparison: Comparison;
b69ab3124 buttonText?: ReactNode;
b69ab3125 onClick?: () => unknown;
b69ab3126}) {
b69ab3127 const isFake =
b69ab3128 comparison.type === ComparisonType.Committed && comparison.hash.startsWith('OPTIMISTIC');
b69ab3129 return (
b69ab3130 <Button
b69ab3131 data-testid={`open-comparison-view-button-${comparison.type}`}
b69ab3132 icon
b69ab3133 disabled={isFake}
b69ab3134 onClick={() => {
b69ab3135 onClick?.();
b69ab3136 showComparison(comparison);
b69ab3137 }}>
b69ab3138 <Icon icon="files" slot="start" />
b69ab3139 {isFake ? <T>View Changes</T> : (buttonText ?? buttonLabelForComparison(comparison))}
b69ab3140 </Button>
b69ab3141 );
b69ab3142}
b69ab3143
b69ab3144function buttonLabelForComparison(comparison: Comparison): string {
b69ab3145 switch (comparison.type) {
b69ab3146 case ComparisonType.UncommittedChanges:
b69ab3147 return t('View Changes');
b69ab3148 case ComparisonType.HeadChanges:
b69ab3149 return t('View Head Changes');
b69ab3150 case ComparisonType.StackChanges:
b69ab3151 return t('View Stack Changes');
b69ab3152 case ComparisonType.Committed:
b69ab3153 return t('View Changes in $hash', {replace: {$hash: short(comparison.hash)}});
b69ab3154 case ComparisonType.SinceLastCodeReviewSubmit:
b69ab3155 return t('Compare $hash with remote', {replace: {$hash: short(comparison.hash)}});
b69ab3156 }
b69ab3157}