Skip to content

Commit d4b2b16

Browse files
author
taian.lta
committed
1 parent 24e642c commit d4b2b16

2 files changed

Lines changed: 58 additions & 1 deletion

File tree

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import React, { useMemo } from 'react';
2+
import { SplitPanel } from '@ali/ide-core-browser/lib/components/layout/split-panel';
3+
import { IDiffResource } from '@ali/ide-editor/lib/common';
4+
import { ImagePreview } from '@ali/ide-file-scheme/lib/browser/preview.view';
5+
import { BinaryEditorComponent } from '@ali/ide-file-scheme/lib/browser/external.view';
6+
7+
interface Props {
8+
resource: IDiffResource;
9+
getFileType: (resource: IDiffResource) => string;
10+
}
11+
12+
export const DiffView: React.FC<Props> = ({ resource, getFileType }) => {
13+
const fileType = useMemo(() => getFileType(resource), [resource]);
14+
const leftResource = useMemo(() => ({ name: '', icon: '', uri: resource.metadata!.original }), [
15+
resource,
16+
]);
17+
const rightResource = useMemo(() => ({ name: '', icon: '', uri: resource.metadata!.modified }), [
18+
resource,
19+
]);
20+
const Component = fileType === 'image' ? ImagePreview : BinaryEditorComponent;
21+
return (
22+
<SplitPanel id="diff-view" direction="left-to-right">
23+
<Component resource={leftResource} />
24+
<Component resource={rightResource} />
25+
</SplitPanel>
26+
);
27+
};

packages/acr/src/modules/git-scheme/index.contribution.ts

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Autowired, Injectable } from '@ali/common-di';
22
import { Domain } from '@ali/ide-core-common';
33
import { LRUMap, URI } from '@ali/ide-core-browser';
44
import { getLanguageIdFromMonaco } from '@ali/ide-core-browser/lib/services';
5-
import { IResource } from '@ali/ide-editor/lib/common';
5+
import { IResource, IDiffResource } from '@ali/ide-editor/lib/common';
66
import {
77
EditorComponentRegistry,
88
IEditorDocumentModelContentRegistry,
@@ -14,6 +14,7 @@ import { GitDocContentProvider } from './doc-content-provider/git';
1414
import { GitResourceProvider } from './resource-provider/git';
1515
import { BrowserFsProvider } from '../browser-fs-provider/fs-provider';
1616
import { IAntcodeService } from '../antcode-service/base';
17+
import { DiffView } from './diff.view';
1718

1819
// kaitian 中这里组件只用在 file 上,这里相当于用同名 id,来渲染对应组件
1920
// TODO: kaitian 导出组件 id
@@ -69,6 +70,35 @@ export class GitSchemeContribution implements BrowserEditorContribution {
6970
}
7071
}
7172
);
73+
74+
// 针对非 text 的 diff 视图,kaitian 中也未处理,这里先临时简单实现下
75+
editorComponentRegistry.registerEditorComponentResolver(
76+
'diff',
77+
(resource: IDiffResource, results, resolve) => {
78+
const { modified } = resource.metadata || {};
79+
// diff 下 modified 和 original 和 type 一致,否则就是 deleted 和 added
80+
if (modified && this.getFileType(modified) !== 'text') {
81+
resolve([
82+
{
83+
type: 'component',
84+
componentId: 'diff-view',
85+
},
86+
]);
87+
}
88+
}
89+
);
90+
91+
editorComponentRegistry.registerEditorComponent(
92+
{
93+
uid: 'diff-view',
94+
component: DiffView,
95+
},
96+
{
97+
getFileType: (resource: IDiffResource) => {
98+
return this.getFileType(resource.metadata!.modified);
99+
},
100+
}
101+
);
72102
}
73103

74104
registerResource(resourceService: ResourceService) {

0 commit comments

Comments
 (0)