TracksManagerSessionMixin
Auto-generated @jbrowse/mobx-state-tree API for the current JBrowse release — see pluggable elements for concepts. Built into JBrowse core. View source.
Members a composed model contributes are listed here too, so these tables are the whole surface.
Properties
| Member | Description | Defined by |
|---|---|---|
idid: ElementId | BaseSessionModel | |
namename: types.string | BaseSessionModel | |
focusedViewIdfocusedViewId: types.maybe(types.string) | used to keep track of which view is in focus | BaseSessionModel |
highlightsVisiblehighlightsVisible: types.stripDefault(types.boolean, true) | one session-wide toggle for all region highlight bands (URL/view highlights and bookmark overlays) | BaseSessionModel |
Volatiles
| Member | Description | Defined by |
|---|---|---|
selectionselection: undefined as unknown | this is the globally "selected" object. can be anything. code that wants to deal with this should examine it to see what kind of thing it is. | BaseSessionModel |
hoveredhovered: undefined as unknown | this is the globally "hovered" object. can be anything. code that wants to deal with this should examine it to see what kind of thing it is. | BaseSessionModel |
| queueOfDialogs | BaseSessionModel | |
| preferencesOverrides | runtime user-preference overrides keyed by preference id, resolved by getPreference against the configuration.preferences admin defaults. Empty here (config-only); products that let users edit preferences load and persist these via localStorage. A runtime override map layered over config defaults, kept off the snapshot since prefs are local UI.An observable.map (not a plain object reassigned wholesale) so each preference is its own tracked key: writing one (setScrollZoom) can't invalidate a reader of another (getDisplayTypeDefault in a track's rpcProps). A single spread-replaced object made every setter wake every reader, so toggling scroll-to-zoom re-fetched every track. For the same reason each promoted per-display-type default is a flat composite key (see displayTypeDefaultKey), not a single nested displayTypeDefaults object — promoting one default can't wake readers of a different one.deep: false is load-bearing, not a micro-optimization. The default enhancer wraps an object/array value in a MobX Proxy on set, and a promoted default is handed straight back out by getConf — so an object-valued promotable slot (alignments colorBy) put a Proxy into rpcProps(), and V8's structured-clone serializer rejects a Proxy: worker.postMessage threw DataCloneError on the next fetch of any track following that default (electron IPC and structuredClone in the share bake likewise). The map still notifies per key on set, so shallow values lose no reactivity — and nothing can mutate a preference in place, because setPreferenceOverride freezes what it stores. | BaseSessionModel |
snackbarMessagessnackbarMessages: observable.array<SnackbarMessage>() | SnackbarModel | |
errorDialogerrorDialog: undefined as ErrorDialogState | undefined | the error currently shown in the stack-trace dialog. Kept off the dialog queue so it can stack on top of an already-open dialog (e.g. the one whose action raised the error) instead of waiting behind it | SnackbarModel |
Getters
| Member | Description | Defined by |
|---|---|---|
| tracks | TracksManagerSessionMixin | |
rootTypeOrStateTreeNodeToStateTreeNode<ROOT_MODEL_TYPE> | BaseSessionModel | |
jbrowseany | BaseSessionModel | |
rpcManagerRpcManager | BaseSessionModel | |
configurationInstance<JB_CONFIG_SCHEMA> | BaseSessionModel | |
adminModeboolean | BaseSessionModel | |
textSearchManagerTextSearchManager | BaseSessionModel | |
| assemblies | BaseSessionModel | |
DialogComponentDialogComponentType | BaseSessionModel | |
DialogPropsRecord<string, unknown> | BaseSessionModel | |
animationModeAnimationMode | resolved feature-layout animation mode (never undefined) | BaseSessionModel |
scrollZoomboolean | resolved scroll-to-zoom preference. Global and personal (never shared in a session snapshot); every wheel-zoom view reads this single value. | BaseSessionModel |
numberGroupingboolean | resolved thousand-separator preference. Read for display in the Preferences dialog; the formatter itself reads a plain module variable set at startup in each realm (see setNumberGrouping), because worker- built strings can't see a main-thread observable. | BaseSessionModel |
snackbarMessageSetMap<string, SnackbarMessage> | SnackbarModel |
Methods
| Member | Description | Defined by |
|---|---|---|
| getTrackById | Config for one trackId — a track, assembly sequence, or connection track — or undefined. Per-id reactive: every display resolves its config through this (via TrackConfigurationReference) and subscribes only to its own id, so one track's settings edit doesn't re-render the others. | TracksManagerSessionMixin |
| getTracksById | Every track config the session can resolve, keyed by trackId. Prefer the per-id reactive getTrackById(id): reading this whole map subscribes the caller to every track, so an edit to any one of them wakes it — the reason internal display config resolution moved off it. Kept for plugins that look up ids in a non-reactive context. | TracksManagerSessionMixin |
getPreferenceDefault(key: string) => unknown | the admin/embedder configuration.preferences value for a key, ignoring any runtime override — i.e. what a reset falls back to. Exposed rather than inlined because "differs from the default" is a question the Preferences reset diff asks about settings this map doesn't hold (see defaultUseWorkspaces). | BaseSessionModel |
getPreference(key: string) => unknown | resolved value of a user preference: a runtime override if the user set one, otherwise the admin/embedder configuration.preferences default. The override map is empty unless the product loads it (web/desktop). | BaseSessionModel |
getDisplayTypeDefault(displayType: string, slot: string) => unknown | resolved value of a per-display-type slot default the user promoted (see setDisplayTypeDefault); undefined when nothing was promoted. | BaseSessionModel |
getDisplayTypeDefaults() => { displayType: string; slot: string; value: unknown; }[] | every per-display-type default the user has promoted, as { displayType, slot, value } — the inventory the Preferences dialog lists and clears one at a time (setDisplayTypeDefault(…, undefined)).Here rather than filtered out of getPreferenceChanges by the dialog, because the composite-key layout is this file's: a consumer that recognized these rows by matching the path head is exactly the coupling DISPLAY_TYPE_DEFAULTS_PATH_HEAD stopped being exported over, where a rename on one side alone silently no-ops the other. | BaseSessionModel |
getPreferenceChanges() => TrackConfigChange[] | every runtime preference-override that currently differs from its config/admin default, as { path, from, to } rows — the exact set clearPreferenceOverrides reverts. Backs the confirmation diff shown before "Reset to defaults" (mirrors the per-track changes dialog). A scalar pref (animationMode, scrollZoom) whose override equals the default is omitted (reverting it is a no-op); each promoted per-display-type default is always a difference from the un-promoted state, so from reads "(default)". | BaseSessionModel |
getReferringMultiple(trackIds: string[]) => Map<string, ReferringNode[]> | Walk the tree once and map each requested trackId to the nodes holding a types.reference that resolves to it (a view's track entry, a config editor widget). Track configs are matched by trackId, not identity, so a frozen base and its hydrated MST node compare equal. | ReferenceManagementSessionMixin |
getReferring(trackId: string) => ReferringNode[] | The nodes currently referring to trackId (see getReferringMultiple). | ReferenceManagementSessionMixin |
Actions
| Member | Description | Defined by |
|---|---|---|
addSessionTrackConf(trackConf: AnyConfiguration) => any | Add a track config to this session. This mixin's session has no separate session-track store, so the destination is the jbrowse config — which in the products that compose it (desktop) is the single user's own file rather than something a server hands other visitors, so the two scopes are the same place. Defined here anyway so that every session has it: a feature standing a track up on the user's behalf can then call one action everywhere instead of asking which mixin it landed on. SessionTracksManagerSessionMixin overrides it with the real session-scoped store. | TracksManagerSessionMixin |
publishTrackConf(trackConf: AnyConfiguration) => any | Add a track config wherever this user's catalog edits belong — the "Add track" workflows, where an admin adding a track means to add it for the whole site. SessionTracksManagerSessionMixin overrides it to send a non-admin's to the session instead; here there is only the one destination.Anything that is not an Add-track workflow wants addSessionTrackConf: a track a feature stands up on the user's behalf — a search result, a computed consensus, a reconstruction's labels — is not a catalog entry, and publishing one writes it into the config.json every visitor is served, once per click. | TracksManagerSessionMixin |
addTrackConf(trackConf: AnyConfiguration) => any | Deprecated alias of addSessionTrackConf. Call that, or publishTrackConf, which say which destination they mean. | TracksManagerSessionMixin |
| updateTrackConfiguration | Persist edited track config back to the in-memory jbrowse config. The session-tracks mixin overrides this so a non-admin's edits become a shareable session-track override instead. | TracksManagerSessionMixin |
| deleteTrackConf | TracksManagerSessionMixin | |
setSelection(thing: unknown) => void | set the global selection, i.e. the globally-selected object. can be a feature, a view, just about anything A feature is unwrapped on the way in, so app state never holds a jexlFeatureProxy. isFeature accepts a proxy, but on one id is a data field rather than the method the Feature type promises — every consumer doing isFeature(selection) ? selection.id() : … would throw. | BaseSessionModel |
clearSelection() => void | clears the global selection | BaseSessionModel |
setHovered(thing: unknown) => void | BaseSessionModel | |
setHighlightsVisible(arg: boolean) => void | toggle all region highlight bands across every view | BaseSessionModel |
revealHighlights() => void | turn highlight bands back on, so a newly made highlight or bookmark is never silently swallowed by an earlier "highlights off" | BaseSessionModel |
setPreferenceOverride(key: string, value: unknown) => void | set a runtime user-preference override (see getPreference). Mutates volatile state; products persist these to localStorage. An undefined value deletes the key (rather than leaving a phantom entry that getPreference reads as absent) so the store never holds dead keys. | BaseSessionModel |
clearPreferenceOverrides() => void | clear every runtime preference override at once — scrollZoom, animationMode, and every promoted per-display-type default (see setDisplayTypeDefault) — so each falls back to its config/admin default. Backs the Preferences dialog "Reset to defaults" button. | BaseSessionModel |
clearPreferenceOverride(key: string) => void | clear a single runtime preference override (see getPreference) so it falls back to its config/admin default. Backs the per-entry reset in the Preferences dialog "Reset to defaults" confirmation. | BaseSessionModel |
resetPreferenceChange(path: string[]) => void | revert one row emitted by getPreferenceChanges, addressed by its display path. Backs the per-entry reset in the Preferences dialog's "Reset to defaults" confirmation.Lives here rather than in that dialog because this model owns both path shapes it has to undo: a promoted per-display-type default, whose row path is a readable label over a flat composite storage key, and every other override, whose path is its key. The dialog used to re-derive the first case from an exported path-head constant. | BaseSessionModel |
setScrollZoom(flag: boolean) => void | set the global scroll-to-zoom preference (see the scrollZoom getter) | BaseSessionModel |
setDisplayTypeDefault(displayType: string, slot: string, value: unknown) => void | promote (or, with value undefined, clear) a per-display-type slot default. Just a preference override under one flat composite key (see displayTypeDefaultKey), so it persists and independently tracks like any other pref, and clearing deletes only that key. | BaseSessionModel |
setName(str: string) => void | BaseSessionModel | |
setFocusedViewId(viewId: string | undefined) => void | undefined is "no view is focused", which the property has always been able to hold (types.maybe) and this had no way to spell. Nothing cleared it on teardown as a result: a view that was focused when it left the session left its id behind, and since every consumer compares focusedViewId === view.id, the id matched nothing, the focus ring vanished with nothing to say why, and the dead id persisted into a saved or shared session. takeOut clears it now. | BaseSessionModel |
removeActiveDialog() => void | BaseSessionModel | |
queueDialog(doneCallback: DoneCallback) => void | BaseSessionModel | |
| notify | SnackbarModel | |
| notifyError | SnackbarModel | |
setErrorDialog(state: ErrorDialogState | undefined) => void | SnackbarModel | |
| pushSnackbarMessage | SnackbarModel | |
popSnackbarMessage() => SnackbarMessage | undefined | SnackbarModel | |
removeSnackbarMessage(message: string) => void | SnackbarModel | |
dereferenceTrack(trackId: string, referring: ReferringNode[]) => void | Remove trackId from every view referring to it and close any config editor widget open on it. Runs immediately: the walk that produced referring has finished, so mutating those views here is safe. | ReferenceManagementSessionMixin |