@prezly/theme-kit-nextjs 1.18.2 → 2.0.0-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.
- package/build/@types/global.d.js +1 -0
- package/build/adapter-nextjs/api-handlers/fetchGalleries.js +27 -23
- package/build/adapter-nextjs/api-handlers/fetchGalleries.js.map +1 -1
- package/build/adapter-nextjs/api-handlers/fetchStories.js +37 -25
- package/build/adapter-nextjs/api-handlers/fetchStories.js.map +1 -1
- package/build/adapter-nextjs/api-handlers/index.js +2 -8
- package/build/adapter-nextjs/api-handlers/index.js.map +1 -1
- package/build/adapter-nextjs/getNewsroomServerSideProps.js +16 -15
- package/build/adapter-nextjs/getNewsroomServerSideProps.js.map +1 -1
- package/build/adapter-nextjs/getNewsroomStaticProps.js +15 -15
- package/build/adapter-nextjs/getNewsroomStaticProps.js.map +1 -1
- package/build/adapter-nextjs/index.js +6 -23
- package/build/adapter-nextjs/index.js.map +1 -1
- package/build/adapter-nextjs/page-props/category.d.ts +2 -2
- package/build/adapter-nextjs/page-props/category.js +118 -100
- package/build/adapter-nextjs/page-props/category.js.map +1 -1
- package/build/adapter-nextjs/page-props/gallery.js +87 -68
- package/build/adapter-nextjs/page-props/gallery.js.map +1 -1
- package/build/adapter-nextjs/page-props/galleryAlbum.js +64 -53
- package/build/adapter-nextjs/page-props/galleryAlbum.js.map +1 -1
- package/build/adapter-nextjs/page-props/home.d.ts +2 -2
- package/build/adapter-nextjs/page-props/home.js +83 -69
- package/build/adapter-nextjs/page-props/home.js.map +1 -1
- package/build/adapter-nextjs/page-props/index.js +8 -42
- package/build/adapter-nextjs/page-props/index.js.map +1 -1
- package/build/adapter-nextjs/page-props/lib/types.js +1 -3
- package/build/adapter-nextjs/page-props/search.js +25 -31
- package/build/adapter-nextjs/page-props/search.js.map +1 -1
- package/build/adapter-nextjs/page-props/sitemap/SitemapBuilder.js +29 -50
- package/build/adapter-nextjs/page-props/sitemap/SitemapBuilder.js.map +1 -1
- package/build/adapter-nextjs/page-props/sitemap/createPaths.js +13 -19
- package/build/adapter-nextjs/page-props/sitemap/createPaths.js.map +1 -1
- package/build/adapter-nextjs/page-props/sitemap/getServerSideProps.js +33 -35
- package/build/adapter-nextjs/page-props/sitemap/getServerSideProps.js.map +1 -1
- package/build/adapter-nextjs/page-props/sitemap/index.js +4 -25
- package/build/adapter-nextjs/page-props/sitemap/index.js.map +1 -1
- package/build/adapter-nextjs/page-props/sitemap/types.js +1 -3
- package/build/adapter-nextjs/page-props/story.js +77 -64
- package/build/adapter-nextjs/page-props/story.js.map +1 -1
- package/build/adapter-nextjs/page-props/storyPreview.js +27 -26
- package/build/adapter-nextjs/page-props/storyPreview.js.map +1 -1
- package/build/adapter-nextjs/processRequest.js +34 -25
- package/build/adapter-nextjs/processRequest.js.map +1 -1
- package/build/adapter-nextjs/processStaticRequest.js +19 -16
- package/build/adapter-nextjs/processStaticRequest.js.map +1 -1
- package/build/components-nextjs/PageSeo/PageSeo.js +84 -78
- package/build/components-nextjs/PageSeo/PageSeo.js.map +1 -1
- package/build/components-nextjs/PageSeo/index.js +2 -21
- package/build/components-nextjs/PageSeo/index.js.map +1 -1
- package/build/components-nextjs/PageSeo/lib/getAbsoluteUrl.js +5 -10
- package/build/components-nextjs/PageSeo/lib/getAbsoluteUrl.js.map +1 -1
- package/build/components-nextjs/PageSeo/lib/types.js +1 -3
- package/build/components-nextjs/StorySeo/StorySeo.js +69 -47
- package/build/components-nextjs/StorySeo/StorySeo.js.map +1 -1
- package/build/components-nextjs/StorySeo/index.js +1 -6
- package/build/components-nextjs/StorySeo/index.js.map +1 -1
- package/build/components-nextjs/document.js +31 -48
- package/build/components-nextjs/document.js.map +1 -1
- package/build/components-nextjs/index.js +3 -10
- package/build/components-nextjs/index.js.map +1 -1
- package/build/data-fetching/api/PrezlyApi.d.ts +4 -5
- package/build/data-fetching/api/PrezlyApi.js +207 -192
- package/build/data-fetching/api/PrezlyApi.js.map +1 -1
- package/build/data-fetching/api/getPrezlyApi.js +21 -21
- package/build/data-fetching/api/getPrezlyApi.js.map +1 -1
- package/build/data-fetching/api/index.js +1 -18
- package/build/data-fetching/api/index.js.map +1 -1
- package/build/data-fetching/api/queries.js +76 -47
- package/build/data-fetching/api/queries.js.map +1 -1
- package/build/data-fetching/index.js +3 -20
- package/build/data-fetching/index.js.map +1 -1
- package/build/data-fetching/lib/getAlgoliaSettings.js +22 -22
- package/build/data-fetching/lib/getAlgoliaSettings.js.map +1 -1
- package/build/data-fetching/lib/getEnvVariables.js +35 -38
- package/build/data-fetching/lib/getEnvVariables.js.map +1 -1
- package/build/data-fetching/lib/index.js +4 -12
- package/build/data-fetching/lib/index.js.map +1 -1
- package/build/data-fetching/lib/isSdkError.js +3 -8
- package/build/data-fetching/lib/isSdkError.js.map +1 -1
- package/build/data-fetching/lib/isUuid.js +3 -8
- package/build/data-fetching/lib/isUuid.js.map +1 -1
- package/build/data-fetching/types.js +1 -3
- package/build/index.js +9 -26
- package/build/index.js.map +1 -1
- package/build/infinite-loading/index.js +4 -25
- package/build/infinite-loading/index.js.map +1 -1
- package/build/infinite-loading/types.js +1 -3
- package/build/infinite-loading/useInfiniteGalleriesLoading.js +42 -37
- package/build/infinite-loading/useInfiniteGalleriesLoading.js.map +1 -1
- package/build/infinite-loading/useInfiniteLoading.js +50 -43
- package/build/infinite-loading/useInfiniteLoading.js.map +1 -1
- package/build/infinite-loading/useInfiniteStoriesLoading.d.ts +2 -2
- package/build/infinite-loading/useInfiniteStoriesLoading.js +56 -50
- package/build/infinite-loading/useInfiniteStoriesLoading.js.map +1 -1
- package/build/intl/index.d.ts +1 -1
- package/build/intl/index.js +4 -26
- package/build/intl/index.js.map +1 -1
- package/build/intl/languages.d.ts +1 -1
- package/build/intl/languages.js +146 -122
- package/build/intl/languages.js.map +1 -1
- package/build/intl/locale.js +52 -107
- package/build/intl/locale.js.map +1 -1
- package/build/intl/localeConfig.d.ts +1 -2
- package/build/intl/localeConfig.js +7 -14
- package/build/intl/localeConfig.js.map +1 -1
- package/build/intl/localeList.d.ts +4 -2
- package/build/intl/localeList.js +1 -109
- package/build/intl/localeList.js.map +1 -1
- package/build/intl/localeObject.js +80 -82
- package/build/intl/localeObject.js.map +1 -1
- package/build/newsroom-context/context.js +35 -25
- package/build/newsroom-context/context.js.map +1 -1
- package/build/newsroom-context/hooks/index.js +11 -28
- package/build/newsroom-context/hooks/index.js.map +1 -1
- package/build/newsroom-context/hooks/useAlgoliaSettings.js +5 -10
- package/build/newsroom-context/hooks/useAlgoliaSettings.js.map +1 -1
- package/build/newsroom-context/hooks/useCategories.js +5 -10
- package/build/newsroom-context/hooks/useCategories.js.map +1 -1
- package/build/newsroom-context/hooks/useCompanyInformation.js +5 -10
- package/build/newsroom-context/hooks/useCompanyInformation.js.map +1 -1
- package/build/newsroom-context/hooks/useCurrentCategory.js +5 -10
- package/build/newsroom-context/hooks/useCurrentCategory.js.map +1 -1
- package/build/newsroom-context/hooks/useCurrentLocale.js +5 -10
- package/build/newsroom-context/hooks/useCurrentLocale.js.map +1 -1
- package/build/newsroom-context/hooks/useCurrentStory.js +5 -10
- package/build/newsroom-context/hooks/useCurrentStory.js.map +1 -1
- package/build/newsroom-context/hooks/useGetLinkLocaleSlug.js +17 -21
- package/build/newsroom-context/hooks/useGetLinkLocaleSlug.js.map +1 -1
- package/build/newsroom-context/hooks/useGetTranslationUrl.js +52 -55
- package/build/newsroom-context/hooks/useGetTranslationUrl.js.map +1 -1
- package/build/newsroom-context/hooks/useLanguages.js +5 -10
- package/build/newsroom-context/hooks/useLanguages.js.map +1 -1
- package/build/newsroom-context/hooks/useNewsroom.js +5 -10
- package/build/newsroom-context/hooks/useNewsroom.js.map +1 -1
- package/build/newsroom-context/hooks/useNewsroomContext.js +11 -16
- package/build/newsroom-context/hooks/useNewsroomContext.js.map +1 -1
- package/build/newsroom-context/index.js +2 -22
- package/build/newsroom-context/index.js.map +1 -1
- package/build/sentry/client.js +4 -9
- package/build/sentry/client.js.map +1 -1
- package/build/sentry/common.js +26 -29
- package/build/sentry/common.js.map +1 -1
- package/build/sentry/index.js +2 -8
- package/build/sentry/index.js.map +1 -1
- package/build/sentry/server.js +4 -9
- package/build/sentry/server.js.map +1 -1
- package/build/types.d.ts +2 -2
- package/build/types.js +1 -3
- package/build/utils/boilerplate.js +7 -22
- package/build/utils/boilerplate.js.map +1 -1
- package/build/utils/constants.js +3 -7
- package/build/utils/constants.js.map +1 -1
- package/build/utils/getAssetsUrl.js +4 -9
- package/build/utils/getAssetsUrl.js.map +1 -1
- package/build/utils/getDataRequestLink.js +6 -12
- package/build/utils/getDataRequestLink.js.map +1 -1
- package/build/utils/getLocalizedCategoryData.js +33 -33
- package/build/utils/getLocalizedCategoryData.js.map +1 -1
- package/build/utils/getNewsroomLogoUrl.js +15 -21
- package/build/utils/getNewsroomLogoUrl.js.map +1 -1
- package/build/utils/getPrivacyPortalUrl.js +11 -13
- package/build/utils/getPrivacyPortalUrl.js.map +1 -1
- package/build/utils/getStoryPublicationDate.js +9 -14
- package/build/utils/getStoryPublicationDate.js.map +1 -1
- package/build/utils/getUploadcareGroupUrl.js +5 -10
- package/build/utils/getUploadcareGroupUrl.js.map +1 -1
- package/build/utils/index.js +10 -27
- package/build/utils/index.js.map +1 -1
- package/build/utils/isEmbargoStory.js +3 -8
- package/build/utils/isEmbargoStory.js.map +1 -1
- package/package.json +26 -18
- package/build/tsconfig.tsbuildinfo +0 -1
- package/src/@types/global.d.ts +0 -7
- package/src/__mocks__/languages.ts +0 -417
- package/src/__mocks__/story.ts +0 -351
- package/src/adapter-nextjs/api-handlers/fetchGalleries.ts +0 -24
- package/src/adapter-nextjs/api-handlers/fetchStories.ts +0 -26
- package/src/adapter-nextjs/api-handlers/index.ts +0 -2
- package/src/adapter-nextjs/getNewsroomServerSideProps.ts +0 -29
- package/src/adapter-nextjs/getNewsroomStaticProps.ts +0 -29
- package/src/adapter-nextjs/index.ts +0 -6
- package/src/adapter-nextjs/page-props/category.ts +0 -157
- package/src/adapter-nextjs/page-props/gallery.ts +0 -114
- package/src/adapter-nextjs/page-props/galleryAlbum.ts +0 -89
- package/src/adapter-nextjs/page-props/home.ts +0 -113
- package/src/adapter-nextjs/page-props/index.ts +0 -26
- package/src/adapter-nextjs/page-props/lib/types.ts +0 -8
- package/src/adapter-nextjs/page-props/search.ts +0 -53
- package/src/adapter-nextjs/page-props/sitemap/SitemapBuilder.ts +0 -56
- package/src/adapter-nextjs/page-props/sitemap/createPaths.ts +0 -21
- package/src/adapter-nextjs/page-props/sitemap/getServerSideProps.ts +0 -43
- package/src/adapter-nextjs/page-props/sitemap/index.ts +0 -5
- package/src/adapter-nextjs/page-props/sitemap/types.ts +0 -5
- package/src/adapter-nextjs/page-props/story.ts +0 -94
- package/src/adapter-nextjs/page-props/storyPreview.ts +0 -33
- package/src/adapter-nextjs/processRequest.ts +0 -49
- package/src/adapter-nextjs/processStaticRequest.ts +0 -32
- package/src/components-nextjs/PageSeo/PageSeo.tsx +0 -131
- package/src/components-nextjs/PageSeo/index.ts +0 -2
- package/src/components-nextjs/PageSeo/lib/getAbsoluteUrl.ts +0 -7
- package/src/components-nextjs/PageSeo/lib/types.ts +0 -4
- package/src/components-nextjs/StorySeo/StorySeo.tsx +0 -80
- package/src/components-nextjs/StorySeo/index.ts +0 -1
- package/src/components-nextjs/document.tsx +0 -38
- package/src/components-nextjs/index.ts +0 -3
- package/src/data-fetching/api/PrezlyApi.ts +0 -302
- package/src/data-fetching/api/getPrezlyApi.ts +0 -24
- package/src/data-fetching/api/index.ts +0 -1
- package/src/data-fetching/api/queries.ts +0 -51
- package/src/data-fetching/index.ts +0 -3
- package/src/data-fetching/lib/getAlgoliaSettings.ts +0 -29
- package/src/data-fetching/lib/getEnvVariables.ts +0 -46
- package/src/data-fetching/lib/index.ts +0 -4
- package/src/data-fetching/lib/isSdkError.ts +0 -5
- package/src/data-fetching/lib/isUuid.ts +0 -5
- package/src/data-fetching/types.ts +0 -14
- package/src/index.ts +0 -9
- package/src/infinite-loading/index.ts +0 -4
- package/src/infinite-loading/types.ts +0 -5
- package/src/infinite-loading/useInfiniteGalleriesLoading.ts +0 -53
- package/src/infinite-loading/useInfiniteLoading.ts +0 -66
- package/src/infinite-loading/useInfiniteStoriesLoading.ts +0 -81
- package/src/intl/index.ts +0 -4
- package/src/intl/languages.test.ts +0 -232
- package/src/intl/languages.ts +0 -233
- package/src/intl/locale.test.ts +0 -94
- package/src/intl/locale.ts +0 -140
- package/src/intl/localeConfig.js +0 -23
- package/src/intl/localeList.js +0 -110
- package/src/intl/localeObject.test.ts +0 -81
- package/src/intl/localeObject.ts +0 -99
- package/src/newsroom-context/context.tsx +0 -115
- package/src/newsroom-context/hooks/index.ts +0 -11
- package/src/newsroom-context/hooks/useAlgoliaSettings.ts +0 -7
- package/src/newsroom-context/hooks/useCategories.ts +0 -7
- package/src/newsroom-context/hooks/useCompanyInformation.ts +0 -7
- package/src/newsroom-context/hooks/useCurrentCategory.ts +0 -7
- package/src/newsroom-context/hooks/useCurrentLocale.ts +0 -7
- package/src/newsroom-context/hooks/useCurrentStory.ts +0 -7
- package/src/newsroom-context/hooks/useGetLinkLocaleSlug.ts +0 -37
- package/src/newsroom-context/hooks/useGetTranslationUrl.ts +0 -96
- package/src/newsroom-context/hooks/useLanguages.ts +0 -7
- package/src/newsroom-context/hooks/useNewsroom.ts +0 -7
- package/src/newsroom-context/hooks/useNewsroomContext.ts +0 -15
- package/src/newsroom-context/index.ts +0 -2
- package/src/sentry/client.ts +0 -7
- package/src/sentry/common.ts +0 -27
- package/src/sentry/index.ts +0 -2
- package/src/sentry/server.ts +0 -7
- package/src/types.ts +0 -51
- package/src/utils/boilerplate.ts +0 -27
- package/src/utils/constants.ts +0 -3
- package/src/utils/getAssetsUrl.test.ts +0 -9
- package/src/utils/getAssetsUrl.ts +0 -9
- package/src/utils/getDataRequestLink.ts +0 -14
- package/src/utils/getLocalizedCategoryData.ts +0 -47
- package/src/utils/getNewsroomLogoUrl.ts +0 -22
- package/src/utils/getPrivacyPortalUrl.ts +0 -25
- package/src/utils/getStoryPublicationDate.tsx +0 -15
- package/src/utils/getUploadcareGroupUrl.ts +0 -13
- package/src/utils/index.ts +0 -10
- package/src/utils/isEmbargoStory.ts +0 -10
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
const publishedAndAccessible = [
|
|
2
|
-
{ lifecycle_status: { $in: ['published', 'embargo'] } },
|
|
3
|
-
{ visibility: { $in: ['public', 'private', 'embargo'] } },
|
|
4
|
-
];
|
|
5
|
-
|
|
6
|
-
const publishedAndPublic = [
|
|
7
|
-
{ lifecycle_status: { $in: ['published'] } },
|
|
8
|
-
{ visibility: { $in: ['public'] } },
|
|
9
|
-
];
|
|
10
|
-
|
|
11
|
-
export function getSlugQuery(newsroomUuid: string, slug: string) {
|
|
12
|
-
return {
|
|
13
|
-
$and: [
|
|
14
|
-
{ 'newsroom.uuid': { $in: [newsroomUuid] } },
|
|
15
|
-
{ slug: { $eq: slug } },
|
|
16
|
-
...publishedAndAccessible,
|
|
17
|
-
],
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export function getStoriesQuery(newsroomUuid: string, categoryId?: number, localeCode?: string) {
|
|
22
|
-
const query: any = {
|
|
23
|
-
$and: [...publishedAndPublic, { 'newsroom.uuid': { $in: [newsroomUuid] } }],
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
if (categoryId) {
|
|
27
|
-
query.$and.push({ 'category.id': { $any: [categoryId] } });
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
if (localeCode) {
|
|
31
|
-
query.$and.push({ locale: { $in: [localeCode] } });
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
return query;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export function getSortByPublishedDate(order: 'asc' | 'desc') {
|
|
38
|
-
return order === 'desc' ? '-published_at' : 'published_at';
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export function getGalleriesQuery() {
|
|
42
|
-
return {
|
|
43
|
-
$and: [{ status: { $eq: 'public' } }, { images_number: { $gt: 0 } }],
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export function getContactsQuery() {
|
|
48
|
-
return {
|
|
49
|
-
$and: [{ is_featured: { $eq: true } }],
|
|
50
|
-
};
|
|
51
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import type { IncomingMessage } from 'http';
|
|
2
|
-
|
|
3
|
-
import type { AlgoliaSettings } from '../types';
|
|
4
|
-
|
|
5
|
-
import { getEnvVariables } from './getEnvVariables';
|
|
6
|
-
|
|
7
|
-
export function getAlgoliaSettings(req?: IncomingMessage): AlgoliaSettings {
|
|
8
|
-
if (typeof window !== 'undefined') {
|
|
9
|
-
throw new Error('"getAlgoliaSettings" should only be used on back-end side.');
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
// `getEnvVariables` handles both cases for envs parsing - .env and request headers
|
|
13
|
-
const {
|
|
14
|
-
ALGOLIA_API_KEY = '',
|
|
15
|
-
ALGOLIA_APP_ID = 'UI4CNRAHQB',
|
|
16
|
-
ALGOLIA_INDEX = 'public_stories_prod',
|
|
17
|
-
} = getEnvVariables(req);
|
|
18
|
-
|
|
19
|
-
if (!ALGOLIA_API_KEY) {
|
|
20
|
-
// eslint-disable-next-line no-console
|
|
21
|
-
console.error('"ALGOLIA_API_KEY" is not set in env variables. Search will not be enabled');
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
return {
|
|
25
|
-
ALGOLIA_API_KEY,
|
|
26
|
-
ALGOLIA_APP_ID,
|
|
27
|
-
ALGOLIA_INDEX,
|
|
28
|
-
};
|
|
29
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import type { IncomingMessage } from 'http';
|
|
2
|
-
import parseDataUrl from 'parse-data-url';
|
|
3
|
-
|
|
4
|
-
import type { PrezlyEnv } from '../types';
|
|
5
|
-
|
|
6
|
-
function decodeJson(json: string): Record<string, any> {
|
|
7
|
-
try {
|
|
8
|
-
const decoded = JSON.parse(json);
|
|
9
|
-
if (decoded && typeof decoded === 'object') {
|
|
10
|
-
return decoded;
|
|
11
|
-
}
|
|
12
|
-
} catch {
|
|
13
|
-
// passthru
|
|
14
|
-
}
|
|
15
|
-
return {};
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
function decodeHttpEnv(header: string): Record<string, any> {
|
|
19
|
-
if (header.startsWith('data:')) {
|
|
20
|
-
const parsed = parseDataUrl(header);
|
|
21
|
-
if (parsed && parsed.contentType === 'application/json') {
|
|
22
|
-
const data = parsed.toBuffer().toString('utf-8');
|
|
23
|
-
return decodeJson(data);
|
|
24
|
-
}
|
|
25
|
-
return {}; // unsupported data-uri
|
|
26
|
-
}
|
|
27
|
-
return decodeJson(header);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export function getEnvVariables<EnvType extends PrezlyEnv = PrezlyEnv>(
|
|
31
|
-
req?: IncomingMessage,
|
|
32
|
-
): NodeJS.ProcessEnv & EnvType {
|
|
33
|
-
if (typeof window !== 'undefined') {
|
|
34
|
-
throw new Error('"getEnvVariables" should only be used on back-end side.');
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const headerName = (process.env.HTTP_ENV_HEADER || '').toLowerCase();
|
|
38
|
-
|
|
39
|
-
if (headerName && req) {
|
|
40
|
-
const header = req.headers[headerName] as string | undefined;
|
|
41
|
-
const httpEnv = decodeHttpEnv(header || '');
|
|
42
|
-
return { ...process.env, ...httpEnv } as NodeJS.ProcessEnv & EnvType;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return { ...process.env } as NodeJS.ProcessEnv & EnvType;
|
|
46
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export interface AlgoliaSettings {
|
|
2
|
-
ALGOLIA_API_KEY: string;
|
|
3
|
-
ALGOLIA_APP_ID: string;
|
|
4
|
-
ALGOLIA_INDEX: string;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
export interface PrezlyNewsroomEnv {
|
|
8
|
-
PREZLY_ACCESS_TOKEN: string;
|
|
9
|
-
PREZLY_NEWSROOM_UUID: string;
|
|
10
|
-
PREZLY_THEME_UUID?: string;
|
|
11
|
-
PREZLY_MODE?: 'preview';
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export interface PrezlyEnv extends PrezlyNewsroomEnv, AlgoliaSettings {}
|
package/src/index.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export * from './adapter-nextjs';
|
|
2
|
-
export * from './components-nextjs';
|
|
3
|
-
export * from './data-fetching';
|
|
4
|
-
export * from './infinite-loading';
|
|
5
|
-
export * from './intl';
|
|
6
|
-
export * from './newsroom-context';
|
|
7
|
-
export * from './sentry';
|
|
8
|
-
export * from './types';
|
|
9
|
-
export * from './utils';
|
|
@@ -1,53 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,66 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,81 +0,0 @@
|
|
|
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
|
-
}
|
package/src/intl/index.ts
DELETED
|
@@ -1,232 +0,0 @@
|
|
|
1
|
-
import { LANGUAGES } from '../__mocks__/languages';
|
|
2
|
-
import { STORY } from '../__mocks__/story';
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
getCompanyInformation,
|
|
6
|
-
getDefaultLanguage,
|
|
7
|
-
getLanguageByExactLocaleCode,
|
|
8
|
-
getLanguageByNeutralLocaleCode,
|
|
9
|
-
getLanguageByShortRegionCode,
|
|
10
|
-
getLanguageDisplayName,
|
|
11
|
-
getLanguageFromNextLocaleIsoCode,
|
|
12
|
-
getLanguageFromStory,
|
|
13
|
-
getShortestLocaleCode,
|
|
14
|
-
getUsedLanguages,
|
|
15
|
-
} from './languages';
|
|
16
|
-
import { DUMMY_DEFAULT_LOCALE } from './locale';
|
|
17
|
-
import { LocaleObject } from './localeObject';
|
|
18
|
-
|
|
19
|
-
const ALL_LANGUAGES = Object.values(LANGUAGES);
|
|
20
|
-
|
|
21
|
-
describe('getLanguageDisplayName', () => {
|
|
22
|
-
it('returns shortened name when language is the only culture', () => {
|
|
23
|
-
const languages = [LANGUAGES.en, LANGUAGES.fr];
|
|
24
|
-
|
|
25
|
-
expect(getLanguageDisplayName(LANGUAGES.en, languages)).toBe('English');
|
|
26
|
-
expect(getLanguageDisplayName(LANGUAGES.fr, languages)).toBe('Français');
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it('returns full name when language is NOT the only culture', () => {
|
|
30
|
-
const languages = [LANGUAGES.nl_BE, LANGUAGES.nl_NL];
|
|
31
|
-
|
|
32
|
-
expect(getLanguageDisplayName(LANGUAGES.nl_BE, languages)).toBe('Nederlands (België)');
|
|
33
|
-
expect(getLanguageDisplayName(LANGUAGES.nl_NL, languages)).toBe('Nederlands (Nederland)');
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
describe('getDefaultLanguage', () => {
|
|
38
|
-
it('returns the actual default language', () => {
|
|
39
|
-
const languages = [LANGUAGES.en, LANGUAGES.fr];
|
|
40
|
-
|
|
41
|
-
expect(getDefaultLanguage(languages)).toEqual(LANGUAGES.en);
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
it('returns the first language if no default language is set', () => {
|
|
45
|
-
const languages = [LANGUAGES.nl_BE, LANGUAGES.nl_NL];
|
|
46
|
-
|
|
47
|
-
expect(getDefaultLanguage(languages)).toEqual(LANGUAGES.nl_BE);
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
describe('getUsedLanguages', () => {
|
|
52
|
-
it('filters out languages with no published stories', () => {
|
|
53
|
-
const languages = Object.values(LANGUAGES);
|
|
54
|
-
const usedLanguages = getUsedLanguages(languages);
|
|
55
|
-
|
|
56
|
-
expect(usedLanguages).toHaveLength(3);
|
|
57
|
-
expect(usedLanguages.every(({ public_stories_count }) => public_stories_count > 0)).toBe(
|
|
58
|
-
true,
|
|
59
|
-
);
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
describe('getLanguageByExactLocaleCode', () => {
|
|
64
|
-
const languages = [LANGUAGES.nl_BE, LANGUAGES.en];
|
|
65
|
-
|
|
66
|
-
it('returns a languages by its exact locale code', () => {
|
|
67
|
-
expect(getLanguageByExactLocaleCode(languages, LocaleObject.fromAnyCode('nl-BE'))).toEqual(
|
|
68
|
-
LANGUAGES.nl_BE,
|
|
69
|
-
);
|
|
70
|
-
expect(getLanguageByExactLocaleCode(languages, LocaleObject.fromAnyCode('en'))).toEqual(
|
|
71
|
-
LANGUAGES.en,
|
|
72
|
-
);
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
it('returns undefined when there is no langauge with exact locale code', () => {
|
|
76
|
-
expect(getLanguageByExactLocaleCode(languages, LocaleObject.fromAnyCode('nl'))).toBe(
|
|
77
|
-
undefined,
|
|
78
|
-
);
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
describe('getLanguageByNeutralLocaleCode', () => {
|
|
83
|
-
it('prefers default language', () => {
|
|
84
|
-
const languages = [LANGUAGES.en_US, LANGUAGES.en];
|
|
85
|
-
|
|
86
|
-
expect(getLanguageByNeutralLocaleCode(languages, LocaleObject.fromAnyCode('en'))).toEqual(
|
|
87
|
-
LANGUAGES.en,
|
|
88
|
-
);
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
it('prefers used cultures', () => {
|
|
92
|
-
const languages = [
|
|
93
|
-
LANGUAGES.en,
|
|
94
|
-
{ ...LANGUAGES.nl_BE, public_stories_count: 0, stories_count: 0 },
|
|
95
|
-
LANGUAGES.nl_NL,
|
|
96
|
-
];
|
|
97
|
-
|
|
98
|
-
expect(getLanguageByNeutralLocaleCode(languages, LocaleObject.fromAnyCode('nl'))).toEqual(
|
|
99
|
-
LANGUAGES.nl_NL,
|
|
100
|
-
);
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
it('returns first fitting culture from unused cultures', () => {
|
|
104
|
-
const languages = [
|
|
105
|
-
LANGUAGES.en,
|
|
106
|
-
{ ...LANGUAGES.nl_BE, public_stories_count: 0, stories_count: 0 },
|
|
107
|
-
{ ...LANGUAGES.nl_NL, public_stories_count: 0, stories_count: 0 },
|
|
108
|
-
];
|
|
109
|
-
|
|
110
|
-
expect(getLanguageByNeutralLocaleCode(languages, LocaleObject.fromAnyCode('nl'))).toEqual(
|
|
111
|
-
languages[1],
|
|
112
|
-
);
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
describe('getLanguageByShortRegionCode', () => {
|
|
117
|
-
it('prefers default language', () => {
|
|
118
|
-
const languages = [LANGUAGES.nl_BE, { ...LANGUAGES.fr_BE, is_default: true }];
|
|
119
|
-
|
|
120
|
-
expect(getLanguageByShortRegionCode(languages, LocaleObject.fromAnyCode('be'))).toEqual(
|
|
121
|
-
languages[1],
|
|
122
|
-
);
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
it('prefers used cultures', () => {
|
|
126
|
-
const languages = [LANGUAGES.en, LANGUAGES.nl_BE, LANGUAGES.fr_BE];
|
|
127
|
-
|
|
128
|
-
expect(getLanguageByShortRegionCode(languages, LocaleObject.fromAnyCode('be'))).toEqual(
|
|
129
|
-
LANGUAGES.nl_BE,
|
|
130
|
-
);
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
it('returns first fitting culture from unused cultures', () => {
|
|
134
|
-
const languages = [
|
|
135
|
-
LANGUAGES.en,
|
|
136
|
-
LANGUAGES.fr_BE,
|
|
137
|
-
{ ...LANGUAGES.nl_BE, public_stories_count: 0, stories_count: 0 },
|
|
138
|
-
];
|
|
139
|
-
|
|
140
|
-
expect(getLanguageByShortRegionCode(languages, LocaleObject.fromAnyCode('be'))).toEqual(
|
|
141
|
-
LANGUAGES.fr_BE,
|
|
142
|
-
);
|
|
143
|
-
});
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
describe('getLanguageFromNextLocaleIsoCode', () => {
|
|
147
|
-
it('returns default language when no locale code provided or when dummy locale provided', () => {
|
|
148
|
-
expect(getLanguageFromNextLocaleIsoCode(ALL_LANGUAGES)).toEqual(LANGUAGES.en);
|
|
149
|
-
expect(getLanguageFromNextLocaleIsoCode(ALL_LANGUAGES, DUMMY_DEFAULT_LOCALE)).toEqual(
|
|
150
|
-
LANGUAGES.en,
|
|
151
|
-
);
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
it('returns language by exact code first', () => {
|
|
155
|
-
expect(getLanguageFromNextLocaleIsoCode(ALL_LANGUAGES, 'en')).toEqual(LANGUAGES.en);
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
it('returns language by region code second', () => {
|
|
159
|
-
expect(getLanguageFromNextLocaleIsoCode(ALL_LANGUAGES, 'be')).toEqual(LANGUAGES.nl_BE);
|
|
160
|
-
expect(getLanguageFromNextLocaleIsoCode(ALL_LANGUAGES, 'nl')).toEqual(LANGUAGES.nl_NL);
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
it('returns language by neutral code thrid', () => {
|
|
164
|
-
expect(
|
|
165
|
-
getLanguageFromNextLocaleIsoCode(
|
|
166
|
-
ALL_LANGUAGES.filter(({ code }) => code !== 'fr'),
|
|
167
|
-
'fr',
|
|
168
|
-
),
|
|
169
|
-
).toEqual(LANGUAGES.fr_BE);
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
it('returns undefined when no language found', () => {
|
|
173
|
-
expect(getLanguageFromNextLocaleIsoCode(ALL_LANGUAGES, 'zh-Hant')).toEqual(undefined);
|
|
174
|
-
});
|
|
175
|
-
});
|
|
176
|
-
|
|
177
|
-
describe('getLanguageFromStory', () => {
|
|
178
|
-
it('correctly returns language from a story', () => {
|
|
179
|
-
expect(getLanguageFromStory(ALL_LANGUAGES, STORY)).toEqual(LANGUAGES.en);
|
|
180
|
-
});
|
|
181
|
-
});
|
|
182
|
-
|
|
183
|
-
describe('getCompanyInformation', () => {
|
|
184
|
-
it('returns company information from target language', () => {
|
|
185
|
-
expect(getCompanyInformation(ALL_LANGUAGES, LocaleObject.fromAnyCode('nl-BE'))).toEqual(
|
|
186
|
-
LANGUAGES.nl_BE.company_information,
|
|
187
|
-
);
|
|
188
|
-
});
|
|
189
|
-
|
|
190
|
-
it('returns company information from default language if target not found', () => {
|
|
191
|
-
expect(getCompanyInformation(ALL_LANGUAGES, LocaleObject.fromAnyCode('de-DE'))).toEqual(
|
|
192
|
-
LANGUAGES.en.company_information,
|
|
193
|
-
);
|
|
194
|
-
});
|
|
195
|
-
});
|
|
196
|
-
|
|
197
|
-
describe('getShortestLocaleCode', () => {
|
|
198
|
-
it('returns false for default language', () => {
|
|
199
|
-
expect(getShortestLocaleCode(ALL_LANGUAGES, LocaleObject.fromAnyCode('en'))).toBe(false);
|
|
200
|
-
});
|
|
201
|
-
|
|
202
|
-
it('returns neutral language code if it is the only culture with that language', () => {
|
|
203
|
-
expect(
|
|
204
|
-
getShortestLocaleCode(
|
|
205
|
-
ALL_LANGUAGES.filter(({ code }) => code !== 'es_419'),
|
|
206
|
-
LocaleObject.fromAnyCode('es-ES'),
|
|
207
|
-
),
|
|
208
|
-
).toBe('es');
|
|
209
|
-
});
|
|
210
|
-
|
|
211
|
-
it('returns region code if it is the only culture with that region', () => {
|
|
212
|
-
expect(getShortestLocaleCode(ALL_LANGUAGES, LocaleObject.fromAnyCode('en-US'))).toBe('US');
|
|
213
|
-
expect(getShortestLocaleCode(ALL_LANGUAGES, LocaleObject.fromAnyCode('en-GB'))).toBe('GB');
|
|
214
|
-
expect(getShortestLocaleCode(ALL_LANGUAGES, LocaleObject.fromAnyCode('nl-NL'))).toBe('NL');
|
|
215
|
-
expect(getShortestLocaleCode(ALL_LANGUAGES, LocaleObject.fromAnyCode('fr'))).toBe('FR');
|
|
216
|
-
});
|
|
217
|
-
|
|
218
|
-
it('returns full code if it can not be shortened', () => {
|
|
219
|
-
expect(getShortestLocaleCode(ALL_LANGUAGES, LocaleObject.fromAnyCode('fr-BE'))).toBe(
|
|
220
|
-
'fr_BE',
|
|
221
|
-
);
|
|
222
|
-
expect(getShortestLocaleCode(ALL_LANGUAGES, LocaleObject.fromAnyCode('nl-BE'))).toBe(
|
|
223
|
-
'nl_BE',
|
|
224
|
-
);
|
|
225
|
-
});
|
|
226
|
-
|
|
227
|
-
it('returns full code when trying to shorten to region code for es-419', () => {
|
|
228
|
-
expect(getShortestLocaleCode(ALL_LANGUAGES, LocaleObject.fromAnyCode('es-419'))).toBe(
|
|
229
|
-
'es_419',
|
|
230
|
-
);
|
|
231
|
-
});
|
|
232
|
-
});
|