Skip to content

Commit

Permalink
Tracklist url
Browse files Browse the repository at this point in the history
  • Loading branch information
cmdcolin committed Feb 9, 2024
1 parent d629bc7 commit e50e726
Show file tree
Hide file tree
Showing 7 changed files with 246 additions and 222 deletions.
11 changes: 11 additions & 0 deletions plugins/linear-genome-view/src/LaunchLinearGenomeView/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,18 @@ export default (pluginManager: PluginManager) => {
assembly,
loc,
tracks = [],
tracklist,
nav,
}: {
session: AbstractSessionModel
assembly?: string
loc: string
tracks?: string[]
tracklist?: boolean
nav?: boolean
}) => {
try {
console.log({ nav })
const { assemblyManager } = session
const view = session.addView('LinearGenomeView', {}) as LGV

Expand Down Expand Up @@ -48,6 +53,12 @@ export default (pluginManager: PluginManager) => {
`Could not resolve identifiers: ${idsNotFound.join(',')}`,
)
}
if (tracklist) {
view.activateTrackSelector()
}
if (nav !== undefined) {
view.setHideHeader(nav)
}
} catch (e) {
session.notify(`${e}`, 'error')
throw e
Expand Down
6 changes: 0 additions & 6 deletions plugins/linear-genome-view/src/LinearGenomeView/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -572,12 +572,6 @@ test('can perform bpToPx in a way that makes sense on things that happen outside
expect(model.bpPerPx).toEqual(1)
expect(model.offsetPx).toEqual(100)

model.toggleHeader()
expect(model.hideHeader).toEqual(true)
model.toggleHeader()
model.toggleHeaderOverview()
expect(model.hideHeaderOverview).toEqual(true)
model.toggleHeaderOverview()
model.setError(new Error('pxToBp failed to map to a region'))
expect(`${model.error}`).toEqual('Error: pxToBp failed to map to a region')
})
Expand Down
32 changes: 17 additions & 15 deletions plugins/linear-genome-view/src/LinearGenomeView/model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -560,26 +560,26 @@ export function stateModelFactory(pluginManager: PluginManager) {
/**
* #action
*/
toggleHeader() {
self.hideHeader = !self.hideHeader
setHideHeader(b: boolean) {
self.hideHeader = b
},
/**
* #action
*/
toggleHeaderOverview() {
self.hideHeaderOverview = !self.hideHeaderOverview
setHideHeaderOverview(b: boolean) {
self.hideHeaderOverview = b
},
/**
* #action
*/
toggleNoTracksActive() {
self.hideNoTracksActive = !self.hideNoTracksActive
setHideNoTracksActive(b: boolean) {
self.hideNoTracksActive = b
},
/**
* #action
*/
toggleShowGridlines() {
self.showGridlines = !self.showGridlines
setShowGridlines(b: boolean) {
self.showGridlines = b
},
/**
* #action
Expand Down Expand Up @@ -787,8 +787,8 @@ export function stateModelFactory(pluginManager: PluginManager) {
/**
* #action
*/
toggleCenterLine() {
self.showCenterLine = !self.showCenterLine
setShowCenterLine(b: boolean) {
self.showCenterLine = b
},

/**
Expand Down Expand Up @@ -1102,32 +1102,34 @@ export function stateModelFactory(pluginManager: PluginManager) {
label: 'Show center line',
type: 'checkbox',
checked: self.showCenterLine,
onClick: self.toggleCenterLine,
onClick: () => self.setShowCenterLine(!self.showCenterLine),
},
{
label: 'Show header',
type: 'checkbox',
checked: !self.hideHeader,
onClick: self.toggleHeader,
onClick: () => self.setHideHeader(!self.hideHeader),
},
{
label: 'Show header overview',
type: 'checkbox',
checked: !self.hideHeaderOverview,
onClick: self.toggleHeaderOverview,
onClick: () =>
self.setHideHeaderOverview(!self.hideHeaderOverview),
disabled: self.hideHeader,
},
{
label: 'Show no tracks active button',
type: 'checkbox',
checked: !self.hideNoTracksActive,
onClick: self.toggleNoTracksActive,
onClick: () =>
self.setHideNoTracksActive(!self.hideNoTracksActive),
},
{
label: 'Show guidelines',
type: 'checkbox',
checked: self.showGridlines,
onClick: self.toggleShowGridlines,
onClick: () => self.setShowGridlines(!self.showGridlines),
},
...(canShowCytobands
? [
Expand Down
2 changes: 2 additions & 0 deletions products/jbrowse-web/src/SessionLoader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ const SessionLoader = types
sessionTracks: types.maybe(types.string),
assembly: types.maybe(types.string),
tracks: types.maybe(types.string),
tracklist: types.maybe(types.boolean),
nav: types.maybe(types.boolean),
initialTimestamp: types.number,
})
.volatile(() => ({
Expand Down
40 changes: 29 additions & 11 deletions products/jbrowse-web/src/components/Loader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {
StringParam,
QueryParamProvider,
useQueryParam,
BooleanParam,
} from 'use-query-params'
import { WindowHistoryAdapter } from 'use-query-params/adapters/window'
import { FatalErrorDialog, LoadingEllipses } from '@jbrowse/core/ui'
Expand All @@ -26,17 +27,20 @@ const ConfigWarningDialog = lazy(() => import('./ConfigWarningDialog'))
const SessionWarningDialog = lazy(() => import('./SessionWarningDialog'))
const StartScreen = lazy(() => import('./StartScreen'))

function normalize<T>(param: T | null | undefined) {
return param === null ? undefined : param
}

export function Loader({
initialTimestamp = Date.now(),
}: {
initialTimestamp?: number
}) {
// return value if defined, else convert null to undefined for use with
// types.maybe
const load = (param: string | null | undefined) =>
param === null ? undefined : param

const Str = StringParam
const Bool = BooleanParam

const [config] = useQueryParam('config', Str)
const [session] = useQueryParam('session', Str)
Expand All @@ -46,16 +50,20 @@ export function Loader({
const [sessionTracks, setSessionTracks] = useQueryParam('sessionTracks', Str)
const [assembly, setAssembly] = useQueryParam('assembly', Str)
const [tracks, setTracks] = useQueryParam('tracks', Str)
const [nav, setNav] = useQueryParam('nav', Bool)
const [tracklist, setTrackList] = useQueryParam('tracklist', Bool)

const loader = SessionLoader.create({
configPath: load(config),
sessionQuery: load(session),
password: load(password),
adminKey: load(adminKey),
loc: load(loc),
assembly: load(assembly),
tracks: load(tracks),
sessionTracks: load(sessionTracks),
configPath: normalize(config),
sessionQuery: normalize(session),
password: normalize(password),
adminKey: normalize(adminKey),
loc: normalize(loc),
assembly: normalize(assembly),
tracks: normalize(tracks),
sessionTracks: normalize(sessionTracks),
tracklist: normalize(tracklist),
nav: normalize(nav),
initialTimestamp,
})

Expand All @@ -65,7 +73,17 @@ export function Loader({
setAssembly(undefined, 'replaceIn')
setPassword(undefined, 'replaceIn')
setSessionTracks(undefined, 'replaceIn')
}, [setAssembly, setLoc, setTracks, setPassword, setSessionTracks])
setTrackList(undefined, 'replaceIn')
setNav(undefined, 'replaceIn')
}, [
setAssembly,
setLoc,
setNav,
setTrackList,
setTracks,
setPassword,
setSessionTracks,
])

return <Renderer loader={loader} />
}
Expand Down
8 changes: 2 additions & 6 deletions products/jbrowse-web/src/createPluginManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,7 @@ export function createPluginManager(self: SessionLoaderModel) {

// @ts-expect-error
if (!self.configSnapshot?.configuration?.rpc?.defaultDriver) {
const { rpc } = rootModel.jbrowse.configuration
rpc.defaultDriver.set('WebWorkerRpcDriver')
rootModel.jbrowse.configuration.defaultDriver.set('WebWorkerRpcDriver')
}

let afterInitializedCb = () => {}
Expand All @@ -60,10 +59,7 @@ export function createPluginManager(self: SessionLoaderModel) {
if (self.sessionError) {
rootModel.setDefaultSession()
rootModel.session.notify(
`Error loading session: ${self.sessionError}. If you
received this URL from another user, request that they send you
a session generated with the "Share" button instead of copying
and pasting their URL`,
`Error loading session: ${self.sessionError}. If you received this URL from another user, request that they send you a session generated with the "Share" button instead of copying and pasting their URL`,
)
} else if (self.sessionSnapshot) {
rootModel.setSession(self.sessionSnapshot)
Expand Down
Loading

0 comments on commit e50e726

Please sign in to comment.