Files
NativeScript/e2e/ui-tests-app/app/main-page-view-model.ts
Alexander Vakrilov cc97a16800 feat: Scoped Packages (#7911)
* 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
2019-10-17 00:45:33 +03:00

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");
}
}