Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
1634b99
add url replace map single type
MarBert Sep 24, 2024
c3f272b
add changeset
MarBert Sep 24, 2024
c0093d2
refactor for linting
MarBert Sep 24, 2024
e9dfb8d
add codec, fetch and make for urlreplacemap
MarBert Sep 25, 2024
3bfc82e
add required to url
MarBert Sep 25, 2024
8606f2a
Merge branch 'DEV-1950-add-urlreplacemap-to-strapi' into DEV-1951-add…
MarBert Sep 25, 2024
c700529
test, populate, refactor
petros-double-test1 Sep 30, 2024
9147ad0
Merge branch 'main' into DEV-1951-add-urlreplacemap-codec
tommaso1 Sep 30, 2024
7944f3d
Merge branch 'main' into DEV-1951-add-urlreplacemap-codec
MarBert Oct 3, 2024
5b803bf
Update apps/nextjs-website/src/lib/strapi/__tests__/urlReplaceMap.tes…
tommaso1 Oct 3, 2024
b77b667
Update apps/nextjs-website/src/lib/strapi/__tests__/urlReplaceMap.tes…
tommaso1 Oct 3, 2024
85c919d
fix import
petros-double-test1 Oct 3, 2024
349b0a9
Merge branch 'main' into DEV-1951-add-urlreplacemap-codec
tommaso1 Oct 3, 2024
20dab09
Merge branch 'main' into DEV-1951-add-urlreplacemap-codec
tommaso1 Oct 8, 2024
d9a4ea7
Update apps/nextjs-website/src/lib/strapi/codecs/UrlReplaceMapCodec.ts
tommaso1 Oct 8, 2024
938019c
Fix test
petros-double-test1 Oct 8, 2024
831ca5c
delete healthy cobras
petros-double-test1 Oct 8, 2024
75aa67c
add icon
petros-double-test1 Oct 8, 2024
80ffa18
rename type
petros-double-test1 Oct 8, 2024
9736ab4
rename type
petros-double-test1 Oct 8, 2024
51f5ccc
changeset
petros-double-test1 Oct 8, 2024
59aaf53
Merge branch 'main' into DEV-1951-add-urlreplacemap-codec
marcobottaro Oct 8, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/lemon-pets-brake.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"nextjs-website": patch
---

Add UrlReplaceMapCodec and mapping function
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import { UrlReplaceMapCodec } from '../codecs/UrlReplaceMapCodec';
import * as Either from 'fp-ts/lib/Either';
import { productJson } from './fixtures/product';
import { makeUrlReplaceMap } from '../makeProps/makeUrlReplaceMap';
import { pipe } from 'fp-ts/lib/function';
import { mediaRasterJson } from './fixtures/media';

const strapiResponse = {
data: {
id: 1,
attributes: {
createdAt: '2024-09-30T10:12:44.888Z',
updatedAt: '2024-09-30T10:12:45.562Z',
publishedAt: '2024-09-30T10:12:45.561Z',
urlToGuide: [
{
id: 1,
url: 'aaaa',
version: '2',
guide: {
data: {
id: 1,
attributes: {
title: 'aaa',
slug: 'aaaa',
createdAt: '2024-09-30T10:12:08.182Z',
updatedAt: '2024-09-30T10:12:24.805Z',
publishedAt: '2024-09-30T10:12:24.802Z',
locale: 'en',
image: mediaRasterJson,
mobileImage: mediaRasterJson,
listItems: [
{ id: 1, text: 'rhhtrhrthrt' },
{ id: 2, text: 'fdsafdsagtyhtyh' },
{ id: 3, text: 'hrhrhthrtyrth' },
],
product: productJson,
versions: [],
bannerLinks: [],
seo: null,
},
},
},
},
],
},
},
meta: {},
};

describe('UrlReplaceMapCodec', () => {
it('should decode strapi UrlReplaceMapCodec', () => {
const decodeResponse = UrlReplaceMapCodec.decode(strapiResponse);
expect(Either.isRight(decodeResponse)).toBeTruthy();
});

it('Should correctly convert the map into a record', () => {
const validation = UrlReplaceMapCodec.decode(strapiResponse);
const result = pipe(
validation,
Either.fold(
(left) => {
console.error('Error:', left);
return null; // or handle the error as needed
},
(right) => {
console.log('Success:', right);
return right;
}
)
);
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const urlReplaceMap = makeUrlReplaceMap(result!);

expect(urlReplaceMap).toEqual({
aaaa: 'firma-con-io/guides/aaaa/2',
});
});
});
22 changes: 22 additions & 0 deletions apps/nextjs-website/src/lib/strapi/codecs/UrlReplaceMapCodec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import * as t from 'io-ts/lib';
import { GuideCodec } from './GuidesCodec';
import { NullToUndefinedCodec } from './NullToUndefinedCodec';

const UrlToGuideCodec = t.strict({
id: t.number,
url: t.string,
version: t.union([NullToUndefinedCodec, t.string]),
guide: t.strict({
data: t.union([NullToUndefinedCodec, GuideCodec]),
}),
});

export const UrlReplaceMapCodec = t.strict({
data: t.strict({
attributes: t.strict({
urlToGuide: t.array(UrlToGuideCodec),
}),
}),
});

export type StrapiUrlReplaceMap = t.TypeOf<typeof UrlReplaceMapCodec>;
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { fetchFromStrapi } from '../fetchFromStrapi';
import { UrlReplaceMapCodec } from '../codecs/UrlReplaceMapCodec';
import qs from 'qs';

const makeStrapiUrlReplaceMapPopulate = () =>
qs.stringify({
populate: [
'urlToGuide.guide.*',
'urlToGuide.guide.image',
'urlToGuide.guide.mobileImage',
'urlToGuide.guide.listItems',
'urlToGuide.guide.product.*',
'urlToGuide.guide.versions.*',
'urlToGuide.guide.seo.*',
'urlToGuide.guide.product.bannerLinks.*',
'urlToGuide.guide.product.bannerLinks.icon',
],
});

export const fetchUrlReplaceMap = fetchFromStrapi(
'url-replace-map',
makeStrapiUrlReplaceMapPopulate(),
UrlReplaceMapCodec
);
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { StrapiUrlReplaceMap } from '../codecs/UrlReplaceMapCodec';

export type UrlReplaceMap = Record<string, string>;

export function makeUrlReplaceMap(
urlReplacemap: StrapiUrlReplaceMap
): UrlReplaceMap {
const map = urlReplacemap.data.attributes.urlToGuide.reduce((map, obj) => {
return {
...map,
[obj.url]: `${
obj.guide.data?.attributes.product.data.attributes.slug
}/guides/${obj.guide.data?.attributes.slug}${
obj.version ? `/${obj.version}` : ''
}`,
};
}, {} as UrlReplaceMap);
return map;
}
Loading