diff --git a/packages/core/ui/ErrorMessageStackTraceDialog.tsx b/packages/core/ui/ErrorMessageStackTraceDialog.tsx index 37f41e6521..35d9adf99b 100644 --- a/packages/core/ui/ErrorMessageStackTraceDialog.tsx +++ b/packages/core/ui/ErrorMessageStackTraceDialog.tsx @@ -118,14 +118,14 @@ function stripMessage(trace: string, error: unknown) { } } -function Contents({ text, extra }: { text: string; extra: unknown }) { +function Contents({ text, extra }: { text: string; extra?: unknown }) { const err = encodeURIComponent( [ 'I got this error from JBrowse, here is the stack trace:\n', '```', text, '```', - `supporting data: ${extra}`, + extra ? `supporting data: ${extra}` : '', ].join('\n') + '\n', ) const githubLink = `https://github.com/GMOD/jbrowse-components/issues/new?labels=bug&title=JBrowse+issue&body=${err}` @@ -160,7 +160,7 @@ export default function ErrorMessageStackTraceDialog({ }: { onClose: () => void error: unknown - extra: unknown + extra?: unknown }) { const [mappedStackTrace, setMappedStackTrace] = useState() const [secondaryError, setSecondaryError] = useState() diff --git a/packages/core/ui/SnackbarModel.tsx b/packages/core/ui/SnackbarModel.tsx index be77e25cc9..1dc5b97824 100644 --- a/packages/core/ui/SnackbarModel.tsx +++ b/packages/core/ui/SnackbarModel.tsx @@ -5,6 +5,7 @@ import { IObservableArray, observable } from 'mobx' import { NotificationLevel, SnackAction } from '../util/types' // icons import Report from '@mui/icons-material/Report' +import { getSession } from '../util' // lazies const ErrorMessageStackTraceDialog = lazy( @@ -21,7 +22,11 @@ export interface SnackbarMessage { * #stateModel SnackbarModel * #category session */ -function makeExtension(snackbarMessages: IObservableArray) { +function makeExtension( + snackbarMessages: IObservableArray, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + self: any, +) { return { views: { /** @@ -47,7 +52,6 @@ function makeExtension(snackbarMessages: IObservableArray) { this.notify(errorMessage, 'error', { name: , onClick: () => { - // @ts-expect-error self.queueDialog((onClose: () => void) => [ ErrorMessageStackTraceDialog, { @@ -99,9 +103,9 @@ export default function addSnackbarToModel< ReturnType['actions'] & ReturnType['views'] > { - return tree.extend(() => { + return tree.extend(self => { const snackbarMessages = observable.array() - return makeExtension(snackbarMessages) + return makeExtension(snackbarMessages, self) }) } diff --git a/packages/core/util/types/index.ts b/packages/core/util/types/index.ts index 8c5e1f28e2..ba92ec7c4e 100644 --- a/packages/core/util/types/index.ts +++ b/packages/core/util/types/index.ts @@ -105,6 +105,7 @@ export interface AbstractSessionModel extends AbstractViewContainer { level?: NotificationLevel, action?: SnackAction, ) => void + notifyError: (message: string, error?: unknown, extra?: unknown) => void assemblyManager: AssemblyManager version: string getTrackActionMenuItems?: Function diff --git a/plugins/dotplot-view/src/DotplotReadVsRef/DotplotReadVsRef.ts b/plugins/dotplot-view/src/DotplotReadVsRef/DotplotReadVsRef.ts index 5156266a71..632fa68c8b 100644 --- a/plugins/dotplot-view/src/DotplotReadVsRef/DotplotReadVsRef.ts +++ b/plugins/dotplot-view/src/DotplotReadVsRef/DotplotReadVsRef.ts @@ -110,6 +110,6 @@ export function onClick(feature: Feature, self: LinearPileupDisplayModel) { }) } catch (e) { console.error(e) - session.notify(`${e}`, 'error') + session.notifyError(`${e}`, e) } } diff --git a/plugins/grid-bookmark/src/GridBookmarkWidget/components/BookmarkGrid.tsx b/plugins/grid-bookmark/src/GridBookmarkWidget/components/BookmarkGrid.tsx index e87b9fbd12..8548af5395 100644 --- a/plugins/grid-bookmark/src/GridBookmarkWidget/components/BookmarkGrid.tsx +++ b/plugins/grid-bookmark/src/GridBookmarkWidget/components/BookmarkGrid.tsx @@ -148,7 +148,7 @@ const BookmarkGrid = observer(function ({ model.updateBookmarkLabel(target, row.label) return row }} - onProcessRowUpdateError={e => session.notify(e.message, 'error')} + onProcessRowUpdateError={e => session.notifyError(`${e}`, e)} checkboxSelection onRowSelectionModelChange={newRowSelectionModel => { if (bookmarksWithValidAssemblies.length > 0) { diff --git a/plugins/grid-bookmark/src/GridBookmarkWidget/utils.ts b/plugins/grid-bookmark/src/GridBookmarkWidget/utils.ts index 5eb43f9dcd..19835801cc 100644 --- a/plugins/grid-bookmark/src/GridBookmarkWidget/utils.ts +++ b/plugins/grid-bookmark/src/GridBookmarkWidget/utils.ts @@ -41,7 +41,7 @@ export async function navToBookmark( await view.navToLocString(locString, assembly) } catch (e) { console.error(e) - session.notify(`${e}`, 'error') + session.notifyError(`${e}`, e) } } diff --git a/plugins/linear-genome-view/src/LaunchLinearGenomeView/index.ts b/plugins/linear-genome-view/src/LaunchLinearGenomeView/index.ts index e0f45cd016..7fb2a5884c 100644 --- a/plugins/linear-genome-view/src/LaunchLinearGenomeView/index.ts +++ b/plugins/linear-genome-view/src/LaunchLinearGenomeView/index.ts @@ -85,7 +85,7 @@ export default (pluginManager: PluginManager) => { ) } } catch (e) { - session.notify(`${e}`, 'error') + session.notifyError(`${e}`, e) throw e } }, diff --git a/plugins/linear-genome-view/src/LinearGenomeView/components/RefNameAutocomplete/index.tsx b/plugins/linear-genome-view/src/LinearGenomeView/components/RefNameAutocomplete/index.tsx index 91dda7ba74..42f6f22b93 100644 --- a/plugins/linear-genome-view/src/LinearGenomeView/components/RefNameAutocomplete/index.tsx +++ b/plugins/linear-genome-view/src/LinearGenomeView/components/RefNameAutocomplete/index.tsx @@ -48,8 +48,6 @@ const RefNameAutocomplete = observer(function ({ const { coarseVisibleLocStrings, hasDisplayedRegions } = model useEffect(() => { - let active = true - // eslint-disable-next-line @typescript-eslint/no-floating-promises ;(async () => { try { @@ -59,21 +57,13 @@ const RefNameAutocomplete = observer(function ({ setLoaded(false) const results = await fetchResults(debouncedSearch) - if (active) { - setLoaded(true) - setSearchOptions(getDeduplicatedResult(results)) - } + setLoaded(true) + setSearchOptions(getDeduplicatedResult(results)) } catch (e) { console.error(e) - if (active) { - session.notify(`${e}`, 'error') - } + session.notifyError(`${e}`, e) } })() - - return () => { - active = false - } }, [assemblyName, fetchResults, debouncedSearch, session, model]) const inputBoxVal = coarseVisibleLocStrings || value || '' diff --git a/plugins/linear-genome-view/src/LinearGenomeView/components/SearchResultsTable.tsx b/plugins/linear-genome-view/src/LinearGenomeView/components/SearchResultsTable.tsx index 60553e04b8..ec31deeccf 100644 --- a/plugins/linear-genome-view/src/LinearGenomeView/components/SearchResultsTable.tsx +++ b/plugins/linear-genome-view/src/LinearGenomeView/components/SearchResultsTable.tsx @@ -102,7 +102,7 @@ export default function SearchResultsTable({ } } catch (e) { console.error(e) - session.notify(`${e}`, 'error') + session.notifyError(`${e}`, e) } handleClose() }} diff --git a/products/jbrowse-react-linear-genome-view/src/createViewState.ts b/products/jbrowse-react-linear-genome-view/src/createViewState.ts index 2f48bccc71..9c8e0acb16 100644 --- a/products/jbrowse-react-linear-genome-view/src/createViewState.ts +++ b/products/jbrowse-react-linear-genome-view/src/createViewState.ts @@ -112,7 +112,7 @@ export default function createViewState(opts: ViewStateOptions) { assembly.name, ) } catch (e) { - session.notify(`${e}`, 'error') + session.notifyError(`${e}`, e) } })() }