@prezly/theme-kit-nextjs 2.0.0-0 → 2.0.0-2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -13
- package/build/@types/global.d.js +1 -0
- package/build/adapter-nextjs/api-handlers/fetchGalleries.js +26 -18
- package/build/adapter-nextjs/api-handlers/fetchStories.js +36 -20
- package/build/adapter-nextjs/api-handlers/index.js +2 -3
- package/build/adapter-nextjs/getNewsroomServerSideProps.js +15 -10
- package/build/adapter-nextjs/getNewsroomStaticProps.js +14 -10
- package/build/adapter-nextjs/index.js +6 -7
- package/build/adapter-nextjs/page-props/category.js +115 -91
- package/build/adapter-nextjs/page-props/gallery.js +85 -61
- package/build/adapter-nextjs/page-props/galleryAlbum.js +61 -44
- package/build/adapter-nextjs/page-props/home.js +81 -62
- package/build/adapter-nextjs/page-props/index.js +8 -9
- package/build/adapter-nextjs/page-props/lib/types.js +1 -2
- package/build/adapter-nextjs/page-props/search.js +23 -24
- package/build/adapter-nextjs/page-props/sitemap/SitemapBuilder.js +28 -45
- package/build/adapter-nextjs/page-props/sitemap/createPaths.js +12 -14
- package/build/adapter-nextjs/page-props/sitemap/getServerSideProps.js +32 -30
- package/build/adapter-nextjs/page-props/sitemap/index.js +4 -5
- package/build/adapter-nextjs/page-props/sitemap/types.js +1 -2
- package/build/adapter-nextjs/page-props/story.js +74 -55
- package/build/adapter-nextjs/page-props/storyPreview.js +26 -21
- package/build/adapter-nextjs/processRequest.js +33 -20
- package/build/adapter-nextjs/processStaticRequest.js +18 -11
- package/build/components-nextjs/PageSeo/PageSeo.js +81 -71
- package/build/components-nextjs/PageSeo/index.js +2 -3
- package/build/components-nextjs/PageSeo/lib/getAbsoluteUrl.js +4 -5
- package/build/components-nextjs/PageSeo/lib/types.js +1 -2
- package/build/components-nextjs/StorySeo/StorySeo.js +67 -41
- package/build/components-nextjs/StorySeo/index.js +1 -2
- package/build/components-nextjs/document.js +29 -19
- package/build/components-nextjs/index.js +3 -4
- package/build/data-fetching/api/PrezlyApi.js +205 -185
- package/build/data-fetching/api/getPrezlyApi.js +20 -16
- package/build/data-fetching/api/index.js +1 -2
- package/build/data-fetching/api/queries.js +71 -34
- package/build/data-fetching/index.js +3 -4
- package/build/data-fetching/lib/getAlgoliaSettings.js +21 -17
- package/build/data-fetching/lib/getEnvVariables.js +33 -29
- package/build/data-fetching/lib/index.js +4 -5
- package/build/data-fetching/lib/isSdkError.js +2 -3
- package/build/data-fetching/lib/isUuid.js +2 -3
- package/build/data-fetching/types.js +1 -2
- package/build/index.js +9 -10
- package/build/infinite-loading/index.js +4 -5
- package/build/infinite-loading/types.js +1 -2
- package/build/infinite-loading/useInfiniteGalleriesLoading.js +41 -32
- package/build/infinite-loading/useInfiniteLoading.js +48 -37
- package/build/infinite-loading/useInfiniteStoriesLoading.js +54 -44
- package/build/intl/index.d.ts +1 -1
- package/build/intl/index.js +4 -5
- package/build/intl/index.js.map +1 -1
- package/build/intl/languages.js +135 -97
- package/build/intl/languages.js.map +1 -1
- package/build/intl/locale.d.ts +0 -1
- package/build/intl/locale.js +47 -97
- package/build/intl/locale.js.map +1 -1
- package/build/intl/localeConfig.d.ts +3 -1
- package/build/intl/localeConfig.js +20 -13
- package/build/intl/localeConfig.js.map +1 -1
- package/build/intl/localeList.js +1 -108
- package/build/intl/localeObject.js +79 -74
- package/build/intl/localeObject.js.map +1 -1
- package/build/newsroom-context/context.js +34 -20
- package/build/newsroom-context/hooks/index.js +11 -12
- package/build/newsroom-context/hooks/useAlgoliaSettings.js +4 -5
- package/build/newsroom-context/hooks/useCategories.js +4 -5
- package/build/newsroom-context/hooks/useCompanyInformation.js +4 -5
- package/build/newsroom-context/hooks/useCurrentCategory.js +4 -5
- package/build/newsroom-context/hooks/useCurrentLocale.js +4 -5
- package/build/newsroom-context/hooks/useCurrentStory.js +4 -5
- package/build/newsroom-context/hooks/useGetLinkLocaleSlug.js +15 -15
- package/build/newsroom-context/hooks/useGetTranslationUrl.js +48 -44
- package/build/newsroom-context/hooks/useLanguages.js +4 -5
- package/build/newsroom-context/hooks/useNewsroom.js +4 -5
- package/build/newsroom-context/hooks/useNewsroomContext.js +9 -10
- package/build/newsroom-context/index.js +2 -3
- package/build/sentry/client.js +3 -4
- package/build/sentry/common.js +25 -24
- package/build/sentry/index.js +2 -3
- package/build/sentry/server.js +3 -4
- package/build/types.js +1 -2
- package/build/utils/boilerplate.js +4 -13
- package/build/utils/constants.js +1 -2
- package/build/utils/getAssetsUrl.js +3 -4
- package/build/utils/getDataRequestLink.js +5 -7
- package/build/utils/getLocalizedCategoryData.js +30 -24
- package/build/utils/getNewsroomLogoUrl.js +12 -13
- package/build/utils/getPrivacyPortalUrl.js +10 -8
- package/build/utils/getStoryPublicationDate.js +8 -9
- package/build/utils/getUploadcareGroupUrl.js +4 -5
- package/build/utils/index.js +10 -11
- package/build/utils/isEmbargoStory.js +2 -3
- package/package.json +17 -2
- package/build/tsconfig.tsbuildinfo +0 -1
|
@@ -1,37 +1,41 @@
|
|
|
1
1
|
import parseDataUrl from 'parse-data-url';
|
|
2
2
|
function decodeJson(json) {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
3
|
+
try {
|
|
4
|
+
const decoded = JSON.parse(json);
|
|
5
|
+
if (decoded && typeof decoded === 'object') {
|
|
6
|
+
return decoded;
|
|
8
7
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
} catch {
|
|
9
|
+
// passthru
|
|
10
|
+
}
|
|
11
|
+
return {};
|
|
13
12
|
}
|
|
14
13
|
function decodeHttpEnv(header) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
return {}; // unsupported data-uri
|
|
14
|
+
if (header.startsWith('data:')) {
|
|
15
|
+
const parsed = parseDataUrl(header);
|
|
16
|
+
if (parsed && parsed.contentType === 'application/json') {
|
|
17
|
+
const data = parsed.toBuffer().toString('utf-8');
|
|
18
|
+
return decodeJson(data);
|
|
22
19
|
}
|
|
23
|
-
return
|
|
20
|
+
return {}; // unsupported data-uri
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return decodeJson(header);
|
|
24
24
|
}
|
|
25
25
|
export function getEnvVariables(req) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
|
|
26
|
+
if (typeof window !== 'undefined') {
|
|
27
|
+
throw new Error('"getEnvVariables" should only be used on back-end side.');
|
|
28
|
+
}
|
|
29
|
+
const headerName = (process.env.HTTP_ENV_HEADER || '').toLowerCase();
|
|
30
|
+
if (headerName && req) {
|
|
31
|
+
const header = req.headers[headerName];
|
|
32
|
+
const httpEnv = decodeHttpEnv(header || '');
|
|
33
|
+
return {
|
|
34
|
+
...process.env,
|
|
35
|
+
...httpEnv
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
...process.env
|
|
40
|
+
};
|
|
41
|
+
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
export { getAlgoliaSettings } from
|
|
2
|
-
export { getEnvVariables } from
|
|
3
|
-
export { isSdkError } from
|
|
4
|
-
export { isUuid } from
|
|
5
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
export { getAlgoliaSettings } from "./getAlgoliaSettings.js";
|
|
2
|
+
export { getEnvVariables } from "./getEnvVariables.js";
|
|
3
|
+
export { isSdkError } from "./isSdkError.js";
|
|
4
|
+
export { isUuid } from "./isUuid.js";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=types.js.map
|
|
1
|
+
export {};
|
package/build/index.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
4
|
-
export * from
|
|
5
|
-
export * from
|
|
6
|
-
export * from
|
|
7
|
-
export * from
|
|
8
|
-
export * from
|
|
9
|
-
export * from
|
|
10
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
export * from "./adapter-nextjs/index.js";
|
|
2
|
+
export * from "./components-nextjs/index.js";
|
|
3
|
+
export * from "./data-fetching/index.js";
|
|
4
|
+
export * from "./infinite-loading/index.js";
|
|
5
|
+
export * from "./intl/index.js";
|
|
6
|
+
export * from "./newsroom-context/index.js";
|
|
7
|
+
export * from "./sentry/index.js";
|
|
8
|
+
export * from "./types.js";
|
|
9
|
+
export * from "./utils/index.js";
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
export { useInfiniteLoading } from
|
|
2
|
-
export { useInfiniteStoriesLoading } from
|
|
3
|
-
export { useInfiniteGalleriesLoading } from
|
|
4
|
-
export * from
|
|
5
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
export { useInfiniteLoading } from "./useInfiniteLoading.js";
|
|
2
|
+
export { useInfiniteStoriesLoading } from "./useInfiniteStoriesLoading.js";
|
|
3
|
+
export { useInfiniteGalleriesLoading } from "./useInfiniteGalleriesLoading.js";
|
|
4
|
+
export * from "./types.js";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=types.js.map
|
|
1
|
+
export {};
|
|
@@ -1,40 +1,49 @@
|
|
|
1
|
-
import { useInfiniteLoading } from
|
|
1
|
+
import { useInfiniteLoading } from "./useInfiniteLoading.js";
|
|
2
2
|
async function fetchGalleries(page, pageSize) {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
3
|
+
const result = await fetch('/api/fetch-galleries', {
|
|
4
|
+
method: 'POST',
|
|
5
|
+
headers: {
|
|
6
|
+
'Content-Type': 'application/json'
|
|
7
|
+
},
|
|
8
|
+
body: JSON.stringify({
|
|
9
|
+
page,
|
|
10
|
+
pageSize
|
|
11
|
+
})
|
|
12
|
+
});
|
|
13
|
+
if (!result.ok) {
|
|
14
|
+
const {
|
|
15
|
+
message
|
|
16
|
+
} = await result.json();
|
|
17
|
+
throw new Error(message);
|
|
18
|
+
}
|
|
19
|
+
return result.json();
|
|
18
20
|
}
|
|
21
|
+
|
|
19
22
|
/**
|
|
20
23
|
* NOTE: This hook depends on the presence of a Next API route (/api/fetch-galleries)!
|
|
21
24
|
* The handler for this route is exported from `apiHandlers/fetchGalleries.ts` file.
|
|
22
25
|
* See https://github.com/prezly/theme-nextjs-bea/blob/d381e9878187ca98815d240d3ffdf10a75993c14/pages/media/index.tsx#L23 for usage example
|
|
23
26
|
*/
|
|
24
27
|
export function useInfiniteGalleriesLoading(initialGalleries, pagination) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
40
|
-
|
|
28
|
+
const {
|
|
29
|
+
canLoadMore,
|
|
30
|
+
data,
|
|
31
|
+
isLoading,
|
|
32
|
+
loadMore
|
|
33
|
+
} = useInfiniteLoading({
|
|
34
|
+
fetchingFn: async (nextPage, pageSize) => {
|
|
35
|
+
const {
|
|
36
|
+
galleries
|
|
37
|
+
} = await fetchGalleries(nextPage, pageSize);
|
|
38
|
+
return galleries;
|
|
39
|
+
},
|
|
40
|
+
initialData: initialGalleries,
|
|
41
|
+
pagination
|
|
42
|
+
});
|
|
43
|
+
return {
|
|
44
|
+
canLoadMore,
|
|
45
|
+
galleries: data,
|
|
46
|
+
isLoading,
|
|
47
|
+
loadMoreGalleries: loadMore
|
|
48
|
+
};
|
|
49
|
+
}
|
|
@@ -1,39 +1,50 @@
|
|
|
1
1
|
import { useAsync } from '@react-hookz/web';
|
|
2
2
|
import { useCallback, useEffect, useState } from 'react';
|
|
3
|
-
export function useInfiniteLoading({
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
3
|
+
export function useInfiniteLoading({
|
|
4
|
+
fetchingFn,
|
|
5
|
+
initialData,
|
|
6
|
+
pagination
|
|
7
|
+
}) {
|
|
8
|
+
const [data, setData] = useState(initialData);
|
|
9
|
+
const [currentPage, setCurrentPage] = useState(pagination.currentPage);
|
|
10
|
+
const {
|
|
11
|
+
itemsTotal,
|
|
12
|
+
pageSize
|
|
13
|
+
} = pagination;
|
|
14
|
+
const pagesTotal = Math.ceil(itemsTotal / pageSize);
|
|
15
|
+
const canLoadMore = currentPage < pagesTotal;
|
|
16
|
+
const [{
|
|
17
|
+
error,
|
|
18
|
+
status
|
|
19
|
+
}, {
|
|
20
|
+
execute: loadMoreFn
|
|
21
|
+
}] = useAsync(async () => {
|
|
22
|
+
const nextPage = currentPage + 1;
|
|
23
|
+
const newData = await fetchingFn(nextPage, pageSize);
|
|
24
|
+
setCurrentPage(nextPage);
|
|
25
|
+
setData(currentData => [...currentData, ...newData]);
|
|
26
|
+
});
|
|
27
|
+
const loadMore = useCallback(() => {
|
|
28
|
+
if (canLoadMore) {
|
|
29
|
+
loadMoreFn();
|
|
30
|
+
}
|
|
31
|
+
}, [canLoadMore, loadMoreFn]);
|
|
32
|
+
const resetData = useCallback(() => {
|
|
33
|
+
setData(initialData);
|
|
34
|
+
setCurrentPage(pagination.currentPage);
|
|
35
|
+
}, [pagination.currentPage, initialData]);
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
if (error) {
|
|
38
|
+
// eslint-disable-next-line no-console
|
|
39
|
+
console.error(error);
|
|
40
|
+
}
|
|
41
|
+
}, [error]);
|
|
42
|
+
return {
|
|
43
|
+
canLoadMore,
|
|
44
|
+
currentPage,
|
|
45
|
+
data,
|
|
46
|
+
isLoading: status === 'loading',
|
|
47
|
+
loadMore,
|
|
48
|
+
resetData
|
|
49
|
+
};
|
|
50
|
+
}
|
|
@@ -1,53 +1,63 @@
|
|
|
1
1
|
import { useEffect } from 'react';
|
|
2
|
-
import { useCurrentLocale } from
|
|
3
|
-
import { useInfiniteLoading } from
|
|
2
|
+
import { useCurrentLocale } from "../newsroom-context/index.js";
|
|
3
|
+
import { useInfiniteLoading } from "./useInfiniteLoading.js";
|
|
4
4
|
async function fetchStories(page, pageSize, category, locale, include) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
|
|
5
|
+
const result = await fetch('/api/fetch-stories', {
|
|
6
|
+
method: 'POST',
|
|
7
|
+
headers: {
|
|
8
|
+
'Content-Type': 'application/json'
|
|
9
|
+
},
|
|
10
|
+
body: JSON.stringify({
|
|
11
|
+
page,
|
|
12
|
+
pageSize,
|
|
13
|
+
category,
|
|
14
|
+
include,
|
|
15
|
+
...(locale && {
|
|
16
|
+
localeCode: locale.toUnderscoreCode()
|
|
17
|
+
})
|
|
18
|
+
})
|
|
19
|
+
});
|
|
20
|
+
if (!result.ok) {
|
|
21
|
+
const {
|
|
22
|
+
message
|
|
23
|
+
} = await result.json();
|
|
24
|
+
throw new Error(message);
|
|
25
|
+
}
|
|
26
|
+
return result.json();
|
|
25
27
|
}
|
|
28
|
+
|
|
26
29
|
/**
|
|
27
30
|
* NOTE: This hook depends on the presence of a Next API route (/api/fetch-stories)!
|
|
28
31
|
* The handler for this route is exported from `apiHandlers/fetchStories.ts` file.
|
|
29
32
|
* See https://github.com/prezly/theme-nextjs-bea/blob/d381e9878187ca98815d240d3ffdf10a75993c14/pages/index.tsx#L24 for usage example
|
|
30
33
|
*/
|
|
31
34
|
export function useInfiniteStoriesLoading(initialStories, pagination, category, include) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
},
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
|
|
35
|
+
const currentLocale = useCurrentLocale();
|
|
36
|
+
const {
|
|
37
|
+
canLoadMore,
|
|
38
|
+
data,
|
|
39
|
+
isLoading,
|
|
40
|
+
loadMore,
|
|
41
|
+
resetData
|
|
42
|
+
} = useInfiniteLoading({
|
|
43
|
+
fetchingFn: async (nextPage, pageSize) => {
|
|
44
|
+
const {
|
|
45
|
+
stories
|
|
46
|
+
} = await fetchStories(nextPage, pageSize, category, currentLocale, include);
|
|
47
|
+
return stories;
|
|
48
|
+
},
|
|
49
|
+
initialData: initialStories,
|
|
50
|
+
pagination
|
|
51
|
+
});
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
if (category?.id) {
|
|
54
|
+
resetData();
|
|
55
|
+
}
|
|
56
|
+
}, [category?.id, resetData]);
|
|
57
|
+
return {
|
|
58
|
+
canLoadMore,
|
|
59
|
+
isLoading,
|
|
60
|
+
loadMoreStories: loadMore,
|
|
61
|
+
stories: data
|
|
62
|
+
};
|
|
63
|
+
}
|
package/build/intl/index.d.ts
CHANGED
package/build/intl/index.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export
|
|
4
|
-
export * from
|
|
5
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
export * from "./languages.js";
|
|
2
|
+
export * from "./locale.js";
|
|
3
|
+
export * from "./localeConfig.js";
|
|
4
|
+
export * from "./localeObject.js";
|
package/build/intl/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/intl/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/intl/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
|