Skip to content

Commit

Permalink
Use a more normal snackbar model mixin
Browse files Browse the repository at this point in the history
  • Loading branch information
cmdcolin committed Mar 13, 2024
1 parent ac99df7 commit 47cea56
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 69 deletions.
60 changes: 18 additions & 42 deletions packages/core/ui/SnackbarModel.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
import React, { lazy } from 'react'
import { IModelType, ModelProperties } from 'mobx-state-tree'
import { IObservableArray, observable } from 'mobx'
import { types } from 'mobx-state-tree'
import { observable } from 'mobx'

// locals
import { NotificationLevel, SnackAction } from '../util/types'

// icons
import Report from '@mui/icons-material/Report'

// lazies
// eslint-disable-next-line react-refresh/only-export-components

const ErrorMessageStackTraceDialog = lazy(
() => import('@jbrowse/core/ui/ErrorMessageStackTraceDialog'),
)
Expand All @@ -22,21 +24,13 @@ export interface SnackbarMessage {
* #stateModel SnackbarModel
* #category session
*/
function makeExtension(
snackbarMessages: IObservableArray<SnackbarMessage>,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
self: any,
) {
return {
views: {
/**
* #getter
*/
get snackbarMessages() {
return snackbarMessages
},
},
actions: {
export default function SnackbarModel() {
return types
.model({})
.volatile(() => ({
snackbarMessages: observable.array<SnackbarMessage>(),
}))
.actions(self => ({
/**
* #action
*/
Expand All @@ -52,6 +46,7 @@ function makeExtension(
this.notify(errorMessage, 'error', {
name: <Report />,
onClick: () => {
// @ts-expect-error
self.queueDialog((onClose: () => void) => [
ErrorMessageStackTraceDialog,
{
Expand All @@ -71,41 +66,22 @@ function makeExtension(
level?: NotificationLevel,
action?: SnackAction,
) {
return snackbarMessages.push({ message, level, action })
return self.snackbarMessages.push({ message, level, action })
},
/**
* #action
*/
popSnackbarMessage() {
return snackbarMessages.pop()
return self.snackbarMessages.pop()
},
/**
* #action
*/
removeSnackbarMessage(message: string) {
const element = snackbarMessages.find(f => f.message === message)
const element = self.snackbarMessages.find(f => f.message === message)
if (element) {
snackbarMessages.remove(element)
self.snackbarMessages.remove(element)
}
},
},
}
}

export default function addSnackbarToModel<
PROPS extends ModelProperties,
OTHERS,
>(
tree: IModelType<PROPS, OTHERS>,
): IModelType<
PROPS,
OTHERS &
ReturnType<typeof makeExtension>['actions'] &
ReturnType<typeof makeExtension>['views']
> {
return tree.extend(self => {
const snackbarMessages = observable.array<SnackbarMessage>()

return makeExtension(snackbarMessages, self)
})
}))
}
25 changes: 13 additions & 12 deletions packages/web-core/src/BaseWebSession/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import {
AnyConfiguration,
} from '@jbrowse/core/configuration'
import { AssemblyManager, JBrowsePlugin } from '@jbrowse/core/util/types'
import addSnackbarToModel from '@jbrowse/core/ui/SnackbarModel'
import { localStorageGetItem, localStorageSetItem } from '@jbrowse/core/util'
import { autorun } from 'mobx'
import {
Expand All @@ -22,15 +21,6 @@ import {
Instance,
} from 'mobx-state-tree'
import TextSearchManager from '@jbrowse/core/TextSearch/TextSearchManager'
import { BaseTrackConfig } from '@jbrowse/core/pluggableElementTypes'

// icons
import SettingsIcon from '@mui/icons-material/Settings'
import CopyIcon from '@mui/icons-material/FileCopy'
import DeleteIcon from '@mui/icons-material/Delete'
import InfoIcon from '@mui/icons-material/Info'

// locals
import PluginManager from '@jbrowse/core/PluginManager'
import {
DialogQueueSessionMixin,
Expand All @@ -45,11 +35,21 @@ import {
SessionAssembliesMixin,
TemporaryAssembliesMixin,
} from '@jbrowse/app-core'
import { BaseTrackConfig } from '@jbrowse/core/pluggableElementTypes'
import { BaseAssemblyConfigSchema } from '@jbrowse/core/assemblyManager'
import { BaseConnectionConfigModel } from '@jbrowse/core/pluggableElementTypes/models/baseConnectionConfig'
import SnackbarModel from '@jbrowse/core/ui/SnackbarModel'

// icons
import SettingsIcon from '@mui/icons-material/Settings'
import CopyIcon from '@mui/icons-material/FileCopy'
import DeleteIcon from '@mui/icons-material/Delete'
import InfoIcon from '@mui/icons-material/Info'

// locals
import { WebSessionConnectionsMixin } from '../SessionConnections'
import { BaseConnectionConfigModel } from '@jbrowse/core/pluggableElementTypes/models/baseConnectionConfig'

// lazies
const AboutDialog = lazy(() => import('./AboutDialog'))

/**
Expand Down Expand Up @@ -92,6 +92,7 @@ export function BaseWebSession({
TemporaryAssembliesMixin(pluginManager, assemblyConfigSchema),
WebSessionConnectionsMixin(pluginManager),
AppFocusMixin(),
SnackbarModel(),
),
)
.props({
Expand Down Expand Up @@ -420,7 +421,7 @@ export function BaseWebSession({
sessionModel,
) as typeof sessionModel

return types.snapshotProcessor(addSnackbarToModel(extendedSessionModel), {
return types.snapshotProcessor(extendedSessionModel, {
// @ts-expect-error
preProcessor(snapshot) {
if (snapshot) {
Expand Down
17 changes: 10 additions & 7 deletions products/jbrowse-desktop/src/sessionModel/index.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,7 @@
import { getConf, readConfObject } from '@jbrowse/core/configuration'
import addSnackbarToModel from '@jbrowse/core/ui/SnackbarModel'
import { types, Instance, getParent } from 'mobx-state-tree'
import PluginManager from '@jbrowse/core/PluginManager'

// icons
import { DesktopSessionTrackMenuMixin } from './TrackMenu'
import { BaseTrackConfig } from '@jbrowse/core/pluggableElementTypes'
import { DesktopRootModel } from '../rootModel'
import {
ConnectionManagementSessionMixin,
DialogQueueSessionMixin,
Expand All @@ -16,14 +11,21 @@ import {
ThemeManagerSessionMixin,
TracksManagerSessionMixin,
} from '@jbrowse/product-core'
import { DesktopSessionFactory } from './DesktopSession'
import {
AppFocusMixin,
SessionAssembliesMixin,
TemporaryAssembliesMixin,
} from '@jbrowse/app-core'
import { BaseAssemblyConfigSchema } from '@jbrowse/core/assemblyManager/assemblyConfigSchema'
import { AbstractSessionModel } from '@jbrowse/core/util'
import SnackbarModel from '@jbrowse/core/ui/SnackbarModel'

// icons
import { DesktopSessionTrackMenuMixin } from './TrackMenu'

// locals
import { DesktopRootModel } from '../rootModel'
import { DesktopSessionFactory } from './DesktopSession'

/**
* #stateModel JBrowseDesktopSessionModel
Expand Down Expand Up @@ -67,6 +69,7 @@ export default function sessionModelFactory({
TemporaryAssembliesMixin(pluginManager, assemblyConfigSchema),
DesktopSessionTrackMenuMixin(pluginManager),
AppFocusMixin(),
SnackbarModel(),
)
.views(self => ({
/**
Expand Down Expand Up @@ -150,7 +153,7 @@ export default function sessionModelFactory({
sessionModel,
) as typeof sessionModel

return types.snapshotProcessor(addSnackbarToModel(extendedSessionModel), {
return types.snapshotProcessor(extendedSessionModel, {
// @ts-expect-error
preProcessor(snapshot) {
if (snapshot) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ import { lazy } from 'react'
import { AbstractSessionModel } from '@jbrowse/core/util/types'
import { getParent, types, Instance } from 'mobx-state-tree'
import PluginManager from '@jbrowse/core/PluginManager'
import SnackbarModel from '@jbrowse/core/ui/SnackbarModel'
import { getConf } from '@jbrowse/core/configuration'
import InfoIcon from '@mui/icons-material/Info'
import addSnackbarToModel from '@jbrowse/core/ui/SnackbarModel'
import {
BaseSessionModel,
ConnectionManagementSessionMixin,
Expand All @@ -29,7 +29,7 @@ const AboutDialog = lazy(() => import('./AboutDialog'))
* - [SnackbarModel](../snackbarmodel)
*/
export default function sessionModelFactory(pluginManager: PluginManager) {
const model = types
return types
.compose(
'ReactCircularGenomeViewSession',
BaseSessionModel(pluginManager),
Expand All @@ -38,6 +38,7 @@ export default function sessionModelFactory(pluginManager: PluginManager) {
DialogQueueSessionMixin(pluginManager),
TracksManagerSessionMixin(pluginManager),
ReferenceManagementSessionMixin(pluginManager),
SnackbarModel(),
)
.props({
/**
Expand Down Expand Up @@ -143,8 +144,6 @@ export default function sessionModelFactory(pluginManager: PluginManager) {
]
},
}))

return addSnackbarToModel(model)
}

export type SessionStateModel = ReturnType<typeof sessionModelFactory>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import { lazy } from 'react'
import { AbstractSessionModel } from '@jbrowse/core/util/types'
import addSnackbarToModel from '@jbrowse/core/ui/SnackbarModel'
import SnackbarModel from '@jbrowse/core/ui/SnackbarModel'
import { getConf } from '@jbrowse/core/configuration'
import { cast, getParent, types, Instance } from 'mobx-state-tree'
import PluginManager from '@jbrowse/core/PluginManager'
Expand Down Expand Up @@ -34,7 +34,7 @@ const AboutDialog = lazy(() => import('./AboutDialog'))
function x() {} // eslint-disable-line @typescript-eslint/no-unused-vars

export default function sessionModelFactory(pluginManager: PluginManager) {
const model = types
return types
.compose(
'ReactLinearGenomeViewSession',
BaseSessionModel(pluginManager),
Expand All @@ -44,6 +44,7 @@ export default function sessionModelFactory(pluginManager: PluginManager) {
TracksManagerSessionMixin(pluginManager),
ReferenceManagementSessionMixin(pluginManager),
SessionTracksManagerSessionMixin(pluginManager),
SnackbarModel(),
)
.props({
/**
Expand Down Expand Up @@ -149,8 +150,6 @@ export default function sessionModelFactory(pluginManager: PluginManager) {
]
},
}))

return addSnackbarToModel(model)
}

export type SessionStateModel = ReturnType<typeof sessionModelFactory>
Expand Down

0 comments on commit 47cea56

Please sign in to comment.