react-native-timer-picker 1.10.2 → 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 (56) hide show
  1. package/README.md +82 -53
  2. package/dist/commonjs/components/DurationScroll/index.js +154 -76
  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 +31 -10
  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 +7 -6
  17. package/dist/commonjs/utils/generateNumbers.js.map +1 -1
  18. package/dist/commonjs/utils/getAdjustedLimit.js +5 -4
  19. package/dist/commonjs/utils/getAdjustedLimit.js.map +1 -1
  20. package/dist/commonjs/utils/getDurationAndIndexFromScrollOffset.js +24 -0
  21. package/dist/commonjs/utils/getDurationAndIndexFromScrollOffset.js.map +1 -0
  22. package/dist/commonjs/utils/getInitialScrollIndex.js +19 -0
  23. package/dist/commonjs/utils/getInitialScrollIndex.js.map +1 -0
  24. package/dist/module/components/DurationScroll/index.js +154 -76
  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 +31 -10
  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 +7 -6
  39. package/dist/module/utils/generateNumbers.js.map +1 -1
  40. package/dist/module/utils/getAdjustedLimit.js +5 -4
  41. package/dist/module/utils/getAdjustedLimit.js.map +1 -1
  42. package/dist/module/utils/getDurationAndIndexFromScrollOffset.js +17 -0
  43. package/dist/module/utils/getDurationAndIndexFromScrollOffset.js.map +1 -0
  44. package/dist/module/utils/getInitialScrollIndex.js +12 -0
  45. package/dist/module/utils/getInitialScrollIndex.js.map +1 -0
  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 +3 -1
  49. package/dist/typescript/utils/getAdjustedLimit.d.ts +1 -1
  50. package/dist/typescript/utils/getDurationAndIndexFromScrollOffset.d.ts +11 -0
  51. package/dist/typescript/utils/{getScrollIndex.d.ts → getInitialScrollIndex.d.ts} +3 -1
  52. package/package.json +14 -10
  53. package/dist/commonjs/utils/getScrollIndex.js +0 -17
  54. package/dist/commonjs/utils/getScrollIndex.js.map +0 -1
  55. package/dist/module/utils/getScrollIndex.js +0 -10
  56. package/dist/module/utils/getScrollIndex.js.map +0 -1
@@ -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":[]}
@@ -10,15 +10,16 @@ const generateNumbers = (numberOfItems, options) => {
10
10
  return [];
11
11
  }
12
12
  let numbers = [];
13
- for (let i = 0; i <= numberOfItems; i++) {
14
- numbers.push((0, _padNumber.padNumber)(i, {
13
+ for (let i = 0; i < numberOfItems; i++) {
14
+ const value = i * options.interval;
15
+ numbers.push((0, _padNumber.padNumber)(value, {
15
16
  padWithZero: options.padNumbersWithZero
16
17
  }));
17
18
  }
18
- if ((options.repeatNTimes ?? 1) > 1) {
19
+ if (options.repeatNTimes > 1) {
19
20
  numbers = Array(options.repeatNTimes).fill(numbers).flat();
20
21
  }
21
- if (options.disableInfiniteScroll) {
22
+ if (options.disableInfiniteScroll || options.repeatNTimes === 1) {
22
23
  numbers.push(...Array(options.padWithNItems).fill(""));
23
24
  numbers.unshift(...Array(options.padWithNItems).fill(""));
24
25
  }
@@ -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) > 1) {\n numbers = Array(options.repeatNTimes).fill(numbers).flat();\n }\n if (options.disableInfiniteScroll) {\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,IAAIH,aAAa,EAAEG,CAAC,EAAE,EAAE;IACrCD,OAAO,CAACE,IAAI,CAAC,IAAAC,oBAAS,EAACF,CAAC,EAAE;MAAEG,WAAW,EAAEL,OAAO,CAACM;IAAmB,CAAC,CAAC,CAAC;EAC3E;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;EACA,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;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,22 +4,23 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.getAdjustedLimit = void 0;
7
- const getAdjustedLimit = (limit, numberOfItems) => {
7
+ const getAdjustedLimit = (limit, numberOfItems, interval) => {
8
+ const maxValue = (numberOfItems - 1) * interval;
8
9
  if (!limit || !limit.max && !limit.min) {
9
10
  return {
10
- max: numberOfItems,
11
+ max: maxValue,
11
12
  min: 0
12
13
  };
13
14
  }
14
15
 
15
16
  // guard against limits that are out of bounds
16
- const adjustedMaxLimit = limit.max ? Math.min(limit.max, numberOfItems) : numberOfItems;
17
+ const adjustedMaxLimit = limit.max ? Math.min(limit.max, maxValue) : maxValue;
17
18
  const adjustedMinLimit = limit.min ? Math.max(limit.min, 0) : 0;
18
19
 
19
20
  // guard against invalid limits
20
21
  if (adjustedMaxLimit < adjustedMinLimit) {
21
22
  return {
22
- max: numberOfItems,
23
+ max: maxValue,
23
24
  min: 0
24
25
  };
25
26
  }
@@ -1 +1 @@
1
- {"version":3,"names":["getAdjustedLimit","limit","numberOfItems","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 if (!limit || (!limit.max && !limit.min)) {\n return {\n max: numberOfItems,\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, numberOfItems)\n : numberOfItems;\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: numberOfItems,\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,IAAI,CAACD,KAAK,IAAK,CAACA,KAAK,CAACE,GAAG,IAAI,CAACF,KAAK,CAACG,GAAI,EAAE;IACtC,OAAO;MACHD,GAAG,EAAED,aAAa;MAClBE,GAAG,EAAE;IACT,CAAC;EACL;;EAEA;EACA,MAAMC,gBAAgB,GAAGJ,KAAK,CAACE,GAAG,GAC5BG,IAAI,CAACF,GAAG,CAACH,KAAK,CAACE,GAAG,EAAED,aAAa,CAAC,GAClCA,aAAa;EACnB,MAAMK,gBAAgB,GAAGN,KAAK,CAACG,GAAG,GAAGE,IAAI,CAACH,GAAG,CAACF,KAAK,CAACG,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;;EAE/D;EACA,IAAIC,gBAAgB,GAAGE,gBAAgB,EAAE;IACrC,OAAO;MACHJ,GAAG,EAAED,aAAa;MAClBE,GAAG,EAAE;IACT,CAAC;EACL;EAEA,OAAO;IACHD,GAAG,EAAEE,gBAAgB;IACrBD,GAAG,EAAEG;EACT,CAAC;AACL,CAAC;AAACC,OAAA,CAAAR,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":[]}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getDurationAndIndexFromScrollOffset = void 0;
7
+ const getDurationAndIndexFromScrollOffset = variables => {
8
+ const {
9
+ disableInfiniteScroll,
10
+ interval,
11
+ itemHeight,
12
+ numberOfItems,
13
+ padWithNItems,
14
+ yContentOffset
15
+ } = variables;
16
+ const index = Math.round(yContentOffset / itemHeight);
17
+ const duration = (disableInfiniteScroll ? index : index + padWithNItems) % numberOfItems * interval;
18
+ return {
19
+ duration,
20
+ index
21
+ };
22
+ };
23
+ exports.getDurationAndIndexFromScrollOffset = getDurationAndIndexFromScrollOffset;
24
+ //# sourceMappingURL=getDurationAndIndexFromScrollOffset.js.map
@@ -0,0 +1 @@
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":[]}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getInitialScrollIndex = void 0;
7
+ const getInitialScrollIndex = variables => {
8
+ const {
9
+ disableInfiniteScroll,
10
+ interval,
11
+ numberOfItems,
12
+ padWithNItems,
13
+ repeatNumbersNTimes,
14
+ value
15
+ } = variables;
16
+ return Math.max(numberOfItems * Math.floor(repeatNumbersNTimes / 2) + (value / interval + numberOfItems) % numberOfItems - (!disableInfiniteScroll ? padWithNItems : 0), 0);
17
+ };
18
+ exports.getInitialScrollIndex = getInitialScrollIndex;
19
+ //# sourceMappingURL=getInitialScrollIndex.js.map
@@ -0,0 +1 @@
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":[]}
@@ -4,7 +4,8 @@ import { View, Text, FlatList as RNFlatList } from "react-native";
4
4
  import { colorToRgba } from "../../utils/colorToRgba";
5
5
  import { generate12HourNumbers, generateNumbers } from "../../utils/generateNumbers";
6
6
  import { getAdjustedLimit } from "../../utils/getAdjustedLimit";
7
- import { getScrollIndex } from "../../utils/getScrollIndex";
7
+ import { getDurationAndIndexFromScrollOffset } from "../../utils/getDurationAndIndexFromScrollOffset";
8
+ import { getInitialScrollIndex } from "../../utils/getInitialScrollIndex";
8
9
  const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
9
10
  const {
10
11
  aggressivelyGetLatestDuration,
@@ -17,45 +18,78 @@ const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
17
18
  FlatList = RNFlatList,
18
19
  Haptics,
19
20
  initialValue = 0,
21
+ interval,
20
22
  is12HourPicker,
21
23
  isDisabled,
22
24
  label,
23
25
  limit,
24
26
  LinearGradient,
25
- numberOfItems,
27
+ maximumValue,
26
28
  onDurationChange,
27
29
  padNumbersWithZero = false,
28
30
  padWithNItems,
31
+ pickerFeedback,
29
32
  pickerGradientOverlayProps,
30
33
  pmLabel,
31
34
  repeatNumbersNTimes = 3,
35
+ repeatNumbersNTimesNotExplicitlySet,
32
36
  styles,
33
37
  testID,
34
38
  topPickerGradientOverlayProps
35
39
  } = props;
36
- const data = useMemo(() => {
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]);
47
+ const safeRepeatNumbersNTimes = useMemo(() => {
48
+ // do not repeat numbers if there is only one option
49
+ if (numberOfItems === 1) {
50
+ return 1;
51
+ }
52
+ if (!disableInfiniteScroll && repeatNumbersNTimes < 2) {
53
+ return 2;
54
+ } else if (repeatNumbersNTimes < 1) {
55
+ return 1;
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
+ }
64
+ return Math.round(repeatNumbersNTimes);
65
+ }, [disableInfiniteScroll, numberOfItems, repeatNumbersNTimes, repeatNumbersNTimesNotExplicitlySet]);
66
+ const numbersForFlatList = useMemo(() => {
37
67
  if (is12HourPicker) {
38
68
  return generate12HourNumbers({
39
69
  padNumbersWithZero,
40
- repeatNTimes: repeatNumbersNTimes,
70
+ repeatNTimes: safeRepeatNumbersNTimes,
41
71
  disableInfiniteScroll,
42
- padWithNItems
72
+ padWithNItems,
73
+ interval
43
74
  });
44
75
  }
45
76
  return generateNumbers(numberOfItems, {
46
77
  padNumbersWithZero,
47
- repeatNTimes: repeatNumbersNTimes,
78
+ repeatNTimes: safeRepeatNumbersNTimes,
48
79
  disableInfiniteScroll,
49
- padWithNItems
80
+ padWithNItems,
81
+ interval
50
82
  });
51
- }, [disableInfiniteScroll, is12HourPicker, numberOfItems, padNumbersWithZero, padWithNItems, repeatNumbersNTimes]);
52
- const initialScrollIndex = useMemo(() => getScrollIndex({
83
+ }, [disableInfiniteScroll, is12HourPicker, interval, numberOfItems, padNumbersWithZero, padWithNItems, safeRepeatNumbersNTimes]);
84
+ const initialScrollIndex = useMemo(() => getInitialScrollIndex({
85
+ disableInfiniteScroll,
86
+ interval,
53
87
  numberOfItems,
54
88
  padWithNItems,
55
- repeatNumbersNTimes,
89
+ repeatNumbersNTimes: safeRepeatNumbersNTimes,
56
90
  value: initialValue
57
- }), [initialValue, numberOfItems, padWithNItems, repeatNumbersNTimes]);
58
- 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]);
59
93
  const numberOfItemsToShow = 1 + padWithNItems * 2;
60
94
 
61
95
  // keep track of the latest duration as it scrolls
@@ -89,28 +123,6 @@ const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
89
123
  };
90
124
  // eslint-disable-next-line react-hooks/exhaustive-deps
91
125
  }, [Audio]);
92
- useImperativeHandle(ref, () => ({
93
- reset: options => {
94
- var _flatListRef$current;
95
- (_flatListRef$current = flatListRef.current) === null || _flatListRef$current === void 0 || _flatListRef$current.scrollToIndex({
96
- animated: (options === null || options === void 0 ? void 0 : options.animated) ?? false,
97
- index: initialScrollIndex
98
- });
99
- },
100
- setValue: (value, options) => {
101
- var _flatListRef$current2;
102
- (_flatListRef$current2 = flatListRef.current) === null || _flatListRef$current2 === void 0 || _flatListRef$current2.scrollToIndex({
103
- animated: (options === null || options === void 0 ? void 0 : options.animated) ?? false,
104
- index: getScrollIndex({
105
- numberOfItems,
106
- padWithNItems,
107
- repeatNumbersNTimes,
108
- value: value
109
- })
110
- });
111
- },
112
- latestDuration: latestDuration
113
- }));
114
126
  const renderItem = useCallback(({
115
127
  item
116
128
  }) => {
@@ -143,23 +155,29 @@ const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
143
155
  // this function is only used when the picker is in a modal and/or has Haptic/Audio feedback
144
156
  // it is used to ensure that the modal gets the latest duration on clicking
145
157
  // the confirm button, even if the scrollview is still scrolling
146
- if (!aggressivelyGetLatestDuration && !Haptics && !Audio) {
158
+ if (!aggressivelyGetLatestDuration && !Haptics && !Audio && !pickerFeedback) {
147
159
  return;
148
160
  }
149
161
  if (aggressivelyGetLatestDuration) {
150
- const newIndex = Math.round(e.nativeEvent.contentOffset.y / styles.pickerItemContainer.height);
151
- let newDuration = (disableInfiniteScroll ? newIndex : newIndex + padWithNItems) % (numberOfItems + 1);
152
- if (newDuration !== latestDuration.current) {
162
+ const newValues = getDurationAndIndexFromScrollOffset({
163
+ disableInfiniteScroll,
164
+ interval,
165
+ itemHeight: styles.pickerItemContainer.height,
166
+ numberOfItems,
167
+ padWithNItems,
168
+ yContentOffset: e.nativeEvent.contentOffset.y
169
+ });
170
+ if (newValues.duration !== latestDuration.current) {
153
171
  // check limits
154
- if (newDuration > adjustedLimited.max) {
155
- newDuration = adjustedLimited.max;
156
- } else if (newDuration < adjustedLimited.min) {
157
- newDuration = adjustedLimited.min;
172
+ if (newValues.duration > adjustedLimited.max) {
173
+ newValues.duration = adjustedLimited.max;
174
+ } else if (newValues.duration < adjustedLimited.min) {
175
+ newValues.duration = adjustedLimited.min;
158
176
  }
159
- latestDuration.current = newDuration;
177
+ latestDuration.current = newValues.duration;
160
178
  }
161
179
  }
162
- if (Haptics || Audio) {
180
+ if (Haptics || Audio || pickerFeedback) {
163
181
  const feedbackIndex = Math.round((e.nativeEvent.contentOffset.y + styles.pickerItemContainer.height / 2) / styles.pickerItemContainer.height);
164
182
  if (feedbackIndex !== lastFeedbackIndex.current) {
165
183
  // this check stops the feedback firing when the component mounts
@@ -177,70 +195,129 @@ const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
177
195
  } catch {
178
196
  // do nothing
179
197
  }
198
+
199
+ // fire custom feedback if available
200
+ try {
201
+ pickerFeedback === null || pickerFeedback === void 0 || pickerFeedback();
202
+ } catch {
203
+ // do nothing
204
+ }
180
205
  }
181
206
  lastFeedbackIndex.current = feedbackIndex;
182
207
  }
183
208
  }
184
209
  },
185
210
  // eslint-disable-next-line react-hooks/exhaustive-deps
186
- [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]);
187
212
  const onMomentumScrollEnd = useCallback(e => {
188
- const newIndex = Math.round(e.nativeEvent.contentOffset.y / styles.pickerItemContainer.height);
189
- let newDuration = (disableInfiniteScroll ? newIndex : newIndex + padWithNItems) % (numberOfItems + 1);
213
+ const newValues = getDurationAndIndexFromScrollOffset({
214
+ disableInfiniteScroll,
215
+ interval,
216
+ itemHeight: styles.pickerItemContainer.height,
217
+ numberOfItems,
218
+ padWithNItems,
219
+ yContentOffset: e.nativeEvent.contentOffset.y
220
+ });
190
221
 
191
222
  // check limits
192
- if (newDuration > adjustedLimited.max) {
193
- var _flatListRef$current3;
194
- const targetScrollIndex = newIndex - (newDuration - adjustedLimited.max);
195
- (_flatListRef$current3 = flatListRef.current) === null || _flatListRef$current3 === void 0 || _flatListRef$current3.scrollToIndex({
223
+ if (newValues.duration > adjustedLimited.max) {
224
+ var _flatListRef$current;
225
+ const targetScrollIndex = newValues.index - (newValues.duration - adjustedLimited.max);
226
+ (_flatListRef$current = flatListRef.current) === null || _flatListRef$current === void 0 || _flatListRef$current.scrollToIndex({
196
227
  animated: true,
197
228
  index:
198
229
  // guard against scrolling beyond end of list
199
230
  targetScrollIndex >= 0 ? targetScrollIndex : adjustedLimited.max - 1
200
231
  }); // scroll down to max
201
- newDuration = adjustedLimited.max;
202
- } else if (newDuration < adjustedLimited.min) {
203
- var _flatListRef$current4;
204
- const targetScrollIndex = newIndex + (adjustedLimited.min - newDuration);
205
- (_flatListRef$current4 = flatListRef.current) === null || _flatListRef$current4 === void 0 || _flatListRef$current4.scrollToIndex({
232
+ newValues.duration = adjustedLimited.max;
233
+ } else if (newValues.duration < adjustedLimited.min) {
234
+ var _flatListRef$current2;
235
+ const targetScrollIndex = newValues.index + (adjustedLimited.min - newValues.duration);
236
+ (_flatListRef$current2 = flatListRef.current) === null || _flatListRef$current2 === void 0 || _flatListRef$current2.scrollToIndex({
206
237
  animated: true,
207
238
  index:
208
239
  // guard against scrolling beyond end of list
209
- targetScrollIndex <= data.length - 1 ? targetScrollIndex : adjustedLimited.min
240
+ targetScrollIndex <= numbersForFlatList.length - 1 ? targetScrollIndex : adjustedLimited.min
210
241
  }); // scroll up to min
211
- newDuration = adjustedLimited.min;
242
+ newValues.duration = adjustedLimited.min;
212
243
  }
213
- onDurationChange(newDuration);
214
- }, [adjustedLimited.max, adjustedLimited.min, data.length, disableInfiniteScroll, numberOfItems, onDurationChange, padWithNItems, styles.pickerItemContainer.height]);
244
+ onDurationChange(newValues.duration);
245
+ }, [disableInfiniteScroll, interval, styles.pickerItemContainer.height, numberOfItems, padWithNItems, adjustedLimited.max, adjustedLimited.min, onDurationChange, numbersForFlatList.length]);
215
246
  const onViewableItemsChanged = useCallback(({
216
247
  viewableItems
217
248
  }) => {
218
249
  var _viewableItems$, _viewableItems$2;
250
+ if (numberOfItems === 1) {
251
+ return;
252
+ }
219
253
  if ((_viewableItems$ = viewableItems[0]) !== null && _viewableItems$ !== void 0 && _viewableItems$.index && viewableItems[0].index < numberOfItems * 0.5) {
220
- var _flatListRef$current5;
221
- (_flatListRef$current5 = flatListRef.current) === null || _flatListRef$current5 === void 0 || _flatListRef$current5.scrollToIndex({
254
+ var _flatListRef$current3;
255
+ (_flatListRef$current3 = flatListRef.current) === null || _flatListRef$current3 === void 0 || _flatListRef$current3.scrollToIndex({
222
256
  animated: false,
223
257
  index: viewableItems[0].index + numberOfItems
224
258
  });
225
- } else if ((_viewableItems$2 = viewableItems[0]) !== null && _viewableItems$2 !== void 0 && _viewableItems$2.index && viewableItems[0].index >= numberOfItems * (repeatNumbersNTimes - 0.5)) {
226
- var _flatListRef$current6;
227
- (_flatListRef$current6 = flatListRef.current) === null || _flatListRef$current6 === void 0 || _flatListRef$current6.scrollToIndex({
259
+ } else if ((_viewableItems$2 = viewableItems[0]) !== null && _viewableItems$2 !== void 0 && _viewableItems$2.index && viewableItems[0].index >= numberOfItems * (safeRepeatNumbersNTimes - 0.5)) {
260
+ var _flatListRef$current4;
261
+ (_flatListRef$current4 = flatListRef.current) === null || _flatListRef$current4 === void 0 || _flatListRef$current4.scrollToIndex({
228
262
  animated: false,
229
- index: viewableItems[0].index - numberOfItems - 1
263
+ index: viewableItems[0].index - numberOfItems
230
264
  });
231
265
  }
232
- }, [numberOfItems, repeatNumbersNTimes]);
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]);
233
292
  const getItemLayout = useCallback((_, index) => ({
234
293
  length: styles.pickerItemContainer.height,
235
294
  offset: styles.pickerItemContainer.height * index,
236
295
  index
237
296
  }), [styles.pickerItemContainer.height]);
238
- const viewabilityConfigCallbackPairs = useRef([{
239
- viewabilityConfig: {
240
- viewAreaCoveragePercentThreshold: 0
297
+ useImperativeHandle(ref, () => ({
298
+ reset: options => {
299
+ var _flatListRef$current5;
300
+ (_flatListRef$current5 = flatListRef.current) === null || _flatListRef$current5 === void 0 || _flatListRef$current5.scrollToIndex({
301
+ animated: (options === null || options === void 0 ? void 0 : options.animated) ?? false,
302
+ index: initialScrollIndex
303
+ });
241
304
  },
242
- onViewableItemsChanged: onViewableItemsChanged
243
- }]);
305
+ setValue: (value, options) => {
306
+ var _flatListRef$current6;
307
+ (_flatListRef$current6 = flatListRef.current) === null || _flatListRef$current6 === void 0 || _flatListRef$current6.scrollToIndex({
308
+ animated: (options === null || options === void 0 ? void 0 : options.animated) ?? false,
309
+ index: getInitialScrollIndex({
310
+ disableInfiniteScroll,
311
+ interval,
312
+ numberOfItems,
313
+ padWithNItems,
314
+ repeatNumbersNTimes: safeRepeatNumbersNTimes,
315
+ value: value
316
+ })
317
+ });
318
+ },
319
+ latestDuration: latestDuration
320
+ }));
244
321
  return /*#__PURE__*/React.createElement(View, {
245
322
  pointerEvents: isDisabled ? "none" : undefined,
246
323
  style: [{
@@ -249,8 +326,9 @@ const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
249
326
  }, isDisabled && styles.disabledPickerContainer],
250
327
  testID: testID
251
328
  }, /*#__PURE__*/React.createElement(FlatList, {
329
+ key: flatListRenderKey,
252
330
  ref: flatListRef,
253
- data: data,
331
+ data: numbersForFlatList,
254
332
  decelerationRate: 0.88,
255
333
  getItemLayout: getItemLayout,
256
334
  initialScrollIndex: initialScrollIndex,
@@ -263,11 +341,11 @@ const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
263
341
  scrollEventThrottle: 16,
264
342
  showsVerticalScrollIndicator: false,
265
343
  snapToAlignment: "start"
266
- // used in place of snapToOffset due to bug on Android
344
+ // used in place of snapToInterval due to bug on Android
267
345
  ,
268
- snapToOffsets: [...Array(data.length)].map((_, i) => i * styles.pickerItemContainer.height),
346
+ snapToOffsets: [...Array(numbersForFlatList.length)].map((_, i) => i * styles.pickerItemContainer.height),
269
347
  testID: "duration-scroll-flatlist",
270
- viewabilityConfigCallbackPairs: !disableInfiniteScroll ? viewabilityConfigCallbackPairs === null || viewabilityConfigCallbackPairs === void 0 ? void 0 : viewabilityConfigCallbackPairs.current : undefined,
348
+ viewabilityConfigCallbackPairs: viewabilityConfigCallbackPairs,
271
349
  windowSize: numberOfItemsToShow
272
350
  }), /*#__PURE__*/React.createElement(View, {
273
351
  pointerEvents: "none",