Skip to content

Commit 31ff199

Browse files
committed
Reduced features
1 parent 615377b commit 31ff199

File tree

18 files changed

+121
-135
lines changed

18 files changed

+121
-135
lines changed

plugins/wiggle/src/DensityRenderer/DensityRenderer.test.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ test('inverted mode and reversed', async () => {
1717
new SimpleFeature({ id: 't2', data: { start: 101, end: 200, score: 2 } }),
1818
]
1919
const config = configSchema.create()
20+
const reducedFeatures: SimpleFeature[] = []
2021
const renderProps = {
2122
features,
2223
regions: [
@@ -39,12 +40,16 @@ test('inverted mode and reversed', async () => {
3940
height: 100,
4041
ticks: { values: [0, 100] },
4142
displayCrossHatches: false,
43+
reducedFeatures,
4244
}
4345

44-
const res = await renderToAbstractCanvas(1000, 200, renderProps, ctx =>
45-
drawDensity(ctx, renderProps),
46-
)
46+
const res = await renderToAbstractCanvas(1000, 200, renderProps, ctx => {
47+
drawDensity(ctx, renderProps)
48+
})
4749
expect(res).toMatchSnapshot({
4850
imageData: expect.any(Object),
4951
})
52+
expect(reducedFeatures.length).toBe(2)
53+
expect(reducedFeatures[0]!.get('start')).toBe(1)
54+
expect(reducedFeatures[1]!.get('start')).toBe(101)
5055
})

plugins/wiggle/src/DensityRenderer/__snapshots__/DensityRenderer.test.ts.snap

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,5 @@
33
exports[`inverted mode and reversed 1`] = `
44
{
55
"imageData": Any<Object>,
6-
"reducedFeatures": [
7-
{
8-
"end": 100,
9-
"score": 1,
10-
"start": 1,
11-
"uniqueId": "t1",
12-
},
13-
{
14-
"end": 200,
15-
"score": 2,
16-
"start": 101,
17-
"uniqueId": "t2",
18-
},
19-
],
206
}
217
`;

plugins/wiggle/src/DensityRenderer/renderDensity.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,14 @@ export async function renderDensity(
1717
const region = regions[0]!
1818
const width = (region.end - region.start) / bpPerPx
1919

20-
const { reducedFeatures, ...rest } = await updateStatus(
20+
const reducedFeatures: Feature[] = []
21+
const rest = await updateStatus(
2122
'Rendering plot',
2223
statusCallback,
2324
() =>
24-
renderToAbstractCanvas(width, height, renderProps, ctx =>
25-
drawDensity(ctx, { ...renderProps, features }),
26-
),
25+
renderToAbstractCanvas(width, height, renderProps, ctx => {
26+
drawDensity(ctx, { ...renderProps, features, reducedFeatures })
27+
}),
2728
)
2829

2930
const serialized = {

plugins/wiggle/src/LinePlotRenderer/renderLinePlot.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,19 @@ export async function renderLinePlot(
2424
const width = (region.end - region.start) / bpPerPx
2525
const colorCallback = getColorCallback(config, { defaultColor: 'grey' })
2626

27-
const { reducedFeatures, ...rest } = await updateStatus(
27+
const reducedFeatures: Feature[] = []
28+
const rest = await updateStatus(
2829
'Rendering plot',
2930
statusCallback,
3031
() =>
31-
renderToAbstractCanvas(width, height, renderProps, ctx =>
32+
renderToAbstractCanvas(width, height, renderProps, ctx => {
3233
drawLine(ctx, {
3334
...renderProps,
3435
features,
3536
colorCallback,
36-
}),
37-
),
37+
reducedFeatures,
38+
})
39+
}),
3840
)
3941

4042
const serialized = {

plugins/wiggle/src/MultiDensityRenderer/renderMultiDensity.ts

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
1-
import {
2-
groupBy,
3-
renderToAbstractCanvas,
4-
updateStatus,
5-
} from '@jbrowse/core/util'
1+
import { renderToAbstractCanvas, updateStatus } from '@jbrowse/core/util'
62
import { rpcResult } from '@jbrowse/core/util/librpc'
73
import { collectTransferables } from '@jbrowse/core/util/offscreenCanvasPonyfill'
84
import { createStopTokenChecker } from '@jbrowse/core/util/stopToken'
95

106
import { drawDensity } from '../drawDensity.ts'
11-
import { serializeWiggleFeature } from '../util.ts'
7+
import { groupFeaturesBySource, serializeWiggleFeature } from '../util.ts'
128

139
import type { MultiRenderArgsDeserialized } from '../types.ts'
1410
import type { Feature } from '@jbrowse/core/util'
@@ -31,26 +27,25 @@ export async function renderMultiDensity(
3127
const rowHeight = height / sources.length
3228
const lastCheck = createStopTokenChecker(stopToken)
3329

34-
const { reducedFeatures, ...rest } = await updateStatus(
30+
const reducedFeatures: Feature[] = []
31+
const rest = await updateStatus(
3532
'Rendering plot',
3633
statusCallback,
3734
() =>
3835
renderToAbstractCanvas(width, height, renderProps, ctx => {
39-
const groups = groupBy(features, f => f.get('source'))
40-
let feats: Feature[] = []
36+
const groups = groupFeaturesBySource(features, sources)
4137
ctx.save()
4238
for (const source of sources) {
43-
const { reducedFeatures } = drawDensity(ctx, {
39+
drawDensity(ctx, {
4440
...renderProps,
4541
features: groups[source.name] || [],
4642
height: rowHeight,
4743
lastCheck,
44+
reducedFeatures,
4845
})
4946
ctx.translate(0, rowHeight)
50-
feats = feats.concat(reducedFeatures)
5147
}
5248
ctx.restore()
53-
return { reducedFeatures: feats }
5449
}),
5550
)
5651

plugins/wiggle/src/MultiLineRenderer/renderMultiLine.ts

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
1-
import {
2-
groupBy,
3-
renderToAbstractCanvas,
4-
updateStatus,
5-
} from '@jbrowse/core/util'
1+
import { renderToAbstractCanvas, updateStatus } from '@jbrowse/core/util'
62
import { rpcResult } from '@jbrowse/core/util/librpc'
73
import { collectTransferables } from '@jbrowse/core/util/offscreenCanvasPonyfill'
84
import { createStopTokenChecker } from '@jbrowse/core/util/stopToken'
95

106
import { drawLine } from '../drawLine.ts'
11-
import { serializeWiggleFeature } from '../util.ts'
7+
import { groupFeaturesBySource, serializeWiggleFeature } from '../util.ts'
128

139
import type { MultiRenderArgsDeserialized } from '../types.ts'
1410
import type { Feature } from '@jbrowse/core/util'
@@ -30,24 +26,23 @@ export async function renderMultiLine(
3026
const width = (region.end - region.start) / bpPerPx
3127
const lastCheck = createStopTokenChecker(stopToken)
3228

33-
const { reducedFeatures, ...rest } = await updateStatus(
29+
const reducedFeatures: Feature[] = []
30+
const rest = await updateStatus(
3431
'Rendering plot',
3532
statusCallback,
3633
() =>
3734
renderToAbstractCanvas(width, height, renderProps, ctx => {
38-
const groups = groupBy(features, f => f.get('source'))
39-
let feats: Feature[] = []
35+
const groups = groupFeaturesBySource(features, sources)
4036
for (const source of sources) {
41-
const { reducedFeatures } = drawLine(ctx, {
37+
drawLine(ctx, {
4238
...renderProps,
4339
features: groups[source.name] || [],
4440
staticColor: source.color || 'blue',
4541
colorCallback: () => '', // unused when staticColor is set
4642
lastCheck,
43+
reducedFeatures,
4744
})
48-
feats = feats.concat(reducedFeatures)
4945
}
50-
return { reducedFeatures: feats }
5146
}),
5247
)
5348

plugins/wiggle/src/MultiLinearWiggleDisplay/components/SourcesGrid.tsx

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -105,14 +105,12 @@ function SourcesGrid({
105105
color={widgetColor}
106106
onChange={c => {
107107
setWidgetColor(c)
108-
for (const id of selected) {
109-
const elt = rows.find(f => f.name === id)
110-
if (elt) {
111-
elt.color = c
112-
}
113-
}
114-
115-
onChange([...rows])
108+
const selectedSet = new Set(selected)
109+
onChange(
110+
rows.map(row =>
111+
selectedSet.has(row.name) ? { ...row, color: c } : row,
112+
),
113+
)
116114
}}
117115
onClose={() => {
118116
setAnchorEl(null)
@@ -137,11 +135,11 @@ function SourcesGrid({
137135
<ColorPicker
138136
color={value || 'blue'}
139137
onChange={c => {
140-
const elt = rows.find(f => f.name === id)
141-
if (elt) {
142-
elt.color = c
143-
}
144-
onChange([...rows])
138+
onChange(
139+
rows.map(row =>
140+
row.name === id ? { ...row, color: c } : row,
141+
),
142+
)
145143
}}
146144
/>
147145
),

plugins/wiggle/src/MultiLinearWiggleDisplay/components/WiggleClusterDialog/WiggleClusterDialogManual.tsx

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ const WiggleClusterDialogManuals = observer(
5656
const [samplesPerPixel, setSamplesPerPixel] = useState('1')
5757

5858
useEffect(() => {
59-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
59+
const controller = new AbortController()
60+
const { signal } = controller
6061
;(async () => {
6162
try {
6263
setError(undefined)
@@ -79,16 +80,23 @@ const WiggleClusterDialogManuals = observer(
7980
},
8081
)) as Record<string, number[]>
8182

82-
setRet(ret)
83+
if (!signal.aborted) {
84+
setRet(ret)
85+
}
8386
} catch (e) {
84-
if (!isAbortException(e) && isAlive(model)) {
87+
if (!signal.aborted && !isAbortException(e) && isAlive(model)) {
8588
console.error(e)
8689
setError(e)
8790
}
8891
} finally {
89-
setLoading(false)
92+
if (!signal.aborted) {
93+
setLoading(false)
94+
}
9095
}
9196
})()
97+
return () => {
98+
controller.abort()
99+
}
92100
}, [model, samplesPerPixel])
93101

94102
const results = ret

plugins/wiggle/src/MultiRowLineRenderer/renderMultiRowLine.ts

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
1-
import {
2-
groupBy,
3-
renderToAbstractCanvas,
4-
updateStatus,
5-
} from '@jbrowse/core/util'
1+
import { renderToAbstractCanvas, updateStatus } from '@jbrowse/core/util'
62
import { rpcResult } from '@jbrowse/core/util/librpc'
73
import { collectTransferables } from '@jbrowse/core/util/offscreenCanvasPonyfill'
84
import { createStopTokenChecker } from '@jbrowse/core/util/stopToken'
95

106
import { drawLine } from '../drawLine.ts'
11-
import { serializeWiggleFeature } from '../util.ts'
7+
import { groupFeaturesBySource, serializeWiggleFeature } from '../util.ts'
128

139
import type { MultiRenderArgsDeserialized } from '../types.ts'
1410
import type { Feature } from '@jbrowse/core/util'
@@ -31,33 +27,32 @@ export async function renderMultiRowLine(
3127
const rowHeight = height / sources.length
3228
const lastCheck = createStopTokenChecker(stopToken)
3329

34-
const { reducedFeatures, ...rest } = await updateStatus(
30+
const reducedFeatures: Feature[] = []
31+
const rest = await updateStatus(
3532
'Rendering plot',
3633
statusCallback,
3734
() =>
3835
renderToAbstractCanvas(width, height, renderProps, ctx => {
39-
const groups = groupBy(features, f => f.get('source'))
40-
let feats: Feature[] = []
36+
const groups = groupFeaturesBySource(features, sources)
4137
ctx.save()
4238
for (const source of sources) {
43-
const { reducedFeatures } = drawLine(ctx, {
39+
drawLine(ctx, {
4440
...renderProps,
4541
features: groups[source.name] || [],
4642
height: rowHeight,
4743
staticColor: source.color || 'blue',
4844
colorCallback: () => '', // unused when staticColor is set
4945
lastCheck,
46+
reducedFeatures,
5047
})
5148
ctx.strokeStyle = 'rgba(200,200,200,0.8)'
5249
ctx.beginPath()
5350
ctx.moveTo(0, rowHeight)
5451
ctx.lineTo(width, rowHeight)
5552
ctx.stroke()
5653
ctx.translate(0, rowHeight)
57-
feats = feats.concat(reducedFeatures)
5854
}
5955
ctx.restore()
60-
return { reducedFeatures: feats }
6156
}),
6257
)
6358

plugins/wiggle/src/MultiRowXYPlotRenderer/renderMultiRowXYPlot.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
import {
22
createStopTokenChecker,
3-
groupBy,
43
renderToAbstractCanvas,
54
updateStatus,
65
} from '@jbrowse/core/util'
76
import { rpcResult } from '@jbrowse/core/util/librpc'
87
import { collectTransferables } from '@jbrowse/core/util/offscreenCanvasPonyfill'
98

109
import { drawXY } from '../drawXY.ts'
11-
import { serializeWiggleFeature } from '../util.ts'
10+
import { groupFeaturesBySource, serializeWiggleFeature } from '../util.ts'
1211

1312
import type { MultiRenderArgsDeserialized } from '../types.ts'
1413
import type { Feature } from '@jbrowse/core/util'
@@ -31,23 +30,23 @@ export async function renderMultiRowXYPlot(
3130
const rowHeight = height / sources.length
3231

3332
const lastCheck = createStopTokenChecker(stopToken)
34-
const { reducedFeatures, ...rest } = await updateStatus(
33+
const reducedFeatures: Feature[] = []
34+
const rest = await updateStatus(
3535
'Rendering plot',
3636
statusCallback,
3737
() =>
3838
renderToAbstractCanvas(width, height, renderProps, ctx => {
39-
const groups = groupBy(features, f => f.get('source'))
40-
let allReducedFeatures: Feature[] = []
39+
const groups = groupFeaturesBySource(features, sources)
4140
ctx.save()
4241
for (const source of sources) {
43-
const { reducedFeatures: reduced } = drawXY(ctx, {
42+
drawXY(ctx, {
4443
...renderProps,
4544
features: groups[source.name] || [],
4645
height: rowHeight,
4746
colorCallback: () => source.color || 'blue',
4847
lastCheck,
48+
reducedFeatures,
4949
})
50-
allReducedFeatures = allReducedFeatures.concat(reduced)
5150
ctx.strokeStyle = 'rgba(200,200,200,0.8)'
5251
ctx.beginPath()
5352
ctx.moveTo(0, rowHeight)
@@ -56,7 +55,6 @@ export async function renderMultiRowXYPlot(
5655
ctx.translate(0, rowHeight)
5756
}
5857
ctx.restore()
59-
return { reducedFeatures: allReducedFeatures }
6058
}),
6159
)
6260

0 commit comments

Comments
 (0)