Skip to content

Commit 63f728f

Browse files
AmitMYmanucorporat
authored andcommitted
feat(item-reorder): add side support (ionic-team#11642)
fixes ionic-team#11637
1 parent 6193560 commit 63f728f

File tree

5 files changed

+43
-19
lines changed

5 files changed

+43
-19
lines changed

src/components/item/item-reorder-gesture.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ export class ItemReorderGesture {
134134
}
135135

136136
private itemForCoord(coord: PointerCoordinates): HTMLElement {
137-
const sideOffset = this.plt.isRTL ? 100 : -100;
137+
const sideOffset = this.reorderList._isStart === this.plt.isRTL ? -100 : 100;
138138
const x = this.offset.x + sideOffset;
139139
const y = coord.y;
140140
const element = this.plt.getElementFromPoint(x, y);
@@ -167,6 +167,7 @@ const SCROLL_JUMP = 10;
167167
const ITEM_REORDER_ACTIVE = 'reorder-active';
168168

169169
export interface ItemReorderGestureDelegate {
170+
_isStart: boolean;
170171
getNativeElement: () => any;
171172
_reorderPrepare: () => void;
172173
_scrollContent: (scrollPosition: number) => number;

src/components/item/item-reorder.scss

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
@import "../../themes/ionic.globals";
22

3+
$reorder-initial-transform: 160% !default;
4+
35
// Item reorder
46
// --------------------------------------------------
57

68
ion-reorder {
7-
@include transform(translate3d(160%, 0, 0));
9+
@include transform(translate3d($reorder-initial-transform, 0, 0));
810

911
display: none;
1012

@@ -18,13 +20,18 @@ ion-reorder {
1820
font-size: 1.7em;
1921
opacity: .25;
2022

21-
2223
transition: transform 140ms ease-in;
2324

2425
pointer-events: all;
2526
touch-action: manipulation;
2627
}
2728

29+
.reorder-side-start ion-reorder {
30+
@include transform(translate3d(-$reorder-initial-transform, 0, 0));
31+
32+
order: -1;
33+
}
34+
2835
ion-reorder ion-icon {
2936
pointer-events: none;
3037
}

src/components/item/item-reorder.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,12 +142,14 @@ export class ReorderIndexes {
142142
host: {
143143
'[class.reorder-enabled]': '_enableReorder',
144144
'[class.reorder-visible]': '_visibleReorder',
145+
'[class.reorder-side-start]': '_isStart'
145146
}
146147
})
147148
export class ItemReorder implements ItemReorderGestureDelegate {
148149

149150
_enableReorder: boolean = false;
150151
_visibleReorder: boolean = false;
152+
_isStart: boolean = false;
151153
_reorderGesture: ItemReorderGesture;
152154
_lastToIndex: number = -1;
153155
_element: HTMLElement;
@@ -158,6 +160,14 @@ export class ItemReorder implements ItemReorderGestureDelegate {
158160
*/
159161
@Output() ionItemReorder: EventEmitter<ReorderIndexes> = new EventEmitter<ReorderIndexes>();
160162

163+
/**
164+
* @input {string} Which side of the view the ion-reorder should be placed. Default `"end"`.
165+
*/
166+
@Input('side')
167+
set side(side: 'start' | 'end') {
168+
this._isStart = side === 'start';
169+
}
170+
161171
constructor(
162172
private _plt: Platform,
163173
private _dom: DomController,

src/components/item/test/reorder/pages/root-page/root-page.html

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,24 +13,30 @@
1313

1414
<ion-list [reorder]="isReordering" (ionItemReorder)="reorder($event)">
1515
<button ion-item *ngFor="let item of items" (click)="clickedButton(item)"
16-
[style.background]="'rgb('+(255-item*4)+','+(255-item*4)+','+(255-item*4)+')'"
17-
[style.min-height]="item*2+35+'px'">
16+
[style.background]="'rgb('+(255-item*4)+','+(255-item*4)+','+(255-item*4)+')'"
17+
[style.min-height]="item*2+35+'px'">
1818
{{item}}
1919
</button>
2020
</ion-list>
2121

22-
<ion-list [reorder]="isReordering" (ionItemReorder)="$event.applyTo(items)">
23-
<ion-item-sliding *ngFor="let item of items">
24-
<button ion-item (click)="clickedButton(item)">
25-
<h2>Sliding item {{item}}</h2>
26-
</button>
27-
<ion-item-options side="right" icon-start>
28-
<button ion-button color='danger'>
29-
<ion-icon name="trash"></ion-icon>
30-
Remove
31-
</button>
32-
</ion-item-options>
33-
</ion-item-sliding>
34-
</ion-list>
22+
<div *ngFor="let side of ['start', 'end']">
23+
<ion-list>
24+
<ion-list-header>{{side}}</ion-list-header>
25+
<ion-item-group [reorder]="isReordering" (ionItemReorder)="$event.applyTo(items)" [side]="side">
26+
<ion-item-sliding *ngFor="let item of items">
27+
<button ion-item (click)="clickedButton(item)">
28+
<h2>Sliding item {{item}}</h2>
29+
<div item-end>right</div>
30+
</button>
31+
<ion-item-options side="right" icon-start>
32+
<button ion-button color='danger'>
33+
<ion-icon name="trash"></ion-icon>
34+
Remove
35+
</button>
36+
</ion-item-options>
37+
</ion-item-sliding>
38+
</ion-item-group>
39+
</ion-list>
40+
</div>
3541

3642
</ion-content>

src/components/item/test/reorder/pages/root-page/root-page.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export class RootPage {
99
isReordering: boolean = false;
1010

1111
constructor() {
12-
let nu = 9;
12+
let nu = 5;
1313
for (let i = 0; i < nu; i++) {
1414
this.items.push(i);
1515
}

0 commit comments

Comments
 (0)