react-native-timer-picker 1.10.3 → 2.0.0

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.
Files changed (52) hide show
  1. package/README.md +81 -52
  2. package/dist/commonjs/components/DurationScroll/index.js +76 -19
  3. package/dist/commonjs/components/DurationScroll/index.js.map +1 -1
  4. package/dist/commonjs/components/DurationScroll/types.js.map +1 -1
  5. package/dist/commonjs/components/TimerPicker/index.js +16 -4
  6. package/dist/commonjs/components/TimerPicker/index.js.map +1 -1
  7. package/dist/commonjs/components/TimerPicker/types.js.map +1 -1
  8. package/dist/commonjs/tests/DurationScroll.test.js +3 -3
  9. package/dist/commonjs/tests/DurationScroll.test.js.map +1 -1
  10. package/dist/commonjs/tests/Modal.test.js +3 -3
  11. package/dist/commonjs/tests/Modal.test.js.map +1 -1
  12. package/dist/commonjs/tests/TimerPicker.test.js +4 -4
  13. package/dist/commonjs/tests/TimerPicker.test.js.map +1 -1
  14. package/dist/commonjs/tests/TimerPickerModal.test.js +6 -6
  15. package/dist/commonjs/tests/TimerPickerModal.test.js.map +1 -1
  16. package/dist/commonjs/utils/generateNumbers.js +4 -3
  17. package/dist/commonjs/utils/generateNumbers.js.map +1 -1
  18. package/dist/commonjs/utils/getAdjustedLimit.js +5 -5
  19. package/dist/commonjs/utils/getAdjustedLimit.js.map +1 -1
  20. package/dist/commonjs/utils/getDurationAndIndexFromScrollOffset.js +2 -1
  21. package/dist/commonjs/utils/getDurationAndIndexFromScrollOffset.js.map +1 -1
  22. package/dist/commonjs/utils/getInitialScrollIndex.js +2 -1
  23. package/dist/commonjs/utils/getInitialScrollIndex.js.map +1 -1
  24. package/dist/module/components/DurationScroll/index.js +76 -19
  25. package/dist/module/components/DurationScroll/index.js.map +1 -1
  26. package/dist/module/components/DurationScroll/types.js.map +1 -1
  27. package/dist/module/components/TimerPicker/index.js +16 -4
  28. package/dist/module/components/TimerPicker/index.js.map +1 -1
  29. package/dist/module/components/TimerPicker/types.js.map +1 -1
  30. package/dist/module/tests/DurationScroll.test.js +3 -3
  31. package/dist/module/tests/DurationScroll.test.js.map +1 -1
  32. package/dist/module/tests/Modal.test.js +3 -3
  33. package/dist/module/tests/Modal.test.js.map +1 -1
  34. package/dist/module/tests/TimerPicker.test.js +4 -4
  35. package/dist/module/tests/TimerPicker.test.js.map +1 -1
  36. package/dist/module/tests/TimerPickerModal.test.js +6 -6
  37. package/dist/module/tests/TimerPickerModal.test.js.map +1 -1
  38. package/dist/module/utils/generateNumbers.js +4 -3
  39. package/dist/module/utils/generateNumbers.js.map +1 -1
  40. package/dist/module/utils/getAdjustedLimit.js +5 -5
  41. package/dist/module/utils/getAdjustedLimit.js.map +1 -1
  42. package/dist/module/utils/getDurationAndIndexFromScrollOffset.js +2 -1
  43. package/dist/module/utils/getDurationAndIndexFromScrollOffset.js.map +1 -1
  44. package/dist/module/utils/getInitialScrollIndex.js +2 -1
  45. package/dist/module/utils/getInitialScrollIndex.js.map +1 -1
  46. package/dist/typescript/components/DurationScroll/types.d.ts +4 -1
  47. package/dist/typescript/components/TimerPicker/types.d.ts +7 -0
  48. package/dist/typescript/utils/generateNumbers.d.ts +2 -0
  49. package/dist/typescript/utils/getAdjustedLimit.d.ts +1 -1
  50. package/dist/typescript/utils/getDurationAndIndexFromScrollOffset.d.ts +1 -0
  51. package/dist/typescript/utils/getInitialScrollIndex.d.ts +1 -0
  52. package/package.json +14 -10
@@ -17,14 +17,14 @@ describe("TimerPickerModal", () => {
17
17
  it("renders without crashing", () => {
18
18
  const {
19
19
  getByTestId
20
- } = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, defaultProps));
20
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, defaultProps));
21
21
  const component = getByTestId("timer-picker-modal");
22
22
  expect(component).toBeDefined();
23
23
  });
24
24
  it("calls onConfirm when Confirm button is pressed", () => {
25
25
  const {
26
26
  getByText
27
- } = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, defaultProps));
27
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, defaultProps));
28
28
  const confirmButton = getByText("Confirm");
29
29
  _reactNative.fireEvent.press(confirmButton);
30
30
  expect(mockOnConfirm).toHaveBeenCalled();
@@ -32,7 +32,7 @@ describe("TimerPickerModal", () => {
32
32
  it("calls onCancel when Cancel button is pressed", () => {
33
33
  const {
34
34
  getByText
35
- } = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, defaultProps));
35
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, defaultProps));
36
36
  const cancelButton = getByText("Cancel");
37
37
  _reactNative.fireEvent.press(cancelButton);
38
38
  expect(mockOnCancel).toHaveBeenCalled();
@@ -41,7 +41,7 @@ describe("TimerPickerModal", () => {
41
41
  const setIsVisibleMock = jest.fn();
42
42
  const {
43
43
  getByText
44
- } = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, _extends({}, defaultProps, {
44
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, _extends({}, defaultProps, {
45
45
  setIsVisible: setIsVisibleMock
46
46
  })));
47
47
  const cancelButton = getByText("Cancel");
@@ -52,7 +52,7 @@ describe("TimerPickerModal", () => {
52
52
  const setIsVisibleMock = jest.fn();
53
53
  const {
54
54
  getByTestId
55
- } = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, _extends({}, defaultProps, {
55
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, _extends({}, defaultProps, {
56
56
  closeOnOverlayPress: true,
57
57
  setIsVisible: setIsVisibleMock
58
58
  })));
@@ -63,7 +63,7 @@ describe("TimerPickerModal", () => {
63
63
  it("calls onConfirm with selected duration when Confirm button is pressed", () => {
64
64
  const {
65
65
  getByText
66
- } = (0, _reactNative.render)( /*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, defaultProps));
66
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, defaultProps));
67
67
  // Select duration in TimerPicker, assuming its interaction is tested separately
68
68
  const confirmButton = getByText("Confirm");
69
69
  _reactNative.fireEvent.press(confirmButton);
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_TimerPickerModal","e","__esModule","default","_extends","Object","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","describe","mockOnConfirm","jest","fn","mockOnCancel","defaultProps","visible","setIsVisible","onConfirm","onCancel","it","getByTestId","render","createElement","component","expect","toBeDefined","getByText","confirmButton","fireEvent","press","toHaveBeenCalled","cancelButton","setIsVisibleMock","toHaveBeenCalledWith","closeOnOverlayPress","overlay","objectContaining"],"sources":["TimerPickerModal.test.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { render, fireEvent } from \"@testing-library/react-native\";\n\nimport TimerPickerModal from \"../components/TimerPickerModal\";\n\ndescribe(\"TimerPickerModal\", () => {\n const mockOnConfirm = jest.fn();\n const mockOnCancel = jest.fn();\n\n const defaultProps = {\n visible: true,\n setIsVisible: jest.fn(),\n onConfirm: mockOnConfirm,\n onCancel: mockOnCancel,\n };\n\n it(\"renders without crashing\", () => {\n const { getByTestId } = render(<TimerPickerModal {...defaultProps} />);\n const component = getByTestId(\"timer-picker-modal\");\n expect(component).toBeDefined();\n });\n\n it(\"calls onConfirm when Confirm button is pressed\", () => {\n const { getByText } = render(<TimerPickerModal {...defaultProps} />);\n const confirmButton = getByText(\"Confirm\");\n fireEvent.press(confirmButton);\n expect(mockOnConfirm).toHaveBeenCalled();\n });\n\n it(\"calls onCancel when Cancel button is pressed\", () => {\n const { getByText } = render(<TimerPickerModal {...defaultProps} />);\n const cancelButton = getByText(\"Cancel\");\n fireEvent.press(cancelButton);\n expect(mockOnCancel).toHaveBeenCalled();\n });\n\n it(\"hides the modal when Cancel button is pressed\", () => {\n const setIsVisibleMock = jest.fn();\n const { getByText } = render(\n <TimerPickerModal\n {...defaultProps}\n setIsVisible={setIsVisibleMock}\n />\n );\n const cancelButton = getByText(\"Cancel\");\n fireEvent.press(cancelButton);\n expect(setIsVisibleMock).toHaveBeenCalledWith(false);\n });\n\n it(\"hides the modal when overlay is pressed\", () => {\n const setIsVisibleMock = jest.fn();\n const { getByTestId } = render(\n <TimerPickerModal\n {...defaultProps}\n closeOnOverlayPress\n setIsVisible={setIsVisibleMock}\n />\n );\n const overlay = getByTestId(\"modal-backdrop\");\n fireEvent.press(overlay);\n expect(setIsVisibleMock).toHaveBeenCalledWith(false);\n });\n\n it(\"calls onConfirm with selected duration when Confirm button is pressed\", () => {\n const { getByText } = render(<TimerPickerModal {...defaultProps} />);\n // Select duration in TimerPicker, assuming its interaction is tested separately\n const confirmButton = getByText(\"Confirm\");\n fireEvent.press(confirmButton);\n expect(mockOnConfirm).toHaveBeenCalledWith(expect.objectContaining({}));\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_TimerPickerModal","e","__esModule","default","_extends","Object","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","describe","mockOnConfirm","jest","fn","mockOnCancel","defaultProps","visible","setIsVisible","onConfirm","onCancel","it","getByTestId","render","createElement","component","expect","toBeDefined","getByText","confirmButton","fireEvent","press","toHaveBeenCalled","cancelButton","setIsVisibleMock","toHaveBeenCalledWith","closeOnOverlayPress","overlay","objectContaining"],"sources":["TimerPickerModal.test.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { render, fireEvent } from \"@testing-library/react-native\";\n\nimport TimerPickerModal from \"../components/TimerPickerModal\";\n\ndescribe(\"TimerPickerModal\", () => {\n const mockOnConfirm = jest.fn();\n const mockOnCancel = jest.fn();\n\n const defaultProps = {\n visible: true,\n setIsVisible: jest.fn(),\n onConfirm: mockOnConfirm,\n onCancel: mockOnCancel,\n };\n\n it(\"renders without crashing\", () => {\n const { getByTestId } = render(<TimerPickerModal {...defaultProps} />);\n const component = getByTestId(\"timer-picker-modal\");\n expect(component).toBeDefined();\n });\n\n it(\"calls onConfirm when Confirm button is pressed\", () => {\n const { getByText } = render(<TimerPickerModal {...defaultProps} />);\n const confirmButton = getByText(\"Confirm\");\n fireEvent.press(confirmButton);\n expect(mockOnConfirm).toHaveBeenCalled();\n });\n\n it(\"calls onCancel when Cancel button is pressed\", () => {\n const { getByText } = render(<TimerPickerModal {...defaultProps} />);\n const cancelButton = getByText(\"Cancel\");\n fireEvent.press(cancelButton);\n expect(mockOnCancel).toHaveBeenCalled();\n });\n\n it(\"hides the modal when Cancel button is pressed\", () => {\n const setIsVisibleMock = jest.fn();\n const { getByText } = render(\n <TimerPickerModal\n {...defaultProps}\n setIsVisible={setIsVisibleMock}\n />\n );\n const cancelButton = getByText(\"Cancel\");\n fireEvent.press(cancelButton);\n expect(setIsVisibleMock).toHaveBeenCalledWith(false);\n });\n\n it(\"hides the modal when overlay is pressed\", () => {\n const setIsVisibleMock = jest.fn();\n const { getByTestId } = render(\n <TimerPickerModal\n {...defaultProps}\n closeOnOverlayPress\n setIsVisible={setIsVisibleMock}\n />\n );\n const overlay = getByTestId(\"modal-backdrop\");\n fireEvent.press(overlay);\n expect(setIsVisibleMock).toHaveBeenCalledWith(false);\n });\n\n it(\"calls onConfirm with selected duration when Confirm button is pressed\", () => {\n const { getByText } = render(<TimerPickerModal {...defaultProps} />);\n // Select duration in TimerPicker, assuming its interaction is tested separately\n const confirmButton = getByText(\"Confirm\");\n fireEvent.press(confirmButton);\n expect(mockOnConfirm).toHaveBeenCalledWith(expect.objectContaining({}));\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -11,7 +11,8 @@ const generateNumbers = (numberOfItems, options) => {
11
11
  }
12
12
  let numbers = [];
13
13
  for (let i = 0; i < numberOfItems; i++) {
14
- numbers.push((0, _padNumber.padNumber)(i, {
14
+ const value = i * options.interval;
15
+ numbers.push((0, _padNumber.padNumber)(value, {
15
16
  padWithZero: options.padNumbersWithZero
16
17
  }));
17
18
  }
@@ -29,14 +30,14 @@ const generate12HourNumbers = options => {
29
30
  let numbers = [];
30
31
 
31
32
  // Generate numbers from 0 to 11 for AM
32
- for (let i = 0; i <= 11; i++) {
33
+ for (let i = 0; i < 12; i += options.interval) {
33
34
  numbers.push(`${(0, _padNumber.padNumber)(i, {
34
35
  padWithZero: options.padNumbersWithZero
35
36
  })} AM`);
36
37
  }
37
38
 
38
39
  // Generate numbers from 12 to 11 for PM
39
- for (let i = 12; i <= 23; i++) {
40
+ for (let i = 12; i < 24; i += options.interval) {
40
41
  const hour = i > 12 ? i - 12 : i;
41
42
  numbers.push(`${(0, _padNumber.padNumber)(hour, {
42
43
  padWithZero: options.padNumbersWithZero
@@ -1 +1 @@
1
- {"version":3,"names":["_padNumber","require","generateNumbers","numberOfItems","options","numbers","i","push","padNumber","padWithZero","padNumbersWithZero","repeatNTimes","Array","fill","flat","disableInfiniteScroll","padWithNItems","unshift","exports","generate12HourNumbers","hour"],"sources":["generateNumbers.ts"],"sourcesContent":["import { padNumber } from \"./padNumber\";\n\nexport const generateNumbers = (\n numberOfItems: number,\n options: {\n disableInfiniteScroll?: boolean;\n padNumbersWithZero?: boolean;\n padWithNItems: number;\n repeatNTimes: number;\n }\n) => {\n if (numberOfItems <= 0) {\n return [];\n }\n\n let numbers: string[] = [];\n for (let i = 0; i < numberOfItems; i++) {\n numbers.push(padNumber(i, { padWithZero: options.padNumbersWithZero }));\n }\n\n if (options.repeatNTimes > 1) {\n numbers = Array(options.repeatNTimes).fill(numbers).flat();\n }\n if (options.disableInfiniteScroll || options.repeatNTimes === 1) {\n numbers.push(...Array(options.padWithNItems).fill(\"\"));\n numbers.unshift(...Array(options.padWithNItems).fill(\"\"));\n }\n return numbers;\n};\n\nexport const generate12HourNumbers = (options: {\n disableInfiniteScroll?: boolean;\n padNumbersWithZero?: boolean;\n padWithNItems: number;\n repeatNTimes?: number;\n}) => {\n let numbers: string[] = [];\n\n // Generate numbers from 0 to 11 for AM\n for (let i = 0; i <= 11; i++) {\n numbers.push(\n `${padNumber(i, { padWithZero: options.padNumbersWithZero })} AM`\n );\n }\n\n // Generate numbers from 12 to 11 for PM\n for (let i = 12; i <= 23; i++) {\n const hour = i > 12 ? i - 12 : i;\n numbers.push(\n `${padNumber(hour, { padWithZero: options.padNumbersWithZero })} PM`\n );\n }\n\n if ((options.repeatNTimes ?? 1) > 1) {\n numbers = Array(options.repeatNTimes).fill(numbers).flat();\n }\n\n if (options.disableInfiniteScroll) {\n numbers.push(...Array(options.padWithNItems).fill(\"\"));\n numbers.unshift(...Array(options.padWithNItems).fill(\"\"));\n }\n\n return numbers;\n};\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AAEO,MAAMC,eAAe,GAAGA,CAC3BC,aAAqB,EACrBC,OAKC,KACA;EACD,IAAID,aAAa,IAAI,CAAC,EAAE;IACpB,OAAO,EAAE;EACb;EAEA,IAAIE,OAAiB,GAAG,EAAE;EAC1B,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,aAAa,EAAEG,CAAC,EAAE,EAAE;IACpCD,OAAO,CAACE,IAAI,CAAC,IAAAC,oBAAS,EAACF,CAAC,EAAE;MAAEG,WAAW,EAAEL,OAAO,CAACM;IAAmB,CAAC,CAAC,CAAC;EAC3E;EAEA,IAAIN,OAAO,CAACO,YAAY,GAAG,CAAC,EAAE;IAC1BN,OAAO,GAAGO,KAAK,CAACR,OAAO,CAACO,YAAY,CAAC,CAACE,IAAI,CAACR,OAAO,CAAC,CAACS,IAAI,CAAC,CAAC;EAC9D;EACA,IAAIV,OAAO,CAACW,qBAAqB,IAAIX,OAAO,CAACO,YAAY,KAAK,CAAC,EAAE;IAC7DN,OAAO,CAACE,IAAI,CAAC,GAAGK,KAAK,CAACR,OAAO,CAACY,aAAa,CAAC,CAACH,IAAI,CAAC,EAAE,CAAC,CAAC;IACtDR,OAAO,CAACY,OAAO,CAAC,GAAGL,KAAK,CAACR,OAAO,CAACY,aAAa,CAAC,CAACH,IAAI,CAAC,EAAE,CAAC,CAAC;EAC7D;EACA,OAAOR,OAAO;AAClB,CAAC;AAACa,OAAA,CAAAhB,eAAA,GAAAA,eAAA;AAEK,MAAMiB,qBAAqB,GAAIf,OAKrC,IAAK;EACF,IAAIC,OAAiB,GAAG,EAAE;;EAE1B;EACA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAI,EAAE,EAAEA,CAAC,EAAE,EAAE;IAC1BD,OAAO,CAACE,IAAI,CACR,GAAG,IAAAC,oBAAS,EAACF,CAAC,EAAE;MAAEG,WAAW,EAAEL,OAAO,CAACM;IAAmB,CAAC,CAAC,KAChE,CAAC;EACL;;EAEA;EACA,KAAK,IAAIJ,CAAC,GAAG,EAAE,EAAEA,CAAC,IAAI,EAAE,EAAEA,CAAC,EAAE,EAAE;IAC3B,MAAMc,IAAI,GAAGd,CAAC,GAAG,EAAE,GAAGA,CAAC,GAAG,EAAE,GAAGA,CAAC;IAChCD,OAAO,CAACE,IAAI,CACR,GAAG,IAAAC,oBAAS,EAACY,IAAI,EAAE;MAAEX,WAAW,EAAEL,OAAO,CAACM;IAAmB,CAAC,CAAC,KACnE,CAAC;EACL;EAEA,IAAI,CAACN,OAAO,CAACO,YAAY,IAAI,CAAC,IAAI,CAAC,EAAE;IACjCN,OAAO,GAAGO,KAAK,CAACR,OAAO,CAACO,YAAY,CAAC,CAACE,IAAI,CAACR,OAAO,CAAC,CAACS,IAAI,CAAC,CAAC;EAC9D;EAEA,IAAIV,OAAO,CAACW,qBAAqB,EAAE;IAC/BV,OAAO,CAACE,IAAI,CAAC,GAAGK,KAAK,CAACR,OAAO,CAACY,aAAa,CAAC,CAACH,IAAI,CAAC,EAAE,CAAC,CAAC;IACtDR,OAAO,CAACY,OAAO,CAAC,GAAGL,KAAK,CAACR,OAAO,CAACY,aAAa,CAAC,CAACH,IAAI,CAAC,EAAE,CAAC,CAAC;EAC7D;EAEA,OAAOR,OAAO;AAClB,CAAC;AAACa,OAAA,CAAAC,qBAAA,GAAAA,qBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_padNumber","require","generateNumbers","numberOfItems","options","numbers","i","value","interval","push","padNumber","padWithZero","padNumbersWithZero","repeatNTimes","Array","fill","flat","disableInfiniteScroll","padWithNItems","unshift","exports","generate12HourNumbers","hour"],"sources":["generateNumbers.ts"],"sourcesContent":["import { padNumber } from \"./padNumber\";\n\nexport const generateNumbers = (\n numberOfItems: number,\n options: {\n disableInfiniteScroll?: boolean;\n interval: number;\n padNumbersWithZero?: boolean;\n padWithNItems: number;\n repeatNTimes: number;\n }\n) => {\n if (numberOfItems <= 0) {\n return [];\n }\n\n let numbers: string[] = [];\n for (let i = 0; i < numberOfItems; i++) {\n const value = i * options.interval;\n numbers.push(\n padNumber(value, { padWithZero: options.padNumbersWithZero })\n );\n }\n\n if (options.repeatNTimes > 1) {\n numbers = Array(options.repeatNTimes).fill(numbers).flat();\n }\n if (options.disableInfiniteScroll || options.repeatNTimes === 1) {\n numbers.push(...Array(options.padWithNItems).fill(\"\"));\n numbers.unshift(...Array(options.padWithNItems).fill(\"\"));\n }\n return numbers;\n};\n\nexport const generate12HourNumbers = (options: {\n disableInfiniteScroll?: boolean;\n interval: number;\n padNumbersWithZero?: boolean;\n padWithNItems: number;\n repeatNTimes?: number;\n}) => {\n let numbers: string[] = [];\n\n // Generate numbers from 0 to 11 for AM\n for (let i = 0; i < 12; i += options.interval) {\n numbers.push(\n `${padNumber(i, { padWithZero: options.padNumbersWithZero })} AM`\n );\n }\n\n // Generate numbers from 12 to 11 for PM\n for (let i = 12; i < 24; i += options.interval) {\n const hour = i > 12 ? i - 12 : i;\n numbers.push(\n `${padNumber(hour, { padWithZero: options.padNumbersWithZero })} PM`\n );\n }\n\n if ((options.repeatNTimes ?? 1) > 1) {\n numbers = Array(options.repeatNTimes).fill(numbers).flat();\n }\n\n if (options.disableInfiniteScroll) {\n numbers.push(...Array(options.padWithNItems).fill(\"\"));\n numbers.unshift(...Array(options.padWithNItems).fill(\"\"));\n }\n\n return numbers;\n};\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AAEO,MAAMC,eAAe,GAAGA,CAC3BC,aAAqB,EACrBC,OAMC,KACA;EACD,IAAID,aAAa,IAAI,CAAC,EAAE;IACpB,OAAO,EAAE;EACb;EAEA,IAAIE,OAAiB,GAAG,EAAE;EAC1B,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,aAAa,EAAEG,CAAC,EAAE,EAAE;IACpC,MAAMC,KAAK,GAAGD,CAAC,GAAGF,OAAO,CAACI,QAAQ;IAClCH,OAAO,CAACI,IAAI,CACR,IAAAC,oBAAS,EAACH,KAAK,EAAE;MAAEI,WAAW,EAAEP,OAAO,CAACQ;IAAmB,CAAC,CAChE,CAAC;EACL;EAEA,IAAIR,OAAO,CAACS,YAAY,GAAG,CAAC,EAAE;IAC1BR,OAAO,GAAGS,KAAK,CAACV,OAAO,CAACS,YAAY,CAAC,CAACE,IAAI,CAACV,OAAO,CAAC,CAACW,IAAI,CAAC,CAAC;EAC9D;EACA,IAAIZ,OAAO,CAACa,qBAAqB,IAAIb,OAAO,CAACS,YAAY,KAAK,CAAC,EAAE;IAC7DR,OAAO,CAACI,IAAI,CAAC,GAAGK,KAAK,CAACV,OAAO,CAACc,aAAa,CAAC,CAACH,IAAI,CAAC,EAAE,CAAC,CAAC;IACtDV,OAAO,CAACc,OAAO,CAAC,GAAGL,KAAK,CAACV,OAAO,CAACc,aAAa,CAAC,CAACH,IAAI,CAAC,EAAE,CAAC,CAAC;EAC7D;EACA,OAAOV,OAAO;AAClB,CAAC;AAACe,OAAA,CAAAlB,eAAA,GAAAA,eAAA;AAEK,MAAMmB,qBAAqB,GAAIjB,OAMrC,IAAK;EACF,IAAIC,OAAiB,GAAG,EAAE;;EAE1B;EACA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,EAAE,EAAEA,CAAC,IAAIF,OAAO,CAACI,QAAQ,EAAE;IAC3CH,OAAO,CAACI,IAAI,CACR,GAAG,IAAAC,oBAAS,EAACJ,CAAC,EAAE;MAAEK,WAAW,EAAEP,OAAO,CAACQ;IAAmB,CAAC,CAAC,KAChE,CAAC;EACL;;EAEA;EACA,KAAK,IAAIN,CAAC,GAAG,EAAE,EAAEA,CAAC,GAAG,EAAE,EAAEA,CAAC,IAAIF,OAAO,CAACI,QAAQ,EAAE;IAC5C,MAAMc,IAAI,GAAGhB,CAAC,GAAG,EAAE,GAAGA,CAAC,GAAG,EAAE,GAAGA,CAAC;IAChCD,OAAO,CAACI,IAAI,CACR,GAAG,IAAAC,oBAAS,EAACY,IAAI,EAAE;MAAEX,WAAW,EAAEP,OAAO,CAACQ;IAAmB,CAAC,CAAC,KACnE,CAAC;EACL;EAEA,IAAI,CAACR,OAAO,CAACS,YAAY,IAAI,CAAC,IAAI,CAAC,EAAE;IACjCR,OAAO,GAAGS,KAAK,CAACV,OAAO,CAACS,YAAY,CAAC,CAACE,IAAI,CAACV,OAAO,CAAC,CAACW,IAAI,CAAC,CAAC;EAC9D;EAEA,IAAIZ,OAAO,CAACa,qBAAqB,EAAE;IAC/BZ,OAAO,CAACI,IAAI,CAAC,GAAGK,KAAK,CAACV,OAAO,CAACc,aAAa,CAAC,CAACH,IAAI,CAAC,EAAE,CAAC,CAAC;IACtDV,OAAO,CAACc,OAAO,CAAC,GAAGL,KAAK,CAACV,OAAO,CAACc,aAAa,CAAC,CAACH,IAAI,CAAC,EAAE,CAAC,CAAC;EAC7D;EAEA,OAAOV,OAAO;AAClB,CAAC;AAACe,OAAA,CAAAC,qBAAA,GAAAA,qBAAA","ignoreList":[]}
@@ -4,23 +4,23 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.getAdjustedLimit = void 0;
7
- const getAdjustedLimit = (limit, numberOfItems) => {
8
- const maxIndex = numberOfItems - 1;
7
+ const getAdjustedLimit = (limit, numberOfItems, interval) => {
8
+ const maxValue = (numberOfItems - 1) * interval;
9
9
  if (!limit || !limit.max && !limit.min) {
10
10
  return {
11
- max: maxIndex,
11
+ max: maxValue,
12
12
  min: 0
13
13
  };
14
14
  }
15
15
 
16
16
  // guard against limits that are out of bounds
17
- const adjustedMaxLimit = limit.max ? Math.min(limit.max, maxIndex) : maxIndex;
17
+ const adjustedMaxLimit = limit.max ? Math.min(limit.max, maxValue) : maxValue;
18
18
  const adjustedMinLimit = limit.min ? Math.max(limit.min, 0) : 0;
19
19
 
20
20
  // guard against invalid limits
21
21
  if (adjustedMaxLimit < adjustedMinLimit) {
22
22
  return {
23
- max: maxIndex,
23
+ max: maxValue,
24
24
  min: 0
25
25
  };
26
26
  }
@@ -1 +1 @@
1
- {"version":3,"names":["getAdjustedLimit","limit","numberOfItems","maxIndex","max","min","adjustedMaxLimit","Math","adjustedMinLimit","exports"],"sources":["getAdjustedLimit.ts"],"sourcesContent":["import type { LimitType } from \"../components/DurationScroll/types\";\n\nexport const getAdjustedLimit = (\n limit: LimitType | undefined,\n numberOfItems: number\n): {\n max: number;\n min: number;\n} => {\n const maxIndex = numberOfItems - 1;\n\n if (!limit || (!limit.max && !limit.min)) {\n return {\n max: maxIndex,\n min: 0,\n };\n }\n\n // guard against limits that are out of bounds\n const adjustedMaxLimit = limit.max\n ? Math.min(limit.max, maxIndex)\n : maxIndex;\n const adjustedMinLimit = limit.min ? Math.max(limit.min, 0) : 0;\n\n // guard against invalid limits\n if (adjustedMaxLimit < adjustedMinLimit) {\n return {\n max: maxIndex,\n min: 0,\n };\n }\n\n return {\n max: adjustedMaxLimit,\n min: adjustedMinLimit,\n };\n};\n"],"mappings":";;;;;;AAEO,MAAMA,gBAAgB,GAAGA,CAC5BC,KAA4B,EAC5BC,aAAqB,KAIpB;EACD,MAAMC,QAAQ,GAAGD,aAAa,GAAG,CAAC;EAElC,IAAI,CAACD,KAAK,IAAK,CAACA,KAAK,CAACG,GAAG,IAAI,CAACH,KAAK,CAACI,GAAI,EAAE;IACtC,OAAO;MACHD,GAAG,EAAED,QAAQ;MACbE,GAAG,EAAE;IACT,CAAC;EACL;;EAEA;EACA,MAAMC,gBAAgB,GAAGL,KAAK,CAACG,GAAG,GAC5BG,IAAI,CAACF,GAAG,CAACJ,KAAK,CAACG,GAAG,EAAED,QAAQ,CAAC,GAC7BA,QAAQ;EACd,MAAMK,gBAAgB,GAAGP,KAAK,CAACI,GAAG,GAAGE,IAAI,CAACH,GAAG,CAACH,KAAK,CAACI,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;;EAE/D;EACA,IAAIC,gBAAgB,GAAGE,gBAAgB,EAAE;IACrC,OAAO;MACHJ,GAAG,EAAED,QAAQ;MACbE,GAAG,EAAE;IACT,CAAC;EACL;EAEA,OAAO;IACHD,GAAG,EAAEE,gBAAgB;IACrBD,GAAG,EAAEG;EACT,CAAC;AACL,CAAC;AAACC,OAAA,CAAAT,gBAAA,GAAAA,gBAAA","ignoreList":[]}
1
+ {"version":3,"names":["getAdjustedLimit","limit","numberOfItems","interval","maxValue","max","min","adjustedMaxLimit","Math","adjustedMinLimit","exports"],"sources":["getAdjustedLimit.ts"],"sourcesContent":["import type { LimitType } from \"../components/DurationScroll/types\";\n\nexport const getAdjustedLimit = (\n limit: LimitType | undefined,\n numberOfItems: number,\n interval: number\n): {\n max: number;\n min: number;\n} => {\n const maxValue = (numberOfItems - 1) * interval;\n\n if (!limit || (!limit.max && !limit.min)) {\n return {\n max: maxValue,\n min: 0,\n };\n }\n\n // guard against limits that are out of bounds\n const adjustedMaxLimit = limit.max\n ? Math.min(limit.max, maxValue)\n : maxValue;\n const adjustedMinLimit = limit.min ? Math.max(limit.min, 0) : 0;\n\n // guard against invalid limits\n if (adjustedMaxLimit < adjustedMinLimit) {\n return {\n max: maxValue,\n min: 0,\n };\n }\n\n return {\n max: adjustedMaxLimit,\n min: adjustedMinLimit,\n };\n};\n"],"mappings":";;;;;;AAEO,MAAMA,gBAAgB,GAAGA,CAC5BC,KAA4B,EAC5BC,aAAqB,EACrBC,QAAgB,KAIf;EACD,MAAMC,QAAQ,GAAG,CAACF,aAAa,GAAG,CAAC,IAAIC,QAAQ;EAE/C,IAAI,CAACF,KAAK,IAAK,CAACA,KAAK,CAACI,GAAG,IAAI,CAACJ,KAAK,CAACK,GAAI,EAAE;IACtC,OAAO;MACHD,GAAG,EAAED,QAAQ;MACbE,GAAG,EAAE;IACT,CAAC;EACL;;EAEA;EACA,MAAMC,gBAAgB,GAAGN,KAAK,CAACI,GAAG,GAC5BG,IAAI,CAACF,GAAG,CAACL,KAAK,CAACI,GAAG,EAAED,QAAQ,CAAC,GAC7BA,QAAQ;EACd,MAAMK,gBAAgB,GAAGR,KAAK,CAACK,GAAG,GAAGE,IAAI,CAACH,GAAG,CAACJ,KAAK,CAACK,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;;EAE/D;EACA,IAAIC,gBAAgB,GAAGE,gBAAgB,EAAE;IACrC,OAAO;MACHJ,GAAG,EAAED,QAAQ;MACbE,GAAG,EAAE;IACT,CAAC;EACL;EAEA,OAAO;IACHD,GAAG,EAAEE,gBAAgB;IACrBD,GAAG,EAAEG;EACT,CAAC;AACL,CAAC;AAACC,OAAA,CAAAV,gBAAA,GAAAA,gBAAA","ignoreList":[]}
@@ -7,13 +7,14 @@ exports.getDurationAndIndexFromScrollOffset = void 0;
7
7
  const getDurationAndIndexFromScrollOffset = variables => {
8
8
  const {
9
9
  disableInfiniteScroll,
10
+ interval,
10
11
  itemHeight,
11
12
  numberOfItems,
12
13
  padWithNItems,
13
14
  yContentOffset
14
15
  } = variables;
15
16
  const index = Math.round(yContentOffset / itemHeight);
16
- const duration = (disableInfiniteScroll ? index : index + padWithNItems) % numberOfItems;
17
+ const duration = (disableInfiniteScroll ? index : index + padWithNItems) % numberOfItems * interval;
17
18
  return {
18
19
  duration,
19
20
  index
@@ -1 +1 @@
1
- {"version":3,"names":["getDurationAndIndexFromScrollOffset","variables","disableInfiniteScroll","itemHeight","numberOfItems","padWithNItems","yContentOffset","index","Math","round","duration","exports"],"sources":["getDurationAndIndexFromScrollOffset.ts"],"sourcesContent":["export const getDurationAndIndexFromScrollOffset = (variables: {\n disableInfiniteScroll: boolean;\n itemHeight: number;\n numberOfItems: number;\n padWithNItems: number;\n yContentOffset: number;\n}) => {\n const {\n disableInfiniteScroll,\n itemHeight,\n numberOfItems,\n padWithNItems,\n yContentOffset,\n } = variables;\n\n const index = Math.round(yContentOffset / itemHeight);\n\n const duration =\n (disableInfiniteScroll ? index : index + padWithNItems) % numberOfItems;\n\n return {\n duration,\n index,\n };\n};\n"],"mappings":";;;;;;AAAO,MAAMA,mCAAmC,GAAIC,SAMnD,IAAK;EACF,MAAM;IACFC,qBAAqB;IACrBC,UAAU;IACVC,aAAa;IACbC,aAAa;IACbC;EACJ,CAAC,GAAGL,SAAS;EAEb,MAAMM,KAAK,GAAGC,IAAI,CAACC,KAAK,CAACH,cAAc,GAAGH,UAAU,CAAC;EAErD,MAAMO,QAAQ,GACV,CAACR,qBAAqB,GAAGK,KAAK,GAAGA,KAAK,GAAGF,aAAa,IAAID,aAAa;EAE3E,OAAO;IACHM,QAAQ;IACRH;EACJ,CAAC;AACL,CAAC;AAACI,OAAA,CAAAX,mCAAA,GAAAA,mCAAA","ignoreList":[]}
1
+ {"version":3,"names":["getDurationAndIndexFromScrollOffset","variables","disableInfiniteScroll","interval","itemHeight","numberOfItems","padWithNItems","yContentOffset","index","Math","round","duration","exports"],"sources":["getDurationAndIndexFromScrollOffset.ts"],"sourcesContent":["export const getDurationAndIndexFromScrollOffset = (variables: {\n disableInfiniteScroll: boolean;\n interval: number;\n itemHeight: number;\n numberOfItems: number;\n padWithNItems: number;\n yContentOffset: number;\n}) => {\n const {\n disableInfiniteScroll,\n interval,\n itemHeight,\n numberOfItems,\n padWithNItems,\n yContentOffset,\n } = variables;\n\n const index = Math.round(yContentOffset / itemHeight);\n\n const duration =\n ((disableInfiniteScroll ? index : index + padWithNItems) %\n numberOfItems) *\n interval;\n\n return {\n duration,\n index,\n };\n};\n"],"mappings":";;;;;;AAAO,MAAMA,mCAAmC,GAAIC,SAOnD,IAAK;EACF,MAAM;IACFC,qBAAqB;IACrBC,QAAQ;IACRC,UAAU;IACVC,aAAa;IACbC,aAAa;IACbC;EACJ,CAAC,GAAGN,SAAS;EAEb,MAAMO,KAAK,GAAGC,IAAI,CAACC,KAAK,CAACH,cAAc,GAAGH,UAAU,CAAC;EAErD,MAAMO,QAAQ,GACT,CAACT,qBAAqB,GAAGM,KAAK,GAAGA,KAAK,GAAGF,aAAa,IACnDD,aAAa,GACjBF,QAAQ;EAEZ,OAAO;IACHQ,QAAQ;IACRH;EACJ,CAAC;AACL,CAAC;AAACI,OAAA,CAAAZ,mCAAA,GAAAA,mCAAA","ignoreList":[]}
@@ -7,12 +7,13 @@ exports.getInitialScrollIndex = void 0;
7
7
  const getInitialScrollIndex = variables => {
8
8
  const {
9
9
  disableInfiniteScroll,
10
+ interval,
10
11
  numberOfItems,
11
12
  padWithNItems,
12
13
  repeatNumbersNTimes,
13
14
  value
14
15
  } = variables;
15
- return Math.max(numberOfItems * Math.floor(repeatNumbersNTimes / 2) + (value + numberOfItems) % numberOfItems - (!disableInfiniteScroll ? padWithNItems : 0), 0);
16
+ return Math.max(numberOfItems * Math.floor(repeatNumbersNTimes / 2) + (value / interval + numberOfItems) % numberOfItems - (!disableInfiniteScroll ? padWithNItems : 0), 0);
16
17
  };
17
18
  exports.getInitialScrollIndex = getInitialScrollIndex;
18
19
  //# sourceMappingURL=getInitialScrollIndex.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["getInitialScrollIndex","variables","disableInfiniteScroll","numberOfItems","padWithNItems","repeatNumbersNTimes","value","Math","max","floor","exports"],"sources":["getInitialScrollIndex.ts"],"sourcesContent":["export const getInitialScrollIndex = (variables: {\n disableInfiniteScroll: boolean;\n numberOfItems: number;\n padWithNItems: number;\n repeatNumbersNTimes: number;\n value: number;\n}) => {\n const {\n disableInfiniteScroll,\n numberOfItems,\n padWithNItems,\n repeatNumbersNTimes,\n value,\n } = variables;\n\n return Math.max(\n numberOfItems * Math.floor(repeatNumbersNTimes / 2) +\n ((value + numberOfItems) % numberOfItems) -\n (!disableInfiniteScroll ? padWithNItems : 0),\n 0\n );\n};\n"],"mappings":";;;;;;AAAO,MAAMA,qBAAqB,GAAIC,SAMrC,IAAK;EACF,MAAM;IACFC,qBAAqB;IACrBC,aAAa;IACbC,aAAa;IACbC,mBAAmB;IACnBC;EACJ,CAAC,GAAGL,SAAS;EAEb,OAAOM,IAAI,CAACC,GAAG,CACXL,aAAa,GAAGI,IAAI,CAACE,KAAK,CAACJ,mBAAmB,GAAG,CAAC,CAAC,GAC9C,CAACC,KAAK,GAAGH,aAAa,IAAIA,aAAc,IACxC,CAACD,qBAAqB,GAAGE,aAAa,GAAG,CAAC,CAAC,EAChD,CACJ,CAAC;AACL,CAAC;AAACM,OAAA,CAAAV,qBAAA,GAAAA,qBAAA","ignoreList":[]}
1
+ {"version":3,"names":["getInitialScrollIndex","variables","disableInfiniteScroll","interval","numberOfItems","padWithNItems","repeatNumbersNTimes","value","Math","max","floor","exports"],"sources":["getInitialScrollIndex.ts"],"sourcesContent":["export const getInitialScrollIndex = (variables: {\n disableInfiniteScroll: boolean;\n interval: number;\n numberOfItems: number;\n padWithNItems: number;\n repeatNumbersNTimes: number;\n value: number;\n}) => {\n const {\n disableInfiniteScroll,\n interval,\n numberOfItems,\n padWithNItems,\n repeatNumbersNTimes,\n value,\n } = variables;\n\n return Math.max(\n numberOfItems * Math.floor(repeatNumbersNTimes / 2) +\n ((value / interval + numberOfItems) % numberOfItems) -\n (!disableInfiniteScroll ? padWithNItems : 0),\n 0\n );\n};\n"],"mappings":";;;;;;AAAO,MAAMA,qBAAqB,GAAIC,SAOrC,IAAK;EACF,MAAM;IACFC,qBAAqB;IACrBC,QAAQ;IACRC,aAAa;IACbC,aAAa;IACbC,mBAAmB;IACnBC;EACJ,CAAC,GAAGN,SAAS;EAEb,OAAOO,IAAI,CAACC,GAAG,CACXL,aAAa,GAAGI,IAAI,CAACE,KAAK,CAACJ,mBAAmB,GAAG,CAAC,CAAC,GAC9C,CAACC,KAAK,GAAGJ,QAAQ,GAAGC,aAAa,IAAIA,aAAc,IACnD,CAACF,qBAAqB,GAAGG,aAAa,GAAG,CAAC,CAAC,EAChD,CACJ,CAAC;AACL,CAAC;AAACM,OAAA,CAAAX,qBAAA,GAAAA,qBAAA","ignoreList":[]}
@@ -18,54 +18,78 @@ const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
18
18
  FlatList = RNFlatList,
19
19
  Haptics,
20
20
  initialValue = 0,
21
+ interval,
21
22
  is12HourPicker,
22
23
  isDisabled,
23
24
  label,
24
25
  limit,
25
26
  LinearGradient,
26
- numberOfItems,
27
+ maximumValue,
27
28
  onDurationChange,
28
29
  padNumbersWithZero = false,
29
30
  padWithNItems,
31
+ pickerFeedback,
30
32
  pickerGradientOverlayProps,
31
33
  pmLabel,
32
34
  repeatNumbersNTimes = 3,
35
+ repeatNumbersNTimesNotExplicitlySet,
33
36
  styles,
34
37
  testID,
35
38
  topPickerGradientOverlayProps
36
39
  } = props;
40
+ const numberOfItems = useMemo(() => {
41
+ // guard against negative maximum values
42
+ if (maximumValue < 0) {
43
+ return 1;
44
+ }
45
+ return Math.floor(maximumValue / interval) + 1;
46
+ }, [interval, maximumValue]);
37
47
  const safeRepeatNumbersNTimes = useMemo(() => {
48
+ // do not repeat numbers if there is only one option
49
+ if (numberOfItems === 1) {
50
+ return 1;
51
+ }
38
52
  if (!disableInfiniteScroll && repeatNumbersNTimes < 2) {
39
53
  return 2;
40
54
  } else if (repeatNumbersNTimes < 1) {
41
55
  return 1;
42
56
  }
57
+
58
+ // if this variable is not explicitly set, we calculate a reasonable value based on
59
+ // the number of items in the picker, avoiding regular jumps up/down the list
60
+ // whilst avoiding rendering too many items in the picker
61
+ if (repeatNumbersNTimesNotExplicitlySet) {
62
+ return Math.max(Math.round(180 / numberOfItems), 1);
63
+ }
43
64
  return Math.round(repeatNumbersNTimes);
44
- }, [disableInfiniteScroll, repeatNumbersNTimes]);
65
+ }, [disableInfiniteScroll, numberOfItems, repeatNumbersNTimes, repeatNumbersNTimesNotExplicitlySet]);
45
66
  const numbersForFlatList = useMemo(() => {
46
67
  if (is12HourPicker) {
47
68
  return generate12HourNumbers({
48
69
  padNumbersWithZero,
49
70
  repeatNTimes: safeRepeatNumbersNTimes,
50
71
  disableInfiniteScroll,
51
- padWithNItems
72
+ padWithNItems,
73
+ interval
52
74
  });
53
75
  }
54
76
  return generateNumbers(numberOfItems, {
55
77
  padNumbersWithZero,
56
78
  repeatNTimes: safeRepeatNumbersNTimes,
57
79
  disableInfiniteScroll,
58
- padWithNItems
80
+ padWithNItems,
81
+ interval
59
82
  });
60
- }, [disableInfiniteScroll, is12HourPicker, numberOfItems, padNumbersWithZero, padWithNItems, safeRepeatNumbersNTimes]);
83
+ }, [disableInfiniteScroll, is12HourPicker, interval, numberOfItems, padNumbersWithZero, padWithNItems, safeRepeatNumbersNTimes]);
61
84
  const initialScrollIndex = useMemo(() => getInitialScrollIndex({
62
85
  disableInfiniteScroll,
86
+ interval,
63
87
  numberOfItems,
64
88
  padWithNItems,
65
89
  repeatNumbersNTimes: safeRepeatNumbersNTimes,
66
90
  value: initialValue
67
- }), [disableInfiniteScroll, initialValue, numberOfItems, padWithNItems, safeRepeatNumbersNTimes]);
68
- const adjustedLimited = useMemo(() => getAdjustedLimit(limit, numberOfItems), [limit, numberOfItems]);
91
+ }), [disableInfiniteScroll, initialValue, interval, numberOfItems, padWithNItems, safeRepeatNumbersNTimes]);
92
+ const adjustedLimited = useMemo(() => getAdjustedLimit(limit, numberOfItems, interval), [interval, limit, numberOfItems]);
69
93
  const numberOfItemsToShow = 1 + padWithNItems * 2;
70
94
 
71
95
  // keep track of the latest duration as it scrolls
@@ -131,12 +155,13 @@ const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
131
155
  // this function is only used when the picker is in a modal and/or has Haptic/Audio feedback
132
156
  // it is used to ensure that the modal gets the latest duration on clicking
133
157
  // the confirm button, even if the scrollview is still scrolling
134
- if (!aggressivelyGetLatestDuration && !Haptics && !Audio) {
158
+ if (!aggressivelyGetLatestDuration && !Haptics && !Audio && !pickerFeedback) {
135
159
  return;
136
160
  }
137
161
  if (aggressivelyGetLatestDuration) {
138
162
  const newValues = getDurationAndIndexFromScrollOffset({
139
163
  disableInfiniteScroll,
164
+ interval,
140
165
  itemHeight: styles.pickerItemContainer.height,
141
166
  numberOfItems,
142
167
  padWithNItems,
@@ -152,7 +177,7 @@ const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
152
177
  latestDuration.current = newValues.duration;
153
178
  }
154
179
  }
155
- if (Haptics || Audio) {
180
+ if (Haptics || Audio || pickerFeedback) {
156
181
  const feedbackIndex = Math.round((e.nativeEvent.contentOffset.y + styles.pickerItemContainer.height / 2) / styles.pickerItemContainer.height);
157
182
  if (feedbackIndex !== lastFeedbackIndex.current) {
158
183
  // this check stops the feedback firing when the component mounts
@@ -170,16 +195,24 @@ const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
170
195
  } catch {
171
196
  // do nothing
172
197
  }
198
+
199
+ // fire custom feedback if available
200
+ try {
201
+ pickerFeedback === null || pickerFeedback === void 0 || pickerFeedback();
202
+ } catch {
203
+ // do nothing
204
+ }
173
205
  }
174
206
  lastFeedbackIndex.current = feedbackIndex;
175
207
  }
176
208
  }
177
209
  },
178
210
  // eslint-disable-next-line react-hooks/exhaustive-deps
179
- [adjustedLimited.max, adjustedLimited.min, aggressivelyGetLatestDuration, clickSound, disableInfiniteScroll, numberOfItems, padWithNItems, styles.pickerItemContainer.height]);
211
+ [adjustedLimited.max, adjustedLimited.min, aggressivelyGetLatestDuration, clickSound, disableInfiniteScroll, interval, numberOfItems, padWithNItems, styles.pickerItemContainer.height]);
180
212
  const onMomentumScrollEnd = useCallback(e => {
181
213
  const newValues = getDurationAndIndexFromScrollOffset({
182
214
  disableInfiniteScroll,
215
+ interval,
183
216
  itemHeight: styles.pickerItemContainer.height,
184
217
  numberOfItems,
185
218
  padWithNItems,
@@ -209,11 +242,14 @@ const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
209
242
  newValues.duration = adjustedLimited.min;
210
243
  }
211
244
  onDurationChange(newValues.duration);
212
- }, [adjustedLimited.max, adjustedLimited.min, numbersForFlatList.length, disableInfiniteScroll, numberOfItems, onDurationChange, padWithNItems, styles.pickerItemContainer.height]);
245
+ }, [disableInfiniteScroll, interval, styles.pickerItemContainer.height, numberOfItems, padWithNItems, adjustedLimited.max, adjustedLimited.min, onDurationChange, numbersForFlatList.length]);
213
246
  const onViewableItemsChanged = useCallback(({
214
247
  viewableItems
215
248
  }) => {
216
249
  var _viewableItems$, _viewableItems$2;
250
+ if (numberOfItems === 1) {
251
+ return;
252
+ }
217
253
  if ((_viewableItems$ = viewableItems[0]) !== null && _viewableItems$ !== void 0 && _viewableItems$.index && viewableItems[0].index < numberOfItems * 0.5) {
218
254
  var _flatListRef$current3;
219
255
  (_flatListRef$current3 = flatListRef.current) === null || _flatListRef$current3 === void 0 || _flatListRef$current3.scrollToIndex({
@@ -228,17 +264,36 @@ const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
228
264
  });
229
265
  }
230
266
  }, [numberOfItems, safeRepeatNumbersNTimes]);
267
+ const [viewabilityConfigCallbackPairs, setViewabilityConfigCallbackPairs] = useState(!disableInfiniteScroll ? [{
268
+ viewabilityConfig: {
269
+ viewAreaCoveragePercentThreshold: 0
270
+ },
271
+ onViewableItemsChanged: onViewableItemsChanged
272
+ }] : undefined);
273
+ const [flatListRenderKey, setFlatListRenderKey] = useState(0);
274
+ const initialRender = useRef(true);
275
+ useEffect(() => {
276
+ // don't run on first render
277
+ if (initialRender.current) {
278
+ initialRender.current = false;
279
+ return;
280
+ }
281
+
282
+ // if the onViewableItemsChanged callback changes, we need to update viewabilityConfigCallbackPairs
283
+ // which requires the FlatList to be remounted, hence the increase of the FlatList key
284
+ setFlatListRenderKey(prev => prev + 1);
285
+ setViewabilityConfigCallbackPairs(!disableInfiniteScroll ? [{
286
+ viewabilityConfig: {
287
+ viewAreaCoveragePercentThreshold: 0
288
+ },
289
+ onViewableItemsChanged: onViewableItemsChanged
290
+ }] : undefined);
291
+ }, [disableInfiniteScroll, onViewableItemsChanged]);
231
292
  const getItemLayout = useCallback((_, index) => ({
232
293
  length: styles.pickerItemContainer.height,
233
294
  offset: styles.pickerItemContainer.height * index,
234
295
  index
235
296
  }), [styles.pickerItemContainer.height]);
236
- const viewabilityConfigCallbackPairs = useRef([{
237
- viewabilityConfig: {
238
- viewAreaCoveragePercentThreshold: 0
239
- },
240
- onViewableItemsChanged: onViewableItemsChanged
241
- }]);
242
297
  useImperativeHandle(ref, () => ({
243
298
  reset: options => {
244
299
  var _flatListRef$current5;
@@ -253,6 +308,7 @@ const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
253
308
  animated: (options === null || options === void 0 ? void 0 : options.animated) ?? false,
254
309
  index: getInitialScrollIndex({
255
310
  disableInfiniteScroll,
311
+ interval,
256
312
  numberOfItems,
257
313
  padWithNItems,
258
314
  repeatNumbersNTimes: safeRepeatNumbersNTimes,
@@ -270,6 +326,7 @@ const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
270
326
  }, isDisabled && styles.disabledPickerContainer],
271
327
  testID: testID
272
328
  }, /*#__PURE__*/React.createElement(FlatList, {
329
+ key: flatListRenderKey,
273
330
  ref: flatListRef,
274
331
  data: numbersForFlatList,
275
332
  decelerationRate: 0.88,
@@ -284,11 +341,11 @@ const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
284
341
  scrollEventThrottle: 16,
285
342
  showsVerticalScrollIndicator: false,
286
343
  snapToAlignment: "start"
287
- // used in place of snapToOffset due to bug on Android
344
+ // used in place of snapToInterval due to bug on Android
288
345
  ,
289
346
  snapToOffsets: [...Array(numbersForFlatList.length)].map((_, i) => i * styles.pickerItemContainer.height),
290
347
  testID: "duration-scroll-flatlist",
291
- viewabilityConfigCallbackPairs: !disableInfiniteScroll ? viewabilityConfigCallbackPairs === null || viewabilityConfigCallbackPairs === void 0 ? void 0 : viewabilityConfigCallbackPairs.current : undefined,
348
+ viewabilityConfigCallbackPairs: viewabilityConfigCallbackPairs,
292
349
  windowSize: numberOfItemsToShow
293
350
  }), /*#__PURE__*/React.createElement(View, {
294
351
  pointerEvents: "none",