Skip to content

Commit 663b3c1

Browse files
committed
fix passing result into onComplete
1 parent 6799556 commit 663b3c1

File tree

2 files changed

+30
-8
lines changed

2 files changed

+30
-8
lines changed

.changeset/happy-actors-pretend.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@solidjs/router": patch
3+
---
4+
5+
fix passing result into onComplete

src/data/action.ts

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
import { $TRACK, createMemo, createSignal, JSX, onCleanup, getOwner } from "solid-js";
22
import { isServer } from "solid-js/web";
33
import { useRouter } from "../routing.js";
4-
import type { RouterContext, Submission, SubmissionStub, Navigator, NarrowResponse } from "../types.js";
4+
import type {
5+
RouterContext,
6+
Submission,
7+
SubmissionStub,
8+
Navigator,
9+
NarrowResponse
10+
} from "../types.js";
511
import { mockBase } from "../utils.js";
612
import { cacheKeyOp, hashKey, revalidate, query } from "./query.js";
713

@@ -47,7 +53,8 @@ export function useSubmission<T extends Array<any>, U, V>(
4753
{},
4854
{
4955
get(_, property) {
50-
if (submissions.length === 0 && property === "clear" || property === "retry") return (() => {});
56+
if ((submissions.length === 0 && property === "clear") || property === "retry")
57+
return () => {};
5158
return submissions[submissions.length - 1]?.[property as keyof Submission<T, U>];
5259
}
5360
}
@@ -62,14 +69,14 @@ export function useAction<T extends Array<any>, U, V>(action: Action<T, U, V>) {
6269
export function action<T extends Array<any>, U = void>(
6370
fn: (...args: T) => Promise<U>,
6471
name?: string
65-
): Action<T, U>
72+
): Action<T, U>;
6673
export function action<T extends Array<any>, U = void>(
6774
fn: (...args: T) => Promise<U>,
68-
options?: { name?: string; onComplete?: (s: Submission<T, U>) => void }
69-
): Action<T, U>
75+
options?: { name?: string; onComplete?: (s: Submission<T, U>) => boolean }
76+
): Action<T, U>;
7077
export function action<T extends Array<any>, U = void>(
7178
fn: (...args: T) => Promise<U>,
72-
options: string | { name?: string; onComplete?: (s: Submission<T, U>) => void } = {}
79+
options: string | { name?: string; onComplete?: (s: Submission<T, U>) => boolean } = {}
7380
): Action<T, U> {
7481
function mutate(this: { r: RouterContext; f?: HTMLFormElement }, ...variables: T) {
7582
const router = this.r;
@@ -84,7 +91,17 @@ export function action<T extends Array<any>, U = void>(
8491
function handler(error?: boolean) {
8592
return async (res: any) => {
8693
const result = await handleResponse(res, error, router.navigatorFactory());
87-
o.onComplete && o.onComplete(submission);
94+
let retry = null;
95+
!o.onComplete?.({
96+
...submission,
97+
result: result?.data,
98+
error: result?.error,
99+
pending: false,
100+
retry() {
101+
return retry = submission.retry();
102+
}
103+
});
104+
if (retry) return retry;
88105
if (!result) return submission.clear();
89106
setResult(result);
90107
if (result.error && !form) throw result.error;
@@ -106,7 +123,7 @@ export function action<T extends Array<any>, U = void>(
106123
return !result();
107124
},
108125
clear() {
109-
router.submissions[1](v => v.filter(i => i.input !== variables));
126+
router.submissions[1](v => v.filter(i => i !== submission));
110127
},
111128
retry() {
112129
setResult(undefined);

0 commit comments

Comments
 (0)