addons/isl/src/ComparisonView/ComparisonViewModal.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 {ComparisonMode} from './atoms';
b69ab319
b69ab3110import {Icon} from 'isl-components/Icon';
b69ab3111import {useAtomValue} from 'jotai';
b69ab3112import {lazy, Suspense} from 'react';
b69ab3113import {ComparisonType} from 'shared/Comparison';
b69ab3114import {useCommand} from '../ISLShortcuts';
b69ab3115import {Modal} from '../Modal';
b69ab3116import {currentComparisonMode, dismissComparison, showComparison} from './atoms';
b69ab3117
b69ab3118import './ComparisonView.css';
b69ab3119
b69ab3120const ComparisonView = lazy(() => import('./ComparisonView'));
b69ab3121
b69ab3122function useComparisonView(): ComparisonMode {
b69ab3123 const mode = useAtomValue(currentComparisonMode);
b69ab3124
b69ab3125 useCommand('Escape', () => {
b69ab3126 dismissComparison();
b69ab3127 });
b69ab3128 useCommand('OpenUncommittedChangesComparisonView', () => {
b69ab3129 showComparison({type: ComparisonType.UncommittedChanges});
b69ab3130 });
b69ab3131 useCommand('OpenHeadChangesComparisonView', () => {
b69ab3132 showComparison({type: ComparisonType.HeadChanges});
b69ab3133 });
b69ab3134
b69ab3135 return mode;
b69ab3136}
b69ab3137
b69ab3138export function ComparisonViewModal() {
b69ab3139 const mode = useComparisonView();
b69ab3140
b69ab3141 if (!mode.visible) {
b69ab3142 return null;
b69ab3143 }
b69ab3144
b69ab3145 return (
b69ab3146 <Modal className="comparison-view-modal" height="" width="">
b69ab3147 <Suspense fallback={<Icon icon="loading" />}>
b69ab3148 <ComparisonView comparison={mode.comparison} dismiss={dismissComparison} />
b69ab3149 </Suspense>
b69ab3150 </Modal>
b69ab3151 );
b69ab3152}
b69ab3153
b69ab3154export function ComparisonViewApp() {
b69ab3155 const mode = useComparisonView();
b69ab3156
b69ab3157 if (!mode.visible) {
b69ab3158 return null;
b69ab3159 }
b69ab3160
b69ab3161 return (
b69ab3162 <div className="comparison-view-root">
b69ab3163 <Suspense fallback={<Icon icon="loading" />}>
b69ab3164 <ComparisonView comparison={mode.comparison} />
b69ab3165 </Suspense>
b69ab3166 </div>
b69ab3167 );
b69ab3168}