Skip to content

Commit ae38f1b

Browse files
authored
Merge pull request #4781 from parasharrajat/workspace-invite
Block system user from Inviting into Workspace
2 parents c1bc5bc + 32f41f9 commit ae38f1b

File tree

4 files changed

+42
-6
lines changed

4 files changed

+42
-6
lines changed

src/languages/en.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -601,12 +601,14 @@ export default {
601601
},
602602
invite: {
603603
invitePeople: 'Invite People',
604-
invitePeoplePrompt: 'Invite a colleague to your workspace.',
604+
invitePeoplePrompt: 'Invite colleagues to your workspace.',
605605
personalMessagePrompt: 'Add a Personal Message (Optional)',
606-
enterEmailOrPhone: 'Email or Phone',
606+
enterEmailOrPhone: 'Emails or Phone Numbers',
607+
EmailOrPhonePlaceholder: 'Enter comma-separated list of emails or phone numbers',
607608
pleaseEnterValidLogin: 'Please ensure the email or phone number is valid (e.g. +15005550006).',
608609
pleaseEnterUniqueLogin: 'That user is already a member of this workspace.',
609610
genericFailureMessage: 'An error occurred inviting the user to the workspace, please try again.',
611+
systemUserError: ({email}) => `Sorry, you cannot invite ${email} to a workspace.`,
610612
welcomeNote: ({workspaceName}) => `You have been invited to the ${workspaceName} Workspace! Download the Expensify mobile App to start tracking your expenses.`,
611613
},
612614
editor: {

src/languages/es.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -603,12 +603,14 @@ export default {
603603
},
604604
invite: {
605605
invitePeople: 'Invitar a la gente',
606-
invitePeoplePrompt: 'Invita a un colega a tu espacio de trabajo.',
606+
invitePeoplePrompt: 'Invita a tus compañeros a tu espacio de trabajo.',
607607
personalMessagePrompt: 'Agregar un mensaje personal (Opcional)',
608-
enterEmailOrPhone: 'Email o teléfono',
608+
enterEmailOrPhone: 'Correos electrónicos o números de teléfono',
609+
EmailOrPhonePlaceholder: 'Introduce una lista de correos electrónicos o números de teléfono separado por comas',
609610
pleaseEnterValidLogin: 'Asegúrese de que el correo electrónico o el número de teléfono sean válidos (e.g. +15005550006).',
610611
pleaseEnterUniqueLogin: 'Ese usuario ya es miembro de este espacio de trabajo.',
611612
genericFailureMessage: 'Se produjo un error al invitar al usuario al espacio de trabajo. Vuelva a intentarlo..',
613+
systemUserError: ({email}) => `Lo sentimos, no puedes invitar a ${email} a un espacio de trabajo.`,
612614
welcomeNote: ({workspaceName}) => `¡Has sido invitado a la ${workspaceName} Espacio de trabajo! Descargue la aplicación móvil Expensify para comenzar a rastrear sus gastos.`,
613615
},
614616
editor: {

src/libs/userUtils.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import CONST from '../CONST';
2+
3+
/**
4+
* Whether a login is system email
5+
*
6+
* @param {String} login - user email
7+
* @return {Boolean}
8+
*/
9+
function isSystemUser(login) {
10+
return [
11+
CONST.EMAIL.CONCIERGE,
12+
CONST.EMAIL.CHRONOS,
13+
CONST.EMAIL.RECEIPTS,
14+
].includes(login);
15+
}
16+
17+
export {
18+
// eslint-disable-next-line import/prefer-default-export
19+
isSystemUser,
20+
};

src/pages/workspace/WorkspaceInvitePage.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import Growl from '../../libs/Growl';
2020
import ExpensiTextInput from '../../components/ExpensiTextInput';
2121
import FixedFooter from '../../components/FixedFooter';
2222
import KeyboardAvoidingView from '../../components/KeyboardAvoidingView';
23+
import {isSystemUser} from '../../libs/userUtils';
24+
import {addSMSDomainIfPhoneNumber} from '../../libs/OptionsListUtils';
2325

2426
const propTypes = {
2527
...withLocalizePropTypes,
@@ -88,9 +90,16 @@ class WorkspaceInvitePage extends React.Component {
8890
Growl.error(this.props.translate('workspace.invite.pleaseEnterValidLogin'), 5000);
8991
return;
9092
}
93+
94+
const foundSystemLogin = _.find(logins, login => isSystemUser(login));
95+
if (foundSystemLogin) {
96+
Growl.error(this.props.translate('workspace.invite.systemUserError', {email: foundSystemLogin}), 5000);
97+
return;
98+
}
99+
91100
const policyEmployeeList = lodashGet(this.props, 'policy.employeeList', []);
92-
const AreLoginsDuplicate = _.every(logins, login => _.contains(policyEmployeeList, login));
93-
if (AreLoginsDuplicate) {
101+
const areLoginsDuplicate = _.some(logins, login => _.contains(policyEmployeeList, addSMSDomainIfPhoneNumber(login)));
102+
if (areLoginsDuplicate) {
94103
Growl.error(this.props.translate('workspace.invite.pleaseEnterUniqueLogin'), 5000);
95104
return;
96105
}
@@ -116,9 +125,12 @@ class WorkspaceInvitePage extends React.Component {
116125
<ExpensiTextInput
117126
ref={el => this.emailOrPhoneInputRef = el}
118127
label={this.props.translate('workspace.invite.enterEmailOrPhone')}
128+
placeholder={this.props.translate('workspace.invite.EmailOrPhonePlaceholder')}
119129
autoCompleteType="email"
120130
autoCorrect={false}
121131
autoCapitalize="none"
132+
multiline
133+
numberOfLines={2}
122134
value={this.state.userLogins}
123135
onChangeText={text => this.setState({userLogins: text})}
124136
/>

0 commit comments

Comments
 (0)