Skip to content

Commit 82c1fe3

Browse files
committed
Merge branch 'main' into feature/82187-migrate-searchautocompletelist-to-usefiltered-options
2 parents e9dd0af + 425edfe commit 82c1fe3

1,319 files changed

Lines changed: 52876 additions & 29542 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.

.claude/skills/coding-standards/rules/clean-react-1-composition-over-config.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -462,11 +462,11 @@ In all cases, the rule applies to: **new components**, **new features added to e
462462
- The optional prop is used for logic beyond just conditional rendering (e.g., computing derived values, passed to callbacks, used in multiple places within the component)
463463
- The component is a thin wrapper around a platform primitive (e.g., wrapping `TextInput`, `ScrollView`, `Pressable`) — these naturally pass through configuration props
464464
- Items come from **runtime data** (API responses, user-generated content, Onyx collections) — dynamic data must be mapped
465-
- The array is used with **list components** (e.g., `FlatList`, `SectionList`, or custom wrappers) — these require data arrays by design
465+
- The array is used with **list components** (e.g., `FlatList`, or custom wrappers) — these require data arrays by design
466466
- Items are truly **homogeneous** (same shape, same behavior, only values differ) and the count is **unbounded** (e.g., list of chat messages, search results)
467467
- The array is a **framework requirement** (e.g., React Navigation screen config, form validation rules)
468468
- The `ReactNode` prop is `children` itself — `children` is the foundation of composition, not configuration
469-
- The render function is a **list component callback** (`renderItem` on `FlatList`, `SectionList`, `DraggableList`) — these are framework requirements
469+
- The render function is a **list component callback** (`renderItem` on `FlatList`, `DraggableList`) — these are framework requirements
470470
- The render function receives **per-item runtime data** from a dynamic collection (e.g., `renderSuggestionMenuItem(item, index)`) — this is list-style rendering, not slot configuration
471471

472472
**Search Patterns** (hints for reviewers):

.claude/skills/coding-standards/rules/perf-1-no-spread-in-renderitem.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ title: No spread in list item's renderItem
3737

3838
Flag ONLY when ALL of these are true:
3939

40-
- Code is inside a renderItem function (function passed to FlatList, SectionList, etc.)
40+
- Code is inside a renderItem function (function passed to FlatList, etc.)
4141
- A spread operator (...) is used on an object
4242
- That object is being passed as a prop to a component
4343
- The spread creates a NEW object literal inline

.github/ISSUE_TEMPLATE/Standard.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
name: Standard issue template
33
about: A standard template to follow when creating a new issue in this repository
4-
labels: Bug, Daily, External
4+
labels: Bug, Daily
55
---
66

77
If you haven’t already, check out our [contributing guidelines](https://github.com/Expensify/ReactNativeChat/blob/main/contributingGuides/CONTRIBUTING.md) for onboarding and email contributors@expensify.com to request to join our Slack channel!
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
name: Get merged pull request
2+
description: Given the current push event's commit SHA, finds the pull request that was merged to produce it.
3+
4+
inputs:
5+
github_token:
6+
description: GitHub token used to call the API
7+
required: true
8+
9+
outputs:
10+
number:
11+
description: The PR number
12+
value: ${{ steps.getMergedPR.outputs.number }}
13+
title:
14+
description: The PR title
15+
value: ${{ steps.getMergedPR.outputs.title }}
16+
body:
17+
description: The PR body
18+
value: ${{ steps.getMergedPR.outputs.body }}
19+
labels:
20+
description: Newline-separated label names
21+
value: ${{ steps.getMergedPR.outputs.labels }}
22+
assignees:
23+
description: Newline-separated assignee logins
24+
value: ${{ steps.getMergedPR.outputs.assignees }}
25+
26+
runs:
27+
using: composite
28+
steps:
29+
- name: Find merged pull request for this commit
30+
id: getMergedPR
31+
shell: bash
32+
run: |
33+
RESP=$(gh api -H "Accept: application/vnd.github+json" "/repos/${GITHUB_REPOSITORY}/commits/${GITHUB_SHA}/pulls")
34+
35+
# Prefer the PR whose merge_commit_sha matches exactly (parity with the old action)
36+
PR=$(echo "$RESP" | jq -c "first(.[] | select(.merge_commit_sha == \"${GITHUB_SHA}\"))" 2>/dev/null)
37+
38+
# Fall back to the first merged PR associated with this commit
39+
if [[ -z "$PR" || "$PR" == "null" ]]; then
40+
PR=$(echo "$RESP" | jq -c 'first(.[] | select(.merged_at != null))' 2>/dev/null)
41+
fi
42+
43+
if [[ -z "$PR" || "$PR" == "null" ]]; then
44+
echo "::warning::No merged pull request found for commit ${GITHUB_SHA}"
45+
exit 0
46+
fi
47+
48+
{
49+
echo "number=$(echo "$PR" | jq -r '.number')"
50+
echo "title=$(echo "$PR" | jq -r '.title')"
51+
52+
echo "body<<GETMPR_EOF"
53+
echo "$PR" | jq -r '.body // ""'
54+
echo "GETMPR_EOF"
55+
56+
echo "labels<<GETMPR_LABELS_EOF"
57+
echo "$PR" | jq -r '[.labels[].name] | join("\n")'
58+
echo "GETMPR_LABELS_EOF"
59+
60+
echo "assignees<<GETMPR_ASSIGNEES_EOF"
61+
echo "$PR" | jq -r '[.assignees[].login] | join("\n")'
62+
echo "GETMPR_ASSIGNEES_EOF"
63+
64+
} >> "$GITHUB_OUTPUT"
65+
env:
66+
GITHUB_TOKEN: ${{ inputs.github_token }}

.github/actions/javascript/authorChecklist/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@ inputs:
55
description: Auth token for New Expensify Github
66
required: true
77
runs:
8-
using: 'node20'
8+
using: 'node24'
99
main: './index.js'

.github/actions/javascript/awaitStagingDeploys/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ inputs:
88
description: If provided, this action will only wait for a deploy matching this tag.
99
required: false
1010
runs:
11-
using: 'node20'
11+
using: 'node24'
1212
main: './index.js'

.github/actions/javascript/bumpVersion/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ outputs:
88
NEW_VERSION:
99
description: The new semver version of the application, updated in the JS and native layers.
1010
runs:
11-
using: node20
11+
using: node24
1212
main: ./index.js

.github/actions/javascript/checkAndroidStatus/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,5 @@ outputs:
1818
ROLLOUT_PERCENTAGE:
1919
description: The calculated rollout percentage
2020
runs:
21-
using: 'node20'
21+
using: 'node24'
2222
main: './index.js'

.github/actions/javascript/checkDeployBlockers/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@ outputs:
1111
HAS_DEPLOY_BLOCKERS:
1212
description: A true/false indicating whether or not a deploy blocker was found.
1313
runs:
14-
using: 'node20'
14+
using: 'node24'
1515
main: 'index.js'

.github/actions/javascript/checkSVGCompression/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ inputs:
66
required: true
77
default: ${{ github.token }}
88
runs:
9-
using: 'node20'
9+
using: 'node24'
1010
main: './index.js'

0 commit comments

Comments
 (0)