JBrowse 2 · Linear Genome View examples

Custom error handling

createViewState throws on a config it cannot build.

View source — 46 lines
import { ErrorBanner } from '@jbrowse/core/ui'
import { useCreateOnce, useFinalUnmount } from '@jbrowse/core/util/hooks'
import {
  JBrowseLinearGenomeView,
  createViewState,
  destroyViewState,
} from '@jbrowse/react-linear-genome-view2'

import type { ViewModel } from '@jbrowse/react-linear-genome-view2'

export default function ErrorHandler() {
  const result = useCreateOnce<{ viewState: ViewModel } | { error: unknown }>(
    () => {
      try {
        return {
          viewState: createViewState({
            assembly: {
              name: 'volvox',
              uri: 'https://jbrowse.org/genomes/volvox/volvox.2bit',
            },
            tracks: [
              {
                type: 'BadTrack',
                notProperTrack: 'error',
                shouldHaveTrackIdAndStuff: 'test',
              },
            ],
            location: 'ctgA:1105..1221',
          }),
        }
      } catch (error) {
        return { error }
      }
    },
  )
  useFinalUnmount(() => {
    if ('viewState' in result) {
      destroyViewState(result.viewState)
    }
  })
  return 'error' in result ? (
    <ErrorBanner error={result.error} />
  ) : (
    <JBrowseLinearGenomeView viewState={result.viewState} />
  )
}