jbrowse-plugin-gwas 2.0.6 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ declare const AddFiltersDialog: ({ model, handleClose, }: {
3
+ model: {
4
+ jexlFilters?: string[];
5
+ activeFilters: string[];
6
+ setJexlFilters: (arg?: string[]) => void;
7
+ };
8
+ handleClose: () => void;
9
+ }) => React.JSX.Element;
10
+ export default AddFiltersDialog;
@@ -0,0 +1,79 @@
1
+ import React from 'react';
2
+ import { useEffect, useState } from 'react';
3
+ import { Dialog } from '@jbrowse/core/ui';
4
+ import { stringToJexlExpression } from '@jbrowse/core/util/jexlStrings';
5
+ import { Button, DialogActions, DialogContent, TextField } from '@mui/material';
6
+ import { observer } from 'mobx-react';
7
+ import { makeStyles } from 'tss-react/mui';
8
+ const useStyles = makeStyles()({
9
+ dialogContent: {
10
+ width: '80em',
11
+ },
12
+ textAreaFont: {
13
+ fontFamily: 'Courier New',
14
+ },
15
+ error: {
16
+ color: 'red',
17
+ fontSize: '0.8em',
18
+ },
19
+ });
20
+ function checkJexl(code) {
21
+ stringToJexlExpression(code);
22
+ }
23
+ const AddFiltersDialog = observer(function ({ model, handleClose, }) {
24
+ const { classes } = useStyles();
25
+ const { activeFilters } = model;
26
+ const [data, setData] = useState(activeFilters.join('\n'));
27
+ const [error, setError] = useState();
28
+ useEffect(() => {
29
+ try {
30
+ data
31
+ .split('\n')
32
+ .map(line => line.trim())
33
+ .filter(line => !!line)
34
+ .map(line => {
35
+ checkJexl(line.trim());
36
+ });
37
+ setError(undefined);
38
+ }
39
+ catch (e) {
40
+ console.error(e);
41
+ setError(e);
42
+ }
43
+ }, [data]);
44
+ return (React.createElement(Dialog, { maxWidth: "xl", open: true, onClose: handleClose, title: "Add track filters" },
45
+ React.createElement(DialogContent, null,
46
+ React.createElement("div", null,
47
+ "Add filters, in jexl format, one per line, starting with the string jexl:. Examples:",
48
+ ' ',
49
+ React.createElement("ul", null,
50
+ React.createElement("li", null,
51
+ React.createElement("code", null, "jexl:get(feature,'name')=='BRCA1'"),
52
+ " - show only feature where the name attribute is BRCA1"),
53
+ React.createElement("li", null,
54
+ React.createElement("code", null, "jexl:get(feature,'type')=='gene'"),
55
+ " - show only gene type features in a GFF that has many other feature types"),
56
+ React.createElement("li", null,
57
+ React.createElement("code", null, "jexl:get(feature,'score') > 400"),
58
+ " - show only features that have a score greater than 400"))),
59
+ error ? React.createElement("p", { className: classes.error }, `${error}`) : null,
60
+ React.createElement(TextField, { variant: "outlined", multiline: true, minRows: 5, maxRows: 10, className: classes.dialogContent, fullWidth: true, value: data, onChange: event => {
61
+ setData(event.target.value);
62
+ }, slotProps: {
63
+ input: {
64
+ classes: {
65
+ input: classes.textAreaFont,
66
+ },
67
+ },
68
+ } })),
69
+ React.createElement(DialogActions, null,
70
+ React.createElement(Button, { variant: "contained", color: "primary", type: "submit", autoFocus: true, disabled: !!error, onClick: () => {
71
+ model.setJexlFilters(data.split('\n'));
72
+ handleClose();
73
+ } }, "Submit"),
74
+ React.createElement(Button, { variant: "contained", color: "secondary", onClick: () => {
75
+ handleClose();
76
+ } }, "Cancel"))));
77
+ });
78
+ export default AddFiltersDialog;
79
+ //# sourceMappingURL=AddFiltersDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddFiltersDialog.js","sourceRoot":"","sources":["../../src/LinearManhattanDisplay/AddFiltersDialog.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,9 @@
1
+ import SerializableFilterChain from '@jbrowse/core/pluggableElementTypes/renderers/util/serializableFilterChain';
1
2
  import type PluginManager from '@jbrowse/core/PluginManager';
3
+ import type { AnyConfigurationSchemaType } from '@jbrowse/core/configuration';
4
+ import type { MenuItem } from '@jbrowse/core/ui';
2
5
  import type { Feature } from '@jbrowse/core/util';
3
- export declare function stateModelFactory(pluginManager: PluginManager, configSchema: any): import("mobx-state-tree").IModelType<{
6
+ export declare function stateModelFactory(pluginManager: PluginManager, configSchema: AnyConfigurationSchemaType): import("mobx-state-tree").IModelType<{
4
7
  id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
5
8
  type: import("mobx-state-tree").ISimpleType<string>;
6
9
  rpcDriverName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
@@ -12,7 +15,9 @@ export declare function stateModelFactory(pluginManager: PluginManager, configSc
12
15
  } & {
13
16
  blockState: import("mobx-state-tree").IMapType<import("mobx-state-tree").IModelType<{
14
17
  key: import("mobx-state-tree").ISimpleType<string>;
15
- region: import("mobx-state-tree").IType<import("@jbrowse/core/util").Region, import("@jbrowse/core/util").Region, import("@jbrowse/core/util").Region>;
18
+ region: import("mobx-state-tree").IType<import("@jbrowse/core/util" /**
19
+ * #property
20
+ */).Region, import("@jbrowse/core/util").Region, import("@jbrowse/core/util").Region>;
16
21
  reloadFlag: import("mobx-state-tree").IType<number | undefined, number, number>;
17
22
  isLeftEndOfDisplayedRegion: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
18
23
  isRightEndOfDisplayedRegion: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
@@ -30,7 +35,12 @@ export declare function stateModelFactory(pluginManager: PluginManager, configSc
30
35
  model: {
31
36
  error?: unknown;
32
37
  reload: () => void;
33
- message: React.ReactNode;
38
+ message: React.ReactNode /**
39
+ * #action
40
+ * this overrides the BaseLinearDisplayModel to avoid popping up a
41
+ * feature detail display, but still sets the feature selection on the
42
+ * model so listeners can detect a click
43
+ */;
34
44
  filled?: boolean;
35
45
  status?: string;
36
46
  reactElement?: React.ReactElement;
@@ -93,11 +103,19 @@ export declare function stateModelFactory(pluginManager: PluginManager, configSc
93
103
  max: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
94
104
  min: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
95
105
  }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>, [undefined]>;
96
- configuration: import("@jbrowse/core/configuration").AnyConfigurationSchemaType;
106
+ configuration: AnyConfigurationSchemaType;
97
107
  } & {
98
108
  type: import("mobx-state-tree").ISimpleType<"LinearWiggleDisplay">;
99
109
  } & {
100
110
  type: import("mobx-state-tree").ISimpleType<"LinearManhattanDisplay">;
111
+ /**
112
+ * #property
113
+ */
114
+ configuration: AnyConfigurationSchemaType;
115
+ /**
116
+ * #property
117
+ */
118
+ jexlFilters: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IArrayType<import("mobx-state-tree").ISimpleType<string>>>;
101
119
  }, {
102
120
  rendererTypeName: string;
103
121
  error: unknown;
@@ -271,9 +289,9 @@ export declare function stateModelFactory(pluginManager: PluginManager, configSc
271
289
  } & import("mobx-state-tree/dist/internal").NonEmptyObject & {
272
290
  setSubschema(slotName: string, data: Record<string, unknown>): Record<string, unknown> | ({
273
291
  [x: string]: any;
274
- } & import("mobx-state-tree/dist/internal").NonEmptyObject & any & import("mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>);
275
- } & import("mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>);
276
- } & import("mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>;
292
+ } & import("mobx-state-tree/dist/internal").NonEmptyObject & any & import("mobx-state-tree").IStateTreeNode<AnyConfigurationSchemaType>);
293
+ } & import("mobx-state-tree").IStateTreeNode<AnyConfigurationSchemaType>);
294
+ } & import("mobx-state-tree").IStateTreeNode<AnyConfigurationSchemaType>;
277
295
  readonly autoscaleType: any;
278
296
  } & {
279
297
  readonly domain: number[] | undefined;
@@ -396,6 +414,10 @@ export declare function stateModelFactory(pluginManager: PluginManager, configSc
396
414
  readonly rendererTypeName: string;
397
415
  readonly needsScalebar: boolean;
398
416
  readonly regionTooLarge: boolean;
417
+ /**
418
+ * #getter
419
+ */
420
+ readonly activeFilters: any;
399
421
  } & {
400
422
  /**
401
423
  * #action
@@ -404,5 +426,31 @@ export declare function stateModelFactory(pluginManager: PluginManager, configSc
404
426
  * model so listeners can detect a click
405
427
  */
406
428
  selectFeature(feature: Feature): void;
429
+ /**
430
+ * #action
431
+ */
432
+ setJexlFilters(f?: string[]): void;
433
+ } & {
434
+ /**
435
+ * #method
436
+ */
437
+ renderProps(): {
438
+ config: {
439
+ [x: string]: any;
440
+ } & import("mobx-state-tree/dist/internal").NonEmptyObject & {
441
+ setSubschema(slotName: string, data: Record<string, unknown>): Record<string, unknown> | ({
442
+ [x: string]: any;
443
+ } & import("mobx-state-tree/dist/internal").NonEmptyObject & {
444
+ setSubschema(slotName: string, data: Record<string, unknown>): Record<string, unknown> | ({
445
+ [x: string]: any;
446
+ } & import("mobx-state-tree/dist/internal").NonEmptyObject & any & import("mobx-state-tree").IStateTreeNode<AnyConfigurationSchemaType>);
447
+ } & import("mobx-state-tree").IStateTreeNode<AnyConfigurationSchemaType>);
448
+ } & import("mobx-state-tree").IStateTreeNode<AnyConfigurationSchemaType>;
449
+ filters: SerializableFilterChain;
450
+ };
451
+ /**
452
+ * #method
453
+ */
454
+ trackMenuItems(): MenuItem[];
407
455
  }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
408
456
  export type LinearManhattanDisplayModel = ReturnType<typeof stateModelFactory>;
@@ -1,14 +1,27 @@
1
+ import { lazy } from 'react';
2
+ import { ConfigurationReference, getConf } from '@jbrowse/core/configuration';
3
+ import SerializableFilterChain from '@jbrowse/core/pluggableElementTypes/renderers/util/serializableFilterChain';
1
4
  import { getContainingTrack, getContainingView, getSession, isSelectionContainer, isSessionModelWithWidgets, } from '@jbrowse/core/util';
5
+ import { cast, types } from 'mobx-state-tree';
2
6
  import TooltipComponent from './TooltipComponent';
7
+ // lazies
8
+ const AddFiltersDialog = lazy(() => import('./AddFiltersDialog'));
3
9
  export function stateModelFactory(pluginManager, configSchema) {
4
- const { types } = pluginManager.lib['mobx-state-tree'];
5
10
  const WigglePlugin = pluginManager.getPlugin('WigglePlugin');
6
11
  const { linearWiggleDisplayModelFactory } = WigglePlugin.exports;
7
- return types.compose('LinearManhattanDisplay', linearWiggleDisplayModelFactory(pluginManager, configSchema), types
8
- .model({
12
+ return types
13
+ .compose('LinearManhattanDisplay', linearWiggleDisplayModelFactory(pluginManager, configSchema), types.model({
9
14
  type: types.literal('LinearManhattanDisplay'),
10
- })
11
- .views(() => ({
15
+ /**
16
+ * #property
17
+ */
18
+ configuration: ConfigurationReference(configSchema),
19
+ /**
20
+ * #property
21
+ */
22
+ jexlFilters: types.maybe(types.array(types.string)),
23
+ }))
24
+ .views(self => ({
12
25
  get TooltipComponent() {
13
26
  return TooltipComponent;
14
27
  },
@@ -21,6 +34,15 @@ export function stateModelFactory(pluginManager, configSchema) {
21
34
  get regionTooLarge() {
22
35
  return false;
23
36
  },
37
+ /**
38
+ * #getter
39
+ */
40
+ get activeFilters() {
41
+ var _a;
42
+ // config jexlFilters are deferred evaluated so they are prepended with
43
+ // jexl at runtime rather than being stored with jexl in the config
44
+ return ((_a = self.jexlFilters) !== null && _a !== void 0 ? _a : getConf(self, 'jexlFilters').map((r) => `jexl:${r}`));
45
+ },
24
46
  }))
25
47
  .actions(self => ({
26
48
  /**
@@ -43,6 +65,50 @@ export function stateModelFactory(pluginManager, configSchema) {
43
65
  session.setSelection(feature);
44
66
  }
45
67
  },
46
- })));
68
+ /**
69
+ * #action
70
+ */
71
+ setJexlFilters(f) {
72
+ self.jexlFilters = cast(f);
73
+ },
74
+ }))
75
+ .views(self => {
76
+ const { trackMenuItems: superTrackMenuItems, renderProps: superRenderProps, } = self;
77
+ return {
78
+ /**
79
+ * #method
80
+ */
81
+ renderProps() {
82
+ const superProps = superRenderProps();
83
+ return {
84
+ ...superProps,
85
+ config: self.rendererConfig,
86
+ filters: new SerializableFilterChain({
87
+ filters: self.activeFilters,
88
+ }),
89
+ };
90
+ },
91
+ /**
92
+ * #method
93
+ */
94
+ trackMenuItems() {
95
+ return [
96
+ ...superTrackMenuItems(),
97
+ {
98
+ label: 'Edit filters',
99
+ onClick: () => {
100
+ getSession(self).queueDialog(handleClose => [
101
+ AddFiltersDialog,
102
+ {
103
+ model: self,
104
+ handleClose,
105
+ },
106
+ ]);
107
+ },
108
+ },
109
+ ];
110
+ },
111
+ };
112
+ });
47
113
  }
48
114
  //# sourceMappingURL=stateModelFactory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stateModelFactory.js","sourceRoot":"","sources":["../../src/LinearManhattanDisplay/stateModelFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAA;AAE3B,OAAO,gBAAgB,MAAM,oBAAoB,CAAA;AAMjD,MAAM,UAAU,iBAAiB,CAC/B,aAA4B,EAC5B,YAAiB;IAEjB,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;IACtD,MAAM,YAAY,GAAG,aAAa,CAAC,SAAS,CAAC,cAAc,CAAiB,CAAA;IAC5E,MAAM,EAAE,+BAA+B,EAAE,GAAG,YAAY,CAAC,OAAO,CAAA;IAChE,OAAO,KAAK,CAAC,OAAO,CAClB,wBAAwB,EACxB,+BAA+B,CAAC,aAAa,EAAE,YAAY,CAAC,EAC5D,KAAK;SACF,KAAK,CAAC;QACL,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,wBAAwB,CAAC;KAC9C,CAAC;SACD,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QACZ,IAAI,gBAAgB;YAClB,OAAO,gBAAgB,CAAA;QACzB,CAAC;QACD,IAAI,gBAAgB;YAClB,OAAO,yBAAyB,CAAA;QAClC,CAAC;QACD,IAAI,aAAa;YACf,OAAO,IAAI,CAAA;QACb,CAAC;QACD,IAAI,cAAc;YAChB,OAAO,KAAK,CAAA;QACd,CAAC;KACF,CAAC,CAAC;SACF,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB;;;;;WAKG;QACH,aAAa,CAAC,OAAgB;YAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;YAChC,IAAI,yBAAyB,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvC,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CACrC,mBAAmB,EACnB,aAAa,EACb;oBACE,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC;oBAC7B,KAAK,EAAE,kBAAkB,CAAC,IAAI,CAAC;oBAC/B,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE;iBAC9B,CACF,CAAA;gBAED,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAA;YACnC,CAAC;YACD,IAAI,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;YAC/B,CAAC;QACH,CAAC;KACF,CAAC,CAAC,CACN,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"stateModelFactory.js","sourceRoot":"","sources":["../../src/LinearManhattanDisplay/stateModelFactory.ts"],"names":[],"mappings":"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"}