From 5aa7d97396ca79004ba1413e2f75ca9dea4e96d9 Mon Sep 17 00:00:00 2001 From: Paul Chavard Date: Mon, 28 Apr 2025 11:37:22 +0200 Subject: [PATCH] fix refresh action --- .changeset/khaki-brooms-notice.md | 6 ++++++ packages/actions/src/actions.ts | 3 +++ packages/turbo-stream/src/index.ts | 5 +++++ packages/turbo-stream/src/turbo-stream.test.ts | 18 +++++++++++++++++- 4 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 .changeset/khaki-brooms-notice.md diff --git a/.changeset/khaki-brooms-notice.md b/.changeset/khaki-brooms-notice.md new file mode 100644 index 0000000..95a3e98 --- /dev/null +++ b/.changeset/khaki-brooms-notice.md @@ -0,0 +1,6 @@ +--- +'@coldwired/turbo-stream': patch +'@coldwired/actions': patch +--- + +fix refresh action diff --git a/packages/actions/src/actions.ts b/packages/actions/src/actions.ts index a6f43a2..5369a28 100644 --- a/packages/actions/src/actions.ts +++ b/packages/actions/src/actions.ts @@ -253,6 +253,9 @@ export class Actions { private materializeActions(actions: Action[], element: Element): MaterializedAction[] { this._debugMaterializeActions(actions, element); return actions.map((action) => { + if (action.action == 'refresh') { + return { ...action, targets: [] }; + } const targets = getTargetElements(element, action.targets); return { ...action, targets }; }); diff --git a/packages/turbo-stream/src/index.ts b/packages/turbo-stream/src/index.ts index d60538c..34f6cbd 100644 --- a/packages/turbo-stream/src/index.ts +++ b/packages/turbo-stream/src/index.ts @@ -14,6 +14,11 @@ export function parseTurboStream(stream: Element): Action { invariant(stream.tagName == 'TURBO-STREAM', '[turbo-stream] element must be a '); const action = parseActionName(stream); + + if (action == 'refresh') { + return { action, targets: '' }; + } + const delay = parseDelay(stream); const pin = parsePin(stream); const targets = parseTargets(stream); diff --git a/packages/turbo-stream/src/turbo-stream.test.ts b/packages/turbo-stream/src/turbo-stream.test.ts index 1ebd268..0c0e111 100644 --- a/packages/turbo-stream/src/turbo-stream.test.ts +++ b/packages/turbo-stream/src/turbo-stream.test.ts @@ -1,4 +1,4 @@ -import { describe, it, expect, beforeEach } from 'vitest'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; import { Actions } from '@coldwired/actions'; import { parseHTMLDocument } from '@coldwired/utils'; @@ -15,6 +15,22 @@ describe('@coldwired/turbo-stream', () => { //actions.disconnect(); }); + it('should refresh', async () => { + let fetchCalled = false; + let path = ''; + vi.stubGlobal( + 'fetch', + vi.fn((url: string) => { + fetchCalled = true; + path = url; + return Promise.reject({ name: 'AbortError' }); + }), + ); + await renderTurboStream(actions, ''); + expect(fetchCalled).toBeTruthy(); + expect(path).toBe(`${window.location.pathname}${window.location.search}`); + }); + it('should append', async () => { actions.morph(document, parseHTMLDocument('

Bonjour

')); const from = document.body.firstElementChild as HTMLDivElement;