Skip to content

Commit 08fa3f4

Browse files
committed
Merge remote-tracking branch 'upstream/main' into feat/waterim/unreport-transaction-v2
2 parents c62bc3d + 5715b45 commit 08fa3f4

255 files changed

Lines changed: 36217 additions & 40376 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/actions/javascript/proposalPoliceComment/index.js

Lines changed: 9073 additions & 13922 deletions
Large diffs are not rendered by default.

Mobile-Expensify

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -510,7 +510,7 @@ You can only build HybridApp if you have been granted access to [`Mobile-Expensi
510510
[submodule "Mobile-Expensify"]
511511
ignore = all
512512
```
513-
4. Run `git config --global submodule.recurse true` in order to have the submodule updated when you pull App
513+
4. Run `git config --global submodule.recurse true` in order to have the submodule updated when you pull App.
514514

515515

516516
> [!Note]

__mocks__/@ua/react-native-airship.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,13 @@ enum EventType {
66
PushReceived = 'com.airship.push_received',
77
}
88

9+
// eslint-disable-next-line no-restricted-syntax
10+
enum PermissionStatus {
11+
Granted = 'granted',
12+
Denied = 'denied',
13+
NotDetermined = 'not_determined',
14+
}
15+
916
// eslint-disable-next-line @typescript-eslint/no-namespace
1017
namespace iOS {
1118
/**
@@ -71,4 +78,4 @@ const Airship: Partial<AirshipRoot> = {
7178

7279
export default Airship;
7380

74-
export {EventType, iOS};
81+
export {EventType, iOS, PermissionStatus};

android/app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,8 @@ android {
114114
minSdkVersion rootProject.ext.minSdkVersion
115115
targetSdkVersion rootProject.ext.targetSdkVersion
116116
multiDexEnabled rootProject.ext.multiDexEnabled
117-
versionCode 1009016701
118-
versionName "9.1.67-1"
117+
versionCode 1009016803
118+
versionName "9.1.68-3"
119119
// Supported language variants must be declared here to avoid from being removed during the compilation.
120120
// This also helps us to not include unnecessary language variants in the APK.
121121
resConfigs "en", "es"

assets/emojis/index.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import type {Locale} from '@src/types/onyx';
1+
import type {FullySupportedLocale} from '@src/CONST/LOCALES';
22
import emojis from './common';
33
import type {Emoji, EmojisList} from './types';
44

55
type EmojiTable = Record<string, Emoji>;
66

7-
type LocaleEmojis = Partial<Record<Locale, EmojisList>>;
7+
type LocaleEmojis = Partial<Record<FullySupportedLocale, EmojisList>>;
88

99
const emojiNameTable = emojis.reduce<EmojiTable>((prev, cur) => {
1010
const newValue = prev;
@@ -32,13 +32,12 @@ const localeEmojis: LocaleEmojis = {
3232
es: undefined,
3333
};
3434

35-
const importEmojiLocale = (locale: Locale) => {
36-
const normalizedLocale = locale.toLowerCase().split('-').at(0) as Locale;
37-
if (!localeEmojis[normalizedLocale]) {
38-
const emojiImportPromise = normalizedLocale === 'en' ? import('./en') : import('./es');
35+
const importEmojiLocale = (locale: FullySupportedLocale) => {
36+
if (!localeEmojis[locale]) {
37+
const emojiImportPromise = locale === 'en' ? import('./en') : import('./es');
3938
return emojiImportPromise.then((esEmojiModule) => {
4039
// it is needed because in jest test the modules are imported in double nested default object
41-
localeEmojis[normalizedLocale] = esEmojiModule.default.default ? (esEmojiModule.default.default as unknown as EmojisList) : esEmojiModule.default;
40+
localeEmojis[locale] = esEmojiModule.default.default ? (esEmojiModule.default.default as unknown as EmojisList) : esEmojiModule.default;
4241
});
4342
}
4443
return Promise.resolve();

assets/images/menu.svg

Lines changed: 9 additions & 1 deletion
Loading

cspell.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,7 @@
450450
"positionMillis",
451451
"Postharvest",
452452
"Postproduction",
453+
"Précédent",
453454
"precheck",
454455
"Precheck",
455456
"prescribers",
@@ -601,6 +602,7 @@
601602
"uimanager",
602603
"ukkonen",
603604
"unapprove",
605+
"unapproves",
604606
"unassigning",
605607
"Unassigning",
606608
"unassigns",

desktop/main.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {translate} from '@libs/Localize';
1111
import Log from '@libs/Log';
1212
import CONFIG from '@src/CONFIG';
1313
import CONST from '@src/CONST';
14+
import TranslationStore from '@src/languages/TranslationStore';
1415
import type {TranslationPaths} from '@src/languages/types';
1516
import type PlatformSpecificUpdater from '@src/setup/platformSetup/types';
1617
import type {Locale} from '@src/types/onyx';
@@ -665,10 +666,12 @@ const mainWindow = (): Promise<void> => {
665666
// because the only way code can be shared between the main and renderer processes at runtime is via the context bridge
666667
// So we track preferredLocale separately via ELECTRON_EVENTS.LOCALE_UPDATED
667668
ipcMain.on(ELECTRON_EVENTS.LOCALE_UPDATED, (event, updatedLocale: Locale) => {
668-
preferredLocale = updatedLocale;
669-
Menu.setApplicationMenu(Menu.buildFromTemplate(localizeMenuItems(initialMenuTemplate, updatedLocale)));
670-
disposeContextMenu?.();
671-
disposeContextMenu = createContextMenu(updatedLocale);
669+
TranslationStore.load(updatedLocale).then(() => {
670+
preferredLocale = updatedLocale;
671+
Menu.setApplicationMenu(Menu.buildFromTemplate(localizeMenuItems(initialMenuTemplate, updatedLocale)));
672+
disposeContextMenu?.();
673+
disposeContextMenu = createContextMenu(updatedLocale);
674+
});
672675
});
673676

674677
ipcMain.on(ELECTRON_EVENTS.REQUEST_VISIBILITY, (event) => {

docs/articles/expensify-classic/expenses/Add-an-expense.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,12 @@ To resolve duplicates, you can [merge the expenses](https://help.expensify.com/a
170170

171171
**Note:** Employees under a workspace may have expenses auto-labeled. Ask a Workspace Admin if anything looks incorrect.
172172

173+
## Can I upload a PDF receipt from the mobile app?
174+
175+
The Expensify mobile app has access to your photo gallery, not your files. To upload a file outside of the photo gallery, you can use one of these methods:
176+
1. For a single-page receipt, take a screenshot and upload it from your gallery
177+
2. For a multi-page receipt, use your email app to send it to receipts@expensify.com
178+
173179
## Why don’t I see a certain expense type?
174180

175181
Your company’s workspace settings may limit what expense types are visible to you.

0 commit comments

Comments
 (0)