Usage
Signature:
final class ArrayTreeDataProvider<K, D> implements TreeDataProvider<K, D>
Generic Parameters
Parameter Description K Type of Key D Type of Data
Typescript Import Format
//This class is exported directly as module. To import it
import ArrayTreeDataProvider= require("ojs/ojarraytreedataprovider");
For additional information visit:
Final classes in JET
Classes in JET are generally final and do not support subclassing. At the moment, final is not enforced. However, this will likely change in an upcoming JET release.
Constructor
new ArrayTreeDataProvider(data, options)
Parameters:
Name | Type | Argument | Description |
---|---|---|---|
data |
Array | function():Array | data supported by the components
This can be either an Array, or a Knockout observableArray. |
|
options |
ArrayTreeDataProvider.Options.<D> |
<optional> |
Options for the ArrayTreeDataProvider |
Methods
-
addEventListener(eventType: string, listener: EventListener): void
-
Add a callback function to listen for a specific event type.
Parameters:
Name Type Description eventType
string The event type to listen for. listener
EventListener The callback function that receives the event notification. -
containsKeys(parameters : FetchByKeysParameters<K>) : Promise<ContainsKeysResults<K>>
-
Check if there are rows containing the specified keys. If this method is called on a DataProvider returned from
getChildDataProvider(key)
, the rows will be only those from the children of thekey
.Parameters:
Name Type Description parameters
FetchByKeysParameters contains by key parameters - Since:
- 4.2.0
Returns:
Returns Promise which resolves to ContainsKeysResults.
- Type
- Promise.<ContainsKeysResults>
Example
let containsKeys = [1001, 556]; let value = await dataprovider.containsKeys({keys: containsKeys}); let results = value['results']; if (results.has(1001)) { console.log('Has key 1001'); } else if (results.has(556){ console.log('Has key 556'); }
-
createOptimizedKeyMap(initialMap?: Map<K, D>): Map<K, D>
-
Return an empty Map which is optimized to store key value pairs
Optionally provided by certain DataProvider implementations for storing key/value pairs from the DataProvider in a performant fashion. Sometimes components will need to temporarily store a Map of keys provided by the DataProvider, for example, in the case of maintaining a Map of selected keys. Only the DataProvider is aware of the internal structure of keys such as whether they are primitives, Strings, or objects and how to do identity comparisons. Therefore, the DataProvider can optionally provide a Map implementation which can performantly store key/value pairs surfaced by the DataProvider.
Parameters:
Name Type Argument Description initialMap
Map.<any> <optional>
Optionally specify an initial map of key/values for the Map. If not specified, then return an empty Map. - Since:
- 6.2.0
Returns:
Returns a Map optimized for handling keys from the DataProvider.
- Type
- Map.<any>
Example
let keyMap = dataprovider.createOptimizedKeyMap();
-
createOptimizedKeySet(initialSet?: Set<K>): Set<K>
-
Return an empty Set which is optimized to store keys
Optionally provided by certain DataProvider implementations for storing keys from the DataProvider in a performant fashion. Sometimes components will need to temporarily store a Set of keys provided by the DataProvider, for example, in the case of maintaining a Set of selected keys. Only the DataProvider is aware of the internal structure of keys such as whether they are primitives, Strings, or objects and how to do identity comparisons. Therefore, the DataProvider can optionally provide a Set implementation which can performantly store keys surfaced by the DataProvider.
Parameters:
Name Type Argument Description initialSet
Set.<any> <optional>
Optionally specify an initial set of keys for the Set. If not specified, then return an empty Set. - Since:
- 6.2.0
Returns:
Returns a Set optimized for handling keys from the DataProvider.
- Type
- Set.<any>
Example
let keySet = dataprovider.createOptimizedKeySet();
-
dispatchEvent(evt: Event): boolean
-
Dispatch an event and invoke any registered listeners.
Parameters:
Name Type Description event
Event The event object to dispatch. Returns:
Return false if a registered listener has cancelled the event. Return true otherwise.
- Type
- boolean
-
fetchByKeys(parameters : FetchByKeysParameters<K>) : Promise<FetchByKeysResults<K, D>>
-
Fetch rows by keys. If this method is called on a DataProvider returned from
getChildDataProvider(key)
, the rows will be only those from the children of thekey
.Parameters:
Name Type Description parameters
FetchByKeysParameters fetch by key parameters - Since:
- 4.2.0
Returns:
Returns Promise which resolves to FetchByKeysResults.
- Type
- Promise.<FetchByKeysResults>
Example
let fetchKeys = [1001, 556]; let value = await dataprovider.fetchByKeys({keys: fetchKeys}); // get the data for key 1001 console.log(value.results.get(1001).data);
-
fetchByOffset(parameters: FetchByOffsetParameters<D>): Promise<FetchByOffsetResults<K, D>>
-
Fetch rows by offset
A generic implementation of this method is available from FetchByOffsetMixin. It is for convenience and may not provide the most efficient implementation for your data provider. Classes that implement the DataProvider interface are encouraged to provide a more efficient implementation.
Parameters:
Name Type Description parameters
FetchByOffsetParameters fetch by offset parameters - Since:
- 4.2.0
Returns:
Returns Promise which resolves to FetchByOffsetResults.
- Type
- Promise.<FetchByOffsetResults>
Example
let result = await dataprovider.fetchByOffset({size: 5, offset: 2}); let results = result['results']; let data = results.map(function(value) { return value['data']; }); let keys = results.map(function(value) { return value['metadata']['key']; });
-
fetchFirst(parameters?: FetchListParameters<D>): AsyncIterable<FetchListResult<K, D>>
-
Get an AsyncIterable object for iterating the data.
AsyncIterable contains a Symbol.asyncIterator method that returns an AsyncIterator. AsyncIterator contains a “next” method for fetching the next block of data.
The "next" method returns a promise that resolves to an object, which contains a "value" property for the data and a "done" property that is set to true when there is no more data to be fetched. The "done" property should be set to true only if there is no "value" in the result. Note that "done" only reflects whether the iterator is done at the time "next" is called. Future calls to "next" may or may not return more rows for a mutable data source.
In order for JET components to work correctly, DataProvider implementations should ensure that:
- The iterator accounts for data mutations when returning the next block of data, and that no row is duplicated or skipped. For example, an offset-based implementation may need to adjust the offset from which the next block of data starts if rows have been added or removed in the returned data.
- JET components may call "next" on the iterator even after the iterator has returned done:true. If new data is available after the last returned row, the iterator is expected to return the new data and set "done" to false. This differs from the AsyncIterator spec for performance reasons.
Please see the DataProvider documentation for more information on custom implementations.
Parameters:
Name Type Argument Description params
FetchListParameters <optional>
fetch parameters - Since:
- 4.2.0
- See:
-
- https://github.com/tc39/proposal-async-iteration for further information on AsyncIterable.
Returns:
AsyncIterable with FetchListResult
- Type
- AsyncIterable.<FetchListResult>
Example
let asyncIterator = dataprovider.fetchFirst(options)[Symbol.asyncIterator](); let result = await asyncIterator.next(); let value = result.value; let data = value.data; let keys = value.metadata.map(function(val) { return val.key; });
-
getCapability(capabilityName: string): any
-
Determines whether this DataProvider defines a certain feature.
Parameters:
Name Type Description capabilityName
string capability name. Defined capability names are: "fetchByKeys", "fetchByOffset", "sort", "fetchCapability" and "filter". - Since:
- 4.2.0
Returns:
capability information or null if undefined
- If capabilityName is "fetchByKeys", returns a FetchByKeysCapability object.
- If capabilityName is "fetchByOffset", returns a FetchByOffsetCapability object.
- If capabilityName is "sort", returns a SortCapability object.
- If capabilityName is "filter", returns a FilterCapability object.
- If capabilityName is "fetchCapability", returns a FetchCapability object.
- Type
- Object
Example
let capabilityInfo = dataprovider.getCapability('fetchByKeys'); if (capabilityInfo.implementation == 'iteration') { // the DataProvider supports iteration for fetchByKeys ...
-
getChildDataProvider(key: K): TreeDataProvider<K, D> | null
-
Get the data provider for the children of the row identified by key.
Parameters:
Name Type Description key
any key of the row to get child data provider for. - Since:
- 5.1.0
Returns:
A TreeDataProvider if the row can (but doesn't have to) have children; or null if the row cannot have children. Use the
isEmpty
method on the returned TreeDataProvider to determine if it currently has children.- Type
- TreeDataProvider | null
-
getTotalSize : {Promise.<number>}
-
Return the total number of rows in this dataprovider
Returns:
Returns a Promise which resolves to the total number of rows. -1 is unknown row count.
- Type
- Promise.<number>
Example
let value = await dataprovider.getTotalSize(); if (value == -1) { // we don't know the total row count } else { // the total count console.log(value); }
-
isEmpty(): 'yes' | 'no' | 'unknown'
-
Returns a string that indicates if this data provider is empty. Valid values are:
- "yes": this data provider is empty.
- "no": this data provider is not empty.
- "unknown": it is not known if this data provider is empty until a fetch is made.
- Since:
- 4.2.0
Returns:
string that indicates if this data provider is empty
- Type
- "yes" | "no" | "unknown"
Example
let isEmpty = dataprovider.isEmpty(); console.log('DataProvider is empty: ' + isEmpty);
-
removeEventListener(eventType: string, listener: EventListener): void
-
Remove a listener previously registered with addEventListener.
Parameters:
Name Type Description eventType
string The event type that the listener was registered for. listener
EventListener The callback function that was registered.
Type Definitions
-
Options<D>
-
- 'global': the key values are unique within the entire tree.
- 'siblings': the key values are unique among the siblings of each node.
Properties:
Name Type Argument Description childrenAttribute
string <optional>
Optional field name which stores the children of nodes in the data. Dot notation can be used to specify nested attribute. If this is not specified, the default is "children". implicitSort
Array.<SortCriterion.<D>> <optional>
Optional array of SortCriterion used to specify sort information when the data loaded into the dataprovider is already sorted. This is used for cases where we would like display some indication that the data is already sorted. For example, ojTable will display the column sort indicator for the corresponding column in either ascending or descending order upon initial render. This option is not used for cases where we want the ArrayDataProvider to apply a sort on initial fetch. For those cases, please wrap in a ListDataProviderView and set the sortCriteria property on it. keyAttributes
string | Array<string> <optional>
Optionally the field name which stores the key in the data. Can be a string denoting a single key attribute or an array of strings for multiple key attributes. Please note that the ids in ArrayDataProvider must always be unique. Please do not introduce duplicate ids, even during temporary mutation operations. @index causes ArrayDataProvider to use index as key and @value will cause ArrayDataProvider to use all attributes as key. @index is the default. With "@index", the key generation is based on the item index only initially. The key for an item, once assigned, will not change even if the item index changes (e.g. by inserting/removing items from the array). Assigned keys will never be reassigned. If the array is replaced with new items, the new items will be assigned keys that are different from their indices. In general, caller should specify keyAttributes whenever possible and should never assume that the generated keys are the same as the item indices.
This option is ignored if the "keys" option is specified.
keyAttributesScope
'siblings' | 'global' <optional>
Optional scope of the key values in the fields specified by keyAttributes. Supported values:
sortComparators
ArrayDataProvider.SortComparators<D> <optional>
Optional sortComparator to use for sort. textFilterAttributes
string[] <optional>
Optionally specify which attributes the filter should be applied on when a TextFilter filterCriteria is specified. If this option is not specified then the filter will be applied to all attributes.