relution-sdk
Version:
Relution Software Development Kit for TypeScript and JavaScript
138 lines (137 loc) • 4.71 kB
TypeScript
/// <reference types="chai" />
/// <reference types="backbone" />
/// <reference types="lodash" />
/**
* @module livedata
*/
/** */
import * as Backbone from 'backbone';
import * as _ from 'lodash';
import { Store } from './Store';
import { Model, ModelCtor } from './Model';
import { SyncContext } from './SyncContext';
import { SyncEndpoint } from './SyncEndpoint';
/**
* prototype properties specified when subclassing using Collection.defaults().
*/
export interface CollectionProps {
model?: ModelCtor;
entity?: string;
options?: any;
url?: string | (() => string);
store?: Store;
}
/**
* constructor function of Collection.
*/
export interface CollectionCtorT<CollectionType extends Collection, ModelType extends Model, OptionsType> {
/**
* prototype of constructor function.
*/
prototype: CollectionType;
/**
* @see Collection#constructor
*/
new (models?: ModelType[] | Object[], options?: any): CollectionType;
}
/**
* constructor function of Collection.
*/
export declare type CollectionCtor = CollectionCtorT<Collection, Model, any>;
/**
* tests whether a given object is a Collection.
*
* @param {object} object to check.
* @return {boolean} whether object is a Collection.
*/
export declare function isCollection(object: any): object is Collection;
/**
* extension of a backbone.js Collection.
*
* The Relution.livedata.Collection can be used like a Backbone Collection,
* but there are some enhancements to fetch, save and delete the
* contained models from or to other "data stores".
*
* see WebSqlStore or SyncStore for examples
*/
export declare class Collection extends Backbone.Collection<Model> {
_type: string;
isModel: boolean;
isCollection: boolean;
isStore: boolean;
model: ModelCtor;
entity: string;
options: any;
store: Store;
syncContext: SyncContext;
credentials: any;
endpoint: SyncEndpoint;
channel: string;
constructor(models?: Model[] | Object[], options?: any);
/**
* sets up prototype properties when defining a Collection subclass.
*
* @param {CollectionProps} properties of prototype to set.
*/
static defaults(properties: CollectionProps): CollectionCtor;
protected init(models?: Model[] | Object[], options?: any): void;
ajax(options: any): any;
sync(method: string, model: Backbone.ModelBase, options?: any): any;
private _entityFromUrl(urlStr);
destroy(options?: any): void;
/**
* save all containing models
*/
save(): void;
applyFilter(callback: _.ListIterator<Model, boolean>): void;
getUrlParams(url?: string): any;
getUrl(): string;
getUrlRoot(): string;
private _updateUrl();
/**
* reads an additional page of data into this collection.
*
* A fetch() must have been performed loading the initial set of data. This method is intended for infinite scrolling
* implementation.
*
* When async processing is done, a more attribute is set on the options object in case additional data might be
* available which can be loaded by calling this method again. Likewise an end attribute is set if the data is
* fully loaded.
*
* @param {object} options such as pageSize to retrieve.
* @return {Promise} promise of the load operation.
*
* @see SyncContext#fetchMore()
*/
fetchMore(options?: any): PromiseLike<any>;
/**
* reads the next page of data into this collection.
*
* A fetch() must have been performed loading the initial set of data. This method is intended for paging
* implementation.
*
* When async processing is done, a next/prev attribute is set on the options object in case additional pages might be
* available which can be loaded by calling the corresponding method.
*
* @param {object} options such as pageSize to retrieve.
* @return {Promise} promise of the load operation.
*
* @see SyncContext#fetchNext()
*/
fetchNext(options?: any): PromiseLike<any>;
/**
* reads the previous page of data into this collection.
*
* A fetch() must have been performed loading the initial set of data. This method is intended for paging
* implementation.
*
* When async processing is done, a next/prev attribute is set on the options object in case additional pages might be
* available which can be loaded by calling the corresponding method.
*
* @param {object} options such as pageSize to retrieve.
* @return {Promise} promise of the load operation.
*
* @see SyncContext#fetchPrev()
*/
fetchPrev(options?: any): PromiseLike<any>;
}