diff --git a/package.json b/package.json index 267f63b51c..cace8bdc24 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,6 @@ "hoist-non-react-statics": "^3.0.0", "lodash": "^4.17.21", "memoize-one": "^5.0.5", - "moment": "^2.24.0", "prop-types": "^15.5.10", "react-freeze": "^1.0.0", "react-native-color": "0.0.10", @@ -95,6 +94,7 @@ "jest": "^26.6.3", "metro-react-native-babel-preset": "^0.67.0", "mocha": "^5.0.0", + "moment": "^2.24.0", "object-hash": "^3.0.0", "prettier-eslint": "12.0.0", "react": "17.0.2", diff --git a/src/components/dateTimePicker/index.tsx b/src/components/dateTimePicker/index.tsx index a4ce1ce049..a3e330bca3 100644 --- a/src/components/dateTimePicker/index.tsx +++ b/src/components/dateTimePicker/index.tsx @@ -1,7 +1,6 @@ -import moment from 'moment'; import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react'; import {StyleProp, StyleSheet, ViewStyle} from 'react-native'; -import {DateTimePickerPackage as RNDateTimePicker} from '../../optionalDependencies'; +import {DateTimePickerPackage as RNDateTimePicker, MomentPackage as moment} from '../../optionalDependencies'; import {useDidUpdate} from 'hooks'; import {Colors} from '../../style'; import Assets from '../../assets'; @@ -147,6 +146,12 @@ function DateTimePicker(props: DateTimePickerPropsInternal) { } }, []); + useEffect(() => { + if (!moment && (dateFormat || timeFormat)) { + console.error(`RNUILib DateTimePicker component with date/time format requires installing "moment" dependency`); + } + }, [dateFormat, timeFormat]); + useDidUpdate(() => { setValue(propsValue); }, [propsValue]); @@ -175,13 +180,13 @@ function DateTimePicker(props: DateTimePickerPropsInternal) { case MODES.DATE: return dateFormatter ? dateFormatter(value) - : dateFormat + : dateFormat && moment ? moment(value).format(dateFormat) : value.toLocaleDateString(); case MODES.TIME: return timeFormatter ? timeFormatter(value) - : timeFormat + : timeFormat && moment ? moment(value).format(timeFormat) : value.toLocaleTimeString(); } diff --git a/src/optionalDependencies/MomentPackage.ts b/src/optionalDependencies/MomentPackage.ts new file mode 100644 index 0000000000..de9c05d077 --- /dev/null +++ b/src/optionalDependencies/MomentPackage.ts @@ -0,0 +1,6 @@ +let MomentPackage: typeof import('moment') | undefined; +try { + MomentPackage = require('moment'); +} catch (error) {} + +export default MomentPackage; diff --git a/src/optionalDependencies/index.ts b/src/optionalDependencies/index.ts index 93bc82b37d..2fc69d7145 100644 --- a/src/optionalDependencies/index.ts +++ b/src/optionalDependencies/index.ts @@ -6,3 +6,4 @@ export {PickerPackage, CommunityPickerPackage} from './PickerPackage'; export {default as SvgPackage} from './SvgPackage'; export {createShimmerPlaceholder} from './ShimmerPackage'; export {default as LinearGradientPackage} from './LinearGradientPackage'; +export {default as MomentPackage} from './MomentPackage';