Documentation for the tree selection
This commit is contained in:
parent
5a97f2bdd8
commit
51f13412b9
1 changed files with 37 additions and 1 deletions
|
@ -39,8 +39,21 @@ const noop = () => 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Somewhat corresponds to nsITreeSelection
|
* Somewhat corresponds to nsITreeSelection
|
||||||
|
* https://udn.realityripple.com/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsITreeSelection
|
||||||
|
*
|
||||||
|
* @property pivot {Number} The selection "pivot". This is the first item the user selected as part of
|
||||||
|
* a ranged select (i.e. shift-select).
|
||||||
|
* @property focused {Number} The currently selected/focused item.
|
||||||
|
* @property count {Number} The number of selected items
|
||||||
|
* @property selected {Set} The set of currently selected items
|
||||||
|
* @property selectEventsSuppressed {Boolean} Controls whether select events are triggered on selection change.
|
||||||
*/
|
*/
|
||||||
class TreeSelection {
|
class TreeSelection {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param tree {VirtualizedTable} The tree where selection occurs. Will be used to issue
|
||||||
|
* updates.
|
||||||
|
*/
|
||||||
constructor(tree) {
|
constructor(tree) {
|
||||||
this._tree = tree;
|
this._tree = tree;
|
||||||
Object.assign(this, {
|
Object.assign(this, {
|
||||||
|
@ -51,11 +64,21 @@ class TreeSelection {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the given index is selected.
|
||||||
|
* @param index {Number} The index is 0-clamped.
|
||||||
|
* @returns {boolean}
|
||||||
|
*/
|
||||||
isSelected(index) {
|
isSelected(index) {
|
||||||
index = Math.max(0, index);
|
index = Math.max(0, index);
|
||||||
return this.selected.has(index);
|
return this.selected.has(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Toggles an item's selection state, updates focused item to index.
|
||||||
|
* @param index {Number} The index is 0-clamped.
|
||||||
|
* @param shouldDebounce {Boolean} Whether the update to the tree should be debounced
|
||||||
|
*/
|
||||||
toggleSelect(index, shouldDebounce) {
|
toggleSelect(index, shouldDebounce) {
|
||||||
index = Math.max(0, index);
|
index = Math.max(0, index);
|
||||||
if (this.selected.has(index)) {
|
if (this.selected.has(index)) {
|
||||||
|
@ -84,7 +107,9 @@ class TreeSelection {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param index
|
* Selects an item, updates focused item to index.
|
||||||
|
* @param index {Number} The index is 0-clamped.
|
||||||
|
* @param shouldDebounce {Boolean} Whether the update to the tree should be debounced
|
||||||
* @returns {boolean} False if nothing to select and select handlers won't be called
|
* @returns {boolean} False if nothing to select and select handlers won't be called
|
||||||
*/
|
*/
|
||||||
select(index, shouldDebounce) {
|
select(index, shouldDebounce) {
|
||||||
|
@ -136,6 +161,11 @@ class TreeSelection {
|
||||||
this._updateTree();
|
this._updateTree();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs a shift-select from current pivot to provided index. Updates focused item to index.
|
||||||
|
* @param index {Number} The index is 0-clamped.
|
||||||
|
* @param shouldDebounce {Boolean} Whether the update to the tree should be debounced
|
||||||
|
*/
|
||||||
shiftSelect(index, shouldDebounce) {
|
shiftSelect(index, shouldDebounce) {
|
||||||
index = Math.max(0, index);
|
index = Math.max(0, index);
|
||||||
let from = Math.min(index, this.pivot);
|
let from = Math.min(index, this.pivot);
|
||||||
|
@ -161,6 +191,11 @@ class TreeSelection {
|
||||||
this._updateTree(shouldDebounce);
|
this._updateTree(shouldDebounce);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calls the onSelectionChange prop on the tree
|
||||||
|
* @param shouldDebounce {Boolean} Whether the update to the tree should be debounced
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
_updateTree(shouldDebounce) {
|
_updateTree(shouldDebounce) {
|
||||||
if (!this.selectEventsSuppressed && this._tree.props.onSelectionChange) {
|
if (!this.selectEventsSuppressed && this._tree.props.onSelectionChange) {
|
||||||
this._tree.props.onSelectionChange(this, shouldDebounce);
|
this._tree.props.onSelectionChange(this, shouldDebounce);
|
||||||
|
@ -204,6 +239,7 @@ class TreeSelection {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Something to return on selection query before tree initialization
|
||||||
let TreeSelectionStub = {};
|
let TreeSelectionStub = {};
|
||||||
for (const key of Object.getOwnPropertyNames(TreeSelection.prototype)) {
|
for (const key of Object.getOwnPropertyNames(TreeSelection.prototype)) {
|
||||||
TreeSelectionStub[key] = () => 0;
|
TreeSelectionStub[key] = () => 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue