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 === '
|
|
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 (
|
|
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 === '
|
|
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 (
|
|
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
package/src/Time/AnalogClock.tsx
CHANGED
|
@@ -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 === '
|
|
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
|
-
|
|
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 (
|
|
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)
|