Files
mermaid-live-editor/src/code-store.js
T
2021-05-04 17:29:38 +05:30

50 lines
1.4 KiB
JavaScript

import { writable, get } from 'svelte/store';
import { Base64 } from 'js-base64';
import { replace, location } from 'svelte-spa-router';
const isDarkMode =
window.matchMedia('(prefers-color-scheme: dark)').matches && false;
const defaultState = {
code: `graph TD
A[Christmas] -->|Get money| B(Go shopping)
B --> C{Let me think}
C -->|One| D[Laptop]
C -->|Two| E[iPhone]
C -->|Three| F[fa:fa-car Car]
`,
mermaid: { theme: isDarkMode ? 'dark' : 'default' },
};
export const codeStore = writable(defaultState);
export const fromUrl = (data) => {
let state;
try {
const stateStr = Base64.decode(data);
console.log('state from url', stateStr);
state = JSON.parse(stateStr);
} catch (e) {
console.error('Init error', e);
state = defaultState;
}
codeStore.set({ ...state, updateEditor: true });
};
export const updateCodeStore = (newState) => {
codeStore.set(newState);
};
export const updateCode = (code, updateEditor) => {
const state = get(codeStore);
codeStore.set({ ...state, code, updateEditor });
};
export const updateConfig = (config, updateEditor) => {
const state = get(codeStore);
codeStore.set({ ...state, mermaid: config, updateEditor });
};
export const initURLSubscription = () => {
codeStore.subscribe((state) => {
const currentLocation = get(location).split('/')[1];
replace(
`/${currentLocation || 'edit'}/` + Base64.encodeURI(JSON.stringify(state))
);
});
};