Skip to content

Commit d7bedab

Browse files
author
Hayata Suenaga
authored
Merge pull request #27660 from fabioh8010/ts/style/styles-refactor
[No QA] [TS migration] Review and clean up Styles files
2 parents f75b1ef + 3477ee7 commit d7bedab

File tree

57 files changed

+4674
-4180
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+4674
-4180
lines changed

.github/scripts/findUnusedKeys.sh

+8-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ LIB_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && cd ../../ && pwd)"
66

77
readonly SRC_DIR="${LIB_PATH}/src"
88
readonly STYLES_DIR="${LIB_PATH}/src/styles"
9-
readonly STYLES_FILE="${LIB_PATH}/src/styles/styles.js"
9+
readonly STYLES_FILE="${LIB_PATH}/src/styles/styles.ts"
1010
readonly UTILITIES_STYLES_FILE="${LIB_PATH}/src/styles/utilities"
1111
readonly STYLES_KEYS_FILE="${LIB_PATH}/scripts/style_keys_list_temp.txt"
1212
readonly UTILITY_STYLES_KEYS_FILE="${LIB_PATH}/scripts/utility_keys_list_temp.txt"
@@ -210,7 +210,12 @@ find_theme_style_and_store_keys() {
210210
fi
211211

212212
# Check if we are inside an arrow function
213-
if [[ "$line" =~ ^[[:space:]]*([a-zA-Z0-9_-])+:[[:space:]]*\(.*\)[[:space:]]*'=>'[[:space:]]*\(\{ || "$line" =~ ^[[:space:]]*(const|let|var)[[:space:]]+([a-zA-Z0-9_-]+)[[:space:]]*=[[:space:]]*\(.*\)[[:space:]]*'=>' ]]; then
213+
if [[ "$line" =~ ^[[:space:]]*([a-zA-Zgv 0-9_-])+:[[:space:]]*\(.*\)[[:space:]]*'=>'[[:space:]]*\(\{ || "$line" =~ ^[[:space:]]*([a-zA-Zgv 0-9_-])+:[[:space:]]*\(.*\)[[:space:]]*'=>' ]]; then
214+
inside_arrow_function=true
215+
continue
216+
fi
217+
218+
if [[ "$line" =~ ^[[:space:]]*(const|let|var)[[:space:]]+([a-zA-Z0-9_-]+)[[:space:]]*=[[:space:]]*\(.*\)[[:space:]]*'=>' ]]; then
214219
inside_arrow_function=true
215220
continue
216221
fi
@@ -348,7 +353,7 @@ echo "🔍 Looking for styles."
348353
find_utility_styles_store_prefix
349354
find_utility_usage_as_styles
350355

351-
# Find and store keys from styles.js
356+
# Find and store keys from styles.ts
352357
find_styles_object_and_store_keys "$STYLES_FILE"
353358
find_styles_functions_and_store_keys "$STYLES_FILE"
354359
collect_theme_keys_from_styles "$STYLES_FILE"

src/components/SelectionList/BaseSelectionList.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ import Log from '../../libs/Log';
2222
import OptionsListSkeletonView from '../OptionsListSkeletonView';
2323
import useActiveElement from '../../hooks/useActiveElement';
2424
import BaseListItem from './BaseListItem';
25-
import themeColors from '../../styles/themes/default';
2625
import ArrowKeyFocusManager from '../ArrowKeyFocusManager';
26+
import themeColors from '../../styles/themes/default';
2727

2828
const propTypes = {
2929
...keyboardStatePropTypes,
@@ -426,7 +426,7 @@ function BaseSelectionList({
426426
onScrollBeginDrag={onScrollBeginDrag}
427427
keyExtractor={(item) => item.keyForList}
428428
extraData={focusedIndex}
429-
indicatorStyle={themeColors.selectionListIndicatorColor}
429+
indicatorStyle={themeColors.white}
430430
keyboardShouldPersistTaps="always"
431431
showsVerticalScrollIndicator={showScrollIndicator}
432432
initialNumToRender={12}

src/libs/ComposerUtils/updateNumberOfLines/index.native.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import UpdateNumberOfLines from './types';
88
* divide by line height to get the total number of rows for the textarea.
99
*/
1010
const updateNumberOfLines: UpdateNumberOfLines = (props, event) => {
11-
const lineHeight = styles.textInputCompose.lineHeight;
11+
const lineHeight = styles.textInputCompose.lineHeight ?? 0;
1212
const paddingTopAndBottom = styles.textInputComposeSpacing.paddingVertical * 2;
1313
const inputHeight = event?.nativeEvent?.contentSize?.height ?? null;
1414
if (!inputHeight) {

src/styles/StyleUtils.ts

+161-147
Large diffs are not rendered by default.

src/styles/ThemeStylesProvider.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import ThemeStylesContext from './ThemeStylesContext';
55
// TODO: Rename this to "styles" once the app is migrated to theme switching hooks and HOCs
66
import {stylesGenerator as stylesUntyped} from './styles';
77

8-
const styles = stylesUntyped as (theme: Record<string, string>) => Record<string, unknown>;
8+
const styles = stylesUntyped;
99

1010
type ThemeStylesProviderProps = {
1111
children: React.ReactNode;

src/styles/addOutlineWidth/index.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ import AddOutlineWidth from './types';
99
/**
1010
* Adds the addOutlineWidth property to an object to be used when styling
1111
*/
12-
const addOutlineWidth: AddOutlineWidth = (obj, val, error = false) => ({
12+
const addOutlineWidth: AddOutlineWidth = (obj, val, hasError = false) => ({
1313
...obj,
1414
outlineWidth: val,
1515
outlineStyle: val ? 'auto' : 'none',
16-
boxShadow: val !== 0 ? `0px 0px 0px ${val}px ${error ? themeDefault.danger : themeDefault.borderFocus}` : 'none',
16+
boxShadow: val !== 0 ? `0px 0px 0px ${val}px ${hasError ? themeDefault.danger : themeDefault.borderFocus}` : 'none',
1717
});
1818

1919
export default addOutlineWidth;

src/styles/addOutlineWidth/types.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
import {CSSProperties} from 'react';
21
import {TextStyle} from 'react-native';
32

4-
type AddOutlineWidth = (obj: TextStyle | CSSProperties, val?: number, error?: boolean) => TextStyle | CSSProperties;
3+
type AddOutlineWidth = (obj: TextStyle, val?: number, hasError?: boolean) => TextStyle;
54

65
export default AddOutlineWidth;

src/styles/cardStyles/index.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1+
import positioning from '../utilities/positioning';
12
import GetCardStyles from './types';
23

34
/**
45
* Get card style for cardStyleInterpolator
56
*/
67
const getCardStyles: GetCardStyles = (screenWidth) => ({
7-
position: 'fixed',
8+
...positioning.pFixed,
89
width: screenWidth,
910
height: '100%',
1011
});

src/styles/cardStyles/types.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
import {CSSProperties} from 'react';
21
import {ViewStyle} from 'react-native';
32

4-
type GetCardStyles = (screenWidth: number) => Partial<Pick<CSSProperties | ViewStyle, 'position' | 'width' | 'height'>>;
3+
type GetCardStyles = (screenWidth: number) => ViewStyle;
54

65
export default GetCardStyles;

src/styles/codeStyles/types.ts

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
import {CSSProperties} from 'react';
21
import {TextStyle, ViewStyle} from 'react-native';
32

4-
type CodeWordWrapperStyles = ViewStyle | CSSProperties;
5-
type CodeWordStyles = TextStyle | CSSProperties;
6-
type CodeTextStyles = TextStyle | CSSProperties;
3+
type CodeWordWrapperStyles = ViewStyle;
4+
type CodeWordStyles = TextStyle;
5+
type CodeTextStyles = TextStyle;
76

8-
export type {CodeWordWrapperStyles, CodeWordStyles, CodeTextStyles};
7+
export type {CodeTextStyles, CodeWordStyles, CodeWordWrapperStyles};
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import {StyleProp, ViewStyle} from 'react-native';
21
import styles from '../styles';
2+
import ContainerComposeStyles from './types';
33

4-
const containerComposeStyles: StyleProp<ViewStyle> = [styles.textInputComposeSpacing];
4+
const containerComposeStyles: ContainerComposeStyles = [styles.textInputComposeSpacing];
55

66
export default containerComposeStyles;
+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import {StyleProp, ViewStyle} from 'react-native';
21
import styles from '../styles';
2+
import ContainerComposeStyles from './types';
33

44
// We need to set paddingVertical = 0 on web to avoid displaying a normal pointer on some parts of compose box when not in focus
5-
const containerComposeStyles: StyleProp<ViewStyle> = [styles.textInputComposeSpacing, {paddingVertical: 0}];
5+
const containerComposeStyles: ContainerComposeStyles = [styles.textInputComposeSpacing, {paddingVertical: 0}];
66

77
export default containerComposeStyles;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import {ViewStyle} from 'react-native';
2+
3+
type ContainerComposeStyles = ViewStyle[];
4+
5+
export default ContainerComposeStyles;

src/styles/editedLabelStyles/index.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
import EditedLabelStyles from './types';
21
import display from '../utilities/display';
32
import flex from '../utilities/flex';
3+
import EditedLabelStyles from './types';
44

5-
const editedLabelStyles: EditedLabelStyles = {...display.dInlineFlex, ...flex.alignItemsBaseline};
5+
const editedLabelStyles: EditedLabelStyles = {
6+
...display.dInlineFlex,
7+
...flex.alignItemsBaseline,
8+
};
69

710
export default editedLabelStyles;

src/styles/editedLabelStyles/types.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
import {CSSProperties} from 'react';
21
import {TextStyle} from 'react-native';
32

4-
type EditedLabelStyles = CSSProperties | TextStyle;
3+
type EditedLabelStyles = TextStyle;
54

65
export default EditedLabelStyles;

src/styles/fontFamily/bold/index.android.js

-4
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import FontFamilyBoldStyles from './types';
2+
3+
const singleBold: FontFamilyBoldStyles = 'ExpensifyNeue-Bold';
4+
const multiBold: FontFamilyBoldStyles = 'ExpensifyNeue-Bold';
5+
6+
export {singleBold, multiBold};

src/styles/fontFamily/bold/index.ios.js

-4
This file was deleted.
+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import FontFamilyBoldStyles from './types';
2+
3+
const singleBold: FontFamilyBoldStyles = 'ExpensifyNeue-Regular';
4+
const multiBold: FontFamilyBoldStyles = 'ExpensifyNeue-Regular';
5+
6+
export {singleBold, multiBold};

src/styles/fontFamily/bold/index.js

-4
This file was deleted.

src/styles/fontFamily/bold/index.ts

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import FontFamilyBoldStyles from './types';
2+
3+
const singleBold: FontFamilyBoldStyles = 'ExpensifyNeue-Regular';
4+
const multiBold: FontFamilyBoldStyles = 'ExpensifyNeue-Regular, Segoe UI Emoji, Noto Color Emoji';
5+
6+
export {singleBold, multiBold};

src/styles/fontFamily/bold/types.ts

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import {TextStyle} from 'react-native';
2+
3+
type FontFamilyBoldStyles = NonNullable<TextStyle['fontFamily']>;
4+
5+
export default FontFamilyBoldStyles;

src/styles/fontFamily/types.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import {TextStyle} from 'react-native';
2+
13
type FontFamilyKeys =
24
| 'EXP_NEUE_ITALIC'
35
| 'EXP_NEUE_BOLD'
@@ -10,6 +12,6 @@ type FontFamilyKeys =
1012
| 'MONOSPACE_BOLD'
1113
| 'MONOSPACE_BOLD_ITALIC';
1214

13-
type FontFamilyStyles = Record<FontFamilyKeys, string>;
15+
type FontFamilyStyles = Record<FontFamilyKeys, NonNullable<TextStyle['fontFamily']>>;
1416

1517
export default FontFamilyStyles;

src/styles/fontWeight/bold/types.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
import {CSSProperties} from 'react';
21
import {TextStyle} from 'react-native';
32

4-
type FontWeightBoldStyles = (TextStyle | CSSProperties)['fontWeight'];
3+
type FontWeightBoldStyles = NonNullable<TextStyle['fontWeight']>;
54

65
export default FontWeightBoldStyles;

src/styles/getModalStyles.ts

+8-7
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
1-
import {CSSProperties} from 'react';
21
import {ViewStyle} from 'react-native';
3-
import {ValueOf} from 'type-fest';
42
import {ModalProps} from 'react-native-modal';
3+
import {ValueOf} from 'type-fest';
54
import CONST from '../CONST';
6-
import variables from './variables';
7-
import themeColors from './themes/default';
85
import styles from './styles';
6+
import themeColors from './themes/default';
7+
import variables from './variables';
98

109
function getCenteredModalStyles(windowWidth: number, isSmallScreenWidth: boolean, isFullScreenWhenSmall = false): ViewStyle {
10+
const modalStyles = styles.centeredModalStyles(isSmallScreenWidth, isFullScreenWhenSmall);
11+
1112
return {
12-
borderWidth: styles.centeredModalStyles(isSmallScreenWidth, isFullScreenWhenSmall).borderWidth,
13-
width: isSmallScreenWidth ? '100%' : windowWidth - styles.centeredModalStyles(isSmallScreenWidth, isFullScreenWhenSmall).marginHorizontal * 2,
13+
borderWidth: modalStyles.borderWidth,
14+
width: isSmallScreenWidth ? '100%' : windowWidth - modalStyles.marginHorizontal * 2,
1415
};
1516
}
1617

@@ -26,7 +27,7 @@ type WindowDimensions = {
2627

2728
type GetModalStyles = {
2829
modalStyle: ViewStyle;
29-
modalContainerStyle: ViewStyle | Pick<CSSProperties, 'boxShadow'>;
30+
modalContainerStyle: ViewStyle;
3031
swipeDirection: ModalProps['swipeDirection'];
3132
animationIn: ModalProps['animationIn'];
3233
animationOut: ModalProps['animationOut'];
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
1-
export default () => ({
1+
import positioning from '../utilities/positioning';
2+
import GetNavigationModalCardStyles from './types';
3+
4+
const getNavigationModalCardStyles: GetNavigationModalCardStyles = () => ({
25
// position: fixed is set instead of position absolute to workaround Safari known issues of updating heights in DOM.
36
// Safari issues:
47
// https://github.com/Expensify/App/issues/12005
58
// https://github.com/Expensify/App/issues/17824
69
// https://github.com/Expensify/App/issues/20709
710
width: '100%',
811
height: '100%',
9-
position: 'fixed',
12+
13+
...positioning.pFixed,
1014
});
15+
16+
export default getNavigationModalCardStyles;
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1-
export default () => ({
1+
import GetNavigationModalCardStyles from './types';
2+
3+
const getNavigationModalCardStyles: GetNavigationModalCardStyles = () => ({
24
height: '100%',
35
});
6+
7+
export default getNavigationModalCardStyles;

src/styles/getNavigationModalCardStyles/index.website.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import positioning from '../utilities/positioning';
12
import GetNavigationModalCardStyles from './types';
23

34
const getNavigationModalCardStyles: GetNavigationModalCardStyles = () => ({
@@ -8,7 +9,8 @@ const getNavigationModalCardStyles: GetNavigationModalCardStyles = () => ({
89
// https://github.com/Expensify/App/issues/20709
910
width: '100%',
1011
height: '100%',
11-
position: 'fixed',
12+
13+
...positioning.pFixed,
1214
});
1315

1416
export default getNavigationModalCardStyles;
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
import {CSSProperties} from 'react';
21
import {ViewStyle} from 'react-native';
3-
import {Merge} from 'type-fest';
42

53
type GetNavigationModalCardStylesParams = {isSmallScreenWidth: number};
64

7-
type GetNavigationModalCardStyles = (params: GetNavigationModalCardStylesParams) => Merge<ViewStyle, Pick<CSSProperties, 'position'>>;
5+
type GetNavigationModalCardStyles = (params: GetNavigationModalCardStylesParams) => ViewStyle;
86

97
export default GetNavigationModalCardStyles;

src/styles/getReportActionContextMenuStyles.ts

+7-9
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,34 @@
1-
import {CSSProperties} from 'react';
21
import {ViewStyle} from 'react-native';
32
import styles from './styles';
4-
import variables from './variables';
53
import themeColors from './themes/default';
4+
import variables from './variables';
65

7-
type StylesArray = Array<ViewStyle | CSSProperties>;
8-
9-
const defaultWrapperStyle: ViewStyle | CSSProperties = {
6+
const defaultWrapperStyle: ViewStyle = {
107
backgroundColor: themeColors.componentBG,
118
};
129

13-
const miniWrapperStyle: StylesArray = [
10+
const miniWrapperStyle: ViewStyle[] = [
1411
styles.flexRow,
1512
defaultWrapperStyle,
1613
{
1714
borderRadius: variables.buttonBorderRadius,
1815
borderWidth: 1,
1916
borderColor: themeColors.border,
2017
// In Safari, when welcome messages use a code block (triple backticks), they would overlap the context menu below when there is no scrollbar without the transform style.
21-
transform: 'translateZ(0)',
18+
// NOTE: asserting "transform" to a valid type, because it isn't possible to augment "transform".
19+
transform: 'translateZ(0)' as unknown as ViewStyle['transform'],
2220
},
2321
];
2422

25-
const bigWrapperStyle: StylesArray = [styles.flexColumn, defaultWrapperStyle];
23+
const bigWrapperStyle: ViewStyle[] = [styles.flexColumn, defaultWrapperStyle];
2624

2725
/**
2826
* Generate the wrapper styles for the ReportActionContextMenu.
2927
*
3028
* @param isMini
3129
* @param isSmallScreenWidth
3230
*/
33-
function getReportActionContextMenuStyles(isMini: boolean, isSmallScreenWidth: boolean): StylesArray {
31+
function getReportActionContextMenuStyles(isMini: boolean, isSmallScreenWidth: boolean): ViewStyle[] {
3432
if (isMini) {
3533
return miniWrapperStyle;
3634
}

0 commit comments

Comments
 (0)