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.
- package/README.md +82 -53
- package/dist/commonjs/components/DurationScroll/index.js +154 -76
- package/dist/commonjs/components/DurationScroll/index.js.map +1 -1
- package/dist/commonjs/components/DurationScroll/types.js.map +1 -1
- package/dist/commonjs/components/TimerPicker/index.js +31 -10
- package/dist/commonjs/components/TimerPicker/index.js.map +1 -1
- package/dist/commonjs/components/TimerPicker/types.js.map +1 -1
- package/dist/commonjs/tests/DurationScroll.test.js +3 -3
- package/dist/commonjs/tests/DurationScroll.test.js.map +1 -1
- package/dist/commonjs/tests/Modal.test.js +3 -3
- package/dist/commonjs/tests/Modal.test.js.map +1 -1
- package/dist/commonjs/tests/TimerPicker.test.js +4 -4
- package/dist/commonjs/tests/TimerPicker.test.js.map +1 -1
- package/dist/commonjs/tests/TimerPickerModal.test.js +6 -6
- package/dist/commonjs/tests/TimerPickerModal.test.js.map +1 -1
- package/dist/commonjs/utils/generateNumbers.js +7 -6
- package/dist/commonjs/utils/generateNumbers.js.map +1 -1
- package/dist/commonjs/utils/getAdjustedLimit.js +5 -4
- package/dist/commonjs/utils/getAdjustedLimit.js.map +1 -1
- package/dist/commonjs/utils/getDurationAndIndexFromScrollOffset.js +24 -0
- package/dist/commonjs/utils/getDurationAndIndexFromScrollOffset.js.map +1 -0
- package/dist/commonjs/utils/getInitialScrollIndex.js +19 -0
- package/dist/commonjs/utils/getInitialScrollIndex.js.map +1 -0
- package/dist/module/components/DurationScroll/index.js +154 -76
- package/dist/module/components/DurationScroll/index.js.map +1 -1
- package/dist/module/components/DurationScroll/types.js.map +1 -1
- package/dist/module/components/TimerPicker/index.js +31 -10
- package/dist/module/components/TimerPicker/index.js.map +1 -1
- package/dist/module/components/TimerPicker/types.js.map +1 -1
- package/dist/module/tests/DurationScroll.test.js +3 -3
- package/dist/module/tests/DurationScroll.test.js.map +1 -1
- package/dist/module/tests/Modal.test.js +3 -3
- package/dist/module/tests/Modal.test.js.map +1 -1
- package/dist/module/tests/TimerPicker.test.js +4 -4
- package/dist/module/tests/TimerPicker.test.js.map +1 -1
- package/dist/module/tests/TimerPickerModal.test.js +6 -6
- package/dist/module/tests/TimerPickerModal.test.js.map +1 -1
- package/dist/module/utils/generateNumbers.js +7 -6
- package/dist/module/utils/generateNumbers.js.map +1 -1
- package/dist/module/utils/getAdjustedLimit.js +5 -4
- package/dist/module/utils/getAdjustedLimit.js.map +1 -1
- package/dist/module/utils/getDurationAndIndexFromScrollOffset.js +17 -0
- package/dist/module/utils/getDurationAndIndexFromScrollOffset.js.map +1 -0
- package/dist/module/utils/getInitialScrollIndex.js +12 -0
- package/dist/module/utils/getInitialScrollIndex.js.map +1 -0
- package/dist/typescript/components/DurationScroll/types.d.ts +4 -1
- package/dist/typescript/components/TimerPicker/types.d.ts +7 -0
- package/dist/typescript/utils/generateNumbers.d.ts +3 -1
- package/dist/typescript/utils/getAdjustedLimit.d.ts +1 -1
- package/dist/typescript/utils/getDurationAndIndexFromScrollOffset.d.ts +11 -0
- package/dist/typescript/utils/{getScrollIndex.d.ts → getInitialScrollIndex.d.ts} +3 -1
- package/package.json +14 -10
- package/dist/commonjs/utils/getScrollIndex.js +0 -17
- package/dist/commonjs/utils/getScrollIndex.js.map +0 -1
- package/dist/module/utils/getScrollIndex.js +0 -10
- package/dist/module/utils/getScrollIndex.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","render","fireEvent","TimerPickerModal","describe","mockOnConfirm","jest","fn","mockOnCancel","defaultProps","visible","setIsVisible","onConfirm","onCancel","it","getByTestId","createElement","component","expect","toBeDefined","getByText","confirmButton","press","toHaveBeenCalled","cancelButton","setIsVisibleMock","_extends","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":";AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAASC,MAAM,EAAEC,SAAS,QAAQ,+BAA+B;AAEjE,OAAOC,gBAAgB,MAAM,gCAAgC;AAE7DC,QAAQ,CAAC,kBAAkB,EAAE,MAAM;EAC/B,MAAMC,aAAa,GAAGC,IAAI,CAACC,EAAE,CAAC,CAAC;EAC/B,MAAMC,YAAY,GAAGF,IAAI,CAACC,EAAE,CAAC,CAAC;EAE9B,MAAME,YAAY,GAAG;IACjBC,OAAO,EAAE,IAAI;IACbC,YAAY,EAAEL,IAAI,CAACC,EAAE,CAAC,CAAC;IACvBK,SAAS,EAAEP,aAAa;IACxBQ,QAAQ,EAAEL;EACd,CAAC;EAEDM,EAAE,CAAC,0BAA0B,EAAE,MAAM;IACjC,MAAM;MAAEC;IAAY,CAAC,GAAGd,MAAM,
|
|
1
|
+
{"version":3,"names":["React","render","fireEvent","TimerPickerModal","describe","mockOnConfirm","jest","fn","mockOnCancel","defaultProps","visible","setIsVisible","onConfirm","onCancel","it","getByTestId","createElement","component","expect","toBeDefined","getByText","confirmButton","press","toHaveBeenCalled","cancelButton","setIsVisibleMock","_extends","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":[]}
|
|
@@ -4,15 +4,16 @@ export const generateNumbers = (numberOfItems, options) => {
|
|
|
4
4
|
return [];
|
|
5
5
|
}
|
|
6
6
|
let numbers = [];
|
|
7
|
-
for (let i = 0; i
|
|
8
|
-
|
|
7
|
+
for (let i = 0; i < numberOfItems; i++) {
|
|
8
|
+
const value = i * options.interval;
|
|
9
|
+
numbers.push(padNumber(value, {
|
|
9
10
|
padWithZero: options.padNumbersWithZero
|
|
10
11
|
}));
|
|
11
12
|
}
|
|
12
|
-
if (
|
|
13
|
+
if (options.repeatNTimes > 1) {
|
|
13
14
|
numbers = Array(options.repeatNTimes).fill(numbers).flat();
|
|
14
15
|
}
|
|
15
|
-
if (options.disableInfiniteScroll) {
|
|
16
|
+
if (options.disableInfiniteScroll || options.repeatNTimes === 1) {
|
|
16
17
|
numbers.push(...Array(options.padWithNItems).fill(""));
|
|
17
18
|
numbers.unshift(...Array(options.padWithNItems).fill(""));
|
|
18
19
|
}
|
|
@@ -22,14 +23,14 @@ export const generate12HourNumbers = options => {
|
|
|
22
23
|
let numbers = [];
|
|
23
24
|
|
|
24
25
|
// Generate numbers from 0 to 11 for AM
|
|
25
|
-
for (let i = 0; i
|
|
26
|
+
for (let i = 0; i < 12; i += options.interval) {
|
|
26
27
|
numbers.push(`${padNumber(i, {
|
|
27
28
|
padWithZero: options.padNumbersWithZero
|
|
28
29
|
})} AM`);
|
|
29
30
|
}
|
|
30
31
|
|
|
31
32
|
// Generate numbers from 12 to 11 for PM
|
|
32
|
-
for (let i = 12; i
|
|
33
|
+
for (let i = 12; i < 24; i += options.interval) {
|
|
33
34
|
const hour = i > 12 ? i - 12 : i;
|
|
34
35
|
numbers.push(`${padNumber(hour, {
|
|
35
36
|
padWithZero: options.padNumbersWithZero
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["padNumber","generateNumbers","numberOfItems","options","numbers","i","push","padWithZero","padNumbersWithZero","repeatNTimes","Array","fill","flat","disableInfiniteScroll","padWithNItems","unshift","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
|
|
1
|
+
{"version":3,"names":["padNumber","generateNumbers","numberOfItems","options","numbers","i","value","interval","push","padWithZero","padNumbersWithZero","repeatNTimes","Array","fill","flat","disableInfiniteScroll","padWithNItems","unshift","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,SAASA,SAAS,QAAQ,aAAa;AAEvC,OAAO,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,CACRR,SAAS,CAACM,KAAK,EAAE;MAAEG,WAAW,EAAEN,OAAO,CAACO;IAAmB,CAAC,CAChE,CAAC;EACL;EAEA,IAAIP,OAAO,CAACQ,YAAY,GAAG,CAAC,EAAE;IAC1BP,OAAO,GAAGQ,KAAK,CAACT,OAAO,CAACQ,YAAY,CAAC,CAACE,IAAI,CAACT,OAAO,CAAC,CAACU,IAAI,CAAC,CAAC;EAC9D;EACA,IAAIX,OAAO,CAACY,qBAAqB,IAAIZ,OAAO,CAACQ,YAAY,KAAK,CAAC,EAAE;IAC7DP,OAAO,CAACI,IAAI,CAAC,GAAGI,KAAK,CAACT,OAAO,CAACa,aAAa,CAAC,CAACH,IAAI,CAAC,EAAE,CAAC,CAAC;IACtDT,OAAO,CAACa,OAAO,CAAC,GAAGL,KAAK,CAACT,OAAO,CAACa,aAAa,CAAC,CAACH,IAAI,CAAC,EAAE,CAAC,CAAC;EAC7D;EACA,OAAOT,OAAO;AAClB,CAAC;AAED,OAAO,MAAMc,qBAAqB,GAAIf,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,GAAGR,SAAS,CAACK,CAAC,EAAE;MAAEI,WAAW,EAAEN,OAAO,CAACO;IAAmB,CAAC,CAAC,KAChE,CAAC;EACL;;EAEA;EACA,KAAK,IAAIL,CAAC,GAAG,EAAE,EAAEA,CAAC,GAAG,EAAE,EAAEA,CAAC,IAAIF,OAAO,CAACI,QAAQ,EAAE;IAC5C,MAAMY,IAAI,GAAGd,CAAC,GAAG,EAAE,GAAGA,CAAC,GAAG,EAAE,GAAGA,CAAC;IAChCD,OAAO,CAACI,IAAI,CACR,GAAGR,SAAS,CAACmB,IAAI,EAAE;MAAEV,WAAW,EAAEN,OAAO,CAACO;IAAmB,CAAC,CAAC,KACnE,CAAC;EACL;EAEA,IAAI,CAACP,OAAO,CAACQ,YAAY,IAAI,CAAC,IAAI,CAAC,EAAE;IACjCP,OAAO,GAAGQ,KAAK,CAACT,OAAO,CAACQ,YAAY,CAAC,CAACE,IAAI,CAACT,OAAO,CAAC,CAACU,IAAI,CAAC,CAAC;EAC9D;EAEA,IAAIX,OAAO,CAACY,qBAAqB,EAAE;IAC/BX,OAAO,CAACI,IAAI,CAAC,GAAGI,KAAK,CAACT,OAAO,CAACa,aAAa,CAAC,CAACH,IAAI,CAAC,EAAE,CAAC,CAAC;IACtDT,OAAO,CAACa,OAAO,CAAC,GAAGL,KAAK,CAACT,OAAO,CAACa,aAAa,CAAC,CAACH,IAAI,CAAC,EAAE,CAAC,CAAC;EAC7D;EAEA,OAAOT,OAAO;AAClB,CAAC","ignoreList":[]}
|
|
@@ -1,19 +1,20 @@
|
|
|
1
|
-
export const getAdjustedLimit = (limit, numberOfItems) => {
|
|
1
|
+
export const getAdjustedLimit = (limit, numberOfItems, interval) => {
|
|
2
|
+
const maxValue = (numberOfItems - 1) * interval;
|
|
2
3
|
if (!limit || !limit.max && !limit.min) {
|
|
3
4
|
return {
|
|
4
|
-
max:
|
|
5
|
+
max: maxValue,
|
|
5
6
|
min: 0
|
|
6
7
|
};
|
|
7
8
|
}
|
|
8
9
|
|
|
9
10
|
// guard against limits that are out of bounds
|
|
10
|
-
const adjustedMaxLimit = limit.max ? Math.min(limit.max,
|
|
11
|
+
const adjustedMaxLimit = limit.max ? Math.min(limit.max, maxValue) : maxValue;
|
|
11
12
|
const adjustedMinLimit = limit.min ? Math.max(limit.min, 0) : 0;
|
|
12
13
|
|
|
13
14
|
// guard against invalid limits
|
|
14
15
|
if (adjustedMaxLimit < adjustedMinLimit) {
|
|
15
16
|
return {
|
|
16
|
-
max:
|
|
17
|
+
max: maxValue,
|
|
17
18
|
min: 0
|
|
18
19
|
};
|
|
19
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getAdjustedLimit","limit","numberOfItems","max","min","adjustedMaxLimit","Math","adjustedMinLimit"],"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:
|
|
1
|
+
{"version":3,"names":["getAdjustedLimit","limit","numberOfItems","interval","maxValue","max","min","adjustedMaxLimit","Math","adjustedMinLimit"],"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":"AAEA,OAAO,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","ignoreList":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export const getDurationAndIndexFromScrollOffset = variables => {
|
|
2
|
+
const {
|
|
3
|
+
disableInfiniteScroll,
|
|
4
|
+
interval,
|
|
5
|
+
itemHeight,
|
|
6
|
+
numberOfItems,
|
|
7
|
+
padWithNItems,
|
|
8
|
+
yContentOffset
|
|
9
|
+
} = variables;
|
|
10
|
+
const index = Math.round(yContentOffset / itemHeight);
|
|
11
|
+
const duration = (disableInfiniteScroll ? index : index + padWithNItems) % numberOfItems * interval;
|
|
12
|
+
return {
|
|
13
|
+
duration,
|
|
14
|
+
index
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=getDurationAndIndexFromScrollOffset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["getDurationAndIndexFromScrollOffset","variables","disableInfiniteScroll","interval","itemHeight","numberOfItems","padWithNItems","yContentOffset","index","Math","round","duration"],"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":"AAAA,OAAO,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","ignoreList":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const getInitialScrollIndex = variables => {
|
|
2
|
+
const {
|
|
3
|
+
disableInfiniteScroll,
|
|
4
|
+
interval,
|
|
5
|
+
numberOfItems,
|
|
6
|
+
padWithNItems,
|
|
7
|
+
repeatNumbersNTimes,
|
|
8
|
+
value
|
|
9
|
+
} = variables;
|
|
10
|
+
return Math.max(numberOfItems * Math.floor(repeatNumbersNTimes / 2) + (value / interval + numberOfItems) % numberOfItems - (!disableInfiniteScroll ? padWithNItems : 0), 0);
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=getInitialScrollIndex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["getInitialScrollIndex","variables","disableInfiniteScroll","interval","numberOfItems","padWithNItems","repeatNumbersNTimes","value","Math","max","floor"],"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":"AAAA,OAAO,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","ignoreList":[]}
|
|
@@ -14,17 +14,20 @@ export interface DurationScrollProps {
|
|
|
14
14
|
clickSoundAsset?: SoundAssetType;
|
|
15
15
|
disableInfiniteScroll?: boolean;
|
|
16
16
|
initialValue?: number;
|
|
17
|
+
interval: number;
|
|
17
18
|
is12HourPicker?: boolean;
|
|
18
19
|
isDisabled?: boolean;
|
|
19
20
|
label?: string | React.ReactElement;
|
|
20
21
|
limit?: LimitType;
|
|
21
|
-
|
|
22
|
+
maximumValue: number;
|
|
22
23
|
onDurationChange: (duration: number) => void;
|
|
23
24
|
padNumbersWithZero?: boolean;
|
|
24
25
|
padWithNItems: number;
|
|
26
|
+
pickerFeedback?: () => void | Promise<void>;
|
|
25
27
|
pickerGradientOverlayProps?: Partial<LinearGradientProps>;
|
|
26
28
|
pmLabel?: string;
|
|
27
29
|
repeatNumbersNTimes?: number;
|
|
30
|
+
repeatNumbersNTimesNotExplicitlySet: boolean;
|
|
28
31
|
styles: ReturnType<typeof generateStyles>;
|
|
29
32
|
testID?: string;
|
|
30
33
|
topPickerGradientOverlayProps?: Partial<LinearGradientProps>;
|
|
@@ -33,6 +33,7 @@ export interface TimerPickerProps {
|
|
|
33
33
|
hideHours?: boolean;
|
|
34
34
|
hideMinutes?: boolean;
|
|
35
35
|
hideSeconds?: boolean;
|
|
36
|
+
hourInterval?: number;
|
|
36
37
|
hourLabel?: string | React.ReactElement;
|
|
37
38
|
hourLimit?: LimitType;
|
|
38
39
|
hoursPickerIsDisabled?: boolean;
|
|
@@ -41,6 +42,10 @@ export interface TimerPickerProps {
|
|
|
41
42
|
minutes?: number;
|
|
42
43
|
seconds?: number;
|
|
43
44
|
};
|
|
45
|
+
maximumHours?: number;
|
|
46
|
+
maximumMinutes?: number;
|
|
47
|
+
maximumSeconds?: number;
|
|
48
|
+
minuteInterval?: number;
|
|
44
49
|
minuteLabel?: string | React.ReactElement;
|
|
45
50
|
minuteLimit?: LimitType;
|
|
46
51
|
minutesPickerIsDisabled?: boolean;
|
|
@@ -54,11 +59,13 @@ export interface TimerPickerProps {
|
|
|
54
59
|
padSecondsWithZero?: boolean;
|
|
55
60
|
padWithNItems?: number;
|
|
56
61
|
pickerContainerProps?: React.ComponentProps<typeof View>;
|
|
62
|
+
pickerFeedback?: () => void | Promise<void>;
|
|
57
63
|
pickerGradientOverlayProps?: Partial<LinearGradientProps>;
|
|
58
64
|
pmLabel?: string;
|
|
59
65
|
repeatHourNumbersNTimes?: number;
|
|
60
66
|
repeatMinuteNumbersNTimes?: number;
|
|
61
67
|
repeatSecondNumbersNTimes?: number;
|
|
68
|
+
secondInterval?: number;
|
|
62
69
|
secondLabel?: string | React.ReactElement;
|
|
63
70
|
secondLimit?: LimitType;
|
|
64
71
|
secondsPickerIsDisabled?: boolean;
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
export declare const generateNumbers: (numberOfItems: number, options: {
|
|
2
2
|
disableInfiniteScroll?: boolean;
|
|
3
|
+
interval: number;
|
|
3
4
|
padNumbersWithZero?: boolean;
|
|
4
5
|
padWithNItems: number;
|
|
5
|
-
repeatNTimes
|
|
6
|
+
repeatNTimes: number;
|
|
6
7
|
}) => string[];
|
|
7
8
|
export declare const generate12HourNumbers: (options: {
|
|
8
9
|
disableInfiniteScroll?: boolean;
|
|
10
|
+
interval: number;
|
|
9
11
|
padNumbersWithZero?: boolean;
|
|
10
12
|
padWithNItems: number;
|
|
11
13
|
repeatNTimes?: number;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { LimitType } from "../components/DurationScroll/types";
|
|
2
|
-
export declare const getAdjustedLimit: (limit: LimitType | undefined, numberOfItems: number) => {
|
|
2
|
+
export declare const getAdjustedLimit: (limit: LimitType | undefined, numberOfItems: number, interval: number) => {
|
|
3
3
|
max: number;
|
|
4
4
|
min: number;
|
|
5
5
|
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const getDurationAndIndexFromScrollOffset: (variables: {
|
|
2
|
+
disableInfiniteScroll: boolean;
|
|
3
|
+
interval: number;
|
|
4
|
+
itemHeight: number;
|
|
5
|
+
numberOfItems: number;
|
|
6
|
+
padWithNItems: number;
|
|
7
|
+
yContentOffset: number;
|
|
8
|
+
}) => {
|
|
9
|
+
duration: number;
|
|
10
|
+
index: number;
|
|
11
|
+
};
|
package/package.json
CHANGED
|
@@ -6,18 +6,22 @@
|
|
|
6
6
|
"url": "https://github.com/troberts-28"
|
|
7
7
|
},
|
|
8
8
|
"license": "MIT",
|
|
9
|
-
"version": "
|
|
9
|
+
"version": "2.0.0",
|
|
10
10
|
"main": "dist/commonjs/index.js",
|
|
11
11
|
"module": "dist/module/index.js",
|
|
12
12
|
"types": "dist/typescript/index.d.ts",
|
|
13
13
|
"typings": "dist/typescript/index.d.ts",
|
|
14
|
-
|
|
14
|
+
"packageManager": "yarn@3.6.4",
|
|
15
|
+
"workspaces": {
|
|
16
|
+
"packages": [
|
|
17
|
+
"examples/*"
|
|
18
|
+
]
|
|
19
|
+
},
|
|
15
20
|
"scripts": {
|
|
16
|
-
"setup": "yarn
|
|
17
|
-
"
|
|
18
|
-
"start": "
|
|
19
|
-
"start-bare:
|
|
20
|
-
"start-bare:ios": " cd example-bare && yarn ios && yarn start",
|
|
21
|
+
"setup": "yarn install",
|
|
22
|
+
"start": " yarn workspace example-expo start",
|
|
23
|
+
"start-bare:android": "yarn workspace example-bare android && yarn workspace example-bare start",
|
|
24
|
+
"start-bare:ios": "yarn workspace example-bare android && yarn workspace example-bare start",
|
|
21
25
|
"test": "jest --forceExit --silent",
|
|
22
26
|
"build": "bob build",
|
|
23
27
|
"clean": "rm yarn.lock && rm -rf ./node_modules && yarn install",
|
|
@@ -96,13 +100,13 @@
|
|
|
96
100
|
"testEnvironment": "node",
|
|
97
101
|
"modulePathIgnorePatterns": [
|
|
98
102
|
"<rootDir>/dist/",
|
|
99
|
-
"<rootDir>/
|
|
103
|
+
"<rootDir>/examples/"
|
|
100
104
|
],
|
|
101
105
|
"transformIgnorePatterns": []
|
|
102
106
|
},
|
|
103
107
|
"peerDependencies": {
|
|
104
|
-
"react": ">=
|
|
105
|
-
"react-native": ">=0.
|
|
108
|
+
"react": ">=18.2.0",
|
|
109
|
+
"react-native": ">=0.72.0"
|
|
106
110
|
},
|
|
107
111
|
"devDependencies": {
|
|
108
112
|
"@babel/core": "^7.20.0",
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.getScrollIndex = void 0;
|
|
7
|
-
const getScrollIndex = variables => {
|
|
8
|
-
const {
|
|
9
|
-
numberOfItems,
|
|
10
|
-
padWithNItems,
|
|
11
|
-
repeatNumbersNTimes,
|
|
12
|
-
value
|
|
13
|
-
} = variables;
|
|
14
|
-
return (value + numberOfItems) % (numberOfItems * repeatNumbersNTimes) + (padWithNItems - 1);
|
|
15
|
-
};
|
|
16
|
-
exports.getScrollIndex = getScrollIndex;
|
|
17
|
-
//# sourceMappingURL=getScrollIndex.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["getScrollIndex","variables","numberOfItems","padWithNItems","repeatNumbersNTimes","value","exports"],"sources":["getScrollIndex.ts"],"sourcesContent":["export const getScrollIndex = (variables: {\n numberOfItems: number;\n padWithNItems: number;\n repeatNumbersNTimes: number;\n value: number;\n}) => {\n const {\n numberOfItems,\n padWithNItems,\n repeatNumbersNTimes,\n value,\n } = variables;\n\n return (\n ((value + numberOfItems) % (numberOfItems * repeatNumbersNTimes)) +\n (padWithNItems - 1)\n );\n};\n"],"mappings":";;;;;;AAAO,MAAMA,cAAc,GAAIC,SAK9B,IAAK;EACF,MAAM;IACFC,aAAa;IACbC,aAAa;IACbC,mBAAmB;IACnBC;EACJ,CAAC,GAAGJ,SAAS;EAEb,OACK,CAACI,KAAK,GAAGH,aAAa,KAAKA,aAAa,GAAGE,mBAAmB,CAAC,IAC/DD,aAAa,GAAG,CAAC,CAAC;AAE3B,CAAC;AAACG,OAAA,CAAAN,cAAA,GAAAA,cAAA","ignoreList":[]}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export const getScrollIndex = variables => {
|
|
2
|
-
const {
|
|
3
|
-
numberOfItems,
|
|
4
|
-
padWithNItems,
|
|
5
|
-
repeatNumbersNTimes,
|
|
6
|
-
value
|
|
7
|
-
} = variables;
|
|
8
|
-
return (value + numberOfItems) % (numberOfItems * repeatNumbersNTimes) + (padWithNItems - 1);
|
|
9
|
-
};
|
|
10
|
-
//# sourceMappingURL=getScrollIndex.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["getScrollIndex","variables","numberOfItems","padWithNItems","repeatNumbersNTimes","value"],"sources":["getScrollIndex.ts"],"sourcesContent":["export const getScrollIndex = (variables: {\n numberOfItems: number;\n padWithNItems: number;\n repeatNumbersNTimes: number;\n value: number;\n}) => {\n const {\n numberOfItems,\n padWithNItems,\n repeatNumbersNTimes,\n value,\n } = variables;\n\n return (\n ((value + numberOfItems) % (numberOfItems * repeatNumbersNTimes)) +\n (padWithNItems - 1)\n );\n};\n"],"mappings":"AAAA,OAAO,MAAMA,cAAc,GAAIC,SAK9B,IAAK;EACF,MAAM;IACFC,aAAa;IACbC,aAAa;IACbC,mBAAmB;IACnBC;EACJ,CAAC,GAAGJ,SAAS;EAEb,OACK,CAACI,KAAK,GAAGH,aAAa,KAAKA,aAAa,GAAGE,mBAAmB,CAAC,IAC/DD,aAAa,GAAG,CAAC,CAAC;AAE3B,CAAC","ignoreList":[]}
|