Skip to content

Commit 3073193

Browse files
lakchoteOSBotify
authored andcommitted
Merge pull request #48708 from software-mansion-labs/@BartoszGrajdek/spend-sub-categories-fix
[CP Staging] Select subcategory as the default spend category (cherry picked from commit c96425c) (CP triggered by mountiny)
1 parent d018a49 commit 3073193

File tree

2 files changed

+38
-39
lines changed

2 files changed

+38
-39
lines changed

src/pages/workspace/categories/SpendCategorySelectorListItem.tsx

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import React, {useState} from 'react';
2+
import type {SetOptional} from 'type-fest';
23
import BaseListItem from '@components/SelectionList/BaseListItem';
34
import type {BaseListItemProps, ListItem} from '@components/SelectionList/types';
45
import useThemeStyles from '@hooks/useThemeStyles';
5-
import blurActiveElement from '@libs/Accessibility/blurActiveElement';
66
import CategorySelector from '@pages/workspace/distanceRates/CategorySelector';
77
import * as Policy from '@userActions/Policy/Policy';
88

9-
function SpendCategorySelectorListItem<TItem extends ListItem>({item, onSelectRow, isFocused}: BaseListItemProps<TItem>) {
9+
type SpendCategorySelectorListItemProps<TItem extends ListItem> = SetOptional<BaseListItemProps<TItem>, 'onSelectRow'>;
10+
11+
function SpendCategorySelectorListItem<TItem extends ListItem>({item, onSelectRow = () => {}, isFocused}: SpendCategorySelectorListItemProps<TItem>) {
1012
const styles = useThemeStyles();
1113
const [isCategoryPickerVisible, setIsCategoryPickerVisible] = useState(false);
1214
const {policyID, groupID, categoryID} = item;
@@ -21,10 +23,10 @@ function SpendCategorySelectorListItem<TItem extends ListItem>({item, onSelectRo
2123
};
2224

2325
const setNewCategory = (selectedCategory: ListItem) => {
24-
if (!selectedCategory.text) {
26+
if (!selectedCategory.keyForList) {
2527
return;
2628
}
27-
Policy.setWorkspaceDefaultSpendCategory(policyID, groupID, selectedCategory.text);
29+
Policy.setWorkspaceDefaultSpendCategory(policyID, groupID, selectedCategory.keyForList);
2830
};
2931

3032
return (
@@ -48,9 +50,7 @@ function SpendCategorySelectorListItem<TItem extends ListItem>({item, onSelectRo
4850
showPickerModal={() => setIsCategoryPickerVisible(true)}
4951
hidePickerModal={() => {
5052
setIsCategoryPickerVisible(false);
51-
blurActiveElement();
5253
}}
53-
shouldUseCustomScrollView
5454
/>
5555
</BaseListItem>
5656
);

src/pages/workspace/categories/WorkspaceCategoriesSettingsPage.tsx

+32-33
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {View} from 'react-native';
33
import {useOnyx} from 'react-native-onyx';
44
import HeaderWithBackButton from '@components/HeaderWithBackButton';
55
import ScreenWrapper from '@components/ScreenWrapper';
6-
import SelectionList from '@components/SelectionList';
6+
import ScrollView from '@components/ScrollView';
77
import type {ListItem} from '@components/SelectionList/types';
88
import Text from '@components/Text';
99
import useLocalize from '@hooks/useLocalize';
@@ -37,28 +37,31 @@ function WorkspaceCategoriesSettingsPage({policy, route}: WorkspaceCategoriesSet
3737
setWorkspaceRequiresCategory(policyID, value);
3838
};
3939

40-
const {sections} = useMemo(() => {
41-
if (!(currentPolicy && currentPolicy.mccGroup)) {
42-
return {sections: [{data: []}]};
40+
const policyMccGroup = currentPolicy?.mccGroup;
41+
const listItems = useMemo(() => {
42+
let data: ListItem[] = [];
43+
44+
if (policyMccGroup) {
45+
data = Object.entries(policyMccGroup).map(
46+
([mccKey, mccGroup]) =>
47+
({
48+
categoryID: mccGroup.category,
49+
keyForList: mccKey,
50+
groupID: mccKey,
51+
policyID,
52+
tabIndex: -1,
53+
} as ListItem),
54+
);
4355
}
4456

45-
return {
46-
sections: [
47-
{
48-
data: Object.entries(currentPolicy.mccGroup).map(
49-
([mccKey, mccGroup]) =>
50-
({
51-
categoryID: mccGroup.category,
52-
keyForList: mccKey,
53-
groupID: mccKey,
54-
policyID,
55-
tabIndex: -1,
56-
} as ListItem),
57-
),
58-
},
59-
],
60-
};
61-
}, [currentPolicy, policyID]);
57+
return data.map((item) => (
58+
<SpendCategorySelectorListItem
59+
key={item.keyForList}
60+
item={item}
61+
showTooltip
62+
/>
63+
));
64+
}, [policyMccGroup, policyID]);
6265

6366
const hasEnabledOptions = OptionsListUtils.hasEnabledOptions(policyCategories ?? {});
6467
const isToggleDisabled = !policy?.areCategoriesEnabled || !hasEnabledOptions || isConnectedToAccounting;
@@ -89,18 +92,14 @@ function WorkspaceCategoriesSettingsPage({policy, route}: WorkspaceCategoriesSet
8992
shouldPlaceSubtitleBelowSwitch
9093
/>
9194
<View style={[styles.containerWithSpaceBetween]}>
92-
{!!currentPolicy && sections[0].data.length > 0 && (
93-
<SelectionList
94-
headerContent={
95-
<View style={[styles.mh5, styles.mt2, styles.mb1]}>
96-
<Text style={[styles.headerText]}>{translate('workspace.categories.defaultSpendCategories')}</Text>
97-
<Text style={[styles.mt1, styles.lh20]}>{translate('workspace.categories.spendCategoriesDescription')}</Text>
98-
</View>
99-
}
100-
sections={sections}
101-
ListItem={SpendCategorySelectorListItem}
102-
onSelectRow={() => {}}
103-
/>
95+
{!!currentPolicy && listItems && (
96+
<>
97+
<View style={[styles.mh5, styles.mt2, styles.mb1]}>
98+
<Text style={[styles.headerText]}>{translate('workspace.categories.defaultSpendCategories')}</Text>
99+
<Text style={[styles.mt1, styles.lh20]}>{translate('workspace.categories.spendCategoriesDescription')}</Text>
100+
</View>
101+
<ScrollView>{listItems}</ScrollView>
102+
</>
104103
)}
105104
</View>
106105
</ScreenWrapper>

0 commit comments

Comments
 (0)