Fix Config Update

This commit is contained in:
Sidharth Vinod
2021-01-23 13:05:32 +05:30
parent 0a27e93e18
commit 3fb966ddb0
3 changed files with 48 additions and 88 deletions
+4 -7
View File
@@ -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) => {
+29 -55
View File
@@ -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);
} }
}); });
+15 -26
View File
@@ -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;