Skip to content

Commit 6c131af

Browse files
committed
fix(swipemenu): multiple fixes
1 parent ac695e5 commit 6c131af

File tree

1 file changed

+42
-15
lines changed

1 file changed

+42
-15
lines changed

src/swipemenu/index.ts

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ declare module '@nativescript-community/ui-collectionview' {
1818
}
1919

2020
let mixinInstalled = false;
21-
class CollectionViewWithSwipeMenu extends CollectionView {
21+
export class CollectionViewWithSwipeMenu extends CollectionView {
2222
public static swipeMenuOpenEvent = 'swipeMenuOpen';
2323
public static swipeMenuCloseEvent = 'swipeMenuClose';
2424
onlyOneMenuOpened;
@@ -32,19 +32,37 @@ class CollectionViewWithSwipeMenu extends CollectionView {
3232
thisItems[index] = item;
3333
}
3434
}
35+
// getItemSourceAtIndex(index: number) {
36+
// const result = (this.items as ItemsSource).getItem(index);
37+
// if (result) {
38+
// result.startingSide = result.startingSide || null;
39+
// }
40+
// return result;
41+
// }
42+
// getItemArrayAtIndex(index: number) {
43+
// const result = this.items[index];
44+
// if (result) {
45+
// result.startingSide = result.startingSide || null;
46+
// }
47+
// return result;
48+
// }
3549
async closeCurrentMenu() {
3650
try {
3751
const openedIndex = this.openedDrawerIndex;
3852
this.openedDrawerIndex = -1;
39-
let view = this.getViewForItemAtIndex(openedIndex);
53+
const oldItem = this.items ? this.getItemAtIndex(openedIndex) : null;
54+
if (!oldItem) {
55+
return;
56+
}
57+
const view = this.getViewForItemAtIndex(openedIndex);
58+
let drawer = view;
4059
// console.log('closeCurrentMenu', openedIndex, view, view.bindingContext);
41-
if (view instanceof ContentView) {
42-
view = view.content;
60+
if (drawer instanceof ContentView) {
61+
drawer = drawer.content;
4362
}
44-
if (view instanceof Drawer) {
45-
view.close();
63+
if (drawer instanceof Drawer) {
64+
drawer.close();
4665
} else {
47-
const oldItem = this.getItemAtIndex(openedIndex);
4866
// console.log('closeCurrentMenu', view, openedIndex, oldItem, new Error().stack);
4967
oldItem.startingSide = null;
5068
// this.notifyForItemAtIndex(CollectionViewBase.itemLoadingEvent, view, openedIndex, oldItem);
@@ -58,8 +76,15 @@ class CollectionViewWithSwipeMenu extends CollectionView {
5876
} finally {
5977
}
6078
}
79+
80+
getCellView(view: View) {
81+
if (view && view.parent && view.parent instanceof ContentView && view.parent.__SvelteComponent__) {
82+
view = view.parent;
83+
}
84+
return view;
85+
}
6186
async onItemMenuStart(event) {
62-
const view = event.object;
87+
const view = this.getCellView(event.object);
6388
const bindingContext = view.bindingContext;
6489
const index = (this.items as any).findIndex((i) => i === bindingContext);
6590
// console.error('onItemMenuStart', index, bindingContext, view, this.openedDrawerIndex);
@@ -69,35 +94,35 @@ class CollectionViewWithSwipeMenu extends CollectionView {
6994
this.openedDrawerIndex = index;
7095
}
7196
onItemMenuOpened(event) {
72-
const view = event.object;
97+
const view = this.getCellView(event.object);
7398
const bindingContext = view.bindingContext;
7499
const index = (this.items as any).findIndex((i) => i === bindingContext);
75100
// console.error('onItemMenuOpened', index, bindingContext, view, this.openedDrawerIndex);
76101
if (this.openedDrawerIndex >= 0 && this.openedDrawerIndex !== index) {
77102
this.closeCurrentMenu();
78103
}
79104
this.openedDrawerIndex = index;
80-
bindingContext.startingSide = view.startingSide = 'left';
105+
bindingContext.startingSide = 'left';
106+
this.notifyForItemAtIndex(CollectionViewWithSwipeMenu.swipeMenuOpenEvent, view, index, bindingContext);
81107
this.notifyForItemAtIndex(CollectionViewBase.itemLoadingEvent, view, index, bindingContext);
82-
this.notifyForItemAtIndex(CollectionViewWithSwipeMenu.swipeMenuOpenEvent, view, index, bindingContext)
83108
}
84109
onItemMenuClosed(event) {
85-
const view = event.object;
110+
const view = this.getCellView(event.object);
86111
const bindingContext = view.bindingContext;
87112
const index = (this.items as any).findIndex((i) => i === bindingContext);
88113
// console.error('onItemMenuClosed', index, bindingContext, view, this.openedDrawerIndex);
89114
if (bindingContext.startingSide !== null) {
90115
if (index === this.openedDrawerIndex) {
91116
this.openedDrawerIndex = -1;
92117
}
93-
bindingContext.startingSide = view.startingSide = null;
118+
bindingContext.startingSide = null;
119+
this.notifyForItemAtIndex(CollectionViewWithSwipeMenu.swipeMenuCloseEvent, view, index, bindingContext);
94120
this.notifyForItemAtIndex(CollectionViewBase.itemLoadingEvent, view, index, bindingContext);
95-
this.notifyForItemAtIndex(CollectionViewWithSwipeMenu.swipeMenuCloseEvent, view, index, bindingContext)
96121
}
97122
}
98123
}
99124
export function overrideCollectionView() {
100-
applyMixins(CollectionView, [CollectionViewWithSwipeMenu]);
125+
applyMixins(CollectionView, [CollectionViewWithSwipeMenu], { override: true });
101126
}
102127

103128
@CSSType('SwipeMenu')
@@ -109,6 +134,8 @@ export class SwipeMenu extends Drawer {
109134
this.rightOpenedDrawerAllowDraging = true;
110135
this.topOpenedDrawerAllowDraging = true;
111136
this.bottomOpenedDrawerAllowDraging = true;
137+
// this.openAnimationDuration = 100;
138+
// this.closenAnimationDuration = 100;
112139
this.iosIgnoreSafeArea = true;
113140
this.leftDrawerMode = 'under';
114141
this.rightDrawerMode = 'under';

0 commit comments

Comments
 (0)