expo-snowui 1.7.73 → 1.7.74

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -28,6 +28,7 @@ const step = 0.01;
28
28
  // It completely breaks in Android or Web, depending on the version of react I override it to use
29
29
 
30
30
  // After a handful of other libraries still had problems, I rolled my own
31
+
31
32
  export const SnowRangeSlider = props => {
32
33
  const {
33
34
  SnowStyle,
@@ -47,7 +48,8 @@ export const SnowRangeSlider = props => {
47
48
  trapFocusLeft: true,
48
49
  trapFocusRight: true
49
50
  });
50
- const isDraggingRef = React.useRef(false);
51
+ const isInteractingRef = React.useRef(false);
52
+ const blockNextPropUpdateRef = React.useRef(false);
51
53
  const isFocusedRef = React.useRef(isFocused);
52
54
  React.useEffect(() => {
53
55
  isFocusedRef.current = isFocused;
@@ -75,31 +77,39 @@ export const SnowRangeSlider = props => {
75
77
  percentRef.current = next;
76
78
  setPercent(next);
77
79
  };
80
+ const endInteraction = () => {
81
+ isInteractingRef.current = false;
82
+ blockNextPropUpdateRef.current = true;
83
+ onValueChange(percentRef.current);
84
+ };
78
85
  const panRef = React.useRef(PanResponder.create({
79
86
  onStartShouldSetPanResponder: () => true,
80
87
  onMoveShouldSetPanResponder: () => true,
81
88
  onPanResponderGrant: event => {
82
- isDraggingRef.current = true;
89
+ isInteractingRef.current = true;
83
90
  updateFromPageX(event.nativeEvent.pageX);
84
91
  },
85
92
  onPanResponderMove: event => {
86
- if (!isDraggingRef.current) return;
93
+ if (!isInteractingRef.current) return;
87
94
  updateFromPageX(event.nativeEvent.pageX);
88
95
  },
89
96
  onPanResponderRelease: () => {
90
- isDraggingRef.current = false;
91
- onValueChange(percentRef.current);
97
+ endInteraction();
92
98
  },
93
99
  onPanResponderEnd: () => {
94
- isDraggingRef.current = false;
95
- onValueChange(percentRef.current);
100
+ endInteraction();
96
101
  }
97
102
  }));
98
103
  React.useEffect(() => {
99
- if (!isDraggingRef.current) {
100
- percentRef.current = props.percent;
101
- setPercent(props.percent);
104
+ if (isInteractingRef.current) {
105
+ return;
106
+ }
107
+ if (blockNextPropUpdateRef.current) {
108
+ blockNextPropUpdateRef.current = false;
109
+ return;
102
110
  }
111
+ percentRef.current = props.percent;
112
+ setPercent(props.percent);
103
113
  }, [props.percent]);
104
114
  React.useEffect(() => {
105
115
  percentRef.current = percent;
@@ -113,7 +123,6 @@ export const SnowRangeSlider = props => {
113
123
  if (result > max) result = max;
114
124
  percentRef.current = result;
115
125
  setPercent(result);
116
- onValueChange(result);
117
126
  };
118
127
  const longPress = amount => {
119
128
  clearInterval(applyIntervalRef.current);
@@ -124,31 +133,39 @@ export const SnowRangeSlider = props => {
124
133
  const actionListenerKey = addActionListener(props.focusKey ?? 'range-slider', {
125
134
  onRight: () => {
126
135
  if (isFocusedRef.current) {
136
+ isInteractingRef.current = true;
127
137
  applyStep(step);
128
138
  clearInterval(applyIntervalRef.current);
139
+ endInteraction();
129
140
  }
130
141
  },
131
142
  onLongRightStart: () => {
132
143
  if (isFocusedRef.current) {
144
+ isInteractingRef.current = true;
133
145
  longPress(step * 2);
134
146
  }
135
147
  },
136
148
  onLongRightEnd: () => {
137
149
  clearInterval(applyIntervalRef.current);
150
+ endInteraction();
138
151
  },
139
152
  onLeft: () => {
140
153
  if (isFocusedRef.current) {
154
+ isInteractingRef.current = true;
141
155
  applyStep(-step);
142
156
  clearInterval(applyIntervalRef.current);
157
+ endInteraction();
143
158
  }
144
159
  },
145
160
  onLongLeftStart: () => {
146
161
  if (isFocusedRef.current) {
162
+ isInteractingRef.current = true;
147
163
  longPress(-step * 2);
148
164
  }
149
165
  },
150
166
  onLongLeftEnd: () => {
151
167
  clearInterval(applyIntervalRef.current);
168
+ endInteraction();
152
169
  }
153
170
  });
154
171
  return () => removeActionListener(actionListenerKey);
@@ -1 +1 @@
1
- {"version":3,"names":["React","PanResponder","Platform","Pressable","View","useDebouncedCallback","useInputContext","useFocusContext","useStyleContext","jsx","_jsx","jsxs","_jsxs","min","max","step","SnowRangeSlider","props","SnowStyle","SnowConfig","addActionListener","removeActionListener","focusWrap","focusPath","isFocused","canFocus","trapFocusLeft","trapFocusRight","isDraggingRef","useRef","isFocusedRef","useEffect","current","percent","setPercent","useState","percentRef","applyStepInterval","setApplyStepInterval","applyIntervalRef","trackRef","trackXRef","sliderWidth","component","rangeSlider","trackWrapper","width","onValueChange","debounce","inputDebounceMilliseconds","clamp","v","Math","updateFromPageX","pageX","x","next","panRef","create","onStartShouldSetPanResponder","onMoveShouldSetPanResponder","onPanResponderGrant","event","nativeEvent","onPanResponderMove","onPanResponderRelease","onPanResponderEnd","applyStep","amount","result","longPress","clearInterval","setInterval","actionListenerKey","focusKey","onRight","onLongRightStart","onLongRightEnd","onLeft","onLongLeftStart","onLongLeftEnd","thumbX","trackWrapperStyle","leftTrackStyle","leftTrack","thumbStyle","thumb","left","push","backgroundColor","color","hover","borderColor","hoverDark","style","wrapper","children","ref","onLayout","measureInWindow","panHandlers","rightTrack","parentPath"],"sourceRoot":"../../../../src","sources":["component/wired/snow-range-slider.js"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","PanResponder","Platform","Pressable","View","useDebouncedCallback","useInputContext","useFocusContext","useStyleContext","jsx","_jsx","jsxs","_jsxs","min","max","step","SnowRangeSlider","props","SnowStyle","SnowConfig","addActionListener","removeActionListener","focusWrap","focusPath","isFocused","canFocus","trapFocusLeft","trapFocusRight","isInteractingRef","useRef","blockNextPropUpdateRef","isFocusedRef","useEffect","current","percent","setPercent","useState","percentRef","applyStepInterval","setApplyStepInterval","applyIntervalRef","trackRef","trackXRef","sliderWidth","component","rangeSlider","trackWrapper","width","onValueChange","debounce","inputDebounceMilliseconds","clamp","v","Math","updateFromPageX","pageX","x","next","endInteraction","panRef","create","onStartShouldSetPanResponder","onMoveShouldSetPanResponder","onPanResponderGrant","event","nativeEvent","onPanResponderMove","onPanResponderRelease","onPanResponderEnd","applyStep","amount","result","longPress","clearInterval","setInterval","actionListenerKey","focusKey","onRight","onLongRightStart","onLongRightEnd","onLeft","onLongLeftStart","onLongLeftEnd","thumbX","trackWrapperStyle","leftTrackStyle","leftTrack","thumbStyle","thumb","left","push","backgroundColor","color","hover","borderColor","hoverDark","style","wrapper","children","ref","onLayout","measureInWindow","panHandlers","rightTrack","parentPath"],"sourceRoot":"../../../../src","sources":["component/wired/snow-range-slider.js"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SACIC,YAAY,EACZC,QAAQ,EACRC,SAAS,EACTC,IAAI,QACD,cAAc;AACrB,SAASC,oBAAoB,QAAQ,cAAc;AACnD,SAASC,eAAe,QAAQ,qCAAkC;AAClE,SAASC,eAAe,QAAQ,qCAAkC;AAClE,SAASC,eAAe,QAAQ,qCAAkC;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAElE,MAAMC,GAAG,GAAG,GAAG;AACf,MAAMC,GAAG,GAAG,GAAG;AACf,MAAMC,IAAI,GAAG,IAAI;;AAEjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,OAAO,MAAMC,eAAe,GAAIC,KAAK,IAAK;EACtC,MAAM;IAAEC,SAAS;IAAEC;EAAW,CAAC,GAAGX,eAAe,CAACS,KAAK,CAAC;EACxD,MAAM;IAAEG,iBAAiB;IAAEC;EAAqB,CAAC,GAAGf,eAAe,CAAC,CAAC;EACrE,MAAM;IACFgB,SAAS;IACTC,SAAS;IACTC;EACJ,CAAC,GAAGjB,eAAe,CAAC,QAAQ,EAAE;IAC1B,GAAGU,KAAK;IACRQ,QAAQ,EAAE,IAAI;IACdC,aAAa,EAAE,IAAI;IACnBC,cAAc,EAAE;EACpB,CAAC,CAAC;EAEF,MAAMC,gBAAgB,GAAG5B,KAAK,CAAC6B,MAAM,CAAC,KAAK,CAAC;EAC5C,MAAMC,sBAAsB,GAAG9B,KAAK,CAAC6B,MAAM,CAAC,KAAK,CAAC;EAElD,MAAME,YAAY,GAAG/B,KAAK,CAAC6B,MAAM,CAACL,SAAS,CAAC;EAC5CxB,KAAK,CAACgC,SAAS,CAAC,MAAM;IAAED,YAAY,CAACE,OAAO,GAAGT,SAAS;EAAC,CAAC,EAAE,CAACA,SAAS,CAAC,CAAC;EACxE,MAAM,CAACU,OAAO,EAAEC,UAAU,CAAC,GAAGnC,KAAK,CAACoC,QAAQ,CAAC,MAAM,OAAOnB,KAAK,CAACiB,OAAO,KAAK,QAAQ,GAAGjB,KAAK,CAACiB,OAAO,GAAG,CAAC,CAAC;EACzG,MAAMG,UAAU,GAAGrC,KAAK,CAAC6B,MAAM,CAAC,OAAOZ,KAAK,CAACiB,OAAO,KAAK,QAAQ,GAAGjB,KAAK,CAACiB,OAAO,GAAG,CAAC,CAAC;EACtF,MAAM,CAACI,iBAAiB,EAAEC,oBAAoB,CAAC,GAAGvC,KAAK,CAACoC,QAAQ,CAAC,IAAI,CAAC;EACtE,MAAMI,gBAAgB,GAAGxC,KAAK,CAAC6B,MAAM,CAACS,iBAAiB,CAAC;EAExD,MAAMG,QAAQ,GAAGzC,KAAK,CAAC6B,MAAM,CAAC,IAAI,CAAC;EACnC,MAAMa,SAAS,GAAG1C,KAAK,CAAC6B,MAAM,CAAC,CAAC,CAAC;EAEjC,IAAIc,WAAW,GAAGzB,SAAS,CAAC0B,SAAS,CAACC,WAAW,CAACC,YAAY,CAACC,KAAK;EACpE,IAAI9B,KAAK,CAAC8B,KAAK,EAAE;IACbJ,WAAW,GAAG1B,KAAK,CAAC8B,KAAK;EAC7B;EAEA,IAAIC,aAAa,GAAG/B,KAAK,CAAC+B,aAAa;EACvC,IAAI/B,KAAK,CAACgC,QAAQ,EAAE;IAChBD,aAAa,GAAG3C,oBAAoB,CAACY,KAAK,CAAC+B,aAAa,EAAE7B,UAAU,CAAC+B,yBAAyB,CAAC;EACnG;EAEA,MAAMC,KAAK,GAAIC,CAAC,IAAKC,IAAI,CAACxC,GAAG,CAACC,GAAG,EAAEuC,IAAI,CAACvC,GAAG,CAACD,GAAG,EAAEuC,CAAC,CAAC,CAAC;EAEpD,MAAME,eAAe,GAAIC,KAAK,IAAK;IAC/B,IAAIC,CAAC,GAAGD,KAAK,GAAGb,SAAS,CAACT,OAAO;IACjC,IAAIuB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,CAAC;IAChB,IAAIA,CAAC,GAAGb,WAAW,EAAEa,CAAC,GAAGb,WAAW;IACpC,MAAMc,IAAI,GAAGN,KAAK,CAACK,CAAC,GAAGb,WAAW,CAAC;IACnCN,UAAU,CAACJ,OAAO,GAAGwB,IAAI;IACzBtB,UAAU,CAACsB,IAAI,CAAC;EACpB,CAAC;EAED,MAAMC,cAAc,GAAGA,CAAA,KAAM;IACzB9B,gBAAgB,CAACK,OAAO,GAAG,KAAK;IAChCH,sBAAsB,CAACG,OAAO,GAAG,IAAI;IACrCe,aAAa,CAACX,UAAU,CAACJ,OAAO,CAAC;EACrC,CAAC;EAED,MAAM0B,MAAM,GAAG3D,KAAK,CAAC6B,MAAM,CACvB5B,YAAY,CAAC2D,MAAM,CAAC;IAChBC,4BAA4B,EAAEA,CAAA,KAAM,IAAI;IACxCC,2BAA2B,EAAEA,CAAA,KAAM,IAAI;IAEvCC,mBAAmB,EAAGC,KAAK,IAAK;MAC5BpC,gBAAgB,CAACK,OAAO,GAAG,IAAI;MAC/BqB,eAAe,CAACU,KAAK,CAACC,WAAW,CAACV,KAAK,CAAC;IAC5C,CAAC;IAEDW,kBAAkB,EAAGF,KAAK,IAAK;MAC3B,IAAI,CAACpC,gBAAgB,CAACK,OAAO,EAAE;MAC/BqB,eAAe,CAACU,KAAK,CAACC,WAAW,CAACV,KAAK,CAAC;IAC5C,CAAC;IAEDY,qBAAqB,EAAEA,CAAA,KAAM;MACzBT,cAAc,CAAC,CAAC;IACpB,CAAC;IAEDU,iBAAiB,EAAEA,CAAA,KAAM;MACrBV,cAAc,CAAC,CAAC;IACpB;EACJ,CAAC,CACL,CAAC;EAED1D,KAAK,CAACgC,SAAS,CAAC,MAAM;IAClB,IAAIJ,gBAAgB,CAACK,OAAO,EAAE;MAC1B;IACJ;IAEA,IAAIH,sBAAsB,CAACG,OAAO,EAAE;MAChCH,sBAAsB,CAACG,OAAO,GAAG,KAAK;MACtC;IACJ;IAEAI,UAAU,CAACJ,OAAO,GAAGhB,KAAK,CAACiB,OAAO;IAClCC,UAAU,CAAClB,KAAK,CAACiB,OAAO,CAAC;EAC7B,CAAC,EAAE,CAACjB,KAAK,CAACiB,OAAO,CAAC,CAAC;EAEnBlC,KAAK,CAACgC,SAAS,CAAC,MAAM;IAClBK,UAAU,CAACJ,OAAO,GAAGC,OAAO;EAChC,CAAC,EAAE,CAACA,OAAO,CAAC,CAAC;EAEblC,KAAK,CAACgC,SAAS,CAAC,MAAM;IAClBQ,gBAAgB,CAACP,OAAO,GAAGK,iBAAiB;EAChD,CAAC,EAAE,CAACA,iBAAiB,CAAC,CAAC;EAEvB,MAAM+B,SAAS,GAAIC,MAAM,IAAK;IAC1B,IAAIC,MAAM,GAAGlC,UAAU,CAACJ,OAAO,GAAGqC,MAAM;IACxC,IAAIC,MAAM,GAAG1D,GAAG,EAAE0D,MAAM,GAAG1D,GAAG;IAC9B,IAAI0D,MAAM,GAAGzD,GAAG,EAAEyD,MAAM,GAAGzD,GAAG;IAC9BuB,UAAU,CAACJ,OAAO,GAAGsC,MAAM;IAC3BpC,UAAU,CAACoC,MAAM,CAAC;EACtB,CAAC;EAED,MAAMC,SAAS,GAAIF,MAAM,IAAK;IAC1BG,aAAa,CAACjC,gBAAgB,CAACP,OAAO,CAAC;IACvCoC,SAAS,CAACC,MAAM,CAAC;IACjB/B,oBAAoB,CAACmC,WAAW,CAAC,MAAML,SAAS,CAACC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;EACnE,CAAC;EAEDtE,KAAK,CAACgC,SAAS,CAAC,MAAM;IAClB,MAAM2C,iBAAiB,GAAGvD,iBAAiB,CAACH,KAAK,CAAC2D,QAAQ,IAAI,cAAc,EAAE;MAC1EC,OAAO,EAAEA,CAAA,KAAM;QACX,IAAI9C,YAAY,CAACE,OAAO,EAAE;UACtBL,gBAAgB,CAACK,OAAO,GAAG,IAAI;UAC/BoC,SAAS,CAACtD,IAAI,CAAC;UACf0D,aAAa,CAACjC,gBAAgB,CAACP,OAAO,CAAC;UACvCyB,cAAc,CAAC,CAAC;QACpB;MACJ,CAAC;MACDoB,gBAAgB,EAAEA,CAAA,KAAM;QACpB,IAAI/C,YAAY,CAACE,OAAO,EAAE;UACtBL,gBAAgB,CAACK,OAAO,GAAG,IAAI;UAC/BuC,SAAS,CAACzD,IAAI,GAAG,CAAC,CAAC;QACvB;MACJ,CAAC;MACDgE,cAAc,EAAEA,CAAA,KAAM;QAClBN,aAAa,CAACjC,gBAAgB,CAACP,OAAO,CAAC;QACvCyB,cAAc,CAAC,CAAC;MACpB,CAAC;MACDsB,MAAM,EAAEA,CAAA,KAAM;QACV,IAAIjD,YAAY,CAACE,OAAO,EAAE;UACtBL,gBAAgB,CAACK,OAAO,GAAG,IAAI;UAC/BoC,SAAS,CAAC,CAACtD,IAAI,CAAC;UAChB0D,aAAa,CAACjC,gBAAgB,CAACP,OAAO,CAAC;UACvCyB,cAAc,CAAC,CAAC;QACpB;MACJ,CAAC;MACDuB,eAAe,EAAEA,CAAA,KAAM;QACnB,IAAIlD,YAAY,CAACE,OAAO,EAAE;UACtBL,gBAAgB,CAACK,OAAO,GAAG,IAAI;UAC/BuC,SAAS,CAAC,CAACzD,IAAI,GAAG,CAAC,CAAC;QACxB;MACJ,CAAC;MACDmE,aAAa,EAAEA,CAAA,KAAM;QACjBT,aAAa,CAACjC,gBAAgB,CAACP,OAAO,CAAC;QACvCyB,cAAc,CAAC,CAAC;MACpB;IACJ,CAAC,CAAC;IACF,OAAO,MAAMrC,oBAAoB,CAACsD,iBAAiB,CAAC;EACxD,CAAC,EAAE,EAAE,CAAC;EAEN,IAAIQ,MAAM,GAAG9C,UAAU,CAACJ,OAAO,GAAGU,WAAW;EAE7C,MAAMyC,iBAAiB,GAAG,CACtBlE,SAAS,CAAC0B,SAAS,CAACC,WAAW,CAACC,YAAY,EAC5C;IAAEC,KAAK,EAAEJ;EAAY,CAAC,CACzB;EAED,MAAM0C,cAAc,GAAG,CACnBnE,SAAS,CAAC0B,SAAS,CAACC,WAAW,CAACyC,SAAS,EACzC;IAAEvC,KAAK,EAAEoC;EAAO,CAAC,CACpB;EAED,IAAII,UAAU,GAAG,CACbrE,SAAS,CAAC0B,SAAS,CAACC,WAAW,CAAC2C,KAAK,EACrC;IAAEC,IAAI,EAAEN,MAAM,GAAGjE,SAAS,CAAC0B,SAAS,CAACC,WAAW,CAAC2C,KAAK,CAACzC,KAAK,GAAG;EAAE,CAAC,CACrE;EAED,IAAIvB,SAAS,EAAE;IACX+D,UAAU,CAACG,IAAI,CAAC;MACZC,eAAe,EAAEzE,SAAS,CAAC0E,KAAK,CAACC,KAAK;MACtCC,WAAW,EAAE5E,SAAS,CAAC0E,KAAK,CAACG;IACjC,CAAC,CAAC;EACN;EAEA,oBACIrF,IAAA,CAACN,IAAI;IAAC4F,KAAK,EAAE9E,SAAS,CAAC0B,SAAS,CAACC,WAAW,CAACoD,OAAQ;IAAAC,QAAA,eACjDtF,KAAA,CAACR,IAAI;MACD+F,GAAG,EAAE1D,QAAS;MACd2D,QAAQ,EAAEA,CAAA,KAAM;QACZ3D,QAAQ,CAACR,OAAO,EAAEoE,eAAe,CAAE7C,CAAC,IAAK;UACrCd,SAAS,CAACT,OAAO,GAAGuB,CAAC;QACzB,CAAC,CAAC;MACN,CAAE;MAAA,GACEG,MAAM,CAAC1B,OAAO,CAACqE,WAAW;MAC9BN,KAAK,EAAEZ,iBAAkB;MAAAc,QAAA,gBAEzBxF,IAAA,CAACN,IAAI;QAAC4F,KAAK,EAAEX;MAAe,CAAE,CAAC,eAC/B3E,IAAA,CAACN,IAAI;QAAC4F,KAAK,EAAE9E,SAAS,CAAC0B,SAAS,CAACC,WAAW,CAAC0D;MAAW,CAAE,CAAC,EAC1DjF,SAAS,cAACZ,IAAA,CAACP,SAAS;QACjB6F,KAAK,EAAET,UAAW;QAClBX,QAAQ,EAAE,OAAQ;QAClB4B,UAAU,EAAEjF;MAAU,CACzB,CAAC,CAAC;IAAA,CACD;EAAC,CACL,CAAC;AAEf,CAAC;AAED,eAAeP,eAAe","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-snowui",
3
- "version": "1.7.73",
3
+ "version": "1.7.74",
4
4
  "description": "GUI components and contexts shared by snowsuite apps",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -1,10 +1,10 @@
1
- import React from "react";
1
+ import React from "react"
2
2
  import {
3
3
  PanResponder,
4
4
  Platform,
5
5
  Pressable,
6
6
  View
7
- } from "react-native";
7
+ } from "react-native"
8
8
  import { useDebouncedCallback } from 'use-debounce'
9
9
  import { useInputContext } from '../../context/snow-input-context'
10
10
  import { useFocusContext } from '../../context/snow-focus-context'
@@ -31,6 +31,7 @@ const step = 0.01
31
31
  // It completely breaks in Android or Web, depending on the version of react I override it to use
32
32
 
33
33
  // After a handful of other libraries still had problems, I rolled my own
34
+
34
35
  export const SnowRangeSlider = (props) => {
35
36
  const { SnowStyle, SnowConfig } = useStyleContext(props)
36
37
  const { addActionListener, removeActionListener } = useInputContext()
@@ -45,7 +46,9 @@ export const SnowRangeSlider = (props) => {
45
46
  trapFocusRight: true
46
47
  })
47
48
 
48
- const isDraggingRef = React.useRef(false)
49
+ const isInteractingRef = React.useRef(false)
50
+ const blockNextPropUpdateRef = React.useRef(false)
51
+
49
52
  const isFocusedRef = React.useRef(isFocused)
50
53
  React.useEffect(() => { isFocusedRef.current = isFocused }, [isFocused])
51
54
  const [percent, setPercent] = React.useState(() => typeof props.percent === 'number' ? props.percent : 0)
@@ -77,38 +80,49 @@ export const SnowRangeSlider = (props) => {
77
80
  setPercent(next)
78
81
  }
79
82
 
83
+ const endInteraction = () => {
84
+ isInteractingRef.current = false
85
+ blockNextPropUpdateRef.current = true
86
+ onValueChange(percentRef.current)
87
+ }
88
+
80
89
  const panRef = React.useRef(
81
90
  PanResponder.create({
82
91
  onStartShouldSetPanResponder: () => true,
83
92
  onMoveShouldSetPanResponder: () => true,
84
93
 
85
94
  onPanResponderGrant: (event) => {
86
- isDraggingRef.current = true
95
+ isInteractingRef.current = true
87
96
  updateFromPageX(event.nativeEvent.pageX)
88
97
  },
89
98
 
90
99
  onPanResponderMove: (event) => {
91
- if (!isDraggingRef.current) return
100
+ if (!isInteractingRef.current) return
92
101
  updateFromPageX(event.nativeEvent.pageX)
93
102
  },
94
103
 
95
104
  onPanResponderRelease: () => {
96
- isDraggingRef.current = false
97
- onValueChange(percentRef.current)
105
+ endInteraction()
98
106
  },
99
107
 
100
108
  onPanResponderEnd: () => {
101
- isDraggingRef.current = false
102
- onValueChange(percentRef.current)
109
+ endInteraction()
103
110
  }
104
111
  })
105
112
  )
106
113
 
107
114
  React.useEffect(() => {
108
- if (!isDraggingRef.current) {
109
- percentRef.current = props.percent
110
- setPercent(props.percent)
115
+ if (isInteractingRef.current) {
116
+ return
111
117
  }
118
+
119
+ if (blockNextPropUpdateRef.current) {
120
+ blockNextPropUpdateRef.current = false
121
+ return
122
+ }
123
+
124
+ percentRef.current = props.percent
125
+ setPercent(props.percent)
112
126
  }, [props.percent])
113
127
 
114
128
  React.useEffect(() => {
@@ -125,7 +139,6 @@ export const SnowRangeSlider = (props) => {
125
139
  if (result > max) result = max
126
140
  percentRef.current = result
127
141
  setPercent(result)
128
- onValueChange(result)
129
142
  }
130
143
 
131
144
  const longPress = (amount) => {
@@ -133,35 +146,44 @@ export const SnowRangeSlider = (props) => {
133
146
  applyStep(amount)
134
147
  setApplyStepInterval(setInterval(() => applyStep(amount), 100))
135
148
  }
149
+
136
150
  React.useEffect(() => {
137
151
  const actionListenerKey = addActionListener(props.focusKey ?? 'range-slider', {
138
152
  onRight: () => {
139
153
  if (isFocusedRef.current) {
154
+ isInteractingRef.current = true
140
155
  applyStep(step)
141
156
  clearInterval(applyIntervalRef.current)
157
+ endInteraction()
142
158
  }
143
159
  },
144
160
  onLongRightStart: () => {
145
161
  if (isFocusedRef.current) {
162
+ isInteractingRef.current = true
146
163
  longPress(step * 2)
147
164
  }
148
165
  },
149
166
  onLongRightEnd: () => {
150
167
  clearInterval(applyIntervalRef.current)
168
+ endInteraction()
151
169
  },
152
170
  onLeft: () => {
153
171
  if (isFocusedRef.current) {
172
+ isInteractingRef.current = true
154
173
  applyStep(-step)
155
174
  clearInterval(applyIntervalRef.current)
175
+ endInteraction()
156
176
  }
157
177
  },
158
178
  onLongLeftStart: () => {
159
179
  if (isFocusedRef.current) {
180
+ isInteractingRef.current = true
160
181
  longPress(-step * 2)
161
182
  }
162
183
  },
163
184
  onLongLeftEnd: () => {
164
185
  clearInterval(applyIntervalRef.current)
186
+ endInteraction()
165
187
  },
166
188
  })
167
189
  return () => removeActionListener(actionListenerKey)
@@ -215,4 +237,4 @@ export const SnowRangeSlider = (props) => {
215
237
  )
216
238
  }
217
239
 
218
- export default SnowRangeSlider
240
+ export default SnowRangeSlider