react-native-paper-dates 0.8.6 → 0.8.7

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.
@@ -65,10 +65,12 @@ function AnalogClock(_ref) {
65
65
  let hours24 = is24HourRef.current;
66
66
  let previousHourType = (0, _timeUtils.getHourType)(hoursRef.current);
67
67
  let pickedHours = (0, _timeUtils.getHours)(angle, previousHourType);
68
- let hours12AndPm = !hours24 && modeRef.current === 'PM'; // Avoiding the "24h"
68
+ let hours12AndPm = !hours24 && modeRef.current === 'AM';
69
+ let hourTypeFromOffset = (0, _timeUtils.getHourTypeFromOffset)(x, y, _timeUtils.circleSize);
70
+ let hours24AndPM = hours24 && hourTypeFromOffset === _timeUtils.hourTypes.pm; // Avoiding the "24h"
69
71
  // Should be 12h for 12 hours and PM mode
70
72
 
71
- if ((hours12AndPm || hours24) && pickedHours + 12 < 24) {
73
+ if (hours12AndPm || hours24AndPM) {
72
74
  pickedHours += 12;
73
75
  }
74
76
 
@@ -76,7 +78,7 @@ function AnalogClock(_ref) {
76
78
  pickedHours = 0;
77
79
  }
78
80
 
79
- if (pickedHours === 24) {
81
+ if (!hours24 && modeRef.current === 'AM' && pickedHours === 12 || pickedHours === 24) {
80
82
  pickedHours = 0;
81
83
  }
82
84
 
@@ -1 +1 @@
1
- {"version":3,"sources":["AnalogClock.tsx"],"names":["AnalogClock","hours","minutes","focused","is24Hour","onChange","theme","mode","React","useContext","DisplayModeContext","shortPointer","clockRef","useRef","hoursRef","onChangeRef","minutesRef","focusedRef","is24HourRef","modeRef","onPointerMove","useCallback","e","final","x","nativeEvent","locationX","y","locationY","angle","circleSize","current","clockTypes","hours24","previousHourType","pickedHours","hours12AndPm","undefined","pickedMinutes","panResponder","PanResponder","create","onPanResponderGrant","onPanResponderMove","onPanResponderRelease","onStartShouldSetPanResponder","returnTrue","onStartShouldSetPanResponderCapture","onMoveShouldSetPanResponder","onMoveShouldSetPanResponderCapture","onPanResponderTerminationRequest","onShouldBlockNativeResponder","dynamicSize","pointerNumber","degreesPerNumber","panHandlers","styles","clock","backgroundColor","dark","colors","surface","lighten","hex","darken","line","primary","transform","rotate","translateX","width","endPoint","StyleSheet","absoluteFill","center","middlePoint","height","position","justifyContent","alignItems","borderRadius","right","bottom","marginBottom","memo"],"mappings":"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","sourcesContent":["import Color from 'color'\nimport {\n GestureResponderEvent,\n PanResponder,\n StyleSheet,\n View,\n} from 'react-native'\nimport { useTheme } from 'react-native-paper'\nimport {\n circleSize,\n clockTypes,\n getAngle,\n getHours,\n getHourType,\n getMinutes,\n PossibleClockTypes,\n} from './timeUtils'\nimport * as React from 'react'\n\nimport { useLatest } from '../utils'\nimport AnalogClockHours from './AnalogClockHours'\n\nimport AnimatedClockSwitcher from './AnimatedClockSwitcher'\nimport AnalogClockMinutes from './AnalogClockMinutes'\nimport { DisplayModeContext } from './TimePicker'\n\nfunction AnalogClock({\n hours,\n minutes,\n focused,\n is24Hour,\n onChange,\n}: {\n hours: number\n minutes: number\n focused: PossibleClockTypes\n is24Hour: boolean\n onChange: (hoursMinutesAndFocused: {\n hours: number\n minutes: number\n focused?: undefined | PossibleClockTypes\n }) => any\n}) {\n const theme = useTheme()\n const { mode } = React.useContext(DisplayModeContext)\n // used to make pointer shorter if hours are selected and above 12\n const shortPointer = (hours === 0 || hours > 12) && is24Hour\n\n const clockRef = React.useRef<View | null>(null)\n\n // Hooks are nice, sometimes... :-)..\n // We need the latest values, since the onPointerMove uses a closure to the function\n const hoursRef = useLatest(hours)\n const onChangeRef = useLatest(onChange)\n const minutesRef = useLatest(minutes)\n const focusedRef = useLatest(focused)\n const is24HourRef = useLatest(is24Hour)\n const modeRef = useLatest(mode)\n\n const onPointerMove = React.useCallback(\n (e: GestureResponderEvent, final: boolean) => {\n let x = e.nativeEvent.locationX\n let y = e.nativeEvent.locationY\n\n let angle = getAngle(x, y, circleSize)\n\n if (focusedRef.current === clockTypes.hours) {\n let hours24 = is24HourRef.current\n let previousHourType = getHourType(hoursRef.current)\n let pickedHours = getHours(angle, previousHourType)\n\n let hours12AndPm = !hours24 && modeRef.current === 'PM'\n\n // Avoiding the \"24h\"\n // Should be 12h for 12 hours and PM mode\n if ((hours12AndPm || hours24) && pickedHours + 12 < 24) {\n pickedHours += 12\n }\n if (modeRef.current === 'AM' && pickedHours === 12) {\n pickedHours = 0\n }\n\n if (pickedHours === 24) {\n pickedHours = 0\n }\n\n if (hoursRef.current !== pickedHours || final) {\n onChangeRef.current({\n hours: pickedHours,\n minutes: minutesRef.current,\n focused: final ? clockTypes.minutes : undefined,\n })\n }\n } else if (focusedRef.current === clockTypes.minutes) {\n let pickedMinutes = getMinutes(angle)\n if (minutesRef.current !== pickedMinutes) {\n onChangeRef.current({\n hours: hoursRef.current,\n minutes: pickedMinutes,\n })\n }\n }\n },\n [focusedRef, is24HourRef, hoursRef, onChangeRef, minutesRef, modeRef]\n )\n\n const panResponder = React.useRef(\n PanResponder.create({\n onPanResponderGrant: (e) => onPointerMove(e, false),\n onPanResponderMove: (e) => onPointerMove(e, false),\n onPanResponderRelease: (e) => onPointerMove(e, true),\n\n onStartShouldSetPanResponder: returnTrue,\n onStartShouldSetPanResponderCapture: () => false,\n onMoveShouldSetPanResponder: returnTrue,\n onMoveShouldSetPanResponderCapture: returnTrue,\n onPanResponderTerminationRequest: returnTrue,\n onShouldBlockNativeResponder: returnTrue,\n })\n ).current\n\n const dynamicSize = focused === clockTypes.hours && shortPointer ? 33 : 0\n const pointerNumber = focused === clockTypes.hours ? hours : minutes\n const degreesPerNumber = focused === clockTypes.hours ? 30 : 6\n return (\n <View\n ref={clockRef}\n {...panResponder.panHandlers}\n style={[\n styles.clock,\n {\n backgroundColor: theme.dark\n ? Color(theme.colors.surface).lighten(1.2).hex()\n : Color(theme.colors.surface).darken(0.1).hex(),\n },\n ]}\n // @ts-ignore -> https://github.com/necolas/react-native-web/issues/506\n cursor={'pointer'}\n >\n <View\n style={[\n styles.line,\n {\n backgroundColor: theme.colors.primary,\n transform: [\n { rotate: -90 + pointerNumber * degreesPerNumber + 'deg' },\n {\n translateX: circleSize / 4 - 4 - dynamicSize / 2,\n },\n ],\n width: circleSize / 2 - 4 - dynamicSize,\n },\n ]}\n pointerEvents=\"none\"\n >\n <View\n style={[styles.endPoint, { backgroundColor: theme.colors.primary }]}\n />\n </View>\n <View\n style={[StyleSheet.absoluteFill, styles.center]}\n pointerEvents=\"none\"\n >\n <View\n style={[\n styles.middlePoint,\n {\n backgroundColor: theme.colors.primary,\n },\n ]}\n />\n </View>\n <AnimatedClockSwitcher\n focused={focused}\n hours={<AnalogClockHours is24Hour={is24Hour} hours={hours} />}\n minutes={<AnalogClockMinutes minutes={minutes} />}\n />\n </View>\n )\n}\n\nconst styles = StyleSheet.create({\n clock: {\n height: circleSize,\n width: circleSize,\n position: 'relative',\n justifyContent: 'center',\n alignItems: 'center',\n borderRadius: circleSize / 2,\n },\n middlePoint: {\n borderRadius: 4,\n height: 8,\n width: 8,\n },\n center: { justifyContent: 'center', alignItems: 'center' },\n endPoint: {\n borderRadius: 15,\n height: 30,\n width: 30,\n position: 'absolute',\n right: 0,\n bottom: -14,\n },\n line: {\n position: 'absolute',\n\n marginBottom: -1,\n height: 2,\n borderRadius: 4,\n },\n})\n\nfunction returnTrue() {\n return true\n}\n\nexport default React.memo(AnalogClock)\n"]}
1
+ {"version":3,"sources":["AnalogClock.tsx"],"names":["AnalogClock","hours","minutes","focused","is24Hour","onChange","theme","mode","React","useContext","DisplayModeContext","shortPointer","clockRef","useRef","hoursRef","onChangeRef","minutesRef","focusedRef","is24HourRef","modeRef","onPointerMove","useCallback","e","final","x","nativeEvent","locationX","y","locationY","angle","circleSize","current","clockTypes","hours24","previousHourType","pickedHours","hours12AndPm","hourTypeFromOffset","hours24AndPM","hourTypes","pm","undefined","pickedMinutes","panResponder","PanResponder","create","onPanResponderGrant","onPanResponderMove","onPanResponderRelease","onStartShouldSetPanResponder","returnTrue","onStartShouldSetPanResponderCapture","onMoveShouldSetPanResponder","onMoveShouldSetPanResponderCapture","onPanResponderTerminationRequest","onShouldBlockNativeResponder","dynamicSize","pointerNumber","degreesPerNumber","panHandlers","styles","clock","backgroundColor","dark","colors","surface","lighten","hex","darken","line","primary","transform","rotate","translateX","width","endPoint","StyleSheet","absoluteFill","center","middlePoint","height","position","justifyContent","alignItems","borderRadius","right","bottom","marginBottom","memo"],"mappings":"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","sourcesContent":["import Color from 'color'\nimport {\n GestureResponderEvent,\n PanResponder,\n StyleSheet,\n View,\n} from 'react-native'\nimport { useTheme } from 'react-native-paper'\nimport {\n circleSize,\n clockTypes,\n getAngle,\n getHours,\n getHourType,\n getHourTypeFromOffset,\n getMinutes,\n hourTypes,\n PossibleClockTypes,\n} from './timeUtils'\nimport * as React from 'react'\nimport { useLatest } from '../utils'\nimport AnalogClockHours from './AnalogClockHours'\nimport AnimatedClockSwitcher from './AnimatedClockSwitcher'\nimport AnalogClockMinutes from './AnalogClockMinutes'\nimport { DisplayModeContext } from './TimePicker'\nfunction AnalogClock({\n hours,\n minutes,\n focused,\n is24Hour,\n onChange,\n}: {\n hours: number\n minutes: number\n focused: PossibleClockTypes\n is24Hour: boolean\n onChange: (hoursMinutesAndFocused: {\n hours: number\n minutes: number\n focused?: undefined | PossibleClockTypes\n }) => any\n}) {\n const theme = useTheme()\n const { mode } = React.useContext(DisplayModeContext)\n // used to make pointer shorter if hours are selected and above 12\n const shortPointer = (hours === 0 || hours > 12) && is24Hour\n const clockRef = React.useRef<View | null>(null)\n // Hooks are nice, sometimes... :-)..\n // We need the latest values, since the onPointerMove uses a closure to the function\n const hoursRef = useLatest(hours)\n const onChangeRef = useLatest(onChange)\n const minutesRef = useLatest(minutes)\n const focusedRef = useLatest(focused)\n const is24HourRef = useLatest(is24Hour)\n const modeRef = useLatest(mode)\n const onPointerMove = React.useCallback(\n (e: GestureResponderEvent, final: boolean) => {\n let x = e.nativeEvent.locationX\n let y = e.nativeEvent.locationY\n let angle = getAngle(x, y, circleSize)\n if (focusedRef.current === clockTypes.hours) {\n let hours24 = is24HourRef.current\n let previousHourType = getHourType(hoursRef.current)\n let pickedHours = getHours(angle, previousHourType)\n\n let hours12AndPm = !hours24 && modeRef.current === 'AM'\n\n let hourTypeFromOffset = getHourTypeFromOffset(x, y, circleSize)\n let hours24AndPM = hours24 && hourTypeFromOffset === hourTypes.pm\n\n // Avoiding the \"24h\"\n // Should be 12h for 12 hours and PM mode\n\n if (hours12AndPm || hours24AndPM) {\n pickedHours += 12\n }\n if (modeRef.current === 'AM' && pickedHours === 12) {\n pickedHours = 0\n }\n\n if (\n (!hours24 && modeRef.current === 'AM' && pickedHours === 12) ||\n pickedHours === 24\n ) {\n pickedHours = 0\n }\n\n if (hoursRef.current !== pickedHours || final) {\n onChangeRef.current({\n hours: pickedHours,\n minutes: minutesRef.current,\n focused: final ? clockTypes.minutes : undefined,\n })\n }\n } else if (focusedRef.current === clockTypes.minutes) {\n let pickedMinutes = getMinutes(angle)\n if (minutesRef.current !== pickedMinutes) {\n onChangeRef.current({\n hours: hoursRef.current,\n minutes: pickedMinutes,\n })\n }\n }\n },\n [focusedRef, is24HourRef, hoursRef, onChangeRef, minutesRef, modeRef]\n )\n const panResponder = React.useRef(\n PanResponder.create({\n onPanResponderGrant: (e) => onPointerMove(e, false),\n onPanResponderMove: (e) => onPointerMove(e, false),\n onPanResponderRelease: (e) => onPointerMove(e, true),\n onStartShouldSetPanResponder: returnTrue,\n onStartShouldSetPanResponderCapture: () => false,\n onMoveShouldSetPanResponder: returnTrue,\n onMoveShouldSetPanResponderCapture: returnTrue,\n onPanResponderTerminationRequest: returnTrue,\n onShouldBlockNativeResponder: returnTrue,\n })\n ).current\n const dynamicSize = focused === clockTypes.hours && shortPointer ? 33 : 0\n const pointerNumber = focused === clockTypes.hours ? hours : minutes\n const degreesPerNumber = focused === clockTypes.hours ? 30 : 6\n return (\n <View\n ref={clockRef}\n {...panResponder.panHandlers}\n style={[\n styles.clock,\n {\n backgroundColor: theme.dark\n ? Color(theme.colors.surface).lighten(1.2).hex()\n : Color(theme.colors.surface).darken(0.1).hex(),\n },\n ]}\n // @ts-ignore -> https://github.com/necolas/react-native-web/issues/506\n cursor={'pointer'}\n >\n <View\n style={[\n styles.line,\n {\n backgroundColor: theme.colors.primary,\n transform: [\n { rotate: -90 + pointerNumber * degreesPerNumber + 'deg' },\n {\n translateX: circleSize / 4 - 4 - dynamicSize / 2,\n },\n ],\n width: circleSize / 2 - 4 - dynamicSize,\n },\n ]}\n pointerEvents=\"none\"\n >\n <View\n style={[styles.endPoint, { backgroundColor: theme.colors.primary }]}\n />\n </View>\n <View\n style={[StyleSheet.absoluteFill, styles.center]}\n pointerEvents=\"none\"\n >\n <View\n style={[\n styles.middlePoint,\n {\n backgroundColor: theme.colors.primary,\n },\n ]}\n />\n </View>\n <AnimatedClockSwitcher\n focused={focused}\n hours={<AnalogClockHours is24Hour={is24Hour} hours={hours} />}\n minutes={<AnalogClockMinutes minutes={minutes} />}\n />\n </View>\n )\n}\nconst styles = StyleSheet.create({\n clock: {\n height: circleSize,\n width: circleSize,\n position: 'relative',\n justifyContent: 'center',\n alignItems: 'center',\n borderRadius: circleSize / 2,\n },\n middlePoint: {\n borderRadius: 4,\n height: 8,\n width: 8,\n },\n center: { justifyContent: 'center', alignItems: 'center' },\n endPoint: {\n borderRadius: 15,\n height: 30,\n width: 30,\n position: 'absolute',\n right: 0,\n bottom: -14,\n },\n line: {\n position: 'absolute',\n marginBottom: -1,\n height: 2,\n borderRadius: 4,\n },\n})\nfunction returnTrue() {\n return true\n}\nexport default React.memo(AnalogClock)\n"]}
@@ -3,7 +3,7 @@ function _extends() { _extends = Object.assign || function (target) { for (var i
3
3
  import Color from 'color';
4
4
  import { PanResponder, StyleSheet, View } from 'react-native';
5
5
  import { useTheme } from 'react-native-paper';
6
- import { circleSize, clockTypes, getAngle, getHours, getHourType, getMinutes } from './timeUtils';
6
+ import { circleSize, clockTypes, getAngle, getHours, getHourType, getHourTypeFromOffset, getMinutes, hourTypes } from './timeUtils';
7
7
  import * as React from 'react';
8
8
  import { useLatest } from '../utils';
9
9
  import AnalogClockHours from './AnalogClockHours';
@@ -43,10 +43,12 @@ function AnalogClock(_ref) {
43
43
  let hours24 = is24HourRef.current;
44
44
  let previousHourType = getHourType(hoursRef.current);
45
45
  let pickedHours = getHours(angle, previousHourType);
46
- let hours12AndPm = !hours24 && modeRef.current === 'PM'; // Avoiding the "24h"
46
+ let hours12AndPm = !hours24 && modeRef.current === 'AM';
47
+ let hourTypeFromOffset = getHourTypeFromOffset(x, y, circleSize);
48
+ let hours24AndPM = hours24 && hourTypeFromOffset === hourTypes.pm; // Avoiding the "24h"
47
49
  // Should be 12h for 12 hours and PM mode
48
50
 
49
- if ((hours12AndPm || hours24) && pickedHours + 12 < 24) {
51
+ if (hours12AndPm || hours24AndPM) {
50
52
  pickedHours += 12;
51
53
  }
52
54
 
@@ -54,7 +56,7 @@ function AnalogClock(_ref) {
54
56
  pickedHours = 0;
55
57
  }
56
58
 
57
- if (pickedHours === 24) {
59
+ if (!hours24 && modeRef.current === 'AM' && pickedHours === 12 || pickedHours === 24) {
58
60
  pickedHours = 0;
59
61
  }
60
62
 
@@ -1 +1 @@
1
- {"version":3,"sources":["AnalogClock.tsx"],"names":["Color","PanResponder","StyleSheet","View","useTheme","circleSize","clockTypes","getAngle","getHours","getHourType","getMinutes","React","useLatest","AnalogClockHours","AnimatedClockSwitcher","AnalogClockMinutes","DisplayModeContext","AnalogClock","hours","minutes","focused","is24Hour","onChange","theme","mode","useContext","shortPointer","clockRef","useRef","hoursRef","onChangeRef","minutesRef","focusedRef","is24HourRef","modeRef","onPointerMove","useCallback","e","final","x","nativeEvent","locationX","y","locationY","angle","current","hours24","previousHourType","pickedHours","hours12AndPm","undefined","pickedMinutes","panResponder","create","onPanResponderGrant","onPanResponderMove","onPanResponderRelease","onStartShouldSetPanResponder","returnTrue","onStartShouldSetPanResponderCapture","onMoveShouldSetPanResponder","onMoveShouldSetPanResponderCapture","onPanResponderTerminationRequest","onShouldBlockNativeResponder","dynamicSize","pointerNumber","degreesPerNumber","panHandlers","styles","clock","backgroundColor","dark","colors","surface","lighten","hex","darken","line","primary","transform","rotate","translateX","width","endPoint","absoluteFill","center","middlePoint","height","position","justifyContent","alignItems","borderRadius","right","bottom","marginBottom","memo"],"mappings":"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","sourcesContent":["import Color from 'color'\nimport {\n GestureResponderEvent,\n PanResponder,\n StyleSheet,\n View,\n} from 'react-native'\nimport { useTheme } from 'react-native-paper'\nimport {\n circleSize,\n clockTypes,\n getAngle,\n getHours,\n getHourType,\n getMinutes,\n PossibleClockTypes,\n} from './timeUtils'\nimport * as React from 'react'\n\nimport { useLatest } from '../utils'\nimport AnalogClockHours from './AnalogClockHours'\n\nimport AnimatedClockSwitcher from './AnimatedClockSwitcher'\nimport AnalogClockMinutes from './AnalogClockMinutes'\nimport { DisplayModeContext } from './TimePicker'\n\nfunction AnalogClock({\n hours,\n minutes,\n focused,\n is24Hour,\n onChange,\n}: {\n hours: number\n minutes: number\n focused: PossibleClockTypes\n is24Hour: boolean\n onChange: (hoursMinutesAndFocused: {\n hours: number\n minutes: number\n focused?: undefined | PossibleClockTypes\n }) => any\n}) {\n const theme = useTheme()\n const { mode } = React.useContext(DisplayModeContext)\n // used to make pointer shorter if hours are selected and above 12\n const shortPointer = (hours === 0 || hours > 12) && is24Hour\n\n const clockRef = React.useRef<View | null>(null)\n\n // Hooks are nice, sometimes... :-)..\n // We need the latest values, since the onPointerMove uses a closure to the function\n const hoursRef = useLatest(hours)\n const onChangeRef = useLatest(onChange)\n const minutesRef = useLatest(minutes)\n const focusedRef = useLatest(focused)\n const is24HourRef = useLatest(is24Hour)\n const modeRef = useLatest(mode)\n\n const onPointerMove = React.useCallback(\n (e: GestureResponderEvent, final: boolean) => {\n let x = e.nativeEvent.locationX\n let y = e.nativeEvent.locationY\n\n let angle = getAngle(x, y, circleSize)\n\n if (focusedRef.current === clockTypes.hours) {\n let hours24 = is24HourRef.current\n let previousHourType = getHourType(hoursRef.current)\n let pickedHours = getHours(angle, previousHourType)\n\n let hours12AndPm = !hours24 && modeRef.current === 'PM'\n\n // Avoiding the \"24h\"\n // Should be 12h for 12 hours and PM mode\n if ((hours12AndPm || hours24) && pickedHours + 12 < 24) {\n pickedHours += 12\n }\n if (modeRef.current === 'AM' && pickedHours === 12) {\n pickedHours = 0\n }\n\n if (pickedHours === 24) {\n pickedHours = 0\n }\n\n if (hoursRef.current !== pickedHours || final) {\n onChangeRef.current({\n hours: pickedHours,\n minutes: minutesRef.current,\n focused: final ? clockTypes.minutes : undefined,\n })\n }\n } else if (focusedRef.current === clockTypes.minutes) {\n let pickedMinutes = getMinutes(angle)\n if (minutesRef.current !== pickedMinutes) {\n onChangeRef.current({\n hours: hoursRef.current,\n minutes: pickedMinutes,\n })\n }\n }\n },\n [focusedRef, is24HourRef, hoursRef, onChangeRef, minutesRef, modeRef]\n )\n\n const panResponder = React.useRef(\n PanResponder.create({\n onPanResponderGrant: (e) => onPointerMove(e, false),\n onPanResponderMove: (e) => onPointerMove(e, false),\n onPanResponderRelease: (e) => onPointerMove(e, true),\n\n onStartShouldSetPanResponder: returnTrue,\n onStartShouldSetPanResponderCapture: () => false,\n onMoveShouldSetPanResponder: returnTrue,\n onMoveShouldSetPanResponderCapture: returnTrue,\n onPanResponderTerminationRequest: returnTrue,\n onShouldBlockNativeResponder: returnTrue,\n })\n ).current\n\n const dynamicSize = focused === clockTypes.hours && shortPointer ? 33 : 0\n const pointerNumber = focused === clockTypes.hours ? hours : minutes\n const degreesPerNumber = focused === clockTypes.hours ? 30 : 6\n return (\n <View\n ref={clockRef}\n {...panResponder.panHandlers}\n style={[\n styles.clock,\n {\n backgroundColor: theme.dark\n ? Color(theme.colors.surface).lighten(1.2).hex()\n : Color(theme.colors.surface).darken(0.1).hex(),\n },\n ]}\n // @ts-ignore -> https://github.com/necolas/react-native-web/issues/506\n cursor={'pointer'}\n >\n <View\n style={[\n styles.line,\n {\n backgroundColor: theme.colors.primary,\n transform: [\n { rotate: -90 + pointerNumber * degreesPerNumber + 'deg' },\n {\n translateX: circleSize / 4 - 4 - dynamicSize / 2,\n },\n ],\n width: circleSize / 2 - 4 - dynamicSize,\n },\n ]}\n pointerEvents=\"none\"\n >\n <View\n style={[styles.endPoint, { backgroundColor: theme.colors.primary }]}\n />\n </View>\n <View\n style={[StyleSheet.absoluteFill, styles.center]}\n pointerEvents=\"none\"\n >\n <View\n style={[\n styles.middlePoint,\n {\n backgroundColor: theme.colors.primary,\n },\n ]}\n />\n </View>\n <AnimatedClockSwitcher\n focused={focused}\n hours={<AnalogClockHours is24Hour={is24Hour} hours={hours} />}\n minutes={<AnalogClockMinutes minutes={minutes} />}\n />\n </View>\n )\n}\n\nconst styles = StyleSheet.create({\n clock: {\n height: circleSize,\n width: circleSize,\n position: 'relative',\n justifyContent: 'center',\n alignItems: 'center',\n borderRadius: circleSize / 2,\n },\n middlePoint: {\n borderRadius: 4,\n height: 8,\n width: 8,\n },\n center: { justifyContent: 'center', alignItems: 'center' },\n endPoint: {\n borderRadius: 15,\n height: 30,\n width: 30,\n position: 'absolute',\n right: 0,\n bottom: -14,\n },\n line: {\n position: 'absolute',\n\n marginBottom: -1,\n height: 2,\n borderRadius: 4,\n },\n})\n\nfunction returnTrue() {\n return true\n}\n\nexport default React.memo(AnalogClock)\n"]}
1
+ {"version":3,"sources":["AnalogClock.tsx"],"names":["Color","PanResponder","StyleSheet","View","useTheme","circleSize","clockTypes","getAngle","getHours","getHourType","getHourTypeFromOffset","getMinutes","hourTypes","React","useLatest","AnalogClockHours","AnimatedClockSwitcher","AnalogClockMinutes","DisplayModeContext","AnalogClock","hours","minutes","focused","is24Hour","onChange","theme","mode","useContext","shortPointer","clockRef","useRef","hoursRef","onChangeRef","minutesRef","focusedRef","is24HourRef","modeRef","onPointerMove","useCallback","e","final","x","nativeEvent","locationX","y","locationY","angle","current","hours24","previousHourType","pickedHours","hours12AndPm","hourTypeFromOffset","hours24AndPM","pm","undefined","pickedMinutes","panResponder","create","onPanResponderGrant","onPanResponderMove","onPanResponderRelease","onStartShouldSetPanResponder","returnTrue","onStartShouldSetPanResponderCapture","onMoveShouldSetPanResponder","onMoveShouldSetPanResponderCapture","onPanResponderTerminationRequest","onShouldBlockNativeResponder","dynamicSize","pointerNumber","degreesPerNumber","panHandlers","styles","clock","backgroundColor","dark","colors","surface","lighten","hex","darken","line","primary","transform","rotate","translateX","width","endPoint","absoluteFill","center","middlePoint","height","position","justifyContent","alignItems","borderRadius","right","bottom","marginBottom","memo"],"mappings":"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","sourcesContent":["import Color from 'color'\nimport {\n GestureResponderEvent,\n PanResponder,\n StyleSheet,\n View,\n} from 'react-native'\nimport { useTheme } from 'react-native-paper'\nimport {\n circleSize,\n clockTypes,\n getAngle,\n getHours,\n getHourType,\n getHourTypeFromOffset,\n getMinutes,\n hourTypes,\n PossibleClockTypes,\n} from './timeUtils'\nimport * as React from 'react'\nimport { useLatest } from '../utils'\nimport AnalogClockHours from './AnalogClockHours'\nimport AnimatedClockSwitcher from './AnimatedClockSwitcher'\nimport AnalogClockMinutes from './AnalogClockMinutes'\nimport { DisplayModeContext } from './TimePicker'\nfunction AnalogClock({\n hours,\n minutes,\n focused,\n is24Hour,\n onChange,\n}: {\n hours: number\n minutes: number\n focused: PossibleClockTypes\n is24Hour: boolean\n onChange: (hoursMinutesAndFocused: {\n hours: number\n minutes: number\n focused?: undefined | PossibleClockTypes\n }) => any\n}) {\n const theme = useTheme()\n const { mode } = React.useContext(DisplayModeContext)\n // used to make pointer shorter if hours are selected and above 12\n const shortPointer = (hours === 0 || hours > 12) && is24Hour\n const clockRef = React.useRef<View | null>(null)\n // Hooks are nice, sometimes... :-)..\n // We need the latest values, since the onPointerMove uses a closure to the function\n const hoursRef = useLatest(hours)\n const onChangeRef = useLatest(onChange)\n const minutesRef = useLatest(minutes)\n const focusedRef = useLatest(focused)\n const is24HourRef = useLatest(is24Hour)\n const modeRef = useLatest(mode)\n const onPointerMove = React.useCallback(\n (e: GestureResponderEvent, final: boolean) => {\n let x = e.nativeEvent.locationX\n let y = e.nativeEvent.locationY\n let angle = getAngle(x, y, circleSize)\n if (focusedRef.current === clockTypes.hours) {\n let hours24 = is24HourRef.current\n let previousHourType = getHourType(hoursRef.current)\n let pickedHours = getHours(angle, previousHourType)\n\n let hours12AndPm = !hours24 && modeRef.current === 'AM'\n\n let hourTypeFromOffset = getHourTypeFromOffset(x, y, circleSize)\n let hours24AndPM = hours24 && hourTypeFromOffset === hourTypes.pm\n\n // Avoiding the \"24h\"\n // Should be 12h for 12 hours and PM mode\n\n if (hours12AndPm || hours24AndPM) {\n pickedHours += 12\n }\n if (modeRef.current === 'AM' && pickedHours === 12) {\n pickedHours = 0\n }\n\n if (\n (!hours24 && modeRef.current === 'AM' && pickedHours === 12) ||\n pickedHours === 24\n ) {\n pickedHours = 0\n }\n\n if (hoursRef.current !== pickedHours || final) {\n onChangeRef.current({\n hours: pickedHours,\n minutes: minutesRef.current,\n focused: final ? clockTypes.minutes : undefined,\n })\n }\n } else if (focusedRef.current === clockTypes.minutes) {\n let pickedMinutes = getMinutes(angle)\n if (minutesRef.current !== pickedMinutes) {\n onChangeRef.current({\n hours: hoursRef.current,\n minutes: pickedMinutes,\n })\n }\n }\n },\n [focusedRef, is24HourRef, hoursRef, onChangeRef, minutesRef, modeRef]\n )\n const panResponder = React.useRef(\n PanResponder.create({\n onPanResponderGrant: (e) => onPointerMove(e, false),\n onPanResponderMove: (e) => onPointerMove(e, false),\n onPanResponderRelease: (e) => onPointerMove(e, true),\n onStartShouldSetPanResponder: returnTrue,\n onStartShouldSetPanResponderCapture: () => false,\n onMoveShouldSetPanResponder: returnTrue,\n onMoveShouldSetPanResponderCapture: returnTrue,\n onPanResponderTerminationRequest: returnTrue,\n onShouldBlockNativeResponder: returnTrue,\n })\n ).current\n const dynamicSize = focused === clockTypes.hours && shortPointer ? 33 : 0\n const pointerNumber = focused === clockTypes.hours ? hours : minutes\n const degreesPerNumber = focused === clockTypes.hours ? 30 : 6\n return (\n <View\n ref={clockRef}\n {...panResponder.panHandlers}\n style={[\n styles.clock,\n {\n backgroundColor: theme.dark\n ? Color(theme.colors.surface).lighten(1.2).hex()\n : Color(theme.colors.surface).darken(0.1).hex(),\n },\n ]}\n // @ts-ignore -> https://github.com/necolas/react-native-web/issues/506\n cursor={'pointer'}\n >\n <View\n style={[\n styles.line,\n {\n backgroundColor: theme.colors.primary,\n transform: [\n { rotate: -90 + pointerNumber * degreesPerNumber + 'deg' },\n {\n translateX: circleSize / 4 - 4 - dynamicSize / 2,\n },\n ],\n width: circleSize / 2 - 4 - dynamicSize,\n },\n ]}\n pointerEvents=\"none\"\n >\n <View\n style={[styles.endPoint, { backgroundColor: theme.colors.primary }]}\n />\n </View>\n <View\n style={[StyleSheet.absoluteFill, styles.center]}\n pointerEvents=\"none\"\n >\n <View\n style={[\n styles.middlePoint,\n {\n backgroundColor: theme.colors.primary,\n },\n ]}\n />\n </View>\n <AnimatedClockSwitcher\n focused={focused}\n hours={<AnalogClockHours is24Hour={is24Hour} hours={hours} />}\n minutes={<AnalogClockMinutes minutes={minutes} />}\n />\n </View>\n )\n}\nconst styles = StyleSheet.create({\n clock: {\n height: circleSize,\n width: circleSize,\n position: 'relative',\n justifyContent: 'center',\n alignItems: 'center',\n borderRadius: circleSize / 2,\n },\n middlePoint: {\n borderRadius: 4,\n height: 8,\n width: 8,\n },\n center: { justifyContent: 'center', alignItems: 'center' },\n endPoint: {\n borderRadius: 15,\n height: 30,\n width: 30,\n position: 'absolute',\n right: 0,\n bottom: -14,\n },\n line: {\n position: 'absolute',\n marginBottom: -1,\n height: 2,\n borderRadius: 4,\n },\n})\nfunction returnTrue() {\n return true\n}\nexport default React.memo(AnalogClock)\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-paper-dates",
3
- "version": "0.8.6",
3
+ "version": "0.8.7",
4
4
  "description": "Performant Date Picker for React Native Paper",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -12,18 +12,17 @@ import {
12
12
  getAngle,
13
13
  getHours,
14
14
  getHourType,
15
+ getHourTypeFromOffset,
15
16
  getMinutes,
17
+ hourTypes,
16
18
  PossibleClockTypes,
17
19
  } from './timeUtils'
18
20
  import * as React from 'react'
19
-
20
21
  import { useLatest } from '../utils'
21
22
  import AnalogClockHours from './AnalogClockHours'
22
-
23
23
  import AnimatedClockSwitcher from './AnimatedClockSwitcher'
24
24
  import AnalogClockMinutes from './AnalogClockMinutes'
25
25
  import { DisplayModeContext } from './TimePicker'
26
-
27
26
  function AnalogClock({
28
27
  hours,
29
28
  minutes,
@@ -45,9 +44,7 @@ function AnalogClock({
45
44
  const { mode } = React.useContext(DisplayModeContext)
46
45
  // used to make pointer shorter if hours are selected and above 12
47
46
  const shortPointer = (hours === 0 || hours > 12) && is24Hour
48
-
49
47
  const clockRef = React.useRef<View | null>(null)
50
-
51
48
  // Hooks are nice, sometimes... :-)..
52
49
  // We need the latest values, since the onPointerMove uses a closure to the function
53
50
  const hoursRef = useLatest(hours)
@@ -56,31 +53,35 @@ function AnalogClock({
56
53
  const focusedRef = useLatest(focused)
57
54
  const is24HourRef = useLatest(is24Hour)
58
55
  const modeRef = useLatest(mode)
59
-
60
56
  const onPointerMove = React.useCallback(
61
57
  (e: GestureResponderEvent, final: boolean) => {
62
58
  let x = e.nativeEvent.locationX
63
59
  let y = e.nativeEvent.locationY
64
-
65
60
  let angle = getAngle(x, y, circleSize)
66
-
67
61
  if (focusedRef.current === clockTypes.hours) {
68
62
  let hours24 = is24HourRef.current
69
63
  let previousHourType = getHourType(hoursRef.current)
70
64
  let pickedHours = getHours(angle, previousHourType)
71
65
 
72
- let hours12AndPm = !hours24 && modeRef.current === 'PM'
66
+ let hours12AndPm = !hours24 && modeRef.current === 'AM'
67
+
68
+ let hourTypeFromOffset = getHourTypeFromOffset(x, y, circleSize)
69
+ let hours24AndPM = hours24 && hourTypeFromOffset === hourTypes.pm
73
70
 
74
71
  // Avoiding the "24h"
75
72
  // Should be 12h for 12 hours and PM mode
76
- if ((hours12AndPm || hours24) && pickedHours + 12 < 24) {
73
+
74
+ if (hours12AndPm || hours24AndPM) {
77
75
  pickedHours += 12
78
76
  }
79
77
  if (modeRef.current === 'AM' && pickedHours === 12) {
80
78
  pickedHours = 0
81
79
  }
82
80
 
83
- if (pickedHours === 24) {
81
+ if (
82
+ (!hours24 && modeRef.current === 'AM' && pickedHours === 12) ||
83
+ pickedHours === 24
84
+ ) {
84
85
  pickedHours = 0
85
86
  }
86
87
 
@@ -103,13 +104,11 @@ function AnalogClock({
103
104
  },
104
105
  [focusedRef, is24HourRef, hoursRef, onChangeRef, minutesRef, modeRef]
105
106
  )
106
-
107
107
  const panResponder = React.useRef(
108
108
  PanResponder.create({
109
109
  onPanResponderGrant: (e) => onPointerMove(e, false),
110
110
  onPanResponderMove: (e) => onPointerMove(e, false),
111
111
  onPanResponderRelease: (e) => onPointerMove(e, true),
112
-
113
112
  onStartShouldSetPanResponder: returnTrue,
114
113
  onStartShouldSetPanResponderCapture: () => false,
115
114
  onMoveShouldSetPanResponder: returnTrue,
@@ -118,7 +117,6 @@ function AnalogClock({
118
117
  onShouldBlockNativeResponder: returnTrue,
119
118
  })
120
119
  ).current
121
-
122
120
  const dynamicSize = focused === clockTypes.hours && shortPointer ? 33 : 0
123
121
  const pointerNumber = focused === clockTypes.hours ? hours : minutes
124
122
  const degreesPerNumber = focused === clockTypes.hours ? 30 : 6
@@ -178,7 +176,6 @@ function AnalogClock({
178
176
  </View>
179
177
  )
180
178
  }
181
-
182
179
  const styles = StyleSheet.create({
183
180
  clock: {
184
181
  height: circleSize,
@@ -204,15 +201,12 @@ const styles = StyleSheet.create({
204
201
  },
205
202
  line: {
206
203
  position: 'absolute',
207
-
208
204
  marginBottom: -1,
209
205
  height: 2,
210
206
  borderRadius: 4,
211
207
  },
212
208
  })
213
-
214
209
  function returnTrue() {
215
210
  return true
216
211
  }
217
-
218
212
  export default React.memo(AnalogClock)