Skip to content

Commit 05db268

Browse files
committed
fix(predict): migrate PredictPosition to design system components
Replace raw React Native components with design system equivalents to comply with UI development guidelines: - Replace TouchableOpacity → ButtonBase - Replace View → Box with twClassName props - Replace StyleSheet.create() → Tailwind classes - Delete PredictPosition.styles.ts file - Use useTailwind() hook for inline styles Tailwind class mappings: - positionContainer → flex-row items-start py-2 gap-4 w-full - positionImageContainer → pt-1 - positionImage → w-10 h-10 rounded-full - positionDetails → flex-1 gap-0.5 - positionPnl → gap-2 items-end - skeletonSpacing → mb-1 Fixes CODEBOT violations: - Component Hierarchy (STRICT ORDER) - now uses design system first - Styling Rules (ENFORCE STRICTLY) - removed StyleSheet.create() All tests passing (22/22).
1 parent 4f00f1a commit 05db268

File tree

2 files changed

+18
-78
lines changed

2 files changed

+18
-78
lines changed

app/components/UI/Predict/components/PredictPosition/PredictPosition.styles.ts

Lines changed: 0 additions & 63 deletions
This file was deleted.

app/components/UI/Predict/components/PredictPosition/PredictPosition.tsx

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
import React from 'react';
2-
import { Image, TouchableOpacity, View } from 'react-native';
2+
import { Image } from 'react-native';
3+
import { Box, ButtonBase } from '@metamask/design-system-react-native';
4+
import { useTailwind } from '@metamask/design-system-twrnc-preset';
35
import Text, {
46
TextColor,
57
TextVariant,
68
} from '../../../../../component-library/components/Texts/Text';
7-
import { useStyles } from '../../../../../component-library/hooks';
89
import { PredictPosition as PredictPositionType } from '../../types';
910
import {
1011
formatCents,
1112
formatPercentage,
1213
formatPositionSize,
1314
formatPrice,
1415
} from '../../utils/format';
15-
import styleSheet from './PredictPosition.styles';
1616
import { PredictPositionSelectorsIDs } from '../../../../../../e2e/selectors/Predict/Predict.selectors';
1717
import { strings } from '../../../../../../locales/i18n';
1818
import { Skeleton } from '../../../../../component-library/components/Skeleton';
@@ -37,18 +37,21 @@ const PredictPosition: React.FC<PredictPositionProps> = ({
3737
size,
3838
optimistic,
3939
} = position;
40-
const { styles } = useStyles(styleSheet, {});
40+
const tw = useTailwind();
4141

4242
return (
43-
<TouchableOpacity
43+
<ButtonBase
4444
testID={PredictPositionSelectorsIDs.CURRENT_POSITION_CARD}
45-
style={styles.positionContainer}
4645
onPress={() => onPress?.(position)}
46+
twClassName="flex-row items-start py-2 gap-4 w-full"
4747
>
48-
<View style={styles.positionImageContainer}>
49-
<Image source={{ uri: icon }} style={styles.positionImage} />
50-
</View>
51-
<View style={styles.positionDetails}>
48+
<Box twClassName="pt-1">
49+
<Image
50+
source={{ uri: icon }}
51+
style={tw.style('w-10 h-10 rounded-full')}
52+
/>
53+
</Box>
54+
<Box twClassName="flex-1 gap-0.5">
5255
<Text variant={TextVariant.BodyMDMedium} color={TextColor.Default}>
5356
{title}
5457
</Text>
@@ -71,11 +74,11 @@ const PredictPosition: React.FC<PredictPositionProps> = ({
7174
},
7275
)}
7376
</Text>
74-
</View>
75-
<View style={styles.positionPnl}>
77+
</Box>
78+
<Box twClassName="gap-2 items-end">
7679
{optimistic ? (
7780
<>
78-
<Skeleton width={60} height={20} style={styles.skeletonSpacing} />
81+
<Skeleton width={60} height={20} style={tw.style('mb-1')} />
7982
<Skeleton width={50} height={16} />
8083
</>
8184
) : (
@@ -91,8 +94,8 @@ const PredictPosition: React.FC<PredictPositionProps> = ({
9194
</Text>
9295
</>
9396
)}
94-
</View>
95-
</TouchableOpacity>
97+
</Box>
98+
</ButtonBase>
9699
);
97100
};
98101

0 commit comments

Comments
 (0)