tns-template-master-detail-kinvey-ts
Version:
Master-detail interface to display collection of items from Kinvey and inspect and edit selected item properties.
67 lines (53 loc) • 2 kB
text/typescript
import { Observable } from "tns-core-modules/data/observable";
import { carClassList, carDoorList, carSeatList, carTransmissionList } from "./constants";
export class ListSelectorViewModel extends Observable {
private _items: Array<any>;
private _tag: string;
private _selectedIndex: number;
// tslint:disable-next-line:ban-types
constructor(context: any, private _closeCallback: Function) {
super();
this._tag = context.tag;
const protoItems = this.resolveProtoItems();
this._selectedIndex = protoItems.indexOf(context.selectedValue);
this._items = [];
for (let i = 0; i < protoItems.length; i++) {
this._items.push({
value: protoItems[i],
isSelected: i === this._selectedIndex ? true : false
});
}
}
selectItem(newSelectedIndex: number): void {
const oldSelectedItem = this._items[this._selectedIndex];
oldSelectedItem.isSelected = false;
const newSelectedItem = this._items[newSelectedIndex];
newSelectedItem.isSelected = true;
this._selectedIndex = newSelectedIndex;
this._closeCallback(newSelectedItem.value);
}
cancelSelection(): void {
this._closeCallback(null);
}
get items(): Array<any> {
return this._items;
}
get title(): string {
return `Select Car ${this.capitalizeFirstLetter(this._tag)}`;
}
private resolveProtoItems(): Array<any> {
switch (this._tag) {
case "class":
return carClassList;
case "doors":
return carDoorList;
case "seats":
return carSeatList;
case "transmission":
return carTransmissionList;
}
}
private capitalizeFirstLetter(str: string): string {
return str.charAt(0).toUpperCase() + str.slice(1);
}
}