-
-
Notifications
You must be signed in to change notification settings - Fork 222
/
view.js
executable file
·118 lines (110 loc) · 2.88 KB
/
view.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
//@flow
import React from 'react'
import {combine} from 'effector'
import {createComponent} from 'effector-react'
import debounce from 'lodash.debounce'
import 'codemirror/lib/codemirror.css'
import './styles.css'
import {VersionLink} from './components/VersionLink'
import {VersionSelector} from './components/VersionSelector'
import {Header} from './components/Header'
import Panel from './components/CodeMirrorPanel'
import Errors from './components/Errors'
import SecondanaryTabs from './components/SecondanaryTabs'
import Outline from './components/Outline'
import {TypeHintView} from './flow/view'
import {isDesktopChanges, tab} from './tabs/domain'
import {TabsView} from './tabs/view'
import {mode} from './mode/domain'
import {
selectVersion,
sourceCode,
changeSources,
performLint,
codeError,
stats,
version,
codeMarkLine,
codeCursorActivity,
codeSetCursor,
packageVersions,
} from './domain'
import {typechecker} from './settings/domain'
const OutlineView = createComponent(
{
displayOutline: combine(tab, isDesktopChanges, (tab, isDesktop) =>
isDesktop ? true : tab === 'outline',
),
stats,
},
({}, {displayOutline, stats}) => (
<Outline
style={{visibility: displayOutline ? 'visible' : 'hidden'}}
{...stats}
/>
),
)
const ErrorsView = createComponent(
codeError,
({}, {isError, error, stackFrames}) => (
<Errors isError={isError} error={error} stackFrames={stackFrames} />
),
)
const changeSourcesDebounced = debounce(changeSources, 500)
const CodeView = createComponent(
{
displayEditor: combine(tab, isDesktopChanges, (tab, isDesktop) =>
isDesktop ? true : tab === 'editor',
),
sourceCode,
mode,
},
({}, {displayEditor, mode, sourceCode}) => (
<div
className="sources"
style={{visibility: displayEditor ? 'visible' : 'hidden'}}>
<Panel
markLine={codeMarkLine}
setCursor={codeSetCursor}
performLint={performLint}
onCursorActivity={codeCursorActivity}
value={sourceCode}
mode={mode}
onChange={changeSourcesDebounced}
lineWrapping
passive
/>
<TypeHintView />
</div>
),
)
const VersionLinkView = createComponent(version, ({}, version) => (
<VersionLink version={version} />
))
//const versions = useStore(packageVersions)
//const selected = useStore(version)
//TODO: bug in createComponent, probably actually in watchers
//,
const VersionSelectorView = createComponent(
{versions: packageVersions, selected: version},
(_, {versions, selected}) => (
<VersionSelector
versions={versions}
selected={selected}
onChange={selectVersion}
/>
),
)
export default (
<div className="try-inner">
<VersionLinkView />
<OutlineView />
<CodeView />
<Header>
<VersionSelectorView />
</Header>
<TabsView />
<SecondanaryTabs />
<ErrorsView />
</div>
)