From f5160a73c5ca378ad210326597072f61ec65418a Mon Sep 17 00:00:00 2001 From: Mike de Bock <1261006+mikedebock@users.noreply.github.com> Date: Mon, 3 Jun 2024 15:12:55 +0200 Subject: [PATCH] fix: resolve links with story.full_slug (#24) --- .changeset/serious-windows-pay.md | 5 +++++ src/lib/resolvers/linkResolvers.test.ts | 13 +++++++++++++ src/lib/resolvers/linkResolvers.ts | 12 ++++++++++++ 3 files changed, 30 insertions(+) create mode 100644 .changeset/serious-windows-pay.md diff --git a/.changeset/serious-windows-pay.md b/.changeset/serious-windows-pay.md new file mode 100644 index 0000000..9d16bf3 --- /dev/null +++ b/.changeset/serious-windows-pay.md @@ -0,0 +1,5 @@ +--- +'@labdigital/storyblok-graphql-codegen-terraform': patch +--- + +Fix bug in link resolver for internal links without context.links diff --git a/src/lib/resolvers/linkResolvers.test.ts b/src/lib/resolvers/linkResolvers.test.ts index d6ff3b4..01a820a 100644 --- a/src/lib/resolvers/linkResolvers.test.ts +++ b/src/lib/resolvers/linkResolvers.test.ts @@ -59,6 +59,19 @@ describe('linkResolvers', () => { expect(result?.newTab).toBe(false) }) + it('resolves an internal url without `links` in context', () => { + const result = resolvers.Article.url( + { url: { id: '1', linktype: 'story', anchor: 'test-hash', story: { full_slug: '/article/test-article-story' } } }, + null, + {} + ) + expect(result?.url).toBe('/article/test-article-story#test-hash') + expect(result?.hash).toBe('test-hash') + expect(result?.pathname).toBe('/article/test-article-story') + expect(result?.type).toBe('internal') + expect(result?.newTab).toBe(false) + }) + it('ignores an internal url with `links` in context if the link does not exist', () => { const result = resolvers.Article.url( { url: { id: '1', linktype: 'story', anchor: 'test-hash' } }, diff --git a/src/lib/resolvers/linkResolvers.ts b/src/lib/resolvers/linkResolvers.ts index 5eabfbb..0a01067 100644 --- a/src/lib/resolvers/linkResolvers.ts +++ b/src/lib/resolvers/linkResolvers.ts @@ -113,6 +113,18 @@ export const toStoryblokLink = ( return undefined } + return { + type: 'internal', + hash: link.anchor, + newTab: link.target === '_blank', // internal links are not newTab by default + url: + urlResolver(fullSlug, context) + + (link.anchor ? `#${link.anchor}` : ''), + pathname: urlResolver(fullSlug, context), + } + } else if (context && link.story?.full_slug) { + const fullSlug = link.story.full_slug + return { type: 'internal', hash: link.anchor,