Skip to content

Commit 0fa5c99

Browse files
author
Tanner Reits
committed
fix(segment): handle change of direction scrolling
1 parent 0a13ab4 commit 0fa5c99

File tree

5 files changed

+28
-15
lines changed

5 files changed

+28
-15
lines changed

core/src/components.d.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4442,8 +4442,13 @@ declare global {
44424442
new (): HTMLIonSegmentContentElement;
44434443
};
44444444
interface HTMLIonSegmentViewElementEventMap {
4445-
"ionSegmentViewScroll": { scrollDirection: string; scrollDistancePercentage: number };
4446-
"ionSegmentViewScrollEnd": void;
4445+
"ionSegmentViewScroll": {
4446+
scrollDirection: string;
4447+
scrollDistance: number;
4448+
scrollDistancePercentage: number;
4449+
};
4450+
"ionSegmentViewScrollEnd": { activeContentId: string };
4451+
"ionSegmentViewScrollStart": void;
44474452
}
44484453
interface HTMLIonSegmentViewElement extends Components.IonSegmentView, HTMLStencilElement {
44494454
addEventListener<K extends keyof HTMLIonSegmentViewElementEventMap>(type: K, listener: (this: HTMLIonSegmentViewElement, ev: IonSegmentViewCustomEvent<HTMLIonSegmentViewElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
@@ -7538,11 +7543,16 @@ declare namespace LocalJSX {
75387543
/**
75397544
* Emitted when the segment view is scrolled.
75407545
*/
7541-
"onIonSegmentViewScroll"?: (event: IonSegmentViewCustomEvent<{ scrollDirection: string; scrollDistancePercentage: number }>) => void;
7546+
"onIonSegmentViewScroll"?: (event: IonSegmentViewCustomEvent<{
7547+
scrollDirection: string;
7548+
scrollDistance: number;
7549+
scrollDistancePercentage: number;
7550+
}>) => void;
75427551
/**
75437552
* Emitted when the segment view scroll has ended.
75447553
*/
7545-
"onIonSegmentViewScrollEnd"?: (event: IonSegmentViewCustomEvent<void>) => void;
7554+
"onIonSegmentViewScrollEnd"?: (event: IonSegmentViewCustomEvent<{ activeContentId: string }>) => void;
7555+
"onIonSegmentViewScrollStart"?: (event: IonSegmentViewCustomEvent<void>) => void;
75467556
}
75477557
interface IonSelect {
75487558
/**

core/src/components/segment/segment.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -368,15 +368,13 @@ export class Segment implements ComponentInterface {
368368
const indicatorEl = this.getIndicator(current);
369369
this.scrolledIndicator = indicatorEl;
370370

371-
const { scrollDirection, scrollDistancePercentage, scrollDistance } = ev.detail;
372-
373-
console.log('scroll', scrollDistancePercentage, scrollDistance);
371+
const { scrollDistancePercentage, scrollDistance: evScrollDistance } = ev.detail;
374372

375373
if (indicatorEl && !isNaN(scrollDistancePercentage)) {
376374
indicatorEl.style.transition = 'transform 0.3s ease-out';
377375

378376
const scrollDistance = scrollDistancePercentage * current.getBoundingClientRect().width;
379-
const transformValue = scrollDirection === 'left' ? -scrollDistance : scrollDistance;
377+
const transformValue = evScrollDistance < 0 ? -scrollDistance : scrollDistance;
380378

381379
// Calculate total width of buttons to the left of the current button
382380
const totalButtonWidthBefore = buttons

packages/angular/src/directives/proxies.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2043,7 +2043,7 @@ export class IonSegmentView {
20432043
constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) {
20442044
c.detach();
20452045
this.el = r.nativeElement;
2046-
proxyOutputs(this, this.el, ['ionSegmentViewScroll', 'ionSegmentViewScrollEnd']);
2046+
proxyOutputs(this, this.el, ['ionSegmentViewScroll', 'ionSegmentViewScrollEnd', 'ionSegmentViewScrollStart']);
20472047
}
20482048
}
20492049

@@ -2052,11 +2052,13 @@ export declare interface IonSegmentView extends Components.IonSegmentView {
20522052
/**
20532053
* Emitted when the segment view is scrolled.
20542054
*/
2055-
ionSegmentViewScroll: EventEmitter<CustomEvent<{ scrollDirection: string; scrollDistancePercentage: number }>>;
2055+
ionSegmentViewScroll: EventEmitter<CustomEvent<{ scrollDirection: string; scrollDistance: number; scrollDistancePercentage: number; }>>;
20562056
/**
20572057
* Emitted when the segment view scroll has ended.
20582058
*/
2059-
ionSegmentViewScrollEnd: EventEmitter<CustomEvent<void>>;
2059+
ionSegmentViewScrollEnd: EventEmitter<CustomEvent<{ activeContentId: string }>>;
2060+
2061+
ionSegmentViewScrollStart: EventEmitter<CustomEvent<void>>;
20602062
}
20612063

20622064

packages/angular/standalone/src/directives/proxies.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1882,7 +1882,7 @@ export class IonSegmentView {
18821882
constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) {
18831883
c.detach();
18841884
this.el = r.nativeElement;
1885-
proxyOutputs(this, this.el, ['ionSegmentViewScroll', 'ionSegmentViewScrollEnd']);
1885+
proxyOutputs(this, this.el, ['ionSegmentViewScroll', 'ionSegmentViewScrollEnd', 'ionSegmentViewScrollStart']);
18861886
}
18871887
}
18881888

@@ -1891,11 +1891,13 @@ export declare interface IonSegmentView extends Components.IonSegmentView {
18911891
/**
18921892
* Emitted when the segment view is scrolled.
18931893
*/
1894-
ionSegmentViewScroll: EventEmitter<CustomEvent<{ scrollDirection: string; scrollDistancePercentage: number }>>;
1894+
ionSegmentViewScroll: EventEmitter<CustomEvent<{ scrollDirection: string; scrollDistance: number; scrollDistancePercentage: number; }>>;
18951895
/**
18961896
* Emitted when the segment view scroll has ended.
18971897
*/
1898-
ionSegmentViewScrollEnd: EventEmitter<CustomEvent<void>>;
1898+
ionSegmentViewScrollEnd: EventEmitter<CustomEvent<{ activeContentId: string }>>;
1899+
1900+
ionSegmentViewScrollStart: EventEmitter<CustomEvent<void>>;
18991901
}
19001902

19011903

packages/vue/src/proxies.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -763,7 +763,8 @@ export const IonSegmentContent = /*@__PURE__*/ defineContainer<JSX.IonSegmentCon
763763
export const IonSegmentView = /*@__PURE__*/ defineContainer<JSX.IonSegmentView>('ion-segment-view', defineIonSegmentView, [
764764
'disabled',
765765
'ionSegmentViewScroll',
766-
'ionSegmentViewScrollEnd'
766+
'ionSegmentViewScrollEnd',
767+
'ionSegmentViewScrollStart'
767768
]);
768769

769770

0 commit comments

Comments
 (0)