From d419ce7a36e5d45316ef4cc31e07162335c0603b Mon Sep 17 00:00:00 2001 From: Ethan Sharabi <1780255+ethanshar@users.noreply.github.com> Date: Wed, 15 Feb 2023 16:04:12 +0200 Subject: [PATCH] Move moment to be optional dependency --- package.json | 2 +- src/components/dateTimePicker/index.tsx | 13 +++++++++---- src/optionalDependencies/MomentPackage.ts | 6 ++++++ src/optionalDependencies/index.ts | 1 + 4 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 src/optionalDependencies/MomentPackage.ts diff --git a/package.json b/package.json index 9ef75e3d2c..06e02a0107 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,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-redash": "^12.0.3", @@ -100,6 +99,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 853a206678..62c127ba6f 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'; @@ -151,6 +150,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]); @@ -179,13 +184,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 372225df08..59551ffc82 100644 --- a/src/optionalDependencies/index.ts +++ b/src/optionalDependencies/index.ts @@ -1,6 +1,7 @@ export {default as DateTimePickerPackage} from './DateTimePickerPackage'; export {default as FlashListPackage} from './FlashListPackage'; export {default as BlurViewPackage} from './BlurViewPackage'; +export {default as MomentPackage} from './MomentPackage'; export {default as NetInfoPackage} from './NetInfoPackage'; export {default as HapticFeedbackPackage} from './HapticFeedbackPackage'; export {default as SvgPackage} from './SvgPackage';