Skip to content

Commit

Permalink
Use hamburger menu for bookmark options
Browse files Browse the repository at this point in the history
  • Loading branch information
cmdcolin committed Dec 13, 2023
1 parent 7b9366b commit 219b45a
Show file tree
Hide file tree
Showing 14 changed files with 257 additions and 323 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, { Suspense, lazy, useState } from 'react'
import React, { lazy, useState } from 'react'
import { observer } from 'mobx-react'
import { Link } from '@mui/material'
import { makeStyles } from 'tss-react/mui'
Expand All @@ -11,14 +11,15 @@ import {
} from '@jbrowse/core/util'
import { useResizeBar } from '@jbrowse/core/ui/useResizeBar'
import ResizeBar from '@jbrowse/core/ui/ResizeBar'

const ColorPicker = lazy(() => import('@jbrowse/core/ui/ColorPicker'))
import ColorPicker from '@jbrowse/core/ui/ColorPicker'

// locals
import { navToBookmark } from '../utils'
import { GridBookmarkModel, IExtendedLabeledRegionModel } from '../model'
import { GridBookmarkModel } from '../model'

const EditBookmarkLabelDialog = lazy(() => import('./EditBookmarkLabelDialog'))
const EditBookmarkLabelDialog = lazy(
() => import('./dialogs/EditBookmarkLabelDialog'),
)

const useStyles = makeStyles()(() => ({
link: {
Expand All @@ -37,7 +38,6 @@ const BookmarkGrid = observer(function ({
model: GridBookmarkModel
}) {
const { classes, cx } = useStyles()
const [dialogRow, setDialogRow] = useState<IExtendedLabeledRegionModel>()
const { ref, scrollLeft } = useResizeBar()
const {
bookmarks,
Expand All @@ -62,7 +62,7 @@ const BookmarkGrid = observer(function ({
})

const [widths, setWidths] = useState([
40,
50,
Math.max(
measureText('Bookmark link', 12) + 30,
measureGridWidth(rows.map(row => row.locString)),
Expand All @@ -79,96 +79,90 @@ const BookmarkGrid = observer(function ({
])

return (
<>
<div ref={ref}>
<ResizeBar
widths={widths}
setWidths={setWidths}
scrollLeft={scrollLeft}
/>
<DataGrid
autoHeight
density="compact"
rows={rows}
columns={[
{
...GRID_CHECKBOX_SELECTION_COL_DEF,
width: widths[0],
},
{
field: 'locString',
headerName: 'Bookmark link',
width: widths[1],
renderCell: ({ value, row }) => (
<Link
className={cx(classes.link, classes.cell)}
href="#"
onClick={async event => {
event.preventDefault()
const { views } = session
await navToBookmark(value, row.assemblyName, views, model)
}}
>
{value}
</Link>
),
},
{
field: 'label',
headerName: 'Label',
width: widths[2],
editable: true,
},
{
field: 'assemblyName',
headerName: 'Assembly',
width: widths[3],
},
{
field: 'highlight',
headerName: 'Highlight',
width: widths[4],
renderCell: ({ value, row }) => (
<ColorPicker
color={value || 'black'}
onChange={event => {
model.updateBookmarkHighlight(row, event)
}}
/>
),
},
]}
onCellDoubleClick={({ row }) => setDialogRow(row)}
processRowUpdate={row => {
const target = rows[row.id]
model.updateBookmarkLabel(target, row.label)
return row
}}
onProcessRowUpdateError={e => session.notify(e.message, 'error')}
checkboxSelection
onRowSelectionModelChange={newRowSelectionModel => {
if (bookmarksWithValidAssemblies.length > 0) {
model.setSelectedBookmarks(
newRowSelectionModel.map(value => ({
...rows[value as number],
})),
)
}
}}
rowSelectionModel={selectedBookmarks.map(r => r.id)}
disableRowSelectionOnClick
/>
</div>
{dialogRow ? (
<Suspense fallback={<React.Fragment />}>
<EditBookmarkLabelDialog
onClose={() => setDialogRow(undefined)}
model={model}
dialogRow={dialogRow}
/>
</Suspense>
) : null}
</>
<div ref={ref}>
<ResizeBar
widths={widths}
setWidths={setWidths}
scrollLeft={scrollLeft}
/>
<DataGrid
autoHeight
density="compact"
rows={rows}
columns={[
{
...GRID_CHECKBOX_SELECTION_COL_DEF,
width: widths[0],
},
{
field: 'locString',
headerName: 'Bookmark link',
width: widths[1],
renderCell: ({ value, row }) => (
<Link
className={cx(classes.link, classes.cell)}
href="#"
onClick={async event => {
event.preventDefault()
const { views } = session
await navToBookmark(value, row.assemblyName, views, model)
}}
>
{value}
</Link>
),
},
{
field: 'label',
headerName: 'Label',
width: widths[2],
editable: true,
},
{
field: 'assemblyName',
headerName: 'Assembly',
width: widths[3],
},
{
field: 'highlight',
headerName: 'Highlight',
width: widths[4],
renderCell: ({ value, row }) => (
<ColorPicker
color={value || 'black'}
onChange={event => {
model.updateBookmarkHighlight(row, event)
}}
/>
),
},
]}
onCellDoubleClick={({ row }) => {
getSession(model).queueDialog(onClose => [
EditBookmarkLabelDialog,
{ onClose, model, dialogRow: row },
])
}}
processRowUpdate={row => {
const target = rows[row.id]
model.updateBookmarkLabel(target, row.label)
return row
}}
onProcessRowUpdateError={e => session.notify(e.message, 'error')}
checkboxSelection
onRowSelectionModelChange={newRowSelectionModel => {
if (bookmarksWithValidAssemblies.length > 0) {
model.setSelectedBookmarks(
newRowSelectionModel.map(value => ({
...rows[value as number],
})),
)
}
}}
rowSelectionModel={selectedBookmarks.map(r => r.id)}
disableRowSelectionOnClick
/>
</div>
)
})

Expand Down

This file was deleted.

This file was deleted.

Loading

0 comments on commit 219b45a

Please sign in to comment.