@times-components/ts-components 1.36.1 → 1.37.0

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 (34) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/dist/components/article-header/ArticleHeader.js +15 -14
  3. package/dist/components/article-header/__tests__/ArticleHeader.test.js +24 -170
  4. package/dist/components/recommended-articles/RecommendedArticles.d.ts +4 -5
  5. package/dist/components/recommended-articles/RecommendedArticles.js +15 -26
  6. package/dist/components/recommended-articles/RecommendedArticles.stories.d.ts +5 -1
  7. package/dist/components/recommended-articles/RecommendedArticles.stories.js +26 -52
  8. package/dist/components/recommended-articles/RecommendedFetch.d.ts +6 -0
  9. package/dist/components/recommended-articles/RecommendedFetch.js +12 -0
  10. package/dist/components/recommended-articles/__tests__/RecommendedArticles.test.js +26 -60
  11. package/dist/components/recommended-articles/__tests__/RecommendedFetch.test.d.ts +1 -0
  12. package/dist/components/recommended-articles/__tests__/RecommendedFetch.test.js +14 -0
  13. package/dist/components/recommended-articles/formatters.d.ts +41 -0
  14. package/dist/components/recommended-articles/formatters.js +57 -0
  15. package/dist/fixtures/preview-data/recommended-articles.d.ts +84 -0
  16. package/dist/fixtures/preview-data/recommended-articles.js +351 -0
  17. package/dist/index.d.ts +1 -1
  18. package/dist/index.js +2 -2
  19. package/package.json +6 -6
  20. package/rnw.js +1 -1
  21. package/src/components/article-header/ArticleHeader.tsx +16 -16
  22. package/src/components/article-header/__tests__/ArticleHeader.test.tsx +23 -170
  23. package/src/components/recommended-articles/RecommendedArticles.stories.tsx +41 -58
  24. package/src/components/recommended-articles/RecommendedArticles.tsx +26 -55
  25. package/src/components/recommended-articles/RecommendedFetch.tsx +25 -0
  26. package/src/components/recommended-articles/__tests__/RecommendedArticles.test.tsx +45 -75
  27. package/src/components/recommended-articles/__tests__/RecommendedFetch.test.tsx +23 -0
  28. package/src/components/recommended-articles/__tests__/__snapshots__/RecommendedArticles.test.tsx.snap +10 -55
  29. package/src/components/recommended-articles/__tests__/__snapshots__/RecommendedFetch.test.tsx.snap +9 -0
  30. package/src/components/recommended-articles/formatters.ts +100 -0
  31. package/src/fixtures/preview-data/recommended-articles.ts +385 -0
  32. package/src/index.ts +2 -2
  33. package/src/types/externs.d.ts +0 -7
  34. package/src/components/article-header/__tests__/__snapshots__/ArticleHeader.test.tsx.snap +0 -68
@@ -1,67 +1,33 @@
1
1
  import React from 'react';
2
- import { render, cleanup } from '@testing-library/react';
2
+ import { render } from '@testing-library/react';
3
+ import { useFetch } from '../../../helpers/fetch/FetchProvider';
4
+ import previewData from '../../../fixtures/preview-data/recommended-articles';
3
5
  import { RecommendedArticles } from '../RecommendedArticles';
4
- import { MockedProvider } from '@times-components/provider-test-tools';
5
- import { recommendations } from '@times-components/provider-queries';
6
- const mocks = [
7
- {
8
- delay: 1000,
9
- request: {
10
- query: recommendations,
11
- variables: {
12
- publisher: 'TIMES',
13
- recomArgs: {
14
- userId: '1234',
15
- articleId: '94a01926-719a-11ec-aacf-0736e08b15cd'
16
- }
17
- }
18
- },
19
- result: {
20
- data: {
21
- recommendations: {
22
- __typename: 'Recommendations',
23
- leadAsset: 'null',
24
- articles: [
25
- {
26
- __typename: 'UniversalArticle',
27
- headline: 'Whole world is against us, says top Russian strategist',
28
- id: 'a9ffb7cc-d5d1-11ec-bb99-1bcd45646516',
29
- media: {
30
- __typename: 'Image'
31
- },
32
- slug: 'were-no-match-for-ukrainian-grit-and-firepower-says-retired-russian-colonel',
33
- url: 'https://www.staging-thetimes.co.uk/article/were-no-match-for-ukrainian-grit-and-firepower-says-retired-russian-colonel-lhnvsfj33'
34
- },
35
- {
36
- __typename: 'UniversalArticle',
37
- headline: 'Vardys leave court with swipe at Wayne Rooney',
38
- id: 'f3d730a0-d5c2-11ec-8585-951ab3afb4d2',
39
- media: {
40
- __typename: 'Image'
41
- },
42
- slug: 'wayne-rooney-to-give-evidence-in-wagatha-christie-trial-as-jamie-vardy-attends-court-for-first-time',
43
- url: 'https://www.staging-thetimes.co.uk/article/wayne-rooney-to-give-evidence-in-wagatha-christie-trial-as-jamie-vardy-attends-court-for-first-time-wlzvxklc6'
44
- }
45
- ]
46
- }
47
- }
48
- }
49
- }
50
- ];
51
- describe('Recommended Articles', () => {
52
- afterEach(() => {
53
- jest.clearAllMocks();
54
- cleanup();
55
- });
56
- it('it renders', () => {
57
- const { asFragment } = render(React.createElement(MockedProvider, { mocks: mocks },
58
- React.createElement(RecommendedArticles, { articleId: "94a01926-719a-11ec-aacf-0736e08b15cd", section: "News", analyticsStream: jest.fn() })));
6
+ jest.mock('@times-components/image', () => ({
7
+ Placeholder: () => React.createElement("div", null, "Placeholder")
8
+ }));
9
+ jest.mock('@times-components/related-articles', () => 'RelatedArticles');
10
+ jest.mock('../../../helpers/fetch/FetchProvider', () => ({
11
+ useFetch: jest.fn()
12
+ }));
13
+ describe('<RecommendedArticles>', () => {
14
+ it('should render the initial loading state correctly', () => {
15
+ useFetch.mockReturnValue({ loading: true });
16
+ const { asFragment, getByText } = render(React.createElement(RecommendedArticles, { section: "News", isVisible: true, analyticsStream: () => ({}) }));
17
+ expect(getByText('Placeholder'));
59
18
  expect(asFragment()).toMatchSnapshot();
60
19
  });
61
- it('degrades gracefully', () => {
62
- const { asFragment } = render(React.createElement(MockedProvider, { mocks: mocks },
63
- React.createElement(RecommendedArticles, { articleId: "", section: "News", analyticsStream: jest.fn() })));
20
+ it('should render the error state correctly', () => {
21
+ useFetch.mockReturnValue({ error: 'Some error occurred' });
22
+ const { asFragment } = render(React.createElement(RecommendedArticles, { section: "News", analyticsStream: () => ({}) }));
23
+ expect(asFragment().firstChild).toBeNull();
24
+ });
25
+ it('should render RelatedArticles correctly', () => {
26
+ useFetch.mockReturnValue({ data: previewData });
27
+ const { container, asFragment } = render(React.createElement(RecommendedArticles, { section: "News", isVisible: true, analyticsStream: () => ({}) }));
28
+ const related = container.querySelector('relatedarticles');
29
+ expect(related.getAttribute('heading')).toEqual("Today's News");
64
30
  expect(asFragment()).toMatchSnapshot();
65
31
  });
66
32
  });
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb21tZW5kZWRBcnRpY2xlcy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcmVjb21tZW5kZWQtYXJ0aWNsZXMvX190ZXN0c19fL1JlY29tbWVuZGVkQXJ0aWNsZXMudGVzdC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVyRSxNQUFNLEtBQUssR0FBRztJQUNaO1FBQ0UsS0FBSyxFQUFFLElBQUk7UUFDWCxPQUFPLEVBQUU7WUFDUCxLQUFLLEVBQUUsZUFBZTtZQUN0QixTQUFTLEVBQUU7Z0JBQ1QsU0FBUyxFQUFFLE9BQU87Z0JBQ2xCLFNBQVMsRUFBRTtvQkFDVCxNQUFNLEVBQUUsTUFBTTtvQkFDZCxTQUFTLEVBQUUsc0NBQXNDO2lCQUNsRDthQUNGO1NBQ0Y7UUFDRCxNQUFNLEVBQUU7WUFDTixJQUFJLEVBQUU7Z0JBQ0osZUFBZSxFQUFFO29CQUNmLFVBQVUsRUFBRSxpQkFBaUI7b0JBQzdCLFNBQVMsRUFBRSxNQUFNO29CQUNqQixRQUFRLEVBQUU7d0JBQ1I7NEJBQ0UsVUFBVSxFQUFFLGtCQUFrQjs0QkFDOUIsUUFBUSxFQUNOLHdEQUF3RDs0QkFDMUQsRUFBRSxFQUFFLHNDQUFzQzs0QkFDMUMsS0FBSyxFQUFFO2dDQUNMLFVBQVUsRUFBRSxPQUFPOzZCQUNwQjs0QkFDRCxJQUFJLEVBQ0YsNkVBQTZFOzRCQUMvRSxHQUFHLEVBQ0Qsa0lBQWtJO3lCQUNySTt3QkFDRDs0QkFDRSxVQUFVLEVBQUUsa0JBQWtCOzRCQUM5QixRQUFRLEVBQUUsK0NBQStDOzRCQUN6RCxFQUFFLEVBQUUsc0NBQXNDOzRCQUMxQyxLQUFLLEVBQUU7Z0NBQ0wsVUFBVSxFQUFFLE9BQU87NkJBQ3BCOzRCQUNELElBQUksRUFDRixxR0FBcUc7NEJBQ3ZHLEdBQUcsRUFDRCwwSkFBMEo7eUJBQzdKO3FCQUNGO2lCQUNGO2FBQ0Y7U0FDRjtLQUNGO0NBQ0YsQ0FBQztBQUVGLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUU7SUFDcEMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7UUFDcEIsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sQ0FDM0Isb0JBQUMsY0FBYyxJQUFDLEtBQUssRUFBRSxLQUFLO1lBQzFCLG9CQUFDLG1CQUFtQixJQUNsQixTQUFTLEVBQUMsc0NBQXNDLEVBQ2hELE9BQU8sRUFBQyxNQUFNLEVBQ2QsZUFBZSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FDMUIsQ0FDYSxDQUNsQixDQUFDO1FBQ0YsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFO1FBQzdCLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLENBQzNCLG9CQUFDLGNBQWMsSUFBQyxLQUFLLEVBQUUsS0FBSztZQUMxQixvQkFBQyxtQkFBbUIsSUFDbEIsU0FBUyxFQUFDLEVBQUUsRUFDWixPQUFPLEVBQUMsTUFBTSxFQUNkLGVBQWUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQzFCLENBQ2EsQ0FDbEIsQ0FBQztRQUNGLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMifQ==
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb21tZW5kZWRBcnRpY2xlcy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcmVjb21tZW5kZWQtYXJ0aWNsZXMvX190ZXN0c19fL1JlY29tbWVuZGVkQXJ0aWNsZXMudGVzdC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDaEUsT0FBTyxXQUFXLE1BQU0scURBQXFELENBQUM7QUFFOUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFN0QsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQywrQ0FBc0I7Q0FDMUMsQ0FBQyxDQUFDLENBQUM7QUFFSixJQUFJLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFekUsSUFBSSxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO0NBQ3BCLENBQUMsQ0FBQyxDQUFDO0FBRUosUUFBUSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsRUFBRTtJQUNyQyxFQUFFLENBQUMsbURBQW1ELEVBQUUsR0FBRyxFQUFFO1FBQzFELFFBQXNCLENBQUMsZUFBZSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFM0QsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQ3RDLG9CQUFDLG1CQUFtQixJQUNsQixPQUFPLEVBQUMsTUFBTSxFQUNkLFNBQVMsUUFDVCxlQUFlLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDM0IsQ0FDSCxDQUFDO1FBRUYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEdBQUcsRUFBRTtRQUNoRCxRQUFzQixDQUFDLGVBQWUsQ0FBQyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxDQUFDLENBQUM7UUFFMUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sQ0FDM0Isb0JBQUMsbUJBQW1CLElBQUMsT0FBTyxFQUFDLE1BQU0sRUFBQyxlQUFlLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBSSxDQUNwRSxDQUFDO1FBRUYsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEdBQUcsRUFBRTtRQUNoRCxRQUFzQixDQUFDLGVBQWUsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBRS9ELE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxDQUN0QyxvQkFBQyxtQkFBbUIsSUFDbEIsT0FBTyxFQUFDLE1BQU0sRUFDZCxTQUFTLFFBQ1QsZUFBZSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQzNCLENBQ0gsQ0FBQztRQUVGLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQWdCLENBQUM7UUFDMUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFaEUsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyJ9
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import { render } from '@testing-library/react';
3
+ import { RecommendedFetch } from '../RecommendedFetch';
4
+ jest.mock('../../../helpers/fetch/FetchProvider', () => ({
5
+ FetchProvider: () => React.createElement("div", null, "FetchProvider")
6
+ }));
7
+ describe('<RecommendedFetch>', () => {
8
+ it('should render correctly', () => {
9
+ const { asFragment, getByText } = render(React.createElement(RecommendedFetch, { articleId: "1234", section: "News", analyticsStream: () => ({}) }));
10
+ expect(getByText('FetchProvider'));
11
+ expect(asFragment()).toMatchSnapshot();
12
+ });
13
+ });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb21tZW5kZWRGZXRjaC50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcmVjb21tZW5kZWQtYXJ0aWNsZXMvX190ZXN0c19fL1JlY29tbWVuZGVkRmV0Y2gudGVzdC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RCxJQUFJLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdkQsYUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDLGlEQUF3QjtDQUM5QyxDQUFDLENBQUMsQ0FBQztBQUVKLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUU7SUFDbEMsRUFBRSxDQUFDLHlCQUF5QixFQUFFLEdBQUcsRUFBRTtRQUNqQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FDdEMsb0JBQUMsZ0JBQWdCLElBQ2YsU0FBUyxFQUFDLE1BQU0sRUFDaEIsT0FBTyxFQUFDLE1BQU0sRUFDZCxlQUFlLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDM0IsQ0FDSCxDQUFDO1FBRUYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMifQ==
@@ -0,0 +1,41 @@
1
+ import { RelatedArticleSliceType } from '../../types/related-article-slice';
2
+ export declare type Byline = {
3
+ __typename: string;
4
+ type: 'author';
5
+ name: string;
6
+ } | {
7
+ __typename: string;
8
+ type: 'inline';
9
+ value: string;
10
+ };
11
+ declare type MediaCrop = {
12
+ __typename: string;
13
+ url: string;
14
+ alt?: string;
15
+ aspectRatio: string;
16
+ };
17
+ declare type Media = {
18
+ __typename: string;
19
+ crops: MediaCrop[];
20
+ };
21
+ export declare type SummaryText = {
22
+ __typename: string;
23
+ text: string;
24
+ };
25
+ declare type Summary = {
26
+ __typename: string;
27
+ children: SummaryText[];
28
+ };
29
+ export declare type Article = {
30
+ __typename: string;
31
+ url: string;
32
+ slug: string;
33
+ label: string;
34
+ headline: string;
35
+ publishedDateTime: string;
36
+ bylines?: Byline[];
37
+ summary?: Summary;
38
+ media?: Media;
39
+ };
40
+ export declare const getRelatedArticlesSlice: (recommendations: any) => RelatedArticleSliceType;
41
+ export {};
@@ -0,0 +1,57 @@
1
+ // HELPERS
2
+ const getBylineAttr = (byline) => ({
3
+ value: byline.type === 'author' ? byline.name : byline.value
4
+ });
5
+ const getByline = (byline) => ({
6
+ name: byline.type,
7
+ children: [{ name: 'text', attributes: getBylineAttr(byline), children: [] }]
8
+ });
9
+ const getBylines = (bylines) => {
10
+ if (bylines) {
11
+ return bylines.map((byline) => ({ byline: [getByline(byline)] }));
12
+ }
13
+ return undefined;
14
+ };
15
+ const getSummaryText = (summary) => {
16
+ const text = summary.children
17
+ .map((child) => child.text)
18
+ .join('');
19
+ return { value: text.slice(0, text.slice(0, 125).lastIndexOf(' ')) };
20
+ };
21
+ const getSummaryParagraph = (summary) => [
22
+ { name: 'text', attributes: getSummaryText(summary), children: [] }
23
+ ];
24
+ const getSummary = (summary) => {
25
+ if (summary && summary.children) {
26
+ return [{ name: 'paragraph', children: getSummaryParagraph(summary) }];
27
+ }
28
+ return [];
29
+ };
30
+ const getImage = (media) => {
31
+ if (media && media.crops) {
32
+ const image = media.crops.find((crop) => crop.aspectRatio === '16:9');
33
+ return image ? { crop169: { url: image.url }, title: image.alt } : null;
34
+ }
35
+ return {};
36
+ };
37
+ // MAIN
38
+ export const getRelatedArticlesSlice = (recommendations) => ({
39
+ sliceName: 'StandardSlice',
40
+ items: recommendations
41
+ ? recommendations.articles
42
+ .map((article) => ({
43
+ article: {
44
+ slug: article.slug,
45
+ shortIdentifier: article.url.slice(-9),
46
+ label: article.label,
47
+ headline: article.headline,
48
+ publishedTime: article.publishedDateTime,
49
+ bylines: getBylines(article.bylines),
50
+ summary125: getSummary(article.summary),
51
+ leadAsset: getImage(article.media)
52
+ }
53
+ }))
54
+ .slice(0, 3)
55
+ : []
56
+ });
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0dGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3JlY29tbWVuZGVkLWFydGljbGVzL2Zvcm1hdHRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBLFVBQVU7QUFFVixNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6QyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLO0NBQzdELENBQUMsQ0FBQztBQUVILE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtJQUNqQixRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUM7Q0FDOUUsQ0FBQyxDQUFDO0FBRUgsTUFBTSxVQUFVLEdBQUcsQ0FBQyxPQUFrQixFQUFFLEVBQUU7SUFDeEMsSUFBSSxPQUFPLEVBQUU7UUFDWCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUMzRTtJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMsQ0FBQztBQUVGLE1BQU0sY0FBYyxHQUFHLENBQUMsT0FBZ0IsRUFBRSxFQUFFO0lBQzFDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRO1NBQzFCLEdBQUcsQ0FBQyxDQUFDLEtBQWtCLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7U0FD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
@@ -0,0 +1,84 @@
1
+ declare const _default: {
2
+ recommendations: {
3
+ articles: ({
4
+ url: string;
5
+ slug: string;
6
+ label: null;
7
+ headline: string;
8
+ publishedDateTime: string;
9
+ bylines: ({
10
+ type: string;
11
+ value: string;
12
+ name?: undefined;
13
+ } | {
14
+ type: string;
15
+ name: string;
16
+ value?: undefined;
17
+ })[];
18
+ summary: {
19
+ children: {
20
+ text: string;
21
+ }[];
22
+ };
23
+ media: {
24
+ crops: {
25
+ url: string;
26
+ alt: null;
27
+ aspectRatio: string;
28
+ }[];
29
+ };
30
+ } | {
31
+ url: string;
32
+ slug: string;
33
+ label: string;
34
+ headline: string;
35
+ publishedDateTime: string;
36
+ bylines: {
37
+ type: string;
38
+ name: string;
39
+ }[];
40
+ summary: {
41
+ children: ({
42
+ text: string;
43
+ } | {
44
+ text: null;
45
+ })[];
46
+ };
47
+ media: {
48
+ crops: {
49
+ url: string;
50
+ alt: null;
51
+ aspectRatio: string;
52
+ }[];
53
+ };
54
+ } | {
55
+ url: string;
56
+ slug: string;
57
+ label: string;
58
+ headline: string;
59
+ publishedDateTime: string;
60
+ bylines: ({
61
+ type: string;
62
+ value: string;
63
+ name?: undefined;
64
+ } | {
65
+ type: string;
66
+ name: string;
67
+ value?: undefined;
68
+ })[];
69
+ summary: {
70
+ children: {
71
+ text: string;
72
+ }[];
73
+ };
74
+ media: {
75
+ crops: {
76
+ url: string;
77
+ alt: null;
78
+ aspectRatio: string;
79
+ }[];
80
+ };
81
+ })[];
82
+ };
83
+ };
84
+ export default _default;