From ec24c5a96f9c1f51a3b3da1a893555a641109abf Mon Sep 17 00:00:00 2001 From: Alexander Vakrilov Date: Thu, 9 Aug 2018 18:19:56 +0300 Subject: [PATCH] fix(list-view): Layout list-view items on request (#6159) * test: list items relayout example * fix(list-view): Layout list-view items on request * refactor(tests): refactor list-view tests imports --- .../ui-tests-app/list-view/item-re-layout.css | 20 ++ .../ui-tests-app/list-view/item-re-layout.ts | 21 ++ .../ui-tests-app/list-view/item-re-layout.xml | 15 ++ apps/app/ui-tests-app/list-view/main-page.ts | 1 + tests/app/ui/list-view/list-view-tests.ts | 215 +++++++++++------- .../ui/list-view/list-view.ios.ts | 38 +++- 6 files changed, 221 insertions(+), 89 deletions(-) create mode 100644 apps/app/ui-tests-app/list-view/item-re-layout.css create mode 100644 apps/app/ui-tests-app/list-view/item-re-layout.ts create mode 100644 apps/app/ui-tests-app/list-view/item-re-layout.xml diff --git a/apps/app/ui-tests-app/list-view/item-re-layout.css b/apps/app/ui-tests-app/list-view/item-re-layout.css new file mode 100644 index 000000000..0cb4471e5 --- /dev/null +++ b/apps/app/ui-tests-app/list-view/item-re-layout.css @@ -0,0 +1,20 @@ +Label { + margin: 6; + padding: 4; +} + +.unselected { + border-width: 4; + border-color: gray; + border-radius: 10; + background: white; + color: gray +} + +.selected { + border-width: 4; + border-color: blue; + border-radius: 10; + background: lightcoral; + color: blue; +} \ No newline at end of file diff --git a/apps/app/ui-tests-app/list-view/item-re-layout.ts b/apps/app/ui-tests-app/list-view/item-re-layout.ts new file mode 100644 index 000000000..386fd56b7 --- /dev/null +++ b/apps/app/ui-tests-app/list-view/item-re-layout.ts @@ -0,0 +1,21 @@ +import { fromObject } from "tns-core-modules/data/observable"; + +export function loaded(args) { + var items = []; + + for (let i = 0; i < 100; i++) { + items.push(fromObject({ + text: "<" + i + ">", + selected: !!!(i % 5) + })); + } + args.object.bindingContext = { items: items }; +} + +export function toggle(args) { + console.log("toggle : ") + let context = args.object.bindingContext; + console.dir(context); + context.set("selected", !context.selected); + // args.object.requestLayout(); +} \ No newline at end of file diff --git a/apps/app/ui-tests-app/list-view/item-re-layout.xml b/apps/app/ui-tests-app/list-view/item-re-layout.xml new file mode 100644 index 000000000..eea34ee18 --- /dev/null +++ b/apps/app/ui-tests-app/list-view/item-re-layout.xml @@ -0,0 +1,15 @@ + + + + + + + + + + \ No newline at end of file diff --git a/apps/app/ui-tests-app/list-view/main-page.ts b/apps/app/ui-tests-app/list-view/main-page.ts index cae03b6e9..e467105d8 100644 --- a/apps/app/ui-tests-app/list-view/main-page.ts +++ b/apps/app/ui-tests-app/list-view/main-page.ts @@ -19,6 +19,7 @@ export function loadExamples() { examples.set("scrolling-and-sizing", "list-view/scrolling-and-sizing"); examples.set("row-height", "list-view/row-height"); examples.set("width-percent", "list-view/width-percent"); + examples.set("item-re-layout", "list-view/item-re-layout"); return examples; } diff --git a/tests/app/ui/list-view/list-view-tests.ts b/tests/app/ui/list-view/list-view-tests.ts index f33a18de3..400b8c488 100644 --- a/tests/app/ui/list-view/list-view-tests.ts +++ b/tests/app/ui/list-view/list-view-tests.ts @@ -1,22 +1,22 @@ -import * as testModule from "../../ui-test"; -import * as TKUnit from "../../TKUnit"; -import * as app from "tns-core-modules/application"; -import * as observable from "tns-core-modules/data/observable"; -import * as types from "tns-core-modules/utils/types"; -import * as platform from "tns-core-modules/platform"; -import * as utils from "tns-core-modules/utils/utils"; -import { Label } from "tns-core-modules/ui/label"; +import * as TKUnit from "../../TKUnit"; import * as helper from "../helper"; +import { UITest } from "../../ui-test"; +import { getResources as appGetResources } from "tns-core-modules/application"; +import { Observable, EventData } from "tns-core-modules/data/observable"; +import { isFunction, isUndefined } from "tns-core-modules/utils/types"; +import { isAndroid, isIOS } from "tns-core-modules/platform"; +import { GC } from "tns-core-modules/utils/utils"; import { Page } from "tns-core-modules/ui/page"; -import { View, KeyedTemplate, isIOS } from "tns-core-modules/ui/core/view"; +import { View, KeyedTemplate } from "tns-core-modules/ui/core/view"; +import { MyButton, MyStackLayout } from "../layouts/layout-helper"; // >> article-require-listview-module -import * as listViewModule from "tns-core-modules/ui/list-view"; +import { ListView, ItemEventData } from "tns-core-modules/ui/list-view"; // << article-require-listview-module // >> article-require-modules-listview -import * as observableArray from "tns-core-modules/data/observable-array"; -import * as labelModule from "tns-core-modules/ui/label"; +import { ObservableArray } from "tns-core-modules/data/observable-array"; +import { Label } from "tns-core-modules/ui/label"; // << article-require-modules-listview // >> article-item-tap @@ -46,22 +46,22 @@ for (var i = 0; i < 100; i++) { MANY_ITEMS.push(i); } -export class ListViewTest extends testModule.UITest { +export class ListViewTest extends UITest { - public create(): listViewModule.ListView { - return new listViewModule.ListView(); + public create(): ListView { + return new ListView(); } public test_recycling() { - helper.nativeView_recycling_test(() => new listViewModule.ListView()); + helper.nativeView_recycling_test(() => new ListView()); } public test_default_TNS_values() { // >> article-create-listview - var listView = new listViewModule.ListView(); + var listView = new ListView(); // << article-create-listview - TKUnit.assert(types.isUndefined(listView.items), "Default listView.items should be undefined"); + TKUnit.assert(isUndefined(listView.items), "Default listView.items should be undefined"); } public test_set_items_to_array_loads_all_items(done) { @@ -71,21 +71,21 @@ export class ListViewTest extends testModule.UITest { // >> article-listview-array var colors = ["red", "green", "blue"]; listView.items = colors; - listView.on(listViewModule.ListView.itemLoadingEvent, function (args: listViewModule.ItemEventData) { + listView.on(ListView.itemLoadingEvent, function (args: ItemEventData) { if (!args.view) { // Create label if it is not already created. - args.view = new labelModule.Label(); + args.view = new Label(); } - (args.view).text = colors[args.index]; + (