Skip to content

Commit fb95592

Browse files
committed
Read [data-turbo-action] during Form Submissions
Closes hotwired/turbo-ios#44 Follow-up to #231 --- This commit follows-up [#231][], which added `[data-turbo-action]` support for idempotent form submissions to maintain parity with `<a>`-initiated Visits. These changes re-use the existent `Navigator.getActionForFormSubmission` function to determine the value for the `VisitOptions.action` options. [#231]: #231
1 parent a72afa7 commit fb95592

File tree

3 files changed

+28
-1
lines changed

3 files changed

+28
-1
lines changed

src/core/drive/navigator.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,9 @@ export class Navigator {
9292
this.view.clearSnapshotCache()
9393
}
9494

95+
const action = this.getActionForFormSubmission(formSubmission)
9596
const { statusCode } = fetchResponse
96-
const visitOptions = { response: { statusCode, responseHTML } }
97+
const visitOptions = { action, response: { statusCode, responseHTML } }
9798
this.proposeVisit(fetchResponse.location, visitOptions)
9899
}
99100
}

src/tests/fixtures/navigation.html

+12
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,18 @@ <h1>Navigation</h1>
3737
<p><a id="same-origin-replace-link" href="/src/tests/fixtures/one.html" data-turbo-action="replace">Same-origin data-turbo-action=replace link</a></p>
3838
<p><form id="same-origin-replace-form-get" action="/src/tests/fixtures/one.html" data-turbo-action="replace"><button>Same-origin data-turbo-action=replace form</button></form></p>
3939
<p><form id="same-origin-replace-form-submitter-get" action="/src/tests/fixtures/one.html"><button data-turbo-action="replace">Same-origin data-turbo-action=replace form</button></form></p>
40+
<p>
41+
<form id="same-origin-replace-form-post" method="post" action="/__turbo/redirect" data-turbo-action="replace">
42+
<input type="hidden" name="path" value="/src/tests/fixtures/one.html">
43+
<button>Same-origin form[method="post"][data-turbo-action=replace]</button>
44+
</form>
45+
</p>
46+
<p>
47+
<form id="same-origin-replace-form-submitter-post" method="post" action="/__turbo/redirect">
48+
<input type="hidden" name="path" value="/src/tests/fixtures/one.html">
49+
<button data-turbo-action="replace">Same-origin form[method="post"] button[data-turbo-action=replace]</button>
50+
</form>
51+
</p>
4052
<p><a id="same-origin-false-link" href="/src/tests/fixtures/one.html" data-turbo="false">Same-origin data-turbo=false link</a></p>
4153
<p data-turbo="false"><a id="same-origin-unannotated-link-inside-false-container" href="/src/tests/fixtures/one.html">Same-origin unannotated link inside data-turbo=false container</a></p>
4254
<p data-turbo="false"><a id="same-origin-true-link-inside-false-container" href="/src/tests/fixtures/one.html" data-turbo="true">Same-origin data-turbo=true link inside data-turbo=false container</a></p>

src/tests/functional/navigation_tests.ts

+14
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,20 @@ export class NavigationTests extends TurboDriveTestCase {
7777
this.assert.equal(await this.visitAction, "replace")
7878
}
7979

80+
async "test following a same-origin POST form[data-turbo-action=replace]"() {
81+
this.clickSelector("#same-origin-replace-form-post button")
82+
await this.nextBody
83+
this.assert.equal(await this.pathname, "/src/tests/fixtures/one.html")
84+
this.assert.equal(await this.visitAction, "replace")
85+
}
86+
87+
async "test following a same-origin POST form button[data-turbo-action=replace]"() {
88+
this.clickSelector("#same-origin-replace-form-submitter-post button")
89+
await this.nextBody
90+
this.assert.equal(await this.pathname, "/src/tests/fixtures/one.html")
91+
this.assert.equal(await this.visitAction, "replace")
92+
}
93+
8094
async "test following a same-origin data-turbo=false link"() {
8195
this.clickSelector("#same-origin-false-link")
8296
await this.nextBody

0 commit comments

Comments
 (0)