@newskit-render/standalone-components 1.10.3 → 1.11.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 (44) hide show
  1. package/README.md +145 -1
  2. package/dist/cjs/article-recommendations/components/ArticleRecommendationsProvider.d.ts +4 -0
  3. package/dist/cjs/article-recommendations/components/ArticleRecommendationsProvider.js +66 -0
  4. package/dist/cjs/article-recommendations/components/ArticleRecommendationsProvider.js.map +1 -0
  5. package/dist/cjs/article-recommendations/components/RecommendedArticleList.d.ts +5 -0
  6. package/dist/cjs/article-recommendations/components/RecommendedArticleList.js +43 -0
  7. package/dist/cjs/article-recommendations/components/RecommendedArticleList.js.map +1 -0
  8. package/dist/cjs/article-recommendations/components/index.d.ts +3 -1
  9. package/dist/cjs/article-recommendations/components/index.js +5 -1
  10. package/dist/cjs/article-recommendations/components/index.js.map +1 -1
  11. package/dist/cjs/article-recommendations/context/index.d.ts +3 -0
  12. package/dist/cjs/article-recommendations/context/index.js +9 -0
  13. package/dist/cjs/article-recommendations/context/index.js.map +1 -0
  14. package/dist/cjs/article-recommendations/index.d.ts +1 -0
  15. package/dist/cjs/article-recommendations/index.js +1 -0
  16. package/dist/cjs/article-recommendations/index.js.map +1 -1
  17. package/dist/cjs/article-recommendations/provider/recommendationsProvider.d.ts +3 -1
  18. package/dist/cjs/article-recommendations/provider/recommendationsProvider.js +20 -3
  19. package/dist/cjs/article-recommendations/provider/recommendationsProvider.js.map +1 -1
  20. package/dist/cjs/article-recommendations/types/index.d.ts +37 -0
  21. package/dist/cjs/article-recommendations/types/index.js +5 -0
  22. package/dist/cjs/article-recommendations/types/index.js.map +1 -1
  23. package/dist/esm/article-recommendations/components/ArticleRecommendationsProvider.d.ts +4 -0
  24. package/dist/esm/article-recommendations/components/ArticleRecommendationsProvider.js +61 -0
  25. package/dist/esm/article-recommendations/components/ArticleRecommendationsProvider.js.map +1 -0
  26. package/dist/esm/article-recommendations/components/RecommendedArticleList.d.ts +5 -0
  27. package/dist/esm/article-recommendations/components/RecommendedArticleList.js +15 -0
  28. package/dist/esm/article-recommendations/components/RecommendedArticleList.js.map +1 -0
  29. package/dist/esm/article-recommendations/components/index.d.ts +3 -1
  30. package/dist/esm/article-recommendations/components/index.js +3 -1
  31. package/dist/esm/article-recommendations/components/index.js.map +1 -1
  32. package/dist/esm/article-recommendations/context/index.d.ts +3 -0
  33. package/dist/esm/article-recommendations/context/index.js +3 -0
  34. package/dist/esm/article-recommendations/context/index.js.map +1 -0
  35. package/dist/esm/article-recommendations/index.d.ts +1 -0
  36. package/dist/esm/article-recommendations/index.js +1 -0
  37. package/dist/esm/article-recommendations/index.js.map +1 -1
  38. package/dist/esm/article-recommendations/provider/recommendationsProvider.d.ts +3 -1
  39. package/dist/esm/article-recommendations/provider/recommendationsProvider.js +19 -3
  40. package/dist/esm/article-recommendations/provider/recommendationsProvider.js.map +1 -1
  41. package/dist/esm/article-recommendations/types/index.d.ts +37 -0
  42. package/dist/esm/article-recommendations/types/index.js +4 -1
  43. package/dist/esm/article-recommendations/types/index.js.map +1 -1
  44. package/package.json +2 -2
package/README.md CHANGED
@@ -157,7 +157,151 @@ const ArticleList: React.FC<{
157
157
  )
158
158
  ```
159
159
 
160
- ## 3. Help-hub:
160
+ ## 3. Article Recommendations Provider
161
+
162
+ The purpose of this component is to hold the dpaTemplates in the context, fetch the recommended articles and map them to the appropriate templates.
163
+
164
+ The component takes the following props.
165
+
166
+ ```typescript
167
+ export type ArticleRecommendationsProviderProps = {
168
+ articleId?: string
169
+ context?: ArticleRecommendationsProviderBaseContextType
170
+ children: ReactNode
171
+ config: Config
172
+ }
173
+ ```
174
+
175
+ `articleId` is required to get the recommended articles for the given article
176
+
177
+ `config` is required to access NewsKit API to be able to fetch the recommended articles
178
+
179
+ ```typescript
180
+ export type Config = {
181
+ newskitApiEnvUrl: string
182
+ newskitApiXApiKey: string
183
+ }
184
+ ```
185
+
186
+ The `context` holds the `dpaTemplates`. The default context can be overridden or extended.
187
+
188
+ ```typescript
189
+ const defaultContext: ArticleRecommendationsProviderContextType = {
190
+ dpaTemplates: [
191
+ {
192
+ templateId: 'list-1',
193
+ columnCount: '1',
194
+ size: 'small',
195
+ recommendedArticles: { totalArticlesCount: 4 },
196
+ adlibraryMPU: { totalArticlesCount: 0 },
197
+ },
198
+ {
199
+ templateId: 'list-2',
200
+ columnCount: { xs: '1', sm: '2', lg: '4' },
201
+ size: 'large',
202
+ recommendedArticles: { totalArticlesCount: 8 },
203
+ adlibraryMPU: { totalArticlesCount: 0 },
204
+ },
205
+ ],
206
+ }
207
+ ```
208
+
209
+ Template props:
210
+
211
+ `templateId` template identifier used to uniquely identify the template
212
+
213
+ `columnCount` together with the `totalArticlesCount` will determine the layout. Example: `list-1` will result in a 1x4 article grid, while `list-2` will result in a 4x2 grid on a large screen.
214
+
215
+ `size` the size of the articles
216
+
217
+ `recommendedArticles` and `adlibraryMPU` are the types of articles. These can be extended as well. Note the data fetching currently is done only for `recommendedArticles`
218
+
219
+ ### Usage
220
+
221
+ ```typescript
222
+ const Article: React.FC<ArticleSlug> = ({
223
+ universalArticle,
224
+ articleURL,
225
+ twitterUsername,
226
+ siteHost,
227
+ gscId,
228
+ user,
229
+ articleId,
230
+ config,
231
+ }) => (
232
+ <ArticleRecommendationsProvider articleId={articleId} config={config}>
233
+ <Highlights>
234
+ </ArticleRecommendationsProvider>
235
+ )
236
+
237
+ export async function getServerSideProps(context) {
238
+ return {
239
+ props: {
240
+ config: {
241
+ newskitApiEnvUrl,
242
+ newskitApiXApiKey,
243
+ },
244
+ articleId,
245
+ },
246
+ }
247
+ }
248
+ ```
249
+
250
+ The `ArticleRecommendationsProvider` will fetch the recommended articles. Once the fetch is complete it will slice and map the articles to the dpaTemplates.
251
+
252
+ Example: The default context after the mapping will look like below
253
+
254
+ ```typescript
255
+ const defaultContext: ArticleRecommendationsProviderContextType = {
256
+ dpaTemplates: [
257
+ {
258
+ templateId: 'list-1',
259
+ columnCount: '1',
260
+ size: 'small',
261
+ recommendedArticles: [{ article }, ...], // 4 articles
262
+ adlibraryMPU: [],
263
+ },
264
+ {
265
+ templateId: 'list-2',
266
+ columnCount: { xs: '1', sm: '2', lg: '4' },
267
+ size: 'large',
268
+ recommendedArticles: [{ article }, ...], //8 articles
269
+ adlibraryMPU: [],
270
+ },
271
+ ],
272
+ }
273
+ ```
274
+
275
+ The `ArticleList` component based on the `templateId` will get the correct article data from the context and it will use the `ArticleGrid` component to render the layout.
276
+
277
+ ```typescript
278
+ const ArticleList: React.FC<{ templateId: string }> = ({ templateId }) => {
279
+ const context = useContext(
280
+ ArticleRecommendationsProviderContext
281
+ ) as ArticleRecommendationsProviderContextTypeWithArticles
282
+
283
+ const dpaTemplate = context.dpaTemplates.find(
284
+ (dpaTemplate) => dpaTemplate.templateId === templateId
285
+ )
286
+
287
+ if (!dpaTemplate) {
288
+ return null
289
+ }
290
+
291
+ const { recommendedArticles, columnCount, size } = dpaTemplate
292
+ return (
293
+ <AricleGrid
294
+ articles={recommendedArticles}
295
+ columnCount={columnCount}
296
+ size={size}
297
+ />
298
+ )
299
+ }
300
+
301
+ const Highlights: React.FC = () => <ArticleList templateId="list-1" />
302
+ ```
303
+
304
+ ## 4. Help-hub:
161
305
 
162
306
  Help-Hub is a section of a website on which your customers can search for a specific problem and find some help to resolve it. It consists of three parts:
163
307
 
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { ArticleRecommendationsProviderProps } from '../types';
3
+ declare const ArticleRecommendationsProvider: React.FC<ArticleRecommendationsProviderProps>;
4
+ export default ArticleRecommendationsProvider;
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ var react_1 = __importDefault(require("react"));
18
+ var lodash_merge_1 = __importDefault(require("lodash.merge"));
19
+ var context_1 = require("../context");
20
+ var swr_1 = __importDefault(require("swr"));
21
+ var provider_1 = require("../provider");
22
+ var defaultContext = {
23
+ dpaTemplates: [
24
+ {
25
+ templateId: 'list-1',
26
+ columnCount: '1',
27
+ size: 'small',
28
+ recommendedArticles: { totalArticlesCount: 4 },
29
+ adlibraryMPU: { totalArticlesCount: 0 },
30
+ },
31
+ {
32
+ templateId: 'list-2',
33
+ columnCount: { xs: '1', sm: '2', lg: '4' },
34
+ size: 'large',
35
+ recommendedArticles: { totalArticlesCount: 8 },
36
+ adlibraryMPU: { totalArticlesCount: 0 },
37
+ },
38
+ ],
39
+ };
40
+ var mapDpaTemplates = function (articles, dpaTemplates) {
41
+ var articleTypeNames = Object.keys(dpaTemplates[0]).slice(3);
42
+ return articleTypeNames.reduce(function (acc, articleTypeName) {
43
+ var startCount = 0;
44
+ var dpaTemplatesWithArticles = acc.map(function (dpaTemplate) {
45
+ var _a;
46
+ var totalArticlesCount = dpaTemplate[articleTypeName].totalArticlesCount;
47
+ var slicedArticles = articles[articleTypeName].slice(startCount, startCount + totalArticlesCount);
48
+ startCount += totalArticlesCount;
49
+ return __assign(__assign({}, dpaTemplate), (_a = {}, _a[articleTypeName] = slicedArticles, _a));
50
+ });
51
+ startCount = 0;
52
+ return dpaTemplatesWithArticles;
53
+ }, dpaTemplates);
54
+ };
55
+ var ArticleRecommendationsProvider = function (_a) {
56
+ var articleId = _a.articleId, context = _a.context, config = _a.config, children = _a.children;
57
+ var enhancedContext = (0, lodash_merge_1.default)({}, defaultContext, context);
58
+ var articles = (0, swr_1.default)([articleId, config], provider_1.fetcher).data;
59
+ var mapedDpaTemplates = articles
60
+ ? mapDpaTemplates({ recommendedArticles: articles, adlibraryMPU: [] }, enhancedContext.dpaTemplates)
61
+ : [];
62
+ var contextWithArticles = __assign(__assign({}, enhancedContext), { dpaTemplates: mapedDpaTemplates, articleId: articleId });
63
+ return (react_1.default.createElement(context_1.ArticleRecommendationsProviderContext.Provider, { value: contextWithArticles }, children));
64
+ };
65
+ exports.default = ArticleRecommendationsProvider;
66
+ //# sourceMappingURL=ArticleRecommendationsProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArticleRecommendationsProvider.js","sourceRoot":"","sources":["../../../../src/article-recommendations/components/ArticleRecommendationsProvider.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAAyB;AACzB,8DAAgC;AAChC,sCAAkE;AASlE,4CAAwB;AACxB,wCAAqC;AAErC,IAAM,cAAc,GAA8C;IAChE,YAAY,EAAE;QACZ;YACE,UAAU,EAAE,QAAQ;YACpB,WAAW,EAAE,GAAG;YAChB,IAAI,EAAE,OAAO;YACb,mBAAmB,EAAE,EAAE,kBAAkB,EAAE,CAAC,EAAE;YAC9C,YAAY,EAAE,EAAE,kBAAkB,EAAE,CAAC,EAAE;SACxC;QACD;YACE,UAAU,EAAE,QAAQ;YACpB,WAAW,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE;YAC1C,IAAI,EAAE,OAAO;YACb,mBAAmB,EAAE,EAAE,kBAAkB,EAAE,CAAC,EAAE;YAC9C,YAAY,EAAE,EAAE,kBAAkB,EAAE,CAAC,EAAE;SACxC;KACF;CACF,CAAA;AAED,IAAM,eAAe,GAAG,UACtB,QAAyB,EACzB,YAA2B;IAE3B,IAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC9D,OAAO,gBAAgB,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,eAAe;QAClD,IAAI,UAAU,GAAG,CAAC,CAAA;QAClB,IAAM,wBAAwB,GAA8B,GAAG,CAAC,GAAG,CACjE,UAAC,WAAW;;YACF,IAAA,kBAAkB,GAAK,WAAW,CAAC,eAAe,CAAC,mBAAjC,CAAiC;YAC3D,IAAM,cAAc,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC,KAAK,CACpD,UAAU,EACV,UAAU,GAAI,kBAA6B,CAC5C,CAAA;YAED,UAAU,IAAI,kBAA4B,CAAA;YAC1C,6BACK,WAAW,gBACb,eAAe,IAAG,cAAc,OAClC;QACH,CAAC,CACF,CAAA;QACD,UAAU,GAAG,CAAC,CAAA;QACd,OAAO,wBAAwB,CAAA;IACjC,CAAC,EAAE,YAAmB,CAAC,CAAA;AACzB,CAAC,CAAA;AAED,IAAM,8BAA8B,GAAkD,UAAC,EAKtF;QAJC,SAAS,eAAA,EACT,OAAO,aAAA,EACP,MAAM,YAAA,EACN,QAAQ,cAAA;IAER,IAAM,eAAe,GAAG,IAAA,sBAAK,EAAC,EAAE,EAAE,cAAc,EAAE,OAAO,CAAC,CAAA;IAClD,IAAM,QAAQ,GAAK,IAAA,aAAM,EAAY,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,kBAAO,CAAC,KAApD,CAAoD;IAE1E,IAAM,iBAAiB,GAAG,QAAQ;QAChC,CAAC,CAAC,eAAe,CACb,EAAE,mBAAmB,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE,EACnD,eAAe,CAAC,YAAY,CAC7B;QACH,CAAC,CAAC,EAAE,CAAA;IAEN,IAAM,mBAAmB,yBACpB,eAAe,KAClB,YAAY,EAAE,iBAAiB,EAC/B,SAAS,WAAA,GACV,CAAA;IAED,OAAO,CACL,8BAAC,+CAAqC,CAAC,QAAQ,IAAC,KAAK,EAAE,mBAAmB,IACvE,QAAQ,CACsC,CAClD,CAAA;AACH,CAAC,CAAA;AAED,kBAAe,8BAA8B,CAAA"}
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ declare const RecommendedArticleList: React.FC<{
3
+ templateId: string;
4
+ }>;
5
+ export default RecommendedArticleList;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ var react_1 = __importStar(require("react"));
30
+ var ArticleGrid_1 = __importDefault(require("./ArticleGrid"));
31
+ var context_1 = require("../context");
32
+ var RecommendedArticleList = function (_a) {
33
+ var templateId = _a.templateId;
34
+ var context = (0, react_1.useContext)(context_1.ArticleRecommendationsProviderContext);
35
+ var dpaTemplate = context.dpaTemplates.find(function (dpaTemplate) { return dpaTemplate.templateId === templateId; });
36
+ if (!dpaTemplate) {
37
+ return null;
38
+ }
39
+ var recommendedArticles = dpaTemplate.recommendedArticles, columnCount = dpaTemplate.columnCount, size = dpaTemplate.size;
40
+ return (react_1.default.createElement(ArticleGrid_1.default, { articles: recommendedArticles, columnCount: columnCount, size: size }));
41
+ };
42
+ exports.default = RecommendedArticleList;
43
+ //# sourceMappingURL=RecommendedArticleList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecommendedArticleList.js","sourceRoot":"","sources":["../../../../src/article-recommendations/components/RecommendedArticleList.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAyC;AACzC,8DAAsC;AACtC,sCAAkE;AAGlE,IAAM,sBAAsB,GAAqC,UAAC,EAEjE;QADC,UAAU,gBAAA;IAEV,IAAM,OAAO,GAAG,IAAA,kBAAU,EACxB,+CAAqC,CACmB,CAAA;IAE1D,IAAM,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAC3C,UAAC,WAAW,IAAK,OAAA,WAAW,CAAC,UAAU,KAAK,UAAU,EAArC,CAAqC,CACvD,CAAA;IAED,IAAI,CAAC,WAAW,EAAE;QAChB,OAAO,IAAI,CAAA;KACZ;IAEO,IAAA,mBAAmB,GAAwB,WAAW,oBAAnC,EAAE,WAAW,GAAW,WAAW,YAAtB,EAAE,IAAI,GAAK,WAAW,KAAhB,CAAgB;IAC9D,OAAO,CACL,8BAAC,qBAAU,IACT,QAAQ,EAAE,mBAAmB,EAC7B,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,IAAI,GACV,CACH,CAAA;AACH,CAAC,CAAA;AAED,kBAAe,sBAAsB,CAAA"}
@@ -1,4 +1,6 @@
1
1
  import AricleGrid from './ArticleGrid';
2
2
  import ArticleRecommendation from './ArticleRecommendation';
3
+ import ArticleRecommendationsProvider from './ArticleRecommendationsProvider';
4
+ import RecommendedArticleList from './RecommendedArticleList';
3
5
  export * from './baseProps';
4
- export { ArticleRecommendation, AricleGrid };
6
+ export { ArticleRecommendation, AricleGrid, ArticleRecommendationsProvider, RecommendedArticleList, };
@@ -17,10 +17,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
17
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.AricleGrid = exports.ArticleRecommendation = void 0;
20
+ exports.RecommendedArticleList = exports.ArticleRecommendationsProvider = exports.AricleGrid = exports.ArticleRecommendation = void 0;
21
21
  var ArticleGrid_1 = __importDefault(require("./ArticleGrid"));
22
22
  exports.AricleGrid = ArticleGrid_1.default;
23
23
  var ArticleRecommendation_1 = __importDefault(require("./ArticleRecommendation"));
24
24
  exports.ArticleRecommendation = ArticleRecommendation_1.default;
25
+ var ArticleRecommendationsProvider_1 = __importDefault(require("./ArticleRecommendationsProvider"));
26
+ exports.ArticleRecommendationsProvider = ArticleRecommendationsProvider_1.default;
27
+ var RecommendedArticleList_1 = __importDefault(require("./RecommendedArticleList"));
28
+ exports.RecommendedArticleList = RecommendedArticleList_1.default;
25
29
  __exportStar(require("./baseProps"), exports);
26
30
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/article-recommendations/components/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,8DAAsC;AAIN,qBAJzB,qBAAU,CAIyB;AAH1C,kFAA2D;AAGlD,gCAHF,+BAAqB,CAGE;AAD9B,8CAA2B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/article-recommendations/components/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,8DAAsC;AAQpC,qBARK,qBAAU,CAQL;AAPZ,kFAA2D;AAMzD,gCANK,+BAAqB,CAML;AALvB,oGAA6E;AAO3E,yCAPK,wCAA8B,CAOL;AANhC,oFAA6D;AAO3D,iCAPK,gCAAsB,CAOL;AALxB,8CAA2B"}
@@ -0,0 +1,3 @@
1
+ import { ArticleRecommendationsProviderContextType } from '../types';
2
+ import React from 'react';
3
+ export declare const ArticleRecommendationsProviderContext: React.Context<ArticleRecommendationsProviderContextType | null>;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ArticleRecommendationsProviderContext = void 0;
7
+ var react_1 = __importDefault(require("react"));
8
+ exports.ArticleRecommendationsProviderContext = react_1.default.createContext(null);
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/article-recommendations/context/index.tsx"],"names":[],"mappings":";;;;;;AACA,gDAAyB;AAEZ,QAAA,qCAAqC,GAAG,eAAK,CAAC,aAAa,CACtE,IAAI,CACL,CAAA"}
@@ -1,3 +1,4 @@
1
1
  export * from './components';
2
2
  export * from './provider';
3
3
  export * from './types';
4
+ export * from './context';
@@ -17,4 +17,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./components"), exports);
18
18
  __exportStar(require("./provider"), exports);
19
19
  __exportStar(require("./types"), exports);
20
+ __exportStar(require("./context"), exports);
20
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/article-recommendations/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA4B;AAC5B,6CAA0B;AAC1B,0CAAuB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/article-recommendations/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA4B;AAC5B,6CAA0B;AAC1B,0CAAuB;AACvB,4CAAyB"}
@@ -1,2 +1,4 @@
1
1
  import { ProviderArgs, Article } from '../index';
2
- export declare const recommendationsProvider: ({ articleId, publisher, userId, }: ProviderArgs) => Promise<Article[]>;
2
+ import { Fetcher } from 'swr';
3
+ export declare const fetcher: Fetcher<Article[]>;
4
+ export declare const recommendationsProvider: ({ articleId, publisher, userId, config, }: ProviderArgs) => Promise<Article[]>;
@@ -36,16 +36,33 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
36
36
  }
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.recommendationsProvider = void 0;
39
+ exports.recommendationsProvider = exports.fetcher = void 0;
40
40
  var api_1 = require("@newskit-render/api");
41
41
  var queries_1 = require("./queries");
42
+ var fetcher = function (articleId, config) { return __awaiter(void 0, void 0, void 0, function () {
43
+ var userId;
44
+ var _a;
45
+ return __generator(this, function (_b) {
46
+ if (typeof window !== 'undefined') {
47
+ //@ts-ignore
48
+ userId = (_a = window.utag) === null || _a === void 0 ? void 0 : _a.data['cp.utag_main_v_id'];
49
+ }
50
+ return [2 /*return*/, (0, exports.recommendationsProvider)({
51
+ articleId: articleId,
52
+ config: config,
53
+ userId: userId,
54
+ publisher: api_1.Publisher.SUN_UK,
55
+ })];
56
+ });
57
+ }); };
58
+ exports.fetcher = fetcher;
42
59
  var recommendationsProvider = function (_a) {
43
- var articleId = _a.articleId, publisher = _a.publisher, userId = _a.userId;
60
+ var articleId = _a.articleId, publisher = _a.publisher, userId = _a.userId, config = _a.config;
44
61
  return __awaiter(void 0, void 0, void 0, function () {
45
62
  var apolloClient, response, recommendedArticles;
46
63
  return __generator(this, function (_b) {
47
64
  switch (_b.label) {
48
- case 0: return [4 /*yield*/, (0, api_1.createApolloClient)(api_1.ClientTypes.nkapi)];
65
+ case 0: return [4 /*yield*/, (0, api_1.createApolloClient)(api_1.ClientTypes.nkapi, undefined, undefined, undefined, config)];
49
66
  case 1:
50
67
  apolloClient = _b.sent();
51
68
  return [4 /*yield*/, apolloClient.query({
@@ -1 +1 @@
1
- {"version":3,"file":"recommendationsProvider.js","sourceRoot":"","sources":["../../../../src/article-recommendations/provider/recommendationsProvider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAqE;AACrE,qCAA+C;AAGxC,IAAM,uBAAuB,GAAG,UAAO,EAI/B;QAHb,SAAS,eAAA,EACT,SAAS,eAAA,EACT,MAAM,YAAA;;;;;wBAEe,qBAAM,IAAA,wBAAkB,EAAC,iBAAW,CAAC,KAAK,CAAC,EAAA;;oBAA1D,YAAY,GAAG,SAA2C;oBAC/C,qBAAM,YAAY,CAAC,KAAK,CAAC;4BACxC,KAAK,EAAE,6BAAmB;4BAC1B,SAAS,EAAE,EAAE,SAAS,WAAA,EAAE,SAAS,EAAE,EAAE,SAAS,WAAA,EAAE,MAAM,QAAA,EAAE,EAAE;yBAC3D,CAAC,EAAA;;oBAHI,QAAQ,GAAG,SAGf;oBAEI,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CACpE,UAAC,OAAO;;wBAAK,OAAA,CAAC;4BACZ,KAAK,EAAE,OAAO,CAAC,MAAM;4BACrB,GAAG,EAAE,OAAO,CAAC,MAAM;4BACnB,IAAI,EAAE,OAAO,CAAC,QAAQ;4BACtB,IAAI,EACF,CAAA,MAAA,MAAA,MAAA,MAAA,OAAO,CAAC,KAAK,0CAAE,WAAW,0CAAE,KAAK,0CAAG,CAAC,CAAC,0CAAE,GAAG;iCAC3C,MAAA,MAAA,MAAA,OAAO,CAAC,KAAK,0CAAE,KAAK,0CAAG,CAAC,CAAC,0CAAE,GAAG,CAAA;gCAC9B,IAAI;yBACP,CAAC,CAAA;qBAAA,CACH,CAAA;oBAED,sBAAO,mBAAmB,EAAA;;;;CAC3B,CAAA;AAxBY,QAAA,uBAAuB,2BAwBnC"}
1
+ {"version":3,"file":"recommendationsProvider.js","sourceRoot":"","sources":["../../../../src/article-recommendations/provider/recommendationsProvider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAgF;AAChF,qCAA+C;AAIxC,IAAM,OAAO,GAAuB,UACzC,SAAS,EACT,MAAM;;;;QAGN,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YACjC,YAAY;YACZ,MAAM,GAAG,MAAA,MAAM,CAAC,IAAI,0CAAE,IAAI,CAAC,mBAAmB,CAAC,CAAA;SAChD;QAED,sBAAO,IAAA,+BAAuB,EAAC;gBAC7B,SAAS,WAAA;gBACT,MAAM,EAAE,MAAgB;gBACxB,MAAM,QAAA;gBACN,SAAS,EAAE,eAAS,CAAC,MAAM;aAC5B,CAAC,EAAA;;KACH,CAAA;AAhBY,QAAA,OAAO,WAgBnB;AAEM,IAAM,uBAAuB,GAAG,UAAO,EAK/B;QAJb,SAAS,eAAA,EACT,SAAS,eAAA,EACT,MAAM,YAAA,EACN,MAAM,YAAA;;;;;wBAEe,qBAAM,IAAA,wBAAkB,EAC3C,iBAAW,CAAC,KAAK,EACjB,SAAS,EACT,SAAS,EACT,SAAS,EACT,MAAM,CACP,EAAA;;oBANK,YAAY,GAAG,SAMpB;oBACgB,qBAAM,YAAY,CAAC,KAAK,CAAC;4BACxC,KAAK,EAAE,6BAAmB;4BAC1B,SAAS,EAAE,EAAE,SAAS,WAAA,EAAE,SAAS,EAAE,EAAE,SAAS,WAAA,EAAE,MAAM,QAAA,EAAE,EAAE;yBAC3D,CAAC,EAAA;;oBAHI,QAAQ,GAAG,SAGf;oBAEI,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CACpE,UAAC,OAAO;;wBAAK,OAAA,CAAC;4BACZ,KAAK,EAAE,OAAO,CAAC,MAAM;4BACrB,GAAG,EAAE,OAAO,CAAC,MAAM;4BACnB,IAAI,EAAE,OAAO,CAAC,QAAQ;4BACtB,IAAI,EACF,CAAA,MAAA,MAAA,MAAA,MAAA,OAAO,CAAC,KAAK,0CAAE,WAAW,0CAAE,KAAK,0CAAG,CAAC,CAAC,0CAAE,GAAG;iCAC3C,MAAA,MAAA,MAAA,OAAO,CAAC,KAAK,0CAAE,KAAK,0CAAG,CAAC,CAAC,0CAAE,GAAG,CAAA;gCAC9B,IAAI;yBACP,CAAC,CAAA;qBAAA,CACH,CAAA;oBAED,sBAAO,mBAAmB,EAAA;;;;CAC3B,CAAA;AA/BY,QAAA,uBAAuB,2BA+BnC"}
@@ -1,5 +1,6 @@
1
1
  import { Publisher } from '@newskit-render/api';
2
2
  import { MQ } from 'newskit';
3
+ import { ReactNode } from 'react';
3
4
  export declare type Article = {
4
5
  href: string;
5
6
  title: string;
@@ -19,10 +20,15 @@ export declare type ArticleRecommendationProps = {
19
20
  size: 'large' | 'small';
20
21
  overrides?: ArticleRecommendationOverrides;
21
22
  };
23
+ export declare type Config = {
24
+ newskitApiEnvUrl: string;
25
+ newskitApiXApiKey: string;
26
+ };
22
27
  export declare type ProviderArgs = {
23
28
  userId?: string;
24
29
  publisher: Publisher;
25
30
  articleId: string;
31
+ config?: Config;
26
32
  };
27
33
  export declare type ArticleRecommendationOverrides = {
28
34
  spaceStack?: MQ<string>;
@@ -54,3 +60,34 @@ export declare type ArticleRecommendationOverrides = {
54
60
  };
55
61
  };
56
62
  };
63
+ export declare type ArticleTemplate = Record<string, Article[]>;
64
+ export declare type ArticleTypeName = 'recommendedArticles' | 'adlibraryMPU';
65
+ export declare type ArticleTypes = Record<ArticleTypeName, {
66
+ totalArticlesCount: number;
67
+ }>;
68
+ export declare type DpaTemplate = ArticleTypes & {
69
+ templateId: string;
70
+ columnCount: MQ<string>;
71
+ size: 'small' | 'large';
72
+ };
73
+ export declare type DpaTemplateWithArticles = {
74
+ templateId: string;
75
+ columnCount: MQ<string>;
76
+ size: 'small' | 'large';
77
+ } & Record<string, Article[]>;
78
+ export declare type ArticleRecommendationsProviderBaseContextType = {
79
+ dpaTemplates: DpaTemplate[];
80
+ };
81
+ export declare type ArticleRecommendationsProviderContextTypeWithArticles = {
82
+ dpaTemplates: DpaTemplateWithArticles[];
83
+ };
84
+ export declare type ArticleRecommendationsProviderContextType = ArticleRecommendationsProviderBaseContextType | ArticleRecommendationsProviderContextTypeWithArticles;
85
+ export declare type ArticleRecommendationsProviderProps = {
86
+ articleId: string;
87
+ context?: ArticleRecommendationsProviderBaseContextType;
88
+ children: ReactNode;
89
+ config: Config;
90
+ };
91
+ export declare enum ContextNameMap {
92
+ 'articleRecommendationProvider' = "articleRecommendationProvider"
93
+ }
@@ -1,3 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ContextNameMap = void 0;
4
+ var ContextNameMap;
5
+ (function (ContextNameMap) {
6
+ ContextNameMap["articleRecommendationProvider"] = "articleRecommendationProvider";
7
+ })(ContextNameMap = exports.ContextNameMap || (exports.ContextNameMap = {}));
3
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/article-recommendations/types/index.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/article-recommendations/types/index.ts"],"names":[],"mappings":";;;AA2GA,IAAY,cAEX;AAFD,WAAY,cAAc;IACxB,iFAAiE,CAAA;AACnE,CAAC,EAFW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAEzB"}
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { ArticleRecommendationsProviderProps } from '../types';
3
+ declare const ArticleRecommendationsProvider: React.FC<ArticleRecommendationsProviderProps>;
4
+ export default ArticleRecommendationsProvider;
@@ -0,0 +1,61 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import React from 'react';
13
+ import merge from 'lodash.merge';
14
+ import { ArticleRecommendationsProviderContext } from '../context';
15
+ import useSWR from 'swr';
16
+ import { fetcher } from '../provider';
17
+ var defaultContext = {
18
+ dpaTemplates: [
19
+ {
20
+ templateId: 'list-1',
21
+ columnCount: '1',
22
+ size: 'small',
23
+ recommendedArticles: { totalArticlesCount: 4 },
24
+ adlibraryMPU: { totalArticlesCount: 0 },
25
+ },
26
+ {
27
+ templateId: 'list-2',
28
+ columnCount: { xs: '1', sm: '2', lg: '4' },
29
+ size: 'large',
30
+ recommendedArticles: { totalArticlesCount: 8 },
31
+ adlibraryMPU: { totalArticlesCount: 0 },
32
+ },
33
+ ],
34
+ };
35
+ var mapDpaTemplates = function (articles, dpaTemplates) {
36
+ var articleTypeNames = Object.keys(dpaTemplates[0]).slice(3);
37
+ return articleTypeNames.reduce(function (acc, articleTypeName) {
38
+ var startCount = 0;
39
+ var dpaTemplatesWithArticles = acc.map(function (dpaTemplate) {
40
+ var _a;
41
+ var totalArticlesCount = dpaTemplate[articleTypeName].totalArticlesCount;
42
+ var slicedArticles = articles[articleTypeName].slice(startCount, startCount + totalArticlesCount);
43
+ startCount += totalArticlesCount;
44
+ return __assign(__assign({}, dpaTemplate), (_a = {}, _a[articleTypeName] = slicedArticles, _a));
45
+ });
46
+ startCount = 0;
47
+ return dpaTemplatesWithArticles;
48
+ }, dpaTemplates);
49
+ };
50
+ var ArticleRecommendationsProvider = function (_a) {
51
+ var articleId = _a.articleId, context = _a.context, config = _a.config, children = _a.children;
52
+ var enhancedContext = merge({}, defaultContext, context);
53
+ var articles = useSWR([articleId, config], fetcher).data;
54
+ var mapedDpaTemplates = articles
55
+ ? mapDpaTemplates({ recommendedArticles: articles, adlibraryMPU: [] }, enhancedContext.dpaTemplates)
56
+ : [];
57
+ var contextWithArticles = __assign(__assign({}, enhancedContext), { dpaTemplates: mapedDpaTemplates, articleId: articleId });
58
+ return (React.createElement(ArticleRecommendationsProviderContext.Provider, { value: contextWithArticles }, children));
59
+ };
60
+ export default ArticleRecommendationsProvider;
61
+ //# sourceMappingURL=ArticleRecommendationsProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArticleRecommendationsProvider.js","sourceRoot":"","sources":["../../../../src/article-recommendations/components/ArticleRecommendationsProvider.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,MAAM,cAAc,CAAA;AAChC,OAAO,EAAE,qCAAqC,EAAE,MAAM,YAAY,CAAA;AASlE,OAAO,MAAM,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,IAAM,cAAc,GAA8C;IAChE,YAAY,EAAE;QACZ;YACE,UAAU,EAAE,QAAQ;YACpB,WAAW,EAAE,GAAG;YAChB,IAAI,EAAE,OAAO;YACb,mBAAmB,EAAE,EAAE,kBAAkB,EAAE,CAAC,EAAE;YAC9C,YAAY,EAAE,EAAE,kBAAkB,EAAE,CAAC,EAAE;SACxC;QACD;YACE,UAAU,EAAE,QAAQ;YACpB,WAAW,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE;YAC1C,IAAI,EAAE,OAAO;YACb,mBAAmB,EAAE,EAAE,kBAAkB,EAAE,CAAC,EAAE;YAC9C,YAAY,EAAE,EAAE,kBAAkB,EAAE,CAAC,EAAE;SACxC;KACF;CACF,CAAA;AAED,IAAM,eAAe,GAAG,UACtB,QAAyB,EACzB,YAA2B;IAE3B,IAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC9D,OAAO,gBAAgB,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,eAAe;QAClD,IAAI,UAAU,GAAG,CAAC,CAAA;QAClB,IAAM,wBAAwB,GAA8B,GAAG,CAAC,GAAG,CACjE,UAAC,WAAW;;YACF,IAAA,kBAAkB,GAAK,WAAW,CAAC,eAAe,CAAC,mBAAjC,CAAiC;YAC3D,IAAM,cAAc,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC,KAAK,CACpD,UAAU,EACV,UAAU,GAAI,kBAA6B,CAC5C,CAAA;YAED,UAAU,IAAI,kBAA4B,CAAA;YAC1C,6BACK,WAAW,gBACb,eAAe,IAAG,cAAc,OAClC;QACH,CAAC,CACF,CAAA;QACD,UAAU,GAAG,CAAC,CAAA;QACd,OAAO,wBAAwB,CAAA;IACjC,CAAC,EAAE,YAAmB,CAAC,CAAA;AACzB,CAAC,CAAA;AAED,IAAM,8BAA8B,GAAkD,UAAC,EAKtF;QAJC,SAAS,eAAA,EACT,OAAO,aAAA,EACP,MAAM,YAAA,EACN,QAAQ,cAAA;IAER,IAAM,eAAe,GAAG,KAAK,CAAC,EAAE,EAAE,cAAc,EAAE,OAAO,CAAC,CAAA;IAClD,IAAM,QAAQ,GAAK,MAAM,CAAY,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,KAApD,CAAoD;IAE1E,IAAM,iBAAiB,GAAG,QAAQ;QAChC,CAAC,CAAC,eAAe,CACb,EAAE,mBAAmB,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE,EACnD,eAAe,CAAC,YAAY,CAC7B;QACH,CAAC,CAAC,EAAE,CAAA;IAEN,IAAM,mBAAmB,yBACpB,eAAe,KAClB,YAAY,EAAE,iBAAiB,EAC/B,SAAS,WAAA,GACV,CAAA;IAED,OAAO,CACL,oBAAC,qCAAqC,CAAC,QAAQ,IAAC,KAAK,EAAE,mBAAmB,IACvE,QAAQ,CACsC,CAClD,CAAA;AACH,CAAC,CAAA;AAED,eAAe,8BAA8B,CAAA"}
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ declare const RecommendedArticleList: React.FC<{
3
+ templateId: string;
4
+ }>;
5
+ export default RecommendedArticleList;
@@ -0,0 +1,15 @@
1
+ import React, { useContext } from 'react';
2
+ import AricleGrid from './ArticleGrid';
3
+ import { ArticleRecommendationsProviderContext } from '../context';
4
+ var RecommendedArticleList = function (_a) {
5
+ var templateId = _a.templateId;
6
+ var context = useContext(ArticleRecommendationsProviderContext);
7
+ var dpaTemplate = context.dpaTemplates.find(function (dpaTemplate) { return dpaTemplate.templateId === templateId; });
8
+ if (!dpaTemplate) {
9
+ return null;
10
+ }
11
+ var recommendedArticles = dpaTemplate.recommendedArticles, columnCount = dpaTemplate.columnCount, size = dpaTemplate.size;
12
+ return (React.createElement(AricleGrid, { articles: recommendedArticles, columnCount: columnCount, size: size }));
13
+ };
14
+ export default RecommendedArticleList;
15
+ //# sourceMappingURL=RecommendedArticleList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecommendedArticleList.js","sourceRoot":"","sources":["../../../../src/article-recommendations/components/RecommendedArticleList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AACzC,OAAO,UAAU,MAAM,eAAe,CAAA;AACtC,OAAO,EAAE,qCAAqC,EAAE,MAAM,YAAY,CAAA;AAGlE,IAAM,sBAAsB,GAAqC,UAAC,EAEjE;QADC,UAAU,gBAAA;IAEV,IAAM,OAAO,GAAG,UAAU,CACxB,qCAAqC,CACmB,CAAA;IAE1D,IAAM,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAC3C,UAAC,WAAW,IAAK,OAAA,WAAW,CAAC,UAAU,KAAK,UAAU,EAArC,CAAqC,CACvD,CAAA;IAED,IAAI,CAAC,WAAW,EAAE;QAChB,OAAO,IAAI,CAAA;KACZ;IAEO,IAAA,mBAAmB,GAAwB,WAAW,oBAAnC,EAAE,WAAW,GAAW,WAAW,YAAtB,EAAE,IAAI,GAAK,WAAW,KAAhB,CAAgB;IAC9D,OAAO,CACL,oBAAC,UAAU,IACT,QAAQ,EAAE,mBAAmB,EAC7B,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,IAAI,GACV,CACH,CAAA;AACH,CAAC,CAAA;AAED,eAAe,sBAAsB,CAAA"}
@@ -1,4 +1,6 @@
1
1
  import AricleGrid from './ArticleGrid';
2
2
  import ArticleRecommendation from './ArticleRecommendation';
3
+ import ArticleRecommendationsProvider from './ArticleRecommendationsProvider';
4
+ import RecommendedArticleList from './RecommendedArticleList';
3
5
  export * from './baseProps';
4
- export { ArticleRecommendation, AricleGrid };
6
+ export { ArticleRecommendation, AricleGrid, ArticleRecommendationsProvider, RecommendedArticleList, };
@@ -1,5 +1,7 @@
1
1
  import AricleGrid from './ArticleGrid';
2
2
  import ArticleRecommendation from './ArticleRecommendation';
3
+ import ArticleRecommendationsProvider from './ArticleRecommendationsProvider';
4
+ import RecommendedArticleList from './RecommendedArticleList';
3
5
  export * from './baseProps';
4
- export { ArticleRecommendation, AricleGrid };
6
+ export { ArticleRecommendation, AricleGrid, ArticleRecommendationsProvider, RecommendedArticleList, };
5
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/article-recommendations/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,eAAe,CAAA;AACtC,OAAO,qBAAqB,MAAM,yBAAyB,CAAA;AAE3D,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/article-recommendations/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,eAAe,CAAA;AACtC,OAAO,qBAAqB,MAAM,yBAAyB,CAAA;AAC3D,OAAO,8BAA8B,MAAM,kCAAkC,CAAA;AAC7E,OAAO,sBAAsB,MAAM,0BAA0B,CAAA;AAE7D,cAAc,aAAa,CAAA;AAC3B,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,8BAA8B,EAC9B,sBAAsB,GACvB,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { ArticleRecommendationsProviderContextType } from '../types';
2
+ import React from 'react';
3
+ export declare const ArticleRecommendationsProviderContext: React.Context<ArticleRecommendationsProviderContextType | null>;
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ export var ArticleRecommendationsProviderContext = React.createContext(null);
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/article-recommendations/context/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,MAAM,CAAC,IAAM,qCAAqC,GAAG,KAAK,CAAC,aAAa,CACtE,IAAI,CACL,CAAA"}
@@ -1,3 +1,4 @@
1
1
  export * from './components';
2
2
  export * from './provider';
3
3
  export * from './types';
4
+ export * from './context';
@@ -1,4 +1,5 @@
1
1
  export * from './components';
2
2
  export * from './provider';
3
3
  export * from './types';
4
+ export * from './context';
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/article-recommendations/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/article-recommendations/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA"}
@@ -1,2 +1,4 @@
1
1
  import { ProviderArgs, Article } from '../index';
2
- export declare const recommendationsProvider: ({ articleId, publisher, userId, }: ProviderArgs) => Promise<Article[]>;
2
+ import { Fetcher } from 'swr';
3
+ export declare const fetcher: Fetcher<Article[]>;
4
+ export declare const recommendationsProvider: ({ articleId, publisher, userId, config, }: ProviderArgs) => Promise<Article[]>;
@@ -34,15 +34,31 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
34
34
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
35
  }
36
36
  };
37
- import { createApolloClient, ClientTypes } from '@newskit-render/api';
37
+ import { createApolloClient, ClientTypes, Publisher } from '@newskit-render/api';
38
38
  import { GET_RECOMMENDATIONS } from './queries';
39
+ export var fetcher = function (articleId, config) { return __awaiter(void 0, void 0, void 0, function () {
40
+ var userId;
41
+ var _a;
42
+ return __generator(this, function (_b) {
43
+ if (typeof window !== 'undefined') {
44
+ //@ts-ignore
45
+ userId = (_a = window.utag) === null || _a === void 0 ? void 0 : _a.data['cp.utag_main_v_id'];
46
+ }
47
+ return [2 /*return*/, recommendationsProvider({
48
+ articleId: articleId,
49
+ config: config,
50
+ userId: userId,
51
+ publisher: Publisher.SUN_UK,
52
+ })];
53
+ });
54
+ }); };
39
55
  export var recommendationsProvider = function (_a) {
40
- var articleId = _a.articleId, publisher = _a.publisher, userId = _a.userId;
56
+ var articleId = _a.articleId, publisher = _a.publisher, userId = _a.userId, config = _a.config;
41
57
  return __awaiter(void 0, void 0, void 0, function () {
42
58
  var apolloClient, response, recommendedArticles;
43
59
  return __generator(this, function (_b) {
44
60
  switch (_b.label) {
45
- case 0: return [4 /*yield*/, createApolloClient(ClientTypes.nkapi)];
61
+ case 0: return [4 /*yield*/, createApolloClient(ClientTypes.nkapi, undefined, undefined, undefined, config)];
46
62
  case 1:
47
63
  apolloClient = _b.sent();
48
64
  return [4 /*yield*/, apolloClient.query({
@@ -1 +1 @@
1
- {"version":3,"file":"recommendationsProvider.js","sourceRoot":"","sources":["../../../../src/article-recommendations/provider/recommendationsProvider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAG/C,MAAM,CAAC,IAAM,uBAAuB,GAAG,UAAO,EAI/B;QAHb,SAAS,eAAA,EACT,SAAS,eAAA,EACT,MAAM,YAAA;;;;;wBAEe,qBAAM,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAAC,EAAA;;oBAA1D,YAAY,GAAG,SAA2C;oBAC/C,qBAAM,YAAY,CAAC,KAAK,CAAC;4BACxC,KAAK,EAAE,mBAAmB;4BAC1B,SAAS,EAAE,EAAE,SAAS,WAAA,EAAE,SAAS,EAAE,EAAE,SAAS,WAAA,EAAE,MAAM,QAAA,EAAE,EAAE;yBAC3D,CAAC,EAAA;;oBAHI,QAAQ,GAAG,SAGf;oBAEI,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CACpE,UAAC,OAAO;;wBAAK,OAAA,CAAC;4BACZ,KAAK,EAAE,OAAO,CAAC,MAAM;4BACrB,GAAG,EAAE,OAAO,CAAC,MAAM;4BACnB,IAAI,EAAE,OAAO,CAAC,QAAQ;4BACtB,IAAI,EACF,CAAA,MAAA,MAAA,MAAA,MAAA,OAAO,CAAC,KAAK,0CAAE,WAAW,0CAAE,KAAK,0CAAG,CAAC,CAAC,0CAAE,GAAG;iCAC3C,MAAA,MAAA,MAAA,OAAO,CAAC,KAAK,0CAAE,KAAK,0CAAG,CAAC,CAAC,0CAAE,GAAG,CAAA;gCAC9B,IAAI;yBACP,CAAC,CAAA;qBAAA,CACH,CAAA;oBAED,sBAAO,mBAAmB,EAAA;;;;CAC3B,CAAA"}
1
+ {"version":3,"file":"recommendationsProvider.js","sourceRoot":"","sources":["../../../../src/article-recommendations/provider/recommendationsProvider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAI/C,MAAM,CAAC,IAAM,OAAO,GAAuB,UACzC,SAAS,EACT,MAAM;;;;QAGN,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YACjC,YAAY;YACZ,MAAM,GAAG,MAAA,MAAM,CAAC,IAAI,0CAAE,IAAI,CAAC,mBAAmB,CAAC,CAAA;SAChD;QAED,sBAAO,uBAAuB,CAAC;gBAC7B,SAAS,WAAA;gBACT,MAAM,EAAE,MAAgB;gBACxB,MAAM,QAAA;gBACN,SAAS,EAAE,SAAS,CAAC,MAAM;aAC5B,CAAC,EAAA;;KACH,CAAA;AAED,MAAM,CAAC,IAAM,uBAAuB,GAAG,UAAO,EAK/B;QAJb,SAAS,eAAA,EACT,SAAS,eAAA,EACT,MAAM,YAAA,EACN,MAAM,YAAA;;;;;wBAEe,qBAAM,kBAAkB,CAC3C,WAAW,CAAC,KAAK,EACjB,SAAS,EACT,SAAS,EACT,SAAS,EACT,MAAM,CACP,EAAA;;oBANK,YAAY,GAAG,SAMpB;oBACgB,qBAAM,YAAY,CAAC,KAAK,CAAC;4BACxC,KAAK,EAAE,mBAAmB;4BAC1B,SAAS,EAAE,EAAE,SAAS,WAAA,EAAE,SAAS,EAAE,EAAE,SAAS,WAAA,EAAE,MAAM,QAAA,EAAE,EAAE;yBAC3D,CAAC,EAAA;;oBAHI,QAAQ,GAAG,SAGf;oBAEI,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CACpE,UAAC,OAAO;;wBAAK,OAAA,CAAC;4BACZ,KAAK,EAAE,OAAO,CAAC,MAAM;4BACrB,GAAG,EAAE,OAAO,CAAC,MAAM;4BACnB,IAAI,EAAE,OAAO,CAAC,QAAQ;4BACtB,IAAI,EACF,CAAA,MAAA,MAAA,MAAA,MAAA,OAAO,CAAC,KAAK,0CAAE,WAAW,0CAAE,KAAK,0CAAG,CAAC,CAAC,0CAAE,GAAG;iCAC3C,MAAA,MAAA,MAAA,OAAO,CAAC,KAAK,0CAAE,KAAK,0CAAG,CAAC,CAAC,0CAAE,GAAG,CAAA;gCAC9B,IAAI;yBACP,CAAC,CAAA;qBAAA,CACH,CAAA;oBAED,sBAAO,mBAAmB,EAAA;;;;CAC3B,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { Publisher } from '@newskit-render/api';
2
2
  import { MQ } from 'newskit';
3
+ import { ReactNode } from 'react';
3
4
  export declare type Article = {
4
5
  href: string;
5
6
  title: string;
@@ -19,10 +20,15 @@ export declare type ArticleRecommendationProps = {
19
20
  size: 'large' | 'small';
20
21
  overrides?: ArticleRecommendationOverrides;
21
22
  };
23
+ export declare type Config = {
24
+ newskitApiEnvUrl: string;
25
+ newskitApiXApiKey: string;
26
+ };
22
27
  export declare type ProviderArgs = {
23
28
  userId?: string;
24
29
  publisher: Publisher;
25
30
  articleId: string;
31
+ config?: Config;
26
32
  };
27
33
  export declare type ArticleRecommendationOverrides = {
28
34
  spaceStack?: MQ<string>;
@@ -54,3 +60,34 @@ export declare type ArticleRecommendationOverrides = {
54
60
  };
55
61
  };
56
62
  };
63
+ export declare type ArticleTemplate = Record<string, Article[]>;
64
+ export declare type ArticleTypeName = 'recommendedArticles' | 'adlibraryMPU';
65
+ export declare type ArticleTypes = Record<ArticleTypeName, {
66
+ totalArticlesCount: number;
67
+ }>;
68
+ export declare type DpaTemplate = ArticleTypes & {
69
+ templateId: string;
70
+ columnCount: MQ<string>;
71
+ size: 'small' | 'large';
72
+ };
73
+ export declare type DpaTemplateWithArticles = {
74
+ templateId: string;
75
+ columnCount: MQ<string>;
76
+ size: 'small' | 'large';
77
+ } & Record<string, Article[]>;
78
+ export declare type ArticleRecommendationsProviderBaseContextType = {
79
+ dpaTemplates: DpaTemplate[];
80
+ };
81
+ export declare type ArticleRecommendationsProviderContextTypeWithArticles = {
82
+ dpaTemplates: DpaTemplateWithArticles[];
83
+ };
84
+ export declare type ArticleRecommendationsProviderContextType = ArticleRecommendationsProviderBaseContextType | ArticleRecommendationsProviderContextTypeWithArticles;
85
+ export declare type ArticleRecommendationsProviderProps = {
86
+ articleId: string;
87
+ context?: ArticleRecommendationsProviderBaseContextType;
88
+ children: ReactNode;
89
+ config: Config;
90
+ };
91
+ export declare enum ContextNameMap {
92
+ 'articleRecommendationProvider' = "articleRecommendationProvider"
93
+ }
@@ -1,2 +1,5 @@
1
- export {};
1
+ export var ContextNameMap;
2
+ (function (ContextNameMap) {
3
+ ContextNameMap["articleRecommendationProvider"] = "articleRecommendationProvider";
4
+ })(ContextNameMap || (ContextNameMap = {}));
2
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/article-recommendations/types/index.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/article-recommendations/types/index.ts"],"names":[],"mappings":"AA2GA,MAAM,CAAN,IAAY,cAEX;AAFD,WAAY,cAAc;IACxB,iFAAiE,CAAA;AACnE,CAAC,EAFW,cAAc,KAAd,cAAc,QAEzB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@newskit-render/standalone-components",
3
- "version": "1.10.3",
3
+ "version": "1.11.0",
4
4
  "description": "Newskit Render Standalone Components",
5
5
  "author": "",
6
6
  "license": "UNLICENSED",
@@ -34,7 +34,7 @@
34
34
  "@emotion-icons/material-outlined": "3.14.0",
35
35
  "@emotion/react": "11.10.4",
36
36
  "@emotion/styled": "11.10.4",
37
- "@newskit-render/api": "^1.2.2",
37
+ "@newskit-render/api": "^1.3.0",
38
38
  "@newskit-render/shared-components": "^1.18.0",
39
39
  "algoliasearch": "4.13.1",
40
40
  "cross-fetch": "3.1.5",