From d5aa1bd2e9f6cc297fe15808e313223c8dd6014d Mon Sep 17 00:00:00 2001 From: BrtqKr Date: Tue, 10 Sep 2024 14:59:05 +0200 Subject: [PATCH 1/3] fix keys --- src/pages/workspace/rules/ExpenseReportRulesSection.tsx | 8 ++++---- .../workspace/rules/IndividualExpenseRulesSection.tsx | 6 ++++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/pages/workspace/rules/ExpenseReportRulesSection.tsx b/src/pages/workspace/rules/ExpenseReportRulesSection.tsx index 71fdc0a29eeb..fcb0a4b1f790 100644 --- a/src/pages/workspace/rules/ExpenseReportRulesSection.tsx +++ b/src/pages/workspace/rules/ExpenseReportRulesSection.tsx @@ -58,9 +58,9 @@ function ExpenseReportRulesSection({policyID}: ExpenseReportRulesSectionProps) { ? policy?.fieldList?.[CONST.POLICY.FIELD_LIST_TITLE_FIELD_ID].pendingFields?.defaultValue : null } + key="customName" > {individualExpenseRulesItems.map((item) => ( - + Date: Tue, 10 Sep 2024 18:18:37 +0200 Subject: [PATCH 2/3] block custom names when report fields are disabled --- src/languages/en.ts | 1 + src/languages/es.ts | 1 + .../rules/ExpenseReportRulesSection.tsx | 21 +++++++++++++------ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/languages/en.ts b/src/languages/en.ts index 38784f14a77d..29dabe361a07 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -3764,6 +3764,7 @@ export default { autoPayReportsUnderDescription: 'Fully compliant expense reports under this amount will be automatically paid. ', unlockFeatureGoToSubtitle: 'Go to', unlockFeatureEnableWorkflowsSubtitle: (featureName: string) => `and enable workflows, then add ${featureName} to unlock this feature.`, + enableFeatureSubtitle: (featureName: string) => `and enable ${featureName} to unlock this feature.`, }, categoryRules: { title: 'Category rules', diff --git a/src/languages/es.ts b/src/languages/es.ts index a56204de6fe9..166fd018cfd6 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -3814,6 +3814,7 @@ export default { autoPayReportsUnderDescription: 'Los informes de gastos totalmente conformes por debajo de esta cantidad se pagarán automáticamente.', unlockFeatureGoToSubtitle: 'Ir a', unlockFeatureEnableWorkflowsSubtitle: (featureName: string) => `y habilita flujos de trabajo, luego agrega ${featureName} para desbloquear esta función.`, + enableFeatureSubtitle: (featureName: string) => `y habilita ${featureName} para desbloquear esta función.`, }, categoryRules: { title: 'Reglas de categoría', diff --git a/src/pages/workspace/rules/ExpenseReportRulesSection.tsx b/src/pages/workspace/rules/ExpenseReportRulesSection.tsx index fcb0a4b1f790..a950567e903e 100644 --- a/src/pages/workspace/rules/ExpenseReportRulesSection.tsx +++ b/src/pages/workspace/rules/ExpenseReportRulesSection.tsx @@ -24,11 +24,12 @@ function ExpenseReportRulesSection({policyID}: ExpenseReportRulesSectionProps) { const styles = useThemeStyles(); const policy = usePolicy(policyID); + const customReportNamesUnavailable = !policy?.areReportFieldsEnabled; // Auto-approvals and self-approvals are unavailable due to the policy workflows settings const workflowApprovalsUnavailable = PolicyUtils.getWorkflowApprovalsUnavailable(policy); const autoPayApprovedReportsUnavailable = policy?.reimbursementChoice === CONST.POLICY.REIMBURSEMENT_CHOICES.REIMBURSEMENT_NO; - const renderFallbackSubtitle = (featureName: string) => { + const renderFallbackSubtitle = ({featureName, variant = 'unlock'}: {featureName: string; variant?: 'unlock' | 'enable'}) => { return ( {translate('workspace.rules.expenseReportRules.unlockFeatureGoToSubtitle')}{' '} @@ -38,7 +39,11 @@ function ExpenseReportRulesSection({policyID}: ExpenseReportRulesSectionProps) { > {translate('workspace.common.moreFeatures').toLowerCase()} {' '} - {translate('workspace.rules.expenseReportRules.unlockFeatureEnableWorkflowsSubtitle', featureName)} + {variant === 'unlock' ? ( + {translate('workspace.rules.expenseReportRules.unlockFeatureEnableWorkflowsSubtitle', featureName)} + ) : ( + {translate('workspace.rules.expenseReportRules.enableFeatureSubtitle', featureName)} + )} ); }; @@ -46,9 +51,13 @@ function ExpenseReportRulesSection({policyID}: ExpenseReportRulesSectionProps) { const optionItems = [ { title: translate('workspace.rules.expenseReportRules.customReportNamesTitle'), - subtitle: translate('workspace.rules.expenseReportRules.customReportNamesSubtitle'), + subtitle: customReportNamesUnavailable + ? renderFallbackSubtitle({featureName: translate('workspace.common.reportFields').toLowerCase(), variant: 'enable'}) + : translate('workspace.rules.expenseReportRules.customReportNamesSubtitle'), switchAccessibilityLabel: translate('workspace.rules.expenseReportRules.customReportNamesTitle'), isActive: policy?.shouldShowCustomReportTitleOption, + disabled: customReportNamesUnavailable, + showLockIcon: customReportNamesUnavailable, pendingAction: policy?.pendingFields?.shouldShowCustomReportTitleOption, onToggle: (isEnabled: boolean) => PolicyActions.enablePolicyDefaultReportTitle(policyID, isEnabled), subMenuItems: [ @@ -87,7 +96,7 @@ function ExpenseReportRulesSection({policyID}: ExpenseReportRulesSectionProps) { { title: translate('workspace.rules.expenseReportRules.preventSelfApprovalsTitle'), subtitle: workflowApprovalsUnavailable - ? renderFallbackSubtitle(translate('common.approvals').toLowerCase()) + ? renderFallbackSubtitle({featureName: translate('common.approvals').toLowerCase()}) : translate('workspace.rules.expenseReportRules.preventSelfApprovalsSubtitle'), switchAccessibilityLabel: translate('workspace.rules.expenseReportRules.preventSelfApprovalsTitle'), isActive: policy?.preventSelfApproval && !workflowApprovalsUnavailable, @@ -99,7 +108,7 @@ function ExpenseReportRulesSection({policyID}: ExpenseReportRulesSectionProps) { { title: translate('workspace.rules.expenseReportRules.autoApproveCompliantReportsTitle'), subtitle: workflowApprovalsUnavailable - ? renderFallbackSubtitle(translate('common.approvals').toLowerCase()) + ? renderFallbackSubtitle({featureName: translate('common.approvals').toLowerCase()}) : translate('workspace.rules.expenseReportRules.autoApproveCompliantReportsSubtitle'), switchAccessibilityLabel: translate('workspace.rules.expenseReportRules.autoApproveCompliantReportsTitle'), isActive: policy?.shouldShowAutoApprovalOptions && !workflowApprovalsUnavailable, @@ -144,7 +153,7 @@ function ExpenseReportRulesSection({policyID}: ExpenseReportRulesSectionProps) { { title: translate('workspace.rules.expenseReportRules.autoPayApprovedReportsTitle'), subtitle: autoPayApprovedReportsUnavailable - ? renderFallbackSubtitle(translate('common.payments').toLowerCase()) + ? renderFallbackSubtitle({featureName: translate('common.payments').toLowerCase()}) : translate('workspace.rules.expenseReportRules.autoPayApprovedReportsSubtitle'), switchAccessibilityLabel: translate('workspace.rules.expenseReportRules.autoPayApprovedReportsTitle'), onToggle: (isEnabled: boolean) => { From edc02f40eba16797326f96cd85ad2d16d73dfea1 Mon Sep 17 00:00:00 2001 From: Wojciech Boman Date: Wed, 11 Sep 2024 16:44:16 +0200 Subject: [PATCH 3/3] Pass errorText to AmountForm when it is displayed as TextInput --- src/components/AmountForm.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/AmountForm.tsx b/src/components/AmountForm.tsx index 68def45e373e..7b83b45e94eb 100644 --- a/src/components/AmountForm.tsx +++ b/src/components/AmountForm.tsx @@ -256,6 +256,7 @@ function AmountForm( prefixStyle={styles.colorMuted} keyboardType={CONST.KEYBOARD_TYPE.DECIMAL_PAD} inputMode={CONST.INPUT_MODE.DECIMAL} + errorText={errorText} // eslint-disable-next-line react/jsx-props-no-spreading {...rest} />