/**
* Copyright (c) 2020-present, Goldman Sachs
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { useRef, useEffect } from 'react';
import { observer } from 'mobx-react-lite';
import { EntityDiffViewState } from '../../../stores/editor/editor-state/entity-diff-editor-state/EntityDiffViewState.js';
import { EntityDiffSideBarItem } from '../editor-group/diff-editor/EntityDiffView.js';
import {
clsx,
PanelLoadingIndicator,
TruncatedGitMergeIcon,
RefreshIcon,
InfoCircleIcon,
TimesIcon,
PlusIcon,
ExternalLinkSquareIcon,
PanelContent,
} from '@finos/legend-art';
import { ACTIVITY_MODE } from '../../../stores/editor/EditorConfig.js';
import { generateReviewRoute } from '../../../__lib__/LegendStudioNavigation.js';
import { LEGEND_STUDIO_TEST_ID } from '../../../__lib__/LegendStudioTesting.js';
import { flowResult } from 'mobx';
import {
AuthorizableProjectAction,
type EntityDiff,
} from '@finos/legend-server-sdlc';
import { entityDiffSorter } from '../../../stores/editor/EditorSDLCState.js';
import { useEditorStore } from '../EditorStoreProvider.js';
import { useLegendStudioApplicationStore } from '../../LegendStudioFrameworkProvider.js';
import { formatDistanceToNow } from '@finos/legend-shared';
import { STUDIO_SDLC_USER_ERRORS } from '../../shared/StudioSDLCErrors.js';
export const WorkspaceReviewDiffs = observer(() => {
const editorStore = useEditorStore();
const workspaceReviewState = editorStore.workspaceReviewState;
const currentTabState = editorStore.tabManagerState.currentTab;
const changes = editorStore.changeDetectionState.aggregatedWorkspaceChanges;
const isSelectedDiff = (diff: EntityDiff): boolean =>
currentTabState instanceof EntityDiffViewState &&
diff.oldPath === currentTabState.fromEntityPath &&
diff.newPath === currentTabState.toEntityPath;
const openChange =
(diff: EntityDiff): (() => void) =>
(): void =>
workspaceReviewState.openReviewChange(diff);
return (