From 5b3e12ba6db845226a3a2d84ce512eab110981c9 Mon Sep 17 00:00:00 2001 From: winjo Date: Thu, 12 Sep 2024 18:58:33 +0800 Subject: [PATCH] chore: add provider example (#178) --- packages/startup/src/provider/index.tsx | 120 +++++++++++++----------- packages/startup/src/provider/module.ts | 21 ++--- 2 files changed, 72 insertions(+), 69 deletions(-) diff --git a/packages/startup/src/provider/index.tsx b/packages/startup/src/provider/index.tsx index a2eb2a39..e3375ec7 100644 --- a/packages/startup/src/provider/index.tsx +++ b/packages/startup/src/provider/index.tsx @@ -1,67 +1,75 @@ import { AppProvider, CodeEditor, DiffEditor } from '@codeblitzjs/ide-core'; -import React from 'react'; +import React, { useEffect, useState } from 'react'; import { createRoot } from 'react-dom/client'; import '@codeblitzjs/ide-core/languages'; -import { SampleModule } from './module' +import { SampleModule, diffsDeferred } from './module' import '../index.css'; import './index.css' -const App = () => ( - ', - 'main.css': 'body {}', - 'main.js': 'console.log("main")', - 'package.json': '{\n "name": "startup"\n}', - }); - }, - }, - } - }, - }} - > - { + const [diffs, setDiffs] = useState<{filePath: string, oldFileContent: string | null, newFileContent: string | null }[]>([]) + + useEffect(() => { + setTimeout(() => { + const diffs = [{ + filePath: 'a.js', + oldFileContent: null, + newFileContent: 'console.log(123)' + }, { + filePath: 'a1.js', + oldFileContent: 'const add = (x, y) => {\n return x + y\n}', + newFileContent: 'const add = (x, y) => {\n return x + y + 1\n}' + }] + setDiffs(diffs) + diffsDeferred.resolve(diffs) + }, 1000) + }, []) + + if (!diffs) return null + + return ( + - - + {diffs.map(({ filePath, oldFileContent, newFileContent }) => { + if (!oldFileContent) { + return ( + + ) + } else { + return ( + + ) } - }} - style={{ width: 1000, height: 300 }} - /> - -); + })} + + ) +}; createRoot(document.getElementById('main') as HTMLElement).render(); diff --git a/packages/startup/src/provider/module.ts b/packages/startup/src/provider/module.ts index db166f6c..a04835af 100644 --- a/packages/startup/src/provider/module.ts +++ b/packages/startup/src/provider/module.ts @@ -1,18 +1,9 @@ import { Autowired, Injectable, Provider } from '@opensumi/di'; import { BrowserModule } from '@opensumi/ide-core-browser'; import { IEditorDocumentModelContentProvider, BrowserEditorContribution, IEditorDocumentModelContentRegistry } from '@opensumi/ide-editor/lib/browser' -import { URI, Emitter, Event, Domain } from '@opensumi/ide-core-common' +import { URI, Emitter, Event, Domain, Deferred } from '@opensumi/ide-core-common' -const contentMap = { - 'a1.js': `const add = (x, y) => { - return x + y -} -`, - 'a2.js': `const add = (x, y) => { - return x + y + 1 -} -`, -} +export const diffsDeferred = new Deferred<{filePath: string, oldFileContent: string | null, newFileContent: string }[]>() @Injectable() export class SampleSchemeDocumentProvider implements IEditorDocumentModelContentProvider { @@ -21,11 +12,15 @@ export class SampleSchemeDocumentProvider implements IEditorDocumentModelContent } async provideEditorDocumentModelContent(uri: URI): Promise { - return contentMap[uri.codeUri.path.slice(1)] + const diffs = await diffsDeferred.promise + const diff = diffs.find(item => item.filePath === uri.codeUri.path.slice(1)) + if (!diff) return '' + if (uri.authority === 'new') return diff.newFileContent + return diff.oldFileContent || '' } isReadonly() { - return true; + return false; } private _onDidChangeContent: Emitter = new Emitter();