@jbrowse/plugin-spreadsheet-view 2.6.1 → 2.6.2

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.
Files changed (204) hide show
  1. package/dist/LaunchSpreadsheetView/index.js +0 -1
  2. package/dist/SpreadsheetView/components/CellData.js +0 -1
  3. package/dist/SpreadsheetView/components/ColumnFilterControls.js +0 -1
  4. package/dist/SpreadsheetView/components/ColumnMenu.js +0 -1
  5. package/dist/SpreadsheetView/components/DataRow.js +0 -1
  6. package/dist/SpreadsheetView/components/DataTable.js +0 -1
  7. package/dist/SpreadsheetView/components/DataTableHeader.js +0 -1
  8. package/dist/SpreadsheetView/components/GlobalFilterControls.js +0 -1
  9. package/dist/SpreadsheetView/components/ImportWizard.js +0 -1
  10. package/dist/SpreadsheetView/components/NumberEditor.js +0 -1
  11. package/dist/SpreadsheetView/components/RowCountMessage.js +0 -1
  12. package/dist/SpreadsheetView/components/RowMenu.js +0 -1
  13. package/dist/SpreadsheetView/components/SortIndicator.js +0 -1
  14. package/dist/SpreadsheetView/components/Spreadsheet.js +0 -1
  15. package/dist/SpreadsheetView/components/SpreadsheetView.js +0 -1
  16. package/dist/SpreadsheetView/components/StatusBar.js +0 -1
  17. package/dist/SpreadsheetView/components/util.js +0 -1
  18. package/dist/SpreadsheetView/importAdapters/BedImport.js +0 -1
  19. package/dist/SpreadsheetView/importAdapters/ImportUtils.js +0 -1
  20. package/dist/SpreadsheetView/importAdapters/STARFusionImport.js +0 -1
  21. package/dist/SpreadsheetView/importAdapters/VcfImport.js +0 -1
  22. package/dist/SpreadsheetView/index.js +0 -1
  23. package/dist/SpreadsheetView/models/ColumnDataTypes/LocEnd.js +0 -1
  24. package/dist/SpreadsheetView/models/ColumnDataTypes/LocRef.js +0 -1
  25. package/dist/SpreadsheetView/models/ColumnDataTypes/LocStart.js +0 -1
  26. package/dist/SpreadsheetView/models/ColumnDataTypes/LocString.js +0 -1
  27. package/dist/SpreadsheetView/models/ColumnDataTypes/MakeSpreadsheetColumnType.js +0 -1
  28. package/dist/SpreadsheetView/models/ColumnDataTypes/Number.js +0 -1
  29. package/dist/SpreadsheetView/models/ColumnDataTypes/Text.js +0 -1
  30. package/dist/SpreadsheetView/models/ColumnDataTypes/index.js +0 -1
  31. package/dist/SpreadsheetView/models/FilterControls.js +0 -1
  32. package/dist/SpreadsheetView/models/ImportWizard.js +0 -1
  33. package/dist/SpreadsheetView/models/Row.js +0 -1
  34. package/dist/SpreadsheetView/models/Spreadsheet.js +0 -1
  35. package/dist/SpreadsheetView/models/SpreadsheetView.js +0 -1
  36. package/dist/SpreadsheetView/models/StaticRowSet.js +0 -1
  37. package/dist/index.js +0 -1
  38. package/esm/LaunchSpreadsheetView/index.js +0 -1
  39. package/esm/SpreadsheetView/components/CellData.js +0 -1
  40. package/esm/SpreadsheetView/components/ColumnFilterControls.js +0 -1
  41. package/esm/SpreadsheetView/components/ColumnMenu.js +0 -1
  42. package/esm/SpreadsheetView/components/DataRow.js +0 -1
  43. package/esm/SpreadsheetView/components/DataTable.js +0 -1
  44. package/esm/SpreadsheetView/components/DataTableHeader.js +0 -1
  45. package/esm/SpreadsheetView/components/GlobalFilterControls.js +0 -1
  46. package/esm/SpreadsheetView/components/ImportWizard.js +0 -1
  47. package/esm/SpreadsheetView/components/NumberEditor.js +0 -1
  48. package/esm/SpreadsheetView/components/RowCountMessage.js +0 -1
  49. package/esm/SpreadsheetView/components/RowMenu.js +0 -1
  50. package/esm/SpreadsheetView/components/SortIndicator.js +0 -1
  51. package/esm/SpreadsheetView/components/Spreadsheet.js +0 -1
  52. package/esm/SpreadsheetView/components/SpreadsheetView.js +0 -1
  53. package/esm/SpreadsheetView/components/StatusBar.js +0 -1
  54. package/esm/SpreadsheetView/components/util.js +0 -1
  55. package/esm/SpreadsheetView/importAdapters/BedImport.js +0 -1
  56. package/esm/SpreadsheetView/importAdapters/ImportUtils.js +0 -1
  57. package/esm/SpreadsheetView/importAdapters/STARFusionImport.js +0 -1
  58. package/esm/SpreadsheetView/importAdapters/VcfImport.js +0 -1
  59. package/esm/SpreadsheetView/index.js +0 -1
  60. package/esm/SpreadsheetView/models/ColumnDataTypes/LocEnd.js +0 -1
  61. package/esm/SpreadsheetView/models/ColumnDataTypes/LocRef.js +0 -1
  62. package/esm/SpreadsheetView/models/ColumnDataTypes/LocStart.js +0 -1
  63. package/esm/SpreadsheetView/models/ColumnDataTypes/LocString.js +0 -1
  64. package/esm/SpreadsheetView/models/ColumnDataTypes/MakeSpreadsheetColumnType.js +0 -1
  65. package/esm/SpreadsheetView/models/ColumnDataTypes/Number.js +0 -1
  66. package/esm/SpreadsheetView/models/ColumnDataTypes/Text.js +0 -1
  67. package/esm/SpreadsheetView/models/ColumnDataTypes/index.js +0 -1
  68. package/esm/SpreadsheetView/models/FilterControls.js +0 -1
  69. package/esm/SpreadsheetView/models/ImportWizard.js +0 -1
  70. package/esm/SpreadsheetView/models/Row.js +0 -1
  71. package/esm/SpreadsheetView/models/Spreadsheet.js +0 -1
  72. package/esm/SpreadsheetView/models/SpreadsheetView.js +0 -1
  73. package/esm/SpreadsheetView/models/StaticRowSet.js +0 -1
  74. package/esm/index.js +0 -1
  75. package/package.json +4 -5
  76. package/dist/LaunchSpreadsheetView/index.js.map +0 -1
  77. package/dist/SpreadsheetView/components/CellData.js.map +0 -1
  78. package/dist/SpreadsheetView/components/ColumnFilterControls.js.map +0 -1
  79. package/dist/SpreadsheetView/components/ColumnMenu.js.map +0 -1
  80. package/dist/SpreadsheetView/components/DataRow.js.map +0 -1
  81. package/dist/SpreadsheetView/components/DataTable.js.map +0 -1
  82. package/dist/SpreadsheetView/components/DataTableHeader.js.map +0 -1
  83. package/dist/SpreadsheetView/components/GlobalFilterControls.js.map +0 -1
  84. package/dist/SpreadsheetView/components/ImportWizard.js.map +0 -1
  85. package/dist/SpreadsheetView/components/NumberEditor.js.map +0 -1
  86. package/dist/SpreadsheetView/components/RowCountMessage.js.map +0 -1
  87. package/dist/SpreadsheetView/components/RowMenu.js.map +0 -1
  88. package/dist/SpreadsheetView/components/SortIndicator.js.map +0 -1
  89. package/dist/SpreadsheetView/components/Spreadsheet.js.map +0 -1
  90. package/dist/SpreadsheetView/components/SpreadsheetView.js.map +0 -1
  91. package/dist/SpreadsheetView/components/StatusBar.js.map +0 -1
  92. package/dist/SpreadsheetView/components/util.js.map +0 -1
  93. package/dist/SpreadsheetView/importAdapters/BedImport.js.map +0 -1
  94. package/dist/SpreadsheetView/importAdapters/ImportUtils.js.map +0 -1
  95. package/dist/SpreadsheetView/importAdapters/STARFusionImport.js.map +0 -1
  96. package/dist/SpreadsheetView/importAdapters/VcfImport.js.map +0 -1
  97. package/dist/SpreadsheetView/index.js.map +0 -1
  98. package/dist/SpreadsheetView/models/ColumnDataTypes/LocEnd.js.map +0 -1
  99. package/dist/SpreadsheetView/models/ColumnDataTypes/LocRef.js.map +0 -1
  100. package/dist/SpreadsheetView/models/ColumnDataTypes/LocStart.js.map +0 -1
  101. package/dist/SpreadsheetView/models/ColumnDataTypes/LocString.js.map +0 -1
  102. package/dist/SpreadsheetView/models/ColumnDataTypes/MakeSpreadsheetColumnType.js.map +0 -1
  103. package/dist/SpreadsheetView/models/ColumnDataTypes/Number.js.map +0 -1
  104. package/dist/SpreadsheetView/models/ColumnDataTypes/Text.js.map +0 -1
  105. package/dist/SpreadsheetView/models/ColumnDataTypes/index.js.map +0 -1
  106. package/dist/SpreadsheetView/models/FilterControls.js.map +0 -1
  107. package/dist/SpreadsheetView/models/ImportWizard.js.map +0 -1
  108. package/dist/SpreadsheetView/models/Row.js.map +0 -1
  109. package/dist/SpreadsheetView/models/Spreadsheet.js.map +0 -1
  110. package/dist/SpreadsheetView/models/SpreadsheetView.js.map +0 -1
  111. package/dist/SpreadsheetView/models/StaticRowSet.js.map +0 -1
  112. package/dist/index.js.map +0 -1
  113. package/esm/LaunchSpreadsheetView/index.js.map +0 -1
  114. package/esm/SpreadsheetView/components/CellData.js.map +0 -1
  115. package/esm/SpreadsheetView/components/ColumnFilterControls.js.map +0 -1
  116. package/esm/SpreadsheetView/components/ColumnMenu.js.map +0 -1
  117. package/esm/SpreadsheetView/components/DataRow.js.map +0 -1
  118. package/esm/SpreadsheetView/components/DataTable.js.map +0 -1
  119. package/esm/SpreadsheetView/components/DataTableHeader.js.map +0 -1
  120. package/esm/SpreadsheetView/components/GlobalFilterControls.js.map +0 -1
  121. package/esm/SpreadsheetView/components/ImportWizard.js.map +0 -1
  122. package/esm/SpreadsheetView/components/NumberEditor.js.map +0 -1
  123. package/esm/SpreadsheetView/components/RowCountMessage.js.map +0 -1
  124. package/esm/SpreadsheetView/components/RowMenu.js.map +0 -1
  125. package/esm/SpreadsheetView/components/SortIndicator.js.map +0 -1
  126. package/esm/SpreadsheetView/components/Spreadsheet.js.map +0 -1
  127. package/esm/SpreadsheetView/components/SpreadsheetView.js.map +0 -1
  128. package/esm/SpreadsheetView/components/StatusBar.js.map +0 -1
  129. package/esm/SpreadsheetView/components/util.js.map +0 -1
  130. package/esm/SpreadsheetView/importAdapters/BedImport.js.map +0 -1
  131. package/esm/SpreadsheetView/importAdapters/ImportUtils.js.map +0 -1
  132. package/esm/SpreadsheetView/importAdapters/STARFusionImport.js.map +0 -1
  133. package/esm/SpreadsheetView/importAdapters/VcfImport.js.map +0 -1
  134. package/esm/SpreadsheetView/index.js.map +0 -1
  135. package/esm/SpreadsheetView/models/ColumnDataTypes/LocEnd.js.map +0 -1
  136. package/esm/SpreadsheetView/models/ColumnDataTypes/LocRef.js.map +0 -1
  137. package/esm/SpreadsheetView/models/ColumnDataTypes/LocStart.js.map +0 -1
  138. package/esm/SpreadsheetView/models/ColumnDataTypes/LocString.js.map +0 -1
  139. package/esm/SpreadsheetView/models/ColumnDataTypes/MakeSpreadsheetColumnType.js.map +0 -1
  140. package/esm/SpreadsheetView/models/ColumnDataTypes/Number.js.map +0 -1
  141. package/esm/SpreadsheetView/models/ColumnDataTypes/Text.js.map +0 -1
  142. package/esm/SpreadsheetView/models/ColumnDataTypes/index.js.map +0 -1
  143. package/esm/SpreadsheetView/models/FilterControls.js.map +0 -1
  144. package/esm/SpreadsheetView/models/ImportWizard.js.map +0 -1
  145. package/esm/SpreadsheetView/models/Row.js.map +0 -1
  146. package/esm/SpreadsheetView/models/Spreadsheet.js.map +0 -1
  147. package/esm/SpreadsheetView/models/SpreadsheetView.js.map +0 -1
  148. package/esm/SpreadsheetView/models/StaticRowSet.js.map +0 -1
  149. package/esm/index.js.map +0 -1
  150. package/src/LaunchSpreadsheetView/index.ts +0 -40
  151. package/src/SpreadsheetView/components/CellData.tsx +0 -35
  152. package/src/SpreadsheetView/components/ColumnFilterControls.tsx +0 -84
  153. package/src/SpreadsheetView/components/ColumnMenu.tsx +0 -166
  154. package/src/SpreadsheetView/components/DataRow.tsx +0 -126
  155. package/src/SpreadsheetView/components/DataTable.tsx +0 -91
  156. package/src/SpreadsheetView/components/DataTableHeader.tsx +0 -122
  157. package/src/SpreadsheetView/components/GlobalFilterControls.tsx +0 -70
  158. package/src/SpreadsheetView/components/ImportWizard.tsx +0 -139
  159. package/src/SpreadsheetView/components/NumberEditor.tsx +0 -50
  160. package/src/SpreadsheetView/components/RowCountMessage.tsx +0 -44
  161. package/src/SpreadsheetView/components/RowMenu.tsx +0 -65
  162. package/src/SpreadsheetView/components/SortIndicator.tsx +0 -36
  163. package/src/SpreadsheetView/components/Spreadsheet.test.ts +0 -17
  164. package/src/SpreadsheetView/components/Spreadsheet.tsx +0 -46
  165. package/src/SpreadsheetView/components/SpreadsheetView.tsx +0 -119
  166. package/src/SpreadsheetView/components/StatusBar.tsx +0 -75
  167. package/src/SpreadsheetView/components/util.ts +0 -16
  168. package/src/SpreadsheetView/importAdapters/BedImport.test.ts +0 -14
  169. package/src/SpreadsheetView/importAdapters/BedImport.ts +0 -155
  170. package/src/SpreadsheetView/importAdapters/ImportUtils.test.ts +0 -25
  171. package/src/SpreadsheetView/importAdapters/ImportUtils.ts +0 -152
  172. package/src/SpreadsheetView/importAdapters/STARFusionImport.test.ts +0 -27
  173. package/src/SpreadsheetView/importAdapters/STARFusionImport.ts +0 -74
  174. package/src/SpreadsheetView/importAdapters/VcfImport.test.ts +0 -42
  175. package/src/SpreadsheetView/importAdapters/VcfImport.ts +0 -118
  176. package/src/SpreadsheetView/importAdapters/__snapshots__/ImportUtils.test.ts.snap +0 -6555
  177. package/src/SpreadsheetView/importAdapters/__snapshots__/STARFusionImport.test.ts.snap +0 -2354
  178. package/src/SpreadsheetView/importAdapters/__snapshots__/VcfImport.test.ts.snap +0 -16329
  179. package/src/SpreadsheetView/index.ts +0 -20
  180. package/src/SpreadsheetView/models/ColumnDataTypes/LocEnd.ts +0 -21
  181. package/src/SpreadsheetView/models/ColumnDataTypes/LocRef.ts +0 -21
  182. package/src/SpreadsheetView/models/ColumnDataTypes/LocStart.ts +0 -21
  183. package/src/SpreadsheetView/models/ColumnDataTypes/LocString.tsx +0 -328
  184. package/src/SpreadsheetView/models/ColumnDataTypes/MakeSpreadsheetColumnType.tsx +0 -38
  185. package/src/SpreadsheetView/models/ColumnDataTypes/Number.tsx +0 -177
  186. package/src/SpreadsheetView/models/ColumnDataTypes/Text.tsx +0 -173
  187. package/src/SpreadsheetView/models/ColumnDataTypes/index.ts +0 -34
  188. package/src/SpreadsheetView/models/FilterControls.ts +0 -95
  189. package/src/SpreadsheetView/models/ImportWizard.ts +0 -203
  190. package/src/SpreadsheetView/models/Row.ts +0 -46
  191. package/src/SpreadsheetView/models/Spreadsheet.ts +0 -209
  192. package/src/SpreadsheetView/models/SpreadsheetView.test.ts +0 -8
  193. package/src/SpreadsheetView/models/SpreadsheetView.ts +0 -243
  194. package/src/SpreadsheetView/models/StaticRowSet.ts +0 -65
  195. package/src/SpreadsheetView/test_data/1801160099-N32519_26611_S51_56704.hard-filtered.vcf +0 -174
  196. package/src/SpreadsheetView/test_data/breast_cancer.subset.csv +0 -50
  197. package/src/SpreadsheetView/test_data/diabetes_target.csv.gz +0 -0
  198. package/src/SpreadsheetView/test_data/foo.bed +0 -11
  199. package/src/SpreadsheetView/test_data/location_test.csv +0 -3
  200. package/src/SpreadsheetView/test_data/location_test_2.csv +0 -3
  201. package/src/SpreadsheetView/test_data/reads_lr_skbr3.fa_ngmlr-0.2.3_mapped.bam.sniffles1kb_auto_l8_s5_noalt.bedpe +0 -1405
  202. package/src/SpreadsheetView/test_data/starfusion_example.fusion_predictions.tsv +0 -25
  203. package/src/SpreadsheetView/test_data/volvox.sort.bed +0 -109
  204. package/src/index.ts +0 -38
@@ -1,139 +0,0 @@
1
- import React, { useState } from 'react'
2
- import {
3
- Button,
4
- Checkbox,
5
- FormControl,
6
- FormGroup,
7
- FormLabel,
8
- FormControlLabel,
9
- RadioGroup,
10
- Radio,
11
- } from '@mui/material'
12
- import { observer } from 'mobx-react'
13
- import { getRoot } from 'mobx-state-tree'
14
- import { AbstractRootModel, getSession } from '@jbrowse/core/util'
15
- import { FileSelector, ErrorMessage, AssemblySelector } from '@jbrowse/core/ui'
16
-
17
- // locals
18
- import { ImportWizardModel } from '../models/ImportWizard'
19
- import NumberEditor from './NumberEditor'
20
- import { makeStyles } from 'tss-react/mui'
21
-
22
- const useStyles = makeStyles()({
23
- container: {
24
- margin: '0 auto',
25
- maxWidth: '25em',
26
- padding: 20,
27
- },
28
- })
29
-
30
- const ImportWizard = observer(({ model }: { model: ImportWizardModel }) => {
31
- const session = getSession(model)
32
- const { classes } = useStyles()
33
- const { assemblyNames, assemblyManager } = session
34
- const {
35
- fileType,
36
- canCancel,
37
- fileSource,
38
- isReadyToOpen,
39
- fileTypes,
40
- hasColumnNameLine,
41
- error,
42
- } = model
43
- const [selected, setSelected] = useState(assemblyNames[0])
44
- const err = assemblyManager.get(selected)?.error || error
45
- const showRowControls = fileType === 'CSV' || fileType === 'TSV'
46
- const rootModel = getRoot(model)
47
-
48
- return (
49
- <div className={classes.container}>
50
- {err ? <ErrorMessage error={err} /> : null}
51
- <div>
52
- <FormControl component="fieldset">
53
- <FormLabel component="legend">Tabular file</FormLabel>
54
- <FormGroup>
55
- <FileSelector
56
- location={fileSource}
57
- setLocation={arg => model.setFileSource(arg)}
58
- rootModel={rootModel as AbstractRootModel}
59
- />
60
- </FormGroup>
61
- </FormControl>
62
- </div>
63
- <div>
64
- <FormControl component="fieldset">
65
- <FormLabel component="legend">File Type</FormLabel>
66
- <RadioGroup row aria-label="file type" name="type" value={fileType}>
67
- {fileTypes.map(fileTypeName => (
68
- <FormControlLabel
69
- key={fileTypeName}
70
- checked={fileType === fileTypeName}
71
- value={fileTypeName}
72
- onClick={() => model.setFileType(fileTypeName)}
73
- control={<Radio />}
74
- label={fileTypeName}
75
- />
76
- ))}
77
- </RadioGroup>
78
- </FormControl>
79
- </div>
80
- {showRowControls ? (
81
- <div>
82
- <FormControl component="fieldset">
83
- <FormLabel component="legend">Column Names</FormLabel>
84
- <FormControlLabel
85
- disabled={!showRowControls}
86
- label="has column names on line"
87
- labelPlacement="end"
88
- control={
89
- <Checkbox
90
- checked={hasColumnNameLine}
91
- onClick={() => model.toggleHasColumnNameLine()}
92
- />
93
- }
94
- />
95
- <NumberEditor
96
- model={model}
97
- disabled={!showRowControls || !hasColumnNameLine}
98
- modelPropName="columnNameLineNumber"
99
- modelSetterName="setColumnNameLineNumber"
100
- />
101
- </FormControl>
102
- </div>
103
- ) : null}
104
- <div>
105
- <AssemblySelector
106
- session={session}
107
- selected={selected}
108
- onChange={val => setSelected(val)}
109
- />
110
- </div>
111
- <div>
112
- {canCancel ? (
113
- <Button
114
- variant="contained"
115
- color="secondary"
116
- onClick={() => model.cancelButton()}
117
- disabled={!canCancel}
118
- >
119
- Cancel
120
- </Button>
121
- ) : null}{' '}
122
- <Button
123
- disabled={!isReadyToOpen || !!err}
124
- variant="contained"
125
- data-testid="open_spreadsheet"
126
- color="primary"
127
- onClick={() => {
128
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
129
- model.import(selected)
130
- }}
131
- >
132
- Open
133
- </Button>
134
- </div>
135
- </div>
136
- )
137
- })
138
-
139
- export default ImportWizard
@@ -1,50 +0,0 @@
1
- import React, { useState, useEffect } from 'react'
2
- import { TextField } from '@mui/material'
3
- import { makeStyles } from 'tss-react/mui'
4
- import { observer } from 'mobx-react'
5
-
6
- // locals
7
- import { ImportWizardModel } from '../models/ImportWizard'
8
-
9
- const useStyles = makeStyles()({
10
- textField: {
11
- width: '2rem',
12
- verticalAlign: 'baseline',
13
- },
14
- })
15
-
16
- export default observer(function ({
17
- model,
18
- disabled,
19
- modelPropName,
20
- modelSetterName,
21
- }: {
22
- model: ImportWizardModel
23
- disabled: boolean
24
- modelPropName: string
25
- modelSetterName: string
26
- }) {
27
- // @ts-expect-error
28
- const [val, setVal] = useState(model[modelPropName])
29
- const { classes } = useStyles()
30
- useEffect(() => {
31
- const num = Number.parseInt(val, 10)
32
- if (!Number.isNaN(num)) {
33
- if (num > 0) {
34
- // @ts-expect-error
35
- model[modelSetterName](num)
36
- } else {
37
- setVal(1)
38
- }
39
- }
40
- }, [model, modelSetterName, val])
41
- return (
42
- <TextField
43
- value={val}
44
- disabled={disabled}
45
- type="number"
46
- onChange={evt => setVal(evt.target.value)}
47
- className={classes.textField}
48
- />
49
- )
50
- })
@@ -1,44 +0,0 @@
1
- import React from 'react'
2
- import { observer } from 'mobx-react'
3
- import { Instance } from 'mobx-state-tree'
4
-
5
- // locals
6
- import SpreadsheetStateModel from '../models/Spreadsheet'
7
-
8
- type SpreadsheetModel = Instance<typeof SpreadsheetStateModel>
9
-
10
- const RowCountMessage = observer(function ({
11
- spreadsheet,
12
- }: {
13
- spreadsheet: SpreadsheetModel
14
- }) {
15
- if (spreadsheet.rowSet.isLoaded) {
16
- const {
17
- passingFiltersCount,
18
- count,
19
- selectedCount,
20
- selectedAndPassingFiltersCount,
21
- } = spreadsheet.rowSet
22
-
23
- let rowMessage
24
- if (passingFiltersCount !== count) {
25
- rowMessage = `${spreadsheet.rowSet.passingFiltersCount} rows of ${spreadsheet.rowSet.count} total`
26
- if (selectedCount) {
27
- rowMessage += `, ${selectedAndPassingFiltersCount} selected`
28
- const selectedAndNotPassingFiltersCount =
29
- selectedCount - selectedAndPassingFiltersCount
30
- if (selectedAndNotPassingFiltersCount) {
31
- rowMessage += ` (${selectedAndNotPassingFiltersCount} selected rows do not pass filters)`
32
- }
33
- }
34
- } else {
35
- rowMessage = `${spreadsheet.rowSet.count} rows`
36
- if (selectedCount) {
37
- rowMessage += `, ${selectedCount} selected`
38
- }
39
- }
40
- return <>{rowMessage}</>
41
- }
42
- return null
43
- })
44
- export default RowCountMessage
@@ -1,65 +0,0 @@
1
- import React from 'react'
2
- import { observer } from 'mobx-react'
3
- import { Menu, MenuItem } from '@jbrowse/core/ui'
4
- import { Instance } from 'mobx-state-tree'
5
-
6
- // locals
7
- import SpreadsheetModel from '../models/Spreadsheet'
8
- import ViewModel from '../models/SpreadsheetView'
9
-
10
- const RowMenu = observer(function ({
11
- viewModel,
12
- spreadsheetModel,
13
- }: {
14
- viewModel: Instance<typeof ViewModel>
15
- spreadsheetModel: Instance<typeof SpreadsheetModel>
16
- }) {
17
- const currentRowMenu = spreadsheetModel.rowMenuPosition
18
- const { setRowMenuPosition } = spreadsheetModel
19
-
20
- const rowMenuClose = () => {
21
- setRowMenuPosition(null)
22
- }
23
-
24
- const rowNumber = spreadsheetModel.rowMenuPosition?.rowNumber
25
- if (rowNumber === undefined) {
26
- return null
27
- }
28
-
29
- const row = spreadsheetModel.rowSet.rows[+rowNumber - 1]
30
-
31
- function handleMenuItemClick(_event: unknown, callback: Function) {
32
- callback(viewModel, spreadsheetModel, rowNumber, row)
33
- rowMenuClose()
34
- }
35
-
36
- // got through and evaluate all the `disabled` callbacks of the menu items
37
- const menuItems: MenuItem[] = viewModel.rowMenuItems.map(item => {
38
- if (typeof item.disabled === 'function') {
39
- const disabled = item.disabled(
40
- viewModel,
41
- spreadsheetModel,
42
- +rowNumber,
43
- row,
44
- )
45
- return { ...item, disabled }
46
- }
47
- return item
48
- })
49
-
50
- return (
51
- <Menu
52
- anchorEl={currentRowMenu && currentRowMenu.anchorEl}
53
- open={Boolean(currentRowMenu)}
54
- onMenuItemClick={handleMenuItemClick}
55
- onClose={rowMenuClose}
56
- menuItems={menuItems}
57
- anchorOrigin={{
58
- vertical: 'bottom',
59
- horizontal: 'right',
60
- }}
61
- />
62
- )
63
- })
64
-
65
- export default RowMenu
@@ -1,36 +0,0 @@
1
- import React from 'react'
2
- import { makeStyles } from 'tss-react/mui'
3
-
4
- // icons
5
- import KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp'
6
- import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown'
7
- import { SpreadsheetModel } from '../models/Spreadsheet'
8
-
9
- const useStyles = makeStyles()({
10
- sortIndicator: {
11
- position: 'relative',
12
- top: '0.2rem',
13
- fontSize: '1rem',
14
- },
15
- })
16
-
17
- export default function SortIndicator({
18
- model,
19
- columnNumber,
20
- }: {
21
- model: SpreadsheetModel
22
- columnNumber: number
23
- }) {
24
- const { classes } = useStyles()
25
- const sortSpec = model.sortColumns.find(c => c.columnNumber === columnNumber)
26
-
27
- if (sortSpec) {
28
- const { descending } = sortSpec
29
- return descending ? (
30
- <KeyboardArrowUpIcon className={classes.sortIndicator} />
31
- ) : (
32
- <KeyboardArrowDownIcon className={classes.sortIndicator} />
33
- )
34
- }
35
- return null
36
- }
@@ -1,17 +0,0 @@
1
- import { numToColName } from './util'
2
-
3
- describe('num to col name', () => {
4
- const cases = [
5
- [10, 'K'],
6
- [26, 'AA'],
7
- [0, 'A'],
8
- [25, 'Z'],
9
- [27 * 26 - 1, 'ZZ'],
10
- ] as const
11
-
12
- cases.forEach(([input, output]) => {
13
- test(`${input} -> ${output}`, () => {
14
- expect(numToColName(input)).toBe(output)
15
- })
16
- })
17
- })
@@ -1,46 +0,0 @@
1
- import React from 'react'
2
- import { observer } from 'mobx-react'
3
- import { Instance } from 'mobx-state-tree'
4
- import { makeStyles } from 'tss-react/mui'
5
-
6
- // locals
7
- import SpreadsheetStateModel from '../models/Spreadsheet'
8
- import { LoadingEllipses } from '@jbrowse/core/ui'
9
- import DataTable from './DataTable'
10
-
11
- type SpreadsheetModel = Instance<typeof SpreadsheetStateModel>
12
-
13
- const useStyles = makeStyles()(theme => ({
14
- root: {
15
- position: 'relative',
16
- marginBottom: theme.spacing(1),
17
- background: theme.palette.background.paper,
18
- overflow: 'auto',
19
- },
20
- }))
21
-
22
- const Spreadsheet = observer(function ({
23
- model,
24
- height,
25
- page,
26
- rowsPerPage,
27
- }: {
28
- model: SpreadsheetModel
29
- height: number
30
- page: number
31
- rowsPerPage: number
32
- }) {
33
- const { classes } = useStyles()
34
-
35
- return (
36
- <div className={classes.root} style={{ height }}>
37
- {model?.rowSet?.isLoaded && model.initialized ? (
38
- <DataTable model={model} page={page} rowsPerPage={rowsPerPage} />
39
- ) : (
40
- <LoadingEllipses variant="h6" />
41
- )}
42
- </div>
43
- )
44
- })
45
-
46
- export default Spreadsheet
@@ -1,119 +0,0 @@
1
- import React, { useState } from 'react'
2
- import { Grid } from '@mui/material'
3
- import { makeStyles } from 'tss-react/mui'
4
- import { observer } from 'mobx-react'
5
- import { ResizeHandle } from '@jbrowse/core/ui'
6
-
7
- // locals
8
- import ImportWizard from './ImportWizard'
9
- import Spreadsheet from './Spreadsheet'
10
- import GlobalFilterControls from './GlobalFilterControls'
11
- import ColumnFilterControls from './ColumnFilterControls'
12
- import { SpreadsheetViewModel } from '../models/SpreadsheetView'
13
- import StatusBar from './StatusBar'
14
-
15
- const headerHeight = 52
16
- const colFilterHeight = 46
17
- const statusBarHeight = 40
18
-
19
- const useStyles = makeStyles()(theme => ({
20
- header: {
21
- overflow: 'hidden',
22
- whiteSpace: 'nowrap',
23
- boxSizing: 'border-box',
24
- height: headerHeight,
25
- paddingLeft: theme.spacing(1),
26
- },
27
- contentArea: {
28
- overflow: 'auto',
29
- },
30
- resizeHandle: {
31
- height: 3,
32
- position: 'absolute',
33
- bottom: 0,
34
- left: 0,
35
- background: theme.palette.action.disabled,
36
- boxSizing: 'border-box',
37
- borderTop: '1px solid #fafafa',
38
- },
39
- }))
40
-
41
- export default observer(function ({ model }: { model: SpreadsheetViewModel }) {
42
- const { classes } = useStyles()
43
- const {
44
- spreadsheet,
45
- filterControls,
46
- hideFilterControls,
47
- hideVerticalResizeHandle,
48
- mode,
49
- height,
50
- } = model
51
- const [page, setPage] = useState(0)
52
- const [rowsPerPage, setRowsPerPage] = useState(100)
53
-
54
- return (
55
- <div>
56
- {mode !== 'display' || hideFilterControls ? null : (
57
- <>
58
- <Grid container direction="row" className={classes.header}>
59
- <Grid item>
60
- <GlobalFilterControls model={model} />
61
- </Grid>
62
- </Grid>
63
- {filterControls.columnFilters.map((f, i) => (
64
- <ColumnFilterControls
65
- key={`${f.columnNumber}-${i}`}
66
- viewModel={model}
67
- filterModel={f}
68
- columnNumber={f.columnNumber}
69
- height={colFilterHeight}
70
- />
71
- ))}
72
- </>
73
- )}
74
-
75
- {mode === 'import' ? (
76
- <ImportWizard model={model.importWizard} />
77
- ) : (
78
- <div className={classes.contentArea}>
79
- <div
80
- style={{
81
- position: 'relative',
82
- display: mode === 'display' ? undefined : 'none',
83
- }}
84
- >
85
- {spreadsheet ? (
86
- <Spreadsheet
87
- page={page}
88
- rowsPerPage={rowsPerPage}
89
- model={spreadsheet}
90
- height={
91
- height -
92
- headerHeight -
93
- filterControls.columnFilters.length * colFilterHeight -
94
- statusBarHeight
95
- }
96
- />
97
- ) : null}
98
- </div>
99
- </div>
100
- )}
101
- {spreadsheet ? (
102
- <StatusBar
103
- page={page}
104
- setPage={setPage}
105
- rowsPerPage={rowsPerPage}
106
- setRowsPerPage={setRowsPerPage}
107
- mode={mode}
108
- spreadsheet={spreadsheet}
109
- />
110
- ) : null}
111
- {hideVerticalResizeHandle ? null : (
112
- <ResizeHandle
113
- onDrag={model.resizeHeight}
114
- className={classes.resizeHandle}
115
- />
116
- )}
117
- </div>
118
- )
119
- })
@@ -1,75 +0,0 @@
1
- import React from 'react'
2
- import { FormGroup, TablePagination } from '@mui/material'
3
- import { makeStyles } from 'tss-react/mui'
4
-
5
- // locals
6
- import RowCountMessage from './RowCountMessage'
7
- import { SpreadsheetModel } from '../models/Spreadsheet'
8
- import { observer } from 'mobx-react'
9
-
10
- const statusBarHeight = 40
11
-
12
- const useStyles = makeStyles()(theme => ({
13
- statusBar: {
14
- height: statusBarHeight,
15
- boxSizing: 'border-box',
16
- borderTop: '1px outset #b1b1b1',
17
- paddingLeft: theme.spacing(1),
18
- },
19
- verticallyCenter: {
20
- display: 'flex',
21
- justifyContent: 'center',
22
- flexDirection: 'column',
23
- },
24
- spacer: {
25
- flexGrow: 1,
26
- },
27
- }))
28
-
29
- const StatusBar = observer(function StatusBar({
30
- page,
31
- rowsPerPage,
32
- setPage,
33
- setRowsPerPage,
34
- spreadsheet,
35
- mode,
36
- }: {
37
- page: number
38
- mode: string
39
- spreadsheet: SpreadsheetModel
40
- rowsPerPage: number
41
- setPage: (arg: number) => void
42
- setRowsPerPage: (arg: number) => void
43
- }) {
44
- const { classes } = useStyles()
45
- return (
46
- <div
47
- className={classes.statusBar}
48
- style={{ display: mode === 'display' ? undefined : 'none' }}
49
- >
50
- {spreadsheet ? (
51
- <FormGroup row>
52
- <div className={classes.verticallyCenter}>
53
- <RowCountMessage spreadsheet={spreadsheet} />
54
- </div>
55
- <div className={classes.spacer} />
56
- <TablePagination
57
- rowsPerPageOptions={[10, 25, 100, 1000]}
58
- count={spreadsheet.rowSet.count}
59
- component="div"
60
- rowsPerPage={rowsPerPage}
61
- page={page}
62
- onPageChange={(_, newPage) => setPage(newPage)}
63
- onRowsPerPageChange={event => {
64
- setRowsPerPage(+event.target.value)
65
- setPage(0)
66
- }}
67
- />
68
- <div className={classes.spacer} />
69
- </FormGroup>
70
- ) : null}
71
- </div>
72
- )
73
- })
74
-
75
- export default StatusBar
@@ -1,16 +0,0 @@
1
- function letterFor(n: number) {
2
- return String.fromCharCode(n + 65)
3
- }
4
-
5
- export function numToColName(num: number) {
6
- if (num >= 0) {
7
- if (num < 26) {
8
- return letterFor(num)
9
- }
10
- if (num < 27 * 26) {
11
- return letterFor(Math.floor(num / 26 - 1)) + letterFor(num % 26)
12
- }
13
- }
14
-
15
- throw new RangeError('column number out of range')
16
- }
@@ -1,14 +0,0 @@
1
- import { promises as fsPromises } from 'fs'
2
- import path from 'path'
3
-
4
- import { removeBedHeaders } from './BedImport'
5
-
6
- test('bed header trimming', async () => {
7
- const filepath = path.join(__dirname, '..', 'test_data', 'foo.bed')
8
- const buf = await fsPromises.readFile(filepath)
9
- expect(buf[0]).toEqual(98)
10
- expect(buf[1]).toEqual(114)
11
- const trimmedBuffer = removeBedHeaders(buf)
12
- expect(trimmedBuffer[0]).toEqual(99)
13
- expect(trimmedBuffer.length).toBe(275)
14
- })