nativescript-sectioned-list-view
Version:
A native script listview plugin that can display sections
220 lines (219 loc) • 9.59 kB
JavaScript
"use strict";
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var observable = require("data/observable");
var view = require("ui/core/view");
var proxy = require("ui/core/proxy");
var dependencyObservable = require("ui/core/dependency-observable");
var color = require("color");
var ITEMS = "items";
var ITEMTEMPLATE = "itemTemplate";
var HEADER_TEMPLATE = "headerTemplate";
var ISSCROLLING = "isScrolling";
var LISTVIEW = "SectionedListView";
var SEPARATORCOLOR = "separatorColor";
var ROWHEIGHT = "rowHeight";
var HEADER_HEIGHT = "headerHeight";
var knownTemplates;
(function (knownTemplates) {
knownTemplates.itemTemplate = "itemTemplate";
knownTemplates.headerTemplate = "headerTemplate";
})(knownTemplates = exports.knownTemplates || (exports.knownTemplates = {}));
function onItemsPropertyChanged(data) {
var listView = data.object;
listView._onItemsPropertyChanged(data);
}
function onItemTemplatePropertyChanged(data) {
var listView = data.object;
listView.refresh();
}
function onRowHeightPropertyChanged(data) {
var listView = data.object;
listView._onRowHeightPropertyChanged(data);
}
var SectionedListView = (function (_super) {
__extends(SectionedListView, _super);
function SectionedListView() {
_super.apply(this, arguments);
}
Object.defineProperty(SectionedListView.prototype, "items", {
get: function () {
return this._getValue(SectionedListView.itemsProperty);
},
set: function (value) {
this._setValue(SectionedListView.itemsProperty, value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(SectionedListView.prototype, "itemTemplate", {
get: function () {
return this._getValue(SectionedListView.itemTemplateProperty);
},
set: function (value) {
this._setValue(SectionedListView.itemTemplateProperty, value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(SectionedListView.prototype, "headerTemplate", {
get: function () {
return this._getValue(SectionedListView.headerTemplateProperty);
},
set: function (value) {
this._setValue(SectionedListView.headerTemplateProperty, value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(SectionedListView.prototype, "isScrolling", {
get: function () {
return this._getValue(SectionedListView.isScrollingProperty);
},
set: function (value) {
this._setValue(SectionedListView.isScrollingProperty, value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(SectionedListView.prototype, "separatorColor", {
get: function () {
return this._getValue(SectionedListView.separatorColorProperty);
},
set: function (value) {
this._setValue(SectionedListView.separatorColorProperty, value instanceof color.Color ? value : new color.Color(value));
},
enumerable: true,
configurable: true
});
Object.defineProperty(SectionedListView.prototype, "rowHeight", {
get: function () {
return this._getValue(SectionedListView.rowHeightProperty);
},
set: function (value) {
this._setValue(SectionedListView.rowHeightProperty, value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(SectionedListView.prototype, "headerHeight", {
get: function () {
return this._getValue(SectionedListView.headerHeightProperty);
},
set: function (value) {
this._setValue(SectionedListView.headerHeightProperty, value);
},
enumerable: true,
configurable: true
});
SectionedListView.prototype.refresh = function () {
};
SectionedListView.prototype.scrollToIndex = function (index) {
};
SectionedListView.prototype._getItemTemplateContent = function (row, section) {
if (section === void 0) { section = 0; }
var v;
if (this.itemTemplate && this.items) {
var builder = require("ui/builder");
v = builder.parse(this.itemTemplate, this);
}
return v;
};
SectionedListView.prototype._getHeaderTemplateContent = function (section) {
if (section === void 0) { section = 0; }
var v;
if (this.headerTemplate) {
var builder = require("ui/builder");
v = builder.parse(this.headerTemplate, this);
}
return v;
};
SectionedListView.prototype._prepareItem = function (item, row, section) {
if (item) {
var dataItem = this._getDataItem(row, section);
if (!(dataItem instanceof observable.Observable)) {
item.bindingContext = null;
}
item.bindingContext = dataItem;
item._inheritProperties(this);
}
};
SectionedListView.prototype._prepareHeader = function (item, section) {
if (item) {
var dataItem = this._getHeaderItem(section);
if (!(dataItem instanceof observable.Observable)) {
item.bindingContext = null;
}
item.bindingContext = dataItem;
item._inheritProperties(this);
}
};
SectionedListView.prototype._getDataItem = function (row, section) {
if (section === void 0) { section = 0; }
if (this.items.getNoOfSections) {
return this.items.getItem(row, section);
}
return this.items.getItem ? this.items.getItem(row) : this.items[row];
};
SectionedListView.prototype._getHeaderItem = function (section) {
if (this.items && this.items.getTitle) {
return this.items.getTitle(section);
}
return "";
};
SectionedListView.prototype._getDefaultItemContent = function (row, section) {
if (section === void 0) { section = 0; }
var label = require("ui/label");
var lbl = new label.Label();
lbl.bind({
targetProperty: "text",
sourceProperty: "$value"
});
return lbl;
};
SectionedListView.prototype._getDefaultHeaderContent = function (row, section) {
if (section === void 0) { section = 0; }
var label = require("ui/label");
var lbl = new label.Label();
lbl.bind({
targetProperty: "text",
sourceProperty: "$value"
});
return lbl;
};
SectionedListView.prototype._onItemsPropertyChanged = function (data) {
var observableArray = require("data/observable-array");
var weakEvents = require("ui/core/weak-event-listener");
if (data.oldValue instanceof observable.Observable) {
weakEvents.removeWeakEventListener(data.oldValue, observableArray.ObservableArray.changeEvent, this._onItemsChanged, this);
}
if (data.newValue instanceof observable.Observable) {
weakEvents.addWeakEventListener(data.newValue, observableArray.ObservableArray.changeEvent, this._onItemsChanged, this);
}
this.refresh();
};
SectionedListView.prototype._onItemsChanged = function (args) {
this.refresh();
};
SectionedListView.prototype._onRowHeightPropertyChanged = function (data) {
this.refresh();
};
SectionedListView.prototype._propagateInheritableProperties = function (view) {
};
SectionedListView.itemLoadingEvent = "itemLoading";
SectionedListView.headerLoadingEvent = "headerLoading";
SectionedListView.itemTapEvent = "itemTap";
SectionedListView.loadMoreItemsEvent = "loadMoreItems";
SectionedListView.separatorColorProperty = new dependencyObservable.Property(SEPARATORCOLOR, LISTVIEW, new proxy.PropertyMetadata(undefined));
SectionedListView.itemsProperty = new dependencyObservable.Property(ITEMS, LISTVIEW, new proxy.PropertyMetadata(undefined, dependencyObservable.PropertyMetadataSettings.AffectsLayout, onItemsPropertyChanged));
SectionedListView.itemTemplateProperty = new dependencyObservable.Property(ITEMTEMPLATE, LISTVIEW, new proxy.PropertyMetadata(undefined, dependencyObservable.PropertyMetadataSettings.AffectsLayout, onItemTemplatePropertyChanged));
SectionedListView.headerTemplateProperty = new dependencyObservable.Property(HEADER_TEMPLATE, LISTVIEW, new proxy.PropertyMetadata(undefined, dependencyObservable.PropertyMetadataSettings.AffectsLayout, onItemTemplatePropertyChanged));
SectionedListView.isScrollingProperty = new dependencyObservable.Property(ISSCROLLING, LISTVIEW, new proxy.PropertyMetadata(false, dependencyObservable.PropertyMetadataSettings.None));
SectionedListView.rowHeightProperty = new dependencyObservable.Property(ROWHEIGHT, LISTVIEW, new proxy.PropertyMetadata(-1, dependencyObservable.PropertyMetadataSettings.AffectsLayout, onRowHeightPropertyChanged));
SectionedListView.headerHeightProperty = new dependencyObservable.Property(HEADER_HEIGHT, LISTVIEW, new proxy.PropertyMetadata(28, dependencyObservable.PropertyMetadataSettings.AffectsLayout, onRowHeightPropertyChanged));
return SectionedListView;
}(view.View));
exports.SectionedListView = SectionedListView;