From 7f03a848e540bcdf0e4cb16b3efdcf7ee8c6957c Mon Sep 17 00:00:00 2001 From: jakubstec Date: Mon, 16 Mar 2026 16:19:24 +0100 Subject: [PATCH 1/5] feat: add Restrict expense workspace creation/removal toggle --- src/languages/en.ts | 4 ++ src/languages/es.ts | 3 + src/libs/actions/Domain.ts | 2 +- .../domain/Groups/DomainGroupDetailsPage.tsx | 11 ++++ ...RestrictExpenseWorkspaceCreationToggle.tsx | 59 +++++++++++++++++++ src/types/onyx/DomainErrors.ts | 5 ++ src/types/onyx/DomainPendingActions.ts | 5 ++ 7 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 src/pages/domain/Groups/RestrictExpenseWorkspaceCreationToggle.tsx diff --git a/src/languages/en.ts b/src/languages/en.ts index 83abd5e42308..4559b416456a 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -8650,6 +8650,10 @@ const translations = { error: { settings: 'Couldn’t save this change. Please try again or contact Concierge for more support.', }, + permissions: 'Group permissions', + RestrictExpenseWorkspaceCreation: 'Restrict expense workspace creation/removal', + RestrictExpenseWorkspaceCreationDescription: 'Prevent members from being able to create an expense workspace or remove themselves from an expense workspace. This is useful for preventing people from using Expensify to submit reports for use outside your domain when combined with strict workspace enforcement.', + }, }, }; diff --git a/src/languages/es.ts b/src/languages/es.ts index 738204180bb7..d8678500a056 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -8905,6 +8905,9 @@ ${amount} para ${merchant} - ${date}`, error: { settings: 'No se pudo guardar este cambio. Inténtalo de nuevo o contacta con Concierge para obtener más ayuda.', }, + permissions: 'Permisos de grupo', + RestrictExpenseWorkspaceCreation: "Restringir la creación/eliminación de espacios de trabajo de gastos", + RestrictExpenseWorkspaceCreationDescription: "Evita que los miembros creen un espacio de trabajo de gastos o se eliminen a sí mismos de uno. Esto es útil para evitar que las personas utilicen Expensify para enviar informes destinados a usarse fuera de tu dominio cuando se combina con la aplicación estricta de espacios de trabajo." }, }, gps: { diff --git a/src/libs/actions/Domain.ts b/src/libs/actions/Domain.ts index b0db84f012ba..6cc4aa824bdf 100644 --- a/src/libs/actions/Domain.ts +++ b/src/libs/actions/Domain.ts @@ -1707,7 +1707,7 @@ function updateDomainSecurityGroup( groupID: string, currentSecurityGroup: DomainSecurityGroup, newSettingValue: Partial, - settingsName: keyof Pick, + settingsName: keyof Pick, ) { const SECURITY_GROUP_KEY = `${CONST.DOMAIN.DOMAIN_SECURITY_GROUP_PREFIX}${groupID}`; const newSecurityGroup = {...currentSecurityGroup, ...newSettingValue}; diff --git a/src/pages/domain/Groups/DomainGroupDetailsPage.tsx b/src/pages/domain/Groups/DomainGroupDetailsPage.tsx index 56e1ace664f6..f00e87f80e4b 100644 --- a/src/pages/domain/Groups/DomainGroupDetailsPage.tsx +++ b/src/pages/domain/Groups/DomainGroupDetailsPage.tsx @@ -1,12 +1,15 @@ import {domainSecurityGroupSettingErrorsSelector, domainSecurityGroupSettingPendingActionSelector, selectGroupByID} from '@selectors/Domain'; import React from 'react'; +import {View} from 'react-native'; import HeaderWithBackButton from '@components/HeaderWithBackButton'; import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription'; import OfflineWithFeedback from '@components/OfflineWithFeedback'; import ScreenWrapper from '@components/ScreenWrapper'; import ScrollView from '@components/ScrollView'; +import Text from '@components/Text'; import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; +import useThemeStyles from '@hooks/useThemeStyles'; import Navigation from '@navigation/Navigation'; import type {PlatformStackScreenProps} from '@navigation/PlatformStackNavigation/types'; import type {SettingsNavigatorParamList} from '@navigation/types'; @@ -17,10 +20,12 @@ import ROUTES from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; import DefaultGroupToggle from './DefaultGroupToggle'; import HTMLMessagesRow from './HTMLMessagesRow'; +import RestrictExpenseWorkspaceCreationToggle from './RestrictExpenseWorkspaceCreationToggle'; type DomainGroupDetailsPageProps = PlatformStackScreenProps; function DomainGroupDetailsPage({route}: DomainGroupDetailsPageProps) { + const styles = useThemeStyles(); const {domainAccountID, groupID} = route.params; const {translate} = useLocalize(); @@ -61,6 +66,12 @@ function DomainGroupDetailsPage({route}: DomainGroupDetailsPageProps) { groupID={groupID} groupName={group?.name} /> + + {translate('domain.groups.permissions')} + diff --git a/src/pages/domain/Groups/RestrictExpenseWorkspaceCreationToggle.tsx b/src/pages/domain/Groups/RestrictExpenseWorkspaceCreationToggle.tsx new file mode 100644 index 000000000000..b8d250890dda --- /dev/null +++ b/src/pages/domain/Groups/RestrictExpenseWorkspaceCreationToggle.tsx @@ -0,0 +1,59 @@ +import {domainSecurityGroupSettingErrorsSelector, domainSecurityGroupSettingPendingActionSelector, selectGroupByID} from '@selectors/Domain'; +import React from 'react'; +import {View} from 'react-native'; +import useLocalize from '@hooks/useLocalize'; +import useOnyx from '@hooks/useOnyx'; +import useThemeStyles from '@hooks/useThemeStyles'; +import ToggleSettingOptionRow from '@pages/workspace/workflows/ToggleSettingsOptionRow'; +import {clearDomainSecurityGroupSettingError, updateDomainSecurityGroup} from '@userActions/Domain'; +import ONYXKEYS from '@src/ONYXKEYS'; +import HTMLMessagesRow from './HTMLMessagesRow'; + +type RestrictExpenseWorkspaceCreationToggleProps = { + domainAccountID: number; + groupID: string; +}; + +function RestrictExpenseWorkspaceCreationToggle({domainAccountID, groupID}: RestrictExpenseWorkspaceCreationToggleProps) { + const styles = useThemeStyles(); + const {translate} = useLocalize(); + + const [group] = useOnyx(`${ONYXKEYS.COLLECTION.DOMAIN}${domainAccountID}`, { + selector: selectGroupByID(groupID), + }); + + const [enableRestrictedPolicyCreationPendingAction] = useOnyx(`${ONYXKEYS.COLLECTION.DOMAIN_PENDING_ACTIONS}${domainAccountID}`, { + selector: domainSecurityGroupSettingPendingActionSelector('enableRestrictedPolicyCreation', groupID), + }); + const [enableRestrictedPolicyCreationErrors] = useOnyx(`${ONYXKEYS.COLLECTION.DOMAIN_ERRORS}${domainAccountID}`, { + selector: domainSecurityGroupSettingErrorsSelector('enableRestrictedPolicyCreationErrors', groupID), + }); + + const isEnabled = !!group?.enableRestrictedPolicyCreation; + + return ( + + { + if (!group?.name) { + return; + } + updateDomainSecurityGroup(domainAccountID, groupID, group, {enableRestrictedPolicyCreation: enabled}, 'enableRestrictedPolicyCreation'); + }} + wrapperStyle={[styles.ph5]} + pendingAction={enableRestrictedPolicyCreationPendingAction} + /> + clearDomainSecurityGroupSettingError(domainAccountID, groupID, 'enableRestrictedPolicyCreationErrors')} + /> + + ); +} + +export default RestrictExpenseWorkspaceCreationToggle; diff --git a/src/types/onyx/DomainErrors.ts b/src/types/onyx/DomainErrors.ts index eae764694ac9..9e8500a33d96 100644 --- a/src/types/onyx/DomainErrors.ts +++ b/src/types/onyx/DomainErrors.ts @@ -45,6 +45,11 @@ type DomainSecurityGroupErrors = { * Errors related to the default security group ID setting */ defaultSecurityGroupIDErrors?: OnyxCommon.Errors; + + /** + * Errors related to the restricted expense workspace creation + */ + enableRestrictedPolicyCreationErrors?: OnyxCommon.Errors; }; /** diff --git a/src/types/onyx/DomainPendingActions.ts b/src/types/onyx/DomainPendingActions.ts index 206eecbe380a..869ca076a6da 100644 --- a/src/types/onyx/DomainPendingActions.ts +++ b/src/types/onyx/DomainPendingActions.ts @@ -44,6 +44,11 @@ type DomainSecurityGroupPendingActions = { * Pending action for the default security group ID */ defaultSecurityGroupID?: OnyxCommon.PendingAction; + + /** + * Pending action for the restricted expense workspace creation + */ + enableRestrictedPolicyCreation?: OnyxCommon.PendingAction; }; /** From 68548ee9d7597f08cec59f3ef87ba3d05e0db9b6 Mon Sep 17 00:00:00 2001 From: jakubstec Date: Mon, 16 Mar 2026 16:41:52 +0100 Subject: [PATCH 2/5] fix: change es.ts translation --- src/languages/es.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/es.ts b/src/languages/es.ts index d8678500a056..0025f3bd70ab 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -8907,7 +8907,7 @@ ${amount} para ${merchant} - ${date}`, }, permissions: 'Permisos de grupo', RestrictExpenseWorkspaceCreation: "Restringir la creación/eliminación de espacios de trabajo de gastos", - RestrictExpenseWorkspaceCreationDescription: "Evita que los miembros creen un espacio de trabajo de gastos o se eliminen a sí mismos de uno. Esto es útil para evitar que las personas utilicen Expensify para enviar informes destinados a usarse fuera de tu dominio cuando se combina con la aplicación estricta de espacios de trabajo." + RestrictExpenseWorkspaceCreationDescription: "Evita que los miembros creen un espacio de trabajo de gastos o se eliminen a sí mismos de uno. Esto, cuando se combina con la aplicación estricta de espacios de trabajo, es útil para evitar que se utilice Expensify para enviar informes destinados a usarse fuera de tu dominio." }, }, gps: { From 55d54ff6ff25e0961c19d09be1f71e1c508c88ac Mon Sep 17 00:00:00 2001 From: jakubstec Date: Tue, 28 Apr 2026 13:43:05 +0200 Subject: [PATCH 3/5] fix: change guard to block when group itself is missing, add nullish fallback on failuredata rollback updatedomainsecuritygroup --- src/libs/actions/Domain.ts | 2 +- .../domain/Groups/RestrictExpenseWorkspaceCreationToggle.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libs/actions/Domain.ts b/src/libs/actions/Domain.ts index c215e7edd3c5..b0a14fa88c58 100644 --- a/src/libs/actions/Domain.ts +++ b/src/libs/actions/Domain.ts @@ -1878,7 +1878,7 @@ function updateDomainSecurityGroup( key: `${ONYXKEYS.COLLECTION.DOMAIN}${domainAccountID}`, value: { [SECURITY_GROUP_KEY]: { - [settingsName]: currentSecurityGroup[settingsName], + [settingsName]: currentSecurityGroup[settingsName] ?? null, }, } as PrefixedRecord>, }, diff --git a/src/pages/domain/Groups/RestrictExpenseWorkspaceCreationToggle.tsx b/src/pages/domain/Groups/RestrictExpenseWorkspaceCreationToggle.tsx index b6d5665ba112..194652f254d6 100644 --- a/src/pages/domain/Groups/RestrictExpenseWorkspaceCreationToggle.tsx +++ b/src/pages/domain/Groups/RestrictExpenseWorkspaceCreationToggle.tsx @@ -39,7 +39,7 @@ function RestrictExpenseWorkspaceCreationToggle({domainAccountID, groupID}: Rest shouldPlaceSubtitleBelowSwitch isActive={isEnabled} onToggle={(enabled) => { - if (!group?.name) { + if (!group) { return; } updateDomainSecurityGroup(domainAccountID, groupID, group, {enableRestrictedPolicyCreation: enabled}, 'enableRestrictedPolicyCreation'); From 0a77f46cd3dae7c1cef961d68502240c4306f801 Mon Sep 17 00:00:00 2001 From: war-in Date: Mon, 4 May 2026 17:09:26 +0200 Subject: [PATCH 4/5] fix: prettier --- src/pages/domain/Groups/DomainGroupDetailsPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/domain/Groups/DomainGroupDetailsPage.tsx b/src/pages/domain/Groups/DomainGroupDetailsPage.tsx index 14b0574abddf..f59b274ab00d 100644 --- a/src/pages/domain/Groups/DomainGroupDetailsPage.tsx +++ b/src/pages/domain/Groups/DomainGroupDetailsPage.tsx @@ -19,8 +19,8 @@ import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; import DefaultGroupToggle from './DefaultGroupToggle'; -import StrictlyEnforceWorkspaceRulesToggle from './StrictlyEnforceWorkspaceRulesToggle'; import RestrictExpenseWorkspaceCreationToggle from './RestrictExpenseWorkspaceCreationToggle'; +import StrictlyEnforceWorkspaceRulesToggle from './StrictlyEnforceWorkspaceRulesToggle'; type DomainGroupDetailsPageProps = PlatformStackScreenProps; From adac9a4e2ff8e74fbc3b846e8abb34687958df2d Mon Sep 17 00:00:00 2001 From: jakubstec Date: Mon, 4 May 2026 17:21:06 +0200 Subject: [PATCH 5/5] apply review changes --- src/languages/de.ts | 8 ++++---- src/languages/en.ts | 8 ++++---- src/languages/es.ts | 8 ++++---- src/languages/fr.ts | 8 ++++---- src/languages/it.ts | 8 ++++---- src/languages/ja.ts | 8 ++++---- src/languages/nl.ts | 8 ++++---- src/languages/pl.ts | 8 ++++---- src/languages/pt-BR.ts | 8 ++++---- src/languages/zh-hans.ts | 8 ++++---- .../Groups/RestrictExpenseWorkspaceCreationToggle.tsx | 9 ++++++--- .../Groups/StrictlyEnforceWorkspaceRulesToggle.tsx | 9 ++++++--- 12 files changed, 52 insertions(+), 46 deletions(-) diff --git a/src/languages/de.ts b/src/languages/de.ts index c93b344e76aa..e7e92effb3a9 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -9188,10 +9188,10 @@ Hier ist ein *Testbeleg*, um dir zu zeigen, wie es funktioniert:`, makeDefault: 'Als Standard festlegen', neverMind: 'Vergiss es', permissions: 'Gruppenberechtigungen', - StrictlyEnforceWorkspaceRules: 'Workspace-Regeln strikt durchsetzen', - StrictlyEnforceWorkspaceRulesDescription: 'Alle Workspace-Regeln müssen erfüllt sein, bevor ein Bericht eingereicht wird. Manuelle Ausnahmen sind nicht zulässig.', - RestrictExpenseWorkspaceCreation: 'Erstellen/Entfernen von Ausgaben-Workspaces einschränken', - RestrictExpenseWorkspaceCreationDescription: + strictlyEnforceWorkspaceRules: 'Workspace-Regeln strikt durchsetzen', + strictlyEnforceWorkspaceRulesDescription: 'Alle Workspace-Regeln müssen erfüllt sein, bevor ein Bericht eingereicht wird. Manuelle Ausnahmen sind nicht zulässig.', + restrictExpenseWorkspaceCreation: 'Erstellen/Entfernen von Ausgaben-Workspaces einschränken', + restrictExpenseWorkspaceCreationDescription: 'Verhindert, dass Mitglieder einen Ausgaben-Workspace erstellen oder sich selbst aus einem Ausgaben-Workspace entfernen können. Dies ist nützlich, um zu verhindern, dass Personen Expensify verwenden, um Berichte für die Nutzung außerhalb deiner Domain einzureichen, wenn es mit einer strikten Workspace-Durchsetzung kombiniert wird.', }, }, diff --git a/src/languages/en.ts b/src/languages/en.ts index 00c37381b57f..b68d37355bcc 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -9182,10 +9182,10 @@ const translations = { makeDefault: 'Make default', neverMind: 'Never mind', permissions: 'Group permissions', - StrictlyEnforceWorkspaceRules: 'Strictly enforce workspace rules', - StrictlyEnforceWorkspaceRulesDescription: 'All workspace rules must be met before submitting a report. No manual exceptions allowed.', - RestrictExpenseWorkspaceCreation: 'Restrict expense workspace creation/removal', - RestrictExpenseWorkspaceCreationDescription: + strictlyEnforceWorkspaceRules: 'Strictly enforce workspace rules', + strictlyEnforceWorkspaceRulesDescription: 'All workspace rules must be met before submitting a report. No manual exceptions allowed.', + restrictExpenseWorkspaceCreation: 'Restrict expense workspace creation/removal', + restrictExpenseWorkspaceCreationDescription: 'Prevent members from being able to create an expense workspace or remove themselves from an expense workspace. This is useful for preventing people from using Expensify to submit reports for use outside your domain when combined with strict workspace enforcement.', }, }, diff --git a/src/languages/es.ts b/src/languages/es.ts index cbea97482404..41573774b0ed 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -9413,10 +9413,10 @@ ${amount} para ${merchant} - ${date}`, makeDefault: 'Establecer como predeterminado', neverMind: 'No importa', permissions: 'Permisos de grupo', - StrictlyEnforceWorkspaceRules: 'Hacer cumplir estrictamente las reglas del espacio de trabajo', - StrictlyEnforceWorkspaceRulesDescription: 'Todas las reglas del espacio de trabajo deben cumplirse antes de enviar un informe. No se permiten excepciones manuales.', - RestrictExpenseWorkspaceCreation: 'Restringir la creación/eliminación de espacios de trabajo de gastos', - RestrictExpenseWorkspaceCreationDescription: + strictlyEnforceWorkspaceRules: 'Hacer cumplir estrictamente las reglas del espacio de trabajo', + strictlyEnforceWorkspaceRulesDescription: 'Todas las reglas del espacio de trabajo deben cumplirse antes de enviar un informe. No se permiten excepciones manuales.', + restrictExpenseWorkspaceCreation: 'Restringir la creación/eliminación de espacios de trabajo de gastos', + restrictExpenseWorkspaceCreationDescription: 'Evita que los miembros creen un espacio de trabajo de gastos o se eliminen a sí mismos de uno. Esto, cuando se combina con la aplicación estricta de espacios de trabajo, es útil para evitar que se utilice Expensify para enviar informes destinados a usarse fuera de tu dominio.', }, }, diff --git a/src/languages/fr.ts b/src/languages/fr.ts index ff816e6d940b..cedb15df6c4d 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -9211,11 +9211,11 @@ Voici un *reçu test* pour vous montrer comment ça fonctionne :`, makeDefault: 'Définir par défaut', neverMind: 'Peu importe', permissions: 'Autorisations du groupe', - StrictlyEnforceWorkspaceRules: 'Appliquer strictement les règles de l’espace de travail', - StrictlyEnforceWorkspaceRulesDescription: + strictlyEnforceWorkspaceRules: 'Appliquer strictement les règles de l’espace de travail', + strictlyEnforceWorkspaceRulesDescription: 'Toutes les règles de l’espace de travail doivent être respectées avant de soumettre un rapport. Aucune exception manuelle n’est autorisée.', - RestrictExpenseWorkspaceCreation: 'Restreindre la création/suppression d’espaces de travail de dépenses', - RestrictExpenseWorkspaceCreationDescription: + restrictExpenseWorkspaceCreation: 'Restreindre la création/suppression d’espaces de travail de dépenses', + restrictExpenseWorkspaceCreationDescription: 'Empêchez les membres de pouvoir créer un espace de travail de dépenses ou de se retirer d’un espace de travail de dépenses. Ceci est utile pour empêcher les gens d’utiliser Expensify afin de soumettre des rapports destinés à un usage hors de votre domaine, lorsqu’il est combiné à une application stricte des espaces de travail.', }, }, diff --git a/src/languages/it.ts b/src/languages/it.ts index dd6f51778db8..e1dee624642d 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -9178,10 +9178,10 @@ Ecco una *ricevuta di prova* per mostrarti come funziona:`, makeDefault: 'Imposta come predefinito', neverMind: 'Lascia perdere', permissions: 'Autorizzazioni del gruppo', - StrictlyEnforceWorkspaceRules: 'Applica rigorosamente le regole dello spazio di lavoro', - StrictlyEnforceWorkspaceRulesDescription: 'Tutte le regole dello spazio di lavoro devono essere soddisfatte prima di inviare un rapporto. Non sono consentite eccezioni manuali.', - RestrictExpenseWorkspaceCreation: 'Limita la creazione/rimozione dell’area di lavoro spese', - RestrictExpenseWorkspaceCreationDescription: + strictlyEnforceWorkspaceRules: 'Applica rigorosamente le regole dello spazio di lavoro', + strictlyEnforceWorkspaceRulesDescription: 'Tutte le regole dello spazio di lavoro devono essere soddisfatte prima di inviare un rapporto. Non sono consentite eccezioni manuali.', + restrictExpenseWorkspaceCreation: 'Limita la creazione/rimozione dell’area di lavoro spese', + restrictExpenseWorkspaceCreationDescription: 'Impedisci ai membri di poter creare un’area di lavoro spese o di rimuoversi da un’area di lavoro spese. Questo è utile per impedire alle persone di utilizzare Expensify per inviare report destinati a un uso al di fuori del tuo dominio, se combinato con un’applicazione rigorosa dell’area di lavoro.', }, }, diff --git a/src/languages/ja.ts b/src/languages/ja.ts index bc09d6ab6c9a..e4c0fa2aff03 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -9064,10 +9064,10 @@ ${reportName} makeDefault: 'デフォルトに設定', neverMind: 'やめておく', permissions: 'グループの権限', - StrictlyEnforceWorkspaceRules: 'ワークスペースのルールを厳密に適用する', - StrictlyEnforceWorkspaceRulesDescription: 'レポートを送信する前にすべてのワークスペースのルールを満たす必要があります。手動による例外は許可されていません。', - RestrictExpenseWorkspaceCreation: '経費ワークスペースの作成/削除を制限する', - RestrictExpenseWorkspaceCreationDescription: + strictlyEnforceWorkspaceRules: 'ワークスペースのルールを厳密に適用する', + strictlyEnforceWorkspaceRulesDescription: 'レポートを送信する前にすべてのワークスペースのルールを満たす必要があります。手動による例外は許可されていません。', + restrictExpenseWorkspaceCreation: '経費ワークスペースの作成/削除を制限する', + restrictExpenseWorkspaceCreationDescription: 'メンバーが経費ワークスペースを作成したり、経費ワークスペースから自分自身を削除したりできないようにします。これは、厳格なワークスペース適用と組み合わせることで、ドメイン外での使用を目的としたレポートの提出に Expensify が利用されるのを防ぐのに役立ちます。', }, }, diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 33c4428ba080..ce208b2e36f1 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -9150,11 +9150,11 @@ Hier is een *proefbon* om je te laten zien hoe het werkt:`, makeDefault: 'Standaard maken', neverMind: 'Laat maar', permissions: 'Groepsmachtigingen', - StrictlyEnforceWorkspaceRules: 'Werkruimteregels strikt afdwingen', - StrictlyEnforceWorkspaceRulesDescription: + strictlyEnforceWorkspaceRules: 'Werkruimteregels strikt afdwingen', + strictlyEnforceWorkspaceRulesDescription: 'Aan alle werkruimteregels moet worden voldaan voordat een rapport kan worden ingediend. Handmatige uitzonderingen zijn niet toegestaan.', - RestrictExpenseWorkspaceCreation: 'Aanmaken/verwijderen van onkostenwerkruimte beperken', - RestrictExpenseWorkspaceCreationDescription: + restrictExpenseWorkspaceCreation: 'Aanmaken/verwijderen van onkostenwerkruimte beperken', + restrictExpenseWorkspaceCreationDescription: 'Voorkom dat leden een onkostenwerkruimte kunnen aanmaken of zichzelf uit een onkostenwerkruimte kunnen verwijderen. Dit is nuttig om te voorkomen dat mensen Expensify gebruiken om rapporten in te dienen voor gebruik buiten jouw domein, wanneer dit wordt gecombineerd met strikte werkruimtehandhaving.', }, }, diff --git a/src/languages/pl.ts b/src/languages/pl.ts index e795c7404a05..84b52f6d9283 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -9132,10 +9132,10 @@ Oto *paragon testowy*, żeby pokazać Ci, jak to działa:`, makeDefault: 'Ustaw jako domyślną', neverMind: 'Nieważne', permissions: 'Uprawnienia grupy', - StrictlyEnforceWorkspaceRules: 'Ściśle egzekwuj reguły przestrzeni roboczej', - StrictlyEnforceWorkspaceRulesDescription: 'Przed przesłaniem raportu muszą zostać spełnione wszystkie reguły przestrzeni roboczej. Ręczne wyjątki są niedozwolone.', - RestrictExpenseWorkspaceCreation: 'Ogranicz tworzenie/usuwanie przestrzeni roboczej wydatków', - RestrictExpenseWorkspaceCreationDescription: + strictlyEnforceWorkspaceRules: 'Ściśle egzekwuj reguły przestrzeni roboczej', + strictlyEnforceWorkspaceRulesDescription: 'Przed przesłaniem raportu muszą zostać spełnione wszystkie reguły przestrzeni roboczej. Ręczne wyjątki są niedozwolone.', + restrictExpenseWorkspaceCreation: 'Ogranicz tworzenie/usuwanie przestrzeni roboczej wydatków', + restrictExpenseWorkspaceCreationDescription: 'Uniemożliw członkom tworzenie przestrzeni roboczej wydatków lub usuwanie siebie z przestrzeni roboczej wydatków. Jest to przydatne, aby zapobiec używaniu Expensify do przesyłania raportów przeznaczonych do użytku poza Twoją domeną, w połączeniu ze ścisłym egzekwowaniem przestrzeni roboczej.', }, }, diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 54ec98a053e6..779a8e898151 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -9140,10 +9140,10 @@ Aqui está um *comprovante de teste* para mostrar como funciona:`, makeDefault: 'Tornar padrão', neverMind: 'Deixa pra lá', permissions: 'Permissões do grupo', - StrictlyEnforceWorkspaceRules: 'Aplicar rigorosamente as regras do espaço de trabalho', - StrictlyEnforceWorkspaceRulesDescription: 'Todas as regras do espaço de trabalho devem ser atendidas antes de enviar um relatório. Não são permitidas exceções manuais.', - RestrictExpenseWorkspaceCreation: 'Restringir a criação/remoção de espaços de trabalho de despesas', - RestrictExpenseWorkspaceCreationDescription: + strictlyEnforceWorkspaceRules: 'Aplicar rigorosamente as regras do espaço de trabalho', + strictlyEnforceWorkspaceRulesDescription: 'Todas as regras do espaço de trabalho devem ser atendidas antes de enviar um relatório. Não são permitidas exceções manuais.', + restrictExpenseWorkspaceCreation: 'Restringir a criação/remoção de espaços de trabalho de despesas', + restrictExpenseWorkspaceCreationDescription: 'Impede que os membros possam criar um espaço de trabalho de despesas ou se removerem de um espaço de trabalho de despesas. Isso é útil para impedir que as pessoas usem o Expensify para enviar relatórios destinados ao uso fora do seu domínio, quando combinado com a aplicação rigorosa de espaços de trabalho.', }, }, diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index 18717119d41c..5639423764c8 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -8905,10 +8905,10 @@ ${reportName} makeDefault: '设为默认', neverMind: '算了', permissions: '群组权限', - StrictlyEnforceWorkspaceRules: '严格执行工作空间规则', - StrictlyEnforceWorkspaceRulesDescription: '提交报告前必须满足所有工作空间规则。不允许手动例外。', - RestrictExpenseWorkspaceCreation: '限制创建/删除费用工作区', - RestrictExpenseWorkspaceCreationDescription: + strictlyEnforceWorkspaceRules: '严格执行工作空间规则', + strictlyEnforceWorkspaceRulesDescription: '提交报告前必须满足所有工作空间规则。不允许手动例外。', + restrictExpenseWorkspaceCreation: '限制创建/删除费用工作区', + restrictExpenseWorkspaceCreationDescription: '阻止成员创建费用工作区或将自己从费用工作区中移除。当与严格的工作区执行相结合时,这有助于防止他人使用 Expensify 提交用于您域外的报表。', }, }, diff --git a/src/pages/domain/Groups/RestrictExpenseWorkspaceCreationToggle.tsx b/src/pages/domain/Groups/RestrictExpenseWorkspaceCreationToggle.tsx index 194652f254d6..ee5372d1a7ce 100644 --- a/src/pages/domain/Groups/RestrictExpenseWorkspaceCreationToggle.tsx +++ b/src/pages/domain/Groups/RestrictExpenseWorkspaceCreationToggle.tsx @@ -9,7 +9,10 @@ import {clearDomainSecurityGroupSettingError, updateDomainSecurityGroup} from '@ import ONYXKEYS from '@src/ONYXKEYS'; type RestrictExpenseWorkspaceCreationToggleProps = { + /** The account ID of the domain */ domainAccountID: number; + + /** The ID of the security group */ groupID: string; }; @@ -33,9 +36,9 @@ function RestrictExpenseWorkspaceCreationToggle({domainAccountID, groupID}: Rest return ( { diff --git a/src/pages/domain/Groups/StrictlyEnforceWorkspaceRulesToggle.tsx b/src/pages/domain/Groups/StrictlyEnforceWorkspaceRulesToggle.tsx index 02eeee68e264..07cb1aacf164 100644 --- a/src/pages/domain/Groups/StrictlyEnforceWorkspaceRulesToggle.tsx +++ b/src/pages/domain/Groups/StrictlyEnforceWorkspaceRulesToggle.tsx @@ -9,7 +9,10 @@ import {clearDomainSecurityGroupSettingError, updateDomainSecurityGroup} from '@ import ONYXKEYS from '@src/ONYXKEYS'; type StrictlyEnforceWorkspaceRulesToggleProps = { + /** The account ID of the domain */ domainAccountID: number; + + /** The ID of the security group */ groupID: string; }; @@ -33,9 +36,9 @@ function StrictlyEnforceWorkspaceRulesToggle({domainAccountID, groupID}: Strictl return ( {