Skip to content

Commit d1bb9a6

Browse files
author
Sebastian Benjamin
committed
Fix JEXL instance for browser filtration
1 parent cdd00c0 commit d1bb9a6

File tree

5 files changed

+42
-26
lines changed

5 files changed

+42
-26
lines changed

jbrowse/src/client/JBrowse/Browser/plugins/ExtendedVariantPlugin/ExtendedVariantAdapter/ExtendedVcfFeature.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,16 @@ export default class ExtendedVcfFeature extends VcfFeature {
88
super(args)
99
}
1010

11+
toJSON() {
12+
const ret: any = super.toJSON()
13+
14+
// Preserve VCF INFO header metadata through JSON/snapshot flows used by
15+
// JBrowse widgets. parser is not guaranteed to survive serialization.
16+
ret.vcfMetadataInfo = (this as any).parser?.metadata?.INFO || {}
17+
18+
return ret
19+
}
20+
1121
static extractImpact(variant: Variant) {
1222
// Only append if not present:
1323
if (variant.INFO["IMPACT"]) {

jbrowse/src/client/JBrowse/Browser/plugins/ExtendedVariantPlugin/ExtendedVariantDisplay/model.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ export default jbrowse => {
135135
rendererConfig: config,
136136
filters: new SerializableFilterChain({
137137
filters: this.activeFilters(),
138+
jexl: jbrowse.jexl,
138139
}),
139140
}
140141
},

jbrowse/src/client/JBrowse/Browser/plugins/ExtendedVariantPlugin/ExtendedVariantWidget/ExtendedVariantWidget.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ export default jbrowse => {
333333
const { model } = props
334334
const detailsConfig = JSON.parse(JSON.stringify(model.detailsConfig || {}))
335335
const feature = model.featureData
336-
const featureInfoFields = feature.parser.metadata.INFO
336+
const featureInfoFields = feature.vcfMetadataInfo || feature.parser?.metadata?.INFO || {}
337337
const [infoFields, setInfoFields] = useState<Map<string, FieldModel>>(null)
338338

339339
const feat = JSON.parse(JSON.stringify(feature))

jbrowse/src/client/JBrowse/Browser/plugins/ExtendedVariantPlugin/index.ts

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import SampleFilterWidget from './SampleFilterWidget';
1616
import GlyphType from '@jbrowse/core/pluggableElementTypes/GlyphType';
1717
import { readConfObject } from '@jbrowse/core/configuration';
1818
import { emphasize } from '@jbrowse/core/util/color';
19+
import jexl from '@jbrowse/jexl';
1920
import { deserializeFilters } from './InfoFilterWidget/filterUtil';
2021
import { passesInfoFilters, passesSampleFilters } from '../../../utils';
2122

@@ -27,6 +28,31 @@ function isUTR(feature: any) {
2728
)
2829
}
2930

31+
function evaluateInfoFilters(feature: any, serializedFilters: any) {
32+
try {
33+
const filters = typeof serializedFilters === 'string'
34+
? JSON.parse(serializedFilters)
35+
: serializedFilters
36+
const expandedFilters = deserializeFilters(filters)
37+
return passesInfoFilters(feature, expandedFilters)
38+
} catch (e) {
39+
console.error(e)
40+
return true
41+
}
42+
}
43+
44+
function evaluateSampleFilters(feature: any, serializedSampleFilters: any) {
45+
try {
46+
const sampleFilters = typeof serializedSampleFilters === 'string'
47+
? JSON.parse(serializedSampleFilters)
48+
: serializedSampleFilters
49+
return passesSampleFilters(feature, sampleFilters)
50+
} catch (e) {
51+
console.error(e)
52+
return true
53+
}
54+
}
55+
3056
export default class ExtendedVariantPlugin extends Plugin {
3157
name = 'ExtendedVariantPlugin'
3258
version = "0.0.1"
@@ -199,30 +225,10 @@ export default class ExtendedVariantPlugin extends Plugin {
199225
return val ? Number(val).toLocaleString() : val
200226
})
201227

202-
pluginManager.jexl.addFunction('passesInfoFilters', (feature, serializedFilters) => {
203-
try {
204-
const filters = typeof serializedFilters === 'string'
205-
? JSON.parse(serializedFilters)
206-
: serializedFilters
207-
const expandedFilters = deserializeFilters(filters)
208-
return passesInfoFilters(feature, expandedFilters)
209-
} catch (e) {
210-
console.error(e)
211-
return true
212-
}
213-
})
214-
215-
pluginManager.jexl.addFunction('passesSampleFilters', (feature, serializedSampleFilters) => {
216-
try {
217-
const sampleFilters = typeof serializedSampleFilters === 'string'
218-
? JSON.parse(serializedSampleFilters)
219-
: serializedSampleFilters
220-
return passesSampleFilters(feature, sampleFilters)
221-
} catch (e) {
222-
console.error(e)
223-
return true
224-
}
225-
})
228+
jexl.addFunction('passesInfoFilters', evaluateInfoFilters)
229+
jexl.addFunction('passesSampleFilters', evaluateSampleFilters)
230+
pluginManager.jexl.addFunction('passesInfoFilters', evaluateInfoFilters)
231+
pluginManager.jexl.addFunction('passesSampleFilters', evaluateSampleFilters)
226232
}
227233

228234
configure(pluginManager: PluginManager) {

jbrowse/test/src/org/labkey/test/tests/external/labModules/JBrowseTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ public void testSteps() throws Exception
8484
{
8585
setUpTest();
8686

87-
testFullTextSearch();
8887
testInferredDetails();
8988
testNoSession();
9089
testMessageDisplay();

0 commit comments

Comments
 (0)