File tree Expand file tree Collapse file tree 4 files changed +20
-3
lines changed
src/runtime/app/server/remote Expand file tree Collapse file tree 4 files changed +20
-3
lines changed Original file line number Diff line number Diff line change
1
+ ---
2
+ ' @sveltejs/kit ' : patch
3
+ ---
4
+
5
+ fix: ensure uniqueness of ` form.for(...) ` across form functions
Original file line number Diff line number Diff line change @@ -108,14 +108,15 @@ export function form(fn) {
108
108
/** @type {RemoteForm<any>['for'] } */
109
109
value : ( key ) => {
110
110
const { state } = get_request_store ( ) ;
111
- let instance = ( state . form_instances ??= new Map ( ) ) . get ( key ) ;
111
+ const cache_key = __ . id + '|' + JSON . stringify ( key ) ;
112
+ let instance = ( state . form_instances ??= new Map ( ) ) . get ( cache_key ) ;
112
113
113
114
if ( ! instance ) {
114
115
instance = create_instance ( key ) ;
115
116
instance . __ . id = `${ __ . id } /${ encodeURIComponent ( JSON . stringify ( key ) ) } ` ;
116
117
instance . __ . name = __ . name ;
117
118
118
- state . form_instances . set ( key , instance ) ;
119
+ state . form_instances . set ( cache_key , instance ) ;
119
120
}
120
121
121
122
return instance ;
Original file line number Diff line number Diff line change 85
85
<button id ="submit-btn-item- {item }" >Task One for {item }</button >
86
86
</form >
87
87
{/each }
88
+
89
+ <form {...task _two.for (' foo' )}>
90
+ <span id ="form-result-2-foo" >{task_two .for (' foo' ).result }</span >
91
+ <input name =" task" value =" foo2" />
92
+ <button id =" submit-btn-item-2-foo" >Task Two for foo</button >
93
+ </form >
Original file line number Diff line number Diff line change @@ -1640,12 +1640,17 @@ test.describe('remote functions', () => {
1640
1640
) ;
1641
1641
} ) ;
1642
1642
1643
- test ( 'form.for(...) scopes form submission' , async ( { page } ) => {
1643
+ test ( 'form.for(...) scopes form submission' , async ( { page, javaScriptEnabled } ) => {
1644
1644
await page . goto ( '/remote/form' ) ;
1645
1645
await page . click ( '#submit-btn-item-foo' ) ;
1646
1646
await expect ( page . locator ( '#form-result-foo' ) ) . toHaveText ( 'foo' ) ;
1647
1647
await expect ( page . locator ( '#form-result-bar' ) ) . toHaveText ( '' ) ;
1648
1648
await expect ( page . locator ( '#form-result-1' ) ) . toHaveText ( '' ) ;
1649
+
1650
+ await page . click ( '#submit-btn-item-2-foo' ) ;
1651
+ await expect ( page . locator ( '#form-result-2-foo' ) ) . toHaveText ( 'foo2' ) ;
1652
+ await expect ( page . locator ( '#form-result-foo' ) ) . toHaveText ( javaScriptEnabled ? 'foo' : '' ) ;
1653
+ await expect ( page . locator ( '#form-result-2' ) ) . toHaveText ( '' ) ;
1649
1654
} ) ;
1650
1655
1651
1656
test ( 'prerendered entries not called in prod' , async ( { page, clicknav } ) => {
You can’t perform that action at this time.
0 commit comments