@prezly/theme-kit-nextjs 1.6.3-0 → 1.6.4-1

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.
Files changed (166) hide show
  1. package/README.md +30 -0
  2. package/build/adapter-nextjs/getNewsroomServerSideProps.js +9 -63
  3. package/build/adapter-nextjs/getNewsroomServerSideProps.js.map +1 -1
  4. package/build/adapter-nextjs/index.js +2 -14
  5. package/build/adapter-nextjs/index.js.map +1 -1
  6. package/build/adapter-nextjs/processRequest.js +10 -25
  7. package/build/adapter-nextjs/processRequest.js.map +1 -1
  8. package/build/components-nextjs/PageSeo/PageSeo.d.ts +12 -0
  9. package/build/components-nextjs/PageSeo/PageSeo.js +74 -0
  10. package/build/components-nextjs/PageSeo/PageSeo.js.map +1 -0
  11. package/build/components-nextjs/PageSeo/index.d.ts +2 -0
  12. package/build/components-nextjs/PageSeo/index.js +3 -0
  13. package/build/components-nextjs/PageSeo/index.js.map +1 -0
  14. package/build/components-nextjs/PageSeo/lib/getAbsoluteUrl.d.ts +1 -0
  15. package/build/components-nextjs/PageSeo/lib/getAbsoluteUrl.js +7 -0
  16. package/build/components-nextjs/PageSeo/lib/getAbsoluteUrl.js.map +1 -0
  17. package/build/components-nextjs/PageSeo/lib/types.d.ts +4 -0
  18. package/build/components-nextjs/PageSeo/lib/types.js +2 -0
  19. package/build/components-nextjs/PageSeo/lib/types.js.map +1 -0
  20. package/build/components-nextjs/Sitemap/SitemapBuilder.d.ts +11 -0
  21. package/build/components-nextjs/Sitemap/SitemapBuilder.js +47 -0
  22. package/build/components-nextjs/Sitemap/SitemapBuilder.js.map +1 -0
  23. package/build/components-nextjs/Sitemap/createPaths.d.ts +2 -0
  24. package/build/components-nextjs/Sitemap/createPaths.js +15 -0
  25. package/build/components-nextjs/Sitemap/createPaths.js.map +1 -0
  26. package/build/components-nextjs/Sitemap/getInitialProps.d.ts +2 -0
  27. package/build/components-nextjs/Sitemap/getInitialProps.js +26 -0
  28. package/build/components-nextjs/Sitemap/getInitialProps.js.map +1 -0
  29. package/build/components-nextjs/Sitemap/index.d.ts +4 -0
  30. package/build/components-nextjs/Sitemap/index.js +5 -0
  31. package/build/components-nextjs/Sitemap/index.js.map +1 -0
  32. package/build/components-nextjs/Sitemap/types.d.ts +5 -0
  33. package/build/components-nextjs/Sitemap/types.js +2 -0
  34. package/build/components-nextjs/Sitemap/types.js.map +1 -0
  35. package/build/components-nextjs/StorySeo/StorySeo.d.ts +11 -0
  36. package/build/components-nextjs/StorySeo/StorySeo.js +39 -0
  37. package/build/components-nextjs/StorySeo/StorySeo.js.map +1 -0
  38. package/build/components-nextjs/StorySeo/index.d.ts +1 -0
  39. package/build/components-nextjs/StorySeo/index.js +2 -0
  40. package/build/components-nextjs/StorySeo/index.js.map +1 -0
  41. package/build/components-nextjs/index.d.ts +3 -0
  42. package/build/components-nextjs/index.js +4 -0
  43. package/build/components-nextjs/index.js.map +1 -0
  44. package/build/data-fetching/api/PrezlyApi.js +132 -297
  45. package/build/data-fetching/api/PrezlyApi.js.map +1 -1
  46. package/build/data-fetching/api/getPrezlyApi.js +5 -9
  47. package/build/data-fetching/api/getPrezlyApi.js.map +1 -1
  48. package/build/data-fetching/api/index.js +2 -14
  49. package/build/data-fetching/api/index.js.map +1 -1
  50. package/build/data-fetching/api/languages.js +43 -85
  51. package/build/data-fetching/api/languages.js.map +1 -1
  52. package/build/data-fetching/api/queries.js +13 -45
  53. package/build/data-fetching/api/queries.js.map +1 -1
  54. package/build/data-fetching/constants.js +2 -5
  55. package/build/data-fetching/constants.js.map +1 -1
  56. package/build/data-fetching/getAssetsUrl.js +3 -7
  57. package/build/data-fetching/getAssetsUrl.js.map +1 -1
  58. package/build/data-fetching/getLocalizedCategoryData.js +15 -32
  59. package/build/data-fetching/getLocalizedCategoryData.js.map +1 -1
  60. package/build/data-fetching/getNewsroomLogoUrl.js +6 -12
  61. package/build/data-fetching/getNewsroomLogoUrl.js.map +1 -1
  62. package/build/data-fetching/getPrivacyPortalUrl.js +3 -7
  63. package/build/data-fetching/getPrivacyPortalUrl.js.map +1 -1
  64. package/build/data-fetching/getStoryPublicationDate.js +2 -6
  65. package/build/data-fetching/getStoryPublicationDate.js.map +1 -1
  66. package/build/data-fetching/getUploadcareGroupUrl.js +3 -7
  67. package/build/data-fetching/getUploadcareGroupUrl.js.map +1 -1
  68. package/build/data-fetching/index.js +10 -22
  69. package/build/data-fetching/index.js.map +1 -1
  70. package/build/data-fetching/lib/getAlgoliaSettings.js +6 -10
  71. package/build/data-fetching/lib/getAlgoliaSettings.js.map +1 -1
  72. package/build/data-fetching/lib/getEnvVariables.d.ts +1 -1
  73. package/build/data-fetching/lib/getEnvVariables.js +11 -29
  74. package/build/data-fetching/lib/getEnvVariables.js.map +1 -1
  75. package/build/data-fetching/lib/index.js +1 -5
  76. package/build/data-fetching/lib/index.js.map +1 -1
  77. package/build/data-fetching/types.js +1 -2
  78. package/build/index.d.ts +2 -0
  79. package/build/index.js +7 -17
  80. package/build/index.js.map +1 -1
  81. package/build/infinite-loading/apiHandlers/fetchGalleries.d.ts +2 -0
  82. package/build/infinite-loading/apiHandlers/fetchGalleries.js +19 -0
  83. package/build/infinite-loading/apiHandlers/fetchGalleries.js.map +1 -0
  84. package/build/infinite-loading/apiHandlers/fetchStories.d.ts +2 -0
  85. package/build/infinite-loading/apiHandlers/fetchStories.js +21 -0
  86. package/build/infinite-loading/apiHandlers/fetchStories.js.map +1 -0
  87. package/build/infinite-loading/apiHandlers/index.d.ts +2 -0
  88. package/build/infinite-loading/apiHandlers/index.js +3 -0
  89. package/build/infinite-loading/apiHandlers/index.js.map +1 -0
  90. package/build/infinite-loading/index.d.ts +5 -0
  91. package/build/infinite-loading/index.js +6 -0
  92. package/build/infinite-loading/index.js.map +1 -0
  93. package/build/infinite-loading/types.d.ts +5 -0
  94. package/build/infinite-loading/types.js +2 -0
  95. package/build/infinite-loading/types.js.map +1 -0
  96. package/build/infinite-loading/useInfiniteGalleriesLoading.d.ts +13 -0
  97. package/build/infinite-loading/useInfiniteGalleriesLoading.js +40 -0
  98. package/build/infinite-loading/useInfiniteGalleriesLoading.js.map +1 -0
  99. package/build/infinite-loading/useInfiniteLoading.d.ts +16 -0
  100. package/build/infinite-loading/useInfiniteLoading.js +39 -0
  101. package/build/infinite-loading/useInfiniteLoading.js.map +1 -0
  102. package/build/infinite-loading/useInfiniteStoriesLoading.d.ts +13 -0
  103. package/build/infinite-loading/useInfiniteStoriesLoading.js +53 -0
  104. package/build/infinite-loading/useInfiniteStoriesLoading.js.map +1 -0
  105. package/build/intl/index.js +4 -21
  106. package/build/intl/index.js.map +1 -1
  107. package/build/intl/lang.js +4 -11
  108. package/build/intl/lang.js.map +1 -1
  109. package/build/intl/locale.js +21 -27
  110. package/build/intl/locale.js.map +1 -1
  111. package/build/intl/localeConfig.js +7 -28
  112. package/build/intl/localeConfig.js.map +1 -1
  113. package/build/intl/localeObject.js +30 -49
  114. package/build/intl/localeObject.js.map +1 -1
  115. package/build/newsroom-context/context.js +18 -34
  116. package/build/newsroom-context/context.js.map +1 -1
  117. package/build/newsroom-context/hooks/index.js +11 -23
  118. package/build/newsroom-context/hooks/index.js.map +1 -1
  119. package/build/newsroom-context/hooks/useAlgoliaSettings.js +3 -7
  120. package/build/newsroom-context/hooks/useAlgoliaSettings.js.map +1 -1
  121. package/build/newsroom-context/hooks/useCategories.js +3 -7
  122. package/build/newsroom-context/hooks/useCategories.js.map +1 -1
  123. package/build/newsroom-context/hooks/useCompanyInformation.js +3 -7
  124. package/build/newsroom-context/hooks/useCompanyInformation.js.map +1 -1
  125. package/build/newsroom-context/hooks/useCurrentCategory.js +3 -7
  126. package/build/newsroom-context/hooks/useCurrentCategory.js.map +1 -1
  127. package/build/newsroom-context/hooks/useCurrentLocale.js +3 -7
  128. package/build/newsroom-context/hooks/useCurrentLocale.js.map +1 -1
  129. package/build/newsroom-context/hooks/useCurrentStory.js +3 -7
  130. package/build/newsroom-context/hooks/useCurrentStory.js.map +1 -1
  131. package/build/newsroom-context/hooks/useGetLinkLocaleSlug.js +11 -15
  132. package/build/newsroom-context/hooks/useGetLinkLocaleSlug.js.map +1 -1
  133. package/build/newsroom-context/hooks/useGetTranslationUrl.js +15 -24
  134. package/build/newsroom-context/hooks/useGetTranslationUrl.js.map +1 -1
  135. package/build/newsroom-context/hooks/useLanguages.js +3 -7
  136. package/build/newsroom-context/hooks/useLanguages.js.map +1 -1
  137. package/build/newsroom-context/hooks/useNewsroom.js +3 -7
  138. package/build/newsroom-context/hooks/useNewsroom.js.map +1 -1
  139. package/build/newsroom-context/hooks/useNewsroomContext.js +4 -8
  140. package/build/newsroom-context/hooks/useNewsroomContext.js.map +1 -1
  141. package/build/newsroom-context/index.js +2 -17
  142. package/build/newsroom-context/index.js.map +1 -1
  143. package/build/types.js +1 -2
  144. package/package.json +6 -3
  145. package/src/components-nextjs/PageSeo/PageSeo.tsx +123 -0
  146. package/src/components-nextjs/PageSeo/index.ts +2 -0
  147. package/src/components-nextjs/PageSeo/lib/getAbsoluteUrl.ts +7 -0
  148. package/src/components-nextjs/PageSeo/lib/types.ts +4 -0
  149. package/src/components-nextjs/Sitemap/SitemapBuilder.ts +56 -0
  150. package/src/components-nextjs/Sitemap/createPaths.ts +21 -0
  151. package/src/components-nextjs/Sitemap/getInitialProps.ts +37 -0
  152. package/src/components-nextjs/Sitemap/index.ts +5 -0
  153. package/src/components-nextjs/Sitemap/types.ts +5 -0
  154. package/src/components-nextjs/StorySeo/StorySeo.tsx +68 -0
  155. package/src/components-nextjs/StorySeo/index.ts +1 -0
  156. package/src/components-nextjs/index.ts +3 -0
  157. package/src/data-fetching/lib/getEnvVariables.ts +5 -3
  158. package/src/index.ts +2 -0
  159. package/src/infinite-loading/apiHandlers/fetchGalleries.ts +24 -0
  160. package/src/infinite-loading/apiHandlers/fetchStories.ts +26 -0
  161. package/src/infinite-loading/apiHandlers/index.ts +2 -0
  162. package/src/infinite-loading/index.ts +5 -0
  163. package/src/infinite-loading/types.ts +5 -0
  164. package/src/infinite-loading/useInfiniteGalleriesLoading.ts +53 -0
  165. package/src/infinite-loading/useInfiniteLoading.ts +66 -0
  166. package/src/infinite-loading/useInfiniteStoriesLoading.ts +81 -0
@@ -0,0 +1,5 @@
1
+ export interface PaginationProps {
2
+ itemsTotal: number;
3
+ currentPage: number;
4
+ pageSize: number;
5
+ }
@@ -0,0 +1,53 @@
1
+ import type { NewsroomGallery } from '@prezly/sdk';
2
+
3
+ import type { PaginationProps } from './types';
4
+ import { useInfiniteLoading } from './useInfiniteLoading';
5
+
6
+ async function fetchGalleries(
7
+ page: number,
8
+ pageSize: number,
9
+ ): Promise<{ galleries: NewsroomGallery[] }> {
10
+ const result = await fetch('/api/fetch-galleries', {
11
+ method: 'POST',
12
+ headers: {
13
+ 'Content-Type': 'application/json',
14
+ },
15
+ body: JSON.stringify({
16
+ page,
17
+ pageSize,
18
+ }),
19
+ });
20
+
21
+ if (!result.ok) {
22
+ const { message } = await result.json();
23
+ throw new Error(message);
24
+ }
25
+
26
+ return result.json();
27
+ }
28
+
29
+ /**
30
+ * NOTE: This hook depends on the presence of a Next API route (/api/fetch-galleries)!
31
+ * The handler for this route is exported from `apiHandlers/fetchGalleries.ts` file.
32
+ * See https://github.com/prezly/theme-nextjs-bea/blob/d381e9878187ca98815d240d3ffdf10a75993c14/pages/media/index.tsx#L23 for usage example
33
+ */
34
+ export function useInfiniteGalleriesLoading(
35
+ initialGalleries: NewsroomGallery[],
36
+ pagination: PaginationProps,
37
+ ) {
38
+ const { canLoadMore, data, isLoading, loadMore } = useInfiniteLoading<NewsroomGallery>({
39
+ fetchingFn: async (nextPage, pageSize) => {
40
+ const { galleries } = await fetchGalleries(nextPage, pageSize);
41
+ return galleries;
42
+ },
43
+ initialData: initialGalleries,
44
+ pagination,
45
+ });
46
+
47
+ return {
48
+ canLoadMore,
49
+ galleries: data,
50
+ isLoading,
51
+ loadMoreGalleries: loadMore,
52
+ };
53
+ }
@@ -0,0 +1,66 @@
1
+ import { useAsync } from '@react-hookz/web';
2
+ import { useCallback, useEffect, useState } from 'react';
3
+
4
+ import type { PaginationProps } from './types';
5
+
6
+ interface Parameters<T> {
7
+ fetchingFn: (page: number, pageSize: number) => Promise<T[]>;
8
+ initialData: T[];
9
+ pagination: PaginationProps;
10
+ }
11
+
12
+ interface State<T> {
13
+ canLoadMore: boolean;
14
+ currentPage: number;
15
+ data: T[];
16
+ isLoading: boolean;
17
+ loadMore: () => void;
18
+ resetData: () => void;
19
+ }
20
+
21
+ export function useInfiniteLoading<T>({
22
+ fetchingFn,
23
+ initialData,
24
+ pagination,
25
+ }: Parameters<T>): State<T> {
26
+ const [data, setData] = useState<T[]>(initialData);
27
+ const [currentPage, setCurrentPage] = useState(pagination.currentPage);
28
+
29
+ const { itemsTotal, pageSize } = pagination;
30
+ const pagesTotal = Math.ceil(itemsTotal / pageSize);
31
+ const canLoadMore = currentPage < pagesTotal;
32
+
33
+ const [{ error, status }, { execute: loadMoreFn }] = useAsync(async () => {
34
+ const nextPage = currentPage + 1;
35
+ const newData = await fetchingFn(nextPage, pageSize);
36
+ setCurrentPage(nextPage);
37
+ setData((currentData) => [...currentData, ...newData]);
38
+ });
39
+
40
+ const loadMore = useCallback(() => {
41
+ if (canLoadMore) {
42
+ loadMoreFn();
43
+ }
44
+ }, [canLoadMore, loadMoreFn]);
45
+
46
+ const resetData = useCallback(() => {
47
+ setData(initialData);
48
+ setCurrentPage(pagination.currentPage);
49
+ }, [pagination.currentPage, initialData]);
50
+
51
+ useEffect(() => {
52
+ if (error) {
53
+ // eslint-disable-next-line no-console
54
+ console.error(error);
55
+ }
56
+ }, [error]);
57
+
58
+ return {
59
+ canLoadMore,
60
+ currentPage,
61
+ data,
62
+ isLoading: status === 'loading',
63
+ loadMore,
64
+ resetData,
65
+ };
66
+ }
@@ -0,0 +1,81 @@
1
+ import type { Category, ExtraStoryFields, Story } from '@prezly/sdk';
2
+ import { useEffect } from 'react';
3
+
4
+ import type { LocaleObject } from '../intl';
5
+ import { useCurrentLocale } from '../newsroom-context';
6
+
7
+ import type { PaginationProps } from './types';
8
+ import { useInfiniteLoading } from './useInfiniteLoading';
9
+
10
+ async function fetchStories<T extends Story = Story>(
11
+ page: number,
12
+ pageSize: number,
13
+ category?: Category,
14
+ locale?: LocaleObject,
15
+ include?: (keyof ExtraStoryFields)[],
16
+ ): Promise<{ stories: T[] }> {
17
+ const result = await fetch('/api/fetch-stories', {
18
+ method: 'POST',
19
+ headers: {
20
+ 'Content-Type': 'application/json',
21
+ },
22
+ body: JSON.stringify({
23
+ page,
24
+ pageSize,
25
+ category,
26
+ include,
27
+ ...(locale && {
28
+ localeCode: locale.toUnderscoreCode(),
29
+ }),
30
+ }),
31
+ });
32
+
33
+ if (!result.ok) {
34
+ const { message } = await result.json();
35
+ throw new Error(message);
36
+ }
37
+
38
+ return result.json();
39
+ }
40
+
41
+ /**
42
+ * NOTE: This hook depends on the presence of a Next API route (/api/fetch-stories)!
43
+ * The handler for this route is exported from `apiHandlers/fetchStories.ts` file.
44
+ * See https://github.com/prezly/theme-nextjs-bea/blob/d381e9878187ca98815d240d3ffdf10a75993c14/pages/index.tsx#L24 for usage example
45
+ */
46
+ export function useInfiniteStoriesLoading<T extends Story = Story>(
47
+ initialStories: T[],
48
+ pagination: PaginationProps,
49
+ category?: Category,
50
+ include?: (keyof ExtraStoryFields)[],
51
+ ) {
52
+ const currentLocale = useCurrentLocale();
53
+
54
+ const { canLoadMore, data, isLoading, loadMore, resetData } = useInfiniteLoading<T>({
55
+ fetchingFn: async (nextPage, pageSize) => {
56
+ const { stories } = await fetchStories<T>(
57
+ nextPage,
58
+ pageSize,
59
+ category,
60
+ currentLocale,
61
+ include,
62
+ );
63
+ return stories;
64
+ },
65
+ initialData: initialStories,
66
+ pagination,
67
+ });
68
+
69
+ useEffect(() => {
70
+ if (category?.id) {
71
+ resetData();
72
+ }
73
+ }, [category?.id, resetData]);
74
+
75
+ return {
76
+ canLoadMore,
77
+ isLoading,
78
+ loadMoreStories: loadMore,
79
+ stories: data,
80
+ };
81
+ }