Skip to main content

Tree Nodes

A SharedTree's data is organized into a tree of nodes. See node types for details on the types of nodes that can be stored on a SharedTree.

Node Utilities

Below are some utilities provided to make working with nodes easier.

Tree.key

Tree.key(node: SharedTreeNode): number | string

Returns the field key that the node is stored under. This is a string in all cases, except an array node, in which case it returns the index of the node.

Tree.parent

Tree.parent(node: SharedTreeNode): SharedTreeNode

Returns the parent node of node. The following snippet continues the sticky notes example. Suppose that you have a reference to a note object and you want to delete it if, and only if, it is a member of an array of notes in a group or it is a direct child of the root. You can get the parent node and test what its type is.

const parent = Tree.parent(note);

if (Tree.is(parent, Notes) || Tree.is(parent, Items)) {
const index = parent.indexOf(note);
parent.removeAt(index);
}

Tree.status

Tree.status(node: SharedTreeNode): TreeStatus

Returns the current status of node. Possible values are:

  • New: The node is created but has not yet been inserted into the tree.
  • InDocument: The node is parented (either directly or indirectly) under the root field.
  • Removed: The node is not parented under the root field but may still be restorable by this client or other clients.
  • Deleted: The node is deleted and cannot be restored by this client, though it may still be restorable by other clients.

Tree.schema

Tree.schema(node: SharedTreeNode): TreeNodeSchema

Returns the object that defines the schema of the node object.

Tree.is

When your code needs to process nodes only of a certain type and it has a reference to an object of an unknown type, you can use the Tree.is() method to test for the desired type as in the following examples.

Tree.is(someNode: SharedTreeNode, nodeType: TreeNodeSchema | T): boolean

Returns true if someNode is of type nodeType. Note that T is a type that is derived from a call of one of the SchemaFactory methods; object(), map(), or array(). Here are examples:

if (Tree.is(myNode, Note)) {
// Code here that processes Note nodes.
}

For another example, see the Tree.parent() method.