@jbrowse/plugin-spreadsheet-view 2.6.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/LICENSE +201 -0
- package/dist/LaunchSpreadsheetView/index.d.ts +3 -0
- package/dist/LaunchSpreadsheetView/index.js +26 -0
- package/dist/LaunchSpreadsheetView/index.js.map +1 -0
- package/dist/SpreadsheetView/components/CellData.d.ts +9 -0
- package/dist/SpreadsheetView/components/CellData.js +16 -0
- package/dist/SpreadsheetView/components/CellData.js.map +1 -0
- package/dist/SpreadsheetView/components/ColumnFilterControls.d.ts +3 -0
- package/dist/SpreadsheetView/components/ColumnFilterControls.js +62 -0
- package/dist/SpreadsheetView/components/ColumnFilterControls.js.map +1 -0
- package/dist/SpreadsheetView/components/ColumnMenu.d.ts +16 -0
- package/dist/SpreadsheetView/components/ColumnMenu.js +127 -0
- package/dist/SpreadsheetView/components/ColumnMenu.js.map +1 -0
- package/dist/SpreadsheetView/components/DataRow.d.ts +12 -0
- package/dist/SpreadsheetView/components/DataRow.js +82 -0
- package/dist/SpreadsheetView/components/DataRow.js.map +1 -0
- package/dist/SpreadsheetView/components/DataTable.d.ts +10 -0
- package/dist/SpreadsheetView/components/DataTable.js +43 -0
- package/dist/SpreadsheetView/components/DataTable.js.map +1 -0
- package/dist/SpreadsheetView/components/DataTableHeader.d.ts +6 -0
- package/dist/SpreadsheetView/components/DataTableHeader.js +102 -0
- package/dist/SpreadsheetView/components/DataTableHeader.js.map +1 -0
- package/dist/SpreadsheetView/components/GlobalFilterControls.d.ts +5 -0
- package/dist/SpreadsheetView/components/GlobalFilterControls.js +64 -0
- package/dist/SpreadsheetView/components/GlobalFilterControls.js.map +1 -0
- package/dist/SpreadsheetView/components/ImportWizard.d.ts +6 -0
- package/dist/SpreadsheetView/components/ImportWizard.js +81 -0
- package/dist/SpreadsheetView/components/ImportWizard.js.map +1 -0
- package/dist/SpreadsheetView/components/NumberEditor.d.ts +9 -0
- package/dist/SpreadsheetView/components/NumberEditor.js +54 -0
- package/dist/SpreadsheetView/components/NumberEditor.js.map +1 -0
- package/dist/SpreadsheetView/components/RowCountMessage.d.ts +8 -0
- package/dist/SpreadsheetView/components/RowCountMessage.js +33 -0
- package/dist/SpreadsheetView/components/RowCountMessage.js.map +1 -0
- package/dist/SpreadsheetView/components/RowMenu.d.ts +9 -0
- package/dist/SpreadsheetView/components/RowMenu.js +39 -0
- package/dist/SpreadsheetView/components/RowMenu.js.map +1 -0
- package/dist/SpreadsheetView/components/SortIndicator.d.ts +6 -0
- package/dist/SpreadsheetView/components/SortIndicator.js +28 -0
- package/dist/SpreadsheetView/components/SortIndicator.js.map +1 -0
- package/dist/SpreadsheetView/components/Spreadsheet.d.ts +11 -0
- package/dist/SpreadsheetView/components/Spreadsheet.js +25 -0
- package/dist/SpreadsheetView/components/Spreadsheet.js.map +1 -0
- package/dist/SpreadsheetView/components/SpreadsheetView.d.ts +6 -0
- package/dist/SpreadsheetView/components/SpreadsheetView.js +86 -0
- package/dist/SpreadsheetView/components/SpreadsheetView.js.map +1 -0
- package/dist/SpreadsheetView/components/StatusBar.d.ts +11 -0
- package/dist/SpreadsheetView/components/StatusBar.js +42 -0
- package/dist/SpreadsheetView/components/StatusBar.js.map +1 -0
- package/dist/SpreadsheetView/components/util.d.ts +1 -0
- package/dist/SpreadsheetView/components/util.js +19 -0
- package/dist/SpreadsheetView/components/util.js.map +1 -0
- package/dist/SpreadsheetView/importAdapters/BedImport.d.ts +17 -0
- package/dist/SpreadsheetView/importAdapters/BedImport.js +147 -0
- package/dist/SpreadsheetView/importAdapters/BedImport.js.map +1 -0
- package/dist/SpreadsheetView/importAdapters/ImportUtils.d.ts +42 -0
- package/dist/SpreadsheetView/importAdapters/ImportUtils.js +124 -0
- package/dist/SpreadsheetView/importAdapters/ImportUtils.js.map +1 -0
- package/dist/SpreadsheetView/importAdapters/STARFusionImport.d.ts +9 -0
- package/dist/SpreadsheetView/importAdapters/STARFusionImport.js +73 -0
- package/dist/SpreadsheetView/importAdapters/STARFusionImport.js.map +1 -0
- package/dist/SpreadsheetView/importAdapters/VcfImport.d.ts +13 -0
- package/dist/SpreadsheetView/importAdapters/VcfImport.js +111 -0
- package/dist/SpreadsheetView/importAdapters/VcfImport.js.map +1 -0
- package/dist/SpreadsheetView/index.d.ts +4 -0
- package/dist/SpreadsheetView/index.js +42 -0
- package/dist/SpreadsheetView/index.js.map +1 -0
- package/dist/SpreadsheetView/models/ColumnDataTypes/LocEnd.d.ts +13 -0
- package/dist/SpreadsheetView/models/ColumnDataTypes/LocEnd.js +21 -0
- package/dist/SpreadsheetView/models/ColumnDataTypes/LocEnd.js.map +1 -0
- package/dist/SpreadsheetView/models/ColumnDataTypes/LocRef.d.ts +13 -0
- package/dist/SpreadsheetView/models/ColumnDataTypes/LocRef.js +21 -0
- package/dist/SpreadsheetView/models/ColumnDataTypes/LocRef.js.map +1 -0
- package/dist/SpreadsheetView/models/ColumnDataTypes/LocStart.d.ts +13 -0
- package/dist/SpreadsheetView/models/ColumnDataTypes/LocStart.js +21 -0
- package/dist/SpreadsheetView/models/ColumnDataTypes/LocStart.js.map +1 -0
- package/dist/SpreadsheetView/models/ColumnDataTypes/LocString.d.ts +13 -0
- package/dist/SpreadsheetView/models/ColumnDataTypes/LocString.js +190 -0
- package/dist/SpreadsheetView/models/ColumnDataTypes/LocString.js.map +1 -0
- package/dist/SpreadsheetView/models/ColumnDataTypes/MakeSpreadsheetColumnType.d.ts +19 -0
- package/dist/SpreadsheetView/models/ColumnDataTypes/MakeSpreadsheetColumnType.js +24 -0
- package/dist/SpreadsheetView/models/ColumnDataTypes/MakeSpreadsheetColumnType.js.map +1 -0
- package/dist/SpreadsheetView/models/ColumnDataTypes/Number.d.ts +30 -0
- package/dist/SpreadsheetView/models/ColumnDataTypes/Number.js +130 -0
- package/dist/SpreadsheetView/models/ColumnDataTypes/Number.js.map +1 -0
- package/dist/SpreadsheetView/models/ColumnDataTypes/Text.d.ts +28 -0
- package/dist/SpreadsheetView/models/ColumnDataTypes/Text.js +131 -0
- package/dist/SpreadsheetView/models/ColumnDataTypes/Text.js.map +1 -0
- package/dist/SpreadsheetView/models/ColumnDataTypes/index.d.ts +72 -0
- package/dist/SpreadsheetView/models/ColumnDataTypes/index.js +38 -0
- package/dist/SpreadsheetView/models/ColumnDataTypes/index.js.map +1 -0
- package/dist/SpreadsheetView/models/FilterControls.d.ts +26 -0
- package/dist/SpreadsheetView/models/FilterControls.js +88 -0
- package/dist/SpreadsheetView/models/FilterControls.js.map +1 -0
- package/dist/SpreadsheetView/models/ImportWizard.d.ts +31 -0
- package/dist/SpreadsheetView/models/ImportWizard.js +193 -0
- package/dist/SpreadsheetView/models/ImportWizard.js.map +1 -0
- package/dist/SpreadsheetView/models/Row.d.ts +17 -0
- package/dist/SpreadsheetView/models/Row.js +46 -0
- package/dist/SpreadsheetView/models/Row.js.map +1 -0
- package/dist/SpreadsheetView/models/Spreadsheet.d.ts +256 -0
- package/dist/SpreadsheetView/models/Spreadsheet.js +176 -0
- package/dist/SpreadsheetView/models/Spreadsheet.js.map +1 -0
- package/dist/SpreadsheetView/models/SpreadsheetView.d.ts +485 -0
- package/dist/SpreadsheetView/models/SpreadsheetView.js +204 -0
- package/dist/SpreadsheetView/models/SpreadsheetView.js.map +1 -0
- package/dist/SpreadsheetView/models/StaticRowSet.d.ts +163 -0
- package/dist/SpreadsheetView/models/StaticRowSet.js +60 -0
- package/dist/SpreadsheetView/models/StaticRowSet.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/esm/LaunchSpreadsheetView/index.d.ts +3 -0
- package/esm/LaunchSpreadsheetView/index.js +24 -0
- package/esm/LaunchSpreadsheetView/index.js.map +1 -0
- package/esm/SpreadsheetView/components/CellData.d.ts +9 -0
- package/esm/SpreadsheetView/components/CellData.js +11 -0
- package/esm/SpreadsheetView/components/CellData.js.map +1 -0
- package/esm/SpreadsheetView/components/ColumnFilterControls.d.ts +3 -0
- package/esm/SpreadsheetView/components/ColumnFilterControls.js +57 -0
- package/esm/SpreadsheetView/components/ColumnFilterControls.js.map +1 -0
- package/esm/SpreadsheetView/components/ColumnMenu.d.ts +16 -0
- package/esm/SpreadsheetView/components/ColumnMenu.js +122 -0
- package/esm/SpreadsheetView/components/ColumnMenu.js.map +1 -0
- package/esm/SpreadsheetView/components/DataRow.d.ts +12 -0
- package/esm/SpreadsheetView/components/DataRow.js +77 -0
- package/esm/SpreadsheetView/components/DataRow.js.map +1 -0
- package/esm/SpreadsheetView/components/DataTable.d.ts +10 -0
- package/esm/SpreadsheetView/components/DataTable.js +38 -0
- package/esm/SpreadsheetView/components/DataTable.js.map +1 -0
- package/esm/SpreadsheetView/components/DataTableHeader.d.ts +6 -0
- package/esm/SpreadsheetView/components/DataTableHeader.js +74 -0
- package/esm/SpreadsheetView/components/DataTableHeader.js.map +1 -0
- package/esm/SpreadsheetView/components/GlobalFilterControls.d.ts +5 -0
- package/esm/SpreadsheetView/components/GlobalFilterControls.js +36 -0
- package/esm/SpreadsheetView/components/GlobalFilterControls.js.map +1 -0
- package/esm/SpreadsheetView/components/ImportWizard.d.ts +6 -0
- package/esm/SpreadsheetView/components/ImportWizard.js +53 -0
- package/esm/SpreadsheetView/components/ImportWizard.js.map +1 -0
- package/esm/SpreadsheetView/components/NumberEditor.d.ts +9 -0
- package/esm/SpreadsheetView/components/NumberEditor.js +29 -0
- package/esm/SpreadsheetView/components/NumberEditor.js.map +1 -0
- package/esm/SpreadsheetView/components/RowCountMessage.d.ts +8 -0
- package/esm/SpreadsheetView/components/RowCountMessage.js +28 -0
- package/esm/SpreadsheetView/components/RowCountMessage.js.map +1 -0
- package/esm/SpreadsheetView/components/RowMenu.d.ts +9 -0
- package/esm/SpreadsheetView/components/RowMenu.js +34 -0
- package/esm/SpreadsheetView/components/RowMenu.js.map +1 -0
- package/esm/SpreadsheetView/components/SortIndicator.d.ts +6 -0
- package/esm/SpreadsheetView/components/SortIndicator.js +22 -0
- package/esm/SpreadsheetView/components/SortIndicator.js.map +1 -0
- package/esm/SpreadsheetView/components/Spreadsheet.d.ts +11 -0
- package/esm/SpreadsheetView/components/Spreadsheet.js +20 -0
- package/esm/SpreadsheetView/components/Spreadsheet.js.map +1 -0
- package/esm/SpreadsheetView/components/SpreadsheetView.d.ts +6 -0
- package/esm/SpreadsheetView/components/SpreadsheetView.js +58 -0
- package/esm/SpreadsheetView/components/SpreadsheetView.js.map +1 -0
- package/esm/SpreadsheetView/components/StatusBar.d.ts +11 -0
- package/esm/SpreadsheetView/components/StatusBar.js +37 -0
- package/esm/SpreadsheetView/components/StatusBar.js.map +1 -0
- package/esm/SpreadsheetView/components/util.d.ts +1 -0
- package/esm/SpreadsheetView/components/util.js +15 -0
- package/esm/SpreadsheetView/components/util.js.map +1 -0
- package/esm/SpreadsheetView/importAdapters/BedImport.d.ts +17 -0
- package/esm/SpreadsheetView/importAdapters/BedImport.js +141 -0
- package/esm/SpreadsheetView/importAdapters/BedImport.js.map +1 -0
- package/esm/SpreadsheetView/importAdapters/ImportUtils.d.ts +42 -0
- package/esm/SpreadsheetView/importAdapters/ImportUtils.js +95 -0
- package/esm/SpreadsheetView/importAdapters/ImportUtils.js.map +1 -0
- package/esm/SpreadsheetView/importAdapters/STARFusionImport.d.ts +9 -0
- package/esm/SpreadsheetView/importAdapters/STARFusionImport.js +69 -0
- package/esm/SpreadsheetView/importAdapters/STARFusionImport.js.map +1 -0
- package/esm/SpreadsheetView/importAdapters/VcfImport.d.ts +13 -0
- package/esm/SpreadsheetView/importAdapters/VcfImport.js +103 -0
- package/esm/SpreadsheetView/importAdapters/VcfImport.js.map +1 -0
- package/esm/SpreadsheetView/index.d.ts +4 -0
- package/esm/SpreadsheetView/index.js +14 -0
- package/esm/SpreadsheetView/index.js.map +1 -0
- package/esm/SpreadsheetView/models/ColumnDataTypes/LocEnd.d.ts +13 -0
- package/esm/SpreadsheetView/models/ColumnDataTypes/LocEnd.js +16 -0
- package/esm/SpreadsheetView/models/ColumnDataTypes/LocEnd.js.map +1 -0
- package/esm/SpreadsheetView/models/ColumnDataTypes/LocRef.d.ts +13 -0
- package/esm/SpreadsheetView/models/ColumnDataTypes/LocRef.js +16 -0
- package/esm/SpreadsheetView/models/ColumnDataTypes/LocRef.js.map +1 -0
- package/esm/SpreadsheetView/models/ColumnDataTypes/LocStart.d.ts +13 -0
- package/esm/SpreadsheetView/models/ColumnDataTypes/LocStart.js +16 -0
- package/esm/SpreadsheetView/models/ColumnDataTypes/LocStart.js.map +1 -0
- package/esm/SpreadsheetView/models/ColumnDataTypes/LocString.d.ts +13 -0
- package/esm/SpreadsheetView/models/ColumnDataTypes/LocString.js +185 -0
- package/esm/SpreadsheetView/models/ColumnDataTypes/LocString.js.map +1 -0
- package/esm/SpreadsheetView/models/ColumnDataTypes/MakeSpreadsheetColumnType.d.ts +19 -0
- package/esm/SpreadsheetView/models/ColumnDataTypes/MakeSpreadsheetColumnType.js +21 -0
- package/esm/SpreadsheetView/models/ColumnDataTypes/MakeSpreadsheetColumnType.js.map +1 -0
- package/esm/SpreadsheetView/models/ColumnDataTypes/Number.d.ts +30 -0
- package/esm/SpreadsheetView/models/ColumnDataTypes/Number.js +123 -0
- package/esm/SpreadsheetView/models/ColumnDataTypes/Number.js.map +1 -0
- package/esm/SpreadsheetView/models/ColumnDataTypes/Text.d.ts +28 -0
- package/esm/SpreadsheetView/models/ColumnDataTypes/Text.js +124 -0
- package/esm/SpreadsheetView/models/ColumnDataTypes/Text.js.map +1 -0
- package/esm/SpreadsheetView/models/ColumnDataTypes/index.d.ts +72 -0
- package/esm/SpreadsheetView/models/ColumnDataTypes/index.js +30 -0
- package/esm/SpreadsheetView/models/ColumnDataTypes/index.js.map +1 -0
- package/esm/SpreadsheetView/models/FilterControls.d.ts +26 -0
- package/esm/SpreadsheetView/models/FilterControls.js +86 -0
- package/esm/SpreadsheetView/models/FilterControls.js.map +1 -0
- package/esm/SpreadsheetView/models/ImportWizard.d.ts +31 -0
- package/esm/SpreadsheetView/models/ImportWizard.js +168 -0
- package/esm/SpreadsheetView/models/ImportWizard.js.map +1 -0
- package/esm/SpreadsheetView/models/Row.d.ts +17 -0
- package/esm/SpreadsheetView/models/Row.js +44 -0
- package/esm/SpreadsheetView/models/Row.js.map +1 -0
- package/esm/SpreadsheetView/models/Spreadsheet.d.ts +256 -0
- package/esm/SpreadsheetView/models/Spreadsheet.js +171 -0
- package/esm/SpreadsheetView/models/Spreadsheet.js.map +1 -0
- package/esm/SpreadsheetView/models/SpreadsheetView.d.ts +485 -0
- package/esm/SpreadsheetView/models/SpreadsheetView.js +199 -0
- package/esm/SpreadsheetView/models/SpreadsheetView.js.map +1 -0
- package/esm/SpreadsheetView/models/StaticRowSet.d.ts +163 -0
- package/esm/SpreadsheetView/models/StaticRowSet.js +55 -0
- package/esm/SpreadsheetView/models/StaticRowSet.js.map +1 -0
- package/esm/index.d.ts +8 -0
- package/esm/index.js +30 -0
- package/esm/index.js.map +1 -0
- package/package.json +65 -0
- package/src/LaunchSpreadsheetView/index.ts +40 -0
- package/src/SpreadsheetView/components/CellData.tsx +35 -0
- package/src/SpreadsheetView/components/ColumnFilterControls.tsx +84 -0
- package/src/SpreadsheetView/components/ColumnMenu.tsx +166 -0
- package/src/SpreadsheetView/components/DataRow.tsx +126 -0
- package/src/SpreadsheetView/components/DataTable.tsx +91 -0
- package/src/SpreadsheetView/components/DataTableHeader.tsx +122 -0
- package/src/SpreadsheetView/components/GlobalFilterControls.tsx +70 -0
- package/src/SpreadsheetView/components/ImportWizard.tsx +139 -0
- package/src/SpreadsheetView/components/NumberEditor.tsx +50 -0
- package/src/SpreadsheetView/components/RowCountMessage.tsx +44 -0
- package/src/SpreadsheetView/components/RowMenu.tsx +65 -0
- package/src/SpreadsheetView/components/SortIndicator.tsx +36 -0
- package/src/SpreadsheetView/components/Spreadsheet.test.ts +17 -0
- package/src/SpreadsheetView/components/Spreadsheet.tsx +46 -0
- package/src/SpreadsheetView/components/SpreadsheetView.tsx +119 -0
- package/src/SpreadsheetView/components/StatusBar.tsx +75 -0
- package/src/SpreadsheetView/components/util.ts +16 -0
- package/src/SpreadsheetView/importAdapters/BedImport.test.ts +14 -0
- package/src/SpreadsheetView/importAdapters/BedImport.ts +155 -0
- package/src/SpreadsheetView/importAdapters/ImportUtils.test.ts +25 -0
- package/src/SpreadsheetView/importAdapters/ImportUtils.ts +152 -0
- package/src/SpreadsheetView/importAdapters/STARFusionImport.test.ts +27 -0
- package/src/SpreadsheetView/importAdapters/STARFusionImport.ts +74 -0
- package/src/SpreadsheetView/importAdapters/VcfImport.test.ts +42 -0
- package/src/SpreadsheetView/importAdapters/VcfImport.ts +118 -0
- package/src/SpreadsheetView/importAdapters/__snapshots__/ImportUtils.test.ts.snap +6555 -0
- package/src/SpreadsheetView/importAdapters/__snapshots__/STARFusionImport.test.ts.snap +2354 -0
- package/src/SpreadsheetView/importAdapters/__snapshots__/VcfImport.test.ts.snap +16329 -0
- package/src/SpreadsheetView/index.ts +20 -0
- package/src/SpreadsheetView/models/ColumnDataTypes/LocEnd.ts +21 -0
- package/src/SpreadsheetView/models/ColumnDataTypes/LocRef.ts +21 -0
- package/src/SpreadsheetView/models/ColumnDataTypes/LocStart.ts +21 -0
- package/src/SpreadsheetView/models/ColumnDataTypes/LocString.tsx +328 -0
- package/src/SpreadsheetView/models/ColumnDataTypes/MakeSpreadsheetColumnType.tsx +38 -0
- package/src/SpreadsheetView/models/ColumnDataTypes/Number.tsx +177 -0
- package/src/SpreadsheetView/models/ColumnDataTypes/Text.tsx +173 -0
- package/src/SpreadsheetView/models/ColumnDataTypes/index.ts +34 -0
- package/src/SpreadsheetView/models/FilterControls.ts +95 -0
- package/src/SpreadsheetView/models/ImportWizard.ts +203 -0
- package/src/SpreadsheetView/models/Row.ts +46 -0
- package/src/SpreadsheetView/models/Spreadsheet.ts +209 -0
- package/src/SpreadsheetView/models/SpreadsheetView.test.ts +8 -0
- package/src/SpreadsheetView/models/SpreadsheetView.ts +243 -0
- package/src/SpreadsheetView/models/StaticRowSet.ts +65 -0
- package/src/SpreadsheetView/test_data/1801160099-N32519_26611_S51_56704.hard-filtered.vcf +174 -0
- package/src/SpreadsheetView/test_data/breast_cancer.subset.csv +50 -0
- package/src/SpreadsheetView/test_data/diabetes_target.csv.gz +0 -0
- package/src/SpreadsheetView/test_data/foo.bed +11 -0
- package/src/SpreadsheetView/test_data/location_test.csv +3 -0
- package/src/SpreadsheetView/test_data/location_test_2.csv +3 -0
- package/src/SpreadsheetView/test_data/reads_lr_skbr3.fa_ngmlr-0.2.3_mapped.bam.sniffles1kb_auto_l8_s5_noalt.bedpe +1405 -0
- package/src/SpreadsheetView/test_data/starfusion_example.fusion_predictions.tsv +25 -0
- package/src/SpreadsheetView/test_data/volvox.sort.bed +109 -0
- package/src/index.ts +38 -0
|
@@ -0,0 +1,122 @@
|
|
|
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
|
+
// icons
|
|
6
|
+
import CheckIcon from '@mui/icons-material/Check';
|
|
7
|
+
import FilterListIcon from '@mui/icons-material/FilterList';
|
|
8
|
+
import PermDataSettingIcon from '@mui/icons-material/PermDataSetting';
|
|
9
|
+
import SortIcon from '@mui/icons-material/Sort';
|
|
10
|
+
const ColumnMenu = observer(function ({ viewModel, spreadsheetModel, currentColumnMenu, setColumnMenu, }) {
|
|
11
|
+
const columnMenuClose = () => setColumnMenu(undefined);
|
|
12
|
+
const columnNumber = (currentColumnMenu === null || currentColumnMenu === void 0 ? void 0 : currentColumnMenu.colNumber) || 0;
|
|
13
|
+
const sortMenuClick = (descending) => {
|
|
14
|
+
spreadsheetModel.setSortColumns([
|
|
15
|
+
{
|
|
16
|
+
columnNumber,
|
|
17
|
+
descending,
|
|
18
|
+
},
|
|
19
|
+
]);
|
|
20
|
+
};
|
|
21
|
+
const { dataTypeChoices } = spreadsheetModel;
|
|
22
|
+
const dataTypeTopLevelMenu = new Map();
|
|
23
|
+
dataTypeChoices.forEach(dataTypeRecord => {
|
|
24
|
+
const { displayName, categoryName } = dataTypeRecord;
|
|
25
|
+
if (categoryName) {
|
|
26
|
+
let entry = dataTypeTopLevelMenu.get(categoryName);
|
|
27
|
+
if (!entry) {
|
|
28
|
+
entry = {
|
|
29
|
+
isCategory: true,
|
|
30
|
+
subMenuItems: [],
|
|
31
|
+
};
|
|
32
|
+
dataTypeTopLevelMenu.set(categoryName, entry);
|
|
33
|
+
}
|
|
34
|
+
entry.subMenuItems.push(dataTypeRecord);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
dataTypeTopLevelMenu.set(displayName, dataTypeRecord);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
const { columns, sortColumns } = spreadsheetModel;
|
|
41
|
+
const dataType = currentColumnMenu && columns[columnNumber].dataType;
|
|
42
|
+
const dataTypeName = (dataType === null || dataType === void 0 ? void 0 : dataType.type) || '';
|
|
43
|
+
const dataTypeDisplayName = (currentColumnMenu && columns[columnNumber].dataType.displayName) || '';
|
|
44
|
+
const isSortingAscending = !!currentColumnMenu &&
|
|
45
|
+
sortColumns.some(c => c.columnNumber === currentColumnMenu.colNumber && !c.descending);
|
|
46
|
+
const isSortingDescending = !!currentColumnMenu &&
|
|
47
|
+
sortColumns.some(c => c.columnNumber === currentColumnMenu.colNumber && c.descending);
|
|
48
|
+
const menuItems = [
|
|
49
|
+
// top-level column menu
|
|
50
|
+
{
|
|
51
|
+
label: 'Sort ascending',
|
|
52
|
+
icon: SortIcon,
|
|
53
|
+
type: 'radio',
|
|
54
|
+
checked: isSortingAscending,
|
|
55
|
+
onClick: () => sortMenuClick(false),
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
label: 'Sort descending',
|
|
59
|
+
icon: SortIcon,
|
|
60
|
+
type: 'radio',
|
|
61
|
+
checked: isSortingDescending,
|
|
62
|
+
onClick: () => sortMenuClick(true),
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
label: 'No sort',
|
|
66
|
+
icon: SortIcon,
|
|
67
|
+
type: 'radio',
|
|
68
|
+
checked: !isSortingDescending && !isSortingAscending,
|
|
69
|
+
onClick: () => spreadsheetModel.setSortColumns([]),
|
|
70
|
+
},
|
|
71
|
+
// data type menu
|
|
72
|
+
{
|
|
73
|
+
label: `Type: ${dataTypeDisplayName}`,
|
|
74
|
+
icon: PermDataSettingIcon,
|
|
75
|
+
subMenu: iterMap(dataTypeTopLevelMenu.entries(), ([displayName, record]) => {
|
|
76
|
+
if ('typeName' in record && record.typeName) {
|
|
77
|
+
const { typeName } = record;
|
|
78
|
+
return {
|
|
79
|
+
label: displayName || typeName,
|
|
80
|
+
icon: dataTypeName === typeName ? CheckIcon : undefined,
|
|
81
|
+
onClick: () => spreadsheetModel.setColumnType(columnNumber, typeName),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
else if ('subMenuItems' in record && record.subMenuItems) {
|
|
85
|
+
const { subMenuItems } = record;
|
|
86
|
+
return {
|
|
87
|
+
label: displayName,
|
|
88
|
+
icon: subMenuItems.some(i => i.typeName === dataTypeName)
|
|
89
|
+
? CheckIcon
|
|
90
|
+
: undefined,
|
|
91
|
+
subMenu: subMenuItems.map(({ typeName, displayName }) => ({
|
|
92
|
+
label: displayName,
|
|
93
|
+
icon: typeName === dataTypeName ? CheckIcon : undefined,
|
|
94
|
+
onClick: () => spreadsheetModel.setColumnType(columnNumber, typeName),
|
|
95
|
+
})),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
}).filter(Boolean),
|
|
102
|
+
},
|
|
103
|
+
];
|
|
104
|
+
// don't display the filter item if this data type doesn't have filtering
|
|
105
|
+
// implemented
|
|
106
|
+
if (dataType === null || dataType === void 0 ? void 0 : dataType.hasFilter) {
|
|
107
|
+
menuItems.push({
|
|
108
|
+
label: 'Create filter',
|
|
109
|
+
icon: FilterListIcon,
|
|
110
|
+
onClick: () => viewModel.filterControls.addBlankColumnFilter(columnNumber),
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
return (React.createElement(Menu, { anchorEl: currentColumnMenu === null || currentColumnMenu === void 0 ? void 0 : currentColumnMenu.anchorEl, open: Boolean(currentColumnMenu), onMenuItemClick: (_event, callback) => {
|
|
114
|
+
callback();
|
|
115
|
+
columnMenuClose();
|
|
116
|
+
}, onClose: columnMenuClose, menuItems: menuItems, anchorOrigin: {
|
|
117
|
+
vertical: 'bottom',
|
|
118
|
+
horizontal: 'right',
|
|
119
|
+
} }));
|
|
120
|
+
});
|
|
121
|
+
export default ColumnMenu;
|
|
122
|
+
//# sourceMappingURL=ColumnMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColumnMenu.js","sourceRoot":"","sources":["../../../src/SpreadsheetView/components/ColumnMenu.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Instance } from 'mobx-state-tree';
|
|
3
|
+
import SpreadsheetStateModel from '../models/Spreadsheet';
|
|
4
|
+
import RowStateModel from '../models/Row';
|
|
5
|
+
type SpreadsheetModel = Instance<typeof SpreadsheetStateModel>;
|
|
6
|
+
type RowModel = Instance<typeof RowStateModel>;
|
|
7
|
+
declare const DataRow: ({ rowModel, rowNumber, spreadsheetModel, }: {
|
|
8
|
+
rowModel: RowModel;
|
|
9
|
+
rowNumber: string;
|
|
10
|
+
spreadsheetModel: SpreadsheetModel;
|
|
11
|
+
}) => React.JSX.Element;
|
|
12
|
+
export default DataRow;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Checkbox, IconButton, FormControlLabel } from '@mui/material';
|
|
3
|
+
import { observer } from 'mobx-react';
|
|
4
|
+
import { indigo } from '@mui/material/colors';
|
|
5
|
+
import { makeStyles } from 'tss-react/mui';
|
|
6
|
+
// icons
|
|
7
|
+
import ArrowDropDown from '@mui/icons-material/ArrowDropDown';
|
|
8
|
+
import CellData from './CellData';
|
|
9
|
+
const useStyles = makeStyles()(theme => ({
|
|
10
|
+
rowNumCell: {
|
|
11
|
+
textAlign: 'left',
|
|
12
|
+
border: `1px solid ${theme.palette.action.disabledBackground}`,
|
|
13
|
+
position: 'relative',
|
|
14
|
+
padding: '0 2px 0 0',
|
|
15
|
+
whiteSpace: 'nowrap',
|
|
16
|
+
userSelect: 'none',
|
|
17
|
+
},
|
|
18
|
+
rowNumber: {
|
|
19
|
+
fontWeight: 'normal',
|
|
20
|
+
display: 'inline-block',
|
|
21
|
+
flex: 'none',
|
|
22
|
+
paddingRight: '20px',
|
|
23
|
+
margin: 0,
|
|
24
|
+
whiteSpace: 'nowrap',
|
|
25
|
+
},
|
|
26
|
+
rowMenuButton: {
|
|
27
|
+
padding: 0,
|
|
28
|
+
margin: 0,
|
|
29
|
+
position: 'absolute',
|
|
30
|
+
right: 0,
|
|
31
|
+
display: 'inline-block',
|
|
32
|
+
whiteSpace: 'nowrap',
|
|
33
|
+
flex: 'none',
|
|
34
|
+
},
|
|
35
|
+
rowMenuButtonIcon: {},
|
|
36
|
+
rowSelector: {
|
|
37
|
+
position: 'relative',
|
|
38
|
+
top: '-2px',
|
|
39
|
+
margin: 0,
|
|
40
|
+
padding: '0 0.2rem',
|
|
41
|
+
},
|
|
42
|
+
dataRowSelected: {
|
|
43
|
+
background: indigo[100],
|
|
44
|
+
'& th': {
|
|
45
|
+
background: indigo[100],
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
}));
|
|
49
|
+
const DataRow = observer(function ({ rowModel, rowNumber, spreadsheetModel, }) {
|
|
50
|
+
const { classes } = useStyles();
|
|
51
|
+
const { hideRowSelection, columnDisplayOrder } = spreadsheetModel;
|
|
52
|
+
let rowClass = '';
|
|
53
|
+
if (rowModel.isSelected) {
|
|
54
|
+
rowClass += `${classes.dataRowSelected}`;
|
|
55
|
+
}
|
|
56
|
+
function labelClick(evt) {
|
|
57
|
+
rowModel.toggleSelect();
|
|
58
|
+
evt.stopPropagation();
|
|
59
|
+
evt.preventDefault();
|
|
60
|
+
}
|
|
61
|
+
return (React.createElement("tr", { className: rowClass },
|
|
62
|
+
React.createElement("td", { className: classes.rowNumCell, onClick: labelClick },
|
|
63
|
+
hideRowSelection ? (React.createElement(FormControlLabel, { className: classes.rowNumber, control: React.createElement(Checkbox, { className: classes.rowSelector, checked: rowModel.isSelected, onClick: labelClick }), label: rowModel.id })) : null,
|
|
64
|
+
React.createElement(IconButton, { className: classes.rowMenuButton, onClick: event => {
|
|
65
|
+
spreadsheetModel.setRowMenuPosition({
|
|
66
|
+
anchorEl: event.currentTarget,
|
|
67
|
+
rowNumber,
|
|
68
|
+
});
|
|
69
|
+
event.preventDefault();
|
|
70
|
+
event.stopPropagation();
|
|
71
|
+
} },
|
|
72
|
+
React.createElement(ArrowDropDown, { className: classes.rowMenuButtonIcon }))),
|
|
73
|
+
columnDisplayOrder.map(colNumber => (React.createElement("td", { key: colNumber },
|
|
74
|
+
React.createElement(CellData, { cell: rowModel.cellsWithDerived[colNumber], spreadsheetModel: spreadsheetModel, columnNumber: colNumber }))))));
|
|
75
|
+
});
|
|
76
|
+
export default DataRow;
|
|
77
|
+
//# sourceMappingURL=DataRow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataRow.js","sourceRoot":"","sources":["../../../src/SpreadsheetView/components/DataRow.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Instance } from 'mobx-state-tree';
|
|
3
|
+
import SpreadsheetStateModel from '../models/Spreadsheet';
|
|
4
|
+
type SpreadsheetModel = Instance<typeof SpreadsheetStateModel>;
|
|
5
|
+
declare const DataTable: ({ model, page, rowsPerPage, }: {
|
|
6
|
+
model: SpreadsheetModel;
|
|
7
|
+
page: number;
|
|
8
|
+
rowsPerPage: number;
|
|
9
|
+
}) => React.JSX.Element;
|
|
10
|
+
export default DataTable;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
3
|
+
import { getParent } from 'mobx-state-tree';
|
|
4
|
+
import { makeStyles } from 'tss-react/mui';
|
|
5
|
+
import RowMenu from './RowMenu';
|
|
6
|
+
import DataRow from './DataRow';
|
|
7
|
+
import DataTableHeader from './DataTableHeader';
|
|
8
|
+
const useStyles = makeStyles()(theme => ({
|
|
9
|
+
dataTable: {
|
|
10
|
+
borderCollapse: 'collapse',
|
|
11
|
+
'& td': {
|
|
12
|
+
border: `1px solid ${theme.palette.action.disabledBackground}`,
|
|
13
|
+
padding: '0.2rem',
|
|
14
|
+
maxWidth: '50em',
|
|
15
|
+
overflow: 'hidden',
|
|
16
|
+
textOverflow: 'ellipsis',
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
emptyMessage: {
|
|
20
|
+
captionSide: 'bottom',
|
|
21
|
+
},
|
|
22
|
+
}));
|
|
23
|
+
const DataTableBody = observer(function ({ rows, spreadsheetModel, page, rowsPerPage, }) {
|
|
24
|
+
return (React.createElement("tbody", null, rows.slice(rowsPerPage * page, rowsPerPage * (page + 1)).map(row => (React.createElement(DataRow, { key: row.id, rowNumber: row.id, spreadsheetModel: spreadsheetModel, rowModel: row })))));
|
|
25
|
+
});
|
|
26
|
+
const DataTable = observer(function ({ model, page, rowsPerPage, }) {
|
|
27
|
+
const { rowSet } = model;
|
|
28
|
+
const { classes } = useStyles();
|
|
29
|
+
const rows = rowSet.sortedFilteredRows;
|
|
30
|
+
return (React.createElement(React.Fragment, null,
|
|
31
|
+
React.createElement(RowMenu, { viewModel: getParent(model), spreadsheetModel: model }),
|
|
32
|
+
React.createElement("table", { className: classes.dataTable },
|
|
33
|
+
React.createElement(DataTableHeader, { model: model }),
|
|
34
|
+
React.createElement(DataTableBody, { rows: rows, spreadsheetModel: model, page: page, rowsPerPage: rowsPerPage }),
|
|
35
|
+
!rows.length ? (React.createElement("caption", { className: classes.emptyMessage }, rowSet.count ? 'no rows match criteria' : 'no rows present')) : null)));
|
|
36
|
+
});
|
|
37
|
+
export default DataTable;
|
|
38
|
+
//# sourceMappingURL=DataTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataTable.js","sourceRoot":"","sources":["../../../src/SpreadsheetView/components/DataTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,SAAS,EAAY,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAK1C,OAAO,OAAO,MAAM,WAAW,CAAA;AAC/B,OAAO,OAAO,MAAM,WAAW,CAAA;AAC/B,OAAO,eAAe,MAAM,mBAAmB,CAAA;AAK/C,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvC,SAAS,EAAE;QACT,cAAc,EAAE,UAAU;QAC1B,MAAM,EAAE;YACN,MAAM,EAAE,aAAa,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE;YAC9D,OAAO,EAAE,QAAQ;YACjB,QAAQ,EAAE,MAAM;YAChB,QAAQ,EAAE,QAAQ;YAClB,YAAY,EAAE,UAAU;SACzB;KACF;IAED,YAAY,EAAE;QACZ,WAAW,EAAE,QAAQ;KACtB;CACF,CAAC,CAAC,CAAA;AAEH,MAAM,aAAa,GAAG,QAAQ,CAAC,UAAU,EACvC,IAAI,EACJ,gBAAgB,EAChB,IAAI,EACJ,WAAW,GAMZ;IACC,OAAO,CACL,mCACG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,EAAE,WAAW,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CACnE,oBAAC,OAAO,IACN,GAAG,EAAE,GAAG,CAAC,EAAE,EACX,SAAS,EAAE,GAAG,CAAC,EAAE,EACjB,gBAAgB,EAAE,gBAAgB,EAClC,QAAQ,EAAE,GAAG,GACb,CACH,CAAC,CACI,CACT,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,EACnC,KAAK,EACL,IAAI,EACJ,WAAW,GAKZ;IACC,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;IACxB,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,kBAAkB,CAAA;IACtC,OAAO,CACL;QACE,oBAAC,OAAO,IAAC,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,gBAAgB,EAAE,KAAK,GAAI;QACjE,+BAAO,SAAS,EAAE,OAAO,CAAC,SAAS;YACjC,oBAAC,eAAe,IAAC,KAAK,EAAE,KAAK,GAAI;YACjC,oBAAC,aAAa,IACZ,IAAI,EAAE,IAAI,EACV,gBAAgB,EAAE,KAAK,EACvB,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,WAAW,GACxB;YACD,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CACd,iCAAS,SAAS,EAAE,OAAO,CAAC,YAAY,IACrC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,iBAAiB,CACpD,CACX,CAAC,CAAC,CAAC,IAAI,CACF,CACP,CACJ,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,SAAS,CAAA"}
|
|
@@ -0,0 +1,74 @@
|
|
|
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
|
+
// icons
|
|
7
|
+
import CropFreeIcon from '@mui/icons-material/CropFree';
|
|
8
|
+
import ArrowDropDown from '@mui/icons-material/ArrowDropDown';
|
|
9
|
+
import ColumnMenu from './ColumnMenu';
|
|
10
|
+
import SortIndicator from './SortIndicator';
|
|
11
|
+
import { numToColName } from './util';
|
|
12
|
+
const useStyles = makeStyles()(theme => ({
|
|
13
|
+
columnHead: {
|
|
14
|
+
fontWeight: 'normal',
|
|
15
|
+
background: theme.palette.mode === 'dark' ? '#333' : '#eee',
|
|
16
|
+
position: 'sticky',
|
|
17
|
+
top: 0,
|
|
18
|
+
zIndex: 2,
|
|
19
|
+
whiteSpace: 'nowrap',
|
|
20
|
+
},
|
|
21
|
+
columnButtonContainer: {
|
|
22
|
+
display: 'none',
|
|
23
|
+
position: 'absolute',
|
|
24
|
+
right: 0,
|
|
25
|
+
top: 0,
|
|
26
|
+
background: theme.palette.background.paper,
|
|
27
|
+
height: '100%',
|
|
28
|
+
},
|
|
29
|
+
topLeftCorner: {
|
|
30
|
+
background: theme.palette.mode === 'dark' ? '#333' : '#eee',
|
|
31
|
+
zIndex: 2,
|
|
32
|
+
position: 'sticky',
|
|
33
|
+
top: 0,
|
|
34
|
+
minWidth: theme.spacing(2),
|
|
35
|
+
textAlign: 'left',
|
|
36
|
+
},
|
|
37
|
+
}));
|
|
38
|
+
const DataTableHeader = observer(function ({ model, }) {
|
|
39
|
+
const { classes } = useStyles();
|
|
40
|
+
const { columnDisplayOrder, columns, hasColumnNames, rowSet } = model;
|
|
41
|
+
const [currentColumnMenu, setColumnMenu] = useState();
|
|
42
|
+
const [currentHoveredColumn, setHoveredColumn] = useState();
|
|
43
|
+
return (React.createElement(React.Fragment, null,
|
|
44
|
+
React.createElement("thead", null,
|
|
45
|
+
React.createElement("tr", null,
|
|
46
|
+
React.createElement("th", { className: classes.topLeftCorner },
|
|
47
|
+
React.createElement(Tooltip, { title: "Unselect all", placement: "right" },
|
|
48
|
+
React.createElement("span", null,
|
|
49
|
+
React.createElement(IconButton, { onClick: () => model.unselectAll(), disabled: !rowSet.selectedCount },
|
|
50
|
+
React.createElement(CropFreeIcon, null))))),
|
|
51
|
+
columnDisplayOrder.map(colNumber => {
|
|
52
|
+
var _a;
|
|
53
|
+
return (React.createElement("th", { className: classes.columnHead, key: colNumber, onMouseOver: () => setHoveredColumn(colNumber), onMouseOut: () => setHoveredColumn(undefined) },
|
|
54
|
+
React.createElement(SortIndicator, { model: model, columnNumber: colNumber }),
|
|
55
|
+
(hasColumnNames && ((_a = columns[colNumber]) === null || _a === void 0 ? void 0 : _a.name)) ||
|
|
56
|
+
numToColName(colNumber),
|
|
57
|
+
React.createElement("div", { className: classes.columnButtonContainer, style: {
|
|
58
|
+
display: currentHoveredColumn === colNumber ||
|
|
59
|
+
(currentColumnMenu === null || currentColumnMenu === void 0 ? void 0 : currentColumnMenu.colNumber) === colNumber
|
|
60
|
+
? 'block'
|
|
61
|
+
: 'none',
|
|
62
|
+
} },
|
|
63
|
+
React.createElement(IconButton, { onClick: evt => {
|
|
64
|
+
setColumnMenu({
|
|
65
|
+
colNumber,
|
|
66
|
+
anchorEl: evt.currentTarget,
|
|
67
|
+
});
|
|
68
|
+
} },
|
|
69
|
+
React.createElement(ArrowDropDown, null)))));
|
|
70
|
+
}))),
|
|
71
|
+
React.createElement(ColumnMenu, { viewModel: getParent(model), spreadsheetModel: model, currentColumnMenu: currentColumnMenu, setColumnMenu: setColumnMenu })));
|
|
72
|
+
});
|
|
73
|
+
export default DataTableHeader;
|
|
74
|
+
//# sourceMappingURL=DataTableHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataTableHeader.js","sourceRoot":"","sources":["../../../src/SpreadsheetView/components/DataTableHeader.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import React, { useState, useEffect } from 'react';
|
|
2
|
+
import { IconButton, InputAdornment, TextField } from '@mui/material';
|
|
3
|
+
import ClearIcon from '@mui/icons-material/Clear';
|
|
4
|
+
import FilterIcon from '@mui/icons-material/FilterList';
|
|
5
|
+
import { observer } from 'mobx-react';
|
|
6
|
+
import { makeStyles } from 'tss-react/mui';
|
|
7
|
+
import { useDebounce } from '@jbrowse/core/util';
|
|
8
|
+
const useStyles = makeStyles()({
|
|
9
|
+
textFilterControlEndAdornment: {
|
|
10
|
+
marginRight: '-18px',
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
const TextFilter = observer(function ({ textFilter, }) {
|
|
14
|
+
const { classes } = useStyles();
|
|
15
|
+
// this paragraph is silliness to debounce the text filter input
|
|
16
|
+
const [textFilterValue, setTextFilterValue] = useState(textFilter.stringToFind);
|
|
17
|
+
const debouncedTextFilter = useDebounce(textFilterValue, 500);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
textFilter.setString(debouncedTextFilter);
|
|
20
|
+
}, [debouncedTextFilter, textFilter]);
|
|
21
|
+
return (React.createElement("div", null,
|
|
22
|
+
React.createElement(TextField, { label: "text filter", value: textFilterValue, onChange: evt => setTextFilterValue(evt.target.value), variant: "outlined", InputProps: {
|
|
23
|
+
startAdornment: (React.createElement(InputAdornment, { position: "start" },
|
|
24
|
+
React.createElement(FilterIcon, null))),
|
|
25
|
+
endAdornment: (React.createElement(InputAdornment, { className: classes.textFilterControlEndAdornment, position: "end" },
|
|
26
|
+
React.createElement(IconButton, { "aria-label": "clear filter", onClick: () => setTextFilterValue('') },
|
|
27
|
+
React.createElement(ClearIcon, null)))),
|
|
28
|
+
} })));
|
|
29
|
+
});
|
|
30
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
31
|
+
const GlobalFilterControls = observer(({ model }) => {
|
|
32
|
+
const textFilter = model.filterControls.rowFullText;
|
|
33
|
+
return React.createElement(TextFilter, { textFilter: textFilter });
|
|
34
|
+
});
|
|
35
|
+
export default GlobalFilterControls;
|
|
36
|
+
//# sourceMappingURL=GlobalFilterControls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GlobalFilterControls.js","sourceRoot":"","sources":["../../../src/SpreadsheetView/components/GlobalFilterControls.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAElD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,SAAS,MAAM,2BAA2B,CAAA;AACjD,OAAO,UAAU,MAAM,gCAAgC,CAAA;AAEvD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;IAC7B,6BAA6B,EAAE;QAC7B,WAAW,EAAE,OAAO;KACrB;CACF,CAAC,CAAA;AAEF,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,EACpC,UAAU,GAGX;IACC,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,gEAAgE;IAChE,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CACpD,UAAU,CAAC,YAAY,CACxB,CAAA;IACD,MAAM,mBAAmB,GAAG,WAAW,CAAC,eAAe,EAAE,GAAG,CAAC,CAAA;IAC7D,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAA;IAC3C,CAAC,EAAE,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC,CAAA;IAErC,OAAO,CACL;QACE,oBAAC,SAAS,IACR,KAAK,EAAC,aAAa,EACnB,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EACrD,OAAO,EAAC,UAAU,EAClB,UAAU,EAAE;gBACV,cAAc,EAAE,CACd,oBAAC,cAAc,IAAC,QAAQ,EAAC,OAAO;oBAC9B,oBAAC,UAAU,OAAG,CACC,CAClB;gBACD,YAAY,EAAE,CACZ,oBAAC,cAAc,IACb,SAAS,EAAE,OAAO,CAAC,6BAA6B,EAChD,QAAQ,EAAC,KAAK;oBAEd,oBAAC,UAAU,kBACE,cAAc,EACzB,OAAO,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC;wBAErC,oBAAC,SAAS,OAAG,CACF,CACE,CAClB;aACF,GACD,CACE,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,8DAA8D;AAC9D,MAAM,oBAAoB,GAAG,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAkB,EAAE,EAAE;IAClE,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,WAAW,CAAA;IACnD,OAAO,oBAAC,UAAU,IAAC,UAAU,EAAE,UAAU,GAAI,CAAA;AAC/C,CAAC,CAAC,CAAA;AAEF,eAAe,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { Button, Checkbox, FormControl, FormGroup, FormLabel, FormControlLabel, RadioGroup, Radio, } from '@mui/material';
|
|
3
|
+
import { observer } from 'mobx-react';
|
|
4
|
+
import { getRoot } from 'mobx-state-tree';
|
|
5
|
+
import { getSession } from '@jbrowse/core/util';
|
|
6
|
+
import { FileSelector, ErrorMessage, AssemblySelector } from '@jbrowse/core/ui';
|
|
7
|
+
import NumberEditor from './NumberEditor';
|
|
8
|
+
import { makeStyles } from 'tss-react/mui';
|
|
9
|
+
const useStyles = makeStyles()({
|
|
10
|
+
container: {
|
|
11
|
+
margin: '0 auto',
|
|
12
|
+
maxWidth: '25em',
|
|
13
|
+
padding: 20,
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
const ImportWizard = observer(({ model }) => {
|
|
17
|
+
var _a;
|
|
18
|
+
const session = getSession(model);
|
|
19
|
+
const { classes } = useStyles();
|
|
20
|
+
const { assemblyNames, assemblyManager } = session;
|
|
21
|
+
const { fileType, canCancel, fileSource, isReadyToOpen, fileTypes, hasColumnNameLine, error, } = model;
|
|
22
|
+
const [selected, setSelected] = useState(assemblyNames[0]);
|
|
23
|
+
const err = ((_a = assemblyManager.get(selected)) === null || _a === void 0 ? void 0 : _a.error) || error;
|
|
24
|
+
const showRowControls = fileType === 'CSV' || fileType === 'TSV';
|
|
25
|
+
const rootModel = getRoot(model);
|
|
26
|
+
return (React.createElement("div", { className: classes.container },
|
|
27
|
+
err ? React.createElement(ErrorMessage, { error: err }) : null,
|
|
28
|
+
React.createElement("div", null,
|
|
29
|
+
React.createElement(FormControl, { component: "fieldset" },
|
|
30
|
+
React.createElement(FormLabel, { component: "legend" }, "Tabular file"),
|
|
31
|
+
React.createElement(FormGroup, null,
|
|
32
|
+
React.createElement(FileSelector, { location: fileSource, setLocation: arg => model.setFileSource(arg), rootModel: rootModel })))),
|
|
33
|
+
React.createElement("div", null,
|
|
34
|
+
React.createElement(FormControl, { component: "fieldset" },
|
|
35
|
+
React.createElement(FormLabel, { component: "legend" }, "File Type"),
|
|
36
|
+
React.createElement(RadioGroup, { row: true, "aria-label": "file type", name: "type", value: fileType }, fileTypes.map(fileTypeName => (React.createElement(FormControlLabel, { key: fileTypeName, checked: fileType === fileTypeName, value: fileTypeName, onClick: () => model.setFileType(fileTypeName), control: React.createElement(Radio, null), label: fileTypeName })))))),
|
|
37
|
+
showRowControls ? (React.createElement("div", null,
|
|
38
|
+
React.createElement(FormControl, { component: "fieldset" },
|
|
39
|
+
React.createElement(FormLabel, { component: "legend" }, "Column Names"),
|
|
40
|
+
React.createElement(FormControlLabel, { disabled: !showRowControls, label: "has column names on line", labelPlacement: "end", control: React.createElement(Checkbox, { checked: hasColumnNameLine, onClick: () => model.toggleHasColumnNameLine() }) }),
|
|
41
|
+
React.createElement(NumberEditor, { model: model, disabled: !showRowControls || !hasColumnNameLine, modelPropName: "columnNameLineNumber", modelSetterName: "setColumnNameLineNumber" })))) : null,
|
|
42
|
+
React.createElement("div", null,
|
|
43
|
+
React.createElement(AssemblySelector, { session: session, selected: selected, onChange: val => setSelected(val) })),
|
|
44
|
+
React.createElement("div", null,
|
|
45
|
+
canCancel ? (React.createElement(Button, { variant: "contained", color: "secondary", onClick: () => model.cancelButton(), disabled: !canCancel }, "Cancel")) : null,
|
|
46
|
+
' ',
|
|
47
|
+
React.createElement(Button, { disabled: !isReadyToOpen || !!err, variant: "contained", "data-testid": "open_spreadsheet", color: "primary", onClick: () => {
|
|
48
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
49
|
+
model.import(selected);
|
|
50
|
+
} }, "Open"))));
|
|
51
|
+
});
|
|
52
|
+
export default ImportWizard;
|
|
53
|
+
//# sourceMappingURL=ImportWizard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImportWizard.js","sourceRoot":"","sources":["../../../src/SpreadsheetView/components/ImportWizard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ImportWizardModel } from '../models/ImportWizard';
|
|
3
|
+
declare const _default: ({ model, disabled, modelPropName, modelSetterName, }: {
|
|
4
|
+
model: ImportWizardModel;
|
|
5
|
+
disabled: boolean;
|
|
6
|
+
modelPropName: string;
|
|
7
|
+
modelSetterName: string;
|
|
8
|
+
}) => React.JSX.Element;
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,29 @@
|
|
|
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
|
+
const useStyles = makeStyles()({
|
|
6
|
+
textField: {
|
|
7
|
+
width: '2rem',
|
|
8
|
+
verticalAlign: 'baseline',
|
|
9
|
+
},
|
|
10
|
+
});
|
|
11
|
+
export default observer(function ({ model, disabled, modelPropName, modelSetterName, }) {
|
|
12
|
+
// @ts-expect-error
|
|
13
|
+
const [val, setVal] = useState(model[modelPropName]);
|
|
14
|
+
const { classes } = useStyles();
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
const num = Number.parseInt(val, 10);
|
|
17
|
+
if (!Number.isNaN(num)) {
|
|
18
|
+
if (num > 0) {
|
|
19
|
+
// @ts-expect-error
|
|
20
|
+
model[modelSetterName](num);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
setVal(1);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}, [model, modelSetterName, val]);
|
|
27
|
+
return (React.createElement(TextField, { value: val, disabled: disabled, type: "number", onChange: evt => setVal(evt.target.value), className: classes.textField }));
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=NumberEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NumberEditor.js","sourceRoot":"","sources":["../../../src/SpreadsheetView/components/NumberEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAKrC,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;IAC7B,SAAS,EAAE;QACT,KAAK,EAAE,MAAM;QACb,aAAa,EAAE,UAAU;KAC1B;CACF,CAAC,CAAA;AAEF,eAAe,QAAQ,CAAC,UAAU,EAChC,KAAK,EACL,QAAQ,EACR,aAAa,EACb,eAAe,GAMhB;IACC,mBAAmB;IACnB,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAA;IACpD,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;QACpC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YACtB,IAAI,GAAG,GAAG,CAAC,EAAE;gBACX,mBAAmB;gBACnB,KAAK,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAA;aAC5B;iBAAM;gBACL,MAAM,CAAC,CAAC,CAAC,CAAA;aACV;SACF;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC,CAAA;IACjC,OAAO,CACL,oBAAC,SAAS,IACR,KAAK,EAAE,GAAG,EACV,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,SAAS,EAAE,OAAO,CAAC,SAAS,GAC5B,CACH,CAAA;AACH,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Instance } from 'mobx-state-tree';
|
|
3
|
+
import SpreadsheetStateModel from '../models/Spreadsheet';
|
|
4
|
+
type SpreadsheetModel = Instance<typeof SpreadsheetStateModel>;
|
|
5
|
+
declare const RowCountMessage: ({ spreadsheet, }: {
|
|
6
|
+
spreadsheet: SpreadsheetModel;
|
|
7
|
+
}) => React.JSX.Element | null;
|
|
8
|
+
export default RowCountMessage;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
3
|
+
const RowCountMessage = observer(function ({ spreadsheet, }) {
|
|
4
|
+
if (spreadsheet.rowSet.isLoaded) {
|
|
5
|
+
const { passingFiltersCount, count, selectedCount, selectedAndPassingFiltersCount, } = spreadsheet.rowSet;
|
|
6
|
+
let rowMessage;
|
|
7
|
+
if (passingFiltersCount !== count) {
|
|
8
|
+
rowMessage = `${spreadsheet.rowSet.passingFiltersCount} rows of ${spreadsheet.rowSet.count} total`;
|
|
9
|
+
if (selectedCount) {
|
|
10
|
+
rowMessage += `, ${selectedAndPassingFiltersCount} selected`;
|
|
11
|
+
const selectedAndNotPassingFiltersCount = selectedCount - selectedAndPassingFiltersCount;
|
|
12
|
+
if (selectedAndNotPassingFiltersCount) {
|
|
13
|
+
rowMessage += ` (${selectedAndNotPassingFiltersCount} selected rows do not pass filters)`;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
rowMessage = `${spreadsheet.rowSet.count} rows`;
|
|
19
|
+
if (selectedCount) {
|
|
20
|
+
rowMessage += `, ${selectedCount} selected`;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return React.createElement(React.Fragment, null, rowMessage);
|
|
24
|
+
}
|
|
25
|
+
return null;
|
|
26
|
+
});
|
|
27
|
+
export default RowCountMessage;
|
|
28
|
+
//# sourceMappingURL=RowCountMessage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RowCountMessage.js","sourceRoot":"","sources":["../../../src/SpreadsheetView/components/RowCountMessage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAQrC,MAAM,eAAe,GAAG,QAAQ,CAAC,UAAU,EACzC,WAAW,GAGZ;IACC,IAAI,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE;QAC/B,MAAM,EACJ,mBAAmB,EACnB,KAAK,EACL,aAAa,EACb,8BAA8B,GAC/B,GAAG,WAAW,CAAC,MAAM,CAAA;QAEtB,IAAI,UAAU,CAAA;QACd,IAAI,mBAAmB,KAAK,KAAK,EAAE;YACjC,UAAU,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,mBAAmB,YAAY,WAAW,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAA;YAClG,IAAI,aAAa,EAAE;gBACjB,UAAU,IAAI,KAAK,8BAA8B,WAAW,CAAA;gBAC5D,MAAM,iCAAiC,GACrC,aAAa,GAAG,8BAA8B,CAAA;gBAChD,IAAI,iCAAiC,EAAE;oBACrC,UAAU,IAAI,KAAK,iCAAiC,qCAAqC,CAAA;iBAC1F;aACF;SACF;aAAM;YACL,UAAU,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,OAAO,CAAA;YAC/C,IAAI,aAAa,EAAE;gBACjB,UAAU,IAAI,KAAK,aAAa,WAAW,CAAA;aAC5C;SACF;QACD,OAAO,0CAAG,UAAU,CAAI,CAAA;KACzB;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAC,CAAA;AACF,eAAe,eAAe,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Instance } from 'mobx-state-tree';
|
|
3
|
+
import SpreadsheetModel from '../models/Spreadsheet';
|
|
4
|
+
import ViewModel from '../models/SpreadsheetView';
|
|
5
|
+
declare const RowMenu: ({ viewModel, spreadsheetModel, }: {
|
|
6
|
+
viewModel: Instance<typeof ViewModel>;
|
|
7
|
+
spreadsheetModel: Instance<typeof SpreadsheetModel>;
|
|
8
|
+
}) => React.JSX.Element | null;
|
|
9
|
+
export default RowMenu;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
3
|
+
import { Menu } from '@jbrowse/core/ui';
|
|
4
|
+
const RowMenu = observer(function ({ viewModel, spreadsheetModel, }) {
|
|
5
|
+
var _a;
|
|
6
|
+
const currentRowMenu = spreadsheetModel.rowMenuPosition;
|
|
7
|
+
const { setRowMenuPosition } = spreadsheetModel;
|
|
8
|
+
const rowMenuClose = () => {
|
|
9
|
+
setRowMenuPosition(null);
|
|
10
|
+
};
|
|
11
|
+
const rowNumber = (_a = spreadsheetModel.rowMenuPosition) === null || _a === void 0 ? void 0 : _a.rowNumber;
|
|
12
|
+
if (rowNumber === undefined) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
const row = spreadsheetModel.rowSet.rows[+rowNumber - 1];
|
|
16
|
+
function handleMenuItemClick(_event, callback) {
|
|
17
|
+
callback(viewModel, spreadsheetModel, rowNumber, row);
|
|
18
|
+
rowMenuClose();
|
|
19
|
+
}
|
|
20
|
+
// got through and evaluate all the `disabled` callbacks of the menu items
|
|
21
|
+
const menuItems = viewModel.rowMenuItems.map(item => {
|
|
22
|
+
if (typeof item.disabled === 'function') {
|
|
23
|
+
const disabled = item.disabled(viewModel, spreadsheetModel, +rowNumber, row);
|
|
24
|
+
return { ...item, disabled };
|
|
25
|
+
}
|
|
26
|
+
return item;
|
|
27
|
+
});
|
|
28
|
+
return (React.createElement(Menu, { anchorEl: currentRowMenu && currentRowMenu.anchorEl, open: Boolean(currentRowMenu), onMenuItemClick: handleMenuItemClick, onClose: rowMenuClose, menuItems: menuItems, anchorOrigin: {
|
|
29
|
+
vertical: 'bottom',
|
|
30
|
+
horizontal: 'right',
|
|
31
|
+
} }));
|
|
32
|
+
});
|
|
33
|
+
export default RowMenu;
|
|
34
|
+
//# sourceMappingURL=RowMenu.js.map
|