react-native-timer-picker 2.2.0 → 2.2.1

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 +35 -34
  2. package/dist/commonjs/tests/DurationScroll.test.js +94 -0
  3. package/dist/commonjs/tests/DurationScroll.test.js.map +1 -1
  4. package/dist/commonjs/tests/Modal.test.js +79 -2
  5. package/dist/commonjs/tests/Modal.test.js.map +1 -1
  6. package/dist/commonjs/tests/TimerPicker.test.js +115 -0
  7. package/dist/commonjs/tests/TimerPicker.test.js.map +1 -1
  8. package/dist/commonjs/tests/TimerPickerModal.test.js +120 -0
  9. package/dist/commonjs/tests/TimerPickerModal.test.js.map +1 -1
  10. package/dist/commonjs/tests/colorToRgba.test.js +176 -0
  11. package/dist/commonjs/tests/colorToRgba.test.js.map +1 -0
  12. package/dist/commonjs/tests/generateNumbers.test.js +350 -0
  13. package/dist/commonjs/tests/generateNumbers.test.js.map +1 -0
  14. package/dist/commonjs/tests/getAdjustedLimit.test.js +324 -0
  15. package/dist/commonjs/tests/getAdjustedLimit.test.js.map +1 -0
  16. package/dist/commonjs/tests/getDurationAndIndexFromScrollOffset.test.js +424 -0
  17. package/dist/commonjs/tests/getDurationAndIndexFromScrollOffset.test.js.map +1 -0
  18. package/dist/commonjs/tests/getInitialScrollIndex.test.js +396 -0
  19. package/dist/commonjs/tests/getInitialScrollIndex.test.js.map +1 -0
  20. package/dist/commonjs/tests/getSafeInitialValue.test.js +497 -0
  21. package/dist/commonjs/tests/getSafeInitialValue.test.js.map +1 -0
  22. package/dist/commonjs/tests/padNumber.test.js +301 -0
  23. package/dist/commonjs/tests/padNumber.test.js.map +1 -0
  24. package/dist/commonjs/utils/colorToRgba.js +5 -0
  25. package/dist/commonjs/utils/colorToRgba.js.map +1 -1
  26. package/dist/commonjs/utils/getAdjustedLimit.js +3 -3
  27. package/dist/commonjs/utils/getAdjustedLimit.js.map +1 -1
  28. package/dist/module/tests/DurationScroll.test.js +94 -0
  29. package/dist/module/tests/DurationScroll.test.js.map +1 -1
  30. package/dist/module/tests/Modal.test.js +80 -3
  31. package/dist/module/tests/Modal.test.js.map +1 -1
  32. package/dist/module/tests/TimerPicker.test.js +115 -0
  33. package/dist/module/tests/TimerPicker.test.js.map +1 -1
  34. package/dist/module/tests/TimerPickerModal.test.js +121 -1
  35. package/dist/module/tests/TimerPickerModal.test.js.map +1 -1
  36. package/dist/module/tests/colorToRgba.test.js +174 -0
  37. package/dist/module/tests/colorToRgba.test.js.map +1 -0
  38. package/dist/module/tests/generateNumbers.test.js +348 -0
  39. package/dist/module/tests/generateNumbers.test.js.map +1 -0
  40. package/dist/module/tests/getAdjustedLimit.test.js +322 -0
  41. package/dist/module/tests/getAdjustedLimit.test.js.map +1 -0
  42. package/dist/module/tests/getDurationAndIndexFromScrollOffset.test.js +422 -0
  43. package/dist/module/tests/getDurationAndIndexFromScrollOffset.test.js.map +1 -0
  44. package/dist/module/tests/getInitialScrollIndex.test.js +394 -0
  45. package/dist/module/tests/getInitialScrollIndex.test.js.map +1 -0
  46. package/dist/module/tests/getSafeInitialValue.test.js +495 -0
  47. package/dist/module/tests/getSafeInitialValue.test.js.map +1 -0
  48. package/dist/module/tests/padNumber.test.js +299 -0
  49. package/dist/module/tests/padNumber.test.js.map +1 -0
  50. package/dist/module/utils/colorToRgba.js +5 -0
  51. package/dist/module/utils/colorToRgba.js.map +1 -1
  52. package/dist/module/utils/getAdjustedLimit.js +3 -3
  53. package/dist/module/utils/getAdjustedLimit.js.map +1 -1
  54. package/dist/typescript/components/TimerPicker/styles.d.ts +0 -247
  55. package/dist/typescript/components/TimerPickerModal/styles.d.ts +0 -152
  56. package/package.json +3 -4
package/README.md CHANGED
@@ -13,36 +13,37 @@ Works with Expo and bare React Native apps ✅
13
13
 
14
14
  Includes iOS-style haptic and audio feedback 🍏
15
15
 
16
- - [Demos 📱](#demos-)
17
- - [Installation 🚀](#installation-)
18
- - [Peer Dependencies 👶](#peer-dependencies-)
19
- - [Linear Gradient](#linear-gradient)
20
- - [Masked View](#masked-view)
21
- - [Examples 😎](#examples-)
22
- - [Timer Picker Modal (Dark Mode) 🌚](#timer-picker-modal-dark-mode-)
23
- - [Timer Picker Modal (Light Mode) 🌞](#timer-picker-modal-light-mode-)
24
- - [Timer Picker with Transparent Fade-Out (Dark Mode) 🌒](#timer-picker-with-transparent-fade-out-dark-mode-)
25
- - [Timer Picker with Customisation (Light Mode) 🌔](#timer-picker-with-customisation-light-mode-)
26
- - [Props 💅](#props-)
27
- - [TimerPicker ⏲️](#timerpicker-️)
28
- - [Custom Styles 👗](#custom-styles-)
29
- - [Performance](#performance)
30
- - [Custom FlatList](#custom-flatlist)
31
- - [TimerPickerModal ](#timerpickermodal-)
32
- - [Custom Styles 👕](#custom-styles--1)
33
- - [Methods 🔄](#methods-)
34
- - [TimerPicker](#timerpicker)
35
- - [TimerPickerModal](#timerpickermodal)
36
- - [Picker Feedback](#picker-feedback-)
37
- - [Audio Feedback](#audio-feedback)
38
- - [Haptic Feedback](#haptic-feedback)
39
- - [Feedback Example](#feedback-example)
40
- - [Expo-Specific Audio/Haptic Feedback (DEPRECATED)](#expo-specific-audiohaptic-feedback-deprecated)
41
- - [Contributing 🧑‍🤝‍🧑](#contributing-)
42
- - [Dev Setup](#dev-setup)
43
- - [GitHub Guidelines](#github-guidelines)
44
- - [Limitations ](#limitations-)
45
- - [License 📝](#license-)
16
+ - [React Native Timer Picker ⏰🕰️⏳](#react-native-timer-picker-️)
17
+ - [Demos 📱](#demos-)
18
+ - [Installation 🚀](#installation-)
19
+ - [Peer Dependencies 👶](#peer-dependencies-)
20
+ - [Linear Gradient](#linear-gradient)
21
+ - [Masked View](#masked-view)
22
+ - [Examples 😎](#examples-)
23
+ - [Timer Picker Modal (Dark Mode) 🌚](#timer-picker-modal-dark-mode-)
24
+ - [Timer Picker Modal (Light Mode) 🌞](#timer-picker-modal-light-mode-)
25
+ - [Timer Picker with Transparent Fade-Out (Dark Mode) 🌒](#timer-picker-with-transparent-fade-out-dark-mode-)
26
+ - [Timer Picker with Customisation (Light Mode) 🌔](#timer-picker-with-customisation-light-mode-)
27
+ - [Props 💅](#props-)
28
+ - [TimerPicker ⏲️](#timerpicker-️)
29
+ - [Custom Styles 👗](#custom-styles-)
30
+ - [Performance](#performance)
31
+ - [Custom FlatList](#custom-flatlist)
32
+ - [TimerPickerModal ](#timerpickermodal-)
33
+ - [Custom Styles 👕](#custom-styles--1)
34
+ - [Methods 🔄](#methods-)
35
+ - [TimerPicker](#timerpicker)
36
+ - [TimerPickerModal](#timerpickermodal)
37
+ - [Picker Feedback 📳🔉](#picker-feedback-)
38
+ - [Audio Feedack](#audio-feedack)
39
+ - [Haptic Feedback](#haptic-feedback)
40
+ - [Feedback Example](#feedback-example)
41
+ - [Expo-Specific Audio/Haptic Feedback (DEPRECATED)](#expo-specific-audiohaptic-feedback-deprecated)
42
+ - [Contributing 🧑‍🤝‍🧑](#contributing-)
43
+ - [Dev Setup](#dev-setup)
44
+ - [GitHub Guidelines](#github-guidelines)
45
+ - [Limitations ](#limitations-)
46
+ - [License 📝](#license-)
46
47
 
47
48
  <br>
48
49
 
@@ -63,7 +64,7 @@ Includes iOS-style haptic and audio feedback 🍏
63
64
 
64
65
  ## Installation 🚀
65
66
 
66
- Supports React Native >= 0.59.0 and React >= 16.8.0.
67
+ Supports React Native >= 0.72.0 and React >= 18.2.0.
67
68
 
68
69
  Just run:
69
70
 
@@ -610,11 +611,11 @@ There is a challenge here with audio latency as we need to be able to play the c
610
611
 
611
612
  Recommended libraries:
612
613
 
613
- - [react-native-audio-api](https://www.npmjs.com/package/react-native-audio-api): this is a new library but is built by Software Mansion and has strong potential for our application with low-latency audio. It is not currently straightforward to use a local sound asset with this library; please check out the [Expo example](./examples/example-expo/App.tsx) and [Bare React Native example](./examples/example-bare//App.tsx) for a guide on how to do that. Note that this library will not work in Expo Go (you must create a development build).
614
+ - [react-native-audio-api](https://www.npmjs.com/package/react-native-audio-api): this is a new library but it's built by Software Mansion and has strong potential for our application with low-latency audio. It is not currently straightforward to use a local sound asset with this library; please check out the [Expo example](./examples/example-expo/App.tsx) and [Bare React Native example](./examples/example-bare//App.tsx) for a guide on how to do that. Note that this library will not work in Expo Go (you must create a development build).
614
615
 
615
616
  Libraries to avoid:
616
617
 
617
- - [react-native-sound](https://www.npmjs.com/package/react-native-sound): this likely has low enough latency to work but has not been maintained for the 3+ years.
618
+ - [react-native-sound](https://www.npmjs.com/package/react-native-sound): this likely has low enough latency to work but has not been maintained for 3+ years.
618
619
  - [expo-av](https://docs.expo.dev/versions/latest/sdk/av/): the latency is too high to work well. Expo are developing a new audio module [expo-audio](https://docs.expo.dev/versions/latest/sdk/audio/) that may be better, but at the time of writing (May 2025) it does not have the capability to repeatedly play the same sound.
619
620
 
620
621
  ### Haptic Feedback
@@ -749,7 +750,7 @@ There are two permenant branches: `main` and `develop`. You should never work di
749
750
  ## Limitations ⚠
750
751
 
751
752
  - The project is not compatibile with React Native versions prior to `v0.72.0` due to this [React Native issue](https://github.com/facebook/react-native/issues/36329).
752
- - The audio feedback provided by the `Audio` prop with `expo-av` suffers from high latency and doesn't work well when a user scrolls quickly. This has now been deprecated in place of the `pickerFeedback` prop. Please try `react-native-audio-api` for a lower latency audio library.
753
+ - The audio feedback provided by the `Audio` prop with `expo-av` suffers from high latency and doesn't work well when a user scrolls quickly. This has now been deprecated in place of the `pickerFeedback` prop. Please try `react-native-audio-api` instead.
753
754
 
754
755
  <br>
755
756
 
@@ -65,5 +65,99 @@ describe("DurationScroll", () => {
65
65
  const label = getByText("Duration");
66
66
  expect(label).toBeDefined();
67
67
  });
68
+ it("does not render label when not provided", () => {
69
+ const {
70
+ queryByTestId
71
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_DurationScroll.default, {
72
+ aggressivelyGetLatestDuration: false,
73
+ interval: 1,
74
+ maximumValue: 59,
75
+ onDurationChange: onDurationChangeMock,
76
+ padWithNItems: 1,
77
+ repeatNumbersNTimesNotExplicitlySet: true,
78
+ styles: emptyStyles
79
+ }));
80
+ const label = queryByTestId("picker-label");
81
+ expect(label).toBeNull();
82
+ });
83
+ it("handles different intervals", () => {
84
+ const {
85
+ getAllByTestId
86
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_DurationScroll.default, {
87
+ aggressivelyGetLatestDuration: false,
88
+ interval: 5,
89
+ maximumValue: 55,
90
+ onDurationChange: onDurationChangeMock,
91
+ padWithNItems: 1,
92
+ repeatNumbersNTimesNotExplicitlySet: true,
93
+ styles: emptyStyles
94
+ }));
95
+ const items = getAllByTestId("picker-item");
96
+ expect(items).toBeDefined();
97
+ });
98
+ it("renders with zero padWithNItems", () => {
99
+ const {
100
+ getByTestId
101
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_DurationScroll.default, {
102
+ aggressivelyGetLatestDuration: false,
103
+ interval: 1,
104
+ maximumValue: 59,
105
+ onDurationChange: onDurationChangeMock,
106
+ padWithNItems: 0,
107
+ repeatNumbersNTimesNotExplicitlySet: true,
108
+ styles: emptyStyles,
109
+ testID: "duration-scroll"
110
+ }));
111
+ const component = getByTestId("duration-scroll");
112
+ expect(component).toBeDefined();
113
+ });
114
+ it("handles large maximumValue", () => {
115
+ const {
116
+ getByTestId
117
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_DurationScroll.default, {
118
+ aggressivelyGetLatestDuration: false,
119
+ interval: 1,
120
+ maximumValue: 999,
121
+ onDurationChange: onDurationChangeMock,
122
+ padWithNItems: 1,
123
+ repeatNumbersNTimesNotExplicitlySet: true,
124
+ styles: emptyStyles,
125
+ testID: "duration-scroll"
126
+ }));
127
+ const component = getByTestId("duration-scroll");
128
+ expect(component).toBeDefined();
129
+ });
130
+ it("handles aggressivelyGetLatestDuration set to true", () => {
131
+ const {
132
+ getByTestId
133
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_DurationScroll.default, {
134
+ aggressivelyGetLatestDuration: true,
135
+ interval: 1,
136
+ maximumValue: 59,
137
+ onDurationChange: onDurationChangeMock,
138
+ padWithNItems: 1,
139
+ repeatNumbersNTimesNotExplicitlySet: true,
140
+ styles: emptyStyles,
141
+ testID: "duration-scroll"
142
+ }));
143
+ const component = getByTestId("duration-scroll");
144
+ expect(component).toBeDefined();
145
+ });
146
+ it("handles repeatNumbersNTimesNotExplicitlySet set to false", () => {
147
+ const {
148
+ getByTestId
149
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_DurationScroll.default, {
150
+ aggressivelyGetLatestDuration: false,
151
+ interval: 1,
152
+ maximumValue: 59,
153
+ onDurationChange: onDurationChangeMock,
154
+ padWithNItems: 1,
155
+ repeatNumbersNTimesNotExplicitlySet: false,
156
+ styles: emptyStyles,
157
+ testID: "duration-scroll"
158
+ }));
159
+ const component = getByTestId("duration-scroll");
160
+ expect(component).toBeDefined();
161
+ });
68
162
  });
69
163
  //# sourceMappingURL=DurationScroll.test.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_DurationScroll","e","__esModule","default","describe","onDurationChangeMock","jest","fn","emptyStyles","pickerContainer","pickerLabelContainer","pickerLabel","pickerItemContainer","pickerItem","pickerAmPmContainer","pickerAmPmLabel","disabledPickerContainer","disabledPickerItem","pickerGradientOverlay","it","getByTestId","render","createElement","aggressivelyGetLatestDuration","interval","maximumValue","onDurationChange","padWithNItems","repeatNumbersNTimesNotExplicitlySet","styles","testID","component","expect","toBeDefined","getAllByTestId","items","toHaveLength","getByText","label"],"sources":["DurationScroll.test.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { render } from \"@testing-library/react-native\";\n\nimport DurationScroll from \"../components/DurationScroll\";\nimport type { generateStyles } from \"../components/TimerPicker/styles\";\n\ndescribe(\"DurationScroll\", () => {\n const onDurationChangeMock = jest.fn();\n const emptyStyles = {\n pickerContainer: {},\n pickerLabelContainer: {},\n pickerLabel: {},\n pickerItemContainer: {},\n pickerItem: {},\n pickerAmPmContainer: {},\n pickerAmPmLabel: {},\n disabledPickerContainer: {},\n disabledPickerItem: {},\n pickerGradientOverlay: {},\n } as ReturnType<typeof generateStyles>;\n\n it(\"renders without crashing\", () => {\n const { getByTestId } = render(\n <DurationScroll\n aggressivelyGetLatestDuration={false}\n interval={1}\n maximumValue={1}\n onDurationChange={onDurationChangeMock}\n padWithNItems={0}\n repeatNumbersNTimesNotExplicitlySet={true}\n styles={emptyStyles}\n testID=\"duration-scroll\"\n />\n );\n const component = getByTestId(\"duration-scroll\");\n expect(component).toBeDefined();\n });\n\n it(\"renders the correct number of items\", () => {\n const { getAllByTestId } = render(\n <DurationScroll\n aggressivelyGetLatestDuration={false}\n interval={1}\n maximumValue={23}\n onDurationChange={onDurationChangeMock}\n padWithNItems={1}\n repeatNumbersNTimesNotExplicitlySet={true}\n styles={emptyStyles}\n />\n );\n const items = getAllByTestId(\"picker-item\");\n expect(items).toHaveLength(10);\n });\n\n it(\"renders the label if provided\", () => {\n const { getByText } = render(\n <DurationScroll\n aggressivelyGetLatestDuration={false}\n interval={1}\n label=\"Duration\"\n maximumValue={59}\n onDurationChange={onDurationChangeMock}\n padWithNItems={1}\n repeatNumbersNTimesNotExplicitlySet={true}\n styles={emptyStyles}\n />\n );\n const label = getByText(\"Duration\");\n expect(label).toBeDefined();\n });\n});\n"],"mappings":";;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,YAAA,GAAAD,OAAA;AAEA,IAAAE,eAAA,GAAAH,sBAAA,CAAAC,OAAA;AAA0D,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAG1DG,QAAQ,CAAC,gBAAgB,EAAE,MAAM;EAC7B,MAAMC,oBAAoB,GAAGC,IAAI,CAACC,EAAE,CAAC,CAAC;EACtC,MAAMC,WAAW,GAAG;IAChBC,eAAe,EAAE,CAAC,CAAC;IACnBC,oBAAoB,EAAE,CAAC,CAAC;IACxBC,WAAW,EAAE,CAAC,CAAC;IACfC,mBAAmB,EAAE,CAAC,CAAC;IACvBC,UAAU,EAAE,CAAC,CAAC;IACdC,mBAAmB,EAAE,CAAC,CAAC;IACvBC,eAAe,EAAE,CAAC,CAAC;IACnBC,uBAAuB,EAAE,CAAC,CAAC;IAC3BC,kBAAkB,EAAE,CAAC,CAAC;IACtBC,qBAAqB,EAAE,CAAC;EAC5B,CAAsC;EAEtCC,EAAE,CAAC,0BAA0B,EAAE,MAAM;IACjC,MAAM;MAAEC;IAAY,CAAC,GAAG,IAAAC,mBAAM,eAC1BzB,MAAA,CAAAO,OAAA,CAAAmB,aAAA,CAACtB,eAAA,CAAAG,OAAc;MACXoB,6BAA6B,EAAE,KAAM;MACrCC,QAAQ,EAAE,CAAE;MACZC,YAAY,EAAE,CAAE;MAChBC,gBAAgB,EAAErB,oBAAqB;MACvCsB,aAAa,EAAE,CAAE;MACjBC,mCAAmC,EAAE,IAAK;MAC1CC,MAAM,EAAErB,WAAY;MACpBsB,MAAM,EAAC;IAAiB,CAC3B,CACL,CAAC;IACD,MAAMC,SAAS,GAAGX,WAAW,CAAC,iBAAiB,CAAC;IAChDY,MAAM,CAACD,SAAS,CAAC,CAACE,WAAW,CAAC,CAAC;EACnC,CAAC,CAAC;EAEFd,EAAE,CAAC,qCAAqC,EAAE,MAAM;IAC5C,MAAM;MAAEe;IAAe,CAAC,GAAG,IAAAb,mBAAM,eAC7BzB,MAAA,CAAAO,OAAA,CAAAmB,aAAA,CAACtB,eAAA,CAAAG,OAAc;MACXoB,6BAA6B,EAAE,KAAM;MACrCC,QAAQ,EAAE,CAAE;MACZC,YAAY,EAAE,EAAG;MACjBC,gBAAgB,EAAErB,oBAAqB;MACvCsB,aAAa,EAAE,CAAE;MACjBC,mCAAmC,EAAE,IAAK;MAC1CC,MAAM,EAAErB;IAAY,CACvB,CACL,CAAC;IACD,MAAM2B,KAAK,GAAGD,cAAc,CAAC,aAAa,CAAC;IAC3CF,MAAM,CAACG,KAAK,CAAC,CAACC,YAAY,CAAC,EAAE,CAAC;EAClC,CAAC,CAAC;EAEFjB,EAAE,CAAC,+BAA+B,EAAE,MAAM;IACtC,MAAM;MAAEkB;IAAU,CAAC,GAAG,IAAAhB,mBAAM,eACxBzB,MAAA,CAAAO,OAAA,CAAAmB,aAAA,CAACtB,eAAA,CAAAG,OAAc;MACXoB,6BAA6B,EAAE,KAAM;MACrCC,QAAQ,EAAE,CAAE;MACZc,KAAK,EAAC,UAAU;MAChBb,YAAY,EAAE,EAAG;MACjBC,gBAAgB,EAAErB,oBAAqB;MACvCsB,aAAa,EAAE,CAAE;MACjBC,mCAAmC,EAAE,IAAK;MAC1CC,MAAM,EAAErB;IAAY,CACvB,CACL,CAAC;IACD,MAAM8B,KAAK,GAAGD,SAAS,CAAC,UAAU,CAAC;IACnCL,MAAM,CAACM,KAAK,CAAC,CAACL,WAAW,CAAC,CAAC;EAC/B,CAAC,CAAC;AACN,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_DurationScroll","e","__esModule","default","describe","onDurationChangeMock","jest","fn","emptyStyles","pickerContainer","pickerLabelContainer","pickerLabel","pickerItemContainer","pickerItem","pickerAmPmContainer","pickerAmPmLabel","disabledPickerContainer","disabledPickerItem","pickerGradientOverlay","it","getByTestId","render","createElement","aggressivelyGetLatestDuration","interval","maximumValue","onDurationChange","padWithNItems","repeatNumbersNTimesNotExplicitlySet","styles","testID","component","expect","toBeDefined","getAllByTestId","items","toHaveLength","getByText","label","queryByTestId","toBeNull"],"sources":["DurationScroll.test.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { render } from \"@testing-library/react-native\";\n\nimport DurationScroll from \"../components/DurationScroll\";\nimport type { generateStyles } from \"../components/TimerPicker/styles\";\n\ndescribe(\"DurationScroll\", () => {\n const onDurationChangeMock = jest.fn();\n const emptyStyles = {\n pickerContainer: {},\n pickerLabelContainer: {},\n pickerLabel: {},\n pickerItemContainer: {},\n pickerItem: {},\n pickerAmPmContainer: {},\n pickerAmPmLabel: {},\n disabledPickerContainer: {},\n disabledPickerItem: {},\n pickerGradientOverlay: {},\n } as ReturnType<typeof generateStyles>;\n\n it(\"renders without crashing\", () => {\n const { getByTestId } = render(\n <DurationScroll\n aggressivelyGetLatestDuration={false}\n interval={1}\n maximumValue={1}\n onDurationChange={onDurationChangeMock}\n padWithNItems={0}\n repeatNumbersNTimesNotExplicitlySet={true}\n styles={emptyStyles}\n testID=\"duration-scroll\"\n />\n );\n const component = getByTestId(\"duration-scroll\");\n expect(component).toBeDefined();\n });\n\n it(\"renders the correct number of items\", () => {\n const { getAllByTestId } = render(\n <DurationScroll\n aggressivelyGetLatestDuration={false}\n interval={1}\n maximumValue={23}\n onDurationChange={onDurationChangeMock}\n padWithNItems={1}\n repeatNumbersNTimesNotExplicitlySet={true}\n styles={emptyStyles}\n />\n );\n const items = getAllByTestId(\"picker-item\");\n expect(items).toHaveLength(10);\n });\n\n it(\"renders the label if provided\", () => {\n const { getByText } = render(\n <DurationScroll\n aggressivelyGetLatestDuration={false}\n interval={1}\n label=\"Duration\"\n maximumValue={59}\n onDurationChange={onDurationChangeMock}\n padWithNItems={1}\n repeatNumbersNTimesNotExplicitlySet={true}\n styles={emptyStyles}\n />\n );\n const label = getByText(\"Duration\");\n expect(label).toBeDefined();\n });\n\n it(\"does not render label when not provided\", () => {\n const { queryByTestId } = render(\n <DurationScroll\n aggressivelyGetLatestDuration={false}\n interval={1}\n maximumValue={59}\n onDurationChange={onDurationChangeMock}\n padWithNItems={1}\n repeatNumbersNTimesNotExplicitlySet={true}\n styles={emptyStyles}\n />\n );\n const label = queryByTestId(\"picker-label\");\n expect(label).toBeNull();\n });\n\n it(\"handles different intervals\", () => {\n const { getAllByTestId } = render(\n <DurationScroll\n aggressivelyGetLatestDuration={false}\n interval={5}\n maximumValue={55}\n onDurationChange={onDurationChangeMock}\n padWithNItems={1}\n repeatNumbersNTimesNotExplicitlySet={true}\n styles={emptyStyles}\n />\n );\n const items = getAllByTestId(\"picker-item\");\n expect(items).toBeDefined();\n });\n\n it(\"renders with zero padWithNItems\", () => {\n const { getByTestId } = render(\n <DurationScroll\n aggressivelyGetLatestDuration={false}\n interval={1}\n maximumValue={59}\n onDurationChange={onDurationChangeMock}\n padWithNItems={0}\n repeatNumbersNTimesNotExplicitlySet={true}\n styles={emptyStyles}\n testID=\"duration-scroll\"\n />\n );\n const component = getByTestId(\"duration-scroll\");\n expect(component).toBeDefined();\n });\n\n it(\"handles large maximumValue\", () => {\n const { getByTestId } = render(\n <DurationScroll\n aggressivelyGetLatestDuration={false}\n interval={1}\n maximumValue={999}\n onDurationChange={onDurationChangeMock}\n padWithNItems={1}\n repeatNumbersNTimesNotExplicitlySet={true}\n styles={emptyStyles}\n testID=\"duration-scroll\"\n />\n );\n const component = getByTestId(\"duration-scroll\");\n expect(component).toBeDefined();\n });\n\n it(\"handles aggressivelyGetLatestDuration set to true\", () => {\n const { getByTestId } = render(\n <DurationScroll\n aggressivelyGetLatestDuration={true}\n interval={1}\n maximumValue={59}\n onDurationChange={onDurationChangeMock}\n padWithNItems={1}\n repeatNumbersNTimesNotExplicitlySet={true}\n styles={emptyStyles}\n testID=\"duration-scroll\"\n />\n );\n const component = getByTestId(\"duration-scroll\");\n expect(component).toBeDefined();\n });\n\n it(\"handles repeatNumbersNTimesNotExplicitlySet set to false\", () => {\n const { getByTestId } = render(\n <DurationScroll\n aggressivelyGetLatestDuration={false}\n interval={1}\n maximumValue={59}\n onDurationChange={onDurationChangeMock}\n padWithNItems={1}\n repeatNumbersNTimesNotExplicitlySet={false}\n styles={emptyStyles}\n testID=\"duration-scroll\"\n />\n );\n const component = getByTestId(\"duration-scroll\");\n expect(component).toBeDefined();\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -6,6 +6,14 @@ var _reactNative2 = require("react-native");
6
6
  var _Modal = _interopRequireDefault(require("../components/Modal"));
7
7
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
8
8
  describe("Modal", () => {
9
+ beforeEach(() => {
10
+ jest.useFakeTimers();
11
+ });
12
+ afterEach(() => {
13
+ jest.runOnlyPendingTimers();
14
+ jest.useRealTimers();
15
+ (0, _reactNative.cleanup)();
16
+ });
9
17
  it("renders without crashing", () => {
10
18
  const {
11
19
  getByTestId
@@ -36,7 +44,76 @@ describe("Modal", () => {
36
44
  _reactNative.fireEvent.press(overlay);
37
45
  expect(onOverlayPressMock).toHaveBeenCalled();
38
46
  });
39
-
40
- // Add more test cases to cover different interactions, scenarios, and edge cases
47
+ it("renders but is not visible when isVisible is false", () => {
48
+ const {
49
+ getByTestId
50
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_Modal.default, {
51
+ isVisible: false
52
+ }));
53
+ const modal = getByTestId("modal");
54
+ expect(modal).toBeDefined();
55
+ expect(modal.props.visible).toBe(false);
56
+ });
57
+ it("does not call onOverlayPress when onOverlayPress is not provided", () => {
58
+ const {
59
+ getByTestId
60
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_Modal.default, {
61
+ isVisible: true
62
+ }));
63
+ const overlay = getByTestId("modal-backdrop");
64
+ expect(() => _reactNative.fireEvent.press(overlay)).not.toThrow();
65
+ });
66
+ it("renders multiple children", () => {
67
+ const {
68
+ getByText
69
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_Modal.default, {
70
+ isVisible: true
71
+ }, /*#__PURE__*/_react.default.createElement(_reactNative2.Text, null, "First Child"), /*#__PURE__*/_react.default.createElement(_reactNative2.Text, null, "Second Child")));
72
+ const firstChild = getByText("First Child");
73
+ const secondChild = getByText("Second Child");
74
+ expect(firstChild).toBeDefined();
75
+ expect(secondChild).toBeDefined();
76
+ });
77
+ it("handles rapid visibility changes", () => {
78
+ const {
79
+ rerender,
80
+ getByTestId
81
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_Modal.default, {
82
+ isVisible: true
83
+ }));
84
+ expect(getByTestId("modal")).toBeDefined();
85
+ expect(getByTestId("modal").props.visible).toBe(true);
86
+ rerender(/*#__PURE__*/_react.default.createElement(_Modal.default, {
87
+ isVisible: false
88
+ }));
89
+ expect(getByTestId("modal")).toBeDefined();
90
+ expect(getByTestId("modal").props.visible).toBe(false);
91
+ rerender(/*#__PURE__*/_react.default.createElement(_Modal.default, {
92
+ isVisible: true
93
+ }));
94
+ expect(getByTestId("modal")).toBeDefined();
95
+ expect(getByTestId("modal").props.visible).toBe(true);
96
+ });
97
+ it("calls onOverlayPress exactly once per press", () => {
98
+ const onOverlayPressMock = jest.fn();
99
+ const {
100
+ getByTestId
101
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_Modal.default, {
102
+ isVisible: true,
103
+ onOverlayPress: onOverlayPressMock
104
+ }));
105
+ const overlay = getByTestId("modal-backdrop");
106
+ _reactNative.fireEvent.press(overlay);
107
+ expect(onOverlayPressMock).toHaveBeenCalledTimes(1);
108
+ });
109
+ it("renders children with complex structure", () => {
110
+ const {
111
+ getByText
112
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_Modal.default, {
113
+ isVisible: true
114
+ }, /*#__PURE__*/_react.default.createElement(_reactNative2.Text, null, "Parent"), /*#__PURE__*/_react.default.createElement(_reactNative2.Text, null, "Child")));
115
+ expect(getByText("Parent")).toBeDefined();
116
+ expect(getByText("Child")).toBeDefined();
117
+ });
41
118
  });
42
119
  //# sourceMappingURL=Modal.test.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_reactNative2","_Modal","e","__esModule","default","describe","it","getByTestId","render","createElement","isVisible","component","expect","toBeDefined","getByText","Text","content","onOverlayPressMock","jest","fn","onOverlayPress","overlay","fireEvent","press","toHaveBeenCalled"],"sources":["Modal.test.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { render, fireEvent } from \"@testing-library/react-native\";\nimport { Text } from \"react-native\";\n\nimport Modal from \"../components/Modal\";\n\ndescribe(\"Modal\", () => {\n it(\"renders without crashing\", () => {\n const { getByTestId } = render(<Modal isVisible/>);\n const component = getByTestId(\"modal\");\n expect(component).toBeDefined();\n });\n\n it(\"renders children when visible\", () => {\n const { getByText } = render(\n <Modal isVisible>\n <Text>{\"Modal Content\"}</Text>\n </Modal>\n );\n const content = getByText(\"Modal Content\");\n expect(content).toBeDefined();\n });\n\n it(\"calls onOverlayPress when overlay is pressed\", () => {\n const onOverlayPressMock = jest.fn();\n const { getByTestId } = render(\n <Modal isVisible onOverlayPress={onOverlayPressMock} />\n );\n const overlay = getByTestId(\"modal-backdrop\");\n fireEvent.press(overlay);\n expect(onOverlayPressMock).toHaveBeenCalled();\n });\n\n // Add more test cases to cover different interactions, scenarios, and edge cases\n});\n"],"mappings":";;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,aAAA,GAAAF,OAAA;AAEA,IAAAG,MAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAAwC,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAExCG,QAAQ,CAAC,OAAO,EAAE,MAAM;EACpBC,EAAE,CAAC,0BAA0B,EAAE,MAAM;IACjC,MAAM;MAAEC;IAAY,CAAC,GAAG,IAAAC,mBAAM,eAACZ,MAAA,CAAAQ,OAAA,CAAAK,aAAA,CAACR,MAAA,CAAAG,OAAK;MAACM,SAAS;IAAA,CAAC,CAAC,CAAC;IAClD,MAAMC,SAAS,GAAGJ,WAAW,CAAC,OAAO,CAAC;IACtCK,MAAM,CAACD,SAAS,CAAC,CAACE,WAAW,CAAC,CAAC;EACnC,CAAC,CAAC;EAEFP,EAAE,CAAC,+BAA+B,EAAE,MAAM;IACtC,MAAM;MAAEQ;IAAU,CAAC,GAAG,IAAAN,mBAAM,eACxBZ,MAAA,CAAAQ,OAAA,CAAAK,aAAA,CAACR,MAAA,CAAAG,OAAK;MAACM,SAAS;IAAA,gBACZd,MAAA,CAAAQ,OAAA,CAAAK,aAAA,CAACT,aAAA,CAAAe,IAAI,QAAE,eAAsB,CAC1B,CACX,CAAC;IACD,MAAMC,OAAO,GAAGF,SAAS,CAAC,eAAe,CAAC;IAC1CF,MAAM,CAACI,OAAO,CAAC,CAACH,WAAW,CAAC,CAAC;EACjC,CAAC,CAAC;EAEFP,EAAE,CAAC,8CAA8C,EAAE,MAAM;IACrD,MAAMW,kBAAkB,GAAGC,IAAI,CAACC,EAAE,CAAC,CAAC;IACpC,MAAM;MAAEZ;IAAY,CAAC,GAAG,IAAAC,mBAAM,eAC1BZ,MAAA,CAAAQ,OAAA,CAAAK,aAAA,CAACR,MAAA,CAAAG,OAAK;MAACM,SAAS;MAACU,cAAc,EAAEH;IAAmB,CAAE,CAC1D,CAAC;IACD,MAAMI,OAAO,GAAGd,WAAW,CAAC,gBAAgB,CAAC;IAC7Ce,sBAAS,CAACC,KAAK,CAACF,OAAO,CAAC;IACxBT,MAAM,CAACK,kBAAkB,CAAC,CAACO,gBAAgB,CAAC,CAAC;EACjD,CAAC,CAAC;;EAEF;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_reactNative2","_Modal","e","__esModule","default","describe","beforeEach","jest","useFakeTimers","afterEach","runOnlyPendingTimers","useRealTimers","cleanup","it","getByTestId","render","createElement","isVisible","component","expect","toBeDefined","getByText","Text","content","onOverlayPressMock","fn","onOverlayPress","overlay","fireEvent","press","toHaveBeenCalled","modal","props","visible","toBe","not","toThrow","firstChild","secondChild","rerender","toHaveBeenCalledTimes"],"sources":["Modal.test.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { render, fireEvent, cleanup } from \"@testing-library/react-native\";\nimport { Text } from \"react-native\";\n\nimport Modal from \"../components/Modal\";\n\ndescribe(\"Modal\", () => {\n beforeEach(() => {\n jest.useFakeTimers();\n });\n\n afterEach(() => {\n jest.runOnlyPendingTimers();\n jest.useRealTimers();\n cleanup();\n });\n\n it(\"renders without crashing\", () => {\n const { getByTestId } = render(<Modal isVisible/>);\n const component = getByTestId(\"modal\");\n expect(component).toBeDefined();\n });\n\n it(\"renders children when visible\", () => {\n const { getByText } = render(\n <Modal isVisible>\n <Text>{\"Modal Content\"}</Text>\n </Modal>\n );\n const content = getByText(\"Modal Content\");\n expect(content).toBeDefined();\n });\n\n it(\"calls onOverlayPress when overlay is pressed\", () => {\n const onOverlayPressMock = jest.fn();\n const { getByTestId } = render(\n <Modal isVisible onOverlayPress={onOverlayPressMock} />\n );\n const overlay = getByTestId(\"modal-backdrop\");\n fireEvent.press(overlay);\n expect(onOverlayPressMock).toHaveBeenCalled();\n });\n\n it(\"renders but is not visible when isVisible is false\", () => {\n const { getByTestId } = render(<Modal isVisible={false} />);\n const modal = getByTestId(\"modal\");\n expect(modal).toBeDefined();\n expect(modal.props.visible).toBe(false);\n });\n\n it(\"does not call onOverlayPress when onOverlayPress is not provided\", () => {\n const { getByTestId } = render(<Modal isVisible />);\n const overlay = getByTestId(\"modal-backdrop\");\n expect(() => fireEvent.press(overlay)).not.toThrow();\n });\n\n it(\"renders multiple children\", () => {\n const { getByText } = render(\n <Modal isVisible>\n <Text>{\"First Child\"}</Text>\n <Text>{\"Second Child\"}</Text>\n </Modal>\n );\n const firstChild = getByText(\"First Child\");\n const secondChild = getByText(\"Second Child\");\n expect(firstChild).toBeDefined();\n expect(secondChild).toBeDefined();\n });\n\n it(\"handles rapid visibility changes\", () => {\n const { rerender, getByTestId } = render(\n <Modal isVisible={true} />\n );\n expect(getByTestId(\"modal\")).toBeDefined();\n expect(getByTestId(\"modal\").props.visible).toBe(true);\n\n rerender(<Modal isVisible={false} />);\n expect(getByTestId(\"modal\")).toBeDefined();\n expect(getByTestId(\"modal\").props.visible).toBe(false);\n\n rerender(<Modal isVisible={true} />);\n expect(getByTestId(\"modal\")).toBeDefined();\n expect(getByTestId(\"modal\").props.visible).toBe(true);\n });\n\n it(\"calls onOverlayPress exactly once per press\", () => {\n const onOverlayPressMock = jest.fn();\n const { getByTestId } = render(\n <Modal isVisible onOverlayPress={onOverlayPressMock} />\n );\n const overlay = getByTestId(\"modal-backdrop\");\n fireEvent.press(overlay);\n expect(onOverlayPressMock).toHaveBeenCalledTimes(1);\n });\n\n it(\"renders children with complex structure\", () => {\n const { getByText } = render(\n <Modal isVisible>\n <Text>{\"Parent\"}</Text>\n <Text>{\"Child\"}</Text>\n </Modal>\n );\n expect(getByText(\"Parent\")).toBeDefined();\n expect(getByText(\"Child\")).toBeDefined();\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -50,5 +50,120 @@ describe("TimerPicker", () => {
50
50
  const customFlatList = queryAllByTestId("custom-flat-list");
51
51
  expect(customFlatList).toHaveLength(3);
52
52
  });
53
+ it("renders all pickers by default (hours, minutes, seconds)", () => {
54
+ const {
55
+ getByTestId
56
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, null));
57
+ expect(getByTestId("duration-scroll-hour")).toBeDefined();
58
+ expect(getByTestId("duration-scroll-minute")).toBeDefined();
59
+ expect(getByTestId("duration-scroll-second")).toBeDefined();
60
+ });
61
+ it("hides hours when hideHours is true", () => {
62
+ const {
63
+ queryByTestId
64
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, {
65
+ hideHours: true
66
+ }));
67
+ expect(queryByTestId("duration-scroll-hour")).toBeNull();
68
+ });
69
+ it("renders with custom initial value", () => {
70
+ const {
71
+ getByTestId
72
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, {
73
+ initialValue: {
74
+ hours: 2,
75
+ minutes: 30,
76
+ seconds: 45
77
+ }
78
+ }));
79
+ expect(getByTestId("timer-picker")).toBeDefined();
80
+ });
81
+ it("renders with hourInterval", () => {
82
+ const {
83
+ getByTestId
84
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, {
85
+ hourInterval: 2
86
+ }));
87
+ expect(getByTestId("timer-picker")).toBeDefined();
88
+ });
89
+ it("renders with minuteInterval", () => {
90
+ const {
91
+ getByTestId
92
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, {
93
+ minuteInterval: 15
94
+ }));
95
+ expect(getByTestId("timer-picker")).toBeDefined();
96
+ });
97
+ it("renders with secondInterval", () => {
98
+ const {
99
+ getByTestId
100
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, {
101
+ secondInterval: 5
102
+ }));
103
+ expect(getByTestId("timer-picker")).toBeDefined();
104
+ });
105
+ it("renders with custom labels", () => {
106
+ const {
107
+ getByText
108
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, {
109
+ hourLabel: "hrs",
110
+ minuteLabel: "mins",
111
+ secondLabel: "secs"
112
+ }));
113
+ expect(getByText("hrs")).toBeDefined();
114
+ expect(getByText("mins")).toBeDefined();
115
+ expect(getByText("secs")).toBeDefined();
116
+ });
117
+ it("renders with disabled state", () => {
118
+ const {
119
+ getByTestId
120
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, {
121
+ disabled: true
122
+ }));
123
+ expect(getByTestId("timer-picker")).toBeDefined();
124
+ });
125
+ it("renders LinearGradient when specified", () => {
126
+ const {
127
+ getByTestId
128
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, {
129
+ use12HourPicker: false
130
+ }));
131
+ expect(getByTestId("timer-picker")).toBeDefined();
132
+ });
133
+ it("handles combination of hide props", () => {
134
+ const {
135
+ queryByTestId
136
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, {
137
+ hideHours: true,
138
+ hideSeconds: true
139
+ }));
140
+ expect(queryByTestId("duration-scroll-hour")).toBeNull();
141
+ expect(queryByTestId("duration-scroll-minute")).toBeDefined();
142
+ expect(queryByTestId("duration-scroll-second")).toBeNull();
143
+ });
144
+ it("handles onDurationChange callback", () => {
145
+ const onDurationChangeMock = jest.fn();
146
+ const {
147
+ getByTestId
148
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, {
149
+ onDurationChange: onDurationChangeMock
150
+ }));
151
+ expect(getByTestId("timer-picker")).toBeDefined();
152
+ });
153
+ it("renders with all hide props and days enabled", () => {
154
+ const {
155
+ getByTestId,
156
+ queryByTestId
157
+ } = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, {
158
+ hideDays: false,
159
+ hideHours: true,
160
+ hideMinutes: true,
161
+ hideSeconds: true
162
+ }));
163
+ expect(getByTestId("duration-scroll-day")).toBeDefined();
164
+ expect(queryByTestId("duration-scroll-hour")).toBeNull();
165
+ expect(queryByTestId("duration-scroll-minute")).toBeNull();
166
+ expect(queryByTestId("duration-scroll-second")).toBeNull();
167
+ });
53
168
  });
54
169
  //# sourceMappingURL=TimerPicker.test.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_reactNative2","_TimerPicker","e","__esModule","default","_extends","Object","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","describe","it","getByTestId","render","createElement","component","expect","toBeDefined","padWithNItems","queryByTestId","hideDays","hideMinutes","hideSeconds","dayPicker","minutePicker","secondPicker","toBeNull","CustomFlatList","props","FlatList","testID","queryAllByTestId","customFlatList","toHaveLength"],"sources":["TimerPicker.test.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { render } from \"@testing-library/react-native\";\nimport { FlatList } from \"react-native\";\n\nimport TimerPicker from \"../components/TimerPicker\";\n\ndescribe(\"TimerPicker\", () => {\n it(\"renders without crashing\", () => {\n const { getByTestId } = render(<TimerPicker />);\n const component = getByTestId(\"timer-picker\");\n expect(component).toBeDefined();\n });\n\n it(\"renders without crashing with negative padWithNItems\", () => {\n const { getByTestId } = render(<TimerPicker padWithNItems={-1} />);\n const component = getByTestId(\"timer-picker\");\n expect(component).toBeDefined();\n });\n\n it(\"hides days, minutes and seconds when respective hide props are provided\", () => {\n const { queryByTestId } = render(\n <TimerPicker hideDays hideMinutes hideSeconds />\n );\n const dayPicker = queryByTestId(\"duration-scroll-day\");\n const minutePicker = queryByTestId(\"duration-scroll-minute\");\n const secondPicker = queryByTestId(\"duration-scroll-second\");\n expect(dayPicker).toBeNull();\n expect(minutePicker).toBeNull();\n expect(secondPicker).toBeNull();\n });\n\n it(\"uses the custom FlatList component when provided\", () => {\n const CustomFlatList = (props) => (\n <FlatList {...props} testID=\"custom-flat-list\" />\n );\n const { queryAllByTestId } = render(\n <TimerPicker FlatList={CustomFlatList} />\n );\n const customFlatList = queryAllByTestId(\"custom-flat-list\");\n expect(customFlatList).toHaveLength(3);\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_reactNative2","_TimerPicker","e","__esModule","default","_extends","Object","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","describe","it","getByTestId","render","createElement","component","expect","toBeDefined","padWithNItems","queryByTestId","hideDays","hideMinutes","hideSeconds","dayPicker","minutePicker","secondPicker","toBeNull","CustomFlatList","props","FlatList","testID","queryAllByTestId","customFlatList","toHaveLength","hideHours","initialValue","hours","minutes","seconds","hourInterval","minuteInterval","secondInterval","getByText","hourLabel","minuteLabel","secondLabel","disabled","use12HourPicker","onDurationChangeMock","jest","fn","onDurationChange"],"sources":["TimerPicker.test.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { render } from \"@testing-library/react-native\";\nimport { FlatList } from \"react-native\";\n\nimport TimerPicker from \"../components/TimerPicker\";\n\ndescribe(\"TimerPicker\", () => {\n it(\"renders without crashing\", () => {\n const { getByTestId } = render(<TimerPicker />);\n const component = getByTestId(\"timer-picker\");\n expect(component).toBeDefined();\n });\n\n it(\"renders without crashing with negative padWithNItems\", () => {\n const { getByTestId } = render(<TimerPicker padWithNItems={-1} />);\n const component = getByTestId(\"timer-picker\");\n expect(component).toBeDefined();\n });\n\n it(\"hides days, minutes and seconds when respective hide props are provided\", () => {\n const { queryByTestId } = render(\n <TimerPicker hideDays hideMinutes hideSeconds />\n );\n const dayPicker = queryByTestId(\"duration-scroll-day\");\n const minutePicker = queryByTestId(\"duration-scroll-minute\");\n const secondPicker = queryByTestId(\"duration-scroll-second\");\n expect(dayPicker).toBeNull();\n expect(minutePicker).toBeNull();\n expect(secondPicker).toBeNull();\n });\n\n it(\"uses the custom FlatList component when provided\", () => {\n const CustomFlatList = (props) => (\n <FlatList {...props} testID=\"custom-flat-list\" />\n );\n const { queryAllByTestId } = render(\n <TimerPicker FlatList={CustomFlatList} />\n );\n const customFlatList = queryAllByTestId(\"custom-flat-list\");\n expect(customFlatList).toHaveLength(3);\n });\n\n it(\"renders all pickers by default (hours, minutes, seconds)\", () => {\n const { getByTestId } = render(<TimerPicker />);\n expect(getByTestId(\"duration-scroll-hour\")).toBeDefined();\n expect(getByTestId(\"duration-scroll-minute\")).toBeDefined();\n expect(getByTestId(\"duration-scroll-second\")).toBeDefined();\n });\n\n it(\"hides hours when hideHours is true\", () => {\n const { queryByTestId } = render(<TimerPicker hideHours />);\n expect(queryByTestId(\"duration-scroll-hour\")).toBeNull();\n });\n\n it(\"renders with custom initial value\", () => {\n const { getByTestId } = render(\n <TimerPicker initialValue={{ hours: 2, minutes: 30, seconds: 45 }} />\n );\n expect(getByTestId(\"timer-picker\")).toBeDefined();\n });\n\n it(\"renders with hourInterval\", () => {\n const { getByTestId } = render(<TimerPicker hourInterval={2} />);\n expect(getByTestId(\"timer-picker\")).toBeDefined();\n });\n\n it(\"renders with minuteInterval\", () => {\n const { getByTestId } = render(<TimerPicker minuteInterval={15} />);\n expect(getByTestId(\"timer-picker\")).toBeDefined();\n });\n\n it(\"renders with secondInterval\", () => {\n const { getByTestId } = render(<TimerPicker secondInterval={5} />);\n expect(getByTestId(\"timer-picker\")).toBeDefined();\n });\n\n it(\"renders with custom labels\", () => {\n const { getByText } = render(\n <TimerPicker\n hourLabel=\"hrs\"\n minuteLabel=\"mins\"\n secondLabel=\"secs\"\n />\n );\n expect(getByText(\"hrs\")).toBeDefined();\n expect(getByText(\"mins\")).toBeDefined();\n expect(getByText(\"secs\")).toBeDefined();\n });\n\n it(\"renders with disabled state\", () => {\n const { getByTestId } = render(<TimerPicker disabled />);\n expect(getByTestId(\"timer-picker\")).toBeDefined();\n });\n\n it(\"renders LinearGradient when specified\", () => {\n const { getByTestId } = render(<TimerPicker use12HourPicker={false} />);\n expect(getByTestId(\"timer-picker\")).toBeDefined();\n });\n\n it(\"handles combination of hide props\", () => {\n const { queryByTestId } = render(\n <TimerPicker hideHours hideSeconds />\n );\n expect(queryByTestId(\"duration-scroll-hour\")).toBeNull();\n expect(queryByTestId(\"duration-scroll-minute\")).toBeDefined();\n expect(queryByTestId(\"duration-scroll-second\")).toBeNull();\n });\n\n it(\"handles onDurationChange callback\", () => {\n const onDurationChangeMock = jest.fn();\n const { getByTestId } = render(\n <TimerPicker onDurationChange={onDurationChangeMock} />\n );\n expect(getByTestId(\"timer-picker\")).toBeDefined();\n });\n\n it(\"renders with all hide props and days enabled\", () => {\n const { getByTestId, queryByTestId } = render(\n <TimerPicker hideDays={false} hideHours hideMinutes hideSeconds />\n );\n expect(getByTestId(\"duration-scroll-day\")).toBeDefined();\n expect(queryByTestId(\"duration-scroll-hour\")).toBeNull();\n expect(queryByTestId(\"duration-scroll-minute\")).toBeNull();\n expect(queryByTestId(\"duration-scroll-second\")).toBeNull();\n });\n});\n"],"mappings":"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","ignoreList":[]}