diff --git a/.eslintrc.js b/.eslintrc.js
index 5451cfff6534..0661183101ab 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -194,6 +194,7 @@ module.exports = {
{
selector: ['parameter', 'method'],
format: ['camelCase', 'PascalCase'],
+ leadingUnderscore: 'allow',
},
],
'@typescript-eslint/ban-types': [
diff --git a/src/components/GrowlNotification/GrowlNotificationContainer/growlNotificationContainerPropTypes.js b/src/components/GrowlNotification/GrowlNotificationContainer/growlNotificationContainerPropTypes.js
deleted file mode 100644
index 2432d1b1748c..000000000000
--- a/src/components/GrowlNotification/GrowlNotificationContainer/growlNotificationContainerPropTypes.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import PropTypes from 'prop-types';
-import {Animated} from 'react-native';
-
-const propTypes = {
- /** GrowlNotification content */
- children: PropTypes.node.isRequired,
-
- /** GrowlNotification Y postion, required to show or hide with fling animation */
- translateY: PropTypes.instanceOf(Animated.Value).isRequired,
-};
-
-export default propTypes;
diff --git a/src/components/GrowlNotification/GrowlNotificationContainer/index.js b/src/components/GrowlNotification/GrowlNotificationContainer/index.js
deleted file mode 100644
index ccc404d415d7..000000000000
--- a/src/components/GrowlNotification/GrowlNotificationContainer/index.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import React from 'react';
-import {Animated} from 'react-native';
-import withWindowDimensions, {windowDimensionsPropTypes} from '@components/withWindowDimensions';
-import useThemeStyles from '@hooks/useThemeStyles';
-import growlNotificationContainerPropTypes from './growlNotificationContainerPropTypes';
-
-const propTypes = {
- ...growlNotificationContainerPropTypes,
- ...windowDimensionsPropTypes,
-};
-
-function GrowlNotificationContainer(props) {
- const styles = useThemeStyles();
- return (
-
- {props.children}
-
- );
-}
-
-GrowlNotificationContainer.propTypes = propTypes;
-GrowlNotificationContainer.displayName = 'GrowlNotificationContainer';
-
-export default withWindowDimensions(GrowlNotificationContainer);
diff --git a/src/components/GrowlNotification/GrowlNotificationContainer/index.native.js b/src/components/GrowlNotification/GrowlNotificationContainer/index.native.js
deleted file mode 100644
index 207033f8fac2..000000000000
--- a/src/components/GrowlNotification/GrowlNotificationContainer/index.native.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import React from 'react';
-import {Animated} from 'react-native';
-import useSafeAreaInsets from '@hooks/useSafeAreaInsets';
-import useStyleUtils from '@hooks/useStyleUtils';
-import useThemeStyles from '@hooks/useThemeStyles';
-import growlNotificationContainerPropTypes from './growlNotificationContainerPropTypes';
-
-const propTypes = {
- ...growlNotificationContainerPropTypes,
-};
-
-function GrowlNotificationContainer(props) {
- const styles = useThemeStyles();
- const StyleUtils = useStyleUtils();
- const insets = useSafeAreaInsets;
-
- return (
-
- {props.children}
-
- );
-}
-
-GrowlNotificationContainer.propTypes = propTypes;
-GrowlNotificationContainer.displayName = 'GrowlNotificationContainer';
-
-export default GrowlNotificationContainer;
diff --git a/src/components/GrowlNotification/GrowlNotificationContainer/index.native.tsx b/src/components/GrowlNotification/GrowlNotificationContainer/index.native.tsx
new file mode 100644
index 000000000000..efd143c9487c
--- /dev/null
+++ b/src/components/GrowlNotification/GrowlNotificationContainer/index.native.tsx
@@ -0,0 +1,18 @@
+import React from 'react';
+import {Animated} from 'react-native';
+import useSafeAreaInsets from '@hooks/useSafeAreaInsets';
+import useStyleUtils from '@hooks/useStyleUtils';
+import useThemeStyles from '@hooks/useThemeStyles';
+import type GrowlNotificationContainerProps from './types';
+
+function GrowlNotificationContainer({children, translateY}: GrowlNotificationContainerProps) {
+ const styles = useThemeStyles();
+ const StyleUtils = useStyleUtils();
+ const insets = useSafeAreaInsets();
+
+ return {children};
+}
+
+GrowlNotificationContainer.displayName = 'GrowlNotificationContainer';
+
+export default GrowlNotificationContainer;
diff --git a/src/components/GrowlNotification/GrowlNotificationContainer/index.tsx b/src/components/GrowlNotification/GrowlNotificationContainer/index.tsx
new file mode 100644
index 000000000000..3bbd0303906d
--- /dev/null
+++ b/src/components/GrowlNotification/GrowlNotificationContainer/index.tsx
@@ -0,0 +1,22 @@
+import React from 'react';
+import {Animated} from 'react-native';
+import useThemeStyles from '@hooks/useThemeStyles';
+import useWindowDimensions from '@hooks/useWindowDimensions';
+import type GrowlNotificationContainerProps from './types';
+
+function GrowlNotificationContainer({children, translateY}: GrowlNotificationContainerProps) {
+ const styles = useThemeStyles();
+ const {isSmallScreenWidth} = useWindowDimensions();
+
+ return (
+
+ {children}
+
+ );
+}
+
+GrowlNotificationContainer.displayName = 'GrowlNotificationContainer';
+
+export default GrowlNotificationContainer;
diff --git a/src/components/GrowlNotification/GrowlNotificationContainer/types.ts b/src/components/GrowlNotification/GrowlNotificationContainer/types.ts
new file mode 100644
index 000000000000..91a48437dbd9
--- /dev/null
+++ b/src/components/GrowlNotification/GrowlNotificationContainer/types.ts
@@ -0,0 +1,8 @@
+import type {Animated} from 'react-native';
+import type ChildrenProps from '@src/types/utils/ChildrenProps';
+
+type GrowlNotificationContainerProps = ChildrenProps & {
+ translateY: Animated.Value;
+};
+
+export default GrowlNotificationContainerProps;
diff --git a/src/components/GrowlNotification/index.js b/src/components/GrowlNotification/index.tsx
similarity index 82%
rename from src/components/GrowlNotification/index.js
rename to src/components/GrowlNotification/index.tsx
index ed0dd302f705..d0846dcf7a42 100644
--- a/src/components/GrowlNotification/index.js
+++ b/src/components/GrowlNotification/index.tsx
@@ -1,6 +1,8 @@
+import type {ForwardedRef} from 'react';
import React, {forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState} from 'react';
import {Animated, View} from 'react-native';
import {Directions, Gesture, GestureDetector} from 'react-native-gesture-handler';
+import type {SvgProps} from 'react-native-svg';
import Icon from '@components/Icon';
import * as Expensicons from '@components/Icon/Expensicons';
import * as Pressables from '@components/Pressable';
@@ -8,6 +10,7 @@ import Text from '@components/Text';
import useTheme from '@hooks/useTheme';
import useThemeStyles from '@hooks/useThemeStyles';
import * as Growl from '@libs/Growl';
+import type {GrowlRef} from '@libs/Growl';
import useNativeDriver from '@libs/useNativeDriver';
import CONST from '@src/CONST';
import GrowlNotificationContainer from './GrowlNotificationContainer';
@@ -16,15 +19,29 @@ const INACTIVE_POSITION_Y = -255;
const PressableWithoutFeedback = Pressables.PressableWithoutFeedback;
-function GrowlNotification(_, ref) {
+function GrowlNotification(_: unknown, ref: ForwardedRef) {
const translateY = useRef(new Animated.Value(INACTIVE_POSITION_Y)).current;
const [bodyText, setBodyText] = useState('');
const [type, setType] = useState('success');
- const [duration, setDuration] = useState();
+ const [duration, setDuration] = useState();
const theme = useTheme();
const styles = useThemeStyles();
- const types = {
+ type GrowlIconTypes = Record<
+ /** String representing the growl type, all type strings
+ * for growl notifications are stored in CONST.GROWL
+ */
+ string,
+ {
+ /** Expensicon for the page */
+ icon: React.FC;
+
+ /** Color for the icon (should be from theme) */
+ iconColor: string;
+ }
+ >;
+
+ const types: GrowlIconTypes = {
[CONST.GROWL.SUCCESS]: {
icon: Expensicons.Checkmark,
iconColor: theme.success,
@@ -46,7 +63,7 @@ function GrowlNotification(_, ref) {
* @param {String} type
* @param {Number} duration
*/
- const show = useCallback((text, growlType, growlDuration) => {
+ const show = useCallback((text: string, growlType: string, growlDuration: number) => {
setBodyText(text);
setType(growlType);
setDuration(growlDuration);
@@ -61,7 +78,6 @@ function GrowlNotification(_, ref) {
(val = INACTIVE_POSITION_Y) => {
Animated.spring(translateY, {
toValue: val,
- duration: 80,
useNativeDriver,
}).start();
},
diff --git a/src/components/MultiGestureCanvas/usePinchGesture.ts b/src/components/MultiGestureCanvas/usePinchGesture.ts
index 74a2326748a1..87d3bdada6a2 100644
--- a/src/components/MultiGestureCanvas/usePinchGesture.ts
+++ b/src/components/MultiGestureCanvas/usePinchGesture.ts
@@ -98,7 +98,6 @@ const usePinchGesture = ({
const pinchGesture = Gesture.Pinch()
.enabled(pinchEnabled)
// The first argument is not used, but must be defined
- // eslint-disable-next-line @typescript-eslint/naming-convention
.onTouchesDown((_evt, state) => {
// We don't want to activate pinch gesture when we are swiping in the pager
if (!shouldDisableTransformationGestures.value) {
diff --git a/src/components/MultiGestureCanvas/useTapGestures.ts b/src/components/MultiGestureCanvas/useTapGestures.ts
index a28333725d6e..f550e93d6be2 100644
--- a/src/components/MultiGestureCanvas/useTapGestures.ts
+++ b/src/components/MultiGestureCanvas/useTapGestures.ts
@@ -121,7 +121,6 @@ const useTapGestures = ({
const doubleTapGesture = Gesture.Tap()
// The first argument is not used, but must be defined
- // eslint-disable-next-line @typescript-eslint/naming-convention
.onTouchesDown((_evt, state) => {
if (!shouldDisableTransformationGestures.value) {
return;
@@ -156,7 +155,6 @@ const useTapGestures = ({
.onBegin(() => {
stopAnimation();
})
- // eslint-disable-next-line @typescript-eslint/naming-convention
.onFinalize((_evt, success) => {
if (!success || onTap === undefined) {
return;
diff --git a/src/components/OptionsList/BaseOptionsList.tsx b/src/components/OptionsList/BaseOptionsList.tsx
index 575df128894a..3844080c6f5d 100644
--- a/src/components/OptionsList/BaseOptionsList.tsx
+++ b/src/components/OptionsList/BaseOptionsList.tsx
@@ -133,7 +133,6 @@ function BaseOptionsList(
*
* [{header}, {sectionHeader}, {item}, {item}, {sectionHeader}, {item}, {item}, {footer}]
*/
- // eslint-disable-next-line @typescript-eslint/naming-convention
const getItemLayout = (_data: OptionsListData[] | null, flatDataArrayIndex: number) => {
if (!flattenedData.current[flatDataArrayIndex]) {
flattenedData.current = buildFlatSectionArray();
diff --git a/src/components/ScreenWrapper.tsx b/src/components/ScreenWrapper.tsx
index 306846ad7d99..827eec8088a6 100644
--- a/src/components/ScreenWrapper.tsx
+++ b/src/components/ScreenWrapper.tsx
@@ -148,7 +148,6 @@ function ScreenWrapper(
const panResponder = useRef(
PanResponder.create({
- // eslint-disable-next-line @typescript-eslint/naming-convention
onStartShouldSetPanResponderCapture: (_e, gestureState) => gestureState.numberActiveTouches === CONST.TEST_TOOL.NUMBER_OF_TAPS,
onPanResponderRelease: toggleTestToolsModal,
}),
@@ -156,7 +155,6 @@ function ScreenWrapper(
const keyboardDissmissPanResponder = useRef(
PanResponder.create({
- // eslint-disable-next-line @typescript-eslint/naming-convention
onMoveShouldSetPanResponderCapture: (_e, gestureState) => {
const isHorizontalSwipe = Math.abs(gestureState.dx) > Math.abs(gestureState.dy);
const shouldDismissKeyboard = shouldDismissKeyboardBeforeClose && isKeyboardShown && Browser.isMobile();
diff --git a/src/components/SwipeableView/index.native.tsx b/src/components/SwipeableView/index.native.tsx
index 67c6695c1a7f..e5b6d371e606 100644
--- a/src/components/SwipeableView/index.native.tsx
+++ b/src/components/SwipeableView/index.native.tsx
@@ -9,7 +9,6 @@ function SwipeableView({children, onSwipeDown}: SwipeableViewProps) {
const panResponder = useRef(
PanResponder.create({
// The PanResponder gets focus only when the y-axis movement is over minimumPixelDistance & swipe direction is downwards
- // eslint-disable-next-line @typescript-eslint/naming-convention
onMoveShouldSetPanResponderCapture: (_event, gestureState) => {
if (gestureState.dy - oldYRef.current > 0 && gestureState.dy > minimumPixelDistance) {
return true;
diff --git a/src/libs/Growl.ts b/src/libs/Growl.ts
index 55bcf88206e9..3812a155ba1f 100644
--- a/src/libs/Growl.ts
+++ b/src/libs/Growl.ts
@@ -50,4 +50,6 @@ export default {
success,
};
+export type {GrowlRef};
+
export {growlRef, setIsReady};
diff --git a/src/pages/home/report/ContextMenu/PopoverReportActionContextMenu.tsx b/src/pages/home/report/ContextMenu/PopoverReportActionContextMenu.tsx
index 931b87704ce5..ea3828c762c0 100644
--- a/src/pages/home/report/ContextMenu/PopoverReportActionContextMenu.tsx
+++ b/src/pages/home/report/ContextMenu/PopoverReportActionContextMenu.tsx
@@ -30,7 +30,6 @@ function extractPointerEvent(event: GestureResponderEvent | MouseEvent): MouseEv
return event;
}
-// eslint-disable-next-line @typescript-eslint/naming-convention
function PopoverReportActionContextMenu(_props: unknown, ref: ForwardedRef) {
const {translate} = useLocalize();
const reportIDRef = useRef('0');
diff --git a/src/pages/settings/Wallet/WalletPage/WalletPage.tsx b/src/pages/settings/Wallet/WalletPage/WalletPage.tsx
index 88236e06f9a9..c28a0f6649e4 100644
--- a/src/pages/settings/Wallet/WalletPage/WalletPage.tsx
+++ b/src/pages/settings/Wallet/WalletPage/WalletPage.tsx
@@ -396,7 +396,6 @@ function WalletPage({bankAccountList = {}, cardList = {}, fundList = {}, isLoadi
)}
navigateToWalletOrTransferBalancePage(source)}
onSelectPaymentMethod={(selectedPaymentMethod: string) => {
if (hasActivatedWallet || selectedPaymentMethod !== CONST.PAYMENT_METHODS.PERSONAL_BANK_ACCOUNT) {
diff --git a/src/styles/utils/addOutlineWidth/index.native.ts b/src/styles/utils/addOutlineWidth/index.native.ts
index 9a9942951cd0..fdc338caaffd 100644
--- a/src/styles/utils/addOutlineWidth/index.native.ts
+++ b/src/styles/utils/addOutlineWidth/index.native.ts
@@ -4,7 +4,6 @@
*/
import type AddOutlineWidth from './types';
-// eslint-disable-next-line @typescript-eslint/naming-convention
const addOutlineWidth: AddOutlineWidth = (_theme, obj) => obj;
export default addOutlineWidth;
diff --git a/src/utils/times.ts b/src/utils/times.ts
index 1dc97eb74659..0f2a0766a8c3 100644
--- a/src/utils/times.ts
+++ b/src/utils/times.ts
@@ -1,5 +1,4 @@
function times(n: number, func: (index: number) => TReturnType = (i) => i as TReturnType): TReturnType[] {
- // eslint-disable-next-line @typescript-eslint/naming-convention
return Array.from({length: n}).map((_, i) => func(i));
}