Skip to content

Commit 13463ec

Browse files
authored
Merge pull request Expensify#66924 from callstack-internal/fix/1193-improve-workspace-opening
getting item extracted and spread operator got rid of
2 parents 9eb58b1 + 801cd7d commit 13463ec

9 files changed

Lines changed: 24 additions & 12 deletions

src/components/SelectionList/BaseSelectionList.tsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -637,15 +637,16 @@ function BaseSelectionList<TItem extends ListItem>(
637637
const isItemFocused = (!isDisabled || selected) && focusedIndex === normalizedIndex;
638638
const isItemHighlighted = !!itemsToHighlight?.has(item.keyForList ?? '');
639639

640+
const newItem = item;
641+
if (!item.isSelected) {
642+
newItem.isSelected = selected;
643+
}
644+
640645
return (
641646
<View onLayout={(event: LayoutChangeEvent) => onItemLayout(event, item?.keyForList)}>
642647
<BaseSelectionListItemRenderer
643648
ListItem={ListItem}
644-
item={{
645-
shouldAnimateInHighlight: isItemHighlighted,
646-
isSelected: selected,
647-
...item,
648-
}}
649+
item={newItem}
649650
shouldUseDefaultRightHandSideCheckmark={shouldUseDefaultRightHandSideCheckmark}
650651
index={index}
651652
isFocused={isItemFocused}
@@ -671,6 +672,7 @@ function BaseSelectionList<TItem extends ListItem>(
671672
singleExecution={singleExecution}
672673
titleContainerStyles={listItemTitleContainerStyles}
673674
canShowProductTrainingTooltip={canShowProductTrainingTooltipMemo}
675+
shouldAnimateInHighlight={isItemHighlighted}
674676
/>
675677
</View>
676678
);

src/components/SelectionList/BaseSelectionListItemRenderer.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ function BaseSelectionListItemRenderer<TItem extends ListItem>({
5050
singleExecution,
5151
titleContainerStyles,
5252
shouldUseDefaultRightHandSideCheckmark,
53+
shouldAnimateInHighlight,
5354
canShowProductTrainingTooltip = true,
5455
userWalletTierName,
5556
isUserValidated,
@@ -106,6 +107,7 @@ function BaseSelectionListItemRenderer<TItem extends ListItem>({
106107
titleContainerStyles={titleContainerStyles}
107108
shouldUseDefaultRightHandSideCheckmark={shouldUseDefaultRightHandSideCheckmark}
108109
canShowProductTrainingTooltip={canShowProductTrainingTooltip}
110+
shouldAnimateInHighlight={shouldAnimateInHighlight}
109111
userWalletTierName={userWalletTierName}
110112
isUserValidated={isUserValidated}
111113
personalDetails={personalDetails}

src/components/SelectionList/ChatListItem.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ function ChatListItem<TItem extends ListItem>({
2222
shouldSyncFocus,
2323
policies,
2424
allReports,
25+
shouldAnimateInHighlight,
2526
userWalletTierName,
2627
isUserValidated,
2728
personalDetails,
@@ -34,7 +35,7 @@ function ChatListItem<TItem extends ListItem>({
3435
const theme = useTheme();
3536
const animatedHighlightStyle = useAnimatedHighlightStyle({
3637
borderRadius: variables.componentBorderRadius,
37-
shouldHighlight: item?.shouldAnimateInHighlight ?? false,
38+
shouldHighlight: shouldAnimateInHighlight ?? false,
3839
highlightColor: theme.messageHighlightBG,
3940
backgroundColor: theme.highlightBG,
4041
});

src/components/SelectionList/Search/TaskListItem.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ function TaskListItem<TItem extends ListItem>({
1818
onFocus,
1919
onLongPressRow,
2020
shouldSyncFocus,
21+
shouldAnimateInHighlight,
2122
}: TaskListItemProps<TItem>) {
2223
const taskItem = item as unknown as TaskListItemType;
2324
const styles = useThemeStyles();
@@ -43,7 +44,7 @@ function TaskListItem<TItem extends ListItem>({
4344

4445
const animatedHighlightStyle = useAnimatedHighlightStyle({
4546
borderRadius: variables.componentBorderRadius,
46-
shouldHighlight: item?.shouldAnimateInHighlight ?? false,
47+
shouldHighlight: shouldAnimateInHighlight ?? false,
4748
highlightColor: theme.messageHighlightBG,
4849
backgroundColor: theme.highlightBG,
4950
});

src/components/SelectionList/Search/TransactionGroupListItem.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ function TransactionGroupListItem<TItem extends ListItem>({
4646
shouldSyncFocus,
4747
columns,
4848
groupBy,
49+
shouldAnimateInHighlight,
4950
}: TransactionGroupListItemProps<TItem>) {
5051
const groupItem = item as unknown as TransactionGroupListItemType;
5152
const theme = useTheme();
@@ -68,7 +69,7 @@ function TransactionGroupListItem<TItem extends ListItem>({
6869

6970
const animatedHighlightStyle = useAnimatedHighlightStyle({
7071
borderRadius: variables.componentBorderRadius,
71-
shouldHighlight: item?.shouldAnimateInHighlight ?? false,
72+
shouldHighlight: shouldAnimateInHighlight ?? false,
7273
highlightColor: theme.messageHighlightBG,
7374
backgroundColor: theme.highlightBG,
7475
});

src/components/SelectionList/Search/TransactionListItem.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ function TransactionListItem<TItem extends ListItem>({
3333
onLongPressRow,
3434
shouldSyncFocus,
3535
isLoading,
36+
shouldAnimateInHighlight,
3637
columns,
3738
}: TransactionListItemProps<TItem>) {
3839
const transactionItem = item as unknown as TransactionListItemType;
@@ -60,7 +61,7 @@ function TransactionListItem<TItem extends ListItem>({
6061

6162
const animatedHighlightStyle = useAnimatedHighlightStyle({
6263
borderRadius: variables.componentBorderRadius,
63-
shouldHighlight: item?.shouldAnimateInHighlight ?? false,
64+
shouldHighlight: shouldAnimateInHighlight ?? false,
6465
highlightColor: theme.messageHighlightBG,
6566
backgroundColor: theme.highlightBG,
6667
});

src/components/SelectionList/TableListItem.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,15 @@ function TableListItem<TItem extends ListItem>({
2828
shouldSyncFocus,
2929
titleContainerStyles,
3030
shouldUseDefaultRightHandSideCheckmark,
31+
shouldAnimateInHighlight,
3132
}: TableListItemProps<TItem>) {
3233
const styles = useThemeStyles();
3334
const theme = useTheme();
3435
const StyleUtils = useStyleUtils();
3536

3637
const animatedHighlightStyle = useAnimatedHighlightStyle({
3738
borderRadius: styles.selectionListPressableItemWrapper.borderRadius,
38-
shouldHighlight: !!item.shouldAnimateInHighlight,
39+
shouldHighlight: !!shouldAnimateInHighlight,
3940
highlightColor: theme.messageHighlightBG,
4041
backgroundColor: theme.highlightBG,
4142
});
@@ -59,7 +60,7 @@ function TableListItem<TItem extends ListItem>({
5960
styles.selectionListPressableItemWrapper,
6061
styles.mh0,
6162
// Removing background style because they are added to the parent OpacityView via animatedHighlightStyle
62-
item.shouldAnimateInHighlight ? styles.bgTransparent : undefined,
63+
shouldAnimateInHighlight ? styles.bgTransparent : undefined,
6364
item.isSelected && styles.activeComponentBG,
6465
item.cursorStyle,
6566
],

src/components/SelectionList/types.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,9 @@ type ListItemProps<TItem extends ListItem> = CommonListItemProps<TItem> & {
393393

394394
/** Whether to show the default right hand side checkmark */
395395
shouldUseDefaultRightHandSideCheckmark?: boolean;
396+
397+
/** Whether to animate in highlight */
398+
shouldAnimateInHighlight?: boolean;
396399
};
397400

398401
type BaseListItemProps<TItem extends ListItem> = CommonListItemProps<TItem> & {
@@ -413,6 +416,7 @@ type BaseListItemProps<TItem extends ListItem> = CommonListItemProps<TItem> & {
413416
testID?: string;
414417
/** Whether to show the default right hand side checkmark */
415418
shouldUseDefaultRightHandSideCheckmark?: boolean;
419+
shouldAnimateInHighlight?: boolean;
416420
};
417421

418422
type UserListItemProps<TItem extends ListItem> = ListItemProps<TItem> & {

tests/unit/BaseSelectionListTest.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@ describe('BaseSelectionList', () => {
8787
fireEvent.press(screen.getByTestId(`${CONST.BASE_LIST_ITEM_TEST_ID}1`));
8888
expect(onSelectRowMock).toHaveBeenCalledWith({
8989
...mockSections.at(1),
90-
shouldAnimateInHighlight: false,
9190
});
9291
});
9392

0 commit comments

Comments
 (0)