11import React from 'react' ;
22import { View } from 'react-native' ;
33import HeaderWithBackButton from '@components/HeaderWithBackButton' ;
4+ import OfflineWithFeedback from '@components/OfflineWithFeedback' ;
45import ScreenWrapper from '@components/ScreenWrapper' ;
56import ScrollView from '@components/ScrollView' ;
67import Switch from '@components/Switch' ;
@@ -12,10 +13,9 @@ import Navigation from '@libs/Navigation/Navigation';
1213import type { PlatformStackScreenProps } from '@libs/Navigation/PlatformStackNavigation/types' ;
1314import type { SettingsNavigatorParamList } from '@libs/Navigation/types' ;
1415import AccessOrNotFoundWrapper from '@pages/workspace/AccessOrNotFoundWrapper' ;
15- import { setPolicyProhibitedExpenses } from '@userActions/Policy/Policy' ;
16+ import { setPolicyProhibitedExpense } from '@userActions/Policy/Policy' ;
1617import CONST from '@src/CONST' ;
1718import type SCREENS from '@src/SCREENS' ;
18- import type { ProhibitedExpenses } from '@src/types/onyx/Policy' ;
1919
2020type ProhibitedExpensesProps = PlatformStackScreenProps < SettingsNavigatorParamList , typeof SCREENS . WORKSPACE . RULES_PROHIBITED_DEFAULT > ;
2121
@@ -49,76 +49,23 @@ function RulesProhibitedDefaultPage({
4949 < Text style = { [ styles . textNormal , styles . colorMuted ] } > { translate ( 'workspace.rules.individualExpenseRules.prohibitedDefaultDescription' ) } </ Text >
5050 </ Text >
5151
52- < View style = { [ styles . flexRow , styles . alignItemsCenter , styles . justifyContentBetween , styles . mt3 , styles . mh5 , styles . mb5 ] } >
53- < Text > { translate ( 'workspace.rules.individualExpenseRules.adultEntertainment' ) } </ Text >
54- < Switch
55- isOn = { policy ?. prohibitedExpenses ?. adultEntertainment ?? false }
56- accessibilityLabel = { translate ( 'workspace.rules.individualExpenseRules.adultEntertainment' ) }
57- onToggle = { ( ) => {
58- const prohibitedExpenses : ProhibitedExpenses = {
59- ...policy ?. prohibitedExpenses ,
60- adultEntertainment : ! policy ?. prohibitedExpenses ?. adultEntertainment ,
61- } ;
62- setPolicyProhibitedExpenses ( policyID , prohibitedExpenses ) ;
63- } }
64- />
65- </ View >
66- < View style = { [ styles . flexRow , styles . alignItemsCenter , styles . justifyContentBetween , styles . mt3 , styles . mh5 , styles . mb5 ] } >
67- < Text > { translate ( 'workspace.rules.individualExpenseRules.alcohol' ) } </ Text >
68- < Switch
69- isOn = { policy ?. prohibitedExpenses ?. alcohol ?? false }
70- accessibilityLabel = { translate ( 'workspace.rules.individualExpenseRules.alcohol' ) }
71- onToggle = { ( ) => {
72- const prohibitedExpenses : ProhibitedExpenses = {
73- ...policy ?. prohibitedExpenses ,
74- alcohol : ! policy ?. prohibitedExpenses ?. alcohol ,
75- } ;
76- setPolicyProhibitedExpenses ( policyID , prohibitedExpenses ) ;
77- } }
78- />
79- </ View >
80- < View style = { [ styles . flexRow , styles . alignItemsCenter , styles . justifyContentBetween , styles . mt3 , styles . mh5 , styles . mb5 ] } >
81- < Text > { translate ( 'workspace.rules.individualExpenseRules.gambling' ) } </ Text >
82- < Switch
83- isOn = { policy ?. prohibitedExpenses ?. gambling ?? false }
84- accessibilityLabel = { translate ( 'workspace.rules.individualExpenseRules.gambling' ) }
85- onToggle = { ( ) => {
86- const prohibitedExpenses : ProhibitedExpenses = {
87- ...policy ?. prohibitedExpenses ,
88- gambling : ! policy ?. prohibitedExpenses ?. gambling ,
89- } ;
90- setPolicyProhibitedExpenses ( policyID , prohibitedExpenses ) ;
91- } }
92- />
93- </ View >
94- < View style = { [ styles . flexRow , styles . alignItemsCenter , styles . justifyContentBetween , styles . mt3 , styles . mh5 , styles . mb5 ] } >
95- < Text > { translate ( 'workspace.rules.individualExpenseRules.hotelIncidentals' ) } </ Text >
96- < Switch
97- isOn = { policy ?. prohibitedExpenses ?. hotelIncidentals ?? false }
98- accessibilityLabel = { translate ( 'workspace.rules.individualExpenseRules.hotelIncidentals' ) }
99- onToggle = { ( ) => {
100- const prohibitedExpenses : ProhibitedExpenses = {
101- ...policy ?. prohibitedExpenses ,
102- hotelIncidentals : ! policy ?. prohibitedExpenses ?. hotelIncidentals ,
103- } ;
104- setPolicyProhibitedExpenses ( policyID , prohibitedExpenses ) ;
105- } }
106- />
107- </ View >
108- < View style = { [ styles . flexRow , styles . alignItemsCenter , styles . justifyContentBetween , styles . mt3 , styles . mh5 , styles . mb5 ] } >
109- < Text > { translate ( 'workspace.rules.individualExpenseRules.tobacco' ) } </ Text >
110- < Switch
111- isOn = { policy ?. prohibitedExpenses ?. tobacco ?? false }
112- accessibilityLabel = { translate ( 'workspace.rules.individualExpenseRules.tobacco' ) }
113- onToggle = { ( ) => {
114- const prohibitedExpenses : ProhibitedExpenses = {
115- ...policy ?. prohibitedExpenses ,
116- tobacco : ! policy ?. prohibitedExpenses ?. tobacco ,
117- } ;
118- setPolicyProhibitedExpenses ( policyID , prohibitedExpenses ) ;
119- } }
120- />
121- </ View >
52+ { Object . values ( CONST . POLICY . PROHIBITED_EXPENSES ) . map ( ( prohibitedExpense ) => (
53+ < OfflineWithFeedback
54+ pendingAction = { policy ?. prohibitedExpenses ?. pendingFields ?. [ prohibitedExpense ] }
55+ key = { translate ( `workspace.rules.individualExpenseRules.${ prohibitedExpense } ` ) }
56+ >
57+ < View style = { [ styles . flexRow , styles . alignItemsCenter , styles . justifyContentBetween , styles . mt3 , styles . mh5 , styles . mb5 ] } >
58+ < Text > { translate ( `workspace.rules.individualExpenseRules.${ prohibitedExpense } ` ) } </ Text >
59+ < Switch
60+ isOn = { policy ?. prohibitedExpenses ?. [ prohibitedExpense ] ?? false }
61+ accessibilityLabel = { translate ( `workspace.rules.individualExpenseRules.${ prohibitedExpense } ` ) }
62+ onToggle = { ( ) => {
63+ setPolicyProhibitedExpense ( policyID , prohibitedExpense ) ;
64+ } }
65+ />
66+ </ View >
67+ </ OfflineWithFeedback >
68+ ) ) }
12269 </ ScrollView >
12370 </ ScreenWrapper >
12471 </ AccessOrNotFoundWrapper >
0 commit comments