mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-16 11:42:04 +08:00

* chore: move tns-core-modules to nativescript-core * chore: preparing compat generate script * chore: add missing definitions * chore: no need for http-request to be private * chore: packages chore * test: generate tests for tns-core-modules * chore: add anroid module for consistency * chore: add .npmignore * chore: added privateModulesWhitelist * chore(webpack): added bundle-entry-points * chore: scripts * chore: tests changed to use @ns/core * test: add scoped-packages test project * test: fix types * test: update test project * chore: build scripts * chore: update build script * chore: npm scripts cleanup * chore: make the compat pgk work with old wp config * test: generate diff friendly tests * chore: create barrel exports * chore: move files after rebase * chore: typedoc config * chore: compat mode * chore: review of barrels * chore: remove tns-core-modules import after rebase * chore: dev workflow setup * chore: update developer-workflow * docs: experiment with API extractor * chore: api-extractor and barrel exports * chore: api-extractor configs * chore: generate d.ts rollup with api-extractor * refactor: move methods inside Frame * chore: fic tests to use Frame static methods * refactor: create Builder class * refactor: use Builder class in tests * refactor: include Style in ui barrel * chore: separate compat build script * chore: fix tslint errors * chore: update NATIVESCRIPT_CORE_ARGS * chore: fix compat pack * chore: fix ui-test-app build with linked modules * chore: Application, ApplicationSettings, Connectivity and Http * chore: export Trace, Profiling and Utils * refactor: Static create methods for ImageSource * chore: fix deprecated usages of ImageSource * chore: move Span and FormattedString to ui * chore: add events-args and ImageSource to index files * chore: check for CLI >= 6.2 when building for IOS * chore: update travis build * chore: copy Pod file to compat package * chore: update error msg ui-tests-app * refactor: Apply suggestions from code review Co-Authored-By: Martin Yankov <m.i.yankov@gmail.com> * chore: typings and refs * chore: add missing d.ts files for public API * chore: adress code review FB * chore: update api-report * chore: dev-workflow for other apps * chore: api update * chore: update api-report
134 lines
5.3 KiB
TypeScript
134 lines
5.3 KiB
TypeScript
import { ObservableArray } from "tns-core-modules/data/observable-array";
|
|
import { TestExample } from "./test-example-model";
|
|
import { TestPageMainViewModel } from "./test-page-main-view-model";
|
|
import { WrapLayout } from "tns-core-modules/ui/layouts/wrap-layout";
|
|
import { ListView } from "tns-core-modules/ui/list-view";
|
|
|
|
export class MainPageViewModel extends TestPageMainViewModel {
|
|
|
|
private _exampleName: string;
|
|
private _filteredListOfExamples: ObservableArray<TestExample>;
|
|
public static ALL_EXAMPLES: ObservableArray<TestExample>;
|
|
public static _examplesDictionary: Map<string, TestExample>;
|
|
|
|
constructor(buttonsPanel: WrapLayout, examples: Map<string, string>) {
|
|
super(buttonsPanel, examples);
|
|
if (MainPageViewModel.ALL_EXAMPLES === undefined || MainPageViewModel.ALL_EXAMPLES.length === 0) {
|
|
MainPageViewModel.ALL_EXAMPLES = new ObservableArray<TestExample>();
|
|
MainPageViewModel._examplesDictionary = new Map<string, TestExample>();
|
|
this._filteredListOfExamples = new ObservableArray<TestExample>();
|
|
this.loadFilteredListOfExamplesRecursive(this._examples);
|
|
this.getFilteredExamplesContainer().visibility = "hidden";
|
|
}
|
|
this.filterListView(this.exampleName);
|
|
this.toggleExamplePanels(this.filteredListOfExamples);
|
|
}
|
|
|
|
get exampleName(): string {
|
|
return this._exampleName;
|
|
}
|
|
|
|
set exampleName(value: string) {
|
|
if (this._exampleName !== value) {
|
|
this._exampleName = value;
|
|
this.filterListView(value);
|
|
}
|
|
}
|
|
|
|
get filteredListOfExamples(): ObservableArray<TestExample> {
|
|
return this._filteredListOfExamples;
|
|
}
|
|
|
|
set filteredListOfExamples(array: ObservableArray<TestExample>) {
|
|
if (this._filteredListOfExamples !== array) {
|
|
this._filteredListOfExamples = array;
|
|
this.notifyPropertyChange("filteredListOfExamples", array);
|
|
this.toggleExamplePanels(array);
|
|
}
|
|
}
|
|
|
|
public static checkIfStringIsNullEmptyOrUndefined(value: string): boolean {
|
|
return value === "" || value === null || value === undefined;
|
|
}
|
|
|
|
public static stringContains(value: string, searchString: string): boolean {
|
|
return value.indexOf(searchString) >= 0;
|
|
}
|
|
|
|
public loadExampleFromTextField() {
|
|
super.loadExample(this.exampleName);
|
|
}
|
|
|
|
public loadExampleFromListView(example) {
|
|
let examplePath = this.filteredListOfExamples.getItem(example.index).path;
|
|
this.exampleName = examplePath;
|
|
if (MainPageViewModel.checkIfStringIsNullEmptyOrUndefined(this.exampleName)) {
|
|
return;
|
|
}
|
|
|
|
super.navigateToExample(this.exampleName);
|
|
}
|
|
|
|
private filterListView(value: string) {
|
|
if (!MainPageViewModel.checkIfStringIsNullEmptyOrUndefined(value)) {
|
|
let array = MainPageViewModel.ALL_EXAMPLES.filter((testExample, index, array) => {
|
|
return MainPageViewModel.stringContains(testExample.path.toLowerCase(), value.toLowerCase())
|
|
|| MainPageViewModel.stringContains(testExample.name.toLowerCase(), value.toLowerCase());
|
|
});
|
|
this.filteredListOfExamples = new ObservableArray(array);
|
|
} else {
|
|
this.filteredListOfExamples = null;
|
|
}
|
|
}
|
|
|
|
private checkIfExampleAlreadyExists(dictionary: Map<string, TestExample>, value: string): boolean {
|
|
if (dictionary.has(value)) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
private toggleExamplePanels(array: ObservableArray<TestExample>) {
|
|
let listView = this.getFilteredExamplesContainer();
|
|
if (array !== null && array !== undefined && array.length > 0) {
|
|
this.buttonsPanel.visibility = "hidden";
|
|
listView.visibility = "visible";
|
|
} else {
|
|
this.buttonsPanel.visibility = "visible";
|
|
listView.visibility = "hidden";
|
|
}
|
|
}
|
|
|
|
private loadFilteredListOfExamplesRecursive(examples: Map<string, string>) {
|
|
examples.forEach((value, key, map) => {
|
|
let requiredExample = value;
|
|
if (MainPageViewModel.stringContains(value, "main")) {
|
|
try {
|
|
let module = global.loadModule(requiredExample);
|
|
if (module.loadExamples !== undefined) {
|
|
var currentExamples = new Map<string, string>();
|
|
currentExamples = module.loadExamples();
|
|
currentExamples.forEach((v, key, map) => {
|
|
this.loadFilteredListOfExamplesRecursive(currentExamples);
|
|
});
|
|
}
|
|
} catch (error) {
|
|
console.log(error.message);
|
|
}
|
|
} else {
|
|
if (!this.checkIfExampleAlreadyExists(MainPageViewModel._examplesDictionary, value)) {
|
|
const testExample = new TestExample(key, value);
|
|
this.filteredListOfExamples.push(testExample);
|
|
MainPageViewModel.ALL_EXAMPLES.push(testExample);
|
|
MainPageViewModel._examplesDictionary.set(value, testExample);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
private getFilteredExamplesContainer() {
|
|
return <ListView>this.buttonsPanel.page.getViewById("filteredListOfExamplesListView");
|
|
}
|
|
}
|