react-native-paper-dates 0.8.3 → 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.
- package/lib/commonjs/Date/CalendarEdit.js +4 -4
- package/lib/commonjs/Date/CalendarEdit.js.map +1 -1
- package/lib/commonjs/Date/dateUtils.js +4 -3
- package/lib/commonjs/Date/dateUtils.js.map +1 -1
- package/lib/commonjs/Date/inputUtils.js +3 -2
- package/lib/commonjs/Date/inputUtils.js.map +1 -1
- package/lib/commonjs/Time/AnalogClock.js +5 -3
- package/lib/commonjs/Time/AnalogClock.js.map +1 -1
- package/lib/module/Date/CalendarEdit.js +4 -4
- package/lib/module/Date/CalendarEdit.js.map +1 -1
- package/lib/module/Date/dateUtils.js +4 -3
- package/lib/module/Date/dateUtils.js.map +1 -1
- package/lib/module/Date/inputUtils.js +3 -2
- package/lib/module/Date/inputUtils.js.map +1 -1
- package/lib/module/Time/AnalogClock.js +6 -4
- package/lib/module/Time/AnalogClock.js.map +1 -1
- package/lib/typescript/Date/dateUtils.d.ts +2 -1
- package/package.json +1 -1
- package/src/Date/CalendarEdit.tsx +37 -39
- package/src/Date/dateUtils.tsx +4 -2
- package/src/Date/inputUtils.ts +5 -2
- package/src/Time/AnalogClock.tsx +12 -18
|
@@ -59,8 +59,6 @@ function CalendarEdit(_ref) {
|
|
|
59
59
|
}, []);
|
|
60
60
|
return /*#__PURE__*/React.createElement(_reactNative.View, {
|
|
61
61
|
style: styles.root
|
|
62
|
-
}, /*#__PURE__*/React.createElement(_reactNative.View, {
|
|
63
|
-
style: styles.inner
|
|
64
62
|
}, mode === 'single' ? /*#__PURE__*/React.createElement(_DatePickerInput.default, {
|
|
65
63
|
inputMode: "start",
|
|
66
64
|
ref: dateInput,
|
|
@@ -74,7 +72,9 @@ function CalendarEdit(_ref) {
|
|
|
74
72
|
locale: locale,
|
|
75
73
|
withModal: false,
|
|
76
74
|
autoComplete: 'off'
|
|
77
|
-
}) : null, mode === 'range' ? /*#__PURE__*/React.createElement(
|
|
75
|
+
}) : null, mode === 'range' ? /*#__PURE__*/React.createElement(_reactNative.View, {
|
|
76
|
+
style: styles.inner
|
|
77
|
+
}, /*#__PURE__*/React.createElement(_DatePickerInput.default, {
|
|
78
78
|
inputMode: "start",
|
|
79
79
|
ref: startInput,
|
|
80
80
|
label: startLabel,
|
|
@@ -103,7 +103,7 @@ function CalendarEdit(_ref) {
|
|
|
103
103
|
locale: locale,
|
|
104
104
|
withModal: false,
|
|
105
105
|
autoComplete: "off"
|
|
106
|
-
})) : null)
|
|
106
|
+
})) : null);
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
const styles = _reactNative.StyleSheet.create({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["CalendarEdit.tsx"],"names":["CalendarEdit","mode","state","label","startLabel","endLabel","collapsed","onChange","validRange","locale","dateInput","React","useRef","startInput","endInput","useEffect","Keyboard","dismiss","inputsToFocus","current","filter","n","inputsToBlur","forEach","ip","blur","focus","onSubmitStartInput","useCallback","onSubmitEndInput","onSubmitInput","styles","root","
|
|
1
|
+
{"version":3,"sources":["CalendarEdit.tsx"],"names":["CalendarEdit","mode","state","label","startLabel","endLabel","collapsed","onChange","validRange","locale","dateInput","React","useRef","startInput","endInput","useEffect","Keyboard","dismiss","inputsToFocus","current","filter","n","inputsToBlur","forEach","ip","blur","focus","onSubmitStartInput","useCallback","onSubmitEndInput","onSubmitInput","styles","root","date","inner","startDate","separator","endDate","StyleSheet","create","padding","flexDirection","inputContainer","flex","input","width","memo"],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport {\n View,\n StyleSheet,\n TextInput as TextInputNative,\n Keyboard,\n} from 'react-native'\n\nimport type { ModeType, ValidRangeType } from './Calendar'\nimport type { LocalState } from './DatePickerModalContent'\n\nimport DatePickerInput from './DatePickerInput'\n\nfunction CalendarEdit({\n mode,\n state,\n label = '',\n startLabel = 'Start',\n endLabel = 'End',\n collapsed,\n onChange,\n validRange,\n locale,\n}: {\n mode: ModeType\n label?: string\n startLabel?: string\n endLabel?: string\n state: LocalState\n collapsed: boolean\n onChange: (s: LocalState) => any\n validRange: ValidRangeType | undefined\n locale: string\n}) {\n const dateInput = React.useRef<TextInputNative | null>(null)\n const startInput = React.useRef<TextInputNative | null>(null)\n const endInput = React.useRef<TextInputNative | null>(null)\n\n // when switching views focus, or un-focus text input\n React.useEffect(() => {\n // hide open keyboard\n if (collapsed) {\n Keyboard.dismiss()\n }\n\n const inputsToFocus = [dateInput.current, startInput.current].filter(\n (n) => n\n ) as TextInputNative[]\n\n const inputsToBlur = [\n dateInput.current,\n startInput.current,\n endInput.current,\n ].filter((n) => n) as TextInputNative[]\n\n if (collapsed) {\n inputsToBlur.forEach((ip) => ip.blur())\n } else {\n inputsToFocus.forEach((ip) => ip.focus())\n }\n }, [mode, startInput, endInput, dateInput, collapsed])\n\n const onSubmitStartInput = React.useCallback(() => {\n if (endInput.current) {\n endInput.current.focus()\n }\n }, [endInput])\n\n const onSubmitEndInput = React.useCallback(() => {\n // TODO: close modal and persist range\n }, [])\n\n const onSubmitInput = React.useCallback(() => {\n // TODO: close modal and persist range\n }, [])\n\n return (\n <View style={styles.root}>\n {mode === 'single' ? (\n <DatePickerInput\n inputMode=\"start\"\n ref={dateInput}\n label={label}\n value={state.date}\n onChange={(date) => onChange({ ...state, date })}\n onSubmitEditing={onSubmitInput}\n validRange={validRange}\n locale={locale}\n withModal={false}\n autoComplete={'off'}\n />\n ) : null}\n {mode === 'range' ? (\n <View style={styles.inner}>\n <DatePickerInput\n inputMode=\"start\"\n ref={startInput}\n label={startLabel}\n value={state.startDate}\n onChange={(startDate) => onChange({ ...state, startDate })}\n returnKeyType={'next'}\n onSubmitEditing={onSubmitStartInput}\n validRange={validRange}\n locale={locale}\n withModal={false}\n autoComplete={'off'}\n />\n <View style={styles.separator} />\n <DatePickerInput\n inputMode=\"end\"\n ref={endInput}\n label={endLabel}\n value={state.endDate}\n onChange={(endDate) => onChange({ ...state, endDate })}\n onSubmitEditing={onSubmitEndInput}\n validRange={validRange}\n locale={locale}\n withModal={false}\n autoComplete=\"off\"\n />\n </View>\n ) : null}\n </View>\n )\n}\n\nconst styles = StyleSheet.create({\n root: { padding: 12 },\n inner: { flexDirection: 'row' },\n inputContainer: { flex: 1 },\n input: { flex: 1 },\n separator: { width: 12 },\n})\n\nexport default React.memo(CalendarEdit)\n"]}
|
|
@@ -229,13 +229,14 @@ function getEndOfDay(d) {
|
|
|
229
229
|
|
|
230
230
|
function useInputFormat(_ref7) {
|
|
231
231
|
let {
|
|
232
|
-
formatter
|
|
232
|
+
formatter,
|
|
233
|
+
locale
|
|
233
234
|
} = _ref7;
|
|
234
235
|
return React.useMemo(() => {
|
|
235
236
|
// TODO: something cleaner and more universal?
|
|
236
237
|
const inputDate = formatter.format(new Date(2020, 10 - 1, 1));
|
|
237
|
-
return inputDate.replace('2020', 'YYYY').replace('10', 'MM').replace('01', 'DD');
|
|
238
|
-
}, [formatter]);
|
|
238
|
+
return inputDate.replace('2020', locale === 'pt' ? 'AAAA' : 'YYYY').replace('10', 'MM').replace('01', 'DD');
|
|
239
|
+
}, [formatter, locale]);
|
|
239
240
|
}
|
|
240
241
|
|
|
241
242
|
function differenceInMonths(firstDate, secondDate) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["dateUtils.tsx"],"names":["showWeekDay","dayIndex","disableWeekDays","some","di","dateToUnix","d","Math","round","getTime","addMonths","date","count","n","getDate","n2","Date","setDate","setMonth","getMonth","min","getDaysInMonth","year","getFullYear","month","isLeapYear","getFirstDayOfMonth","getDay","useRangeChecker","validRange","validStart","startDate","validEnd","endDate","startUnix","getStartOfDay","undefined","endUnix","getEndOfDay","validDisabledDatesRef","disabledDates","isWithinValidRange","React","useCallback","day","isDateWithinOptionalRange","isDisabled","current","disabledDate","areDatesOnSameDay","a","b","isDateBetween","dateUnix","daySize","estimatedMonthHeight","startAtIndex","totalMonths","beginOffset","gridCounts","Array","getGridCount","index","cHeight","monthDate","getRealIndex","h","getGridCountForDate","daysInMonth","dayOfWeek","ceil","getInitialIndex","today","months","differenceInMonths","useInputFormatter","locale","useMemo","Intl","DateTimeFormat","useInputFormat","formatter","inputDate","format","replace","firstDate","secondDate","diffMonths"],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { useLatest } from '../utils'\nimport type { ValidRangeType } from './Calendar'\n\nexport type DisableWeekDaysType = number[]\n\nexport function showWeekDay(\n dayIndex: number,\n disableWeekDays?: DisableWeekDaysType\n): boolean {\n return !(disableWeekDays && disableWeekDays.some((di) => di === dayIndex))\n}\n\nexport function dateToUnix(d: Date): number {\n return Math.round(d.getTime() / 1000)\n}\n\nexport function addMonths(date: Date, count: number) {\n let n = date.getDate()\n let n2 = new Date(date.getTime())\n n2.setDate(1)\n n2.setMonth(n2.getMonth() + count)\n n2.setDate(\n Math.min(\n n,\n getDaysInMonth({ year: n2.getFullYear(), month: n2.getMonth() })\n )\n )\n\n return n2\n}\n\n// https://stackoverflow.com/a/1185068/2508481\n// pass in any date as parameter anyDateInMonth based on dayjs\nexport function getDaysInMonth({\n year,\n month,\n}: {\n year: number\n month: number\n}): number {\n return [\n 31,\n isLeapYear({ year }) ? 29 : 28,\n 31,\n 30,\n 31,\n 30,\n 31,\n 31,\n 30,\n 31,\n 30,\n 31,\n ][month]\n}\n\nexport function getFirstDayOfMonth({\n year,\n month,\n}: {\n year: number\n month: number\n}): number {\n return new Date(year, month, 1).getDay()\n}\n\nexport function useRangeChecker(validRange: ValidRangeType | undefined) {\n const validStart = validRange?.startDate\n const validEnd = validRange?.endDate\n const startUnix =\n validStart instanceof Date\n ? dateToUnix(getStartOfDay(validStart))\n : undefined\n\n const endUnix =\n validEnd instanceof Date ? dateToUnix(getEndOfDay(validEnd)) : undefined\n\n const validDisabledDatesRef = useLatest(validRange?.disabledDates)\n\n const isWithinValidRange = React.useCallback(\n (day: Date) => {\n return isDateWithinOptionalRange(day, {\n startUnix: startUnix,\n endUnix: endUnix,\n })\n },\n [startUnix, endUnix]\n )\n\n const isDisabled = React.useCallback(\n (day: Date) => {\n return validDisabledDatesRef.current\n ? validDisabledDatesRef.current.some((disabledDate) =>\n areDatesOnSameDay(disabledDate, day)\n )\n : false\n },\n [validDisabledDatesRef]\n )\n\n return { isDisabled, isWithinValidRange, validStart, validEnd }\n}\n\nexport function areDatesOnSameDay(a: Date, b?: Date | null | undefined) {\n if (!b) {\n return false\n }\n\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n )\n}\n\nexport function isDateBetween(\n date: Date,\n {\n startDate,\n endDate,\n }: {\n startDate?: Date | null | undefined\n endDate?: Date | null | undefined\n }\n): boolean {\n if (!startDate || !endDate) {\n return false\n }\n return date <= endDate && date >= startDate\n}\n\n/**\n * Check if a date is within an optional range.\n *\n * If the range doesn't exist, it defaults to `true`.\n */\nexport function isDateWithinOptionalRange(\n date: Date,\n {\n startUnix,\n endUnix,\n }: { startUnix: number | undefined; endUnix: number | undefined }\n) {\n const dateUnix = dateToUnix(date)\n // if startUnix is provided and date is before start\n if (startUnix && dateUnix < startUnix) {\n return false\n }\n\n // if endUnix is provided and date is after end\n if (endUnix && dateUnix > endUnix) {\n return false\n }\n\n return true\n}\n\nexport function isLeapYear({ year }: { year: number }) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0\n}\n\nexport const daySize = 46\nexport const estimatedMonthHeight = 360\nexport const startAtIndex = 1200\nexport const totalMonths = startAtIndex * 2\nexport const beginOffset = estimatedMonthHeight * startAtIndex\nexport const gridCounts = new Array<number | undefined>(totalMonths)\n\nexport function getGridCount(index: number) {\n const cHeight = gridCounts[index]\n if (cHeight) {\n return cHeight\n }\n const monthDate = addMonths(new Date(), getRealIndex(index))\n const h = getGridCountForDate(monthDate)\n gridCounts[index] = h\n return h\n}\n\nexport function getGridCountForDate(date: Date) {\n const year = date.getFullYear()\n const month = date.getMonth()\n const daysInMonth = getDaysInMonth({ year, month })\n const dayOfWeek = getFirstDayOfMonth({ year, month })\n return Math.ceil((daysInMonth + dayOfWeek) / 7)\n}\n\nexport function getRealIndex(index: number) {\n return index - startAtIndex\n}\n\nexport function getInitialIndex(date: Date | undefined) {\n if (!date) {\n return startAtIndex\n }\n\n const today = new Date()\n const months = differenceInMonths(today, date)\n\n return startAtIndex + months\n}\n\nexport function useInputFormatter({ locale }: { locale: string | undefined }) {\n return React.useMemo(() => {\n return new Intl.DateTimeFormat(locale, {\n month: '2-digit',\n day: '2-digit',\n year: 'numeric',\n })\n }, [locale])\n}\nexport function getStartOfDay(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 0, 0, 0)\n}\nexport function getEndOfDay(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 23, 59, 59)\n}\nexport function useInputFormat({\n formatter,\n}: {\n formatter: Intl.DateTimeFormat\n}) {\n return React.useMemo(() => {\n // TODO: something cleaner and more universal?\n const inputDate = formatter.format(new Date(2020, 10 - 1, 1))\n return inputDate\n .replace('2020', 'YYYY')\n .replace('10', 'MM')\n .replace('01', 'DD')\n }, [formatter])\n}\n\nexport function differenceInMonths(firstDate: Date, secondDate: Date) {\n let diffMonths = (secondDate.getFullYear() - firstDate.getFullYear()) * 12\n diffMonths -= firstDate.getMonth()\n diffMonths += secondDate.getMonth()\n return diffMonths\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["dateUtils.tsx"],"names":["showWeekDay","dayIndex","disableWeekDays","some","di","dateToUnix","d","Math","round","getTime","addMonths","date","count","n","getDate","n2","Date","setDate","setMonth","getMonth","min","getDaysInMonth","year","getFullYear","month","isLeapYear","getFirstDayOfMonth","getDay","useRangeChecker","validRange","validStart","startDate","validEnd","endDate","startUnix","getStartOfDay","undefined","endUnix","getEndOfDay","validDisabledDatesRef","disabledDates","isWithinValidRange","React","useCallback","day","isDateWithinOptionalRange","isDisabled","current","disabledDate","areDatesOnSameDay","a","b","isDateBetween","dateUnix","daySize","estimatedMonthHeight","startAtIndex","totalMonths","beginOffset","gridCounts","Array","getGridCount","index","cHeight","monthDate","getRealIndex","h","getGridCountForDate","daysInMonth","dayOfWeek","ceil","getInitialIndex","today","months","differenceInMonths","useInputFormatter","locale","useMemo","Intl","DateTimeFormat","useInputFormat","formatter","inputDate","format","replace","firstDate","secondDate","diffMonths"],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { useLatest } from '../utils'\nimport type { ValidRangeType } from './Calendar'\n\nexport type DisableWeekDaysType = number[]\n\nexport function showWeekDay(\n dayIndex: number,\n disableWeekDays?: DisableWeekDaysType\n): boolean {\n return !(disableWeekDays && disableWeekDays.some((di) => di === dayIndex))\n}\n\nexport function dateToUnix(d: Date): number {\n return Math.round(d.getTime() / 1000)\n}\n\nexport function addMonths(date: Date, count: number) {\n let n = date.getDate()\n let n2 = new Date(date.getTime())\n n2.setDate(1)\n n2.setMonth(n2.getMonth() + count)\n n2.setDate(\n Math.min(\n n,\n getDaysInMonth({ year: n2.getFullYear(), month: n2.getMonth() })\n )\n )\n\n return n2\n}\n\n// https://stackoverflow.com/a/1185068/2508481\n// pass in any date as parameter anyDateInMonth based on dayjs\nexport function getDaysInMonth({\n year,\n month,\n}: {\n year: number\n month: number\n}): number {\n return [\n 31,\n isLeapYear({ year }) ? 29 : 28,\n 31,\n 30,\n 31,\n 30,\n 31,\n 31,\n 30,\n 31,\n 30,\n 31,\n ][month]\n}\n\nexport function getFirstDayOfMonth({\n year,\n month,\n}: {\n year: number\n month: number\n}): number {\n return new Date(year, month, 1).getDay()\n}\n\nexport function useRangeChecker(validRange: ValidRangeType | undefined) {\n const validStart = validRange?.startDate\n const validEnd = validRange?.endDate\n const startUnix =\n validStart instanceof Date\n ? dateToUnix(getStartOfDay(validStart))\n : undefined\n\n const endUnix =\n validEnd instanceof Date ? dateToUnix(getEndOfDay(validEnd)) : undefined\n\n const validDisabledDatesRef = useLatest(validRange?.disabledDates)\n\n const isWithinValidRange = React.useCallback(\n (day: Date) => {\n return isDateWithinOptionalRange(day, {\n startUnix: startUnix,\n endUnix: endUnix,\n })\n },\n [startUnix, endUnix]\n )\n\n const isDisabled = React.useCallback(\n (day: Date) => {\n return validDisabledDatesRef.current\n ? validDisabledDatesRef.current.some((disabledDate) =>\n areDatesOnSameDay(disabledDate, day)\n )\n : false\n },\n [validDisabledDatesRef]\n )\n\n return { isDisabled, isWithinValidRange, validStart, validEnd }\n}\n\nexport function areDatesOnSameDay(a: Date, b?: Date | null | undefined) {\n if (!b) {\n return false\n }\n\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n )\n}\n\nexport function isDateBetween(\n date: Date,\n {\n startDate,\n endDate,\n }: {\n startDate?: Date | null | undefined\n endDate?: Date | null | undefined\n }\n): boolean {\n if (!startDate || !endDate) {\n return false\n }\n return date <= endDate && date >= startDate\n}\n\n/**\n * Check if a date is within an optional range.\n *\n * If the range doesn't exist, it defaults to `true`.\n */\nexport function isDateWithinOptionalRange(\n date: Date,\n {\n startUnix,\n endUnix,\n }: { startUnix: number | undefined; endUnix: number | undefined }\n) {\n const dateUnix = dateToUnix(date)\n // if startUnix is provided and date is before start\n if (startUnix && dateUnix < startUnix) {\n return false\n }\n\n // if endUnix is provided and date is after end\n if (endUnix && dateUnix > endUnix) {\n return false\n }\n\n return true\n}\n\nexport function isLeapYear({ year }: { year: number }) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0\n}\n\nexport const daySize = 46\nexport const estimatedMonthHeight = 360\nexport const startAtIndex = 1200\nexport const totalMonths = startAtIndex * 2\nexport const beginOffset = estimatedMonthHeight * startAtIndex\nexport const gridCounts = new Array<number | undefined>(totalMonths)\n\nexport function getGridCount(index: number) {\n const cHeight = gridCounts[index]\n if (cHeight) {\n return cHeight\n }\n const monthDate = addMonths(new Date(), getRealIndex(index))\n const h = getGridCountForDate(monthDate)\n gridCounts[index] = h\n return h\n}\n\nexport function getGridCountForDate(date: Date) {\n const year = date.getFullYear()\n const month = date.getMonth()\n const daysInMonth = getDaysInMonth({ year, month })\n const dayOfWeek = getFirstDayOfMonth({ year, month })\n return Math.ceil((daysInMonth + dayOfWeek) / 7)\n}\n\nexport function getRealIndex(index: number) {\n return index - startAtIndex\n}\n\nexport function getInitialIndex(date: Date | undefined) {\n if (!date) {\n return startAtIndex\n }\n\n const today = new Date()\n const months = differenceInMonths(today, date)\n\n return startAtIndex + months\n}\n\nexport function useInputFormatter({ locale }: { locale: string | undefined }) {\n return React.useMemo(() => {\n return new Intl.DateTimeFormat(locale, {\n month: '2-digit',\n day: '2-digit',\n year: 'numeric',\n })\n }, [locale])\n}\nexport function getStartOfDay(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 0, 0, 0)\n}\nexport function getEndOfDay(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 23, 59, 59)\n}\nexport function useInputFormat({\n formatter,\n locale,\n}: {\n formatter: Intl.DateTimeFormat\n locale: string | undefined\n}) {\n return React.useMemo(() => {\n // TODO: something cleaner and more universal?\n const inputDate = formatter.format(new Date(2020, 10 - 1, 1))\n return inputDate\n .replace('2020', locale === 'pt' ? 'AAAA' : 'YYYY')\n .replace('10', 'MM')\n .replace('01', 'DD')\n }, [formatter, locale])\n}\n\nexport function differenceInMonths(firstDate: Date, secondDate: Date) {\n let diffMonths = (secondDate.getFullYear() - firstDate.getFullYear()) * 12\n diffMonths -= firstDate.getMonth()\n diffMonths += secondDate.getMonth()\n return diffMonths\n}\n"]}
|
|
@@ -34,14 +34,15 @@ function useDateInput(_ref) {
|
|
|
34
34
|
locale
|
|
35
35
|
});
|
|
36
36
|
const inputFormat = (0, _dateUtils.useInputFormat)({
|
|
37
|
-
formatter
|
|
37
|
+
formatter,
|
|
38
|
+
locale
|
|
38
39
|
});
|
|
39
40
|
const formattedValue = formatter.format(value);
|
|
40
41
|
|
|
41
42
|
const onChangeText = date => {
|
|
42
43
|
const dayIndex = inputFormat.indexOf('DD');
|
|
43
44
|
const monthIndex = inputFormat.indexOf('MM');
|
|
44
|
-
const yearIndex = inputFormat.indexOf('YYYY');
|
|
45
|
+
const yearIndex = locale === 'pt' ? inputFormat.indexOf('AAAA') : inputFormat.indexOf('YYYY');
|
|
45
46
|
const day = Number(date.slice(dayIndex, dayIndex + 2));
|
|
46
47
|
const year = Number(date.slice(yearIndex, yearIndex + 4));
|
|
47
48
|
const month = Number(date.slice(monthIndex, monthIndex + 2));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["inputUtils.ts"],"names":["useDateInput","locale","value","validRange","inputMode","onChange","isDisabled","isWithinValidRange","validStart","validEnd","error","setError","React","useState","formatter","inputFormat","formattedValue","format","onChangeText","date","dayIndex","indexOf","monthIndex","yearIndex","day","Number","slice","year","month","isNaN","finalDate","Date","errors","filter","n","join"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;;;;;;AAEe,SAASA,YAAT,OAYZ;AAAA,MAZkC;AACnCC,IAAAA,MADmC;AAEnCC,IAAAA,KAFmC;AAGnCC,IAAAA,UAHmC;AAInCC,IAAAA,SAJmC;AAKnCC,IAAAA;AALmC,GAYlC;AACD,QAAM;AAAEC,IAAAA,UAAF;AAAcC,IAAAA,kBAAd;AAAkCC,IAAAA,UAAlC;AAA8CC,IAAAA;AAA9C,MACJ,gCAAgBN,UAAhB,CADF;AAEA,QAAM,CAACO,KAAD,EAAQC,QAAR,IAAoBC,KAAK,CAACC,QAAN,CAA8B,IAA9B,CAA1B;AACA,QAAMC,SAAS,GAAG,kCAAkB;AAAEb,IAAAA;AAAF,GAAlB,CAAlB;AACA,QAAMc,WAAW,GAAG,+BAAe;AAAED,IAAAA;
|
|
1
|
+
{"version":3,"sources":["inputUtils.ts"],"names":["useDateInput","locale","value","validRange","inputMode","onChange","isDisabled","isWithinValidRange","validStart","validEnd","error","setError","React","useState","formatter","inputFormat","formattedValue","format","onChangeText","date","dayIndex","indexOf","monthIndex","yearIndex","day","Number","slice","year","month","isNaN","finalDate","Date","errors","filter","n","join"],"mappings":"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","sourcesContent":["import { useInputFormat, useInputFormatter, useRangeChecker } from './dateUtils'\nimport * as React from 'react'\nimport type { ValidRangeType } from './Calendar'\nimport { getTranslation } from 'react-native-paper-dates'\n\nexport default function useDateInput({\n locale,\n value,\n validRange,\n inputMode,\n onChange,\n}: {\n onChange: (d: Date) => void\n locale: undefined | string\n value: Date | undefined\n validRange: ValidRangeType | undefined\n inputMode: 'start' | 'end'\n}) {\n const { isDisabled, isWithinValidRange, validStart, validEnd } =\n useRangeChecker(validRange)\n const [error, setError] = React.useState<null | string>(null)\n const formatter = useInputFormatter({ locale })\n const inputFormat = useInputFormat({ formatter, locale })\n const formattedValue = formatter.format(value)\n const onChangeText = (date: string) => {\n const dayIndex = inputFormat.indexOf('DD')\n const monthIndex = inputFormat.indexOf('MM')\n const yearIndex =\n locale === 'pt'\n ? inputFormat.indexOf('AAAA')\n : inputFormat.indexOf('YYYY')\n\n const day = Number(date.slice(dayIndex, dayIndex + 2))\n const year = Number(date.slice(yearIndex, yearIndex + 4))\n const month = Number(date.slice(monthIndex, monthIndex + 2))\n\n if (Number.isNaN(day) || Number.isNaN(year) || Number.isNaN(month)) {\n setError(\n getTranslation(\n locale,\n 'notAccordingToDateFormat',\n () => 'notAccordingToDateFormat'\n )(inputFormat)\n )\n return\n }\n\n const finalDate =\n inputMode === 'end'\n ? new Date(year, month - 1, day, 23, 59, 59)\n : new Date(year, month - 1, day)\n\n if (isDisabled(finalDate)) {\n setError(getTranslation(locale, 'dateIsDisabled'))\n return\n }\n if (!isWithinValidRange(finalDate)) {\n let errors =\n validStart && validEnd\n ? [\n `${getTranslation(\n locale,\n 'mustBeBetween',\n () => 'mustBeBetween'\n )(formatter.format(validStart), formatter.format(validEnd))}`,\n ]\n : [\n validStart\n ? getTranslation(\n locale,\n 'mustBeHigherThan',\n () => 'mustBeHigherThan'\n )(formatter.format(validStart))\n : '',\n validEnd\n ? getTranslation(\n locale,\n 'mustBeLowerThan',\n () => 'mustBeLowerThan'\n )(formatter.format(validEnd))\n : '',\n ]\n setError(errors.filter((n) => n).join(' '))\n return\n }\n\n setError(null)\n if (inputMode === 'end') {\n onChange(finalDate)\n } else {\n onChange(finalDate)\n }\n }\n return {\n onChange,\n error,\n formattedValue,\n onChangeText,\n inputFormat,\n }\n}\n"]}
|
|
@@ -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"]}
|
|
@@ -44,8 +44,6 @@ function CalendarEdit(_ref) {
|
|
|
44
44
|
}, []);
|
|
45
45
|
return /*#__PURE__*/React.createElement(View, {
|
|
46
46
|
style: styles.root
|
|
47
|
-
}, /*#__PURE__*/React.createElement(View, {
|
|
48
|
-
style: styles.inner
|
|
49
47
|
}, mode === 'single' ? /*#__PURE__*/React.createElement(DatePickerInput, {
|
|
50
48
|
inputMode: "start",
|
|
51
49
|
ref: dateInput,
|
|
@@ -59,7 +57,9 @@ function CalendarEdit(_ref) {
|
|
|
59
57
|
locale: locale,
|
|
60
58
|
withModal: false,
|
|
61
59
|
autoComplete: 'off'
|
|
62
|
-
}) : null, mode === 'range' ? /*#__PURE__*/React.createElement(
|
|
60
|
+
}) : null, mode === 'range' ? /*#__PURE__*/React.createElement(View, {
|
|
61
|
+
style: styles.inner
|
|
62
|
+
}, /*#__PURE__*/React.createElement(DatePickerInput, {
|
|
63
63
|
inputMode: "start",
|
|
64
64
|
ref: startInput,
|
|
65
65
|
label: startLabel,
|
|
@@ -88,7 +88,7 @@ function CalendarEdit(_ref) {
|
|
|
88
88
|
locale: locale,
|
|
89
89
|
withModal: false,
|
|
90
90
|
autoComplete: "off"
|
|
91
|
-
})) : null)
|
|
91
|
+
})) : null);
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
const styles = StyleSheet.create({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["CalendarEdit.tsx"],"names":["React","View","StyleSheet","Keyboard","DatePickerInput","CalendarEdit","mode","state","label","startLabel","endLabel","collapsed","onChange","validRange","locale","dateInput","useRef","startInput","endInput","useEffect","dismiss","inputsToFocus","current","filter","n","inputsToBlur","forEach","ip","blur","focus","onSubmitStartInput","useCallback","onSubmitEndInput","onSubmitInput","styles","root","
|
|
1
|
+
{"version":3,"sources":["CalendarEdit.tsx"],"names":["React","View","StyleSheet","Keyboard","DatePickerInput","CalendarEdit","mode","state","label","startLabel","endLabel","collapsed","onChange","validRange","locale","dateInput","useRef","startInput","endInput","useEffect","dismiss","inputsToFocus","current","filter","n","inputsToBlur","forEach","ip","blur","focus","onSubmitStartInput","useCallback","onSubmitEndInput","onSubmitInput","styles","root","date","inner","startDate","separator","endDate","create","padding","flexDirection","inputContainer","flex","input","width","memo"],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport {\n View,\n StyleSheet,\n TextInput as TextInputNative,\n Keyboard,\n} from 'react-native'\n\nimport type { ModeType, ValidRangeType } from './Calendar'\nimport type { LocalState } from './DatePickerModalContent'\n\nimport DatePickerInput from './DatePickerInput'\n\nfunction CalendarEdit({\n mode,\n state,\n label = '',\n startLabel = 'Start',\n endLabel = 'End',\n collapsed,\n onChange,\n validRange,\n locale,\n}: {\n mode: ModeType\n label?: string\n startLabel?: string\n endLabel?: string\n state: LocalState\n collapsed: boolean\n onChange: (s: LocalState) => any\n validRange: ValidRangeType | undefined\n locale: string\n}) {\n const dateInput = React.useRef<TextInputNative | null>(null)\n const startInput = React.useRef<TextInputNative | null>(null)\n const endInput = React.useRef<TextInputNative | null>(null)\n\n // when switching views focus, or un-focus text input\n React.useEffect(() => {\n // hide open keyboard\n if (collapsed) {\n Keyboard.dismiss()\n }\n\n const inputsToFocus = [dateInput.current, startInput.current].filter(\n (n) => n\n ) as TextInputNative[]\n\n const inputsToBlur = [\n dateInput.current,\n startInput.current,\n endInput.current,\n ].filter((n) => n) as TextInputNative[]\n\n if (collapsed) {\n inputsToBlur.forEach((ip) => ip.blur())\n } else {\n inputsToFocus.forEach((ip) => ip.focus())\n }\n }, [mode, startInput, endInput, dateInput, collapsed])\n\n const onSubmitStartInput = React.useCallback(() => {\n if (endInput.current) {\n endInput.current.focus()\n }\n }, [endInput])\n\n const onSubmitEndInput = React.useCallback(() => {\n // TODO: close modal and persist range\n }, [])\n\n const onSubmitInput = React.useCallback(() => {\n // TODO: close modal and persist range\n }, [])\n\n return (\n <View style={styles.root}>\n {mode === 'single' ? (\n <DatePickerInput\n inputMode=\"start\"\n ref={dateInput}\n label={label}\n value={state.date}\n onChange={(date) => onChange({ ...state, date })}\n onSubmitEditing={onSubmitInput}\n validRange={validRange}\n locale={locale}\n withModal={false}\n autoComplete={'off'}\n />\n ) : null}\n {mode === 'range' ? (\n <View style={styles.inner}>\n <DatePickerInput\n inputMode=\"start\"\n ref={startInput}\n label={startLabel}\n value={state.startDate}\n onChange={(startDate) => onChange({ ...state, startDate })}\n returnKeyType={'next'}\n onSubmitEditing={onSubmitStartInput}\n validRange={validRange}\n locale={locale}\n withModal={false}\n autoComplete={'off'}\n />\n <View style={styles.separator} />\n <DatePickerInput\n inputMode=\"end\"\n ref={endInput}\n label={endLabel}\n value={state.endDate}\n onChange={(endDate) => onChange({ ...state, endDate })}\n onSubmitEditing={onSubmitEndInput}\n validRange={validRange}\n locale={locale}\n withModal={false}\n autoComplete=\"off\"\n />\n </View>\n ) : null}\n </View>\n )\n}\n\nconst styles = StyleSheet.create({\n root: { padding: 12 },\n inner: { flexDirection: 'row' },\n inputContainer: { flex: 1 },\n input: { flex: 1 },\n separator: { width: 12 },\n})\n\nexport default React.memo(CalendarEdit)\n"]}
|
|
@@ -169,13 +169,14 @@ export function getEndOfDay(d) {
|
|
|
169
169
|
}
|
|
170
170
|
export function useInputFormat(_ref7) {
|
|
171
171
|
let {
|
|
172
|
-
formatter
|
|
172
|
+
formatter,
|
|
173
|
+
locale
|
|
173
174
|
} = _ref7;
|
|
174
175
|
return React.useMemo(() => {
|
|
175
176
|
// TODO: something cleaner and more universal?
|
|
176
177
|
const inputDate = formatter.format(new Date(2020, 10 - 1, 1));
|
|
177
|
-
return inputDate.replace('2020', 'YYYY').replace('10', 'MM').replace('01', 'DD');
|
|
178
|
-
}, [formatter]);
|
|
178
|
+
return inputDate.replace('2020', locale === 'pt' ? 'AAAA' : 'YYYY').replace('10', 'MM').replace('01', 'DD');
|
|
179
|
+
}, [formatter, locale]);
|
|
179
180
|
}
|
|
180
181
|
export function differenceInMonths(firstDate, secondDate) {
|
|
181
182
|
let diffMonths = (secondDate.getFullYear() - firstDate.getFullYear()) * 12;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["dateUtils.tsx"],"names":["React","useLatest","showWeekDay","dayIndex","disableWeekDays","some","di","dateToUnix","d","Math","round","getTime","addMonths","date","count","n","getDate","n2","Date","setDate","setMonth","getMonth","min","getDaysInMonth","year","getFullYear","month","isLeapYear","getFirstDayOfMonth","getDay","useRangeChecker","validRange","validStart","startDate","validEnd","endDate","startUnix","getStartOfDay","undefined","endUnix","getEndOfDay","validDisabledDatesRef","disabledDates","isWithinValidRange","useCallback","day","isDateWithinOptionalRange","isDisabled","current","disabledDate","areDatesOnSameDay","a","b","isDateBetween","dateUnix","daySize","estimatedMonthHeight","startAtIndex","totalMonths","beginOffset","gridCounts","Array","getGridCount","index","cHeight","monthDate","getRealIndex","h","getGridCountForDate","daysInMonth","dayOfWeek","ceil","getInitialIndex","today","months","differenceInMonths","useInputFormatter","locale","useMemo","Intl","DateTimeFormat","useInputFormat","formatter","inputDate","format","replace","firstDate","secondDate","diffMonths"],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { useLatest } from '../utils'\nimport type { ValidRangeType } from './Calendar'\n\nexport type DisableWeekDaysType = number[]\n\nexport function showWeekDay(\n dayIndex: number,\n disableWeekDays?: DisableWeekDaysType\n): boolean {\n return !(disableWeekDays && disableWeekDays.some((di) => di === dayIndex))\n}\n\nexport function dateToUnix(d: Date): number {\n return Math.round(d.getTime() / 1000)\n}\n\nexport function addMonths(date: Date, count: number) {\n let n = date.getDate()\n let n2 = new Date(date.getTime())\n n2.setDate(1)\n n2.setMonth(n2.getMonth() + count)\n n2.setDate(\n Math.min(\n n,\n getDaysInMonth({ year: n2.getFullYear(), month: n2.getMonth() })\n )\n )\n\n return n2\n}\n\n// https://stackoverflow.com/a/1185068/2508481\n// pass in any date as parameter anyDateInMonth based on dayjs\nexport function getDaysInMonth({\n year,\n month,\n}: {\n year: number\n month: number\n}): number {\n return [\n 31,\n isLeapYear({ year }) ? 29 : 28,\n 31,\n 30,\n 31,\n 30,\n 31,\n 31,\n 30,\n 31,\n 30,\n 31,\n ][month]\n}\n\nexport function getFirstDayOfMonth({\n year,\n month,\n}: {\n year: number\n month: number\n}): number {\n return new Date(year, month, 1).getDay()\n}\n\nexport function useRangeChecker(validRange: ValidRangeType | undefined) {\n const validStart = validRange?.startDate\n const validEnd = validRange?.endDate\n const startUnix =\n validStart instanceof Date\n ? dateToUnix(getStartOfDay(validStart))\n : undefined\n\n const endUnix =\n validEnd instanceof Date ? dateToUnix(getEndOfDay(validEnd)) : undefined\n\n const validDisabledDatesRef = useLatest(validRange?.disabledDates)\n\n const isWithinValidRange = React.useCallback(\n (day: Date) => {\n return isDateWithinOptionalRange(day, {\n startUnix: startUnix,\n endUnix: endUnix,\n })\n },\n [startUnix, endUnix]\n )\n\n const isDisabled = React.useCallback(\n (day: Date) => {\n return validDisabledDatesRef.current\n ? validDisabledDatesRef.current.some((disabledDate) =>\n areDatesOnSameDay(disabledDate, day)\n )\n : false\n },\n [validDisabledDatesRef]\n )\n\n return { isDisabled, isWithinValidRange, validStart, validEnd }\n}\n\nexport function areDatesOnSameDay(a: Date, b?: Date | null | undefined) {\n if (!b) {\n return false\n }\n\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n )\n}\n\nexport function isDateBetween(\n date: Date,\n {\n startDate,\n endDate,\n }: {\n startDate?: Date | null | undefined\n endDate?: Date | null | undefined\n }\n): boolean {\n if (!startDate || !endDate) {\n return false\n }\n return date <= endDate && date >= startDate\n}\n\n/**\n * Check if a date is within an optional range.\n *\n * If the range doesn't exist, it defaults to `true`.\n */\nexport function isDateWithinOptionalRange(\n date: Date,\n {\n startUnix,\n endUnix,\n }: { startUnix: number | undefined; endUnix: number | undefined }\n) {\n const dateUnix = dateToUnix(date)\n // if startUnix is provided and date is before start\n if (startUnix && dateUnix < startUnix) {\n return false\n }\n\n // if endUnix is provided and date is after end\n if (endUnix && dateUnix > endUnix) {\n return false\n }\n\n return true\n}\n\nexport function isLeapYear({ year }: { year: number }) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0\n}\n\nexport const daySize = 46\nexport const estimatedMonthHeight = 360\nexport const startAtIndex = 1200\nexport const totalMonths = startAtIndex * 2\nexport const beginOffset = estimatedMonthHeight * startAtIndex\nexport const gridCounts = new Array<number | undefined>(totalMonths)\n\nexport function getGridCount(index: number) {\n const cHeight = gridCounts[index]\n if (cHeight) {\n return cHeight\n }\n const monthDate = addMonths(new Date(), getRealIndex(index))\n const h = getGridCountForDate(monthDate)\n gridCounts[index] = h\n return h\n}\n\nexport function getGridCountForDate(date: Date) {\n const year = date.getFullYear()\n const month = date.getMonth()\n const daysInMonth = getDaysInMonth({ year, month })\n const dayOfWeek = getFirstDayOfMonth({ year, month })\n return Math.ceil((daysInMonth + dayOfWeek) / 7)\n}\n\nexport function getRealIndex(index: number) {\n return index - startAtIndex\n}\n\nexport function getInitialIndex(date: Date | undefined) {\n if (!date) {\n return startAtIndex\n }\n\n const today = new Date()\n const months = differenceInMonths(today, date)\n\n return startAtIndex + months\n}\n\nexport function useInputFormatter({ locale }: { locale: string | undefined }) {\n return React.useMemo(() => {\n return new Intl.DateTimeFormat(locale, {\n month: '2-digit',\n day: '2-digit',\n year: 'numeric',\n })\n }, [locale])\n}\nexport function getStartOfDay(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 0, 0, 0)\n}\nexport function getEndOfDay(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 23, 59, 59)\n}\nexport function useInputFormat({\n formatter,\n}: {\n formatter: Intl.DateTimeFormat\n}) {\n return React.useMemo(() => {\n // TODO: something cleaner and more universal?\n const inputDate = formatter.format(new Date(2020, 10 - 1, 1))\n return inputDate\n .replace('2020', 'YYYY')\n .replace('10', 'MM')\n .replace('01', 'DD')\n }, [formatter])\n}\n\nexport function differenceInMonths(firstDate: Date, secondDate: Date) {\n let diffMonths = (secondDate.getFullYear() - firstDate.getFullYear()) * 12\n diffMonths -= firstDate.getMonth()\n diffMonths += secondDate.getMonth()\n return diffMonths\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["dateUtils.tsx"],"names":["React","useLatest","showWeekDay","dayIndex","disableWeekDays","some","di","dateToUnix","d","Math","round","getTime","addMonths","date","count","n","getDate","n2","Date","setDate","setMonth","getMonth","min","getDaysInMonth","year","getFullYear","month","isLeapYear","getFirstDayOfMonth","getDay","useRangeChecker","validRange","validStart","startDate","validEnd","endDate","startUnix","getStartOfDay","undefined","endUnix","getEndOfDay","validDisabledDatesRef","disabledDates","isWithinValidRange","useCallback","day","isDateWithinOptionalRange","isDisabled","current","disabledDate","areDatesOnSameDay","a","b","isDateBetween","dateUnix","daySize","estimatedMonthHeight","startAtIndex","totalMonths","beginOffset","gridCounts","Array","getGridCount","index","cHeight","monthDate","getRealIndex","h","getGridCountForDate","daysInMonth","dayOfWeek","ceil","getInitialIndex","today","months","differenceInMonths","useInputFormatter","locale","useMemo","Intl","DateTimeFormat","useInputFormat","formatter","inputDate","format","replace","firstDate","secondDate","diffMonths"],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { useLatest } from '../utils'\nimport type { ValidRangeType } from './Calendar'\n\nexport type DisableWeekDaysType = number[]\n\nexport function showWeekDay(\n dayIndex: number,\n disableWeekDays?: DisableWeekDaysType\n): boolean {\n return !(disableWeekDays && disableWeekDays.some((di) => di === dayIndex))\n}\n\nexport function dateToUnix(d: Date): number {\n return Math.round(d.getTime() / 1000)\n}\n\nexport function addMonths(date: Date, count: number) {\n let n = date.getDate()\n let n2 = new Date(date.getTime())\n n2.setDate(1)\n n2.setMonth(n2.getMonth() + count)\n n2.setDate(\n Math.min(\n n,\n getDaysInMonth({ year: n2.getFullYear(), month: n2.getMonth() })\n )\n )\n\n return n2\n}\n\n// https://stackoverflow.com/a/1185068/2508481\n// pass in any date as parameter anyDateInMonth based on dayjs\nexport function getDaysInMonth({\n year,\n month,\n}: {\n year: number\n month: number\n}): number {\n return [\n 31,\n isLeapYear({ year }) ? 29 : 28,\n 31,\n 30,\n 31,\n 30,\n 31,\n 31,\n 30,\n 31,\n 30,\n 31,\n ][month]\n}\n\nexport function getFirstDayOfMonth({\n year,\n month,\n}: {\n year: number\n month: number\n}): number {\n return new Date(year, month, 1).getDay()\n}\n\nexport function useRangeChecker(validRange: ValidRangeType | undefined) {\n const validStart = validRange?.startDate\n const validEnd = validRange?.endDate\n const startUnix =\n validStart instanceof Date\n ? dateToUnix(getStartOfDay(validStart))\n : undefined\n\n const endUnix =\n validEnd instanceof Date ? dateToUnix(getEndOfDay(validEnd)) : undefined\n\n const validDisabledDatesRef = useLatest(validRange?.disabledDates)\n\n const isWithinValidRange = React.useCallback(\n (day: Date) => {\n return isDateWithinOptionalRange(day, {\n startUnix: startUnix,\n endUnix: endUnix,\n })\n },\n [startUnix, endUnix]\n )\n\n const isDisabled = React.useCallback(\n (day: Date) => {\n return validDisabledDatesRef.current\n ? validDisabledDatesRef.current.some((disabledDate) =>\n areDatesOnSameDay(disabledDate, day)\n )\n : false\n },\n [validDisabledDatesRef]\n )\n\n return { isDisabled, isWithinValidRange, validStart, validEnd }\n}\n\nexport function areDatesOnSameDay(a: Date, b?: Date | null | undefined) {\n if (!b) {\n return false\n }\n\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n )\n}\n\nexport function isDateBetween(\n date: Date,\n {\n startDate,\n endDate,\n }: {\n startDate?: Date | null | undefined\n endDate?: Date | null | undefined\n }\n): boolean {\n if (!startDate || !endDate) {\n return false\n }\n return date <= endDate && date >= startDate\n}\n\n/**\n * Check if a date is within an optional range.\n *\n * If the range doesn't exist, it defaults to `true`.\n */\nexport function isDateWithinOptionalRange(\n date: Date,\n {\n startUnix,\n endUnix,\n }: { startUnix: number | undefined; endUnix: number | undefined }\n) {\n const dateUnix = dateToUnix(date)\n // if startUnix is provided and date is before start\n if (startUnix && dateUnix < startUnix) {\n return false\n }\n\n // if endUnix is provided and date is after end\n if (endUnix && dateUnix > endUnix) {\n return false\n }\n\n return true\n}\n\nexport function isLeapYear({ year }: { year: number }) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0\n}\n\nexport const daySize = 46\nexport const estimatedMonthHeight = 360\nexport const startAtIndex = 1200\nexport const totalMonths = startAtIndex * 2\nexport const beginOffset = estimatedMonthHeight * startAtIndex\nexport const gridCounts = new Array<number | undefined>(totalMonths)\n\nexport function getGridCount(index: number) {\n const cHeight = gridCounts[index]\n if (cHeight) {\n return cHeight\n }\n const monthDate = addMonths(new Date(), getRealIndex(index))\n const h = getGridCountForDate(monthDate)\n gridCounts[index] = h\n return h\n}\n\nexport function getGridCountForDate(date: Date) {\n const year = date.getFullYear()\n const month = date.getMonth()\n const daysInMonth = getDaysInMonth({ year, month })\n const dayOfWeek = getFirstDayOfMonth({ year, month })\n return Math.ceil((daysInMonth + dayOfWeek) / 7)\n}\n\nexport function getRealIndex(index: number) {\n return index - startAtIndex\n}\n\nexport function getInitialIndex(date: Date | undefined) {\n if (!date) {\n return startAtIndex\n }\n\n const today = new Date()\n const months = differenceInMonths(today, date)\n\n return startAtIndex + months\n}\n\nexport function useInputFormatter({ locale }: { locale: string | undefined }) {\n return React.useMemo(() => {\n return new Intl.DateTimeFormat(locale, {\n month: '2-digit',\n day: '2-digit',\n year: 'numeric',\n })\n }, [locale])\n}\nexport function getStartOfDay(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 0, 0, 0)\n}\nexport function getEndOfDay(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 23, 59, 59)\n}\nexport function useInputFormat({\n formatter,\n locale,\n}: {\n formatter: Intl.DateTimeFormat\n locale: string | undefined\n}) {\n return React.useMemo(() => {\n // TODO: something cleaner and more universal?\n const inputDate = formatter.format(new Date(2020, 10 - 1, 1))\n return inputDate\n .replace('2020', locale === 'pt' ? 'AAAA' : 'YYYY')\n .replace('10', 'MM')\n .replace('01', 'DD')\n }, [formatter, locale])\n}\n\nexport function differenceInMonths(firstDate: Date, secondDate: Date) {\n let diffMonths = (secondDate.getFullYear() - firstDate.getFullYear()) * 12\n diffMonths -= firstDate.getMonth()\n diffMonths += secondDate.getMonth()\n return diffMonths\n}\n"]}
|
|
@@ -20,14 +20,15 @@ export default function useDateInput(_ref) {
|
|
|
20
20
|
locale
|
|
21
21
|
});
|
|
22
22
|
const inputFormat = useInputFormat({
|
|
23
|
-
formatter
|
|
23
|
+
formatter,
|
|
24
|
+
locale
|
|
24
25
|
});
|
|
25
26
|
const formattedValue = formatter.format(value);
|
|
26
27
|
|
|
27
28
|
const onChangeText = date => {
|
|
28
29
|
const dayIndex = inputFormat.indexOf('DD');
|
|
29
30
|
const monthIndex = inputFormat.indexOf('MM');
|
|
30
|
-
const yearIndex = inputFormat.indexOf('YYYY');
|
|
31
|
+
const yearIndex = locale === 'pt' ? inputFormat.indexOf('AAAA') : inputFormat.indexOf('YYYY');
|
|
31
32
|
const day = Number(date.slice(dayIndex, dayIndex + 2));
|
|
32
33
|
const year = Number(date.slice(yearIndex, yearIndex + 4));
|
|
33
34
|
const month = Number(date.slice(monthIndex, monthIndex + 2));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["inputUtils.ts"],"names":["useInputFormat","useInputFormatter","useRangeChecker","React","getTranslation","useDateInput","locale","value","validRange","inputMode","onChange","isDisabled","isWithinValidRange","validStart","validEnd","error","setError","useState","formatter","inputFormat","formattedValue","format","onChangeText","date","dayIndex","indexOf","monthIndex","yearIndex","day","Number","slice","year","month","isNaN","finalDate","Date","errors","filter","n","join"],"mappings":"AAAA,SAASA,cAAT,EAAyBC,iBAAzB,EAA4CC,eAA5C,QAAmE,aAAnE;AACA,OAAO,KAAKC,KAAZ,MAAuB,OAAvB;AAEA,SAASC,cAAT,QAA+B,0BAA/B;AAEA,eAAe,SAASC,YAAT,OAYZ;AAAA,MAZkC;AACnCC,IAAAA,MADmC;AAEnCC,IAAAA,KAFmC;AAGnCC,IAAAA,UAHmC;AAInCC,IAAAA,SAJmC;AAKnCC,IAAAA;AALmC,GAYlC;AACD,QAAM;AAAEC,IAAAA,UAAF;AAAcC,IAAAA,kBAAd;AAAkCC,IAAAA,UAAlC;AAA8CC,IAAAA;AAA9C,MACJZ,eAAe,CAACM,UAAD,CADjB;AAEA,QAAM,CAACO,KAAD,EAAQC,QAAR,IAAoBb,KAAK,CAACc,QAAN,CAA8B,IAA9B,CAA1B;AACA,QAAMC,SAAS,GAAGjB,iBAAiB,CAAC;AAAEK,IAAAA;AAAF,GAAD,CAAnC;AACA,QAAMa,WAAW,GAAGnB,cAAc,CAAC;AAAEkB,IAAAA;
|
|
1
|
+
{"version":3,"sources":["inputUtils.ts"],"names":["useInputFormat","useInputFormatter","useRangeChecker","React","getTranslation","useDateInput","locale","value","validRange","inputMode","onChange","isDisabled","isWithinValidRange","validStart","validEnd","error","setError","useState","formatter","inputFormat","formattedValue","format","onChangeText","date","dayIndex","indexOf","monthIndex","yearIndex","day","Number","slice","year","month","isNaN","finalDate","Date","errors","filter","n","join"],"mappings":"AAAA,SAASA,cAAT,EAAyBC,iBAAzB,EAA4CC,eAA5C,QAAmE,aAAnE;AACA,OAAO,KAAKC,KAAZ,MAAuB,OAAvB;AAEA,SAASC,cAAT,QAA+B,0BAA/B;AAEA,eAAe,SAASC,YAAT,OAYZ;AAAA,MAZkC;AACnCC,IAAAA,MADmC;AAEnCC,IAAAA,KAFmC;AAGnCC,IAAAA,UAHmC;AAInCC,IAAAA,SAJmC;AAKnCC,IAAAA;AALmC,GAYlC;AACD,QAAM;AAAEC,IAAAA,UAAF;AAAcC,IAAAA,kBAAd;AAAkCC,IAAAA,UAAlC;AAA8CC,IAAAA;AAA9C,MACJZ,eAAe,CAACM,UAAD,CADjB;AAEA,QAAM,CAACO,KAAD,EAAQC,QAAR,IAAoBb,KAAK,CAACc,QAAN,CAA8B,IAA9B,CAA1B;AACA,QAAMC,SAAS,GAAGjB,iBAAiB,CAAC;AAAEK,IAAAA;AAAF,GAAD,CAAnC;AACA,QAAMa,WAAW,GAAGnB,cAAc,CAAC;AAAEkB,IAAAA,SAAF;AAAaZ,IAAAA;AAAb,GAAD,CAAlC;AACA,QAAMc,cAAc,GAAGF,SAAS,CAACG,MAAV,CAAiBd,KAAjB,CAAvB;;AACA,QAAMe,YAAY,GAAIC,IAAD,IAAkB;AACrC,UAAMC,QAAQ,GAAGL,WAAW,CAACM,OAAZ,CAAoB,IAApB,CAAjB;AACA,UAAMC,UAAU,GAAGP,WAAW,CAACM,OAAZ,CAAoB,IAApB,CAAnB;AACA,UAAME,SAAS,GACbrB,MAAM,KAAK,IAAX,GACIa,WAAW,CAACM,OAAZ,CAAoB,MAApB,CADJ,GAEIN,WAAW,CAACM,OAAZ,CAAoB,MAApB,CAHN;AAKA,UAAMG,GAAG,GAAGC,MAAM,CAACN,IAAI,CAACO,KAAL,CAAWN,QAAX,EAAqBA,QAAQ,GAAG,CAAhC,CAAD,CAAlB;AACA,UAAMO,IAAI,GAAGF,MAAM,CAACN,IAAI,CAACO,KAAL,CAAWH,SAAX,EAAsBA,SAAS,GAAG,CAAlC,CAAD,CAAnB;AACA,UAAMK,KAAK,GAAGH,MAAM,CAACN,IAAI,CAACO,KAAL,CAAWJ,UAAX,EAAuBA,UAAU,GAAG,CAApC,CAAD,CAApB;;AAEA,QAAIG,MAAM,CAACI,KAAP,CAAaL,GAAb,KAAqBC,MAAM,CAACI,KAAP,CAAaF,IAAb,CAArB,IAA2CF,MAAM,CAACI,KAAP,CAAaD,KAAb,CAA/C,EAAoE;AAClEhB,MAAAA,QAAQ,CACNZ,cAAc,CACZE,MADY,EAEZ,0BAFY,EAGZ,MAAM,0BAHM,CAAd,CAIEa,WAJF,CADM,CAAR;AAOA;AACD;;AAED,UAAMe,SAAS,GACbzB,SAAS,KAAK,KAAd,GACI,IAAI0B,IAAJ,CAASJ,IAAT,EAAeC,KAAK,GAAG,CAAvB,EAA0BJ,GAA1B,EAA+B,EAA/B,EAAmC,EAAnC,EAAuC,EAAvC,CADJ,GAEI,IAAIO,IAAJ,CAASJ,IAAT,EAAeC,KAAK,GAAG,CAAvB,EAA0BJ,GAA1B,CAHN;;AAKA,QAAIjB,UAAU,CAACuB,SAAD,CAAd,EAA2B;AACzBlB,MAAAA,QAAQ,CAACZ,cAAc,CAACE,MAAD,EAAS,gBAAT,CAAf,CAAR;AACA;AACD;;AACD,QAAI,CAACM,kBAAkB,CAACsB,SAAD,CAAvB,EAAoC;AAClC,UAAIE,MAAM,GACRvB,UAAU,IAAIC,QAAd,GACI,CACG,GAAEV,cAAc,CACfE,MADe,EAEf,eAFe,EAGf,MAAM,eAHS,CAAd,CAIDY,SAAS,CAACG,MAAV,CAAiBR,UAAjB,CAJC,EAI6BK,SAAS,CAACG,MAAV,CAAiBP,QAAjB,CAJ7B,CAIyD,EAL9D,CADJ,GAQI,CACED,UAAU,GACNT,cAAc,CACZE,MADY,EAEZ,kBAFY,EAGZ,MAAM,kBAHM,CAAd,CAIEY,SAAS,CAACG,MAAV,CAAiBR,UAAjB,CAJF,CADM,GAMN,EAPN,EAQEC,QAAQ,GACJV,cAAc,CACZE,MADY,EAEZ,iBAFY,EAGZ,MAAM,iBAHM,CAAd,CAIEY,SAAS,CAACG,MAAV,CAAiBP,QAAjB,CAJF,CADI,GAMJ,EAdN,CATN;AAyBAE,MAAAA,QAAQ,CAACoB,MAAM,CAACC,MAAP,CAAeC,CAAD,IAAOA,CAArB,EAAwBC,IAAxB,CAA6B,GAA7B,CAAD,CAAR;AACA;AACD;;AAEDvB,IAAAA,QAAQ,CAAC,IAAD,CAAR;;AACA,QAAIP,SAAS,KAAK,KAAlB,EAAyB;AACvBC,MAAAA,QAAQ,CAACwB,SAAD,CAAR;AACD,KAFD,MAEO;AACLxB,MAAAA,QAAQ,CAACwB,SAAD,CAAR;AACD;AACF,GApED;;AAqEA,SAAO;AACLxB,IAAAA,QADK;AAELK,IAAAA,KAFK;AAGLK,IAAAA,cAHK;AAILE,IAAAA,YAJK;AAKLH,IAAAA;AALK,GAAP;AAOD","sourcesContent":["import { useInputFormat, useInputFormatter, useRangeChecker } from './dateUtils'\nimport * as React from 'react'\nimport type { ValidRangeType } from './Calendar'\nimport { getTranslation } from 'react-native-paper-dates'\n\nexport default function useDateInput({\n locale,\n value,\n validRange,\n inputMode,\n onChange,\n}: {\n onChange: (d: Date) => void\n locale: undefined | string\n value: Date | undefined\n validRange: ValidRangeType | undefined\n inputMode: 'start' | 'end'\n}) {\n const { isDisabled, isWithinValidRange, validStart, validEnd } =\n useRangeChecker(validRange)\n const [error, setError] = React.useState<null | string>(null)\n const formatter = useInputFormatter({ locale })\n const inputFormat = useInputFormat({ formatter, locale })\n const formattedValue = formatter.format(value)\n const onChangeText = (date: string) => {\n const dayIndex = inputFormat.indexOf('DD')\n const monthIndex = inputFormat.indexOf('MM')\n const yearIndex =\n locale === 'pt'\n ? inputFormat.indexOf('AAAA')\n : inputFormat.indexOf('YYYY')\n\n const day = Number(date.slice(dayIndex, dayIndex + 2))\n const year = Number(date.slice(yearIndex, yearIndex + 4))\n const month = Number(date.slice(monthIndex, monthIndex + 2))\n\n if (Number.isNaN(day) || Number.isNaN(year) || Number.isNaN(month)) {\n setError(\n getTranslation(\n locale,\n 'notAccordingToDateFormat',\n () => 'notAccordingToDateFormat'\n )(inputFormat)\n )\n return\n }\n\n const finalDate =\n inputMode === 'end'\n ? new Date(year, month - 1, day, 23, 59, 59)\n : new Date(year, month - 1, day)\n\n if (isDisabled(finalDate)) {\n setError(getTranslation(locale, 'dateIsDisabled'))\n return\n }\n if (!isWithinValidRange(finalDate)) {\n let errors =\n validStart && validEnd\n ? [\n `${getTranslation(\n locale,\n 'mustBeBetween',\n () => 'mustBeBetween'\n )(formatter.format(validStart), formatter.format(validEnd))}`,\n ]\n : [\n validStart\n ? getTranslation(\n locale,\n 'mustBeHigherThan',\n () => 'mustBeHigherThan'\n )(formatter.format(validStart))\n : '',\n validEnd\n ? getTranslation(\n locale,\n 'mustBeLowerThan',\n () => 'mustBeLowerThan'\n )(formatter.format(validEnd))\n : '',\n ]\n setError(errors.filter((n) => n).join(' '))\n return\n }\n\n setError(null)\n if (inputMode === 'end') {\n onChange(finalDate)\n } else {\n onChange(finalDate)\n }\n }\n return {\n onChange,\n error,\n formattedValue,\n onChangeText,\n inputFormat,\n }\n}\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"]}
|
|
@@ -49,7 +49,8 @@ export declare function useInputFormatter({ locale }: {
|
|
|
49
49
|
}): Intl.DateTimeFormat;
|
|
50
50
|
export declare function getStartOfDay(d: Date): Date;
|
|
51
51
|
export declare function getEndOfDay(d: Date): Date;
|
|
52
|
-
export declare function useInputFormat({ formatter, }: {
|
|
52
|
+
export declare function useInputFormat({ formatter, locale, }: {
|
|
53
53
|
formatter: Intl.DateTimeFormat;
|
|
54
|
+
locale: string | undefined;
|
|
54
55
|
}): string;
|
|
55
56
|
export declare function differenceInMonths(firstDate: Date, secondDate: Date): number;
|
package/package.json
CHANGED
|
@@ -76,52 +76,50 @@ function CalendarEdit({
|
|
|
76
76
|
|
|
77
77
|
return (
|
|
78
78
|
<View style={styles.root}>
|
|
79
|
-
|
|
80
|
-
|
|
79
|
+
{mode === 'single' ? (
|
|
80
|
+
<DatePickerInput
|
|
81
|
+
inputMode="start"
|
|
82
|
+
ref={dateInput}
|
|
83
|
+
label={label}
|
|
84
|
+
value={state.date}
|
|
85
|
+
onChange={(date) => onChange({ ...state, date })}
|
|
86
|
+
onSubmitEditing={onSubmitInput}
|
|
87
|
+
validRange={validRange}
|
|
88
|
+
locale={locale}
|
|
89
|
+
withModal={false}
|
|
90
|
+
autoComplete={'off'}
|
|
91
|
+
/>
|
|
92
|
+
) : null}
|
|
93
|
+
{mode === 'range' ? (
|
|
94
|
+
<View style={styles.inner}>
|
|
81
95
|
<DatePickerInput
|
|
82
96
|
inputMode="start"
|
|
83
|
-
ref={
|
|
84
|
-
label={
|
|
85
|
-
value={state.
|
|
86
|
-
onChange={(
|
|
87
|
-
|
|
97
|
+
ref={startInput}
|
|
98
|
+
label={startLabel}
|
|
99
|
+
value={state.startDate}
|
|
100
|
+
onChange={(startDate) => onChange({ ...state, startDate })}
|
|
101
|
+
returnKeyType={'next'}
|
|
102
|
+
onSubmitEditing={onSubmitStartInput}
|
|
88
103
|
validRange={validRange}
|
|
89
104
|
locale={locale}
|
|
90
105
|
withModal={false}
|
|
91
106
|
autoComplete={'off'}
|
|
92
107
|
/>
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
/>
|
|
109
|
-
<View style={styles.separator} />
|
|
110
|
-
<DatePickerInput
|
|
111
|
-
inputMode="end"
|
|
112
|
-
ref={endInput}
|
|
113
|
-
label={endLabel}
|
|
114
|
-
value={state.endDate}
|
|
115
|
-
onChange={(endDate) => onChange({ ...state, endDate })}
|
|
116
|
-
onSubmitEditing={onSubmitEndInput}
|
|
117
|
-
validRange={validRange}
|
|
118
|
-
locale={locale}
|
|
119
|
-
withModal={false}
|
|
120
|
-
autoComplete="off"
|
|
121
|
-
/>
|
|
122
|
-
</>
|
|
123
|
-
) : null}
|
|
124
|
-
</View>
|
|
108
|
+
<View style={styles.separator} />
|
|
109
|
+
<DatePickerInput
|
|
110
|
+
inputMode="end"
|
|
111
|
+
ref={endInput}
|
|
112
|
+
label={endLabel}
|
|
113
|
+
value={state.endDate}
|
|
114
|
+
onChange={(endDate) => onChange({ ...state, endDate })}
|
|
115
|
+
onSubmitEditing={onSubmitEndInput}
|
|
116
|
+
validRange={validRange}
|
|
117
|
+
locale={locale}
|
|
118
|
+
withModal={false}
|
|
119
|
+
autoComplete="off"
|
|
120
|
+
/>
|
|
121
|
+
</View>
|
|
122
|
+
) : null}
|
|
125
123
|
</View>
|
|
126
124
|
)
|
|
127
125
|
}
|
package/src/Date/dateUtils.tsx
CHANGED
|
@@ -218,17 +218,19 @@ export function getEndOfDay(d: Date): Date {
|
|
|
218
218
|
}
|
|
219
219
|
export function useInputFormat({
|
|
220
220
|
formatter,
|
|
221
|
+
locale,
|
|
221
222
|
}: {
|
|
222
223
|
formatter: Intl.DateTimeFormat
|
|
224
|
+
locale: string | undefined
|
|
223
225
|
}) {
|
|
224
226
|
return React.useMemo(() => {
|
|
225
227
|
// TODO: something cleaner and more universal?
|
|
226
228
|
const inputDate = formatter.format(new Date(2020, 10 - 1, 1))
|
|
227
229
|
return inputDate
|
|
228
|
-
.replace('2020', 'YYYY')
|
|
230
|
+
.replace('2020', locale === 'pt' ? 'AAAA' : 'YYYY')
|
|
229
231
|
.replace('10', 'MM')
|
|
230
232
|
.replace('01', 'DD')
|
|
231
|
-
}, [formatter])
|
|
233
|
+
}, [formatter, locale])
|
|
232
234
|
}
|
|
233
235
|
|
|
234
236
|
export function differenceInMonths(firstDate: Date, secondDate: Date) {
|
package/src/Date/inputUtils.ts
CHANGED
|
@@ -20,12 +20,15 @@ export default function useDateInput({
|
|
|
20
20
|
useRangeChecker(validRange)
|
|
21
21
|
const [error, setError] = React.useState<null | string>(null)
|
|
22
22
|
const formatter = useInputFormatter({ locale })
|
|
23
|
-
const inputFormat = useInputFormat({ formatter })
|
|
23
|
+
const inputFormat = useInputFormat({ formatter, locale })
|
|
24
24
|
const formattedValue = formatter.format(value)
|
|
25
25
|
const onChangeText = (date: string) => {
|
|
26
26
|
const dayIndex = inputFormat.indexOf('DD')
|
|
27
27
|
const monthIndex = inputFormat.indexOf('MM')
|
|
28
|
-
const yearIndex =
|
|
28
|
+
const yearIndex =
|
|
29
|
+
locale === 'pt'
|
|
30
|
+
? inputFormat.indexOf('AAAA')
|
|
31
|
+
: inputFormat.indexOf('YYYY')
|
|
29
32
|
|
|
30
33
|
const day = Number(date.slice(dayIndex, dayIndex + 2))
|
|
31
34
|
const year = Number(date.slice(yearIndex, yearIndex + 4))
|
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)
|