@times-components/ts-components 1.36.2 → 1.38.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.
- package/CHANGELOG.md +33 -0
- package/dist/components/article-header/__tests__/ArticleHeader.test.js +12 -12
- package/dist/components/recommended-articles/RecommendedArticles.d.ts +4 -5
- package/dist/components/recommended-articles/RecommendedArticles.js +15 -26
- package/dist/components/recommended-articles/RecommendedArticles.stories.d.ts +5 -1
- package/dist/components/recommended-articles/RecommendedArticles.stories.js +26 -52
- package/dist/components/recommended-articles/RecommendedFetch.d.ts +6 -0
- package/dist/components/recommended-articles/RecommendedFetch.js +12 -0
- package/dist/components/recommended-articles/__tests__/RecommendedArticles.test.js +26 -60
- package/dist/components/recommended-articles/__tests__/RecommendedFetch.test.d.ts +1 -0
- package/dist/components/recommended-articles/__tests__/RecommendedFetch.test.js +14 -0
- package/dist/components/recommended-articles/formatters.d.ts +41 -0
- package/dist/components/recommended-articles/formatters.js +57 -0
- package/dist/fixtures/preview-data/recommended-articles.d.ts +84 -0
- package/dist/fixtures/preview-data/recommended-articles.js +351 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/package.json +6 -6
- package/rnw.js +1 -1
- package/src/components/article-header/__tests__/ArticleHeader.test.tsx +11 -11
- package/src/components/recommended-articles/RecommendedArticles.stories.tsx +41 -58
- package/src/components/recommended-articles/RecommendedArticles.tsx +28 -54
- package/src/components/recommended-articles/RecommendedFetch.tsx +25 -0
- package/src/components/recommended-articles/__tests__/RecommendedArticles.test.tsx +45 -75
- package/src/components/recommended-articles/__tests__/RecommendedFetch.test.tsx +23 -0
- package/src/components/recommended-articles/__tests__/__snapshots__/RecommendedArticles.test.tsx.snap +11 -55
- package/src/components/recommended-articles/__tests__/__snapshots__/RecommendedFetch.test.tsx.snap +9 -0
- package/src/components/recommended-articles/formatters.ts +100 -0
- package/src/fixtures/preview-data/recommended-articles.ts +385 -0
- package/src/index.ts +2 -2
- package/src/types/externs.d.ts +0 -7
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,39 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [1.38.0](https://github.com/newsuk/times-components/compare/@times-components/ts-components@1.37.0...@times-components/ts-components@1.38.0) (2022-06-08)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **TDP-1935:** Recommended Articles ([#2971](https://github.com/newsuk/times-components/issues/2971)) ([d3c873e](https://github.com/newsuk/times-components/commit/d3c873e4c13b030159ef4caa78740206fa8f6f98))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# [1.37.0](https://github.com/newsuk/times-components/compare/@times-components/ts-components@1.36.3...@times-components/ts-components@1.37.0) (2022-06-08)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Features
|
|
21
|
+
|
|
22
|
+
* **TDP-1935:** Recommended articles ([#2969](https://github.com/newsuk/times-components/issues/2969)) ([9b6b9b0](https://github.com/newsuk/times-components/commit/9b6b9b09c918433ad5b2945d5fe2fc4c13002c13))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
## [1.36.3](https://github.com/newsuk/times-components/compare/@times-components/ts-components@1.36.2...@times-components/ts-components@1.36.3) (2022-06-07)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
### Bug Fixes
|
|
32
|
+
|
|
33
|
+
* **TDP-1825:** timezone tests ([#2968](https://github.com/newsuk/times-components/issues/2968)) ([bb09b71](https://github.com/newsuk/times-components/commit/bb09b713793c254cfc7e3ff9c69592060097baf4))
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
6
39
|
## [1.36.2](https://github.com/newsuk/times-components/compare/@times-components/ts-components@1.36.1...@times-components/ts-components@1.36.2) (2022-06-07)
|
|
7
40
|
|
|
8
41
|
|
|
@@ -10,31 +10,31 @@ describe('ArticleHeader', () => {
|
|
|
10
10
|
it('Within a minute of updating', () => {
|
|
11
11
|
MockDate.set('2021-12-31T06:30:10+00:00');
|
|
12
12
|
const { getByText, queryByTestId } = render(React.createElement(ArticleHeader, { updated: updated }));
|
|
13
|
-
expect(getByText(
|
|
13
|
+
expect(getByText(/6.30am/i)).toBeVisible();
|
|
14
14
|
expect(queryByTestId('TimeSincePublishing')).toBeFalsy();
|
|
15
15
|
});
|
|
16
16
|
it('Within an hour of updating', () => {
|
|
17
17
|
MockDate.set('2021-12-31T07:00:00+00:00');
|
|
18
18
|
const { getByText } = render(React.createElement(ArticleHeader, { updated: updated }));
|
|
19
|
-
expect(getByText(
|
|
19
|
+
expect(getByText(/6.30am/i)).toBeVisible();
|
|
20
20
|
expect(getByText('30 minutes ago')).toBeVisible();
|
|
21
21
|
});
|
|
22
22
|
it('Between 1 and 12 hours after updating', () => {
|
|
23
23
|
MockDate.set('2021-12-31T08:30:00+00:00');
|
|
24
24
|
const { getByText } = render(React.createElement(ArticleHeader, { updated: updated }));
|
|
25
|
-
expect(getByText(
|
|
25
|
+
expect(getByText(/6.30am/i)).toBeVisible();
|
|
26
26
|
expect(getByText('2 hours ago')).toBeVisible();
|
|
27
27
|
});
|
|
28
28
|
it('After 12 hours but same calendar day', () => {
|
|
29
29
|
MockDate.set('2021-12-20T20:30:00+00:00');
|
|
30
30
|
const { getByText, queryByTestId } = render(React.createElement(ArticleHeader, { updated: updated }));
|
|
31
|
-
expect(getByText(
|
|
31
|
+
expect(getByText(/6.30am/i)).toBeVisible();
|
|
32
32
|
expect(queryByTestId('TimeSincePublishing')).toBeFalsy();
|
|
33
33
|
});
|
|
34
34
|
it('With breaking flag and headline', () => {
|
|
35
35
|
MockDate.set('2021-12-31T07:00:00+00:00');
|
|
36
36
|
const { getByText } = render(React.createElement(ArticleHeader, { updated: updated, breaking: "true", headline: "This%20is%20the%20headline" }));
|
|
37
|
-
expect(getByText(
|
|
37
|
+
expect(getByText(/6.30am/i)).toBeVisible();
|
|
38
38
|
expect(getByText('30 minutes ago')).toBeVisible();
|
|
39
39
|
expect(getByText('BREAKING')).toBeVisible();
|
|
40
40
|
expect(getByText('This is the headline')).toBeVisible();
|
|
@@ -43,7 +43,7 @@ describe('ArticleHeader', () => {
|
|
|
43
43
|
it('With breaking flag expired', () => {
|
|
44
44
|
MockDate.set('2021-12-31T08:30:00+00:00');
|
|
45
45
|
const { getByText, queryByText } = render(React.createElement(ArticleHeader, { updated: updated, breaking: "true" }));
|
|
46
|
-
expect(getByText(
|
|
46
|
+
expect(getByText(/6.30am/i)).toBeVisible();
|
|
47
47
|
expect(getByText('2 hours ago')).toBeVisible();
|
|
48
48
|
expect(queryByText('BREAKING')).toBeFalsy();
|
|
49
49
|
});
|
|
@@ -54,25 +54,25 @@ describe('ArticleHeader', () => {
|
|
|
54
54
|
it('Within a minute of updating', () => {
|
|
55
55
|
MockDate.set('2022-04-20T06:30:10+01:00');
|
|
56
56
|
const { getByText, queryByTestId } = render(React.createElement(ArticleHeader, { updated: updated }));
|
|
57
|
-
expect(getByText(
|
|
57
|
+
expect(getByText(/6.30am/i)).toBeVisible();
|
|
58
58
|
expect(queryByTestId('TimeSincePublishing')).toBeFalsy();
|
|
59
59
|
});
|
|
60
60
|
it('Within an hour of updating', () => {
|
|
61
61
|
MockDate.set('2022-04-20T07:00:00+01:00');
|
|
62
62
|
const { getByText } = render(React.createElement(ArticleHeader, { updated: updated }));
|
|
63
|
-
expect(getByText(
|
|
63
|
+
expect(getByText(/6.30am/i)).toBeVisible();
|
|
64
64
|
expect(getByText('30 minutes ago')).toBeVisible();
|
|
65
65
|
});
|
|
66
66
|
it('Between 1 and 12 hours after updating', () => {
|
|
67
67
|
MockDate.set('2022-04-20T08:30:00+01:00');
|
|
68
68
|
const { getByText } = render(React.createElement(ArticleHeader, { updated: updated }));
|
|
69
|
-
expect(getByText(
|
|
69
|
+
expect(getByText(/6.30am/i)).toBeVisible();
|
|
70
70
|
expect(getByText('2 hours ago')).toBeVisible();
|
|
71
71
|
});
|
|
72
72
|
it('After 12 hours but same calendar day', () => {
|
|
73
73
|
MockDate.set('2022-04-20T20:30:00+01:00');
|
|
74
74
|
const { getByText, queryByTestId } = render(React.createElement(ArticleHeader, { updated: updated }));
|
|
75
|
-
expect(getByText(
|
|
75
|
+
expect(getByText(/6.30am/i)).toBeVisible();
|
|
76
76
|
expect(queryByTestId('TimeSincePublishing')).toBeFalsy();
|
|
77
77
|
});
|
|
78
78
|
});
|
|
@@ -82,10 +82,10 @@ describe('ArticleHeader', () => {
|
|
|
82
82
|
it('Between 1 and 12 hours after updating', () => {
|
|
83
83
|
MockDate.set('2022-01-01T02:30:00+00:00');
|
|
84
84
|
const { getByText } = render(React.createElement(ArticleHeader, { updated: updated }));
|
|
85
|
-
expect(getByText(
|
|
85
|
+
expect(getByText(/10.30pm/i)).toBeVisible();
|
|
86
86
|
expect(getByText('4 hours ago')).toBeVisible();
|
|
87
87
|
expect(getByText('December 31')).toBeVisible();
|
|
88
88
|
});
|
|
89
89
|
});
|
|
90
90
|
});
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXJ0aWNsZUhlYWRlci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXJ0aWNsZS1oZWFkZXIvX190ZXN0c19fL0FydGljbGVIZWFkZXIudGVzdC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRCxPQUFPLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sUUFBUSxNQUFNLFVBQVUsQ0FBQztBQUVoQyxPQUFPLGFBQWEsTUFBTSxrQkFBa0IsQ0FBQztBQUU3QyxRQUFRLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTtJQUM3QixRQUFRLENBQUMsOEJBQThCLEVBQUUsR0FBRyxFQUFFO1FBQzVDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUVsQyxNQUFNLE9BQU8sR0FBRywyQkFBMkIsQ0FBQztRQUU1QyxFQUFFLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxFQUFFO1lBQ3JDLFFBQVEsQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUUxQyxNQUFNLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxHQUFHLE1BQU0sQ0FDekMsb0JBQUMsYUFBYSxJQUFDLE9BQU8sRUFBRSxPQUFPLEdBQUksQ0FDcEMsQ0FBQztZQUVGLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMzQyxNQUFNLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7WUFDcEMsUUFBUSxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxD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
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export declare const RecommendedArticles: React.FC<{
|
|
3
3
|
section: string;
|
|
4
|
+
isVisible?: boolean;
|
|
4
5
|
analyticsStream?: (evt: any) => void;
|
|
5
|
-
}
|
|
6
|
-
export declare const RecommendedArticles: ({ articleId, section, analyticsStream }: RecommendedArticlesProps) => JSX.Element | null;
|
|
7
|
-
export {};
|
|
6
|
+
}>;
|
|
@@ -1,30 +1,19 @@
|
|
|
1
|
-
import React
|
|
2
|
-
import RelatedArticles from '@times-components/related-articles';
|
|
3
|
-
import { GetRecommendedArticles } from '@times-components/provider';
|
|
1
|
+
import React from 'react';
|
|
4
2
|
import { Placeholder } from '@times-components/image';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
3
|
+
import RelatedArticles from '@times-components/related-articles';
|
|
4
|
+
import { useFetch } from '../../helpers/fetch/FetchProvider';
|
|
5
|
+
import { getRelatedArticlesSlice } from './formatters';
|
|
6
|
+
import { PlaceholderContainer } from '../common-styles';
|
|
7
|
+
export const RecommendedArticles = ({ section, isVisible, analyticsStream }) => {
|
|
8
|
+
const { loading, error, data } = useFetch();
|
|
9
|
+
if (loading && isVisible) {
|
|
10
|
+
return (React.createElement(PlaceholderContainer, null,
|
|
11
|
+
React.createElement(Placeholder, null)));
|
|
12
|
+
}
|
|
13
|
+
if (error || data === undefined) {
|
|
11
14
|
return null;
|
|
12
15
|
}
|
|
13
|
-
return (React.createElement(
|
|
14
|
-
|
|
15
|
-
return null;
|
|
16
|
-
}
|
|
17
|
-
if (isLoading || !recommendations) {
|
|
18
|
-
return (React.createElement("div", { className: "placeholder" },
|
|
19
|
-
React.createElement(Placeholder, null)));
|
|
20
|
-
}
|
|
21
|
-
const slice = {
|
|
22
|
-
sliceName: 'StandardSlice',
|
|
23
|
-
items: recommendations
|
|
24
|
-
? recommendations.articles.map((article) => ({ article }))
|
|
25
|
-
: []
|
|
26
|
-
};
|
|
27
|
-
return (React.createElement(RelatedArticles, { heading: `Today's ${section}`, slice: slice, isVisible: true, analyticsStream: analyticsStream }));
|
|
28
|
-
}));
|
|
16
|
+
return (React.createElement("div", { id: "recommended-articles", style: { display: isVisible ? 'block' : 'none' } },
|
|
17
|
+
React.createElement(RelatedArticles, { heading: `Today's ${section}`, slice: getRelatedArticlesSlice(data.recommendations), isVisible: true, analyticsStream: analyticsStream })));
|
|
29
18
|
};
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb21tZW5kZWRBcnRpY2xlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3JlY29tbWVuZGVkLWFydGljbGVzL1JlY29tbWVuZGVkQXJ0aWNsZXMudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxlQUFlLE1BQU0sb0NBQW9DLENBQUM7QUFFakUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzdELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV2RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV4RCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FJM0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRTtJQUMvQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxRQUFRLEVBQU8sQ0FBQztJQUVqRCxJQUFJLE9BQU8sSUFBSSxTQUFTLEVBQUU7UUFDeEIsT0FBTyxDQUNMLG9CQUFDLG9CQUFvQjtZQUNuQixvQkFBQyxXQUFXLE9BQUcsQ0FDTSxDQUN4QixDQUFDO0tBQ0g7SUFFRCxJQUFJLEtBQUssSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO1FBQy9CLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxPQUFPLENBQ0wsNkJBQ0UsRUFBRSxFQUFDLHNCQUFzQixFQUN6QixLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRTtRQUVoRCxvQkFBQyxlQUFlLElBQ2QsT0FBTyxFQUFFLFdBQVcsT0FBTyxFQUFFLEVBQzdCLEtBQUssRUFBRSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQ3BELFNBQVMsUUFDVCxlQUFlLEVBQUUsZUFBZSxHQUNoQyxDQUNFLENBQ1AsQ0FBQztBQUNKLENBQUMsQ0FBQyJ9
|
|
@@ -1,65 +1,39 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { showcaseConverter } from '@times-components/storybook';
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
3
|
+
import { FetchProvider } from '../../helpers/fetch/FetchProvider';
|
|
4
|
+
import previewData from '../../fixtures/preview-data/recommended-articles';
|
|
5
5
|
import analyticsStream from '../../fixtures/analytics-actions/analytics-actions';
|
|
6
6
|
import { RecommendedArticles } from './RecommendedArticles';
|
|
7
|
-
const
|
|
8
|
-
{
|
|
9
|
-
|
|
10
|
-
request: {
|
|
11
|
-
query: recommendations,
|
|
12
|
-
variables: {
|
|
13
|
-
publisher: 'TIMES',
|
|
14
|
-
recomArgs: {
|
|
15
|
-
userId: '1234',
|
|
16
|
-
articleId: '94a01926-719a-11ec-aacf-0736e08b15cd'
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
},
|
|
20
|
-
result: {
|
|
21
|
-
data: {
|
|
22
|
-
recommendations: {
|
|
23
|
-
__typename: 'Recommendations',
|
|
24
|
-
leadAsset: 'null',
|
|
25
|
-
articles: [
|
|
26
|
-
{
|
|
27
|
-
__typename: 'UniversalArticle',
|
|
28
|
-
headline: 'Whole world is against us, says top Russian strategist',
|
|
29
|
-
id: 'a9ffb7cc-d5d1-11ec-bb99-1bcd45646516',
|
|
30
|
-
media: {
|
|
31
|
-
__typename: 'Image'
|
|
32
|
-
},
|
|
33
|
-
slug: 'were-no-match-for-ukrainian-grit-and-firepower-says-retired-russian-colonel',
|
|
34
|
-
url: 'https://www.staging-thetimes.co.uk/article/were-no-match-for-ukrainian-grit-and-firepower-says-retired-russian-colonel-lhnvsfj33'
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
__typename: 'UniversalArticle',
|
|
38
|
-
headline: 'Vardys leave court with swipe at Wayne Rooney',
|
|
39
|
-
id: 'f3d730a0-d5c2-11ec-8585-951ab3afb4d2',
|
|
40
|
-
media: {
|
|
41
|
-
__typename: 'Image'
|
|
42
|
-
},
|
|
43
|
-
slug: 'wayne-rooney-to-give-evidence-in-wagatha-christie-trial-as-jamie-vardy-attends-court-for-first-time',
|
|
44
|
-
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'
|
|
45
|
-
}
|
|
46
|
-
]
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
7
|
+
export const getArticles = (data, numOfArticles) => ({
|
|
8
|
+
recommendations: {
|
|
9
|
+
articles: data.recommendations.articles.slice(0, numOfArticles)
|
|
50
10
|
}
|
|
51
|
-
|
|
52
|
-
const
|
|
11
|
+
});
|
|
12
|
+
const recommArticles = {
|
|
53
13
|
children: [
|
|
54
14
|
{
|
|
55
|
-
component: () => (React.createElement(
|
|
56
|
-
React.createElement(RecommendedArticles, {
|
|
57
|
-
name: 'Recommended Articles',
|
|
15
|
+
component: () => (React.createElement(FetchProvider, { previewData: getArticles(previewData, 1) },
|
|
16
|
+
React.createElement(RecommendedArticles, { section: "News", isVisible: true, analyticsStream: analyticsStream }))),
|
|
17
|
+
name: 'Recommended Articles - 1 Article',
|
|
18
|
+
platform: 'web',
|
|
19
|
+
type: 'story'
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
component: () => (React.createElement(FetchProvider, { previewData: getArticles(previewData, 2) },
|
|
23
|
+
React.createElement(RecommendedArticles, { section: "Business", isVisible: true, analyticsStream: analyticsStream }))),
|
|
24
|
+
name: 'Recommended Articles - 2 Article',
|
|
25
|
+
platform: 'web',
|
|
26
|
+
type: 'story'
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
component: () => (React.createElement(FetchProvider, { previewData: previewData },
|
|
30
|
+
React.createElement(RecommendedArticles, { section: "Sport", isVisible: true, analyticsStream: analyticsStream }))),
|
|
31
|
+
name: 'Recommended Articles - 3 Article',
|
|
58
32
|
platform: 'web',
|
|
59
33
|
type: 'story'
|
|
60
34
|
}
|
|
61
35
|
],
|
|
62
36
|
name: 'Typescript Component/Recommended Articles'
|
|
63
37
|
};
|
|
64
|
-
showcaseConverter(module,
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
showcaseConverter(module, recommArticles);
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb21tZW5kZWRBcnRpY2xlcy5zdG9yaWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcmVjb21tZW5kZWQtYXJ0aWNsZXMvUmVjb21tZW5kZWRBcnRpY2xlcy5zdG9yaWVzLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFMUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sV0FBVyxNQUFNLGtEQUFrRCxDQUFDO0FBQzNFLE9BQU8sZUFBZSxNQUFNLG9EQUFvRCxDQUFDO0FBRWpGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTVELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQVMsRUFBRSxhQUFxQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLGVBQWUsRUFBRTtRQUNmLFFBQVEsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQztLQUNoRTtDQUNGLENBQUMsQ0FBQztBQUVILE1BQU0sY0FBYyxHQUFHO0lBQ3JCLFFBQVEsRUFBRTtRQUNSO1lBQ0UsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQ2Ysb0JBQUMsYUFBYSxJQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztnQkFDckQsb0JBQUMsbUJBQW1CLElBQ2xCLE9BQU8sRUFBQyxNQUFNLEVBQ2QsU0FBUyxRQUNULGVBQWUsRUFBRSxlQUFlLEdBQ2hDLENBQ1ksQ0FDakI7WUFDRCxJQUFJLEVBQUUsa0NBQWtDO1lBQ3hDLFFBQVEsRUFBRSxLQUFLO1lBQ2YsSUFBSSxFQUFFLE9BQU87U0FDZDtRQUNEO1lBQ0UsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQ2Ysb0JBQUMsYUFBYSxJQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztnQkFDckQsb0JBQUMsbUJBQW1CLElBQ2xCLE9BQU8sRUFBQyxVQUFVLEVBQ2xCLFNBQVMsUUFDVCxlQUFlLEVBQUUsZUFBZSxHQUNoQyxDQUNZLENBQ2pCO1lBQ0QsSUFBSSxFQUFFLGtDQUFrQztZQUN4QyxRQUFRLEVBQUUsS0FBSztZQUNmLElBQUksRUFBRSxPQUFPO1NBQ2Q7UUFDRDtZQUNFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUNmLG9CQUFDLGFBQWEsSUFBQyxXQUFXLEVBQUUsV0FBVztnQkFDckMsb0JBQUMsbUJBQW1CLElBQ2xCLE9BQU8sRUFBQyxPQUFPLEVBQ2YsU0FBUyxRQUNULGVBQWUsRUFBRSxlQUFlLEdBQ2hDLENBQ1ksQ0FDakI7WUFDRCxJQUFJLEVBQUUsa0NBQWtDO1lBQ3hDLFFBQVEsRUFBRSxLQUFLO1lBQ2YsSUFBSSxFQUFFLE9BQU87U0FDZDtLQUNGO0lBQ0QsSUFBSSxFQUFFLDJDQUEyQztDQUNsRCxDQUFDO0FBRUYsaUJBQWlCLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDIn0=
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
import { FetchProvider } from '../../helpers/fetch/FetchProvider';
|
|
3
|
+
import { RecommendedArticles } from './RecommendedArticles';
|
|
4
|
+
export const RecommendedFetch = ({ articleId, section, analyticsStream }) => {
|
|
5
|
+
const [isClientSide, setIsClientSide] = useState(false);
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
setIsClientSide(true);
|
|
8
|
+
});
|
|
9
|
+
return isClientSide ? (React.createElement(FetchProvider, { url: `/api/recommended-articles/${articleId}` },
|
|
10
|
+
React.createElement(RecommendedArticles, { section: section, analyticsStream: analyticsStream }))) : null;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb21tZW5kZWRGZXRjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3JlY29tbWVuZGVkLWFydGljbGVzL1JlY29tbWVuZGVkRmV0Y2gudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUVuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFNUQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBSXhCLENBQUMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUU7SUFDL0MsTUFBTSxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsR0FBRyxRQUFRLENBQVUsS0FBSyxDQUFDLENBQUM7SUFFakUsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUNwQixvQkFBQyxhQUFhLElBQUMsR0FBRyxFQUFFLDZCQUE2QixTQUFTLEVBQUU7UUFDMUQsb0JBQUMsbUJBQW1CLElBQ2xCLE9BQU8sRUFBRSxPQUFPLEVBQ2hCLGVBQWUsRUFBRSxlQUFlLEdBQ2hDLENBQ1ksQ0FDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ1gsQ0FBQyxDQUFDIn0=
|
|
@@ -1,67 +1,33 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { render
|
|
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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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('
|
|
62
|
-
|
|
63
|
-
|
|
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,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb21tZW5kZWRBcnRpY2xlcy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcmVjb21tZW5kZWQtYXJ0aWNsZXMvX190ZXN0c19fL1JlY29tbWVuZGVkQXJ0aWNsZXMudGVzdC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDaEUsT0FBTyxXQUFXLE1BQU0scURBQXFELENBQUM7QUFFOUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFN0QsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQywrQ0FBc0I7Q0FDMUMsQ0FBQyxDQUFDLENBQUM7QUFFSixJQUFJLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFekUsSUFBSSxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO0NBQ3BCLENBQUMsQ0FBQyxDQUFDO0FBRUosUUFBUSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsRUFBRTtJQUNyQyxFQUFFLENBQUMsbURBQW1ELEVBQUUsR0FBRyxFQUFFO1FBQzFELFFBQXNCLENBQUMsZUFBZSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFM0QsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQ3RDLG9CQUFDLG1CQUFtQixJQUNsQixPQUFPLEVBQUMsTUFBTSxFQUNkLFNBQVMsUUFDVCxlQUFlLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDM0IsQ0FDSCxDQUFDO1FBRUYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEdBQUcsRUFBRTtRQUNoRCxRQUFzQixDQUFDLGVBQWUsQ0FBQyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxDQUFDLENBQUM7UUFFMUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sQ0FDM0Isb0JBQUMsbUJBQW1CLElBQUMsT0FBTyxFQUFDLE1BQU0sRUFBQyxlQUFlLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBSSxDQUNwRSxDQUFDO1FBRUYsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEdBQUcsRUFBRTtRQUNoRCxRQUFzQixDQUFDLGVBQWUsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBRS9ELE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxDQUN0QyxvQkFBQyxtQkFBbUIsSUFDbEIsT0FBTyxFQUFDLE1BQU0sRUFDZCxTQUFTLFFBQ1QsZUFBZSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQzNCLENBQ0gsQ0FBQztRQUVGLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQWdCLENBQUM7UUFDMUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFaEUsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -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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
|