Skip to content

Commit 71da10a

Browse files
committed
add babel plugin settings
1 parent 1f5aea9 commit 71da10a

18 files changed

+343
-142
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
"linkifyjs": "^2.1.8",
4747
"lodash.debounce": "^4.0.8",
4848
"lodash.throttle": "^4.1.1",
49-
"patronum": "^0.110.0",
49+
"patronum": "^1.6.0-next.0",
5050
"prop-types": "^15.7.2",
5151
"react": "^17.0.1",
5252
"react-dom": "^17.0.1"

src/Menu.tsx

+8-9
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
1-
import React from 'react'
2-
import {styled} from 'linaria/react'
31
import {createStore, createEvent} from 'effector'
42
import {useStore, useList} from 'effector-react'
3+
import {styled} from 'linaria/react'
4+
import React from 'react'
55

6+
import {LoadingIcon} from './components/Icons/LoadingIcon'
7+
import {selectVersion} from './editor'
8+
import {$packageVersions, $version} from './editor/state'
69
import {config} from './github/config'
7-
import {$csrf, $githubToken, $githubUser} from './github/state'
810
import {logout} from './github/index'
9-
11+
import {$csrf, $githubToken, $githubUser} from './github/state'
1012
import {clickPrettify, prettierFx} from './settings'
11-
import {packageVersions, version} from './editor/state'
12-
import {selectVersion} from './editor'
13-
import {LoadingIcon} from './components/Icons/LoadingIcon'
1413

1514
export const toggleMenu = createEvent<any>()
1615
const isMenuOpen = createStore(false).on(toggleMenu, open => !open)
@@ -261,8 +260,8 @@ export const MenuContent = () => {
261260
const token = useStore($githubToken)
262261
const isPrettifyPending = useStore(prettierFx.pending)
263262
const isOpen = useStore(isMenuOpen)
264-
const usedVersion = useStore(version)
265-
const versionList = useList(packageVersions, item => (
263+
const usedVersion = useStore($version)
264+
const versionList = useList($packageVersions, item => (
266265
<option value={item}>{item}</option>
267266
))
268267
if (!isOpen) return null

src/editor/index.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {createEvent, createEffect, Event, Effect} from 'effector'
22

3-
export const evalEffect: Effect<string, any, any> = createEffect()
3+
export const evalFx: Effect<string, any, any> = createEffect()
44

55
export const changeSources: Event<string> = createEvent()
66

src/editor/init.tsx

+22-15
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,25 @@
11
import {forward, sample} from 'effector'
2+
import {debounce} from 'patronum/debounce'
3+
4+
import {changeSources, evalFx, selectVersion} from '.'
25

3-
import {changeSources, evalEffect, selectVersion} from '.'
4-
import {sourceCode, codeError, version} from './state'
5-
import {retrieveCode, retrieveVersion} from './retrieve'
6-
import {compress} from './compression'
76
import {evaluator, versionLoader} from '../evaluator'
8-
import {$typechecker} from '../settings/state'
7+
import {$babelPluginSettings, $typechecker} from '../settings/state'
8+
import {compress} from './compression'
9+
import {retrieveCode, retrieveVersion} from './retrieve'
10+
import {$sourceCode, $codeError, $version} from './state'
911

10-
evalEffect.use(evaluator)
12+
evalFx.use(evaluator)
1113

12-
version.on(selectVersion, (_, p) => p)
14+
$version.on(selectVersion, (_, p) => p)
1315

14-
codeError
15-
.on(evalEffect.done, () => ({
16+
$codeError
17+
.on(evalFx.done, () => ({
1618
isError: false,
1719
error: null,
1820
stackFrames: [],
1921
}))
20-
.on(evalEffect.fail, (_, e) => {
22+
.on(evalFx.fail, (_, e) => {
2123
if ('stack' in e.error) {
2224
return {
2325
isError: true,
@@ -60,15 +62,20 @@ changeSources.watch(codeRaw => {
6062

6163
forward({
6264
from: changeSources,
63-
to: sourceCode,
65+
to: $sourceCode,
66+
})
67+
68+
const debouncedPluginSettings = debounce({
69+
source: $babelPluginSettings,
70+
timeout: 400,
6471
})
6572

6673
sample({
67-
source: sourceCode,
68-
clock: [sourceCode, versionLoader, $typechecker],
69-
target: evalEffect,
74+
source: $sourceCode,
75+
clock: [$sourceCode, versionLoader, $typechecker, debouncedPluginSettings],
76+
target: evalFx,
7077
})
7178

72-
evalEffect(sourceCode.getState())
79+
evalFx($sourceCode.getState())
7380
changeSources(retrieveCode())
7481
selectVersion(retrieveVersion())

src/editor/state.tsx

+9-9
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
import {createStore, Store} from 'effector'
1+
import {createStore} from 'effector'
22

3-
import {retrieveCode} from './retrieve'
4-
import defaultVersions from '../versions.json'
53
import {StackFrame} from '../evaluator/stackframe/stack-frame'
64
import {$typechecker} from '../settings/state'
5+
import defaultVersions from '../versions.json'
6+
import {retrieveCode} from './retrieve'
77

8-
export const version: Store<string> = createStore(defaultVersions[0])
9-
export const packageVersions: Store<string[]> = createStore(defaultVersions)
10-
export const sourceCode: Store<string> = createStore(retrieveCode())
11-
export const compiledCode: Store<string> = createStore('')
12-
export const codeError = createStore<
8+
export const $version = createStore(defaultVersions[0])
9+
export const $packageVersions = createStore(defaultVersions)
10+
export const $sourceCode = createStore(retrieveCode())
11+
export const $compiledCode = createStore('')
12+
export const $codeError = createStore<
1313
| {
1414
isError: true
1515
error: Error
@@ -26,7 +26,7 @@ export const codeError = createStore<
2626
stackFrames: [],
2727
})
2828

29-
export const mode = $typechecker.map((typechecker): string => {
29+
export const $mode = $typechecker.map((typechecker): string => {
3030
if (typechecker === 'typescript') return 'text/typescript-jsx'
3131
return 'text/flow-jsx'
3232
})

src/editor/view.tsx

+15-16
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,33 @@
1-
import React from 'react'
21
import CodeMirror from 'codemirror'
3-
import debounce from 'lodash.debounce'
4-
import {attach, forward, createEffect} from 'effector'
5-
import {createGate, useGate} from 'effector-react'
6-
7-
import './mode/jsx'
8-
9-
import 'codemirror/addon/lint/lint.css'
10-
import 'codemirror/addon/lint/lint'
112
import 'codemirror/addon/comment/comment'
12-
import 'codemirror/addon/wrap/hardwrap'
13-
import 'codemirror/addon/fold/foldgutter'
143
import 'codemirror/addon/fold/brace-fold'
154
import 'codemirror/addon/fold/comment-fold'
16-
import 'codemirror/keymap/sublime'
5+
import 'codemirror/addon/fold/foldgutter'
176
import 'codemirror/addon/fold/foldgutter.css'
7+
import 'codemirror/addon/lint/lint'
8+
import 'codemirror/addon/lint/lint.css'
9+
import 'codemirror/addon/wrap/hardwrap'
10+
import 'codemirror/keymap/sublime'
11+
import {attach, forward, createEffect} from 'effector'
12+
import {createGate, useGate} from 'effector-react'
13+
import debounce from 'lodash.debounce'
14+
import React from 'react'
1815

19-
import {mode, sourceCode} from './state'
2016
import {codeMarkLine, codeSetCursor, codeCursorActivity, changeSources} from '.'
17+
2118
import {codeMirrorConfig} from './codeMirrorConfig'
19+
import './mode/jsx'
20+
import {$mode, $sourceCode} from './state'
2221

2322
export let codeMirror: CodeMirror.EditorFromTextArea
2423

2524
const CodeMirrorGate = createGate<{}>()
2625

27-
mode.updates.watch(mode => {
26+
$mode.updates.watch(mode => {
2827
codeMirror.setOption('mode', mode)
2928
})
3029

31-
sourceCode.updates.watch(code => {
30+
$sourceCode.updates.watch(code => {
3231
if (codeMirror.getValue() !== code) {
3332
codeMirror.setValue(code)
3433
}
@@ -90,7 +89,7 @@ const setupCodeMirrorFx = createEffect(
9089
forward({
9190
from: CodeMirrorGate.open,
9291
to: attach({
93-
source: {code: sourceCode, mode},
92+
source: {code: $sourceCode, mode: $mode},
9493
effect: setupCodeMirrorFx,
9594
}),
9695
})

0 commit comments

Comments
 (0)