@jbrowse/core 2.16.0 → 2.16.1
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.
- package/BaseFeatureWidget/BaseFeatureDetail/BaseCard.d.ts +3 -0
- package/BaseFeatureWidget/BaseFeatureDetail/BaseCard.js +27 -0
- package/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.d.ts +3 -0
- package/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.js +33 -0
- package/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.d.ts +11 -0
- package/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.js +66 -0
- package/BaseFeatureWidget/BaseFeatureDetail/Position.d.ts +3 -0
- package/BaseFeatureWidget/BaseFeatureDetail/Position.js +20 -0
- package/BaseFeatureWidget/BaseFeatureDetail/index.d.ts +3 -12
- package/BaseFeatureWidget/BaseFeatureDetail/index.js +22 -124
- package/BaseFeatureWidget/stateModelFactory.d.ts +3 -0
- package/BaseFeatureWidget/stateModelFactory.js +5 -1
- package/BaseFeatureWidget/util.d.ts +1 -0
- package/BaseFeatureWidget/util.js +4 -0
- package/ReExports/modules.js +3 -3
- package/package.json +2 -2
- package/tsconfig.build.tsbuildinfo +1 -1
- package/ReExports/Attributes.d.ts +0 -1
- package/ReExports/Attributes.js +0 -6
- package/ReExports/BaseCard.d.ts +0 -1
- package/ReExports/BaseCard.js +0 -6
- package/ReExports/FeatureDetails.d.ts +0 -1
- package/ReExports/FeatureDetails.js +0 -6
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.default = BaseCard;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const material_1 = require("@mui/material");
|
|
9
|
+
const mui_1 = require("tss-react/mui");
|
|
10
|
+
// icons
|
|
11
|
+
const ExpandMore_1 = __importDefault(require("@mui/icons-material/ExpandMore"));
|
|
12
|
+
const useStyles = (0, mui_1.makeStyles)()(theme => ({
|
|
13
|
+
expansionPanelDetails: {
|
|
14
|
+
display: 'block',
|
|
15
|
+
padding: theme.spacing(1),
|
|
16
|
+
},
|
|
17
|
+
icon: {
|
|
18
|
+
color: theme.palette.tertiary.contrastText || '#fff',
|
|
19
|
+
},
|
|
20
|
+
}));
|
|
21
|
+
function BaseCard({ children, title, defaultExpanded = true, }) {
|
|
22
|
+
const { classes } = useStyles();
|
|
23
|
+
return (react_1.default.createElement(material_1.Accordion, { defaultExpanded: defaultExpanded },
|
|
24
|
+
react_1.default.createElement(material_1.AccordionSummary, { expandIcon: react_1.default.createElement(ExpandMore_1.default, { className: classes.icon }) },
|
|
25
|
+
react_1.default.createElement(material_1.Typography, { variant: "button" }, title)),
|
|
26
|
+
react_1.default.createElement(material_1.AccordionDetails, { className: classes.expansionPanelDetails }, children)));
|
|
27
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.default = CoreDetails;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
// locals
|
|
9
|
+
const util_1 = require("../../util");
|
|
10
|
+
const SimpleField_1 = __importDefault(require("./SimpleField"));
|
|
11
|
+
const Position_1 = __importDefault(require("./Position"));
|
|
12
|
+
function CoreDetails(props) {
|
|
13
|
+
const { feature } = props;
|
|
14
|
+
const obj = feature;
|
|
15
|
+
const formattedFeat = { ...obj, ...obj.__jbrowsefmt };
|
|
16
|
+
const { start, end } = formattedFeat;
|
|
17
|
+
const displayedDetails = {
|
|
18
|
+
...formattedFeat,
|
|
19
|
+
length: (0, util_1.toLocale)(end - start),
|
|
20
|
+
};
|
|
21
|
+
const coreRenderedDetails = {
|
|
22
|
+
description: 'Description',
|
|
23
|
+
name: 'Name',
|
|
24
|
+
length: 'Length',
|
|
25
|
+
type: 'Type',
|
|
26
|
+
};
|
|
27
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
28
|
+
react_1.default.createElement(SimpleField_1.default, { name: "Position", value: react_1.default.createElement(Position_1.default, { ...props, feature: formattedFeat }) }),
|
|
29
|
+
Object.entries(coreRenderedDetails)
|
|
30
|
+
.map(([key, name]) => [name, displayedDetails[key]])
|
|
31
|
+
.filter(([, value]) => value != null)
|
|
32
|
+
.map(([name, value]) => (react_1.default.createElement(SimpleField_1.default, { key: name, name: name, value: value })))));
|
|
33
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { IAnyStateTreeNode } from 'mobx-state-tree';
|
|
3
|
+
import { SimpleFeatureSerialized } from '../../util';
|
|
4
|
+
export default function FeatureDetails(props: {
|
|
5
|
+
model: IAnyStateTreeNode;
|
|
6
|
+
feature: SimpleFeatureSerialized;
|
|
7
|
+
depth?: number;
|
|
8
|
+
omit?: string[];
|
|
9
|
+
descriptions?: Record<string, React.ReactNode>;
|
|
10
|
+
formatter?: (val: unknown, key: string) => React.ReactNode;
|
|
11
|
+
}): React.JSX.Element;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.default = FeatureDetails;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const ErrorBoundary_1 = require("@jbrowse/core/ui/ErrorBoundary");
|
|
9
|
+
const material_1 = require("@mui/material");
|
|
10
|
+
// locals
|
|
11
|
+
const util_1 = require("../../util");
|
|
12
|
+
const ui_1 = require("../../ui");
|
|
13
|
+
const util_2 = require("./util");
|
|
14
|
+
const SequenceFeatureDetails_1 = __importDefault(require("../SequenceFeatureDetails"));
|
|
15
|
+
const Attributes_1 = __importDefault(require("./Attributes"));
|
|
16
|
+
const BaseCard_1 = __importDefault(require("./BaseCard"));
|
|
17
|
+
const CoreDetails_1 = __importDefault(require("./CoreDetails"));
|
|
18
|
+
// coreDetails are omitted in some circumstances
|
|
19
|
+
const coreDetails = [
|
|
20
|
+
'name',
|
|
21
|
+
'start',
|
|
22
|
+
'end',
|
|
23
|
+
'strand',
|
|
24
|
+
'refName',
|
|
25
|
+
'description',
|
|
26
|
+
'type',
|
|
27
|
+
];
|
|
28
|
+
function FeatureDetails(props) {
|
|
29
|
+
const { omit = [], model, feature, depth = 0 } = props;
|
|
30
|
+
const { maxDepth } = model;
|
|
31
|
+
const { mate, name = '', id = '', type = '', subfeatures, uniqueId } = feature;
|
|
32
|
+
const pm = (0, util_1.getEnv)(model).pluginManager;
|
|
33
|
+
const session = (0, util_1.getSession)(model);
|
|
34
|
+
const ExtraPanel = pm.evaluateExtensionPoint('Core-extraFeaturePanel', null, {
|
|
35
|
+
session,
|
|
36
|
+
feature,
|
|
37
|
+
model,
|
|
38
|
+
});
|
|
39
|
+
const m = mate;
|
|
40
|
+
return (react_1.default.createElement(BaseCard_1.default, { title: (0, util_2.generateTitle)(name, id, type) },
|
|
41
|
+
react_1.default.createElement(material_1.Typography, null, "Core details"),
|
|
42
|
+
react_1.default.createElement(CoreDetails_1.default, { ...props }),
|
|
43
|
+
m ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
44
|
+
react_1.default.createElement(material_1.Divider, null),
|
|
45
|
+
react_1.default.createElement(material_1.Typography, null, "Mate details"),
|
|
46
|
+
react_1.default.createElement(CoreDetails_1.default, { ...props, feature: {
|
|
47
|
+
...m,
|
|
48
|
+
start: m.start,
|
|
49
|
+
end: m.end,
|
|
50
|
+
refName: m.refName,
|
|
51
|
+
uniqueId: `${uniqueId}-mate`,
|
|
52
|
+
} }))) : null,
|
|
53
|
+
react_1.default.createElement(material_1.Divider, null),
|
|
54
|
+
react_1.default.createElement(material_1.Typography, null, "Attributes"),
|
|
55
|
+
react_1.default.createElement(Attributes_1.default, { attributes: feature, ...props, omit: omit, omitSingleLevel: coreDetails }),
|
|
56
|
+
react_1.default.createElement(ErrorBoundary_1.ErrorBoundary, { FallbackComponent: e => react_1.default.createElement(ui_1.ErrorMessage, { error: e.error }) },
|
|
57
|
+
react_1.default.createElement(SequenceFeatureDetails_1.default, { ...props })),
|
|
58
|
+
ExtraPanel ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
59
|
+
react_1.default.createElement(material_1.Divider, null),
|
|
60
|
+
react_1.default.createElement(BaseCard_1.default, { title: ExtraPanel.name },
|
|
61
|
+
react_1.default.createElement(ExtraPanel.Component, { ...props })))) : null,
|
|
62
|
+
depth < maxDepth && (subfeatures === null || subfeatures === void 0 ? void 0 : subfeatures.length) ? (react_1.default.createElement(BaseCard_1.default, { title: "Subfeatures", defaultExpanded: depth < 1 }, subfeatures.map((sub, idx) => (react_1.default.createElement(FeatureDetails, { key: JSON.stringify(sub), feature: {
|
|
63
|
+
...sub,
|
|
64
|
+
uniqueId: `${uniqueId}_${idx}`,
|
|
65
|
+
}, model: model, depth: depth + 1 }))))) : null));
|
|
66
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.default = Position;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const util_1 = require("../../util");
|
|
9
|
+
function Position(props) {
|
|
10
|
+
const { feature } = props;
|
|
11
|
+
const strand = feature.strand;
|
|
12
|
+
const strandMap = {
|
|
13
|
+
'-1': '-',
|
|
14
|
+
'0': '',
|
|
15
|
+
'1': '+',
|
|
16
|
+
};
|
|
17
|
+
const str = strandMap[strand] ? `(${strandMap[strand]})` : '';
|
|
18
|
+
const loc = (0, util_1.assembleLocString)(feature);
|
|
19
|
+
return react_1.default.createElement(react_1.default.Fragment, null, `${loc} ${str}`);
|
|
20
|
+
}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { IAnyStateTreeNode } from 'mobx-state-tree';
|
|
3
|
-
import { SimpleFeatureSerialized } from '../../util';
|
|
4
2
|
import { BaseCardProps, BaseProps } from '../types';
|
|
5
|
-
|
|
3
|
+
import BaseCard from './BaseCard';
|
|
4
|
+
import FeatureDetails from './FeatureDetails';
|
|
6
5
|
export declare const BaseCoreDetails: (props: BaseProps) => React.JSX.Element;
|
|
7
6
|
export declare const BaseAttributes: (props: BaseProps) => React.JSX.Element;
|
|
8
7
|
export interface BaseInputProps extends BaseCardProps {
|
|
@@ -11,14 +10,6 @@ export interface BaseInputProps extends BaseCardProps {
|
|
|
11
10
|
descriptions?: Record<string, React.ReactNode>;
|
|
12
11
|
formatter?: (val: unknown, key: string) => React.ReactNode;
|
|
13
12
|
}
|
|
14
|
-
export declare function FeatureDetails(props: {
|
|
15
|
-
model: IAnyStateTreeNode;
|
|
16
|
-
feature: SimpleFeatureSerialized;
|
|
17
|
-
depth?: number;
|
|
18
|
-
omit?: string[];
|
|
19
|
-
descriptions?: Record<string, React.ReactNode>;
|
|
20
|
-
formatter?: (val: unknown, key: string) => React.ReactNode;
|
|
21
|
-
}): React.JSX.Element;
|
|
22
13
|
declare const BaseFeatureDetail: ({ model }: BaseInputProps) => React.JSX.Element | null;
|
|
23
14
|
export default BaseFeatureDetail;
|
|
24
|
-
export {
|
|
15
|
+
export { BaseCard, FeatureDetails };
|
|
@@ -3,149 +3,47 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
7
|
-
exports.BaseCard = BaseCard;
|
|
8
|
-
exports.FeatureDetails = FeatureDetails;
|
|
6
|
+
exports.FeatureDetails = exports.BaseCard = exports.BaseAttributes = exports.BaseCoreDetails = void 0;
|
|
9
7
|
const react_1 = __importDefault(require("react"));
|
|
10
|
-
const ErrorBoundary_1 = require("@jbrowse/core/ui/ErrorBoundary");
|
|
11
|
-
const material_1 = require("@mui/material");
|
|
12
|
-
const mui_1 = require("tss-react/mui");
|
|
13
8
|
const mobx_react_1 = require("mobx-react");
|
|
14
|
-
//
|
|
15
|
-
const ExpandMore_1 = __importDefault(require("@mui/icons-material/ExpandMore"));
|
|
16
|
-
// locals
|
|
17
|
-
const util_1 = require("../../util");
|
|
9
|
+
// utils
|
|
18
10
|
const ui_1 = require("../../ui");
|
|
19
|
-
const
|
|
20
|
-
const
|
|
11
|
+
const util_1 = require("./util");
|
|
12
|
+
const util_2 = require("../util");
|
|
13
|
+
// locals
|
|
21
14
|
const Attributes_1 = __importDefault(require("./Attributes"));
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
'end',
|
|
28
|
-
'strand',
|
|
29
|
-
'refName',
|
|
30
|
-
'description',
|
|
31
|
-
'type',
|
|
32
|
-
];
|
|
33
|
-
const useStyles = (0, mui_1.makeStyles)()(theme => ({
|
|
34
|
-
expansionPanelDetails: {
|
|
35
|
-
display: 'block',
|
|
36
|
-
padding: theme.spacing(1),
|
|
37
|
-
},
|
|
38
|
-
icon: {
|
|
39
|
-
color: theme.palette.tertiary.contrastText || '#fff',
|
|
40
|
-
},
|
|
41
|
-
}));
|
|
42
|
-
function BaseCard({ children, title, defaultExpanded = true, }) {
|
|
43
|
-
const { classes } = useStyles();
|
|
44
|
-
return (react_1.default.createElement(material_1.Accordion, { defaultExpanded: defaultExpanded },
|
|
45
|
-
react_1.default.createElement(material_1.AccordionSummary, { expandIcon: react_1.default.createElement(ExpandMore_1.default, { className: classes.icon }) },
|
|
46
|
-
react_1.default.createElement(material_1.Typography, { variant: "button" }, title)),
|
|
47
|
-
react_1.default.createElement(material_1.AccordionDetails, { className: classes.expansionPanelDetails }, children)));
|
|
48
|
-
}
|
|
49
|
-
function Position(props) {
|
|
50
|
-
const { feature } = props;
|
|
51
|
-
const strand = feature.strand;
|
|
52
|
-
const strandMap = {
|
|
53
|
-
'-1': '-',
|
|
54
|
-
'0': '',
|
|
55
|
-
'1': '+',
|
|
56
|
-
};
|
|
57
|
-
const str = strandMap[strand] ? `(${strandMap[strand]})` : '';
|
|
58
|
-
const loc = (0, util_1.assembleLocString)(feature);
|
|
59
|
-
return react_1.default.createElement(react_1.default.Fragment, null, `${loc} ${str}`);
|
|
60
|
-
}
|
|
61
|
-
function CoreDetails(props) {
|
|
62
|
-
const { feature } = props;
|
|
63
|
-
const obj = feature;
|
|
64
|
-
const formattedFeat = { ...obj, ...obj.__jbrowsefmt };
|
|
65
|
-
const { start, end } = formattedFeat;
|
|
66
|
-
const displayedDetails = {
|
|
67
|
-
...formattedFeat,
|
|
68
|
-
length: (0, util_1.toLocale)(end - start),
|
|
69
|
-
};
|
|
70
|
-
const coreRenderedDetails = {
|
|
71
|
-
description: 'Description',
|
|
72
|
-
name: 'Name',
|
|
73
|
-
length: 'Length',
|
|
74
|
-
type: 'Type',
|
|
75
|
-
};
|
|
76
|
-
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
77
|
-
react_1.default.createElement(SimpleField_1.default, { name: "Position", value: react_1.default.createElement(Position, { ...props, feature: formattedFeat }) }),
|
|
78
|
-
Object.entries(coreRenderedDetails)
|
|
79
|
-
.map(([key, name]) => [name, displayedDetails[key]])
|
|
80
|
-
.filter(([, value]) => value != null)
|
|
81
|
-
.map(([name, value]) => (react_1.default.createElement(SimpleField_1.default, { key: name, name: name, value: value })))));
|
|
82
|
-
}
|
|
15
|
+
const BaseCard_1 = __importDefault(require("./BaseCard"));
|
|
16
|
+
exports.BaseCard = BaseCard_1.default;
|
|
17
|
+
const CoreDetails_1 = __importDefault(require("./CoreDetails"));
|
|
18
|
+
const FeatureDetails_1 = __importDefault(require("./FeatureDetails"));
|
|
19
|
+
exports.FeatureDetails = FeatureDetails_1.default;
|
|
83
20
|
const BaseCoreDetails = (props) => {
|
|
84
21
|
const { title = 'Primary data' } = props;
|
|
85
|
-
return (react_1.default.createElement(
|
|
86
|
-
react_1.default.createElement(
|
|
22
|
+
return (react_1.default.createElement(BaseCard_1.default, { ...props, title: title },
|
|
23
|
+
react_1.default.createElement(CoreDetails_1.default, { ...props })));
|
|
87
24
|
};
|
|
88
25
|
exports.BaseCoreDetails = BaseCoreDetails;
|
|
89
26
|
const BaseAttributes = (props) => {
|
|
90
27
|
const { feature } = props;
|
|
91
|
-
return (react_1.default.createElement(
|
|
28
|
+
return (react_1.default.createElement(BaseCard_1.default, { ...props, title: "Attributes" },
|
|
92
29
|
react_1.default.createElement(Attributes_1.default, { ...props, attributes: feature })));
|
|
93
30
|
};
|
|
94
31
|
exports.BaseAttributes = BaseAttributes;
|
|
95
|
-
function FeatureDetails(props) {
|
|
96
|
-
const { omit = [], model, feature, depth = 0 } = props;
|
|
97
|
-
const { maxDepth } = model;
|
|
98
|
-
const { mate, name = '', id = '', type = '', subfeatures, uniqueId } = feature;
|
|
99
|
-
const pm = (0, util_1.getEnv)(model).pluginManager;
|
|
100
|
-
const session = (0, util_1.getSession)(model);
|
|
101
|
-
const ExtraPanel = pm.evaluateExtensionPoint('Core-extraFeaturePanel', null, {
|
|
102
|
-
session,
|
|
103
|
-
feature,
|
|
104
|
-
model,
|
|
105
|
-
});
|
|
106
|
-
const m = mate;
|
|
107
|
-
return (react_1.default.createElement(BaseCard, { title: (0, util_2.generateTitle)(name, id, type) },
|
|
108
|
-
react_1.default.createElement(material_1.Typography, null, "Core details"),
|
|
109
|
-
react_1.default.createElement(CoreDetails, { ...props }),
|
|
110
|
-
m ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
111
|
-
react_1.default.createElement(material_1.Divider, null),
|
|
112
|
-
react_1.default.createElement(material_1.Typography, null, "Mate details"),
|
|
113
|
-
react_1.default.createElement(CoreDetails, { ...props, feature: {
|
|
114
|
-
...m,
|
|
115
|
-
start: m.start,
|
|
116
|
-
end: m.end,
|
|
117
|
-
refName: m.refName,
|
|
118
|
-
uniqueId: `${uniqueId}-mate`,
|
|
119
|
-
} }))) : null,
|
|
120
|
-
react_1.default.createElement(material_1.Divider, null),
|
|
121
|
-
react_1.default.createElement(material_1.Typography, null, "Attributes"),
|
|
122
|
-
react_1.default.createElement(Attributes_1.default, { attributes: feature, ...props, omit: omit, omitSingleLevel: coreDetails }),
|
|
123
|
-
react_1.default.createElement(ErrorBoundary_1.ErrorBoundary, { FallbackComponent: e => react_1.default.createElement(ui_1.ErrorMessage, { error: e.error }) },
|
|
124
|
-
react_1.default.createElement(SequenceFeatureDetails_1.default, { ...props })),
|
|
125
|
-
ExtraPanel ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
126
|
-
react_1.default.createElement(material_1.Divider, null),
|
|
127
|
-
react_1.default.createElement(BaseCard, { title: ExtraPanel.name },
|
|
128
|
-
react_1.default.createElement(ExtraPanel.Component, { ...props })))) : null,
|
|
129
|
-
depth < maxDepth && (subfeatures === null || subfeatures === void 0 ? void 0 : subfeatures.length) ? (react_1.default.createElement(BaseCard, { title: "Subfeatures", defaultExpanded: depth < 1 }, subfeatures.map((sub, idx) => (react_1.default.createElement(FeatureDetails, { key: JSON.stringify(sub), feature: {
|
|
130
|
-
...sub,
|
|
131
|
-
uniqueId: `${uniqueId}_${idx}`,
|
|
132
|
-
}, model: model, depth: depth + 1 }))))) : null));
|
|
133
|
-
}
|
|
134
32
|
const BaseFeatureDetail = (0, mobx_react_1.observer)(function ({ model }) {
|
|
135
33
|
const { error, featureData } = model;
|
|
136
34
|
if (error) {
|
|
137
35
|
return react_1.default.createElement(ui_1.ErrorMessage, { error: error });
|
|
138
36
|
}
|
|
139
|
-
if (!featureData) {
|
|
37
|
+
else if (!featureData) {
|
|
140
38
|
return null;
|
|
141
39
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
40
|
+
else {
|
|
41
|
+
// replacing undefined with null helps with allowing fields to be hidden,
|
|
42
|
+
// setting null is not allowed by jexl so we set it to undefined to hide.
|
|
43
|
+
// see config guide. this replacement happens both here and when
|
|
44
|
+
// snapshotting the featureData
|
|
45
|
+
const featureData2 = (0, util_2.replaceUndefinedWithNull)(featureData);
|
|
46
|
+
return (0, util_1.isEmpty)(featureData2) ? null : (react_1.default.createElement(FeatureDetails_1.default, { model: model, feature: featureData2 }));
|
|
47
|
+
}
|
|
148
48
|
});
|
|
149
49
|
exports.default = BaseFeatureDetail;
|
|
150
|
-
var Attributes_2 = require("./Attributes");
|
|
151
|
-
Object.defineProperty(exports, "Attributes", { enumerable: true, get: function () { return __importDefault(Attributes_2).default; } });
|
|
@@ -76,6 +76,9 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
76
76
|
afterAttach(): void;
|
|
77
77
|
}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>, [undefined]>;
|
|
78
78
|
}, {
|
|
79
|
+
/**
|
|
80
|
+
* #volatile
|
|
81
|
+
*/
|
|
79
82
|
error: unknown;
|
|
80
83
|
} & {
|
|
81
84
|
/**
|
|
@@ -11,6 +11,7 @@ const configuration_1 = require("../configuration");
|
|
|
11
11
|
const util_1 = require("../util");
|
|
12
12
|
const mst_1 = require("../util/types/mst");
|
|
13
13
|
const model_1 = require("./SequenceFeatureDetails/model");
|
|
14
|
+
const util_2 = require("./util");
|
|
14
15
|
function formatSubfeatures(obj, depth, parse, currentDepth = 0, returnObj = {}) {
|
|
15
16
|
var _a;
|
|
16
17
|
if (depth <= currentDepth) {
|
|
@@ -77,6 +78,9 @@ function stateModelFactory(pluginManager) {
|
|
|
77
78
|
sequenceFeatureDetails: mobx_state_tree_1.types.optional((0, model_1.SequenceFeatureDetailsF)(), {}),
|
|
78
79
|
})
|
|
79
80
|
.volatile(() => ({
|
|
81
|
+
/**
|
|
82
|
+
* #volatile
|
|
83
|
+
*/
|
|
80
84
|
error: undefined,
|
|
81
85
|
}))
|
|
82
86
|
.actions(self => ({
|
|
@@ -163,7 +167,7 @@ function stateModelFactory(pluginManager) {
|
|
|
163
167
|
// hidden, setting null is not allowed by jexl so we set it to
|
|
164
168
|
// undefined to hide. see config guide. this replacement happens both
|
|
165
169
|
// here and when displaying the featureData in base feature widget
|
|
166
|
-
finalizedFeatureData:
|
|
170
|
+
finalizedFeatureData: (0, util_2.replaceUndefinedWithNull)(featureData),
|
|
167
171
|
...rest,
|
|
168
172
|
};
|
|
169
173
|
});
|
|
@@ -6,6 +6,7 @@ exports.revlist = revlist;
|
|
|
6
6
|
exports.calculateUTRs = calculateUTRs;
|
|
7
7
|
exports.calculateUTRs2 = calculateUTRs2;
|
|
8
8
|
exports.ellipses = ellipses;
|
|
9
|
+
exports.replaceUndefinedWithNull = replaceUndefinedWithNull;
|
|
9
10
|
function stitch(subfeats, sequence) {
|
|
10
11
|
return subfeats.map(sub => sequence.slice(sub.start, sub.end)).join('');
|
|
11
12
|
}
|
|
@@ -64,3 +65,6 @@ function calculateUTRs2(cds, parentFeat) {
|
|
|
64
65
|
function ellipses(slug) {
|
|
65
66
|
return slug.length > 20 ? `${slug.slice(0, 20)}...` : slug;
|
|
66
67
|
}
|
|
68
|
+
function replaceUndefinedWithNull(obj) {
|
|
69
|
+
return JSON.parse(JSON.stringify(obj, (_, v) => (v === undefined ? null : v)));
|
|
70
|
+
}
|
package/ReExports/modules.js
CHANGED
|
@@ -191,9 +191,9 @@ const MuiPrefixMUI = Object.fromEntries(Object.entries(LazyMUICore).map(([key, v
|
|
|
191
191
|
`@mui/material/${key}`,
|
|
192
192
|
value,
|
|
193
193
|
]));
|
|
194
|
-
const Attributes = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('
|
|
195
|
-
const FeatureDetails = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('
|
|
196
|
-
const BaseCard = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('
|
|
194
|
+
const Attributes = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../BaseFeatureWidget/BaseFeatureDetail/Attributes'))));
|
|
195
|
+
const FeatureDetails = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../BaseFeatureWidget/BaseFeatureDetail/FeatureDetails'))));
|
|
196
|
+
const BaseCard = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../BaseFeatureWidget/BaseFeatureDetail/BaseCard'))));
|
|
197
197
|
const DataGridEntries = {
|
|
198
198
|
DataGrid: (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('@mui/x-data-grid'))).then(module => ({ default: module.DataGrid }))),
|
|
199
199
|
GridActionsCellItem: (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('@mui/x-data-grid'))).then(module => ({
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jbrowse/core",
|
|
3
|
-
"version": "2.16.
|
|
3
|
+
"version": "2.16.1",
|
|
4
4
|
"description": "JBrowse 2 core libraries used by plugins",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jbrowse",
|
|
@@ -72,5 +72,5 @@
|
|
|
72
72
|
"access": "public",
|
|
73
73
|
"directory": "dist"
|
|
74
74
|
},
|
|
75
|
-
"gitHead": "
|
|
75
|
+
"gitHead": "c6a658d2344989895543f0456b1cf7dd3b937769"
|
|
76
76
|
}
|