# HierarchicalTrackSelectorWidget

Auto-generated from the @jbrowse/mobx-state-tree model in the source — see the [developer guide](https://jbrowse.org/jb2/docs/developer_guide/) for concepts. Provided by the `data-management` plugin. [View source](https://github.com/GMOD/jbrowse-components/blob/main/plugins/data-management/src/HierarchicalTrackSelectorWidget/model.ts).

Lists a view's available tracks as a tree of categories, with a filter box,
favorites and recently used tracks, and a group for each connection.

## Properties

| Member | Description |
| --- | --- |
| **id**<br><code>id: ElementId</code> |  |
| **type**<br><code>type: types.literal('HierarchicalTrackSelectorWidget')</code> |  |
| **view**<br><code>view: types.safeReference( pluginManager.pluggableMstType('view', 'stateModel'), )</code> |  |
| **trackContainerId**<br><code>trackContainerId: types.maybe(types.string)</code> | Which of the view's track containers this selector writes into, by id. Absent — the usual case — means the view itself. A view owning several track lists (the synteny view, one per level band) names one here; the container is resolved through `view.trackContainerFor` rather than referenced directly, because it isn't a view and so isn't a legal target for the `view` reference above. |

## Volatiles

| Member | Description |
| --- | --- |
| **favorites**<br><code>string[]</code> |  |
| **recentlyUsed**<br><code>string[]</code> |  |
| **selectedTrackIds**<br><code>string[]</code> | the shopping cart, by trackId; `selection` resolves the configs |
| **sortTrackNames**<br><code>boolean &#124; undefined</code> |  |
| **sortCategories**<br><code>boolean &#124; undefined</code> |  |
| **categoryMode**<br><code>ObservableMap&lt;string, CategoryMode&gt;</code> | per-category rendering mode; absent means expanded. Collapsed and folder are mutually exclusive by construction, so un-foldering a category can't reveal a stale collapse underneath it |
| **filterText**<br><code>string</code> |  |
| **recentlyUsedCounter**<br><code>number</code> |  |
| **favoritesCounter**<br><code>number</code> |  |

## Getters

| Member | Description |
| --- | --- |
| **trackContainer**<br><code>TrackContainer &#124; undefined</code> | The track list this selector shows and writes into: the view itself, or one of its containers when `trackContainerId` names one. |
| **shownTrackIds**<br><code>Set&lt;string&gt;</code> |  |
| **favoritesSet**<br><code>Set&lt;string&gt;</code> |  |
| **recentlyUsedSet**<br><code>Set&lt;string&gt;</code> |  |
| **assemblyNames**<br><code>string[]</code> |  |
| **activeSortTrackNames**<br><code>any</code> |  |
| **activeSortCategories**<br><code>any</code> |  |
| **configAndSessionTrackConfigurations**<br><code>AnyTrackConfig[]</code> | the tracks this view can be offered — its assemblies' sequence tracks, then the session's list filtered to what it can draw |
| **sessionTrackIds**<br><code>Set&lt;any&gt;</code> | a non-admin's added/copied tracks, which the tree groups under a "Session tracks" category. Membership is the session's own list — the source of truth — not a suffix baked into the trackId |
| **filterQuery**<br><code>string</code> | the normalized filter box contents; empty when nothing is being searched for |
| **filterActive**<br><code>boolean</code> | a query is being searched for, which forces categories open (isFilterForcedOpen) |
| **mainGroupTracks**<br><code>TrackNodeSource[]</code> | the config's own and the session's tracks, resolved and sorted. Its own getter, so a connection loading re-reads none of them |
| **allTracks**<br><code>TrackGroup[]</code> | the main group, then one group per connection config whether or not it is loaded. A dormant connection has no tracks and defaults collapsed; expanding it loads it (see toggleCategory) |
| **allTrackConfigurations**<br><code>AnyTrackConfig[]</code> | every track the view can display, in tree order: what the faceted selector, favorites and recently-used resolve against |
| **allTrackConfigurationMap**<br><code>Map&lt;any, AnyTrackConfig&gt;</code> |  |
| **selection**<br><code>AnyTrackConfig[]</code> | the selected track configs, resolved from `selectedTrackIds` on read, so a deleted track drops out and an edited one stays selected |
| **selectionSet**<br><code>Set&lt;any&gt;</code> | the selected trackIds that still resolve to a track |
| **favoriteTracks**<br><code>(AnyConfigurationModel &#124; TrackConfigEntry)[]</code> | filters out tracks that are not in the favorites group |
| **recentlyUsedTracks**<br><code>(AnyConfigurationModel &#124; TrackConfigEntry)[]</code> | filters out tracks that are not in the recently used group |
| **hierarchy**<br><code>{ name: string; id: string; type: "category"; children: { name: string; id: string; type: "category"; nestingLevel: number; defaultCollapsed: boolean; loading: boolean; children: TreeNode[]; }[]; }</code> | a group is kept even when no track in it survives the filter, so an empty connection still shows in the tree |
| **rows**<br><code>TreeRow[]</code> | every rendered row, in order, with its height and scroll offset |
| **treeHeight**<br><code>number</code> |  |
| **folderTrackNodes**<br><code>Map&lt;string, TreeTrackNode[]&gt;</code> |  |
| **folderCategoryStats**<br><code>Map&lt;string, { active: number; total: number; }&gt;</code> |  |
| **hasAnySubcategories**<br><code>boolean</code> |  |

## Methods

| Member | Description |
| --- | --- |
| **isFavorite**<br><code>(trackId: string) =&gt; boolean</code> |  |
| **isRecentlyUsed**<br><code>(trackId: string) =&gt; boolean</code> |  |
| **isSelected**<br><code>(trackId: string) =&gt; boolean</code> |  |
| **visibleRange**<br><code>(height: number, scrollTop: number) =&gt; { startIndex: number; endIndex: number; }</code> |  |

## Actions

| Member | Description |
| --- | --- |
| **setSortTrackNames**<br><code>(val: boolean) =&gt; void</code> |  |
| **setSortCategories**<br><code>(val: boolean) =&gt; void</code> |  |
| **setSelection**<br><code>(trackIds: string[]) =&gt; void</code> |  |
| **addToSelection**<br><code>(trackIds: string[]) =&gt; void</code> |  |
| **removeFromSelection**<br><code>(trackIds: string[]) =&gt; void</code> |  |
| **clearSelection**<br><code>() =&gt; void</code> |  |
| **addToFavorites**<br><code>(trackId: string) =&gt; void</code> |  |
| **removeFromFavorites**<br><code>(trackId: string) =&gt; void</code> |  |
| **clearFavorites**<br><code>() =&gt; void</code> |  |
| **setRecentlyUsedCounter**<br><code>(val: number) =&gt; void</code> |  |
| **setRecentlyUsed**<br><code>(str: string[]) =&gt; void</code> |  |
| **setFavoritesCounter**<br><code>(val: number) =&gt; void</code> |  |
| **addToRecentlyUsed**<br><code>(id: string) =&gt; void</code> |  |
| **clearRecentlyUsed**<br><code>() =&gt; void</code> |  |
| **setView**<br><code>(view: unknown) =&gt; void</code> |  |
| **setTrackContainerId**<br><code>(id: string &#124; undefined) =&gt; void</code> |  |
| **setCategoryMode**<br><code>(id: string, mode: CategoryMode &#124; undefined) =&gt; void</code> |  |
| **clearCategoryModes**<br><code>() =&gt; void</code> |  |
| **clearFilterText**<br><code>() =&gt; void</code> |  |
| **setFilterText**<br><code>(newText: string) =&gt; void</code> |  |
| **setCategoryCollapsed**<br><code>(id: string, collapsed: boolean) =&gt; void</code> | the single gate on accordion state: a folder is a mode the user picked, not an accordion that happens to be shut, so every collapse/expand — one row, a bulk menu item, or "expand all" — passes it by |
| **setFolderCategory**<br><code>(id: string, isFolder: boolean) =&gt; void</code> | folder and collapsed are the same slot, so leaving folder mode always lands on an expanded category |
| **expandAllCategories**<br><code>() =&gt; void</code> |  |
| **toggleTrack**<br><code>(trackId: string) =&gt; Promise&lt;void&gt;</code> | shows or hides a track, recording one it showed as recently used |
| **collapseSubCategories**<br><code>() =&gt; void</code> |  |
| **collapseTopLevelCategories**<br><code>() =&gt; void</code> |  |
| **toggleCategory**<br><code>(id: string) =&gt; void</code> | expanding a dormant connection's category loads the connection |

