diff --git a/core/src/components/reorder-group/reorder-group.tsx b/core/src/components/reorder-group/reorder-group.tsx
index c9deba6f20..918beebd99 100644
--- a/core/src/components/reorder-group/reorder-group.tsx
+++ b/core/src/components/reorder-group/reorder-group.tsx
@@ -153,7 +153,7 @@ export class ReorderGroup implements ComponentInterface {
const heights = this.cachedHeights;
heights.length = 0;
const el = this.el;
- const children: any = el.__children;
+ const children: any = el.__children || el.children;
if (!children || children.length === 0) {
return;
}
@@ -259,7 +259,7 @@ export class ReorderGroup implements ComponentInterface {
private completeReorder(listOrReorder?: boolean | any[]): any {
const selectedItemEl = this.selectedItemEl;
if (selectedItemEl && this.state === ReorderGroupState.Complete) {
- const children: any = this.el.__children;
+ const children: any = this.el.__children || this.el.children;
const len = children.length;
const toIndex = this.lastToIndex;
const fromIndex = indexForItem(selectedItemEl);
@@ -309,7 +309,7 @@ export class ReorderGroup implements ComponentInterface {
/********* DOM WRITE ********* */
private reorderMove(fromIndex: number, toIndex: number) {
const itemHeight = this.selectedItemHeight;
- const children: any = this.el.__children;
+ const children: any = this.el.__children || this.el.children;
for (let i = 0; i < children.length; i++) {
const style = (children[i] as any).style;
let value = '';
diff --git a/packages/angular/test/base/e2e/src/standalone/reorder-group.spec.ts b/packages/angular/test/base/e2e/src/standalone/reorder-group.spec.ts
new file mode 100644
index 0000000000..094d912d09
--- /dev/null
+++ b/packages/angular/test/base/e2e/src/standalone/reorder-group.spec.ts
@@ -0,0 +1,25 @@
+import { expect } from '@playwright/test';
+import { test } from '@playwright/test';
+import { dragElementBy } from '../../utils/drag-utils';
+
+test.describe('reorder-group: angular standalone', () => {
+ test('should reorder the items', async ({ page }) => {
+ await page.goto('/standalone/reorder-group');
+
+ // Get initial order
+ const initialItems = await page.locator('ion-item').allTextContents();
+ expect(initialItems).toEqual(['Item 1', 'Item 2', 'Item 3']);
+
+ const reorderGroup = page.locator('ion-reorder-group');
+
+ // Drag the first item down to move it to the end (below Item 3)
+ await dragElementBy(reorderGroup.locator('ion-reorder').first(), page, 0, 300);
+
+ // Wait for the reorder to complete
+ await page.waitForTimeout(500);
+
+ // Verify the new order - Item 1 should now be at the end
+ const finalItems = await page.locator('ion-item').allTextContents();
+ expect(finalItems).toEqual(['Item 2', 'Item 3', 'Item 1']);
+ });
+});
diff --git a/packages/angular/test/base/src/app/standalone/app-standalone/app.routes.ts b/packages/angular/test/base/src/app/standalone/app-standalone/app.routes.ts
index 8b267987eb..ae6ee66193 100644
--- a/packages/angular/test/base/src/app/standalone/app-standalone/app.routes.ts
+++ b/packages/angular/test/base/src/app/standalone/app-standalone/app.routes.ts
@@ -19,6 +19,7 @@ export const routes: Routes = [
{ path: 'providers', loadComponent: () => import('../providers/providers.component').then(c => c.ProvidersComponent) },
{ path: 'overlay-controllers', loadComponent: () => import('../overlay-controllers/overlay-controllers.component').then(c => c.OverlayControllersComponent) },
{ path: 'button', loadComponent: () => import('../button/button.component').then(c => c.ButtonComponent) },
+ { path: 'reorder-group', loadComponent: () => import('../reorder-group/reorder-group.component').then(c => c.ReorderGroupComponent) },
{ path: 'icon', loadComponent: () => import('../icon/icon.component').then(c => c.IconComponent) },
{ path: 'split-pane', redirectTo: '/standalone/split-pane/inbox', pathMatch: 'full' },
{
diff --git a/packages/angular/test/base/src/app/standalone/home-page/home-page.component.html b/packages/angular/test/base/src/app/standalone/home-page/home-page.component.html
index cc99a1439d..163e438d42 100644
--- a/packages/angular/test/base/src/app/standalone/home-page/home-page.component.html
+++ b/packages/angular/test/base/src/app/standalone/home-page/home-page.component.html
@@ -28,6 +28,11 @@
Icon Test
+
+
+ Reorder Group Test
+
+
diff --git a/packages/angular/test/base/src/app/standalone/reorder-group/reorder-group.component.ts b/packages/angular/test/base/src/app/standalone/reorder-group/reorder-group.component.ts
new file mode 100644
index 0000000000..528ee34302
--- /dev/null
+++ b/packages/angular/test/base/src/app/standalone/reorder-group/reorder-group.component.ts
@@ -0,0 +1,36 @@
+import { Component } from "@angular/core";
+import { IonItem, IonLabel, IonReorder, IonReorderGroup } from '@ionic/angular/standalone';
+import { ReorderEndCustomEvent } from "@ionic/angular";
+
+@Component({
+ selector: 'app-reorder-group',
+ template: `
+
+
+
+ Item 1
+
+
+
+ Item 2
+
+
+
+ Item 3
+
+
+ `,
+ standalone: true,
+ imports: [IonItem, IonLabel, IonReorder, IonReorderGroup]
+})
+export class ReorderGroupComponent {
+ onReorderEnd(event: ReorderEndCustomEvent) {
+ if (event.detail.from !== event.detail.to) {
+ console.log('ionReorderEnd: Dragged from index', event.detail.from, 'to', event.detail.to);
+ } else {
+ console.log('ionReorderEnd: No position change occurred');
+ }
+
+ event.detail.complete();
+ }
+}
diff --git a/packages/react/test/base/src/App.tsx b/packages/react/test/base/src/App.tsx
index 291acf7524..475e4fdcd7 100644
--- a/packages/react/test/base/src/App.tsx
+++ b/packages/react/test/base/src/App.tsx
@@ -36,6 +36,7 @@ import IonPopoverNested from './pages/overlay-components/IonPopoverNested';
import KeepContentsMounted from './pages/overlay-components/KeepContentsMounted';
import OverlayComponents from './pages/overlay-components/OverlayComponents';
import OverlayHooks from './pages/overlay-hooks/OverlayHooks';
+import ReorderGroup from './pages/ReorderGroup';
setupIonicReact();
@@ -67,6 +68,7 @@ const App: React.FC = () => (
+
diff --git a/packages/react/test/base/src/pages/Main.tsx b/packages/react/test/base/src/pages/Main.tsx
index 5595c0d630..d7fc30c376 100644
--- a/packages/react/test/base/src/pages/Main.tsx
+++ b/packages/react/test/base/src/pages/Main.tsx
@@ -46,6 +46,9 @@ const Main: React.FC = () => {
Inputs
+
+ Reorder Group
+
diff --git a/packages/react/test/base/src/pages/ReorderGroup.tsx b/packages/react/test/base/src/pages/ReorderGroup.tsx
new file mode 100644
index 0000000000..29dc50273b
--- /dev/null
+++ b/packages/react/test/base/src/pages/ReorderGroup.tsx
@@ -0,0 +1,58 @@
+import React from 'react';
+import {
+ IonBackButton,
+ IonButtons,
+ IonContent,
+ IonHeader,
+ IonItem,
+ IonLabel,
+ IonPage,
+ IonReorder,
+ IonReorderGroup,
+ IonTitle,
+ IonToolbar,
+} from '@ionic/react';
+import type { ReorderEndCustomEvent } from '@ionic/react';
+
+const ReorderGroup: React.FC = () => {
+ const onReorderEnd = (event: ReorderEndCustomEvent) => {
+ if (event.detail.from !== event.detail.to) {
+ console.log('ionReorderEnd: Dragged from index', event.detail.from, 'to', event.detail.to);
+ } else {
+ console.log('ionReorderEnd: No position change occurred');
+ }
+
+ event.detail.complete();
+ };
+
+ return (
+
+
+
+
+
+
+ Reorder Group
+
+
+
+
+
+
+ Item 1
+
+
+
+ Item 2
+
+
+
+ Item 3
+
+
+
+
+ );
+};
+
+export default ReorderGroup;
diff --git a/packages/vue/test/base/src/router/index.ts b/packages/vue/test/base/src/router/index.ts
index 5e34498831..13d4e919ad 100644
--- a/packages/vue/test/base/src/router/index.ts
+++ b/packages/vue/test/base/src/router/index.ts
@@ -86,6 +86,10 @@ const routes: Array = [
path: '/components/range',
component: () => import('@/views/Range.vue')
},
+ {
+ path: '/reorder-group',
+ component: () => import('@/views/ReorderGroup.vue')
+ },
{
path: '/nested',
component: () => import('@/views/RouterOutlet.vue'),
diff --git a/packages/vue/test/base/src/views/Home.vue b/packages/vue/test/base/src/views/Home.vue
index 853832bd8c..d4d88e61a3 100644
--- a/packages/vue/test/base/src/views/Home.vue
+++ b/packages/vue/test/base/src/views/Home.vue
@@ -29,6 +29,9 @@
Navigation
+
+ Reorder Group
+
Routing
diff --git a/packages/vue/test/base/src/views/ReorderGroup.vue b/packages/vue/test/base/src/views/ReorderGroup.vue
new file mode 100644
index 0000000000..48ccab650e
--- /dev/null
+++ b/packages/vue/test/base/src/views/ReorderGroup.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+ Reorder Group
+
+
+
+
+
+
+
+ Item 1
+
+
+
+ Item 2
+
+
+
+ Item 3
+
+
+
+
+
+
+