Skip to content

feat(sitemap): resolve and link redirect targets in the route listing - #7111

Merged
eddieferrer merged 1 commit into
mainfrom
fix/route-listing-function-redirect
Jul 28, 2026
Merged

feat(sitemap): resolve and link redirect targets in the route listing#7111
eddieferrer merged 1 commit into
mainfrom
fix/route-listing-function-redirect

Conversation

@eddieferrer

@eddieferrer eddieferrer commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

What

The Redirects section of /ui-site-map bound each route's redirect straight to
<router-link>'s to. vue-router also allows redirect to be a function, which
isn't a valid to — so /lend/:category (routes.js:221) warned about an
invalid prop and rendered the function's own source as its link text.

You can see this here: https://www.development.kiva.org/ui-site-map particularly the redirect section below.

Redirect rows now resolve like the prod/dev rows above them, with param inputs
for /lend/:category, /lend-beta/:id and /funded/:id. A typed param flows
into both sides of the row:

lend/:category   → /lend-by-category/:category
lend/agriculture → /lend-by-category/agriculture
lend-beta/2468   → /lend/2468

How the dynamic target resolves

parseFunctionRedirect reads the function's source, taking the first path-like
literal and rewriting ${to.params.x} to :x. It's pattern-based rather than
special-cased, so future dynamic redirects work too, falling back to
(dynamic redirect) when the source isn't readable.

Two deliberate constraints:

  • The function is never called. It assigns window.location.href in the
    browser and throws on the server, so calling it to preview the target would
    navigate off the sitemap page.
  • The target is a plain <a href>, not a <router-link>.
    /lend-by-category is served externally and has no route, so router-link
    would warn No match found for location.

Function redirects aren't valid <router-link> `to` values, so /lend/:category
warned about an invalid prop and rendered its function source as link text.
Redirect rows now get param inputs and a target read from the function source.
@eddieferrer
eddieferrer merged commit d28b2e6 into main Jul 28, 2026
7 checks passed
@eddieferrer
eddieferrer deleted the fix/route-listing-function-redirect branch July 28, 2026 21:00
kiva-robot added a commit that referenced this pull request Jul 29, 2026
## [3.81.0-rc.1](v3.80.0...v3.81.0-rc.1) (2026-07-29)

### 🎉 New Features

* [MP-3057] - goal in review slide 4 ([#7089](#7089)) ([4db4ab2](4db4ab2))
* create slides 5 to 7 to goal in review modal ([636bf35](636bf35))
* meta event cleanup ([#7108](#7108)) ([8bf4c15](8bf4c15))
* **sitemap:** resolve and link redirect targets in the route listing ([#7111](#7111)) ([d28b2e6](d28b2e6))

### 🐛 Bugfixes

* align comment section visibility with legacy showSocialInfo rules ([83d7da3](83d7da3))
* beta page minor tweaks ([#7117](#7117)) ([cc7bf6a](cc7bf6a))
* **borrower-profile:** show comments only to privileged users ([94d21c0](94d21c0))
* conflicts ([8d5ef8a](8d5ef8a))
* **esiHead:** read the basket cookie instead of creating a basket ([2442ed2](2442ed2))
* font size in collective impact section ([939f93c](939f93c))
* hide borrower profile comments on anonymized loans for all users ([ad908b7](ad908b7))
* in-progress goal copy in form slide ([672ad7d](672ad7d))
* lint issue ([0478e38](0478e38))
* require lending to the loan for fundraising comment eligibility ([9ed01b2](9ed01b2))
* resolve issues with date picker on transaction beta ([#7112](#7112)) ([1effc61](1effc61))
* solve design comments ([1585b60](1585b60))
* unrelevant comment ([39595d1](39595d1))

### 🪚 Refactors

* **borrower-profile:** drop canAddComment gating from LoanComments ([d4efb82](d4efb82))

### 🔍 Tests

* **esiHead:** cover the basket-gated shop query ([114bcc1](114bcc1))

### 🧹 Chores

* **deps-dev:** bump @babel/core from 7.24.5 to 7.29.7 ([#7094](#7094)) ([ab4e380](ab4e380))
* **deps-dev:** bump postcss from 8.5.10 to 8.5.12 ([#7091](#7091)) ([476cde0](476cde0))
* **deps-dev:** bump postcss from 8.5.12 to 8.5.18 ([#7101](#7101)) ([0375b47](0375b47))
* **deps:** bump @grpc/grpc-js from 1.9.13 to 1.14.4 ([#6979](#6979)) ([c18472a](c18472a))
* **deps:** bump auth0-js from 9.19.2 to 10.0.0 ([#6886](#6886)) ([20fc0d0](20fc0d0))
* **deps:** bump axios from 1.13.5 to 1.18.1 ([#7073](#7073)) ([e2cc6d1](e2cc6d1))
* **deps:** bump body-parser from 1.20.4 to 1.20.6 ([#7077](#7077)) ([5b1e248](5b1e248))
* **deps:** bump immutable from 5.1.5 to 5.1.9 ([#7083](#7083)) ([9b9fab6](9b9fab6))
* **deps:** bump json-schema and jsprim ([#7099](#7099)) ([8e77dd8](8e77dd8))
* **deps:** bump piscina from 4.7.0 to 4.9.3 ([#7009](#7009)) ([875d847](875d847))
* **deps:** bump serialize-javascript from 7.0.4 to 7.0.7 ([#7096](#7096)) ([7004bf6](7004bf6))
* **deps:** bump svgo from 3.3.3 to 3.3.4 ([#7084](#7084)) ([05f7bd9](05f7bd9))
* **deps:** bump the minor-patch-other group across 1 directory with 30 updates ([#7100](#7100)) ([a348e75](a348e75))
* **deps:** bump uuid from 8.3.2 to 14.0.0 ([#6861](#6861)) ([e8b3ea1](e8b3ea1))
* **deps:** bump vue3-touch-events from 4.1.8 to 5.0.15 ([#6740](#6740)) ([63a35b9](63a35b9))
* **deps:** bump web-vitals from 3.5.2 to 6.0.0 ([#6941](#6941)) ([31f3af6](31f3af6))
* review and approve deps with install scripts in ui repo ([84fb538](84fb538))
* **test:** silence Vue warnings in the unit test suite ([#7110](#7110)) ([aab489a](aab489a))
* upgrade Node from 20 to 24 ([#7107](#7107)) ([5a26c89](5a26c89))
@kiva-robot

Copy link
Copy Markdown
Collaborator

🎉 This PR is included in version 3.81.0-rc.1 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

kiva-robot added a commit that referenced this pull request Jul 30, 2026
## [3.81.0](v3.80.0...v3.81.0) (2026-07-30)

### 🎉 New Features

* [MP-3057] - goal in review slide 4 ([#7089](#7089)) ([4db4ab2](4db4ab2))
* create slides 5 to 7 to goal in review modal ([636bf35](636bf35))
* meta event cleanup ([#7108](#7108)) ([8bf4c15](8bf4c15))
* **sitemap:** resolve and link redirect targets in the route listing ([#7111](#7111)) ([d28b2e6](d28b2e6))

### 🐛 Bugfixes

* align comment section visibility with legacy showSocialInfo rules ([83d7da3](83d7da3))
* beta page minor tweaks ([#7117](#7117)) ([cc7bf6a](cc7bf6a))
* **borrower-profile:** show comments only to privileged users ([94d21c0](94d21c0))
* conflicts ([8d5ef8a](8d5ef8a))
* **esiHead:** read the basket cookie instead of creating a basket ([2442ed2](2442ed2))
* font size in collective impact section ([939f93c](939f93c))
* hide borrower profile comments on anonymized loans for all users ([ad908b7](ad908b7))
* in-progress goal copy in form slide ([672ad7d](672ad7d))
* lint issue ([0478e38](0478e38))
* require lending to the loan for fundraising comment eligibility ([9ed01b2](9ed01b2))
* resolve issues with date picker on transaction beta ([#7112](#7112)) ([1effc61](1effc61))
* solve design comments ([1585b60](1585b60))
* unrelevant comment ([39595d1](39595d1))
* update kv-components and kv-shop with latest versions to support header experiment ([d7e631a](d7e631a))

### 🪚 Refactors

* **borrower-profile:** drop canAddComment gating from LoanComments ([d4efb82](d4efb82))

### 🔍 Tests

* **esiHead:** cover the basket-gated shop query ([114bcc1](114bcc1))

### 🧹 Chores

* **deps-dev:** bump @babel/core from 7.24.5 to 7.29.7 ([#7094](#7094)) ([ab4e380](ab4e380))
* **deps-dev:** bump postcss from 8.5.10 to 8.5.12 ([#7091](#7091)) ([476cde0](476cde0))
* **deps-dev:** bump postcss from 8.5.12 to 8.5.18 ([#7101](#7101)) ([0375b47](0375b47))
* **deps:** bump @grpc/grpc-js from 1.9.13 to 1.14.4 ([#6979](#6979)) ([c18472a](c18472a))
* **deps:** bump auth0-js from 9.19.2 to 10.0.0 ([#6886](#6886)) ([20fc0d0](20fc0d0))
* **deps:** bump axios from 1.13.5 to 1.18.1 ([#7073](#7073)) ([e2cc6d1](e2cc6d1))
* **deps:** bump body-parser from 1.20.4 to 1.20.6 ([#7077](#7077)) ([5b1e248](5b1e248))
* **deps:** bump immutable from 5.1.5 to 5.1.9 ([#7083](#7083)) ([9b9fab6](9b9fab6))
* **deps:** bump json-schema and jsprim ([#7099](#7099)) ([8e77dd8](8e77dd8))
* **deps:** bump piscina from 4.7.0 to 4.9.3 ([#7009](#7009)) ([875d847](875d847))
* **deps:** bump serialize-javascript from 7.0.4 to 7.0.7 ([#7096](#7096)) ([7004bf6](7004bf6))
* **deps:** bump svgo from 3.3.3 to 3.3.4 ([#7084](#7084)) ([05f7bd9](05f7bd9))
* **deps:** bump the minor-patch-other group across 1 directory with 30 updates ([#7100](#7100)) ([a348e75](a348e75))
* **deps:** bump uuid from 8.3.2 to 14.0.0 ([#6861](#6861)) ([e8b3ea1](e8b3ea1))
* **deps:** bump vue3-touch-events from 4.1.8 to 5.0.15 ([#6740](#6740)) ([63a35b9](63a35b9))
* **deps:** bump web-vitals from 3.5.2 to 6.0.0 ([#6941](#6941)) ([31f3af6](31f3af6))
* **release:** 3.81.0-rc.1 [skip ci] ([0163e6b](0163e6b)), closes [#7089](#7089) [#7108](#7108) [#7111](#7111) [#7117](#7117) [#7112](#7112) [#7094](#7094) [#7091](#7091) [#7101](#7101) [#6979](#6979) [#6886](#6886) [#7073](#7073) [#7077](#7077) [#7083](#7083) [#7099](#7099) [#7009](#7009) [#7096](#7096) [#7084](#7084) [#7100](#7100) [#6861](#6861) [#6740](#6740) [#6941](#6941) [#7110](#7110) [#7107](#7107)
* **release:** 3.81.0-rc.2 [skip ci] ([be0c580](be0c580))
* review and approve deps with install scripts in ui repo ([84fb538](84fb538))
* **test:** silence Vue warnings in the unit test suite ([#7110](#7110)) ([aab489a](aab489a))
* upgrade Node from 20 to 24 ([#7107](#7107)) ([5a26c89](5a26c89))
@kiva-robot

Copy link
Copy Markdown
Collaborator

🎉 This PR is included in version 3.81.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants