From 08f22fb82b70df35081667a608ffc510084adb1b Mon Sep 17 00:00:00 2001 From: "Manu Mtz.-Almeida" Date: Wed, 29 Jun 2016 17:35:33 +0200 Subject: [PATCH] docs(reorder): adds docs and demo for reorder directive --- demos/item-reorder/avatar-cher.png | Bin 0 -> 14985 bytes demos/item-reorder/avatar-dionne.png | Bin 0 -> 15160 bytes demos/item-reorder/avatar-murray.png | Bin 0 -> 14883 bytes demos/item-reorder/index.ts | 88 +++++++++++++++++ demos/item-reorder/main.html | 50 ++++++++++ src/components/item/item-reorder-gesture.ts | 4 +- src/components/item/item-reorder.ts | 101 +++++++++++++++++++- src/components/item/item.ts | 4 +- src/components/tabs/test/basic/index.ts | 4 +- src/config/directives.ts | 4 +- 10 files changed, 242 insertions(+), 13 deletions(-) create mode 100644 demos/item-reorder/avatar-cher.png create mode 100644 demos/item-reorder/avatar-dionne.png create mode 100644 demos/item-reorder/avatar-murray.png create mode 100644 demos/item-reorder/index.ts create mode 100644 demos/item-reorder/main.html diff --git a/demos/item-reorder/avatar-cher.png b/demos/item-reorder/avatar-cher.png new file mode 100644 index 0000000000000000000000000000000000000000..a06fff35906a8eb0142b682ec4b48c859be2bbba GIT binary patch literal 14985 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 Vnoy{0qFMj|002ovPDHLkV1i_~jtBq% literal 0 HcmV?d00001 diff --git a/demos/item-reorder/index.ts b/demos/item-reorder/index.ts new file mode 100644 index 0000000000..940b1e9ff1 --- /dev/null +++ b/demos/item-reorder/index.ts @@ -0,0 +1,88 @@ +import { Component, ViewEncapsulation } from '@angular/core'; + +import { ionicBootstrap, ItemSliding, NavController, Toast, reorderArray } from 'ionic-angular'; + +@Component({ + templateUrl: 'main.html', + encapsulation: ViewEncapsulation.None +}) +class ApiDemoPage { + chats: any[]; + editButton: string = 'Reorder'; + editing: boolean = false; + + constructor(private nav: NavController) { + this.chats = [ + { + img: './avatar-cher.png', + name: 'Cher', + message: 'Ugh. As if.', + time: '9:38 pm' + }, { + img: './avatar-dionne.png', + name: 'Dionne', + message: 'Mr. Hall was way harsh.', + time: '8:59 pm' + }, { + img: './avatar-murray.png', + name: 'Murray', + message: 'Excuse me, "Ms. Dione."', + time: 'Wed' + }, + { + img: './avatar-cher.png', + name: 'Cher', + message: 'Ugh. As if.', + time: '9:38 pm' + }, { + img: './avatar-dionne.png', + name: 'Dionne', + message: 'Mr. Hall was way harsh.', + time: '8:59 pm' + }, { + img: './avatar-murray.png', + name: 'Murray', + message: 'Excuse me, "Ms. Dione."', + time: 'Wed' + }, + { + img: './avatar-cher.png', + name: 'Cher', + message: 'Ugh. As if.', + time: '9:38 pm' + }, { + img: './avatar-dionne.png', + name: 'Dionne', + message: 'Mr. Hall was way harsh.', + time: '8:59 pm' + }, { + img: './avatar-murray.png', + name: 'Murray', + message: 'Excuse me, "Ms. Dione."', + time: 'Wed' + }]; + } + + toggleEdit() { + this.editing = !this.editing; + if (this.editing) { + this.editButton = 'Done'; + } else { + this.editButton = 'Reorder'; + } + } + + reorderData(indices: any) { + this.chats = reorderArray(this.chats, indices); + } +} + + +@Component({ + template: '' +}) +class ApiDemoApp { + root = ApiDemoPage; +} + +ionicBootstrap(ApiDemoApp); diff --git a/demos/item-reorder/main.html b/demos/item-reorder/main.html new file mode 100644 index 0000000000..5f71730195 --- /dev/null +++ b/demos/item-reorder/main.html @@ -0,0 +1,50 @@ + + + + Item Reorder + + + + + + + + + + + + + Chats + + + + + + + + +

{{chat.name}}

+

{{chat.message}}

+ + {{chat.time}} + +
+ +
+
+ +
+ + diff --git a/src/components/item/item-reorder-gesture.ts b/src/components/item/item-reorder-gesture.ts index 467d39723d..4962807cdb 100644 --- a/src/components/item/item-reorder-gesture.ts +++ b/src/components/item/item-reorder-gesture.ts @@ -1,5 +1,5 @@ import {Item} from './item'; -import {Reorder} from '../item/item-reorder'; +import {ItemReorder} from '../item/item-reorder'; import {UIEventManager} from '../../util/ui-event-manager'; import {closest, Coordinates, pointerCoord, CSS, nativeRaf} from '../../util/dom'; @@ -25,7 +25,7 @@ export class ItemReorderGesture { private events: UIEventManager = new UIEventManager(false); - constructor(public list: Reorder) { + constructor(public list: ItemReorder) { let element = this.list.getNativeElement(); this.events.pointerEvents(element, this.onDragStart.bind(this), diff --git a/src/components/item/item-reorder.ts b/src/components/item/item-reorder.ts index dcbbda9e45..03b2b4fd2a 100644 --- a/src/components/item/item-reorder.ts +++ b/src/components/item/item-reorder.ts @@ -6,13 +6,104 @@ import { Item } from './item'; import { ItemReorderGesture } from '../item/item-reorder-gesture'; import { isTrueProperty } from '../../util/util'; -export interface ReorderIndexes { + +export interface ReorderIndices { from: number; to: number; } /** - * @private + * @name ItemReorder + * @description + * ItemReorder can be used with `ion-list` or `ion-item-group` to provide a visual + * drap and drop interface for reordering of items in a list. + * + * ## Usage + * It is very important to follow the rules below in order to integrate reordering in your app. + * + * ### All items in a reorder list have to be part of the same set + * You can not have non-reorderable and reorderable items in the same list or item's group. + * + * ```html + * + * {{item.name}} + * ``` + * + * **GOOD!** + * + * ```html + * + * HEADER + * {{item.name}} + * + * ``` + * + * **BAD!** There is a `ion-list-header` that is not part of the same set. + * + * In order to mix different sets of items, `ion-item-group` has to be used: + * + * ```html + * + * HEADER + * + * {{item.name}} + * + * + * ``` + * + * **GOOD!** It's important to notice that in this case, the `[reorder]` directive it applied to `ion-item-group` instead of + * `ion-list`. This way we are able to have a list-header and satisfy the first gold rule at the same time. + * + * + * ### Implement a reorder function + * + * Once the user drags an item and drops it in the new position, this directive fires the `(ionItemReorder)` + * event providing the initial index (from) and the new index (to) of the reordered item. + * For example, if an user drags the first item to the 5th position, `(ionItemReorder)` would fire + * `{from:0, to: 4}` (note that the indices start at zero). + * + * In order to integrate reordering in your app, it's a MUST to implement your own function that takes this indices and perform + * the actual reordering of the data models. Here's is an example of how this can be done: + * + * @usage + * + * ```ts + * class E2EPage { + * items = []; + * + * constructor() { + * for (let x = 0; x < 5; x++) { + * this.items.push(x); + * } + * } + * + * reorderItem(indices) { + * let element = this.items[indices.from]; + * this.items.splice(indices.from, 1); + * this.items.splice(indices.to, 0, element); + * + * // For maximum convenience, ionic already provides an helper function: + * // import { reorderArray } from 'ionic-angular'; + * // this.item = reorderArray(this.item, indices); + * } + * } + * ``` + * + * ```html + * + * HEADER + * + * Number: {{item}} + * + * + * ``` + * + * + * @demo /docs/v2/demos/item-reorder/ + * @see {@link /docs/v2/components#lists List Component Docs} + * @see {@link ../../list/List List API Docs} + * @see {@link ../Item Item API Docs} */ @Directive({ selector: '[reorder]', @@ -20,13 +111,13 @@ export interface ReorderIndexes { '[class.reorder-enabled]': '_enableReorder', } }) -export class Reorder { +export class ItemReorder { private _enableReorder: boolean = false; private _reorderGesture: ItemReorderGesture; private _lastToIndex: number = -1; private _element: HTMLElement; - @Output() ionItemReorder: EventEmitter = new EventEmitter(); + @Output() ionItemReorder: EventEmitter = new EventEmitter(); constructor( elementRef: ElementRef, @@ -174,7 +265,7 @@ export class Reorder { selector: 'ion-reorder', template: `` }) -export class ItemReorder { +export class Reorder { constructor( @Inject(forwardRef(() => Item)) private item: Item, private elementRef: ElementRef) { diff --git a/src/components/item/item.ts b/src/components/item/item.ts index 5ff175b471..c98f66f248 100644 --- a/src/components/item/item.ts +++ b/src/components/item/item.ts @@ -3,7 +3,7 @@ import { ChangeDetectionStrategy, Component, ContentChild, ContentChildren, Dire import { Button } from '../button/button'; import { Form } from '../../util/form'; import { Icon } from '../icon/icon'; -import { ItemReorder } from '../item/item-reorder'; +import { Reorder } from '../item/item-reorder'; import { Label } from '../label/label'; @@ -281,7 +281,7 @@ import { Label } from '../label/label'; '' + '' + '', - directives: [forwardRef(() => ItemReorder)], + directives: [forwardRef(() => Reorder)], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, }) diff --git a/src/components/tabs/test/basic/index.ts b/src/components/tabs/test/basic/index.ts index a8dbfdeb75..03428939db 100644 --- a/src/components/tabs/test/basic/index.ts +++ b/src/components/tabs/test/basic/index.ts @@ -248,11 +248,11 @@ export class TabsPage { root3 = Tab3; onChange(ev: Tab) { - console.log("Changed tab", ev); + console.log('Changed tab', ev); } onSelect(ev: Tab) { - console.log("Selected tab", ev); + console.log('Selected tab', ev); } } diff --git a/src/config/directives.ts b/src/config/directives.ts index 573d656924..fc9e01b3c1 100644 --- a/src/config/directives.ts +++ b/src/config/directives.ts @@ -18,7 +18,7 @@ import { Tabs } from '../components/tabs/tabs'; import { Tab } from '../components/tabs/tab'; import { List, ListHeader } from '../components/list/list'; import { Item, ItemContent } from '../components/item/item'; -import { Reorder } from '../components/item/item-reorder'; +import { ItemReorder } from '../components/item/item-reorder'; import { ItemSliding, ItemOptions } from '../components/item/item-sliding'; import { VirtualScroll } from '../components/virtual-scroll/virtual-scroll'; import { VirtualItem, VirtualHeader, VirtualFooter } from '../components/virtual-scroll/virtual-item'; @@ -145,7 +145,7 @@ export const IONIC_DIRECTIVES: any[] = [ ItemContent, ItemSliding, ItemOptions, - Reorder, + ItemReorder, VirtualScroll, VirtualItem, VirtualHeader,