From 89e6f5f9789cd273da88d6a0f735e34caea3d45e Mon Sep 17 00:00:00 2001 From: Mykhailo Kravchenko Date: Tue, 18 Jun 2024 13:16:23 +0200 Subject: [PATCH 1/8] add reportFields to WorkspaceMoreFeaturesPage --- src/pages/workspace/WorkspaceMoreFeaturesPage.tsx | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/pages/workspace/WorkspaceMoreFeaturesPage.tsx b/src/pages/workspace/WorkspaceMoreFeaturesPage.tsx index 54ee78a146ec..8beeec33247f 100644 --- a/src/pages/workspace/WorkspaceMoreFeaturesPage.tsx +++ b/src/pages/workspace/WorkspaceMoreFeaturesPage.tsx @@ -133,6 +133,20 @@ function WorkspaceMoreFeaturesPage({policy, route}: WorkspaceMoreFeaturesPagePro Policy.enablePolicyTaxes(policy?.id ?? '-1', isEnabled); }, }, + { + icon: Illustrations.Pencil, + titleTranslationKey: 'workspace.moreFeatures.reportFields.title', + subtitleTranslationKey: 'workspace.moreFeatures.reportFields.subtitle', + isActive: policy?.areReportFieldsEnabled ?? false, + disabled: hasAccountingConnection, + pendingAction: policy?.pendingFields?.areReportFieldsEnabled, + action: (isEnabled: boolean) => { + if (hasAccountingConnection) { + setIsOrganizeWarningModalOpen(true); + return; + } + }, + }, ]; const integrateItems: Item[] = [ From a621e62af402f25207db10d6aa2b6fbb746c87fb Mon Sep 17 00:00:00 2001 From: Mykhailo Kravchenko Date: Tue, 18 Jun 2024 13:19:23 +0200 Subject: [PATCH 2/8] make disable text as common --- src/languages/en.ts | 2 +- src/languages/es.ts | 2 +- src/pages/settings/Security/TwoFactorAuth/Steps/EnabledStep.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/languages/en.ts b/src/languages/en.ts index bf3803c7606d..5827af9cf0aa 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -340,6 +340,7 @@ export default { shared: 'Shared', drafts: 'Drafts', finished: 'Finished', + disable: 'Disable', }, location: { useCurrent: 'Use current location', @@ -1019,7 +1020,6 @@ export default { enabled: 'Two-factor authentication is now enabled!', congrats: 'Congrats, now you’ve got that extra security.', copy: 'Copy', - disable: 'Disable', }, recoveryCodeForm: { error: { diff --git a/src/languages/es.ts b/src/languages/es.ts index 4c900e23acc5..8ca231b0756b 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -331,6 +331,7 @@ export default { shared: 'Compartidos', drafts: 'Borradores', finished: 'Finalizados', + disable: 'Deshabilitar', }, connectionComplete: { title: 'Conexión Completa', @@ -1016,7 +1017,6 @@ export default { enabled: '¡La autenticación de dos factores está ahora habilitada!', congrats: 'Felicidades, ahora tienes esa seguridad adicional.', copy: 'Copiar', - disable: 'Deshabilitar', }, recoveryCodeForm: { error: { diff --git a/src/pages/settings/Security/TwoFactorAuth/Steps/EnabledStep.tsx b/src/pages/settings/Security/TwoFactorAuth/Steps/EnabledStep.tsx index ad9a4060af45..ddd99f8fb54e 100644 --- a/src/pages/settings/Security/TwoFactorAuth/Steps/EnabledStep.tsx +++ b/src/pages/settings/Security/TwoFactorAuth/Steps/EnabledStep.tsx @@ -57,7 +57,7 @@ function EnabledStep() { onModalHide={() => setIsConfirmModalVisible(false)} isVisible={isConfirmModalVisible} prompt={translate('twoFactorAuth.disableTwoFactorAuthConfirmation')} - confirmText={translate('twoFactorAuth.disable')} + confirmText={translate('common.disable')} cancelText={translate('common.cancel')} shouldShowCancelButton danger From 2d2702ce1e34cb82b2c8ab6c1daf5aaf83669401 Mon Sep 17 00:00:00 2001 From: Mykhailo Kravchenko Date: Tue, 18 Jun 2024 13:23:06 +0200 Subject: [PATCH 3/8] add strings --- src/languages/en.ts | 2 ++ src/languages/es.ts | 3 +++ 2 files changed, 5 insertions(+) diff --git a/src/languages/en.ts b/src/languages/en.ts index 5827af9cf0aa..0875d68789da 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -2256,6 +2256,8 @@ export default { reportFields: { delete: 'Delete field', deleteConfirmation: 'Are you sure that you want to delete this field?', + disableReportFields: 'Disable report fields', + disableReportFieldsConfirmation: 'Are you sure? Text and date fields will be deleted, and lists will be disabled.', }, tags: { tagName: 'Tag name', diff --git a/src/languages/es.ts b/src/languages/es.ts index 8ca231b0756b..1a0d59ed8516 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -2292,6 +2292,9 @@ export default { reportFields: { delete: 'Eliminar campos', deleteConfirmation: '¿Estás seguro de que quieres eliminar esta campos?', + // TODO: Verify translations + disableReportFields: 'Desactivar campos de informe', + disableReportFieldsConfirmation: '¿Está seguro? Se eliminarán los campos de texto y fecha, y se desactivarán las listas.', }, tags: { tagName: 'Nombre de etiqueta', From 59bccf0b2aa524e73e74ce373978f4d0b40f139e Mon Sep 17 00:00:00 2001 From: Mykhailo Kravchenko Date: Tue, 18 Jun 2024 13:31:38 +0200 Subject: [PATCH 4/8] Add reportFields functionality to WorkspaceMoreFeaturesPage --- .../workspace/WorkspaceMoreFeaturesPage.tsx | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/pages/workspace/WorkspaceMoreFeaturesPage.tsx b/src/pages/workspace/WorkspaceMoreFeaturesPage.tsx index 8beeec33247f..8b7b81c7cfdb 100644 --- a/src/pages/workspace/WorkspaceMoreFeaturesPage.tsx +++ b/src/pages/workspace/WorkspaceMoreFeaturesPage.tsx @@ -63,6 +63,7 @@ function WorkspaceMoreFeaturesPage({policy, route}: WorkspaceMoreFeaturesPagePro const [isOrganizeWarningModalOpen, setIsOrganizeWarningModalOpen] = useState(false); const [isIntegrateWarningModalOpen, setIsIntegrateWarningModalOpen] = useState(false); + const [isReportFieldsWarningModalOpen, setIsReportFieldsWarningModalOpen] = useState(false); const spendItems: Item[] = [ { @@ -145,6 +146,11 @@ function WorkspaceMoreFeaturesPage({policy, route}: WorkspaceMoreFeaturesPagePro setIsOrganizeWarningModalOpen(true); return; } + if (isEnabled) { + Policy.enablePolicyReportFields(policyID, true); + return; + } + setIsReportFieldsWarningModalOpen(true); }, }, ]; @@ -289,6 +295,19 @@ function WorkspaceMoreFeaturesPage({policy, route}: WorkspaceMoreFeaturesPagePro confirmText={translate('workspace.moreFeatures.connectionsWarningModal.manageSettings')} cancelText={translate('common.cancel')} /> + { + setIsReportFieldsWarningModalOpen(false); + Policy.enablePolicyReportFields(policyID, false); + }} + onCancel={() => setIsReportFieldsWarningModalOpen(false)} + prompt={translate('workspace.reportFields.disableReportFieldsConfirmation')} + confirmText={translate('common.disable')} + cancelText={translate('common.cancel')} + danger + /> ); From b02de30018264d18ed66d613ee3dad522d338b90 Mon Sep 17 00:00:00 2001 From: Mykhailo Kravchenko Date: Tue, 18 Jun 2024 13:32:09 +0200 Subject: [PATCH 5/8] use boolean shorthand syntax for useState hooks --- src/pages/workspace/WorkspaceMoreFeaturesPage.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/workspace/WorkspaceMoreFeaturesPage.tsx b/src/pages/workspace/WorkspaceMoreFeaturesPage.tsx index 8b7b81c7cfdb..91202ddcb6bb 100644 --- a/src/pages/workspace/WorkspaceMoreFeaturesPage.tsx +++ b/src/pages/workspace/WorkspaceMoreFeaturesPage.tsx @@ -61,9 +61,9 @@ function WorkspaceMoreFeaturesPage({policy, route}: WorkspaceMoreFeaturesPagePro const isSyncTaxEnabled = !!policy?.connections?.quickbooksOnline?.config?.syncTax || !!policy?.connections?.xero?.config?.importTaxRates; const policyID = policy?.id ?? ''; - const [isOrganizeWarningModalOpen, setIsOrganizeWarningModalOpen] = useState(false); - const [isIntegrateWarningModalOpen, setIsIntegrateWarningModalOpen] = useState(false); - const [isReportFieldsWarningModalOpen, setIsReportFieldsWarningModalOpen] = useState(false); + const [isOrganizeWarningModalOpen, setIsOrganizeWarningModalOpen] = useState(false); + const [isIntegrateWarningModalOpen, setIsIntegrateWarningModalOpen] = useState(false); + const [isReportFieldsWarningModalOpen, setIsReportFieldsWarningModalOpen] = useState(false); const spendItems: Item[] = [ { From 8356363af13533c5a77fac6465c72bedc9b517ab Mon Sep 17 00:00:00 2001 From: Mykhailo Kravchenko Date: Tue, 18 Jun 2024 13:59:32 +0200 Subject: [PATCH 6/8] navigate to initial settings page when enable --- src/libs/actions/Policy/Policy.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/libs/actions/Policy/Policy.ts b/src/libs/actions/Policy/Policy.ts index eb190d9b1e67..75d638a2e476 100644 --- a/src/libs/actions/Policy/Policy.ts +++ b/src/libs/actions/Policy/Policy.ts @@ -2519,6 +2519,10 @@ function enablePolicyReportFields(policyID: string, enabled: boolean) { const parameters: EnablePolicyReportFieldsParams = {policyID, enabled}; API.write(WRITE_COMMANDS.ENABLE_POLICY_REPORT_FIELDS, parameters, onyxData); + + if (enabled && getIsNarrowLayout()) { + navigateWhenEnableFeature(policyID); + } } function enablePolicyTaxes(policyID: string, enabled: boolean) { From eab52fb963c0206946954754cde863d34397aeb5 Mon Sep 17 00:00:00 2001 From: Mykhailo Kravchenko Date: Wed, 19 Jun 2024 14:12:55 +0200 Subject: [PATCH 7/8] integrate reportFieldsFeature beta --- src/CONST.ts | 1 + src/libs/Permissions.ts | 5 +++++ src/pages/workspace/WorkspaceMoreFeaturesPage.tsx | 11 +++++++---- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/CONST.ts b/src/CONST.ts index 3d67a951111e..b56d086ecd57 100755 --- a/src/CONST.ts +++ b/src/CONST.ts @@ -363,6 +363,7 @@ const CONST = { SPOTNANA_TRAVEL: 'spotnanaTravel', ACCOUNTING_ON_NEW_EXPENSIFY: 'accountingOnNewExpensify', XERO_ON_NEW_EXPENSIFY: 'xeroOnNewExpensify', + REPORT_FIELDS_FEATURE: 'reportFieldsFeature', }, BUTTON_STATES: { DEFAULT: 'default', diff --git a/src/libs/Permissions.ts b/src/libs/Permissions.ts index 7ef4c9325a14..56d366ef330d 100644 --- a/src/libs/Permissions.ts +++ b/src/libs/Permissions.ts @@ -48,6 +48,10 @@ function canUseXeroIntegration(betas: OnyxEntry): boolean { return !!betas?.includes(CONST.BETAS.XERO_ON_NEW_EXPENSIFY) || canUseAllBetas(betas); } +function canUseReportFieldsFeature(betas: OnyxEntry): boolean { + return !!betas?.includes(CONST.BETAS.REPORT_FIELDS_FEATURE) || canUseAllBetas(betas); +} + /** * Link previews are temporarily disabled. */ @@ -67,4 +71,5 @@ export default { canUseSpotnanaTravel, canUseAccountingIntegrations, canUseXeroIntegration, + canUseReportFieldsFeature, }; diff --git a/src/pages/workspace/WorkspaceMoreFeaturesPage.tsx b/src/pages/workspace/WorkspaceMoreFeaturesPage.tsx index 91202ddcb6bb..1ea2872c9513 100644 --- a/src/pages/workspace/WorkspaceMoreFeaturesPage.tsx +++ b/src/pages/workspace/WorkspaceMoreFeaturesPage.tsx @@ -56,7 +56,7 @@ function WorkspaceMoreFeaturesPage({policy, route}: WorkspaceMoreFeaturesPagePro const styles = useThemeStyles(); const {isSmallScreenWidth} = useWindowDimensions(); const {translate} = useLocalize(); - const {canUseAccountingIntegrations} = usePermissions(); + const {canUseAccountingIntegrations, canUseReportFieldsFeature} = usePermissions(); const hasAccountingConnection = !!policy?.areConnectionsEnabled && !isEmptyObject(policy?.connections); const isSyncTaxEnabled = !!policy?.connections?.quickbooksOnline?.config?.syncTax || !!policy?.connections?.xero?.config?.importTaxRates; const policyID = policy?.id ?? ''; @@ -134,7 +134,10 @@ function WorkspaceMoreFeaturesPage({policy, route}: WorkspaceMoreFeaturesPagePro Policy.enablePolicyTaxes(policy?.id ?? '-1', isEnabled); }, }, - { + ]; + + if (canUseReportFieldsFeature) { + organizeItems.push({ icon: Illustrations.Pencil, titleTranslationKey: 'workspace.moreFeatures.reportFields.title', subtitleTranslationKey: 'workspace.moreFeatures.reportFields.subtitle', @@ -152,8 +155,8 @@ function WorkspaceMoreFeaturesPage({policy, route}: WorkspaceMoreFeaturesPagePro } setIsReportFieldsWarningModalOpen(true); }, - }, - ]; + }); + } const integrateItems: Item[] = [ { From 5bbbb11e15e04193820607d32a0022f06c21a8a3 Mon Sep 17 00:00:00 2001 From: Mykhailo Kravchenko Date: Thu, 20 Jun 2024 14:48:31 +0200 Subject: [PATCH 8/8] add spanish text --- src/languages/es.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/languages/es.ts b/src/languages/es.ts index fb543b0f2a1a..ab7fe2731ba1 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -2296,9 +2296,8 @@ export default { reportFields: { delete: 'Eliminar campos', deleteConfirmation: '¿Estás seguro de que quieres eliminar esta campos?', - // TODO: Verify translations disableReportFields: 'Desactivar campos de informe', - disableReportFieldsConfirmation: '¿Está seguro? Se eliminarán los campos de texto y fecha, y se desactivarán las listas.', + disableReportFieldsConfirmation: 'Estás seguro? Se eliminarán los campos de texto y fecha y se desactivarán las listas.', }, tags: { tagName: 'Nombre de etiqueta',