@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,35 +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 CellData = observer(function ({
11
- cell,
12
- spreadsheetModel,
13
- columnNumber,
14
- }: {
15
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
- cell: any
17
- spreadsheetModel: SpreadsheetModel
18
- columnNumber: number
19
- }) {
20
- const ret = spreadsheetModel.columns[columnNumber]
21
- if (ret && 'dataType' in ret && ret.dataType.DataCellReactComponent) {
22
- return (
23
- <ret.dataType.DataCellReactComponent
24
- cell={cell}
25
- dataType={ret.dataType}
26
- columnNumber={columnNumber}
27
- spreadsheet={spreadsheetModel}
28
- />
29
- )
30
- }
31
-
32
- return cell.text
33
- })
34
-
35
- export default CellData
@@ -1,84 +0,0 @@
1
- import React from 'react'
2
- import { Grid, IconButton, Typography } from '@mui/material'
3
- import { observer } from 'mobx-react'
4
- import { getParent } from 'mobx-state-tree'
5
- import { makeStyles } from 'tss-react/mui'
6
-
7
- // icons
8
- import FilterIcon from '@mui/icons-material/FilterList'
9
- import CloseIcon from '@mui/icons-material/Close'
10
-
11
- const useStyles = makeStyles()(theme => ({
12
- columnName: {
13
- verticalAlign: 'middle',
14
- paddingRight: '0.3em',
15
- },
16
- columnFilter: {
17
- overflow: 'hidden',
18
- whiteSpace: 'nowrap',
19
- boxSizing: 'border-box',
20
- width: '100%',
21
- position: 'relative',
22
- },
23
- filterIcon: {
24
- position: 'relative',
25
- top: '12px',
26
- },
27
- filterIconBg: {
28
- background: theme.palette.tertiary.main,
29
- color: 'white',
30
- padding: theme.spacing(1.5),
31
- },
32
- }))
33
-
34
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
35
- function FilterOperations({ filterModel }: { filterModel: any }) {
36
- if (filterModel) {
37
- return <filterModel.ReactComponent filterModel={filterModel} />
38
- }
39
- return null
40
- }
41
-
42
- const ColumnFilterControls = observer(function ({
43
- viewModel,
44
- filterModel,
45
- columnNumber,
46
- height,
47
- }: // eslint-disable-next-line @typescript-eslint/no-explicit-any
48
- any) {
49
- const { classes } = useStyles()
50
-
51
- const columnDefinition = viewModel.spreadsheet.columns[columnNumber]
52
- if (!columnDefinition) {
53
- throw new Error('no column definition! filters are probably out of date')
54
- }
55
- return (
56
- <Grid
57
- container
58
- direction="row"
59
- className={classes.columnFilter}
60
- style={{ height }}
61
- >
62
- <Grid item className={classes.filterIconBg}>
63
- <FilterIcon className={classes.filterIcon} />
64
- </Grid>
65
- <Grid item>
66
- <IconButton
67
- onClick={() =>
68
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
69
- getParent<any>(filterModel, 2).removeColumnFilter(filterModel)
70
- }
71
- title="remove filter"
72
- >
73
- <CloseIcon />
74
- </IconButton>
75
- <Typography className={classes.columnName} component="span">
76
- {columnDefinition.name}
77
- </Typography>{' '}
78
- <FilterOperations filterModel={filterModel} />
79
- </Grid>
80
- </Grid>
81
- )
82
- })
83
-
84
- export default ColumnFilterControls
@@ -1,166 +0,0 @@
1
- import React from 'react'
2
- import { observer } from 'mobx-react'
3
- import { iterMap } from '@jbrowse/core/util'
4
- import { Menu } from '@jbrowse/core/ui'
5
- import { MenuItem } from '@jbrowse/core/ui/Menu'
6
- import { SpreadsheetModel } from '../models/Spreadsheet'
7
- import { SpreadsheetViewModel } from '../models/SpreadsheetView'
8
-
9
- // icons
10
- import CheckIcon from '@mui/icons-material/Check'
11
- import FilterListIcon from '@mui/icons-material/FilterList'
12
- import PermDataSettingIcon from '@mui/icons-material/PermDataSetting'
13
- import SortIcon from '@mui/icons-material/Sort'
14
-
15
- const ColumnMenu = observer(function ({
16
- viewModel,
17
- spreadsheetModel,
18
- currentColumnMenu,
19
- setColumnMenu,
20
- }: {
21
- spreadsheetModel: SpreadsheetModel
22
- viewModel: SpreadsheetViewModel
23
- currentColumnMenu?: { colNumber: number; anchorEl: HTMLElement }
24
- setColumnMenu: (arg?: { anchorEl: HTMLElement; colNumber: number }) => void
25
- }) {
26
- const columnMenuClose = () => setColumnMenu(undefined)
27
- const columnNumber = currentColumnMenu?.colNumber || 0
28
- const sortMenuClick = (descending: boolean) => {
29
- spreadsheetModel.setSortColumns([
30
- {
31
- columnNumber,
32
- descending,
33
- },
34
- ])
35
- }
36
-
37
- const { dataTypeChoices } = spreadsheetModel
38
-
39
- // make a Map of categoryName => [entry...]
40
- type Record = (typeof dataTypeChoices)[0]
41
- type RecordGroup = { isCategory: boolean; subMenuItems: Record[] }
42
- const dataTypeTopLevelMenu = new Map<string, Record | RecordGroup>()
43
- dataTypeChoices.forEach(dataTypeRecord => {
44
- const { displayName, categoryName } = dataTypeRecord
45
- if (categoryName) {
46
- let entry = dataTypeTopLevelMenu.get(categoryName) as RecordGroup
47
- if (!entry) {
48
- entry = {
49
- isCategory: true,
50
- subMenuItems: [],
51
- }
52
- dataTypeTopLevelMenu.set(categoryName, entry)
53
- }
54
- entry.subMenuItems.push(dataTypeRecord)
55
- } else {
56
- dataTypeTopLevelMenu.set(displayName, dataTypeRecord)
57
- }
58
- })
59
-
60
- const { columns, sortColumns } = spreadsheetModel
61
- const dataType = currentColumnMenu && columns[columnNumber].dataType
62
- const dataTypeName = dataType?.type || ''
63
- const dataTypeDisplayName =
64
- (currentColumnMenu && columns[columnNumber].dataType.displayName) || ''
65
-
66
- const isSortingAscending =
67
- !!currentColumnMenu &&
68
- sortColumns.some(
69
- c => c.columnNumber === currentColumnMenu.colNumber && !c.descending,
70
- )
71
- const isSortingDescending =
72
- !!currentColumnMenu &&
73
- sortColumns.some(
74
- c => c.columnNumber === currentColumnMenu.colNumber && c.descending,
75
- )
76
-
77
- const menuItems = [
78
- // top-level column menu
79
- {
80
- label: 'Sort ascending',
81
- icon: SortIcon,
82
- type: 'radio',
83
- checked: isSortingAscending,
84
- onClick: () => sortMenuClick(false),
85
- },
86
- {
87
- label: 'Sort descending',
88
- icon: SortIcon,
89
- type: 'radio',
90
- checked: isSortingDescending,
91
- onClick: () => sortMenuClick(true),
92
- },
93
- {
94
- label: 'No sort',
95
- icon: SortIcon,
96
- type: 'radio',
97
- checked: !isSortingDescending && !isSortingAscending,
98
- onClick: () => spreadsheetModel.setSortColumns([]),
99
- },
100
- // data type menu
101
- {
102
- label: `Type: ${dataTypeDisplayName}`,
103
- icon: PermDataSettingIcon,
104
- subMenu: iterMap(
105
- dataTypeTopLevelMenu.entries(),
106
- ([displayName, record]) => {
107
- if ('typeName' in record && record.typeName) {
108
- const { typeName } = record
109
- return {
110
- label: displayName || typeName,
111
- icon: dataTypeName === typeName ? CheckIcon : undefined,
112
- onClick: () =>
113
- spreadsheetModel.setColumnType(columnNumber, typeName),
114
- }
115
- } else if ('subMenuItems' in record && record.subMenuItems) {
116
- const { subMenuItems } = record
117
- return {
118
- label: displayName,
119
- icon: subMenuItems.some(i => i.typeName === dataTypeName)
120
- ? CheckIcon
121
- : undefined,
122
- subMenu: subMenuItems.map(({ typeName, displayName }) => ({
123
- label: displayName,
124
- icon: typeName === dataTypeName ? CheckIcon : undefined,
125
- onClick: () =>
126
- spreadsheetModel.setColumnType(columnNumber, typeName),
127
- })),
128
- }
129
- } else {
130
- return null
131
- }
132
- },
133
- ).filter(Boolean),
134
- },
135
- ] as MenuItem[]
136
-
137
- // don't display the filter item if this data type doesn't have filtering
138
- // implemented
139
- if (dataType?.hasFilter) {
140
- menuItems.push({
141
- label: 'Create filter',
142
- icon: FilterListIcon,
143
- onClick: () =>
144
- viewModel.filterControls.addBlankColumnFilter(columnNumber),
145
- })
146
- }
147
-
148
- return (
149
- <Menu
150
- anchorEl={currentColumnMenu?.anchorEl}
151
- open={Boolean(currentColumnMenu)}
152
- onMenuItemClick={(_event, callback) => {
153
- callback()
154
- columnMenuClose()
155
- }}
156
- onClose={columnMenuClose}
157
- menuItems={menuItems}
158
- anchorOrigin={{
159
- vertical: 'bottom',
160
- horizontal: 'right',
161
- }}
162
- />
163
- )
164
- })
165
-
166
- export default ColumnMenu
@@ -1,126 +0,0 @@
1
- import React from 'react'
2
- import { Checkbox, IconButton, FormControlLabel } from '@mui/material'
3
- import { observer } from 'mobx-react'
4
- import { Instance } from 'mobx-state-tree'
5
- import { indigo } from '@mui/material/colors'
6
- import { makeStyles } from 'tss-react/mui'
7
-
8
- // icons
9
- import ArrowDropDown from '@mui/icons-material/ArrowDropDown'
10
-
11
- // locals
12
- import SpreadsheetStateModel from '../models/Spreadsheet'
13
- import RowStateModel from '../models/Row'
14
- import CellData from './CellData'
15
-
16
- type SpreadsheetModel = Instance<typeof SpreadsheetStateModel>
17
- type RowModel = Instance<typeof RowStateModel>
18
-
19
- const useStyles = makeStyles()(theme => ({
20
- rowNumCell: {
21
- textAlign: 'left',
22
- border: `1px solid ${theme.palette.action.disabledBackground}`,
23
- position: 'relative',
24
- padding: '0 2px 0 0',
25
- whiteSpace: 'nowrap',
26
- userSelect: 'none',
27
- },
28
- rowNumber: {
29
- fontWeight: 'normal',
30
- display: 'inline-block',
31
- flex: 'none',
32
- paddingRight: '20px',
33
- margin: 0,
34
- whiteSpace: 'nowrap',
35
- },
36
- rowMenuButton: {
37
- padding: 0,
38
- margin: 0,
39
- position: 'absolute',
40
- right: 0,
41
- display: 'inline-block',
42
- whiteSpace: 'nowrap',
43
- flex: 'none',
44
- },
45
- rowMenuButtonIcon: {},
46
- rowSelector: {
47
- position: 'relative',
48
- top: '-2px',
49
- margin: 0,
50
- padding: '0 0.2rem',
51
- },
52
-
53
- dataRowSelected: {
54
- background: indigo[100],
55
- '& th': {
56
- background: indigo[100],
57
- },
58
- },
59
- }))
60
-
61
- const DataRow = observer(function ({
62
- rowModel,
63
- rowNumber,
64
- spreadsheetModel,
65
- }: {
66
- rowModel: RowModel
67
- rowNumber: string
68
- spreadsheetModel: SpreadsheetModel
69
- }) {
70
- const { classes } = useStyles()
71
- const { hideRowSelection, columnDisplayOrder } = spreadsheetModel
72
- let rowClass = ''
73
- if (rowModel.isSelected) {
74
- rowClass += `${classes.dataRowSelected}`
75
- }
76
-
77
- function labelClick(evt: React.MouseEvent) {
78
- rowModel.toggleSelect()
79
- evt.stopPropagation()
80
- evt.preventDefault()
81
- }
82
-
83
- return (
84
- <tr className={rowClass}>
85
- <td className={classes.rowNumCell} onClick={labelClick}>
86
- {hideRowSelection ? (
87
- <FormControlLabel
88
- className={classes.rowNumber}
89
- control={
90
- <Checkbox
91
- className={classes.rowSelector}
92
- checked={rowModel.isSelected}
93
- onClick={labelClick}
94
- />
95
- }
96
- label={rowModel.id}
97
- />
98
- ) : null}
99
- <IconButton
100
- className={classes.rowMenuButton}
101
- onClick={event => {
102
- spreadsheetModel.setRowMenuPosition({
103
- anchorEl: event.currentTarget,
104
- rowNumber,
105
- })
106
- event.preventDefault()
107
- event.stopPropagation()
108
- }}
109
- >
110
- <ArrowDropDown className={classes.rowMenuButtonIcon} />
111
- </IconButton>
112
- </td>
113
- {columnDisplayOrder.map(colNumber => (
114
- <td key={colNumber}>
115
- <CellData
116
- cell={rowModel.cellsWithDerived[colNumber]}
117
- spreadsheetModel={spreadsheetModel}
118
- columnNumber={colNumber}
119
- />
120
- </td>
121
- ))}
122
- </tr>
123
- )
124
- })
125
-
126
- export default DataRow
@@ -1,91 +0,0 @@
1
- import React from 'react'
2
- import { observer } from 'mobx-react'
3
- import { getParent, Instance } from 'mobx-state-tree'
4
- import { makeStyles } from 'tss-react/mui'
5
-
6
- // locals
7
- import SpreadsheetStateModel from '../models/Spreadsheet'
8
- import RowStateModel from '../models/Row'
9
- import RowMenu from './RowMenu'
10
- import DataRow from './DataRow'
11
- import DataTableHeader from './DataTableHeader'
12
-
13
- type SpreadsheetModel = Instance<typeof SpreadsheetStateModel>
14
- type RowModel = Instance<typeof RowStateModel>
15
-
16
- const useStyles = makeStyles()(theme => ({
17
- dataTable: {
18
- borderCollapse: 'collapse',
19
- '& td': {
20
- border: `1px solid ${theme.palette.action.disabledBackground}`,
21
- padding: '0.2rem',
22
- maxWidth: '50em',
23
- overflow: 'hidden',
24
- textOverflow: 'ellipsis',
25
- },
26
- },
27
-
28
- emptyMessage: {
29
- captionSide: 'bottom',
30
- },
31
- }))
32
-
33
- const DataTableBody = observer(function ({
34
- rows,
35
- spreadsheetModel,
36
- page,
37
- rowsPerPage,
38
- }: {
39
- rows: RowModel[]
40
- spreadsheetModel: SpreadsheetModel
41
- page: number
42
- rowsPerPage: number
43
- }) {
44
- return (
45
- <tbody>
46
- {rows.slice(rowsPerPage * page, rowsPerPage * (page + 1)).map(row => (
47
- <DataRow
48
- key={row.id}
49
- rowNumber={row.id}
50
- spreadsheetModel={spreadsheetModel}
51
- rowModel={row}
52
- />
53
- ))}
54
- </tbody>
55
- )
56
- })
57
-
58
- const DataTable = observer(function ({
59
- model,
60
- page,
61
- rowsPerPage,
62
- }: {
63
- model: SpreadsheetModel
64
- page: number
65
- rowsPerPage: number
66
- }) {
67
- const { rowSet } = model
68
- const { classes } = useStyles()
69
- const rows = rowSet.sortedFilteredRows
70
- return (
71
- <>
72
- <RowMenu viewModel={getParent(model)} spreadsheetModel={model} />
73
- <table className={classes.dataTable}>
74
- <DataTableHeader model={model} />
75
- <DataTableBody
76
- rows={rows}
77
- spreadsheetModel={model}
78
- page={page}
79
- rowsPerPage={rowsPerPage}
80
- />
81
- {!rows.length ? (
82
- <caption className={classes.emptyMessage}>
83
- {rowSet.count ? 'no rows match criteria' : 'no rows present'}
84
- </caption>
85
- ) : null}
86
- </table>
87
- </>
88
- )
89
- })
90
-
91
- export default DataTable
@@ -1,122 +0,0 @@
1
- import React, { useState } from 'react'
2
- import { IconButton, Tooltip } from '@mui/material'
3
- import { observer } from 'mobx-react'
4
- import { getParent } from 'mobx-state-tree'
5
- import { makeStyles } from 'tss-react/mui'
6
-
7
- // icons
8
- import CropFreeIcon from '@mui/icons-material/CropFree'
9
- import ArrowDropDown from '@mui/icons-material/ArrowDropDown'
10
-
11
- // locals
12
- import { SpreadsheetModel } from '../models/Spreadsheet'
13
- import ColumnMenu from './ColumnMenu'
14
- import SortIndicator from './SortIndicator'
15
- import { numToColName } from './util'
16
-
17
- interface ColMenu {
18
- colNumber: number
19
- anchorEl: HTMLElement
20
- }
21
-
22
- const useStyles = makeStyles()(theme => ({
23
- columnHead: {
24
- fontWeight: 'normal',
25
- background: theme.palette.mode === 'dark' ? '#333' : '#eee',
26
- position: 'sticky',
27
- top: 0,
28
- zIndex: 2,
29
- whiteSpace: 'nowrap',
30
- },
31
-
32
- columnButtonContainer: {
33
- display: 'none',
34
- position: 'absolute',
35
- right: 0,
36
- top: 0,
37
- background: theme.palette.background.paper,
38
- height: '100%',
39
- },
40
-
41
- topLeftCorner: {
42
- background: theme.palette.mode === 'dark' ? '#333' : '#eee',
43
- zIndex: 2,
44
- position: 'sticky',
45
- top: 0,
46
- minWidth: theme.spacing(2),
47
- textAlign: 'left',
48
- },
49
- }))
50
-
51
- const DataTableHeader = observer(function ({
52
- model,
53
- }: {
54
- model: SpreadsheetModel
55
- }) {
56
- const { classes } = useStyles()
57
- const { columnDisplayOrder, columns, hasColumnNames, rowSet } = model
58
- const [currentColumnMenu, setColumnMenu] = useState<ColMenu>()
59
- const [currentHoveredColumn, setHoveredColumn] = useState<number>()
60
-
61
- return (
62
- <>
63
- <thead>
64
- <tr>
65
- <th className={classes.topLeftCorner}>
66
- <Tooltip title="Unselect all" placement="right">
67
- <span>
68
- <IconButton
69
- onClick={() => model.unselectAll()}
70
- disabled={!rowSet.selectedCount}
71
- >
72
- <CropFreeIcon />
73
- </IconButton>
74
- </span>
75
- </Tooltip>
76
- </th>
77
- {columnDisplayOrder.map(colNumber => (
78
- <th
79
- className={classes.columnHead}
80
- key={colNumber}
81
- onMouseOver={() => setHoveredColumn(colNumber)}
82
- onMouseOut={() => setHoveredColumn(undefined)}
83
- >
84
- <SortIndicator model={model} columnNumber={colNumber} />
85
- {(hasColumnNames && columns[colNumber]?.name) ||
86
- numToColName(colNumber)}
87
- <div
88
- className={classes.columnButtonContainer}
89
- style={{
90
- display:
91
- currentHoveredColumn === colNumber ||
92
- currentColumnMenu?.colNumber === colNumber
93
- ? 'block'
94
- : 'none',
95
- }}
96
- >
97
- <IconButton
98
- onClick={evt => {
99
- setColumnMenu({
100
- colNumber,
101
- anchorEl: evt.currentTarget,
102
- })
103
- }}
104
- >
105
- <ArrowDropDown />
106
- </IconButton>
107
- </div>
108
- </th>
109
- ))}
110
- </tr>
111
- </thead>
112
- <ColumnMenu
113
- viewModel={getParent(model)}
114
- spreadsheetModel={model}
115
- currentColumnMenu={currentColumnMenu}
116
- setColumnMenu={setColumnMenu}
117
- />
118
- </>
119
- )
120
- })
121
-
122
- export default DataTableHeader
@@ -1,70 +0,0 @@
1
- import React, { useState, useEffect } from 'react'
2
-
3
- import { IconButton, InputAdornment, TextField } from '@mui/material'
4
- import ClearIcon from '@mui/icons-material/Clear'
5
- import FilterIcon from '@mui/icons-material/FilterList'
6
-
7
- import { observer } from 'mobx-react'
8
- import { makeStyles } from 'tss-react/mui'
9
- import { useDebounce } from '@jbrowse/core/util'
10
-
11
- const useStyles = makeStyles()({
12
- textFilterControlEndAdornment: {
13
- marginRight: '-18px',
14
- },
15
- })
16
-
17
- const TextFilter = observer(function ({
18
- textFilter,
19
- }: {
20
- textFilter: { stringToFind: string; setString: (arg: string) => void }
21
- }) {
22
- const { classes } = useStyles()
23
- // this paragraph is silliness to debounce the text filter input
24
- const [textFilterValue, setTextFilterValue] = useState(
25
- textFilter.stringToFind,
26
- )
27
- const debouncedTextFilter = useDebounce(textFilterValue, 500)
28
- useEffect(() => {
29
- textFilter.setString(debouncedTextFilter)
30
- }, [debouncedTextFilter, textFilter])
31
-
32
- return (
33
- <div>
34
- <TextField
35
- label="text filter"
36
- value={textFilterValue}
37
- onChange={evt => setTextFilterValue(evt.target.value)}
38
- variant="outlined"
39
- InputProps={{
40
- startAdornment: (
41
- <InputAdornment position="start">
42
- <FilterIcon />
43
- </InputAdornment>
44
- ),
45
- endAdornment: (
46
- <InputAdornment
47
- className={classes.textFilterControlEndAdornment}
48
- position="end"
49
- >
50
- <IconButton
51
- aria-label="clear filter"
52
- onClick={() => setTextFilterValue('')}
53
- >
54
- <ClearIcon />
55
- </IconButton>
56
- </InputAdornment>
57
- ),
58
- }}
59
- />
60
- </div>
61
- )
62
- })
63
-
64
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
65
- const GlobalFilterControls = observer(({ model }: { model: any }) => {
66
- const textFilter = model.filterControls.rowFullText
67
- return <TextFilter textFilter={textFilter} />
68
- })
69
-
70
- export default GlobalFilterControls