/
shared.ts
99 lines (97 loc) · 2.58 KB
/
shared.ts
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
import {
getConf,
AnyConfigurationSchemaType,
} from '@jbrowse/core/configuration'
import PluginManager from '@jbrowse/core/PluginManager'
import { getSession } from '@jbrowse/core/util'
import { linearWiggleDisplayModelFactory } from '@jbrowse/plugin-wiggle'
import { types } from 'mobx-state-tree'
import { lazy } from 'react'
const EditGCContentParamsDialog = lazy(
() => import('./components/EditGCContentParams'),
)
/**
* #stateModel SharedGCContentModel
* #category display
* extends
* - [LinearWiggleDisplay](../linearwiggledisplay)
*/
export default function SharedModelF(
pluginManager: PluginManager,
configSchema: AnyConfigurationSchemaType,
) {
return types
.compose(
'SharedGCContentModel',
linearWiggleDisplayModelFactory(pluginManager, configSchema),
types.model({
/**
* #property
*/
windowSize: types.maybe(types.number),
/**
* #property
*/
windowDelta: types.maybe(types.number),
}),
)
.actions(self => ({
setGCContentParams({
windowSize,
windowDelta,
}: {
windowSize: number
windowDelta: number
}) {
self.windowSize = windowSize
self.windowDelta = windowDelta
},
}))
.views(self => ({
get windowSizeSetting() {
return self.windowSize ?? getConf(self, 'windowSize')
},
get windowDeltaSetting() {
return self.windowDelta ?? getConf(self, 'windowDelta')
},
}))
.views(self => {
const {
trackMenuItems: superTrackMenuItems,
renderProps: superRenderProps,
} = self
return {
trackMenuItems() {
return [
...superTrackMenuItems(),
{
label: 'Change GC parameters',
onClick: () => {
getSession(self).queueDialog(handleClose => [
EditGCContentParamsDialog,
{ model: self, handleClose },
])
},
},
]
},
/**
* #method
* retrieves the sequence adapter from parent track, and puts it as a
* subadapter on a GCContentAdapter
*/
renderProps() {
const sequenceAdapter = getConf(self.parentTrack, 'adapter')
return {
...superRenderProps(),
adapterConfig: {
type: 'GCContentAdapter',
sequenceAdapter,
windowSize: self.windowSizeSetting,
windowDelta: self.windowDeltaSetting,
},
}
},
}
})
}