Skip to content

Commit

Permalink
Merge branch 'main' into jasper-editWorkspacePage
Browse files Browse the repository at this point in the history
  • Loading branch information
jasperhuangg authored Jul 30, 2021
2 parents af8b07e + f856107 commit 2d70658
Show file tree
Hide file tree
Showing 17 changed files with 470 additions and 363 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* <p>This source code is licensed under the MIT license found in the LICENSE file in the root
* directory of this source tree.
*/
package com.expensifyreactnative.chat;
package com.reactnativechat;

import android.content.Context;
import com.facebook.flipper.android.AndroidFlipperClient;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@

import org.unimodules.adapters.react.ModuleRegistryAdapter;
import org.unimodules.adapters.react.ReactModuleRegistryProvider;
import org.unimodules.core.interfaces.SingletonModule;
import com.facebook.react.bridge.JSIModulePackage;
import com.swmansion.reanimated.ReanimatedJSIModulePackage;

Expand Down Expand Up @@ -107,7 +106,7 @@ private static void initializeFlipper(
We use reflection here to pick up the class that initializes Flipper,
since Flipper library is not available in release mode
*/
Class<?> aClass = Class.forName("com.expensify.chat.ReactNativeFlipper");
Class<?> aClass = Class.forName("com.reactnativechat.ReactNativeFlipper");
aClass
.getMethod("initializeFlipper", Context.class, ReactInstanceManager.class)
.invoke(null, context, reactInstanceManager);
Expand Down
2 changes: 1 addition & 1 deletion android/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ AsyncStorage_db_size_in_MB=10
AsyncStorage_useNextStorage=true

# Version of flipper SDK to use with React Native
FLIPPER_VERSION=0.54.0
FLIPPER_VERSION=0.100.0

# Key Store Information
MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore
Expand Down
501 changes: 248 additions & 253 deletions package-lock.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@
"react-native-image-picker": "^4.0.3",
"react-native-keyboard-spacer": "^0.4.1",
"react-native-modal": "^11.10.0",
"react-native-onyx": "git+https://github.com/Expensify/react-native-onyx.git#84a27cdd03a39baa167058efc3379d9a477849dd",
"react-native-onyx": "git+https://github.com/Expensify/react-native-onyx.git#d73900b7cb7bf82bed77cb6b6baabf8fe2eb3a0e",
"react-native-pdf": "^6.2.2",
"react-native-permissions": "^3.0.1",
"react-native-picker-select": "8.0.4",
Expand Down
5 changes: 2 additions & 3 deletions src/languages/en.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ export default {
dob: 'Date of Birth',
ssnLast4: 'Last 4 Digits of SSN',
addressNoPO: 'Address (no P.O. boxes)',
companyAddressNoPO: 'Company Address (no P.O. boxes)',
companyAddressNoPO: 'Company Address (PO Boxes and mail drop addresses are NOT allowed)',
city: 'City',
state: 'State',
zip: 'Zip Code',
Expand All @@ -58,8 +58,6 @@ export default {
send: 'Send',
notifications: 'Notifications',
noResultsFound: 'No results found',
timePrefix: 'It\'s',
conjunctionFor: 'for',
},
attachmentPicker: {
cameraPermissionRequired: 'Camera Permission Required',
Expand Down Expand Up @@ -112,6 +110,7 @@ export default {
youAppearToBeOffline: 'You appear to be offline.',
fileUploadFailed: 'Upload Failed. File is not supported.',
roomIsArchived: 'This chat room has been deleted',
localTime: ({user, time}) => `It's ${time} for ${user}`,
},
contextMenuItem: {
copyToClipboard: 'Copy to Clipboard',
Expand Down
127 changes: 90 additions & 37 deletions src/languages/es.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ export default {
cancel: 'Cancelar',
yes: 'Si',
no: 'No',
ok: 'OK',
attachment: 'Archivo Adjunto',
to: 'A',
optional: 'Opcional',
Expand All @@ -21,10 +22,14 @@ export default {
not: 'No',
signIn: 'Conectarse',
continue: 'Continuar',
firstName: 'Primer nombre',
lastName: 'Apellido',
phoneNumber: 'Número de teléfono',
email: 'Email',
and: 'y',
details: 'Detalles',
privacy: 'Intimidad',
privacyPolicy: 'Política de privacidad',
delete: 'Eliminar',
deleted: 'eliminado',
contacts: 'Contactos',
Expand All @@ -39,7 +44,7 @@ export default {
dob: 'Fecha de Nacimiento',
ssnLast4: 'Últimos 4 dígitos de su SSN',
addressNoPO: 'Dirección (sin Apartado Postal)',
companyAddressNoPO: 'Dirección de la Empresa (sin Apartado Postal)',
companyAddressNoPO: 'Dirección física de la empresa (no se aceptan apartados ni direcciones postales)',
city: 'Ciudad',
state: 'Estado',
zip: 'Código Postal',
Expand All @@ -53,8 +58,6 @@ export default {
send: 'Enviar',
notifications: 'Notificaciones',
noResultsFound: 'No se han encontrado resultados',
timePrefix: 'Son las',
conjunctionFor: 'para',
},
attachmentPicker: {
cameraPermissionRequired: 'Se necesita permiso para usar la cámara',
Expand Down Expand Up @@ -105,11 +108,15 @@ export default {
writeSomething: 'Escribe algo...',
blockedFromConcierge: 'Comunicación no permitida',
youAppearToBeOffline: 'Parece que estás desconectado.',
fileUploadFailed: 'Subida fallida. El archivo no es compatible.',
roomIsArchived: 'Esta sala de chat ha sido eliminada',
localTime: ({user, time}) => `Son las ${time} para ${user}`,
},
reportActionContextMenu: {
contextMenuItem: {
copyToClipboard: 'Copiar al Portapapeles',
copied: '¡Copiado!',
},
reportActionContextMenu: {
copyLink: 'Copiar Enlace',
markAsUnread: 'Marcar como no leído',
editComment: 'Editar Commentario',
Expand Down Expand Up @@ -138,6 +145,7 @@ export default {
confirm: 'Confirmar',
splitBill: 'Dividir Factura',
requestMoney: 'Pedir Dinero',
sendMoney: 'Enviar Dinero',
pay: 'Pagar',
viewDetails: 'Ver detalles',
settleExpensify: 'Pagar con Expensify',
Expand All @@ -149,6 +157,7 @@ export default {
owes: ({manager, owner}) => `${manager} debe a ${owner}`,
paid: ({owner, manager}) => `${manager} pagó a ${owner}`,
split: ({amount}) => `Dividir ${amount}`,
send: ({amount}) => `Enviar ${amount}`,
choosePaymentMethod: 'Elige el método de pago:',
noReimbursableExpenses: 'El monto de este informe es inválido',
},
Expand Down Expand Up @@ -231,6 +240,8 @@ export default {
enterYourUsernameToGetPaidViaPayPal: 'Escribe tu nombre de usuario para que otros puedan pagarte a través de PayPal.',
payPalMe: 'PayPal.me/',
yourPayPalUsername: 'Tu usuario de PayPal',
addPayPalAccount: 'Agregar Cuenta de PayPal',
growlMessageOnSave: 'Su nombre de usuario de PayPal se agregó correctamente',
editPayPalAccount: 'Actualizar cuenta de PayPal',
},
paymentsPage: {
Expand Down Expand Up @@ -260,6 +271,14 @@ export default {
expensifyIsOpenSource: 'Expensify.cash es open source',
theCode: 'el código',
openJobs: 'trabajos disponibles',
heroHeading: 'Dividir cuentas\ny chatear con amigos.',
heroDescription: {
phrase1: 'El dinero habla. Y ahora que el chat y los pagos están en un solo lugar, también es fácil. Sus pagos le llegan tan rápido como puede transmitir su punto.',
phrase2: 'New Expensify es de código abierto. Vista',
phrase3: 'el código',
phrase4: 'Vista',
phrase5: 'vacantes',
},
},
termsOfUse: {
phrase1: 'Al usar Expensify.cash, estás aceptando los',
Expand All @@ -268,9 +287,11 @@ export default {
phrase4: 'política de privacidad',
phrase5: 'El envío de dinero es brindado por Expensify Payments LLC (NMLS ID:2017010) de conformidad con sus',
phrase6: 'licencias',
phrase7: 'licenses',
},
passwordForm: {
pleaseFillOutAllFields: 'Por favor completa todos los campos',
enterYourTwoFactorAuthenticationCodeToContinue: 'Ingrese su código de autenticación de dos factores para continuar',
forgot: '¿Te has olvidado?',
twoFactorCode: 'Autenticación de 2 factores',
requiredWhen2FAEnabled: 'Obligatorio cuando A2F está habilitado',
Expand Down Expand Up @@ -306,7 +327,10 @@ export default {
},
setPasswordPage: {
enterPassword: 'Escribe una contraseña',
confirmNewPassword: 'Confirma la contraseña',
setPassword: 'Configura tu Contraseña',
passwordsDontMatch: 'Las contraseñas deben coincidir',
newPasswordPrompt: 'Su contraseña debe tener al menos 8 caracteres, \n1 letra mayúscula, 1 letra minúscula, 1 número.',
},
bankAccount: {
accountNumber: 'Número de cuenta',
Expand Down Expand Up @@ -369,6 +393,68 @@ export default {
noPhoneNumber: 'Por favor escribe un número de teléfono que incluya el código de país e.g +447814266907',
maxParticipantsReached: 'Has llegado al número máximo de participantes para un grupo.',
},
onfidoStep: {
acceptTerms: 'Al continuar con la solicitud para activar su billetera Expensify, confirma que ha leído, comprende y acepta ',
facialScan: 'Política y lanzamiento de la exploración facial de Onfido',
tryAgain: 'Intentar otra vez',
verifyIdentity: 'Verificar identidad',
genericError: 'Hubo un error al procesar este paso. Inténtalo de nuevo.',
},
additionalDetailsStep: {
headerTitle: 'Detalles adicionales',
helpText: 'Necesitamos confirmar la siguiente información antes de que podamos procesar este pago.',
helpLink: 'Obtenga más información sobre por qué necesitamos esto.',
legalFirstNameLabel: 'Primer nombre legal',
legalMiddleNameLabel: 'Segundo nombre legal',
legalLastNameLabel: 'Apellido legal',
},
termsStep: {
headerTitle: 'Condiciones y tarifas',
haveReadAndAgree: 'He leído y acepto recibir ',
electronicDisclosures: 'divulgaciones electrónicas',
agreeToThe: 'Estoy de acuerdo con la ',
walletAgreement: 'Acuerdo de billetera',
enablePayments: 'Habilitar pagos',
termsMustBeAccepted: 'Se deben aceptar los términos',
},
activateStep: {
headerTitle: 'Habilitar pagos',
activated: 'Su billetera Expensify está lista para usar.',
checkBackLater: 'Todavía estamos revisando tu información. Por favor, vuelva más tarde.',
},
companyStep: {
headerTitle: 'Información de la Empresa',
subtitle: 'Dé más información sobre su empresa.',
legalBusinessName: 'Nombre Comercial Legal',
companyWebsite: 'Company Website',
taxIDNumber: 'Tax ID Number',
companyType: 'Página Web de la Empresa',
incorporationDate: 'Fecha de Incorporación',
industryClassificationCode: 'Código de Clasificación Industrial',
confirmCompanyIsNot: 'Confirmo que esta empresa no está en el',
listOfRestrictedBusinesses: 'lista de negocios restringidos',
incorporationDatePlaceholder: 'Fecha de inicio (aaaa-mm-dd)',
companyPhonePlaceholder: '10 dígitos, sin guiones',
},
requestorStep: {
headerTitle: 'Información del solicitante',
financialRegulations: 'Las leyes fiscales y el reglamento bancario nos obliga a verificar la identidad de todo individuo que desee añadir una cuenta bancaria representando a una compañía. ',
learnMore: 'Más información',
isMyDataSafe: '¿Están seguros mis datos?',
onFidoConditions: 'Al continuar con la solicitud de añadir esta cuenta bancaria, confirma que ha leído, entiende y acepta ',
onFidoFacialScan: 'Onfido’s Facial Scan Policy and Release',
isControllingOfficer: 'Estoy autorizado a utilizar la cuenta bancaria de mi compañía para gastos de empresa',
isControllingOfficerError: 'Debe ser un oficial controlador con autorización para operar la cuenta bancaria de la compañía',
},
validationStep: {
headerTitle: 'Validar',
buttonText: 'Finalizar Configuración',
maxAttemptError: 'Se ha inhabilitado la validación de esta cuenta bancaria, debido a demasiados intentos incorrectos. Por favor contáctenos.',
description: 'Uno o dos días después de agregar su cuenta a Expensify, enviamos tres (3) transacciones a su cuenta. Tienen una línea comercial como "Expensify, Inc. Validation"',
descriptionCTA: 'Ingrese el monto de cada transacción en los campos a continuación. Ejemplo: 1.51',
reviewingInfo: '¡Gracias! Estamos revisando tu información y nos comunicaremos contigo en breve. Consulte su chat con Concierge ',
forNextSteps: ' para conocer los próximos pasos para terminar de configurar su cuenta bancaria.',
},
beneficialOwnersStep: {
beneficialOwners: 'Beneficial Owners',
additionalInformation: 'Additional Information',
Expand Down Expand Up @@ -430,39 +516,6 @@ export default {
welcomeNote: ({workspaceName}) => `¡Has sido invitado a la ${workspaceName} Espacio de trabajo! Descargue la aplicación móvil Expensify para comenzar a rastrear sus gastos.`,
},
},
companyStep: {
headerTitle: 'Información de la Empresa',
subtitle: 'Dé más información sobre su empresa.',
legalBusinessName: 'Nombre Comercial Legal',
companyWebsite: 'Company Website',
taxIDNumber: 'Tax ID Number',
companyType: 'Página Web de la Empresa',
incorporationDate: 'Fecha de Incorporación',
industryClassificationCode: 'Código de Clasificación Industrial',
confirmCompanyIsNot: 'Confirmo que esta empresa no está en el',
listOfRestrictedBusinesses: 'lista de negocios restringidos',
incorporationDatePlaceholder: 'Fecha de inicio (aaaa-mm-dd)',
companyPhonePlaceholder: '10 dígitos, sin guiones',
},
validationStep: {
headerTitle: 'Validar',
buttonText: 'Finalizar Configuración',
maxAttemptError: 'Se ha inhabilitado la validación de esta cuenta bancaria, debido a demasiados intentos incorrectos. Por favor contáctenos.',
description: 'Uno o dos días después de agregar su cuenta a Expensify, enviamos tres (3) transacciones a su cuenta. Tienen una línea comercial como "Expensify, Inc. Validation"',
descriptionCTA: 'Ingrese el monto de cada transacción en los campos a continuación. Ejemplo: 1.51',
reviewingInfo: '¡Gracias! Estamos revisando tu información y nos comunicaremos contigo en breve. Consulte su chat con Concierge ',
forNextSteps: ' para conocer los próximos pasos para terminar de configurar su cuenta bancaria.',
},
requestorStep: {
headerTitle: 'Información del solicitante',
financialRegulations: 'Las leyes fiscales y el reglamento bancario nos obliga a verificar la identidad de todo individuo que desee añadir una cuenta bancaria representando a una compañía. ',
learnMore: 'Más información',
isMyDataSafe: '¿Están seguros mis datos?',
onFidoConditions: 'Al continuar con la solicitud de añadir esta cuenta bancaria, confirma que ha leído, entiende y acepta ',
facialScan: 'la política de reconocimiento facial y la exención de Onfido',
isControllingOfficer: 'Estoy autorizado a utilizar la cuenta bancaria de mi compañía para gastos de empresa',
isControllingOfficerError: 'Debe ser un oficial controlador con autorización para operar la cuenta bancaria de la compañía',
},
requestCallPage: {
requestACall: 'Llámame por teléfono',
description: '¿Necesitas ayuda configurando tu cuenta? Nuestro equipo de guías puede ayudarte.',
Expand Down
5 changes: 5 additions & 0 deletions src/libs/API.js
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,11 @@ function Authenticate(parameters) {
case 401:
throw new Error('passwordForm.error.incorrectLoginOrPassword');
case 402:
// If too few characters are passed as the password, the WAF will pass it to the API as an empty
// string, which results in a 402 error from Auth.
if (response.message === '402 Missing partnerUserSecret') {
throw new Error('passwordForm.error.incorrectLoginOrPassword');
}
throw new Error('passwordForm.error.twoFactorAuthenticationEnabled');
case 403:
throw new Error('passwordForm.error.invalidLoginOrPassword');
Expand Down
4 changes: 2 additions & 2 deletions src/libs/actions/Policy.js
Original file line number Diff line number Diff line change
Expand Up @@ -114,9 +114,9 @@ function removeMembers(members, policyID) {
// Optimistically remove the members from the policy
Onyx.set(key, policy);

// Make the API call to merge the login into the policy
// Make the API call to remove a login from the policy
API.Policy_Employees_Remove({
emailList: members,
emailList: members.join(','),
policyID,
})
.then((data) => {
Expand Down
17 changes: 17 additions & 0 deletions src/pages/ReimbursementAccount/CompanyStep.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,20 @@ class CompanyStep extends React.Component {
hasNoConnectionToCannabis: lodashGet(props, ['achData', 'hasNoConnectionToCannabis'], false),
password: '',
};

// These fields need to be filled out in order to submit the form
this.requiredFields = [
'companyName',
'addressStreet',
'addressCity',
'addressState',
'addressZipCode',
'website',
'companyTaxID',
'incorporationDate',
'industryCode',
'password',
];
}

/**
Expand Down Expand Up @@ -111,6 +125,8 @@ class CompanyStep extends React.Component {
render() {
const shouldDisableCompanyName = Boolean(this.props.achData.bankAccountID && this.props.achData.companyName);
const shouldDisableCompanyTaxID = Boolean(this.props.achData.bankAccountID && this.props.achData.companyTaxID);
const shouldDisableSubmitButton = this.requiredFields
.reduce((acc, curr) => acc || !this.state[curr].trim(), false);
return (
<>
<HeaderWithCloseButton
Expand Down Expand Up @@ -253,6 +269,7 @@ class CompanyStep extends React.Component {
onPress={this.submit}
style={[styles.w100]}
text={this.props.translate('common.saveAndContinue')}
isDisabled={shouldDisableSubmitButton}
/>
</FixedFooter>
</>
Expand Down
2 changes: 1 addition & 1 deletion src/pages/SearchPage.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ class SearchPage extends Component {

this.selectReport = this.selectReport.bind(this);
this.onChangeText = this.onChangeText.bind(this);
this.debouncedUpdateOptions = _.debounce(this.updateOptions.bind(this), 300);
this.debouncedUpdateOptions = _.debounce(this.updateOptions.bind(this), 75);

const {
recentReports,
Expand Down
Loading

0 comments on commit 2d70658

Please sign in to comment.