Skip to content

Commit

Permalink
feat. EditorAppConfigBase. MakE codeResources and useDiffEditor optional
Browse files Browse the repository at this point in the history
  • Loading branch information
kaisalmen committed Jun 3, 2024
1 parent 952709d commit f347835
Show file tree
Hide file tree
Showing 7 changed files with 56 additions and 34 deletions.
5 changes: 3 additions & 2 deletions packages/wrapper-react/src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -181,8 +181,9 @@ export class MonacoEditorReactComp<T extends MonacoEditorProps = MonacoEditorPro
const verifyModelContent = () => {
const main = textModels?.text?.getValue() ?? '';
const original = textModels?.textOriginal?.getValue() ?? '';
const dirty = main !== userConfig.wrapperConfig.editorAppConfig.codeResources.main?.text ?? '';
const dirtyOriginal = original !== userConfig.wrapperConfig.editorAppConfig.codeResources.original?.text ?? '';
const codeResources = userConfig.wrapperConfig.editorAppConfig.codeResources;
const dirty = main !== codeResources?.main?.text ?? '';
const dirtyOriginal = original !== codeResources?.original?.text ?? '';
onTextChanged({
main,
original,
Expand Down
29 changes: 17 additions & 12 deletions packages/wrapper/src/editorAppBase.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ export type EditorAppType = 'extended' | 'classic';

export type EditorAppConfigBase = {
$type: EditorAppType;
codeResources: CodeResources;
useDiffEditor: boolean;
codeResources?: CodeResources;
useDiffEditor?: boolean;
domReadOnly?: boolean;
readOnly?: boolean;
awaitExtensionReadiness?: Array<() => Promise<void>>;
Expand Down Expand Up @@ -148,7 +148,7 @@ export abstract class EditorAppBase {
};
}

async updateCodeResources(codeResources: CodeResources): Promise<void> {
async updateCodeResources(codeResources?: CodeResources): Promise<void> {
if (!this.editor && !this.diffEditor) {
return Promise.reject(new Error('You cannot update the code resources as neither editor or diff editor is available.'));
}
Expand All @@ -160,20 +160,20 @@ export abstract class EditorAppBase {

if (modelUpdateType === ModelUpdateType.CODE) {
if (this.editor) {
this.editor.setValue(codeResources.main?.text ?? '');
this.editor.setValue(codeResources?.main?.text ?? '');
} else {
this.diffEditor?.getModifiedEditor().setValue(codeResources.main?.text ?? '');
this.diffEditor?.getOriginalEditor().setValue(codeResources.original?.text ?? '');
this.diffEditor?.getModifiedEditor().setValue(codeResources?.main?.text ?? '');
this.diffEditor?.getOriginalEditor().setValue(codeResources?.original?.text ?? '');
}
} else if (modelUpdateType === ModelUpdateType.MODEL || modelUpdateType === ModelUpdateType.CODE_AND_MODEL) {
const modelRefs = await this.buildModelRefs(codeResources);
this.updateEditorModels(modelRefs);
}
}

async buildModelRefs(codeResources: CodeResources): Promise<ModelRefs> {
const modelRef = await this.buildModelRef(codeResources.main);
const modelRefOriginal = await this.buildModelRef(codeResources.original);
async buildModelRefs(codeResources?: CodeResources): Promise<ModelRefs> {
const modelRef = await this.buildModelRef(codeResources?.main);
const modelRefOriginal = await this.buildModelRef(codeResources?.original);

return {
modelRef,
Expand Down Expand Up @@ -236,10 +236,15 @@ export abstract class EditorAppBase {
}
}

private updateCodeResourcesConfig(codeResources: CodeResources) {
private updateCodeResourcesConfig(codeResources?: CodeResources) {
const config = this.getConfig();
config.codeResources.main = codeResources.main;
config.codeResources.original = codeResources.original;
config.codeResources = {};
if (codeResources?.main) {
config.codeResources.main = codeResources?.main;
}
if (codeResources?.original) {
config.codeResources.original = codeResources?.original;
}
}

updateLayout() {
Expand Down
20 changes: 10 additions & 10 deletions packages/wrapper/src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,26 +61,26 @@ export enum ModelUpdateType {
CODE_AND_MODEL
}

export const isCodeUpdateRequired = (codeResourcesPrevious: CodeResources, codeResources: CodeResources) => {
const a = evaluateCodeUpdate(codeResourcesPrevious.main);
const b = evaluateCodeUpdate(codeResources.main);
const c = evaluateCodeUpdate(codeResourcesPrevious.original);
const d = evaluateCodeUpdate(codeResources.original);
export const isCodeUpdateRequired = (codeResourcesPrevious?: CodeResources, codeResources?: CodeResources) => {
const a = evaluateCodeUpdate(codeResourcesPrevious?.main);
const b = evaluateCodeUpdate(codeResources?.main);
const c = evaluateCodeUpdate(codeResourcesPrevious?.original);
const d = evaluateCodeUpdate(codeResources?.original);
return a !== b || c !== d ? ModelUpdateType.CODE : ModelUpdateType.NONE;
};

export const evaluateCodeUpdate = (code?: CodePlusUri | CodePlusFileExt) => {
return code && Object.hasOwn(code, 'text') ? code.text : undefined;
};

export const isModelUpdateRequired = (codeResourcesPrevious: CodeResources, codeResources: CodeResources): ModelUpdateType => {
export const isModelUpdateRequired = (codeResourcesPrevious?: CodeResources, codeResources?: CodeResources): ModelUpdateType => {
const codeUpdateType = isCodeUpdateRequired(codeResourcesPrevious, codeResources);
const codeChanged = codeUpdateType === ModelUpdateType.CODE;

const a = evaluateCodeModel(codeResourcesPrevious.main);
const b = evaluateCodeModel(codeResources.main);
const c = evaluateCodeModel(codeResourcesPrevious.original);
const d = evaluateCodeModel(codeResources.original);
const a = evaluateCodeModel(codeResourcesPrevious?.main);
const b = evaluateCodeModel(codeResources?.main);
const c = evaluateCodeModel(codeResourcesPrevious?.original);
const d = evaluateCodeModel(codeResources?.original);
const modelChanged = a !== b || c !== d;

return (modelChanged && codeChanged) ? ModelUpdateType.CODE_AND_MODEL : (modelChanged ? ModelUpdateType.MODEL : (codeChanged ? ModelUpdateType.CODE : ModelUpdateType.NONE));
Expand Down
6 changes: 3 additions & 3 deletions packages/wrapper/src/wrapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ export class MonacoEditorLanguageClientWrapper {
}

const editorAppConfig = userConfig.wrapperConfig.editorAppConfig;
if (editorAppConfig.useDiffEditor && !editorAppConfig.codeResources.original) {
throw new Error(`Use diff editor was used without a valid config. code: ${editorAppConfig.codeResources.main} codeOriginal: ${editorAppConfig.codeResources.original}`);
if (editorAppConfig.useDiffEditor && !editorAppConfig.codeResources?.original) {
throw new Error(`Use diff editor was used without a valid config. code: ${editorAppConfig.codeResources?.main} codeOriginal: ${editorAppConfig.codeResources?.original}`);
}

// Always dispose old instances before start
Expand Down Expand Up @@ -157,7 +157,7 @@ export class MonacoEditorLanguageClientWrapper {
return this.languageClientWrapper?.getWorker();
}

async updateCodeResources(codeResources: CodeResources): Promise<void> {
async updateCodeResources(codeResources?: CodeResources): Promise<void> {
return this.editorApp?.updateCodeResources(codeResources);
}

Expand Down
8 changes: 6 additions & 2 deletions packages/wrapper/test/editorAppClassic.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,10 @@ describe('Test EditorAppClassic', () => {
const app = new EditorAppClassic('test', createBaseConfig('classic'));
expect(app.isAppConfigDifferent(orgConfig, config, false)).toBeFalsy();

if (!config.codeResources) {
config.codeResources = {};
}

config.codeResources.main = {
text: 'test',
fileExt: 'js'
Expand Down Expand Up @@ -79,8 +83,8 @@ describe('Test EditorAppClassic', () => {
test('config defaults', () => {
const config = createBaseConfig('classic');
const app = new EditorAppClassic('config defaults', config);
expect(app.getConfig().codeResources.main?.text).toEqual('');
expect(app.getConfig().codeResources.original).toBeUndefined();
expect(app.getConfig().codeResources?.main?.text).toEqual('');
expect(app.getConfig().codeResources?.original).toBeUndefined();
expect(app.getConfig().useDiffEditor).toBeFalsy();
expect(app.getConfig().readOnly).toBeFalsy();
expect(app.getConfig().domReadOnly).toBeFalsy();
Expand Down
8 changes: 6 additions & 2 deletions packages/wrapper/test/editorAppExtended.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ describe('Test EditorAppExtended', () => {
const app = new EditorAppExtended('test', createBaseConfig('extended'));
expect(app.isAppConfigDifferent(orgConfig, config, false)).toBeFalsy();

if (!config.codeResources) {
config.codeResources = {};
}

config.codeResources.main = {
text: 'test',
fileExt: 'js'
Expand All @@ -62,8 +66,8 @@ describe('Test EditorAppExtended', () => {
test('config defaults', () => {
const config = createBaseConfig('extended');
const app = new EditorAppExtended('config defaults', config);
expect(app.getConfig().codeResources.main?.text).toEqual('');
expect(app.getConfig().codeResources.original).toBeUndefined();
expect(app.getConfig().codeResources?.main?.text).toEqual('');
expect(app.getConfig().codeResources?.original).toBeUndefined();
expect(app.getConfig().useDiffEditor).toBeFalsy();
expect(app.getConfig().readOnly).toBeFalsy();
expect(app.getConfig().domReadOnly).toBeFalsy();
Expand Down
14 changes: 11 additions & 3 deletions packages/wrapper/test/wrapper.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,12 @@ describe('Test MonacoEditorLanguageClientWrapper', () => {
createMonacoEditorDiv();
const wrapper = new MonacoEditorLanguageClientWrapper();
const userConfig = createBaseConfig('classic');
userConfig.wrapperConfig.editorAppConfig.codeResources.main = undefined;
userConfig.wrapperConfig.editorAppConfig.codeResources.original = {
let codeResources = userConfig.wrapperConfig.editorAppConfig.codeResources;
if (!codeResources) {
codeResources = {};
}
codeResources.main = undefined;
codeResources.original = {
text: 'original',
fileExt: 'js'
};
Expand All @@ -111,7 +115,11 @@ describe('Test MonacoEditorLanguageClientWrapper', () => {
createMonacoEditorDiv();
const wrapper = new MonacoEditorLanguageClientWrapper();
const userConfig = createBaseConfig('classic');
userConfig.wrapperConfig.editorAppConfig.codeResources.original = {
let codeResources = userConfig.wrapperConfig.editorAppConfig.codeResources;
if (!codeResources) {
codeResources = {};
}
codeResources.original = {
text: 'original',
fileExt: 'js'
};
Expand Down

0 comments on commit f347835

Please sign in to comment.