Fix Config Update
This commit is contained in:
+4
-7
@@ -24,21 +24,18 @@ export const fromUrl = (data) => {
|
|||||||
console.error('Init error', e);
|
console.error('Init error', e);
|
||||||
state = defaultState;
|
state = defaultState;
|
||||||
}
|
}
|
||||||
codeStore.set({...state, updateEditor: true});
|
codeStore.set({ ...state, updateEditor: true });
|
||||||
};
|
};
|
||||||
export const updateCodeStore = (newState) => {
|
export const updateCodeStore = (newState) => {
|
||||||
codeStore.set(newState);
|
codeStore.set(newState);
|
||||||
};
|
};
|
||||||
export const updateCode = (code, updateEditor) => {
|
export const updateCode = (code, updateEditor) => {
|
||||||
const state = get(codeStore);
|
const state = get(codeStore);
|
||||||
state.code = code;
|
codeStore.set({...state, code, updateEditor});
|
||||||
state.updateEditor = updateEditor;
|
|
||||||
codeStore.set(state);
|
|
||||||
};
|
};
|
||||||
export const updateConfig = (config) => {
|
export const updateConfig = (config, updateEditor) => {
|
||||||
const state = get(codeStore);
|
const state = get(codeStore);
|
||||||
state.mermaid = config;
|
codeStore.set({ ...state, mermaid: config, updateEditor });
|
||||||
codeStore.set(state);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const unsubscribe = codeStore.subscribe((state) => {
|
const unsubscribe = codeStore.subscribe((state) => {
|
||||||
|
|||||||
@@ -1,16 +1,8 @@
|
|||||||
<script>
|
<script>
|
||||||
import {
|
import { codeStore, updateConfig } from '../code-store.js';
|
||||||
codeStore,
|
|
||||||
updateCodeStore,
|
|
||||||
updateConfig,
|
|
||||||
updateCode,
|
|
||||||
} from '../code-store.js';
|
|
||||||
import { configErrorStore } from '../config-error-store.js';
|
import { configErrorStore } from '../config-error-store.js';
|
||||||
import { onMount } from 'svelte';
|
import { onMount } from 'svelte';
|
||||||
import { push, pop, replace } from 'svelte-spa-router';
|
|
||||||
import { Base64 } from 'js-base64';
|
|
||||||
// import mermaid from '@mermaid-js/mermaid';
|
|
||||||
import mermaid from '@mermaid';
|
|
||||||
import Error from './Error.svelte';
|
import Error from './Error.svelte';
|
||||||
import { getResizeHandler, initEditor } from './editor-utils';
|
import { getResizeHandler, initEditor } from './editor-utils';
|
||||||
import { watchResize } from 'svelte-watch-resize';
|
import { watchResize } from 'svelte-watch-resize';
|
||||||
@@ -18,35 +10,20 @@
|
|||||||
import 'monaco-editor/esm/vs/editor/contrib/find/findController.js';
|
import 'monaco-editor/esm/vs/editor/contrib/find/findController.js';
|
||||||
import * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js';
|
import * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js';
|
||||||
|
|
||||||
export let conf = '';
|
|
||||||
export let code = '';
|
|
||||||
export let error = false;
|
export let error = false;
|
||||||
|
|
||||||
let edit;
|
let edit;
|
||||||
let editorElem = null;
|
let editorElem = null;
|
||||||
|
|
||||||
let decorations = [];
|
|
||||||
const decArr = [];
|
|
||||||
let resizeHandler = () => {};
|
let resizeHandler = () => {};
|
||||||
|
|
||||||
let oldConf = {};
|
const handleConfUpdate = (conf, updateEditor) => {
|
||||||
const handleConfUpdate = (conf) => {
|
console.log(conf);
|
||||||
try {
|
if (updateEditor && edit) {
|
||||||
console.log(conf);
|
edit.setValue(JSON.stringify(conf, null, 2));
|
||||||
JSON.parse(conf);
|
|
||||||
// let newState = { code, mermaid: JSON.parse(conf) };
|
|
||||||
// oldConf = newState.mermaid;
|
|
||||||
updateConfig(JSON.parse(conf));
|
|
||||||
configErrorStore.set(undefined);
|
|
||||||
// const model = edit.getModel();
|
|
||||||
// // model.setValue(conf);
|
|
||||||
// // model.dispose();
|
|
||||||
} catch (e) {
|
|
||||||
console.log('Error in parsed', e);
|
|
||||||
configErrorStore.set(e);
|
|
||||||
const str = JSON.stringify({ code, mermaid: oldConf });
|
|
||||||
replace('/edit/' + Base64.encodeURI(str));
|
|
||||||
}
|
}
|
||||||
|
updateConfig(conf, false);
|
||||||
|
configErrorStore.set(undefined);
|
||||||
};
|
};
|
||||||
|
|
||||||
const unsubscribeError = configErrorStore.subscribe((_error) => {
|
const unsubscribeError = configErrorStore.subscribe((_error) => {
|
||||||
@@ -58,32 +35,29 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const unsubscribe = codeStore.subscribe((state) => {
|
||||||
|
console.log(state.mermaid, state.updateEditor);
|
||||||
|
if (state.updateEditor) {
|
||||||
|
handleConfUpdate(state.mermaid, true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
onMount(async () => {
|
onMount(async () => {
|
||||||
console.log('Mounting config');
|
console.log('Mounting config');
|
||||||
|
editorElem = document.getElementById('editor-conf');
|
||||||
const unsubscribe = codeStore.subscribe((state) => {
|
edit = monaco.editor.create(editorElem, {
|
||||||
if (editorElem === null) {
|
value: '',
|
||||||
console.log('Starting stuff', document.getElementById('editor-conf'));
|
theme: 'myCoolTheme',
|
||||||
editorElem = document.getElementById('editor-conf');
|
language: 'json',
|
||||||
}
|
});
|
||||||
if (!conf && state) {
|
resizeHandler = getResizeHandler(edit);
|
||||||
conf = JSON.stringify(state.mermaid, null, 2);
|
edit.onDidChangeModelContent(function (e) {
|
||||||
}
|
try {
|
||||||
if (state) {
|
const conf = JSON.parse(edit.getValue());
|
||||||
code = state.code;
|
handleConfUpdate(conf, false);
|
||||||
}
|
} catch (e) {
|
||||||
if (!edit && conf && editorElem !== null) {
|
console.log('Error in parsed', e);
|
||||||
edit = monaco.editor.create(editorElem, {
|
configErrorStore.set(e);
|
||||||
value: [conf].join('\n'),
|
|
||||||
theme: 'myCoolTheme',
|
|
||||||
language: 'json',
|
|
||||||
});
|
|
||||||
resizeHandler = getResizeHandler(edit);
|
|
||||||
edit.onDidChangeModelContent(function (e) {
|
|
||||||
const conf = edit.getValue();
|
|
||||||
handleConfUpdate(conf);
|
|
||||||
});
|
|
||||||
handleConfUpdate(conf);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -9,27 +9,24 @@
|
|||||||
import * as monaco from 'monaco-editor';
|
import * as monaco from 'monaco-editor';
|
||||||
import { watchResize } from 'svelte-watch-resize';
|
import { watchResize } from 'svelte-watch-resize';
|
||||||
|
|
||||||
|
|
||||||
export let code = '';
|
|
||||||
const isDarkMode =
|
|
||||||
window.matchMedia('(prefers-color-scheme: dark)').matches && false;
|
|
||||||
let edit;
|
let edit;
|
||||||
export let error = false;
|
export let error = false;
|
||||||
|
|
||||||
|
|
||||||
const decArr = [];
|
const decArr = [];
|
||||||
let editorElem = null;
|
let editorElem = null;
|
||||||
let resizeHandler = () => {};
|
let resizeHandler = () => {};
|
||||||
const handleCodeUpdate = (updatedCode, updateEditor) => {
|
const handleCodeUpdate = (updatedCode, updateEditor) => {
|
||||||
try {
|
try {
|
||||||
mermaid.parse(updatedCode);
|
mermaid.parse(updatedCode);
|
||||||
if(updateEditor){
|
if (edit) {
|
||||||
edit.setValue(updatedCode);
|
if (updateEditor) {
|
||||||
|
edit.setValue(updatedCode);
|
||||||
|
}
|
||||||
|
decArr.forEach((decor) => {
|
||||||
|
edit.deltaDecorations(decor, []);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
decArr.forEach((decor) => {
|
updateCode(updatedCode, false);
|
||||||
edit.deltaDecorations(decor, []);
|
|
||||||
});
|
|
||||||
updateCode(updatedCode, false)
|
|
||||||
codeErrorStore.set(undefined);
|
codeErrorStore.set(undefined);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (e) {
|
if (e) {
|
||||||
@@ -56,12 +53,17 @@
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const unsubscribe = codeStore.subscribe((state) => {
|
||||||
|
if (state.updateEditor) {
|
||||||
|
handleCodeUpdate(state.code, true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
onMount(async () => {
|
onMount(async () => {
|
||||||
initEditor(monaco);
|
initEditor(monaco);
|
||||||
|
|
||||||
editorElem = document.getElementById('editor');
|
editorElem = document.getElementById('editor');
|
||||||
edit = monaco.editor.create(editorElem, {
|
edit = monaco.editor.create(editorElem, {
|
||||||
value: [code].join('\n'),
|
value: '',
|
||||||
theme: 'myCoolTheme',
|
theme: 'myCoolTheme',
|
||||||
language: 'mermaid',
|
language: 'mermaid',
|
||||||
});
|
});
|
||||||
@@ -70,19 +72,6 @@
|
|||||||
handleCodeUpdate(edit.getValue(), false);
|
handleCodeUpdate(edit.getValue(), false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
const unsubscribe = codeStore.subscribe((state) => {
|
|
||||||
console.log(`Code change ${JSON.stringify(state)}`);
|
|
||||||
|
|
||||||
if (state) {
|
|
||||||
code = state.code || code;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(state.updateEditor){
|
|
||||||
handleCodeUpdate(code, true);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const unsubscribeError = codeErrorStore.subscribe((_error) => {
|
const unsubscribeError = codeErrorStore.subscribe((_error) => {
|
||||||
if (_error) {
|
if (_error) {
|
||||||
error = true;
|
error = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user