[PR #6157] [MERGED] MVP for Payee Locations #32283

Closed
opened 2026-04-18 08:21:35 -05:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/actualbudget/actual/pull/6157
Author: @mannkind
Created: 11/15/2025
Status: Merged
Merged: 3/9/2026
Merged by: @MatissJanis

Base: masterHead: payee_locations


📝 Commits (10+)

  • e96b975 Phase 1: Add payee locations database schema/types
  • f828e3e Phase 2: Add payee location API/services
  • d264860 Phase 3: Add location-aware UI components/hooks
  • a30e7e8 Phase 4: Add YNAB5 payee location import support
  • ed2faa8 Phase 5: Add unit of measurement support
  • 0adb0f5 Required release note about the PR
  • 0c61958 Update VRT screenshots
  • e65baf8 Actually get syncing working
  • 57dec76 Remove unit of measurement preference
  • c1ba6d0 Add payeeLocations feature flag

📊 Changes

28 files changed (+1709 additions, -67 deletions)

View changed files

📝 packages/desktop-client/src/components/autocomplete/PayeeAutocomplete.test.tsx (+173 -3)
📝 packages/desktop-client/src/components/autocomplete/PayeeAutocomplete.tsx (+280 -58)
📝 packages/desktop-client/src/components/mobile/MobileForms.tsx (+3 -1)
📝 packages/desktop-client/src/components/mobile/transactions/TransactionEdit.tsx (+145 -2)
📝 packages/desktop-client/src/components/settings/Experimental.tsx (+6 -0)
📝 packages/desktop-client/src/hooks/useFeatureFlag.ts (+1 -0)
packages/desktop-client/src/hooks/useLocationPermission.ts (+99 -0)
packages/desktop-client/src/hooks/useNearbyPayees.ts (+14 -0)
packages/desktop-client/src/payees/location-adapters.ts (+97 -0)
packages/desktop-client/src/payees/location-integration.test.ts (+206 -0)
packages/desktop-client/src/payees/location-service.ts (+92 -0)
packages/desktop-client/src/payees/location.ts (+10 -0)
📝 packages/desktop-client/src/payees/mutations.ts (+52 -0)
📝 packages/desktop-client/src/payees/queries.ts (+21 -1)
packages/loot-core/migrations/1768872504000_add_payee_locations.sql (+21 -0)
📝 packages/loot-core/src/server/api.ts (+28 -0)
📝 packages/loot-core/src/server/aql/schema/index.ts (+8 -0)
📝 packages/loot-core/src/server/importers/ynab5.ts (+58 -0)
📝 packages/loot-core/src/server/payees/app.ts (+227 -1)
packages/loot-core/src/shared/constants.ts (+5 -0)

...and 8 more files

📄 Description

MVP for payee locations

  • Feature entirely behind feature flag and location services prompt
  • Manual nearby payee selection
  • Manual save of payee location
  • Nearby payees in payee autocomplete
    • Forget location button available
  • Support for YNAB5 import of payee locations

Feature Flag:
image

Static image of nearby payee button:
image

Static image of save payee location button:
image

Static image of payee autocomplete w/nearby payees
image

Quick demo on a testing/local budget:
https://github.com/user-attachments/assets/1d899d29-fab0-4561-a3fa-234167cb352e


Bundle Stats

Bundle Files count Total bundle size % Changed
desktop-client 27 14.89 MB → 14.91 MB (+22.82 kB) +0.15%
loot-core 1 5.82 MB → 5.83 MB (+7.28 kB) +0.12%
api 1 4.43 MB → 4.44 MB (+6.61 kB) +0.15%
View detailed bundle stats

desktop-client

Total

Files count Total bundle size % Changed
27 14.89 MB → 14.91 MB (+22.82 kB) +0.15%
Changeset
File Δ Size
src/hooks/useLocationPermission.ts 🆕 +2.12 kB 0 B → 2.12 kB
src/payees/location-service.ts 🆕 +1.78 kB 0 B → 1.78 kB
src/payees/location-adapters.ts 🆕 +1.33 kB 0 B → 1.33 kB
home/runner/work/actual/actual/packages/component-library/src/icons/v1/Location.tsx 🆕 +844 B 0 B → 844 B
home/runner/work/actual/actual/packages/loot-core/src/shared/location-utils.ts 🆕 +763 B 0 B → 763 B
src/hooks/useNearbyPayees.ts 🆕 +482 B 0 B → 482 B
src/payees/location.ts 🆕 +106 B 0 B → 106 B
home/runner/work/actual/actual/packages/loot-core/src/shared/constants.ts 🆕 +40 B 0 B → 40 B
src/payees/mutations.ts 📈 +2.21 kB (+160.30%) 1.38 kB → 3.59 kB
src/components/autocomplete/PayeeAutocomplete.tsx 📈 +8.17 kB (+47.99%) 17.02 kB → 25.19 kB
src/payees/queries.ts 📈 +428 B (+21.95%) 1.9 kB → 2.32 kB
src/components/mobile/transactions/TransactionEdit.tsx 📈 +4.19 kB (+6.78%) 61.8 kB → 65.99 kB
src/hooks/useFeatureFlag.ts 📈 +25 B (+5.79%) 432 B → 457 B
src/components/mobile/MobileForms.tsx 📈 +160 B (+3.05%) 5.13 kB → 5.28 kB
src/components/settings/Experimental.tsx 📈 +245 B (+2.25%) 10.62 kB → 10.86 kB
View detailed bundle breakdown

Added
No assets were added

Removed
No assets were removed

Bigger

Asset File Size % Changed
static/js/index.js 9.54 MB → 9.56 MB (+22.82 kB) +0.23%

Smaller
No assets were smaller

Unchanged

Asset File Size % Changed
static/js/indexeddb-main-thread-worker-e59fee74.js 12.94 kB 0%
static/js/workbox-window.prod.es5.js 5.64 kB 0%
static/js/ca.js 187.93 kB 0%
static/js/da.js 106.2 kB 0%
static/js/de.js 179.89 kB 0%
static/js/en-GB.js 7.18 kB 0%
static/js/en.js 170.42 kB 0%
static/js/es.js 174.37 kB 0%
static/js/fr.js 179.41 kB 0%
static/js/it.js 170.98 kB 0%
static/js/nb-NO.js 156.8 kB 0%
static/js/nl.js 113.06 kB 0%
static/js/pl.js 89.65 kB 0%
static/js/pt-BR.js 182.89 kB 0%
static/js/th.js 181.58 kB 0%
static/js/uk.js 215.35 kB 0%
static/js/resize-observer.js 18.37 kB 0%
static/js/BackgroundImage.js 120.54 kB 0%
static/js/ReportRouter.js 1.16 MB 0%
static/js/narrow.js 638.11 kB 0%
static/js/TransactionList.js 106.22 kB 0%
static/js/wide.js 164.15 kB 0%
static/js/AppliedFilters.js 9.71 kB 0%
static/js/usePayeeRuleCounts.js 10.04 kB 0%
static/js/useTransactionBatchActions.js 13.23 kB 0%
static/js/FormulaEditor.js 1.04 MB 0%

loot-core

Total

Files count Total bundle size % Changed
1 5.82 MB → 5.83 MB (+7.28 kB) +0.12%
Changeset
File Δ Size
home/runner/work/actual/actual/packages/loot-core/src/shared/constants.ts 🆕 +44 B 0 B → 44 B
home/runner/work/actual/actual/packages/loot-core/src/server/payees/app.ts 📈 +4.69 kB (+198.18%) 2.37 kB → 7.06 kB
home/runner/work/actual/actual/packages/loot-core/src/server/importers/ynab5.ts 📈 +1.47 kB (+4.96%) 29.57 kB → 31.04 kB
home/runner/work/actual/actual/packages/loot-core/src/server/api.ts 📈 +802 B (+3.02%) 25.94 kB → 26.72 kB
home/runner/work/actual/actual/packages/loot-core/src/server/aql/schema/index.ts 📈 +304 B (+2.57%) 11.57 kB → 11.87 kB
View detailed bundle breakdown

Added

Asset File Size % Changed
kcab.worker.xpMPZEN9.js 0 B → 5.83 MB (+5.83 MB) -

Removed

Asset File Size % Changed
kcab.worker.CVw5oNPx.js 5.82 MB → 0 B (-5.82 MB) -100%

Bigger
No assets were bigger

Smaller
No assets were smaller

Unchanged
No assets were unchanged


api

Total

Files count Total bundle size % Changed
1 4.43 MB → 4.44 MB (+6.61 kB) +0.15%
Changeset
File Δ Size
src/shared/constants.ts 🆕 +40 B 0 B → 40 B
src/server/payees/app.ts 📈 +4.31 kB (+209.89%) 2.05 kB → 6.36 kB
src/server/importers/ynab5.ts 📈 +1.31 kB (+4.95%) 26.39 kB → 27.7 kB
src/server/api.ts 📈 +706 B (+3.04%) 22.7 kB → 23.39 kB
src/server/aql/schema/index.ts 📈 +272 B (+2.55%) 10.41 kB → 10.68 kB
View detailed bundle breakdown

Added
No assets were added

Removed
No assets were removed

Bigger

Asset File Size % Changed
bundle.api.js 4.43 MB → 4.44 MB (+6.61 kB) +0.15%

Smaller
No assets were smaller

Unchanged
No assets were unchanged


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/actualbudget/actual/pull/6157 **Author:** [@mannkind](https://github.com/mannkind) **Created:** 11/15/2025 **Status:** ✅ Merged **Merged:** 3/9/2026 **Merged by:** [@MatissJanis](https://github.com/MatissJanis) **Base:** `master` ← **Head:** `payee_locations` --- ### 📝 Commits (10+) - [`e96b975`](https://github.com/actualbudget/actual/commit/e96b9753d0f7b108f6933a46bc4e017ee68dc1d0) Phase 1: Add payee locations database schema/types - [`f828e3e`](https://github.com/actualbudget/actual/commit/f828e3e8e66542e78f9743f250b5846eed446e2c) Phase 2: Add payee location API/services - [`d264860`](https://github.com/actualbudget/actual/commit/d264860e7ee8667f41cfbdd5ced7a0fcbb6c2e3a) Phase 3: Add location-aware UI components/hooks - [`a30e7e8`](https://github.com/actualbudget/actual/commit/a30e7e89f35620e30db6c02905eabd3f1b9cc54c) Phase 4: Add YNAB5 payee location import support - [`ed2faa8`](https://github.com/actualbudget/actual/commit/ed2faa8a0ed70da9a205d4b7e1b587211381a8f8) Phase 5: Add unit of measurement support - [`0adb0f5`](https://github.com/actualbudget/actual/commit/0adb0f54dc98175702c99d46ba6a108e2a0c0299) Required release note about the PR - [`0c61958`](https://github.com/actualbudget/actual/commit/0c61958d7ead0ef90e22a385b42dc252bb53bb98) Update VRT screenshots - [`e65baf8`](https://github.com/actualbudget/actual/commit/e65baf8fd2d1a752df7887c5ce4a422ab8940457) Actually get syncing working - [`57dec76`](https://github.com/actualbudget/actual/commit/57dec76599de3a0a60d64a7f97ae3cfaa623f910) Remove unit of measurement preference - [`c1ba6d0`](https://github.com/actualbudget/actual/commit/c1ba6d0544c04e2100556b8e4a7d5d3df54be845) Add payeeLocations feature flag ### 📊 Changes **28 files changed** (+1709 additions, -67 deletions) <details> <summary>View changed files</summary> 📝 `packages/desktop-client/src/components/autocomplete/PayeeAutocomplete.test.tsx` (+173 -3) 📝 `packages/desktop-client/src/components/autocomplete/PayeeAutocomplete.tsx` (+280 -58) 📝 `packages/desktop-client/src/components/mobile/MobileForms.tsx` (+3 -1) 📝 `packages/desktop-client/src/components/mobile/transactions/TransactionEdit.tsx` (+145 -2) 📝 `packages/desktop-client/src/components/settings/Experimental.tsx` (+6 -0) 📝 `packages/desktop-client/src/hooks/useFeatureFlag.ts` (+1 -0) ➕ `packages/desktop-client/src/hooks/useLocationPermission.ts` (+99 -0) ➕ `packages/desktop-client/src/hooks/useNearbyPayees.ts` (+14 -0) ➕ `packages/desktop-client/src/payees/location-adapters.ts` (+97 -0) ➕ `packages/desktop-client/src/payees/location-integration.test.ts` (+206 -0) ➕ `packages/desktop-client/src/payees/location-service.ts` (+92 -0) ➕ `packages/desktop-client/src/payees/location.ts` (+10 -0) 📝 `packages/desktop-client/src/payees/mutations.ts` (+52 -0) 📝 `packages/desktop-client/src/payees/queries.ts` (+21 -1) ➕ `packages/loot-core/migrations/1768872504000_add_payee_locations.sql` (+21 -0) 📝 `packages/loot-core/src/server/api.ts` (+28 -0) 📝 `packages/loot-core/src/server/aql/schema/index.ts` (+8 -0) 📝 `packages/loot-core/src/server/importers/ynab5.ts` (+58 -0) 📝 `packages/loot-core/src/server/payees/app.ts` (+227 -1) ➕ `packages/loot-core/src/shared/constants.ts` (+5 -0) _...and 8 more files_ </details> ### 📄 Description MVP for payee locations * Feature entirely behind feature flag and location services prompt * Manual nearby payee selection * Manual save of payee location * Nearby payees in payee autocomplete * Forget location button available * Support for YNAB5 import of payee locations Feature Flag: <img width="472" height="269" alt="image" src="https://github.com/user-attachments/assets/10c81b10-47e2-44eb-b3d8-ee748296143d" /> Static image of nearby payee button: <img width="499" height="348" alt="image" src="https://github.com/user-attachments/assets/e9e30469-b7dc-45a2-86c3-9c6f3bb6fc92" /> Static image of save payee location button: <img width="499" height="315" alt="image" src="https://github.com/user-attachments/assets/66aa9d39-4e54-4099-9822-9e72233edf97" /> Static image of payee autocomplete w/nearby payees <img width="501" height="481" alt="image" src="https://github.com/user-attachments/assets/dd4db0d9-1afb-453e-95b0-daf18c3b2424" /> Quick demo on a testing/local budget: https://github.com/user-attachments/assets/1d899d29-fab0-4561-a3fa-234167cb352e <!--- actual-bot-sections ---> <hr /> <!--- bundlestats-action-comment key:combined start ---> ### Bundle Stats Bundle | Files count | Total bundle size | % Changed ------ | ----------- | ----------------- | --------- desktop-client | 27 | 14.89 MB → 14.91 MB (+22.82 kB) | +0.15% loot-core | 1 | 5.82 MB → 5.83 MB (+7.28 kB) | +0.12% api | 1 | 4.43 MB → 4.44 MB (+6.61 kB) | +0.15% <details> <summary>View detailed bundle stats</summary> #### desktop-client **Total** Files count | Total bundle size | % Changed ----------- | ----------------- | --------- 27 | 14.89 MB → 14.91 MB (+22.82 kB) | +0.15% <details> <summary>Changeset</summary> File | Δ | Size ---- | - | ---- `src/hooks/useLocationPermission.ts` | 🆕 +2.12 kB | 0 B → 2.12 kB `src/payees/location-service.ts` | 🆕 +1.78 kB | 0 B → 1.78 kB `src/payees/location-adapters.ts` | 🆕 +1.33 kB | 0 B → 1.33 kB `home/runner/work/actual/actual/packages/component-library/src/icons/v1/Location.tsx` | 🆕 +844 B | 0 B → 844 B `home/runner/work/actual/actual/packages/loot-core/src/shared/location-utils.ts` | 🆕 +763 B | 0 B → 763 B `src/hooks/useNearbyPayees.ts` | 🆕 +482 B | 0 B → 482 B `src/payees/location.ts` | 🆕 +106 B | 0 B → 106 B `home/runner/work/actual/actual/packages/loot-core/src/shared/constants.ts` | 🆕 +40 B | 0 B → 40 B `src/payees/mutations.ts` | 📈 +2.21 kB (+160.30%) | 1.38 kB → 3.59 kB `src/components/autocomplete/PayeeAutocomplete.tsx` | 📈 +8.17 kB (+47.99%) | 17.02 kB → 25.19 kB `src/payees/queries.ts` | 📈 +428 B (+21.95%) | 1.9 kB → 2.32 kB `src/components/mobile/transactions/TransactionEdit.tsx` | 📈 +4.19 kB (+6.78%) | 61.8 kB → 65.99 kB `src/hooks/useFeatureFlag.ts` | 📈 +25 B (+5.79%) | 432 B → 457 B `src/components/mobile/MobileForms.tsx` | 📈 +160 B (+3.05%) | 5.13 kB → 5.28 kB `src/components/settings/Experimental.tsx` | 📈 +245 B (+2.25%) | 10.62 kB → 10.86 kB </details> <details> <summary>View detailed bundle breakdown</summary> <div> **Added** No assets were added **Removed** No assets were removed **Bigger** Asset | File Size | % Changed ----- | --------- | --------- static/js/index.js | 9.54 MB → 9.56 MB (+22.82 kB) | +0.23% **Smaller** No assets were smaller **Unchanged** Asset | File Size | % Changed ----- | --------- | --------- static/js/indexeddb-main-thread-worker-e59fee74.js | 12.94 kB | 0% static/js/workbox-window.prod.es5.js | 5.64 kB | 0% static/js/ca.js | 187.93 kB | 0% static/js/da.js | 106.2 kB | 0% static/js/de.js | 179.89 kB | 0% static/js/en-GB.js | 7.18 kB | 0% static/js/en.js | 170.42 kB | 0% static/js/es.js | 174.37 kB | 0% static/js/fr.js | 179.41 kB | 0% static/js/it.js | 170.98 kB | 0% static/js/nb-NO.js | 156.8 kB | 0% static/js/nl.js | 113.06 kB | 0% static/js/pl.js | 89.65 kB | 0% static/js/pt-BR.js | 182.89 kB | 0% static/js/th.js | 181.58 kB | 0% static/js/uk.js | 215.35 kB | 0% static/js/resize-observer.js | 18.37 kB | 0% static/js/BackgroundImage.js | 120.54 kB | 0% static/js/ReportRouter.js | 1.16 MB | 0% static/js/narrow.js | 638.11 kB | 0% static/js/TransactionList.js | 106.22 kB | 0% static/js/wide.js | 164.15 kB | 0% static/js/AppliedFilters.js | 9.71 kB | 0% static/js/usePayeeRuleCounts.js | 10.04 kB | 0% static/js/useTransactionBatchActions.js | 13.23 kB | 0% static/js/FormulaEditor.js | 1.04 MB | 0% </div> </details> --- #### loot-core **Total** Files count | Total bundle size | % Changed ----------- | ----------------- | --------- 1 | 5.82 MB → 5.83 MB (+7.28 kB) | +0.12% <details> <summary>Changeset</summary> File | Δ | Size ---- | - | ---- `home/runner/work/actual/actual/packages/loot-core/src/shared/constants.ts` | 🆕 +44 B | 0 B → 44 B `home/runner/work/actual/actual/packages/loot-core/src/server/payees/app.ts` | 📈 +4.69 kB (+198.18%) | 2.37 kB → 7.06 kB `home/runner/work/actual/actual/packages/loot-core/src/server/importers/ynab5.ts` | 📈 +1.47 kB (+4.96%) | 29.57 kB → 31.04 kB `home/runner/work/actual/actual/packages/loot-core/src/server/api.ts` | 📈 +802 B (+3.02%) | 25.94 kB → 26.72 kB `home/runner/work/actual/actual/packages/loot-core/src/server/aql/schema/index.ts` | 📈 +304 B (+2.57%) | 11.57 kB → 11.87 kB </details> <details> <summary>View detailed bundle breakdown</summary> <div> **Added** Asset | File Size | % Changed ----- | --------- | --------- kcab.worker.xpMPZEN9.js | 0 B → 5.83 MB (+5.83 MB) | - **Removed** Asset | File Size | % Changed ----- | --------- | --------- kcab.worker.CVw5oNPx.js | 5.82 MB → 0 B (-5.82 MB) | -100% **Bigger** No assets were bigger **Smaller** No assets were smaller **Unchanged** No assets were unchanged </div> </details> --- #### api **Total** Files count | Total bundle size | % Changed ----------- | ----------------- | --------- 1 | 4.43 MB → 4.44 MB (+6.61 kB) | +0.15% <details> <summary>Changeset</summary> File | Δ | Size ---- | - | ---- `src/shared/constants.ts` | 🆕 +40 B | 0 B → 40 B `src/server/payees/app.ts` | 📈 +4.31 kB (+209.89%) | 2.05 kB → 6.36 kB `src/server/importers/ynab5.ts` | 📈 +1.31 kB (+4.95%) | 26.39 kB → 27.7 kB `src/server/api.ts` | 📈 +706 B (+3.04%) | 22.7 kB → 23.39 kB `src/server/aql/schema/index.ts` | 📈 +272 B (+2.55%) | 10.41 kB → 10.68 kB </details> <details> <summary>View detailed bundle breakdown</summary> <div> **Added** No assets were added **Removed** No assets were removed **Bigger** Asset | File Size | % Changed ----- | --------- | --------- bundle.api.js | 4.43 MB → 4.44 MB (+6.61 kB) | +0.15% **Smaller** No assets were smaller **Unchanged** No assets were unchanged </div> </details> </details> <!--- bundlestats-action-comment key:combined end ---> --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
GiteaMirror added the pull-request label 2026-04-18 08:21:35 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/actual#32283