Skip to content

Commit 3ccae18

Browse files
committed
Merge branch 'main' into @zfurtak/migrate-YearPickerModal
2 parents b15bd5e + 5b134c4 commit 3ccae18

146 files changed

Lines changed: 3471 additions & 796 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/workflows/claude-review.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ jobs:
3939
4040
- name: Run Claude Code (code)
4141
if: steps.filter.outputs.code == 'true'
42-
uses: anthropics/claude-code-action@f30f5eecfce2f34fa72e40fa5f7bcdbdcad12eb8 # v1.0.14
42+
uses: anthropics/claude-code-action@a7e4c51380c42dd89b127f5e5f9be7b54020bc6b # v1.0.21
4343
with:
4444
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
4545
github_token: ${{ secrets.GITHUB_TOKEN }}
@@ -50,7 +50,7 @@ jobs:
5050
5151
- name: Run Claude Code (docs)
5252
if: steps.filter.outputs.docs == 'true'
53-
uses: anthropics/claude-code-action@f30f5eecfce2f34fa72e40fa5f7bcdbdcad12eb8 # v1.0.14
53+
uses: anthropics/claude-code-action@a7e4c51380c42dd89b127f5e5f9be7b54020bc6b # v1.0.21
5454
with:
5555
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
5656
github_token: ${{ secrets.GITHUB_TOKEN }}

Mobile-Expensify

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 1009026401
118-
versionName "9.2.64-1"
117+
versionCode 1009026501
118+
versionName "9.2.65-1"
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"
Lines changed: 1 addition & 0 deletions
Loading
Lines changed: 1 addition & 0 deletions
Loading
693 Bytes
Loading

ios/NewExpensify/Info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
<key>CFBundlePackageType</key>
2424
<string>APPL</string>
2525
<key>CFBundleShortVersionString</key>
26-
<string>9.2.64</string>
26+
<string>9.2.65</string>
2727
<key>CFBundleSignature</key>
2828
<string>????</string>
2929
<key>CFBundleURLTypes</key>
@@ -44,7 +44,7 @@
4444
</dict>
4545
</array>
4646
<key>CFBundleVersion</key>
47-
<string>9.2.64.1</string>
47+
<string>9.2.65.1</string>
4848
<key>FullStory</key>
4949
<dict>
5050
<key>OrgId</key>

ios/NotificationServiceExtension/Info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
<key>CFBundleName</key>
1212
<string>$(PRODUCT_NAME)</string>
1313
<key>CFBundleShortVersionString</key>
14-
<string>9.2.64</string>
14+
<string>9.2.65</string>
1515
<key>CFBundleVersion</key>
16-
<string>9.2.64.1</string>
16+
<string>9.2.65.1</string>
1717
<key>NSExtension</key>
1818
<dict>
1919
<key>NSExtensionPointIdentifier</key>

ios/ShareViewController/Info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
<key>CFBundleName</key>
1212
<string>$(PRODUCT_NAME)</string>
1313
<key>CFBundleShortVersionString</key>
14-
<string>9.2.64</string>
14+
<string>9.2.65</string>
1515
<key>CFBundleVersion</key>
16-
<string>9.2.64.1</string>
16+
<string>9.2.65.1</string>
1717
<key>NSExtension</key>
1818
<dict>
1919
<key>NSExtensionAttributes</key>

jest/setup.ts

Lines changed: 59 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/* eslint-disable max-classes-per-file */
22
import * as core from '@actions/core';
33
import '@shopify/flash-list/jestSetup';
4+
import {useMemo} from 'react';
45
import type * as RNAppLogs from 'react-native-app-logs';
56
import type {ReadDirItem} from 'react-native-fs';
67
import 'react-native-gesture-handler/jestSetup';
@@ -142,60 +143,70 @@ jest.mock('../modules/hybrid-app/src/NativeReactNativeHybridApp', () => ({
142143
clearOldDotAfterSignOut: jest.fn(),
143144
}));
144145

146+
const mockUseMemo = useMemo;
147+
145148
// Mock lazy asset loading to be synchronous in tests
146149
jest.mock('../src/hooks/useLazyAsset.ts', () => ({
147-
useMemoizedLazyAsset: jest.fn(() => {
148-
// Return a mock asset immediately to avoid async loading in tests
149-
const mockAsset = {
150-
src: 'mock-icon',
151-
testID: 'mock-asset',
152-
// Add common icon properties that tests might expect
153-
height: 20,
154-
width: 20,
155-
};
156-
157-
return {
158-
asset: mockAsset,
159-
isLoaded: true,
160-
isLoading: false,
161-
hasError: false,
162-
};
163-
}),
164-
useMemoizedLazyIllustrations: jest.fn((names: readonly string[]) => {
165-
// Return a Record with all requested illustration names
166-
const mockIllustrations: Record<string, unknown> = {};
167-
for (const name of names) {
168-
mockIllustrations[name] = {
169-
src: `mock-${name}`,
170-
testID: `mock-illustration-${name}`,
150+
useMemoizedLazyAsset: jest.fn((importFn) =>
151+
mockUseMemo(() => {
152+
// Return a mock asset immediately to avoid async loading in tests
153+
const mockAsset = {
154+
src: 'mock-icon',
155+
testID: 'mock-asset',
156+
// Add common icon properties that tests might expect
171157
height: 20,
172158
width: 20,
173159
};
174-
}
175-
return mockIllustrations;
176-
}),
177-
useMemoizedLazyExpensifyIcons: jest.fn((names: readonly string[]) => {
178-
// Return a Record with all requested icon names
179-
const mockIcons: Record<string, unknown> = {};
180-
for (const name of names) {
181-
mockIcons[name] = {
182-
src: `mock-${name}`,
183-
testID: `mock-expensify-icon-${name}`,
184-
height: 20,
185-
width: 20,
160+
161+
return {
162+
asset: mockAsset,
163+
isLoaded: true,
164+
isLoading: false,
165+
hasError: false,
186166
};
187-
}
188-
return mockIcons;
189-
}),
190-
default: jest.fn(() => {
191-
const mockAsset = {src: 'mock-icon', testID: 'mock-asset'};
192-
return {
193-
asset: mockAsset,
194-
isLoaded: true,
195-
isLoading: false,
196-
hasError: false,
197-
};
198-
}),
167+
}, [importFn]),
168+
),
169+
useMemoizedLazyIllustrations: jest.fn((names: readonly string[]) =>
170+
mockUseMemo(() => {
171+
// Return a Record with all requested illustration names
172+
const mockIllustrations: Record<string, unknown> = {};
173+
for (const name of names) {
174+
mockIllustrations[name] = {
175+
src: `mock-${name}`,
176+
testID: `mock-illustration-${name}`,
177+
height: 20,
178+
width: 20,
179+
};
180+
}
181+
return mockIllustrations;
182+
}, [names]),
183+
),
184+
useMemoizedLazyExpensifyIcons: jest.fn((names: readonly string[]) =>
185+
mockUseMemo(() => {
186+
// Return a Record with all requested icon names
187+
const mockIcons: Record<string, unknown> = {};
188+
for (const name of names) {
189+
mockIcons[name] = {
190+
src: `mock-${name}`,
191+
testID: `mock-expensify-icon-${name}`,
192+
height: 20,
193+
width: 20,
194+
};
195+
}
196+
return mockIcons;
197+
}, [names]),
198+
),
199+
default: jest.fn((importFn) =>
200+
mockUseMemo(() => {
201+
const mockAsset = {src: 'mock-icon', testID: 'mock-asset'};
202+
return {
203+
asset: mockAsset,
204+
isLoaded: true,
205+
isLoading: false,
206+
hasError: false,
207+
};
208+
}, [importFn]),
209+
),
199210
}));
200211

201212
// Mock icon loading functions to resolve immediately

0 commit comments

Comments
 (0)