@jbrowse/plugin-spreadsheet-view 2.13.1 → 2.15.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.
- package/dist/LaunchSpreadsheetView/index.js +2 -5
- package/dist/SpreadsheetView/components/CellData.d.ts +1 -1
- package/dist/SpreadsheetView/components/ColumnFilterControls.js +1 -4
- package/dist/SpreadsheetView/components/ColumnMenu.js +25 -11
- package/dist/SpreadsheetView/components/DataRow.d.ts +2 -2
- package/dist/SpreadsheetView/components/DataRow.js +1 -1
- package/dist/SpreadsheetView/components/DataTable.d.ts +1 -1
- package/dist/SpreadsheetView/components/DataTableHeader.js +23 -20
- package/dist/SpreadsheetView/components/GlobalFilterControls.js +6 -3
- package/dist/SpreadsheetView/components/ImportWizard.js +16 -6
- package/dist/SpreadsheetView/components/NumberEditor.js +3 -1
- package/dist/SpreadsheetView/components/RowCountMessage.d.ts +3 -4
- package/dist/SpreadsheetView/components/RowCountMessage.js +6 -1
- package/dist/SpreadsheetView/components/RowMenu.d.ts +2 -2
- package/dist/SpreadsheetView/components/RowMenu.js +1 -0
- package/dist/SpreadsheetView/components/Spreadsheet.d.ts +1 -1
- package/dist/SpreadsheetView/components/Spreadsheet.js +3 -2
- package/dist/SpreadsheetView/components/StatusBar.js +12 -9
- package/dist/SpreadsheetView/importAdapters/BedImport.js +2 -3
- package/dist/SpreadsheetView/importAdapters/ImportUtils.js +1 -0
- package/dist/SpreadsheetView/importAdapters/STARFusionImport.js +1 -2
- package/dist/SpreadsheetView/importAdapters/VcfImport.js +4 -2
- package/dist/SpreadsheetView/models/ColumnDataTypes/LocEnd.js +1 -1
- package/dist/SpreadsheetView/models/ColumnDataTypes/LocStart.js +1 -1
- package/dist/SpreadsheetView/models/ColumnDataTypes/LocString.js +3 -11
- package/dist/SpreadsheetView/models/ColumnDataTypes/Number.js +5 -8
- package/dist/SpreadsheetView/models/ColumnDataTypes/Text.js +1 -4
- package/dist/SpreadsheetView/models/FilterControls.js +2 -5
- package/dist/SpreadsheetView/models/ImportWizard.js +0 -7
- package/dist/SpreadsheetView/models/Row.js +0 -2
- package/dist/SpreadsheetView/models/Spreadsheet.d.ts +1 -1
- package/dist/SpreadsheetView/models/Spreadsheet.js +2 -2
- package/dist/SpreadsheetView/models/SpreadsheetView.d.ts +0 -4
- package/dist/SpreadsheetView/models/SpreadsheetView.js +6 -10
- package/dist/SpreadsheetView/models/StaticRowSet.js +3 -6
- package/esm/LaunchSpreadsheetView/index.js +2 -5
- package/esm/SpreadsheetView/components/CellData.d.ts +1 -1
- package/esm/SpreadsheetView/components/ColumnFilterControls.js +1 -4
- package/esm/SpreadsheetView/components/ColumnMenu.js +25 -11
- package/esm/SpreadsheetView/components/DataRow.d.ts +2 -2
- package/esm/SpreadsheetView/components/DataRow.js +1 -1
- package/esm/SpreadsheetView/components/DataTable.d.ts +1 -1
- package/esm/SpreadsheetView/components/DataTableHeader.js +23 -20
- package/esm/SpreadsheetView/components/GlobalFilterControls.js +6 -3
- package/esm/SpreadsheetView/components/ImportWizard.js +16 -6
- package/esm/SpreadsheetView/components/NumberEditor.js +3 -1
- package/esm/SpreadsheetView/components/RowCountMessage.d.ts +3 -4
- package/esm/SpreadsheetView/components/RowCountMessage.js +3 -1
- package/esm/SpreadsheetView/components/RowMenu.d.ts +2 -2
- package/esm/SpreadsheetView/components/RowMenu.js +1 -0
- package/esm/SpreadsheetView/components/Spreadsheet.d.ts +1 -1
- package/esm/SpreadsheetView/components/Spreadsheet.js +3 -2
- package/esm/SpreadsheetView/components/StatusBar.js +12 -9
- package/esm/SpreadsheetView/importAdapters/BedImport.js +2 -3
- package/esm/SpreadsheetView/importAdapters/ImportUtils.js +1 -0
- package/esm/SpreadsheetView/importAdapters/STARFusionImport.js +1 -2
- package/esm/SpreadsheetView/importAdapters/VcfImport.js +4 -2
- package/esm/SpreadsheetView/models/ColumnDataTypes/LocEnd.js +1 -1
- package/esm/SpreadsheetView/models/ColumnDataTypes/LocStart.js +1 -1
- package/esm/SpreadsheetView/models/ColumnDataTypes/LocString.js +3 -11
- package/esm/SpreadsheetView/models/ColumnDataTypes/Number.js +5 -8
- package/esm/SpreadsheetView/models/ColumnDataTypes/Text.js +1 -4
- package/esm/SpreadsheetView/models/ColumnDataTypes/index.js +2 -2
- package/esm/SpreadsheetView/models/FilterControls.js +2 -5
- package/esm/SpreadsheetView/models/ImportWizard.js +0 -7
- package/esm/SpreadsheetView/models/Row.js +0 -2
- package/esm/SpreadsheetView/models/Spreadsheet.d.ts +1 -1
- package/esm/SpreadsheetView/models/Spreadsheet.js +2 -2
- package/esm/SpreadsheetView/models/SpreadsheetView.d.ts +0 -4
- package/esm/SpreadsheetView/models/SpreadsheetView.js +7 -11
- package/esm/SpreadsheetView/models/StaticRowSet.js +3 -6
- package/package.json +6 -6
|
@@ -30,7 +30,6 @@ export async function parseSTARFusionBuffer(buffer, options) {
|
|
|
30
30
|
});
|
|
31
31
|
// decorate each row with a feature object in its extendedData
|
|
32
32
|
data.rowSet.rows.forEach((row, rowNumber) => {
|
|
33
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
34
33
|
const featureData = {};
|
|
35
34
|
row.cells.forEach(({ text }, columnNumber) => {
|
|
36
35
|
const column = data.columns[columnNumber];
|
|
@@ -52,7 +51,7 @@ export async function parseSTARFusionBuffer(buffer, options) {
|
|
|
52
51
|
}
|
|
53
52
|
else if (text && numericColumns[column.name]) {
|
|
54
53
|
// some other column, numeric
|
|
55
|
-
featureData[column.name] = parseFloat(text);
|
|
54
|
+
featureData[column.name] = Number.parseFloat(text);
|
|
56
55
|
}
|
|
57
56
|
else {
|
|
58
57
|
// some other column, text
|
|
@@ -12,7 +12,6 @@ const vcfCoreColumns = [
|
|
|
12
12
|
{ name: 'INFO', type: 'Text' }, // 7
|
|
13
13
|
{ name: 'FORMAT', type: 'Text' }, // 8
|
|
14
14
|
];
|
|
15
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
16
15
|
function vcfRecordToRow(vcfParser, line, lineNumber) {
|
|
17
16
|
const vcfVariant = vcfParser.parseLine(line);
|
|
18
17
|
const vcfFeature = new VcfFeature({
|
|
@@ -65,7 +64,10 @@ export function parseVcfBuffer(buffer, options = {}) {
|
|
|
65
64
|
for (let i = 0; i < vcfParser.samples.length; i += 1) {
|
|
66
65
|
const oi = vcfCoreColumns.length + i;
|
|
67
66
|
columnDisplayOrder.push(oi);
|
|
68
|
-
columns[oi] = {
|
|
67
|
+
columns[oi] = {
|
|
68
|
+
name: vcfParser.samples[i],
|
|
69
|
+
dataType: { type: 'Text' },
|
|
70
|
+
};
|
|
69
71
|
}
|
|
70
72
|
columnDisplayOrder.push(columnDisplayOrder.length);
|
|
71
73
|
columns.unshift({
|
|
@@ -8,7 +8,7 @@ const LocEnd = MakeSpreadsheetColumnType('LocEnd', {
|
|
|
8
8
|
categoryName: 'Location',
|
|
9
9
|
displayName: 'End',
|
|
10
10
|
compare(cellA, cellB) {
|
|
11
|
-
return parseFloat(cellA.text) - parseFloat(cellB.text);
|
|
11
|
+
return Number.parseFloat(cellA.text) - Number.parseFloat(cellB.text);
|
|
12
12
|
},
|
|
13
13
|
FilterModelType,
|
|
14
14
|
});
|
|
@@ -8,7 +8,7 @@ const LocStart = MakeSpreadsheetColumnType('LocStart', {
|
|
|
8
8
|
categoryName: 'Location',
|
|
9
9
|
displayName: 'Start',
|
|
10
10
|
compare(cellA, cellB) {
|
|
11
|
-
return parseFloat(cellA.text) - parseFloat(cellB.text);
|
|
11
|
+
return Number.parseFloat(cellA.text) - Number.parseFloat(cellB.text);
|
|
12
12
|
},
|
|
13
13
|
FilterModelType,
|
|
14
14
|
});
|
|
@@ -75,7 +75,7 @@ const FilterModelType = types
|
|
|
75
75
|
type: types.literal('LocString'),
|
|
76
76
|
columnNumber: types.integer,
|
|
77
77
|
locString: '',
|
|
78
|
-
operation: types.optional(types.
|
|
78
|
+
operation: types.optional(types.string, OPERATIONS[0]),
|
|
79
79
|
})
|
|
80
80
|
.views(self => ({
|
|
81
81
|
get locStringIsInvalid() {
|
|
@@ -91,7 +91,6 @@ const FilterModelType = types
|
|
|
91
91
|
},
|
|
92
92
|
get parsedLocString() {
|
|
93
93
|
const session = getSession(self);
|
|
94
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
95
94
|
const model = getParent(self, 3).spreadsheet;
|
|
96
95
|
const { assemblyName } = model;
|
|
97
96
|
try {
|
|
@@ -111,7 +110,6 @@ const FilterModelType = types
|
|
|
111
110
|
return true;
|
|
112
111
|
};
|
|
113
112
|
}
|
|
114
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
115
113
|
return function stringPredicate(_sheet, row) {
|
|
116
114
|
const { cellsWithDerived: cells } = row;
|
|
117
115
|
const cell = cells[columnNumber];
|
|
@@ -140,14 +138,9 @@ const FilterModelType = types
|
|
|
140
138
|
}))
|
|
141
139
|
.volatile(() => ({ ReactComponent: FilterReactComponent }));
|
|
142
140
|
// opens a new LGV at the location described in the locString in the cell text
|
|
143
|
-
async function locationLinkClick(
|
|
144
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
145
|
-
spreadsheet, _columnNumber,
|
|
146
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
147
|
-
cell) {
|
|
141
|
+
async function locationLinkClick(spreadsheet, _columnNumber, cell) {
|
|
148
142
|
const session = getSession(spreadsheet);
|
|
149
143
|
const { assemblyName } = spreadsheet;
|
|
150
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
151
144
|
const { id } = getParent(spreadsheet);
|
|
152
145
|
const newViewId = `${id}_${assemblyName}`;
|
|
153
146
|
let view = session.views.find(v => v.id === newViewId);
|
|
@@ -169,12 +162,11 @@ const DataCellReactComponent = observer(function ({ cell, columnNumber, spreadsh
|
|
|
169
162
|
console.error(e);
|
|
170
163
|
session.notifyError(`${e}`, e);
|
|
171
164
|
}
|
|
172
|
-
}, title: "open a new linear genome view here", href: "#
|
|
165
|
+
}, title: "open a new linear genome view here", href: "#" }, cell.text));
|
|
173
166
|
});
|
|
174
167
|
const LocStringColumnType = MakeSpreadsheetColumnType('LocString', {
|
|
175
168
|
categoryName: 'Location',
|
|
176
169
|
displayName: 'Full location',
|
|
177
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
178
170
|
compare(cellA, cellB) {
|
|
179
171
|
return compareLocs(cellA.extendedData, cellB.extendedData);
|
|
180
172
|
},
|
|
@@ -46,21 +46,19 @@ const useStyles = makeStyles()({
|
|
|
46
46
|
},
|
|
47
47
|
});
|
|
48
48
|
// React component for the column filter control
|
|
49
|
-
const FilterReactComponent = observer(
|
|
50
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
51
|
-
({ filterModel }) => {
|
|
49
|
+
const FilterReactComponent = observer(({ filterModel }) => {
|
|
52
50
|
const { classes } = useStyles();
|
|
53
51
|
const operationChoices = OPERATIONS;
|
|
54
52
|
return (React.createElement(React.Fragment, null,
|
|
55
53
|
React.createElement(Select, { value: filterModel.operation, onChange: e => filterModel.setOperation(String(e.target.value)) }, operationChoices.map(name => (React.createElement(MenuItem, { key: name, value: name }, name)))),
|
|
56
54
|
' ',
|
|
57
55
|
React.createElement(TextField, { label: "number", placeholder: "123", type: "number", error: filterModel.firstNumberIsInvalid, defaultValue: filterModel.firstNumber, onChange: evt => {
|
|
58
|
-
filterModel.setFirstNumber(parseFloat(evt.target.value));
|
|
56
|
+
filterModel.setFirstNumber(Number.parseFloat(evt.target.value));
|
|
59
57
|
}, className: classes.textFilterControl }),
|
|
60
58
|
filterModel.operation !== 'between' &&
|
|
61
59
|
filterModel.operation !== 'not between' ? null : (React.createElement(React.Fragment, null,
|
|
62
60
|
' and ',
|
|
63
|
-
React.createElement(TextField, { label: "number", placeholder: "456", type: "number", error: filterModel.secondNumberIsInvalid, defaultValue: filterModel.secondNumber, onChange: evt => filterModel.setSecondNumber(parseFloat(evt.target.value)), className: classes.textFilterControl })))));
|
|
61
|
+
React.createElement(TextField, { label: "number", placeholder: "456", type: "number", error: filterModel.secondNumberIsInvalid, defaultValue: filterModel.secondNumber, onChange: evt => filterModel.setSecondNumber(Number.parseFloat(evt.target.value)), className: classes.textFilterControl })))));
|
|
64
62
|
});
|
|
65
63
|
// MST model for the column filter control
|
|
66
64
|
const FilterModelType = types
|
|
@@ -80,14 +78,13 @@ const FilterModelType = types
|
|
|
80
78
|
};
|
|
81
79
|
}
|
|
82
80
|
const { firstNumber, secondNumber, operation, columnNumber } = self; // avoid closing over self
|
|
83
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
84
81
|
return function stringPredicate(_sheet, row) {
|
|
85
82
|
const { cellsWithDerived } = row;
|
|
86
83
|
const cell = cellsWithDerived[columnNumber];
|
|
87
84
|
if (!(cell === null || cell === void 0 ? void 0 : cell.text)) {
|
|
88
85
|
return false;
|
|
89
86
|
}
|
|
90
|
-
const parsedCellText = parseFloat(cell.text);
|
|
87
|
+
const parsedCellText = Number.parseFloat(cell.text);
|
|
91
88
|
if (typeof parsedCellText !== 'number') {
|
|
92
89
|
return false;
|
|
93
90
|
}
|
|
@@ -115,7 +112,7 @@ const FilterModelType = types
|
|
|
115
112
|
.volatile(() => ({ ReactComponent: FilterReactComponent }));
|
|
116
113
|
const NumberColumn = MakeSpreadsheetColumnType('Number', {
|
|
117
114
|
compare(cellA, cellB) {
|
|
118
|
-
return parseFloat(cellA.text) - parseFloat(cellB.text);
|
|
115
|
+
return Number.parseFloat(cellA.text) - Number.parseFloat(cellB.text);
|
|
119
116
|
},
|
|
120
117
|
FilterModelType,
|
|
121
118
|
});
|
|
@@ -56,9 +56,7 @@ const useStyles = makeStyles()({
|
|
|
56
56
|
},
|
|
57
57
|
});
|
|
58
58
|
// React component for the column filter control
|
|
59
|
-
const FilterReactComponent = observer(
|
|
60
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
61
|
-
({ filterModel }) => {
|
|
59
|
+
const FilterReactComponent = observer(({ filterModel }) => {
|
|
62
60
|
const { classes } = useStyles();
|
|
63
61
|
const operationChoices = getEnumerationValues(getSubType(getPropertyType(getPropertyMembers(filterModel), 'operation')));
|
|
64
62
|
return (React.createElement(React.Fragment, null,
|
|
@@ -90,7 +88,6 @@ const ColumnTextFilter = types
|
|
|
90
88
|
};
|
|
91
89
|
}
|
|
92
90
|
const s = stringToFind.toLowerCase(); // case insensitive match
|
|
93
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
94
91
|
return function stringPredicate(_sheet, row) {
|
|
95
92
|
const { cellsWithDerived } = row;
|
|
96
93
|
const cell = cellsWithDerived[columnNumber];
|
|
@@ -2,11 +2,11 @@ import LocString from './LocString';
|
|
|
2
2
|
import LocRef from './LocRef';
|
|
3
3
|
import LocStart from './LocStart';
|
|
4
4
|
import LocEnd from './LocEnd';
|
|
5
|
-
import { NumberColumn
|
|
5
|
+
import { NumberColumn } from './Number';
|
|
6
6
|
import { TextColumn as Text } from './Text';
|
|
7
7
|
import { types } from 'mobx-state-tree';
|
|
8
8
|
const ColumnTypes = {
|
|
9
|
-
Number,
|
|
9
|
+
Number: NumberColumn,
|
|
10
10
|
Text,
|
|
11
11
|
LocString,
|
|
12
12
|
LocRef,
|
|
@@ -17,11 +17,10 @@ const RowFullTextFilter = types
|
|
|
17
17
|
}
|
|
18
18
|
s = s.toLowerCase();
|
|
19
19
|
return function stringPredicate(_sheet, row) {
|
|
20
|
-
var _a;
|
|
21
20
|
const { cellsWithDerived } = row;
|
|
22
21
|
for (const cell of cellsWithDerived) {
|
|
23
22
|
// note: case insensitive
|
|
24
|
-
if (
|
|
23
|
+
if (cell.text.toLowerCase().includes(s)) {
|
|
25
24
|
return true;
|
|
26
25
|
}
|
|
27
26
|
}
|
|
@@ -67,9 +66,7 @@ const model = types
|
|
|
67
66
|
}))
|
|
68
67
|
.actions(self => ({
|
|
69
68
|
addBlankColumnFilter(columnNumber) {
|
|
70
|
-
const { dataType } =
|
|
71
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
72
|
-
getParent(self).spreadsheet.columns[columnNumber];
|
|
69
|
+
const { dataType } = getParent(self).spreadsheet.columns[columnNumber];
|
|
73
70
|
self.columnFilters.push({
|
|
74
71
|
type: dataType.type,
|
|
75
72
|
columnNumber,
|
|
@@ -40,7 +40,6 @@ const ImportWizard = types
|
|
|
40
40
|
})
|
|
41
41
|
.volatile(() => ({
|
|
42
42
|
fileTypes,
|
|
43
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
44
43
|
fileSource: undefined,
|
|
45
44
|
error: undefined,
|
|
46
45
|
loading: false,
|
|
@@ -54,7 +53,6 @@ const ImportWizard = types
|
|
|
54
53
|
self.fileSource.uri));
|
|
55
54
|
},
|
|
56
55
|
get canCancel() {
|
|
57
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
58
56
|
return getParent(self).readyToDisplay;
|
|
59
57
|
},
|
|
60
58
|
get fileName() {
|
|
@@ -117,7 +115,6 @@ const ImportWizard = types
|
|
|
117
115
|
},
|
|
118
116
|
cancelButton() {
|
|
119
117
|
self.error = undefined;
|
|
120
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
121
118
|
getParent(self).setDisplayMode();
|
|
122
119
|
},
|
|
123
120
|
// fetch and parse the file, make a new Spreadsheet model for it,
|
|
@@ -133,9 +130,6 @@ const ImportWizard = types
|
|
|
133
130
|
self.loading = true;
|
|
134
131
|
const type = self.fileType;
|
|
135
132
|
const typeParser = await fileTypeParsers[type]();
|
|
136
|
-
if (!typeParser) {
|
|
137
|
-
throw new Error(`cannot open files of type '${self.fileType}'`);
|
|
138
|
-
}
|
|
139
133
|
const { unzip } = await import('@gmod/bgzf-filehandle');
|
|
140
134
|
const { pluginManager } = getEnv(self);
|
|
141
135
|
const filehandle = openLocation(self.fileSource, pluginManager);
|
|
@@ -156,7 +150,6 @@ const ImportWizard = types
|
|
|
156
150
|
.then(buffer => typeParser(buffer, self))
|
|
157
151
|
.then(spreadsheet => {
|
|
158
152
|
this.setLoaded();
|
|
159
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
160
153
|
getParent(self).displaySpreadsheet(spreadsheet);
|
|
161
154
|
});
|
|
162
155
|
}
|
|
@@ -26,10 +26,8 @@ const RowModel = types
|
|
|
26
26
|
}))
|
|
27
27
|
.views(self => ({
|
|
28
28
|
get cellsWithDerived() {
|
|
29
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
30
29
|
const { columns } = getParent(self, 3);
|
|
31
30
|
let i = 0;
|
|
32
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
33
31
|
return columns.map((column) => {
|
|
34
32
|
if (column.isDerived) {
|
|
35
33
|
return column.expr.evalSync({
|
|
@@ -86,7 +86,6 @@ const Spreadsheet = types
|
|
|
86
86
|
*/
|
|
87
87
|
get hideRowSelection() {
|
|
88
88
|
// just delegates to parent
|
|
89
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
90
89
|
return getParent(self).hideRowSelection;
|
|
91
90
|
},
|
|
92
91
|
/**
|
|
@@ -148,6 +147,7 @@ const Spreadsheet = types
|
|
|
148
147
|
* #action
|
|
149
148
|
*/
|
|
150
149
|
setSortColumns(newSort) {
|
|
150
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
151
151
|
if (newSort) {
|
|
152
152
|
// @ts-expect-error
|
|
153
153
|
self.sortColumns = newSort;
|
|
@@ -163,7 +163,7 @@ const Spreadsheet = types
|
|
|
163
163
|
* #action
|
|
164
164
|
*/
|
|
165
165
|
unselectAll() {
|
|
166
|
-
|
|
166
|
+
self.rowSet.unselectAll();
|
|
167
167
|
},
|
|
168
168
|
}));
|
|
169
169
|
export default Spreadsheet;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { types,
|
|
1
|
+
import { types, getEnv, cast } from 'mobx-state-tree';
|
|
2
2
|
import { BaseViewModel } from '@jbrowse/core/pluggableElementTypes/models';
|
|
3
3
|
import { readConfObject } from '@jbrowse/core/configuration';
|
|
4
4
|
import { getSession } from '@jbrowse/core/util';
|
|
@@ -90,7 +90,8 @@ const model = types
|
|
|
90
90
|
* #getter
|
|
91
91
|
*/
|
|
92
92
|
get outputRows() {
|
|
93
|
-
|
|
93
|
+
var _a;
|
|
94
|
+
if ((_a = self.spreadsheet) === null || _a === void 0 ? void 0 : _a.rowSet.isLoaded) {
|
|
94
95
|
const selected = self.spreadsheet.rowSet.selectedFilteredRows;
|
|
95
96
|
if (selected.length) {
|
|
96
97
|
return selected;
|
|
@@ -107,7 +108,7 @@ const model = types
|
|
|
107
108
|
const name = (_a = self.spreadsheet) === null || _a === void 0 ? void 0 : _a.assemblyName;
|
|
108
109
|
if (name) {
|
|
109
110
|
const assemblies = getSession(self).assemblies;
|
|
110
|
-
return assemblies
|
|
111
|
+
return assemblies.find(asm => readConfObject(asm, 'name') === name);
|
|
111
112
|
}
|
|
112
113
|
return undefined;
|
|
113
114
|
},
|
|
@@ -172,13 +173,6 @@ const model = types
|
|
|
172
173
|
self.mode = 'display';
|
|
173
174
|
}
|
|
174
175
|
},
|
|
175
|
-
/**
|
|
176
|
-
* #action
|
|
177
|
-
*/
|
|
178
|
-
closeView() {
|
|
179
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
180
|
-
getParent(self, 2).removeView(self);
|
|
181
|
-
},
|
|
182
176
|
}))
|
|
183
177
|
.views(self => ({
|
|
184
178
|
/**
|
|
@@ -188,7 +182,9 @@ const model = types
|
|
|
188
182
|
return [
|
|
189
183
|
{
|
|
190
184
|
label: 'Return to import form',
|
|
191
|
-
onClick: () =>
|
|
185
|
+
onClick: () => {
|
|
186
|
+
self.setImportMode();
|
|
187
|
+
},
|
|
192
188
|
icon: FolderOpenIcon,
|
|
193
189
|
},
|
|
194
190
|
];
|
|
@@ -19,7 +19,6 @@ const StaticRowModel = types
|
|
|
19
19
|
return this.selectedFilteredRows.length;
|
|
20
20
|
},
|
|
21
21
|
get sortedRows() {
|
|
22
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
23
22
|
const parent = getParent(self);
|
|
24
23
|
return [...self.rows].sort(parent.rowSortingComparisonFunction);
|
|
25
24
|
},
|
|
@@ -27,18 +26,14 @@ const StaticRowModel = types
|
|
|
27
26
|
return self.rows.filter(r => r.isSelected);
|
|
28
27
|
},
|
|
29
28
|
get selectedFilteredRows() {
|
|
30
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
31
29
|
const sheet = getParent(self);
|
|
32
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
33
30
|
const view = getParent(sheet);
|
|
34
31
|
const { filterControls } = view;
|
|
35
32
|
return this.selectedRows.filter(row => filterControls.rowPassesFilters(sheet, row));
|
|
36
33
|
},
|
|
37
34
|
// the set of all rows that pass the filters, sorted
|
|
38
35
|
get sortedFilteredRows() {
|
|
39
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
40
36
|
const sheet = getParent(self);
|
|
41
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
42
37
|
const view = getParent(sheet);
|
|
43
38
|
const { filterControls } = view;
|
|
44
39
|
return self.rows
|
|
@@ -48,7 +43,9 @@ const StaticRowModel = types
|
|
|
48
43
|
}))
|
|
49
44
|
.actions(self => ({
|
|
50
45
|
unselectAll() {
|
|
51
|
-
self.rows.forEach(row =>
|
|
46
|
+
self.rows.forEach(row => {
|
|
47
|
+
row.unSelect();
|
|
48
|
+
});
|
|
52
49
|
},
|
|
53
50
|
}));
|
|
54
51
|
export default StaticRowModel;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jbrowse/plugin-spreadsheet-view",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.15.0",
|
|
4
4
|
"description": "JBrowse 2 spreadsheet view",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jbrowse",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
],
|
|
25
25
|
"scripts": {
|
|
26
26
|
"build": "npm-run-all build:*",
|
|
27
|
-
"test": "cd ../..; jest plugins/spreadsheet-view",
|
|
27
|
+
"test": "cd ../..; jest --passWithNoTests plugins/spreadsheet-view",
|
|
28
28
|
"prepublishOnly": "yarn test",
|
|
29
29
|
"prepack": "yarn build && yarn useDist",
|
|
30
30
|
"postpack": "yarn useSrc",
|
|
@@ -38,14 +38,14 @@
|
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@gmod/bgzf-filehandle": "^1.4.3",
|
|
40
40
|
"@gmod/vcf": "^5.0.9",
|
|
41
|
-
"@jbrowse/plugin-variants": "^2.
|
|
42
|
-
"@mui/icons-material": "^
|
|
41
|
+
"@jbrowse/plugin-variants": "^2.15.0",
|
|
42
|
+
"@mui/icons-material": "^6.0.0",
|
|
43
43
|
"csvtojson": "^2.0.10"
|
|
44
44
|
},
|
|
45
45
|
"peerDependencies": {
|
|
46
46
|
"@jbrowse/core": "^2.0.0",
|
|
47
47
|
"@jbrowse/plugin-linear-genome-view": "^2.0.0",
|
|
48
|
-
"@mui/material": "^
|
|
48
|
+
"@mui/material": "^6.0.0",
|
|
49
49
|
"mobx": "^6.0.0",
|
|
50
50
|
"mobx-react": "^9.0.0",
|
|
51
51
|
"mobx-state-tree": "^5.0.0",
|
|
@@ -60,5 +60,5 @@
|
|
|
60
60
|
"publishConfig": {
|
|
61
61
|
"access": "public"
|
|
62
62
|
},
|
|
63
|
-
"gitHead": "
|
|
63
|
+
"gitHead": "87eeb1fbf8311dbf88d5e75b5a265f03beffdda8"
|
|
64
64
|
}
|