Skip to content

Commit b5f91ae

Browse files
committed
fix: show sort direction in filter bar in trending list
1 parent 5dd99a1 commit b5f91ae

4 files changed

Lines changed: 65 additions & 1 deletion

File tree

app/components/UI/Trending/components/FilterBar/FilterBar.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ export interface FilterButtonProps {
1717
ellipsizeMode?: 'tail' | 'head' | 'middle' | 'clip';
1818
/** Optional Tailwind class overrides for layout in custom contexts */
1919
twClassName?: string;
20+
/** Optional icon name to replace the default ArrowDown icon */
21+
iconName?: IconName;
2022
}
2123

2224
export const FilterButton: React.FC<FilterButtonProps> = ({
@@ -27,6 +29,7 @@ export const FilterButton: React.FC<FilterButtonProps> = ({
2729
numberOfLines,
2830
ellipsizeMode,
2931
twClassName,
32+
iconName = IconName.ArrowDown,
3033
}) => {
3134
const tw = useTailwind();
3235

@@ -51,7 +54,7 @@ export const FilterButton: React.FC<FilterButtonProps> = ({
5154
{label}
5255
</Text>
5356
<Icon
54-
name={IconName.ArrowDown}
57+
name={iconName}
5558
color={IconColor.Alternative}
5659
size={IconSize.Xs}
5760
/>
@@ -64,6 +67,8 @@ export interface FilterBarProps {
6467
priceChangeButtonText: string;
6568
onPriceChangePress: () => void;
6669
isPriceChangeDisabled?: boolean;
70+
/** Optional icon name for the price change button */
71+
priceChangeIconName?: IconName;
6772

6873
networkName: string;
6974
onNetworkPress: () => void;
@@ -81,6 +86,7 @@ const FilterBar: React.FC<FilterBarProps> = ({
8186
priceChangeButtonText,
8287
onPriceChangePress,
8388
isPriceChangeDisabled = false,
89+
priceChangeIconName,
8490
networkName,
8591
onNetworkPress,
8692
extraFilters,
@@ -95,6 +101,7 @@ const FilterBar: React.FC<FilterBarProps> = ({
95101
label={priceChangeButtonText}
96102
onPress={onPriceChangePress}
97103
disabled={isPriceChangeDisabled}
104+
iconName={priceChangeIconName}
98105
/>
99106
<View style={tw`ml-2 min-w-0 shrink flex-row items-center gap-2`}>
100107
<FilterButton

app/components/UI/Trending/components/TokenListPageLayout/TokenListPageLayout.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ const TokenListPageLayout: React.FC<TokenListPageLayoutProps> = ({
8888
priceChangeButtonText={filters.priceChangeButtonText}
8989
onPriceChangePress={filters.handlePriceChangePress}
9090
isPriceChangeDisabled={searchResults.length === 0}
91+
priceChangeIconName={filters.priceChangeSortDirectionIcon}
9192
networkName={filters.selectedNetworkName}
9293
onNetworkPress={filters.handleAllNetworksPress}
9394
extraFilters={extraFilters}

app/components/UI/Trending/hooks/useTokenListFilters/useTokenListFilters.test.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
TimeOption,
88
} from '../../components/TrendingTokensBottomSheet';
99
import type { CaipChainId } from '@metamask/utils';
10+
import { IconName } from '../../../../../component-library/components/Icons/Icon';
1011

1112
const mockGoBack = jest.fn();
1213
jest.mock('@react-navigation/native', () => ({
@@ -284,6 +285,50 @@ describe('useTokenListFilters', () => {
284285
});
285286
});
286287

288+
describe('priceChangeSortDirectionIcon', () => {
289+
it('returns Arrow2Down for descending sort direction', () => {
290+
const { result } = renderFilters();
291+
292+
expect(result.current.priceChangeSortDirectionIcon).toBe(
293+
IconName.Arrow2Down,
294+
);
295+
});
296+
297+
it('returns Arrow2Up for ascending sort direction', () => {
298+
const { result } = renderFilters();
299+
300+
act(() =>
301+
result.current.handlePriceChangeSelect(
302+
PriceChangeOption.Volume,
303+
SortDirection.Ascending,
304+
),
305+
);
306+
307+
expect(result.current.priceChangeSortDirectionIcon).toBe(
308+
IconName.Arrow2Up,
309+
);
310+
});
311+
312+
it('updates when sort direction changes', () => {
313+
const { result } = renderFilters();
314+
315+
expect(result.current.priceChangeSortDirectionIcon).toBe(
316+
IconName.Arrow2Down,
317+
);
318+
319+
act(() =>
320+
result.current.handlePriceChangeSelect(
321+
PriceChangeOption.PriceChange,
322+
SortDirection.Ascending,
323+
),
324+
);
325+
326+
expect(result.current.priceChangeSortDirectionIcon).toBe(
327+
IconName.Arrow2Up,
328+
);
329+
});
330+
});
331+
287332
describe('filterContext', () => {
288333
it('reflects current filter state', () => {
289334
const { result } = renderFilters();

app/components/UI/Trending/hooks/useTokenListFilters/useTokenListFilters.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
import type { TrendingFilterContext } from '../../components/TrendingTokensList/TrendingTokensList';
1212
import TrendingFeedSessionManager from '../../services/TrendingFeedSessionManager';
1313
import { useNetworkName } from '../useNetworkName/useNetworkName';
14+
import { IconName } from '../../../../../component-library/components/Icons/Icon';
1415

1516
interface UseTokenListFiltersOptions {
1617
/**
@@ -49,6 +50,7 @@ export interface TokenListFilters {
4950
) => void;
5051
handlePriceChangePress: () => void;
5152
priceChangeButtonText: string;
53+
priceChangeSortDirectionIcon: IconName;
5254

5355
// Time
5456
selectedTimeOption: TimeOption;
@@ -189,6 +191,14 @@ export const useTokenListFilters = (
189191
}
190192
}, [selectedPriceChangeOption]);
191193

194+
const priceChangeSortDirectionIcon = useMemo(
195+
() =>
196+
priceChangeSortDirection === SortDirection.Ascending
197+
? IconName.Arrow2Up
198+
: IconName.Arrow2Down,
199+
[priceChangeSortDirection],
200+
);
201+
192202
const filterContext: TrendingFilterContext = useMemo(
193203
() => ({
194204
timeFilter: selectedTimeOption,
@@ -226,6 +236,7 @@ export const useTokenListFilters = (
226236
handlePriceChangeSelect,
227237
handlePriceChangePress,
228238
priceChangeButtonText,
239+
priceChangeSortDirectionIcon,
229240
selectedTimeOption,
230241
setSelectedTimeOption,
231242
refreshing,

0 commit comments

Comments
 (0)