@davi-ai/retorik-framework 3.2.5 → 4.0.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 (88) hide show
  1. package/dist/{AttachmentDetail.0a576bf3.js → AttachmentDetail.37a709af.js} +160 -174
  2. package/dist/AttachmentDetail.37a709af.js.map +1 -0
  3. package/dist/{AttachmentDetail.c4286a45.js → AttachmentDetail.53ba969a.js} +159 -173
  4. package/dist/AttachmentDetail.53ba969a.js.map +1 -0
  5. package/dist/{CustomView.913a9f32.js → CustomView.9930c671.js} +16 -20
  6. package/dist/CustomView.9930c671.js.map +1 -0
  7. package/dist/{CustomView.edf84de1.js → CustomView.bf84bdf3.js} +16 -20
  8. package/dist/CustomView.bf84bdf3.js.map +1 -0
  9. package/dist/{Emergency.0cf005ce.js → Emergency.1e63c85f.js} +38 -30
  10. package/dist/Emergency.1e63c85f.js.map +1 -0
  11. package/dist/{Emergency.897ee3c7.js → Emergency.89b4d9ed.js} +37 -29
  12. package/dist/Emergency.89b4d9ed.js.map +1 -0
  13. package/dist/{FullScreenImage.9a9b978e.js → FullScreenImage.17df27bf.js} +11 -18
  14. package/dist/FullScreenImage.17df27bf.js.map +1 -0
  15. package/dist/{FullScreenImage.1fe27198.js → FullScreenImage.99e19e10.js} +11 -18
  16. package/dist/FullScreenImage.99e19e10.js.map +1 -0
  17. package/dist/{HistoryList.4c303dc6.js → HistoryList.3b4b1ffb.js} +35 -36
  18. package/dist/HistoryList.3b4b1ffb.js.map +1 -0
  19. package/dist/{HistoryList.03a56119.js → HistoryList.e5c01f21.js} +35 -36
  20. package/dist/HistoryList.e5c01f21.js.map +1 -0
  21. package/dist/LanguageChoice.1d866cfa.js +119 -0
  22. package/dist/LanguageChoice.1d866cfa.js.map +1 -0
  23. package/dist/LanguageChoice.cce361a3.js +128 -0
  24. package/dist/LanguageChoice.cce361a3.js.map +1 -0
  25. package/dist/{LittleWeatherContainer.07937cf3.js → LittleWeatherContainer.7e41105e.js} +3 -3
  26. package/dist/LittleWeatherContainer.7e41105e.js.map +1 -0
  27. package/dist/{LittleWeatherContainer.d27a6b8a.js → LittleWeatherContainer.ee087e22.js} +3 -3
  28. package/dist/LittleWeatherContainer.ee087e22.js.map +1 -0
  29. package/dist/MapContainer.14c28128.js +117 -0
  30. package/dist/MapContainer.14c28128.js.map +1 -0
  31. package/dist/MapContainer.f22ad81f.js +104 -0
  32. package/dist/MapContainer.f22ad81f.js.map +1 -0
  33. package/dist/{NewsContainer.a91d9131.js → NewsContainer.c0a24775.js} +84 -88
  34. package/dist/NewsContainer.c0a24775.js.map +1 -0
  35. package/dist/{NewsContainer.f0d2ee9c.js → NewsContainer.c3331d80.js} +79 -83
  36. package/dist/NewsContainer.c3331d80.js.map +1 -0
  37. package/dist/PrintingPreview.5351c733.js +147 -0
  38. package/dist/PrintingPreview.5351c733.js.map +1 -0
  39. package/dist/PrintingPreview.6d70355b.js +138 -0
  40. package/dist/PrintingPreview.6d70355b.js.map +1 -0
  41. package/dist/{SpiritEngineWrapper.1d8db53d.js → SpiritEngineWrapper.21ea10d4.js} +8 -7
  42. package/dist/SpiritEngineWrapper.21ea10d4.js.map +1 -0
  43. package/dist/{SpiritEngineWrapper.27e9c120.js → SpiritEngineWrapper.39627300.js} +8 -7
  44. package/dist/SpiritEngineWrapper.39627300.js.map +1 -0
  45. package/dist/{ThreeJsWrapper.09c689b8.js → ThreeJsWrapper.8f15a85b.js} +13 -16
  46. package/dist/ThreeJsWrapper.8f15a85b.js.map +1 -0
  47. package/dist/{ThreeJsWrapper.7918143f.js → ThreeJsWrapper.a46ee0e9.js} +13 -16
  48. package/dist/ThreeJsWrapper.a46ee0e9.js.map +1 -0
  49. package/dist/VeilleManager.443b366e.js +569 -0
  50. package/dist/VeilleManager.443b366e.js.map +1 -0
  51. package/dist/VeilleManager.d8bde1ee.js +550 -0
  52. package/dist/VeilleManager.d8bde1ee.js.map +1 -0
  53. package/dist/{Weather.99917b66.js → Weather.bb414852.js} +73 -117
  54. package/dist/Weather.bb414852.js.map +1 -0
  55. package/dist/{Weather.cf58823d.js → Weather.ced9b467.js} +70 -115
  56. package/dist/Weather.ced9b467.js.map +1 -0
  57. package/dist/index.d.ts +401 -366
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +47604 -19604
  60. package/dist/index.js.map +1 -1
  61. package/dist/index.modern.js +43539 -15580
  62. package/dist/index.modern.js.map +1 -1
  63. package/package.json +10 -10
  64. package/README.md +0 -6
  65. package/dist/AttachmentDetail.0a576bf3.js.map +0 -1
  66. package/dist/AttachmentDetail.c4286a45.js.map +0 -1
  67. package/dist/CustomView.913a9f32.js.map +0 -1
  68. package/dist/CustomView.edf84de1.js.map +0 -1
  69. package/dist/Emergency.0cf005ce.js.map +0 -1
  70. package/dist/Emergency.897ee3c7.js.map +0 -1
  71. package/dist/FullScreenImage.1fe27198.js.map +0 -1
  72. package/dist/FullScreenImage.9a9b978e.js.map +0 -1
  73. package/dist/HistoryList.03a56119.js.map +0 -1
  74. package/dist/HistoryList.4c303dc6.js.map +0 -1
  75. package/dist/LanguageChoice.623ee802.js +0 -113
  76. package/dist/LanguageChoice.623ee802.js.map +0 -1
  77. package/dist/LanguageChoice.ff0cd04c.js +0 -122
  78. package/dist/LanguageChoice.ff0cd04c.js.map +0 -1
  79. package/dist/LittleWeatherContainer.07937cf3.js.map +0 -1
  80. package/dist/LittleWeatherContainer.d27a6b8a.js.map +0 -1
  81. package/dist/NewsContainer.a91d9131.js.map +0 -1
  82. package/dist/NewsContainer.f0d2ee9c.js.map +0 -1
  83. package/dist/SpiritEngineWrapper.1d8db53d.js.map +0 -1
  84. package/dist/SpiritEngineWrapper.27e9c120.js.map +0 -1
  85. package/dist/ThreeJsWrapper.09c689b8.js.map +0 -1
  86. package/dist/ThreeJsWrapper.7918143f.js.map +0 -1
  87. package/dist/Weather.99917b66.js.map +0 -1
  88. package/dist/Weather.cf58823d.js.map +0 -1
@@ -1,6 +1,7 @@
1
- import "./Weather.cf58823d.js";
1
+ import "./Weather.ced9b467.js";
2
2
  import {jsxs as $7qgKV$jsxs, jsx as $7qgKV$jsx} from "react/jsx-runtime";
3
3
  import $7qgKV$react, {useState as $7qgKV$useState, useRef as $7qgKV$useRef, useEffect as $7qgKV$useEffect, useMemo as $7qgKV$useMemo} from "react";
4
+ import {useDispatch as $7qgKV$useDispatch, useSelector as $7qgKV$useSelector} from "react-redux";
4
5
 
5
6
 
6
7
  function $parcel$defineInteropFlag(a) {
@@ -22,15 +23,8 @@ $parcel$export(module.exports, "default", () => $aedc1e5f954603b8$export$2e2bcd8
22
23
 
23
24
 
24
25
 
25
- var $2fuDN = parcelRequire("2fuDN");
26
26
 
27
- var $1Qww3 = parcelRequire("1Qww3");
28
-
29
- var $i1rfm = parcelRequire("i1rfm");
30
-
31
- var $1x02c = parcelRequire("1x02c");
32
-
33
- var $aNpqK = parcelRequire("aNpqK");
27
+ var $8ItUL = parcelRequire("8ItUL");
34
28
 
35
29
  var $4ucVo = parcelRequire("4ucVo");
36
30
 
@@ -58,36 +52,51 @@ var $aedc1e5f954603b8$var$Steps = /*#__PURE__*/ function(Steps) {
58
52
  Steps[Steps["ending"] = 5] = "ending";
59
53
  return Steps;
60
54
  }($aedc1e5f954603b8$var$Steps || {});
61
- const $aedc1e5f954603b8$var$NewsContainer = ({ hideMenu: hideMenu, isRetorikNews: isRetorikNews, handleEndedWithoutloop: handleEndedWithoutloop })=>{
62
- const translation = (0, $2fuDN.useLocaleStore)((state)=>state.currentTranslations);
63
- const configuration = (0, $1x02c.useRetorikStore)((state)=>state.configuration);
64
- const muted = (0, $i1rfm.useSpeechStore)((state)=>state.muted);
65
- const isMobile = (0, $1Qww3.useViewStore)((state)=>state.isMobile);
66
- const isLandscape = (0, $1Qww3.useViewStore)((state)=>state.isLandscape);
67
- const isBorne = (0, $1Qww3.useViewStore)((state)=>state.isBorne);
68
- const configurations = (0, $1Qww3.useViewStore)((state)=>state.configurations);
69
- const { setRoute: setRoute, setDisplayControls: setDisplayControls } = (0, $1Qww3.useViewStore)((state)=>state.actions);
70
- const setMuted = (0, $i1rfm.useSpeechStore)((state)=>state.actions.setMuted);
71
- const setDisplayAgentInNews = (0, $1x02c.useRetorikStore)((state)=>state.actions.setDisplayAgentInNews);
72
- const sendEvent = (0, $aNpqK.useDirectlineStore)((state)=>state.actions.sendEvent);
55
+ const $aedc1e5f954603b8$var$NewsContainer = ({ hideMenu: hideMenu, isRetorikNews: isRetorikNews, loop: loop, fromVeille: fromVeille, handleEndedWithoutloop: handleEndedWithoutloop })=>{
56
+ const dispatch = (0, $7qgKV$useDispatch)();
57
+ const translation = (0, $7qgKV$useSelector)((state)=>state.localeReducer.currentTranslations);
58
+ const configuration = (0, $7qgKV$useSelector)((state)=>state.retorikReducer.configuration);
59
+ const displaySubtitles = (0, $7qgKV$useSelector)((state)=>state.retorikReducer.displaySubtitles);
60
+ const muted = (0, $7qgKV$useSelector)((state)=>state.speechReducer.muted);
61
+ const isMobile = (0, $7qgKV$useSelector)((state)=>state.viewReducer.isMobile);
62
+ const isLandscape = (0, $7qgKV$useSelector)((state)=>state.viewReducer.isLandscape);
63
+ const isBorne = (0, $7qgKV$useSelector)((state)=>state.viewReducer.isBorne);
64
+ const configurations = (0, $7qgKV$useSelector)((state)=>state.viewReducer.configurations);
65
+ const conversationId = (0, $7qgKV$useSelector)((state)=>state.activityReducer.conversationId);
66
+ const storedConversationData = (0, $7qgKV$useSelector)((state)=>state.directlineReducer.storedVeilleConversationData);
73
67
  const [displayData, setDisplayData] = (0, $7qgKV$useState)(configurations.views.news || configurations.views.home);
74
68
  const [step, setStep] = (0, $7qgKV$useState)(configurations.views.news?.openingVideo ? 1 : 2);
75
69
  const timerRef = (0, $7qgKV$useRef)(null);
76
70
  const newsEndedTimerRef = (0, $7qgKV$useRef)(null);
71
+ const oldDiplaySubtitles = (0, $7qgKV$useRef)(displaySubtitles);
77
72
  /**
78
73
  * On call :
79
74
  * - if the component is news-only, return
80
75
  * - else set ViewContext's route state to 'home'
81
76
  */ const handleBack = ()=>{
82
77
  if (isRetorikNews) return;
83
- setRoute((0, $4ucVo.Routes).Home);
78
+ dispatch((0, $8ItUL.storeActions).view.setRoute((0, $4ucVo.Routes).Home));
84
79
  };
85
80
  (0, $7qgKV$useEffect)(()=>{
86
- configuration.useOldRemote && setDisplayControls(false);
87
- muted && setMuted(false);
81
+ configuration.useOldRemote && dispatch((0, $8ItUL.storeActions).view.setDisplayControls(false));
82
+ // Force muted state to false if we are not in the veille
83
+ muted && !fromVeille && dispatch((0, $8ItUL.storeActions).speech.setMuted(false));
84
+ // Force hiding subtitles if we are in the veille
85
+ fromVeille && dispatch((0, $8ItUL.storeActions).retorik.setDisplaySubtitles(false));
88
86
  return ()=>{
87
+ // If we exit news from the veille, let's store the conversation id for next turn, clear activity store and set back subtitles
88
+ if (fromVeille) {
89
+ !storedConversationData?.id && conversationId && dispatch((0, $8ItUL.storeActions).directline.setStoredVeilleConversationData(conversationId));
90
+ dispatch((0, $8ItUL.storeActions).activity.resetActivityStore());
91
+ dispatch((0, $8ItUL.storeActions).retorik.setDisplaySubtitles(oldDiplaySubtitles.current));
92
+ }
89
93
  // Send closing events unless we are using RetorikNews component
90
- if (!isRetorikNews) sendEvent('Davi.CloseWindow', null, ()=>sendEvent('Davi.CloseWindowNews', null));
94
+ if (!isRetorikNews) dispatch((0, $8ItUL.storeActions).directline.sendEvent({
95
+ name: 'Davi.CloseWindow',
96
+ callback: ()=>dispatch((0, $8ItUL.storeActions).directline.sendEvent({
97
+ name: 'Davi.CloseWindowNews'
98
+ }))
99
+ }));
91
100
  };
92
101
  }, []);
93
102
  /**
@@ -99,19 +108,19 @@ const $aedc1e5f954603b8$var$NewsContainer = ({ hideMenu: hideMenu, isRetorikNews
99
108
  switch(step){
100
109
  case 1:
101
110
  {
102
- setDisplayAgentInNews(false);
111
+ dispatch((0, $8ItUL.storeActions).retorik.setDisplayAgentInNews(false));
103
112
  const videoUrl = configurations.views.news?.openingVideo;
104
- videoUrl ? setViewContextCurrentConfiguration(videoUrl) : setStep(2);
113
+ videoUrl && !fromVeille ? setViewContextCurrentConfiguration(videoUrl) : setStep(2);
105
114
  break;
106
115
  }
107
116
  case 2:
108
- setDisplayAgentInNews(true);
117
+ dispatch((0, $8ItUL.storeActions).retorik.setDisplayAgentInNews(true));
109
118
  setDisplayData(configurations.views.news || configurations.views.home);
110
119
  break;
111
120
  case 3:
112
121
  break;
113
122
  case 4:
114
- setDisplayAgentInNews(false);
123
+ dispatch((0, $8ItUL.storeActions).retorik.setDisplayAgentInNews(false));
115
124
  // If the position is known, display the weather page during 10 seconds, otherwise switch to the next step directly
116
125
  configuration.position?.latitude && configuration.position?.longitude ? timerRef.current = setTimeout(()=>{
117
126
  setStep(5);
@@ -119,17 +128,17 @@ const $aedc1e5f954603b8$var$NewsContainer = ({ hideMenu: hideMenu, isRetorikNews
119
128
  break;
120
129
  case 5:
121
130
  {
122
- setDisplayAgentInNews(false);
131
+ dispatch((0, $8ItUL.storeActions).retorik.setDisplayAgentInNews(false));
123
132
  const videoUrl = configurations.views.news?.openingVideo;
124
- videoUrl ? setViewContextCurrentConfiguration(videoUrl) : exitNewsOrLoop();
133
+ videoUrl && !fromVeille ? setViewContextCurrentConfiguration(videoUrl) : exitNewsOrLoop();
125
134
  break;
126
135
  }
127
136
  default:
128
137
  break;
129
138
  }
130
139
  return ()=>{
131
- timerRef && clearTimeout(timerRef.current);
132
- newsEndedTimerRef && clearTimeout(newsEndedTimerRef.current);
140
+ timerRef?.current && clearTimeout(timerRef.current);
141
+ newsEndedTimerRef?.current && clearTimeout(newsEndedTimerRef.current);
133
142
  };
134
143
  }, [
135
144
  step
@@ -149,17 +158,17 @@ const $aedc1e5f954603b8$var$NewsContainer = ({ hideMenu: hideMenu, isRetorikNews
149
158
  };
150
159
  /**
151
160
  * On call :
152
- * - send the event 'newsEnded' used in retorik Kiosk
153
161
  * - if the component is news-only :
154
162
  * + if 'loop' is explicitly set to false, call props' handleEndedWithoutloop method if defined. Call handleBack method otherwise
155
163
  * + if 'loop' is not false, loop by setting step state to Steps.news
156
164
  * - or else if 'loop' parameter in configuration is true, get back to Steps.news step. Call handleBack method otherwise
157
165
  */ const exitNewsOrLoop = ()=>{
158
- // Send event 'newsEnded'
159
- const endEvent = new Event('newsEnded');
160
- document.dispatchEvent(endEvent);
161
166
  // Relaunch from the start if this is a news-only component and loop hasn't explicitly been set to false
162
- isRetorikNews ? displayData.loop !== false ? setStep(2) : handleEndedWithoutloop ? handleEndedWithoutloop() : handleBack() : displayData.loop ? setStep(2) : handleBack();
167
+ if (isRetorikNews) {
168
+ if (fromVeille) loop ? setStep(2) : handleEndedWithoutloop?.();
169
+ else displayData.loop !== false || loop ? setStep(2) : handleEndedWithoutloop ? handleEndedWithoutloop() : handleBack();
170
+ } else // Relaunch from the start if the loop is activated, otherwise get back to homepage
171
+ displayData.loop || loop ? setStep(2) : handleBack();
163
172
  };
164
173
  /**
165
174
  * On video end :
@@ -185,7 +194,8 @@ const $aedc1e5f954603b8$var$NewsContainer = ({ hideMenu: hideMenu, isRetorikNews
185
194
  setStep(4);
186
195
  }, 3000));
187
196
  };
188
- return /*#__PURE__*/ (0, $7qgKV$jsxs)((0, $7qgKV$react).Fragment, {
197
+ return /*#__PURE__*/ (0, $7qgKV$jsxs)("div", {
198
+ className: "rf-relative rf-col-start-1 rf-col-span-full rf-row-start-1 rf-row-span-full rf-grid rf-grid-cols-8 rf-grid-rows-12",
189
199
  children: [
190
200
  /*#__PURE__*/ (0, $7qgKV$jsx)((0, $6hdFJ.default), {
191
201
  config: displayData.background,
@@ -211,7 +221,7 @@ const $aedc1e5f954603b8$var$NewsContainer = ({ hideMenu: hideMenu, isRetorikNews
211
221
  onEnd: handleNewsEnd,
212
222
  isRetorikNews: isRetorikNews
213
223
  }),
214
- step === 4 && /*#__PURE__*/ (0, $7qgKV$jsx)((0, $2pbjN.default), {
224
+ step === 4 && configuration.position?.latitude && configuration.position?.longitude && /*#__PURE__*/ (0, $7qgKV$jsx)((0, $2pbjN.default), {
215
225
  handleClose: handleBack
216
226
  }),
217
227
  !hideMenu && /*#__PURE__*/ (0, $7qgKV$jsx)((0, $9uOFS.default), {
@@ -220,7 +230,6 @@ const $aedc1e5f954603b8$var$NewsContainer = ({ hideMenu: hideMenu, isRetorikNews
220
230
  }),
221
231
  !hideMenu && isLandscape && !configuration.useOldRemote && !isRetorikNews && /*#__PURE__*/ (0, $7qgKV$jsx)((0, $g3FET.default), {
222
232
  onClick: handleBack,
223
- className: "rf-z-menu",
224
233
  showLabel: true
225
234
  }),
226
235
  !hideMenu && isBorne && !configuration.useOldRemote && !isRetorikNews && /*#__PURE__*/ (0, $7qgKV$jsx)((0, $9r8dA.default), {
@@ -238,10 +247,9 @@ $parcel$export(module.exports, "default", () => $c1e5018217fb7fb5$export$2e2bcd8
238
247
 
239
248
 
240
249
 
241
- var $2fuDN = parcelRequire("2fuDN");
242
250
  const $c1e5018217fb7fb5$var$Time = ({ belowReturnButton: belowReturnButton })=>{
243
- const translation = (0, $2fuDN.useLocaleStore)((state)=>state.currentTranslations);
244
- const locale = (0, $2fuDN.useLocaleStore)((state)=>state.locale);
251
+ const translation = (0, $7qgKV$useSelector)((state)=>state.localeReducer.currentTranslations);
252
+ const locale = (0, $7qgKV$useSelector)((state)=>state.localeReducer.locale);
245
253
  const [time, setTime] = (0, $7qgKV$useState)('');
246
254
  const timerRef = (0, $7qgKV$useRef)(null);
247
255
  /**
@@ -291,13 +299,8 @@ $parcel$export(module.exports, "default", () => $c6bafeb4a00d3b53$export$2e2bcd8
291
299
 
292
300
 
293
301
 
294
- var $1Qww3 = parcelRequire("1Qww3");
295
-
296
- var $aNpqK = parcelRequire("aNpqK");
297
302
 
298
- var $i1rfm = parcelRequire("i1rfm");
299
-
300
- var $j67YK = parcelRequire("j67YK");
303
+ var $8ItUL = parcelRequire("8ItUL");
301
304
 
302
305
  var $kThjX = parcelRequire("kThjX");
303
306
 
@@ -307,15 +310,13 @@ var $auAlt = parcelRequire("auAlt");
307
310
 
308
311
  var $9lsRd = parcelRequire("9lsRd");
309
312
  const $c6bafeb4a00d3b53$var$News = ({ intervalInSeconds: intervalInSeconds = 3, onEnd: onEnd, isRetorikNews: isRetorikNews })=>{
313
+ const dispatch = (0, $7qgKV$useDispatch)();
310
314
  const { newsAttachments: newsAttachments, activity: activity } = (0, $kThjX.default)();
311
- const route = (0, $1Qww3.useViewStore)((state)=>state.route);
312
- const isMobile = (0, $1Qww3.useViewStore)((state)=>state.isMobile);
313
- const newsConfiguration = (0, $1Qww3.useViewStore)((state)=>state.configurations.views.news);
314
- const currentDeviceType = (0, $1Qww3.useViewStore)((state)=>state.currentDeviceType);
315
- const retorikNewsEnded = (0, $j67YK.useUtilsStore)((state)=>state.retorikNewsEnded);
316
- const addToStreamingQueue = (0, $i1rfm.useSpeechStore)((state)=>state.actions.addToStreamingQueue);
317
- const setRetorikNewsEnded = (0, $j67YK.useUtilsStore)((state)=>state.actions.setRetorikNewsEnded);
318
- const sendEvent = (0, $aNpqK.useDirectlineStore)((state)=>state.actions.sendEvent);
315
+ const route = (0, $7qgKV$useSelector)((state)=>state.viewReducer.route);
316
+ const isMobile = (0, $7qgKV$useSelector)((state)=>state.viewReducer.isMobile);
317
+ const newsConfiguration = (0, $7qgKV$useSelector)((state)=>state.viewReducer.configurations.views.news);
318
+ const currentDeviceType = (0, $7qgKV$useSelector)((state)=>state.viewReducer.currentDeviceType);
319
+ const retorikNewsEnded = (0, $7qgKV$useSelector)((state)=>state.utilsReducer.retorikNewsEnded);
319
320
  const [carouselGridRowStart, setCarouselGridRowStart] = (0, $7qgKV$useState)();
320
321
  const [carouselGridRowSpan, setCarouselGridRowSpan] = (0, $7qgKV$useState)();
321
322
  const [bannerGridRowStart, setBannerGridRowStart] = (0, $7qgKV$useState)(10);
@@ -331,10 +332,12 @@ const $c6bafeb4a00d3b53$var$News = ({ intervalInSeconds: intervalInSeconds = 3,
331
332
  ]);
332
333
  (0, $7qgKV$useEffect)(()=>{
333
334
  if (!newsAttachments.length) setTimeout(()=>{
334
- sendEvent('news.getAllNews', null);
335
+ dispatch((0, $8ItUL.storeActions).directline.sendEvent({
336
+ name: 'news.getAllNews'
337
+ }));
335
338
  }, 2000);
336
339
  return ()=>{
337
- timerRef && clearTimeout(timerRef.current);
340
+ timerRef.current && clearTimeout(timerRef.current);
338
341
  };
339
342
  }, []);
340
343
  (0, $7qgKV$useEffect)(()=>{
@@ -434,7 +437,7 @@ const $c6bafeb4a00d3b53$var$News = ({ intervalInSeconds: intervalInSeconds = 3,
434
437
  ...activity,
435
438
  speak: `${textTitle}${textSubtitle}${currentNew.text}`
436
439
  };
437
- addToStreamingQueue(tempActivity);
440
+ dispatch((0, $8ItUL.storeActions).speech.addToStreamingQueue(tempActivity));
438
441
  }
439
442
  }, [
440
443
  activity,
@@ -458,11 +461,11 @@ const $c6bafeb4a00d3b53$var$News = ({ intervalInSeconds: intervalInSeconds = 3,
458
461
  if (news.length) {
459
462
  if (current < news.length - 1) {
460
463
  const delay = current < news.length - 1 ? intervalInSeconds : intervalInSeconds * 3;
461
- timerRef && clearTimeout(timerRef.current);
464
+ timerRef.current && clearTimeout(timerRef.current);
462
465
  if (route === (0, $4ucVo.Routes).News || isRetorikNews) timerRef.current = setTimeout(next, delay * 1000);
463
466
  } else onEnd();
464
467
  }
465
- setRetorikNewsEnded(false);
468
+ dispatch((0, $8ItUL.storeActions).utils.setRetorikNewsEnded(false));
466
469
  }
467
470
  }, [
468
471
  retorikNewsEnded
@@ -508,9 +511,8 @@ $parcel$export(module.exports, "default", () => $07fb045e03ad37d0$export$2e2bcd8
508
511
 
509
512
  var $5CsC6 = parcelRequire("5CsC6");
510
513
 
511
- var $9GPj7 = parcelRequire("9GPj7");
512
514
  const $07fb045e03ad37d0$var$useNews = ()=>{
513
- const activities = (0, $9GPj7.useActivityStore)((state)=>state.botEventActivities);
515
+ const activities = (0, $7qgKV$useSelector)((state)=>state.activityReducer.botEventActivities);
514
516
  if (!activities.length) return {
515
517
  newsAttachments: []
516
518
  };
@@ -543,9 +545,6 @@ $parcel$export(module.exports, "default", () => $de1f380ff3be314f$export$2e2bcd8
543
545
 
544
546
 
545
547
 
546
- var $1Qww3 = parcelRequire("1Qww3");
547
-
548
- var $2fuDN = parcelRequire("2fuDN");
549
548
 
550
549
  var $7pypd = parcelRequire("7pypd");
551
550
 
@@ -553,23 +552,22 @@ var $fjXOk = parcelRequire("fjXOk");
553
552
 
554
553
  var $6q7hI = parcelRequire("6q7hI");
555
554
  const $de1f380ff3be314f$var$Banner = ({ news: news, gridRowStart: gridRowStart, gridRowSpan: gridRowSpan, alignSelfEnd: alignSelfEnd })=>{
556
- const translation = (0, $2fuDN.useLocaleStore)((state)=>state.currentTranslations);
557
- const locale = (0, $2fuDN.useLocaleStore)((state)=>state.localeForRetorikStudioContent);
558
- const isRTL = (0, $2fuDN.useLocaleStore)((state)=>state.isRTL);
559
- const isMobile = (0, $1Qww3.useViewStore)((state)=>state.isMobile);
560
- const currentWidth = (0, $1Qww3.useViewStore)((state)=>state.currentWidth);
561
- const newsConfiguration = (0, $1Qww3.useViewStore)((state)=>state.configurations.views.news);
555
+ const translation = (0, $7qgKV$useSelector)((state)=>state.localeReducer.currentTranslations);
556
+ const locale = (0, $7qgKV$useSelector)((state)=>state.localeReducer.localeForRetorikStudioContent);
557
+ const localizedBannerTitle = (0, $7qgKV$useSelector)((state)=>state.localeReducer.localizedBannerTitle);
558
+ const isRTL = (0, $7qgKV$useSelector)((state)=>state.localeReducer.isRTL);
559
+ const isMobile = (0, $7qgKV$useSelector)((state)=>state.viewReducer.isMobile);
560
+ const currentWidth = (0, $7qgKV$useSelector)((state)=>state.viewReducer.currentWidth);
561
+ const newsConfiguration = (0, $7qgKV$useSelector)((state)=>state.viewReducer.configurations.views.news);
562
562
  const timerRef = (0, $7qgKV$useRef)(null);
563
563
  const [scrollDuration, setScrollDuration] = (0, $7qgKV$useState)(0);
564
564
  const category = (0, $7qgKV$useMemo)(()=>{
565
- if (news.category) return news.category;
566
- else if (newsConfiguration?.bannerTitleLocalized?.[locale]) return newsConfiguration.bannerTitleLocalized[locale];
567
- else if (newsConfiguration?.bannerTitle) return newsConfiguration.bannerTitle;
568
- return translation.news.continuous;
565
+ return news.category || newsConfiguration?.bannerTitleLocalized?.[locale] || localizedBannerTitle || newsConfiguration?.bannerTitle || translation.news.continuous;
569
566
  }, [
570
567
  news,
571
568
  newsConfiguration,
572
569
  locale,
570
+ localizedBannerTitle,
573
571
  translation
574
572
  ]);
575
573
  /**
@@ -641,11 +639,10 @@ $parcel$export(module.exports, "default", () => $262dee73bb235081$export$2e2bcd8
641
639
 
642
640
 
643
641
 
644
- var $2fuDN = parcelRequire("2fuDN");
645
642
 
646
643
  var $7pypd = parcelRequire("7pypd");
647
644
  const $262dee73bb235081$var$BannerTopMobile = ({ category: category, title: title, subtitle: subtitle, url: url })=>{
648
- const locale = (0, $2fuDN.useLocaleStore)((state)=>state.locale);
645
+ const locale = (0, $7qgKV$useSelector)((state)=>state.localeReducer.locale);
649
646
  return /*#__PURE__*/ (0, $7qgKV$jsxs)((0, $7qgKV$react).Fragment, {
650
647
  children: [
651
648
  /*#__PURE__*/ (0, $7qgKV$jsx)("div", {
@@ -692,11 +689,10 @@ $parcel$export(module.exports, "default", () => $5485971f80937390$export$2e2bcd8
692
689
 
693
690
 
694
691
 
695
- var $2fuDN = parcelRequire("2fuDN");
696
692
 
697
693
  var $7pypd = parcelRequire("7pypd");
698
694
  const $5485971f80937390$var$BannerTopLarge = ({ category: category, title: title, subtitle: subtitle })=>{
699
- const locale = (0, $2fuDN.useLocaleStore)((state)=>state.locale);
695
+ const locale = (0, $7qgKV$useSelector)((state)=>state.localeReducer.locale);
700
696
  return /*#__PURE__*/ (0, $7qgKV$jsxs)((0, $7qgKV$react).Fragment, {
701
697
  children: [
702
698
  /*#__PURE__*/ (0, $7qgKV$jsxs)("div", {
@@ -730,4 +726,4 @@ var $5485971f80937390$export$2e2bcd8739ae039 = $5485971f80937390$var$BannerTopLa
730
726
 
731
727
 
732
728
 
733
- //# sourceMappingURL=NewsContainer.f0d2ee9c.js.map
729
+ //# sourceMappingURL=NewsContainer.c3331d80.js.map
@@ -0,0 +1 @@
1
+ {"mappings":"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","sources":["src/components/News/NewsContainer.tsx","src/components/News/Time.tsx","src/components/News/News.tsx","src/hooks/useNews.tsx","src/components/News/Banner.tsx","src/components/News/BannerTopMobile.tsx","src/components/News/BannerTopLarge.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react'\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport { RootState, storeActions } from '../../store'\r\n\r\nimport type { NewsConfig } from '../../models/types'\r\nimport { Routes } from '../../models/enums'\r\n\r\nimport Background from '../Common/Background'\r\nimport Time from '../News/Time'\r\nimport News from '../News/News'\r\nimport Weather from '../Weather/Weather'\r\nimport AbsoluteLargeClosingButton from '../Utils/SubView/AbsoluteLargeClosingButton'\r\nimport CloseButton from '../Common/CloseButton'\r\nimport MenuDisplayer from '../Menus/MenuDisplayer'\r\nimport { BackButton } from '../Menu/Common'\r\n\r\ninterface NewsContainerProps {\r\n hideMenu?: boolean\r\n isRetorikNews?: boolean\r\n loop?: boolean\r\n fromVeille?: boolean\r\n handleEndedWithoutloop?: () => void\r\n}\r\n\r\n// Steps enum\r\nenum Steps {\r\n opening = 1,\r\n news,\r\n events,\r\n weather,\r\n ending\r\n}\r\n\r\nconst NewsContainer = ({ hideMenu, isRetorikNews, loop, fromVeille, handleEndedWithoutloop }: NewsContainerProps): JSX.Element => {\r\n const dispatch = useDispatch()\r\n const translation = useSelector((state: RootState) => state.localeReducer.currentTranslations)\r\n const configuration = useSelector((state: RootState) => state.retorikReducer.configuration)\r\n const displaySubtitles = useSelector((state: RootState) => state.retorikReducer.displaySubtitles)\r\n const muted = useSelector((state: RootState) => state.speechReducer.muted)\r\n const isMobile = useSelector((state: RootState) => state.viewReducer.isMobile)\r\n const isLandscape = useSelector((state: RootState) => state.viewReducer.isLandscape)\r\n const isBorne = useSelector((state: RootState) => state.viewReducer.isBorne)\r\n const configurations = useSelector((state: RootState) => state.viewReducer.configurations)\r\n const conversationId = useSelector((state: RootState) => state.activityReducer.conversationId)\r\n const storedConversationData = useSelector((state: RootState) => state.directlineReducer.storedVeilleConversationData)\r\n\r\n const [displayData, setDisplayData] = useState<NewsConfig>(configurations.views.news || configurations.views.home)\r\n const [step, setStep] = useState<number>(configurations.views.news?.openingVideo ? Steps.opening : Steps.news)\r\n const timerRef = useRef<NodeJS.Timer | null>(null)\r\n const newsEndedTimerRef = useRef<NodeJS.Timer | null>(null)\r\n const oldDiplaySubtitles = useRef<boolean>(displaySubtitles)\r\n\r\n /**\r\n * On call :\r\n * - if the component is news-only, return\r\n * - else set ViewContext's route state to 'home'\r\n */\r\n const handleBack = (): void => {\r\n if (isRetorikNews) {\r\n return\r\n }\r\n dispatch(storeActions.view.setRoute(Routes.Home))\r\n }\r\n\r\n useEffect(() => {\r\n configuration.useOldRemote && dispatch(storeActions.view.setDisplayControls(false))\r\n // Force muted state to false if we are not in the veille\r\n muted && !fromVeille && dispatch(storeActions.speech.setMuted(false))\r\n // Force hiding subtitles if we are in the veille\r\n fromVeille && dispatch(storeActions.retorik.setDisplaySubtitles(false))\r\n\r\n return () => {\r\n // If we exit news from the veille, let's store the conversation id for next turn, clear activity store and set back subtitles\r\n if (fromVeille) {\r\n !storedConversationData?.id && conversationId && dispatch(storeActions.directline.setStoredVeilleConversationData(conversationId))\r\n dispatch(storeActions.activity.resetActivityStore())\r\n dispatch(storeActions.retorik.setDisplaySubtitles(oldDiplaySubtitles.current))\r\n }\r\n // Send closing events unless we are using RetorikNews component\r\n if (!isRetorikNews) {\r\n dispatch(storeActions.directline.sendEvent({ name: 'Davi.CloseWindow', callback: () => dispatch(storeActions.directline.sendEvent({ name: 'Davi.CloseWindowNews' })) }))\r\n }\r\n }\r\n }, [])\r\n\r\n /**\r\n * On step change :\r\n * - switch on the current step to launch corresponding processing\r\n * On component unmount :\r\n * - clear timerRef timeout\r\n */\r\n useEffect(() => {\r\n switch (step) {\r\n case Steps.opening: {\r\n dispatch(storeActions.retorik.setDisplayAgentInNews(false))\r\n const videoUrl = configurations.views.news?.openingVideo\r\n videoUrl && !fromVeille ? setViewContextCurrentConfiguration(videoUrl as string) : setStep(Steps.news)\r\n break\r\n }\r\n case Steps.news:\r\n dispatch(storeActions.retorik.setDisplayAgentInNews(true))\r\n setDisplayData(configurations.views.news || configurations.views.home)\r\n break\r\n case Steps.events:\r\n break\r\n case Steps.weather:\r\n dispatch(storeActions.retorik.setDisplayAgentInNews(false))\r\n // If the position is known, display the weather page during 10 seconds, otherwise switch to the next step directly\r\n configuration.position?.latitude && configuration.position?.longitude\r\n ? (timerRef.current = setTimeout(() => {\r\n setStep(Steps.ending)\r\n }, 10000))\r\n : setStep(Steps.ending)\r\n break\r\n case Steps.ending: {\r\n dispatch(storeActions.retorik.setDisplayAgentInNews(false))\r\n const videoUrl = configurations.views.news?.openingVideo\r\n videoUrl && !fromVeille ? setViewContextCurrentConfiguration(videoUrl as string) : exitNewsOrLoop()\r\n break\r\n }\r\n default:\r\n break\r\n }\r\n\r\n return (): void => {\r\n timerRef?.current && clearTimeout(timerRef.current)\r\n newsEndedTimerRef?.current && clearTimeout(newsEndedTimerRef.current)\r\n }\r\n }, [step])\r\n\r\n /**\r\n * On call :\r\n * - set the current display configuration to have the given video as background\r\n * @param videoUrl\r\n */\r\n const setViewContextCurrentConfiguration = (videoUrl: string): void => {\r\n setDisplayData({\r\n ...configurations.views.news,\r\n background: {\r\n video: videoUrl,\r\n style: 'video'\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * On call :\r\n * - if the component is news-only :\r\n * + if 'loop' is explicitly set to false, call props' handleEndedWithoutloop method if defined. Call handleBack method otherwise\r\n * + if 'loop' is not false, loop by setting step state to Steps.news\r\n * - or else if 'loop' parameter in configuration is true, get back to Steps.news step. Call handleBack method otherwise\r\n */\r\n const exitNewsOrLoop = (): void => {\r\n // Relaunch from the start if this is a news-only component and loop hasn't explicitly been set to false\r\n if (isRetorikNews) {\r\n if (fromVeille) {\r\n loop ? setStep(Steps.news) : handleEndedWithoutloop?.()\r\n } else {\r\n displayData.loop !== false || loop ? setStep(Steps.news) : handleEndedWithoutloop ? handleEndedWithoutloop() : handleBack()\r\n }\r\n } else {\r\n // Relaunch from the start if the loop is activated, otherwise get back to homepage\r\n displayData.loop || loop ? setStep(Steps.news) : handleBack()\r\n }\r\n }\r\n\r\n /**\r\n * On video end :\r\n * - if we are at the opening step, let's set the step state to Steps.news to launch the news\r\n * - if we are at the ending step, call exitNewsOrLoop function\r\n */\r\n const handleVideoEnd = (): void => {\r\n switch (step) {\r\n case Steps.opening:\r\n setStep(Steps.news)\r\n break\r\n case Steps.ending:\r\n exitNewsOrLoop()\r\n break\r\n }\r\n }\r\n\r\n /**\r\n * On news end :\r\n * - wait 3 seconds\r\n * - get to the next step (Steps.events)\r\n */\r\n const handleNewsEnd = (): void => {\r\n newsEndedTimerRef &&\r\n (newsEndedTimerRef.current = setTimeout(() => {\r\n // setStep(Steps.events)\r\n setStep(Steps.weather)\r\n }, 3000))\r\n }\r\n\r\n return (\r\n <div className='rf-relative rf-col-start-1 rf-col-span-full rf-row-start-1 rf-row-span-full rf-grid rf-grid-cols-8 rf-grid-rows-12'>\r\n <Background config={displayData.background} videoLoop={false} videoMuted={true} onVideoEnded={handleVideoEnd} />\r\n\r\n {/* Timer + back button in mobile / widget mode */}\r\n {isMobile && !isRetorikNews && !hideMenu ? (\r\n <div className='rf-relative rf-z-util rf-col-start-1 rf-col-span-full rf-row-start-1 rf-flex rf-flex-col rf-gap-2 rf-items-start'>\r\n <BackButton title={translation.common.back} handleBack={handleBack} className='rf-pr-2 rf-mt-4 rf-ml-4 rf-text-size-auto rf-bg-truewhite rf-rounded-lg' />\r\n <Time belowReturnButton={true} />\r\n </div>\r\n ) : (\r\n <Time />\r\n )}\r\n\r\n {/* News step */}\r\n {step === Steps.news && <News intervalInSeconds={displayData.intervalInSeconds ? (displayData.intervalInSeconds as number) : undefined} onEnd={handleNewsEnd} isRetorikNews={isRetorikNews} />}\r\n\r\n {step === Steps.weather && configuration.position?.latitude && configuration.position?.longitude && <Weather handleClose={handleBack} />}\r\n\r\n {/* Closing button if it needs to be displayed */}\r\n {!hideMenu && <AbsoluteLargeClosingButton dashboardVisible={true} onClick={handleBack} />}\r\n\r\n {!hideMenu && isLandscape && !configuration.useOldRemote && !isRetorikNews && <CloseButton onClick={handleBack} showLabel={true} />}\r\n\r\n {!hideMenu && isBorne && !configuration.useOldRemote && !isRetorikNews && <MenuDisplayer hideMenu={configuration?.hideMenu} />}\r\n </div>\r\n )\r\n}\r\n\r\nexport default NewsContainer\r\n","import React, { useEffect, useState, useRef } from 'react'\r\nimport { useSelector } from 'react-redux'\r\nimport { RootState } from '../../store'\r\n\r\ninterface TimeProps {\r\n belowReturnButton?: boolean\r\n}\r\n\r\nconst Time = ({ belowReturnButton }: TimeProps): JSX.Element => {\r\n const translation = useSelector((state: RootState) => state.localeReducer.currentTranslations)\r\n const locale = useSelector((state: RootState) => state.localeReducer.locale)\r\n const [time, setTime] = useState<string>('')\r\n const timerRef: React.MutableRefObject<any> = useRef(null)\r\n\r\n /**\r\n * Set current time (hours and minutes) depending on the locale (ex: adds AM/PM when needed)\r\n */\r\n const setCurrentTime = (): void => {\r\n const now = new Date()\r\n setTime(\r\n now.toLocaleTimeString(locale, {\r\n hour: '2-digit',\r\n minute: '2-digit'\r\n })\r\n )\r\n }\r\n\r\n /**\r\n * On component mount :\r\n * - set time\r\n * - set interval for time update\r\n * On component unmount :\r\n * - clear interval\r\n */\r\n useEffect(() => {\r\n setCurrentTime()\r\n timerRef && (timerRef.current = setInterval(setCurrentTime, 1000))\r\n\r\n return (): void => timerRef && clearInterval(timerRef.current)\r\n }, [])\r\n\r\n return (\r\n <div className={`rf-relative ${belowReturnButton ? 'rf-ml-4' : 'rf-col-start-1 rf-col-span-2 rf-row-start-1 rf-row-span-2 rf-self-start rf-justify-self-start rf-m-4 large:rf-m-8'}`}>\r\n <div className='rf-w-fit rf-h-fit rf-flex rf-flex-col rf-justify-start rf-items-start rf-text-white'>\r\n {/* Text 'Live' + round */}\r\n <div className='rf-w-full rf-text-size-auto rf-px-3 rf-py-0 large:rf-px-4 large:rf-py-1 rf-text-center rf-font-semibold rf-bg-red-600 rf-whitespace-nowrap'>\r\n {`${translation.news.live.toLocaleUpperCase(locale)} \\u25cf`}\r\n </div>\r\n {/* Time */}\r\n <div className='rf-w-full rf-title-size-auto rf-px-3 rf-py-0 large:rf-px-4 large:rf-py-1 rf-text-center rf-font-bold rf-bg-blue-500'>{time}</div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default Time\r\n","import React, { useEffect, useMemo, useState, useRef } from 'react'\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { RootState, storeActions } from '../../store'\r\nimport useNews from '../../hooks/useNews'\r\n\r\nimport type { Image, Media } from '../../models/attachmentTypes'\r\nimport { RetorikActivity } from '../../models/activityTypes'\r\nimport { DeviceType, Routes } from '../../models/enums'\r\n\r\nimport Banner from './Banner'\r\nimport { Carousel } from '../Utils'\r\n\r\ntype NewsProps = {\r\n intervalInSeconds?: number\r\n onEnd: () => void\r\n isRetorikNews?: boolean\r\n}\r\n\r\nconst News = ({ intervalInSeconds = 3, onEnd, isRetorikNews }: NewsProps): JSX.Element => {\r\n const dispatch = useDispatch()\r\n const { newsAttachments, activity } = useNews()\r\n const route = useSelector((state: RootState) => state.viewReducer.route)\r\n const isMobile = useSelector((state: RootState) => state.viewReducer.isMobile)\r\n const newsConfiguration = useSelector((state: RootState) => state.viewReducer.configurations.views.news)\r\n const currentDeviceType = useSelector((state: RootState) => state.viewReducer.currentDeviceType)\r\n const retorikNewsEnded = useSelector((state: RootState) => state.utilsReducer.retorikNewsEnded)\r\n\r\n const [carouselGridRowStart, setCarouselGridRowStart] = useState<number>()\r\n const [carouselGridRowSpan, setCarouselGridRowSpan] = useState<number>()\r\n const [bannerGridRowStart, setBannerGridRowStart] = useState<number>(10)\r\n const [bannerGridRowSpan, setBannerGridRowSpan] = useState<number>(3)\r\n // Banner's align-self is flex-end if the position of the banner hasn't been changed, flex-start in borne / landscape modes otherwise\r\n const [alignSelfEnd, setAlignSelfEnd] = useState<boolean>(true)\r\n const [current, setCurrent] = useState<number>(0)\r\n const timerRef = useRef<NodeJS.Timer | null>(null)\r\n\r\n const news = useMemo(() => {\r\n return newsAttachments.map((newsAttachement) => newsAttachement.content)\r\n }, [newsAttachments])\r\n\r\n useEffect(() => {\r\n if (!newsAttachments.length) {\r\n setTimeout(() => {\r\n dispatch(storeActions.directline.sendEvent({ name: 'news.getAllNews' }))\r\n }, 2000)\r\n }\r\n\r\n return (): void => {\r\n timerRef.current && clearTimeout(timerRef.current)\r\n }\r\n }, [])\r\n\r\n useEffect(() => {\r\n switch (currentDeviceType) {\r\n case DeviceType.mobile:\r\n case DeviceType.widget: {\r\n // Set carousel's and banner's positions\r\n setAlignSelfEnd(true)\r\n setCarouselGridRowStart(1)\r\n setCarouselGridRowSpan(9)\r\n setBannerGridRowStart(10)\r\n setBannerGridRowSpan(3)\r\n break\r\n }\r\n case DeviceType.landscape:\r\n case DeviceType.widgetLandscape: {\r\n // Check banner's position and set carousel's position if there are no position data for this one\r\n if (newsConfiguration?.bannerPosition?.landscape) {\r\n const start = newsConfiguration.bannerPosition.landscape.containerRowStart || 10\r\n const end = newsConfiguration.bannerPosition.landscape.containerRowEnd || 13\r\n\r\n setAlignSelfEnd(false)\r\n setBannerGridRowStart(start)\r\n setBannerGridRowSpan(end - start)\r\n\r\n if (!newsConfiguration?.mediaPosition?.landscape) {\r\n // The base row span of the carousel is 9, if the custom position of the banner allows this span, let's keep it. If not, let's use the max span available.\r\n if (start > 9) {\r\n setCarouselGridRowStart(start - 9)\r\n setCarouselGridRowSpan(9)\r\n } else {\r\n setCarouselGridRowStart(1)\r\n setCarouselGridRowSpan(start - 1)\r\n }\r\n\r\n break\r\n }\r\n } else {\r\n setAlignSelfEnd(true)\r\n setBannerGridRowStart(10)\r\n setBannerGridRowSpan(3)\r\n }\r\n\r\n // Check carousel's position\r\n if (newsConfiguration?.mediaPosition?.landscape) {\r\n const start = newsConfiguration.mediaPosition.landscape.containerRowStart || 1\r\n const end = newsConfiguration.mediaPosition.landscape.containerRowEnd || 10\r\n\r\n setCarouselGridRowStart(start)\r\n setCarouselGridRowStart(end - start)\r\n } else {\r\n setCarouselGridRowStart(1)\r\n setCarouselGridRowSpan(9)\r\n }\r\n\r\n break\r\n }\r\n case DeviceType.borne:\r\n case DeviceType.widgetBorne: {\r\n // Check banner's position and set carousel's position if there are no position data for this one\r\n if (newsConfiguration?.bannerPosition?.borne) {\r\n const start = newsConfiguration.bannerPosition.borne.containerRowStart || 10\r\n const end = newsConfiguration.bannerPosition.borne.containerRowEnd || 13\r\n\r\n setAlignSelfEnd(false)\r\n setBannerGridRowStart(start)\r\n setBannerGridRowSpan(end - start)\r\n\r\n if (!newsConfiguration?.mediaPosition?.borne) {\r\n // The base row span of the carousel is 4, if the custom position of the banner allows this span, let's keep it. If not, let's use the max span available.\r\n if (start > 4) {\r\n setCarouselGridRowStart(start - 4)\r\n setCarouselGridRowSpan(4)\r\n } else {\r\n setCarouselGridRowStart(1)\r\n setCarouselGridRowSpan(start - 1)\r\n }\r\n\r\n break\r\n }\r\n } else {\r\n setAlignSelfEnd(true)\r\n setBannerGridRowStart(10)\r\n setBannerGridRowSpan(3)\r\n }\r\n\r\n // Check carousel's position\r\n if (newsConfiguration?.mediaPosition?.borne) {\r\n const start = newsConfiguration.mediaPosition.borne.containerRowStart || 7\r\n const end = newsConfiguration.mediaPosition.borne.containerRowEnd || 11\r\n\r\n setCarouselGridRowStart(start)\r\n setCarouselGridRowSpan(end - start)\r\n } else {\r\n setCarouselGridRowStart(7)\r\n setCarouselGridRowSpan(4)\r\n }\r\n break\r\n }\r\n }\r\n }, [newsConfiguration, currentDeviceType])\r\n\r\n useEffect(() => {\r\n const currentNew = news[current]\r\n if (currentNew) {\r\n const textTitle = newsConfiguration?.removeTitleFromTextToSpeak ? '' : `${currentNew.title}, <break/> `\r\n const textSubtitle = newsConfiguration?.removeSubtitleFromTextToSpeak ? '' : `${currentNew.subtitle}: <break/> `\r\n\r\n const tempActivity: RetorikActivity = {\r\n ...activity,\r\n speak: `${textTitle}${textSubtitle}${currentNew.text}`\r\n } as RetorikActivity\r\n\r\n dispatch(storeActions.speech.addToStreamingQueue(tempActivity))\r\n }\r\n }, [activity, current])\r\n\r\n const currentMedia = useMemo<Array<Image | Media>>(() => {\r\n const currentNew = news[current]\r\n if (currentNew) {\r\n if (currentNew.media?.length) {\r\n return currentNew.media\r\n } else if (currentNew.image?.url) {\r\n return [currentNew.image]\r\n }\r\n }\r\n\r\n return []\r\n }, [news, current])\r\n\r\n useEffect(() => {\r\n if (retorikNewsEnded) {\r\n if (news.length) {\r\n if (current < news.length - 1) {\r\n const delay = current < news.length - 1 ? intervalInSeconds : intervalInSeconds * 3\r\n timerRef.current && clearTimeout(timerRef.current)\r\n if (route === Routes.News || isRetorikNews) {\r\n timerRef.current = setTimeout(next, delay * 1000)\r\n }\r\n } else {\r\n onEnd()\r\n }\r\n }\r\n\r\n dispatch(storeActions.utils.setRetorikNewsEnded(false))\r\n }\r\n }, [retorikNewsEnded])\r\n\r\n const next = (): void => {\r\n const next = (current + 1) % news.length\r\n changeNews(next)\r\n }\r\n\r\n const changeNews = (next: number): void => {\r\n setCurrent(next)\r\n }\r\n\r\n return news.length && current >= 0 ? (\r\n <React.Fragment>\r\n {/* Carousel in landscape / borne display */}\r\n {!isMobile && (\r\n <div\r\n className='rf-relative rf-col-start-5 rf-col-span-3 large-vertical:rf-col-start-2 large-vertical:rf-col-end-8 rf-flex rf-justify-center rf-items-center'\r\n style={{\r\n gridRow: `${carouselGridRowStart} / span ${carouselGridRowSpan}`\r\n }}\r\n >\r\n {currentMedia.length ? (\r\n <Carousel className='rf-z-[10] rf-max-h-4/5 large-vertical:rf-max-h-11/12 rf-max-w-full' medias={news[current].media || [news[current].image || { url: '' }]} />\r\n ) : (\r\n <React.Fragment />\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Lower banner with title / subtitle / text */}\r\n <Banner news={news[current]} gridRowStart={bannerGridRowStart} gridRowSpan={bannerGridRowSpan} alignSelfEnd={alignSelfEnd} />\r\n </React.Fragment>\r\n ) : (\r\n <React.Fragment />\r\n )\r\n}\r\n\r\nexport default News\r\n","import { CONTENT_TYPE_NEWS, NewsContent } from '../models/attachmentTypes'\r\nimport { useSelector } from 'react-redux'\r\nimport { RootState } from '../store'\r\nimport type { RetorikActivity } from '../models/activityTypes'\r\n\r\ntype NewsAttachment = {\r\n contentType: string\r\n content: NewsContent\r\n}\r\n\r\nconst useNews = (): {\r\n newsAttachments: Array<NewsAttachment>\r\n activity?: RetorikActivity\r\n} => {\r\n const activities = useSelector((state: RootState) => state.activityReducer.botEventActivities)\r\n\r\n if (!activities.length) {\r\n return { newsAttachments: [] }\r\n }\r\n\r\n // Filter messages that can income during news, with label = Davi.BringupMessage\r\n const filterBringUpActivities = activities.filter((act: any) => act.label !== 'Davi.BringupMessage')\r\n\r\n const activity = filterBringUpActivities[filterBringUpActivities.length - 1] as any\r\n\r\n if (!activity || !activity.attachments?.length) {\r\n return { newsAttachments: [], activity }\r\n }\r\n\r\n const newsAttachments: NewsAttachment[] = []\r\n activity.attachments.forEach((attachment) => {\r\n if (attachment.contentType === CONTENT_TYPE_NEWS) {\r\n newsAttachments.push({\r\n contentType: CONTENT_TYPE_NEWS,\r\n content: attachment.content || ''\r\n })\r\n }\r\n })\r\n\r\n return { newsAttachments, activity }\r\n}\r\n\r\nexport default useNews\r\n","import React, { useEffect, useMemo, useRef, useState } from 'react'\r\nimport { useSelector } from 'react-redux'\r\nimport { RootState } from '../../store'\r\nimport type { NewsContent } from '../../models/attachmentTypes'\r\nimport { capitalizeFirstLetter } from '../../utils/capitalizeFirstLetter'\r\nimport BannerTopMobile from './BannerTopMobile'\r\nimport BannerTopLarge from './BannerTopLarge'\r\n\r\ninterface BannerProps {\r\n news: NewsContent\r\n gridRowStart: number\r\n gridRowSpan: number\r\n alignSelfEnd: boolean\r\n}\r\n\r\nconst Banner = ({ news, gridRowStart, gridRowSpan, alignSelfEnd }: BannerProps): JSX.Element => {\r\n const translation = useSelector((state: RootState) => state.localeReducer.currentTranslations)\r\n const locale = useSelector((state: RootState) => state.localeReducer.localeForRetorikStudioContent)\r\n const localizedBannerTitle = useSelector((state: RootState) => state.localeReducer.localizedBannerTitle)\r\n const isRTL = useSelector((state: RootState) => state.localeReducer.isRTL)\r\n const isMobile = useSelector((state: RootState) => state.viewReducer.isMobile)\r\n const currentWidth = useSelector((state: RootState) => state.viewReducer.currentWidth)\r\n const newsConfiguration = useSelector((state: RootState) => state.viewReducer.configurations.views.news)\r\n\r\n const timerRef: React.MutableRefObject<any> = useRef(null)\r\n const [scrollDuration, setScrollDuration] = useState<number>(0)\r\n\r\n const category = useMemo<string>(() => {\r\n return news.category || newsConfiguration?.bannerTitleLocalized?.[locale] || localizedBannerTitle || newsConfiguration?.bannerTitle || translation.news.continuous\r\n }, [news, newsConfiguration, locale, localizedBannerTitle, translation])\r\n\r\n /**\r\n * Set animation for text horizontal scrolling if necessary\r\n */\r\n const updateDuration = (): void => {\r\n // Reset animation\r\n setScrollDuration(0)\r\n // Set animation, after a 1s timeout\r\n timerRef &&\r\n (timerRef.current = setTimeout(() => {\r\n setScrollDuration(Math.floor(news.text.length / 11))\r\n }, 1000))\r\n }\r\n\r\n /**\r\n * On news props change :\r\n * - call updateDuration function\r\n * On component unmount :\r\n * - clear timeout\r\n */\r\n useEffect(() => {\r\n updateDuration()\r\n\r\n return (): void => timerRef && clearTimeout(timerRef.current)\r\n }, [news])\r\n\r\n return (\r\n <div\r\n dir={isRTL ? 'rtl' : 'ltr'}\r\n className='rf-h-fit rf-z-util rf-col-start-1 rf-col-span-full large:rf-mb-6 rf-flex rf-flex-col rf-items-center rf-glass-background rf-text-white'\r\n style={{\r\n alignSelf: alignSelfEnd ? 'flex-end' : 'flex-start',\r\n gridRow: `${gridRowStart} / span ${gridRowSpan}`\r\n }}\r\n >\r\n {/* Category + Image (mobile) + Title + Subtitle */}\r\n {isMobile ? (\r\n <BannerTopMobile category={category} title={news.title} subtitle={news.subtitle} url={news.image?.url} />\r\n ) : (\r\n <BannerTopLarge category={category} title={news.title} subtitle={news.subtitle} />\r\n )}\r\n\r\n {/* Text */}\r\n <div\r\n dir='ltr'\r\n className='rf-w-full rf-pr-4 rf-py-2 large:rf-py-4 rf-subtitle-size-auto rf-text-black rf-bg-white rf-overflow-clip'\r\n style={{\r\n paddingLeft: currentWidth\r\n }}\r\n >\r\n {scrollDuration !== 0 ? (\r\n <p\r\n className='rf-w-max rf-whitespace-nowrap rf-animate-hScroll'\r\n style={{\r\n animation: `rf-hScroll ${scrollDuration}s infinite linear`,\r\n paddingRight: currentWidth\r\n }}\r\n >\r\n {news.text ? capitalizeFirstLetter(news.text) : '...'}\r\n </p>\r\n ) : (\r\n <p className='rf-w-max rf-whitespace-nowrap'>{news.text ? capitalizeFirstLetter(news.text) : '...'}</p>\r\n )}\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default Banner\r\n","import React from 'react'\r\nimport { useSelector } from 'react-redux'\r\nimport { RootState } from '../../store'\r\nimport { capitalizeFirstLetter } from '../../utils/capitalizeFirstLetter'\r\n\r\ninterface BannerTopMobileProps {\r\n category: string\r\n title?: string\r\n subtitle?: string\r\n url?: string\r\n}\r\n\r\nconst BannerTopMobile = ({ category, title, subtitle, url }: BannerTopMobileProps): JSX.Element => {\r\n const locale = useSelector((state: RootState) => state.localeReducer.locale)\r\n\r\n return (\r\n <React.Fragment>\r\n <div className='rf-w-full rf-px-4 rf-py-2 rf-font-bold rf-bg-red-600 rf-whitespace-nowrap rf-text-size-auto'>{category?.toLocaleUpperCase(locale)}</div>\r\n\r\n <div className='rf-w-full rf-flex rf-flex-row'>\r\n {/* Image */}\r\n {url && (\r\n <div\r\n className='rf-aspect-video rf-w-1/4'\r\n style={{\r\n backgroundImage: `url(${url})`,\r\n backgroundSize: 'cover',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundPosition: 'center'\r\n }}\r\n />\r\n )}\r\n\r\n {/* Title + Subtitle */}\r\n <div className='rf-px-4 rf-py-1 rf-font-bold'>\r\n <div className='rf-text-size-auto rf-line-clamp-1'>{title && title.toLocaleUpperCase(locale)}</div>\r\n <div className='rf-text-basecustom rf-line-clamp-2'>{subtitle ? capitalizeFirstLetter(subtitle) : '...'}</div>\r\n </div>\r\n </div>\r\n </React.Fragment>\r\n )\r\n}\r\n\r\nexport default BannerTopMobile\r\n","import React from 'react'\r\nimport { useSelector } from 'react-redux'\r\nimport { RootState } from '../../store'\r\nimport { capitalizeFirstLetter } from '../../utils/capitalizeFirstLetter'\r\n\r\ninterface BannerTopLargeProps {\r\n category: string\r\n title?: string\r\n subtitle?: string\r\n}\r\n\r\nconst BannerTopLarge = ({ category, title, subtitle }: BannerTopLargeProps): JSX.Element => {\r\n const locale = useSelector((state: RootState) => state.localeReducer.locale)\r\n\r\n return (\r\n <React.Fragment>\r\n {/* Category + title */}\r\n <div className='rf-w-full rf-flex rf-flex-row rf-justify-start rf-text-size-auto'>\r\n <div className='rf-px-4 rf-py-3 rf-font-bold rf-bg-red-600 rf-whitespace-nowrap'>{category?.toLocaleUpperCase(locale)}</div>\r\n <div className='rf-px-4 rf-mb-2 rf-mt-2 large:rf-mt-3 rf-font-bold rf-line-clamp-1'>{title?.toLocaleUpperCase(locale)}</div>\r\n </div>\r\n\r\n {/* Subtitle */}\r\n <div className='rf-w-full rf-h-fit rf-flex rf-flex-row rf-justify-start'>\r\n <div className='rf-px-4 rf-my-2 large:rf-my-3 rf-title-large-size-auto rf-line-clamp-2'>{subtitle ? capitalizeFirstLetter(subtitle) : '...'}</div>\r\n </div>\r\n </React.Fragment>\r\n )\r\n}\r\n\r\nexport default BannerTopLarge\r\n"],"names":[],"version":3,"file":"NewsContainer.c3331d80.js.map"}
@@ -0,0 +1,147 @@
1
+ var $lKV5y$reactjsxruntime = require("react/jsx-runtime");
2
+ var $lKV5y$react = require("react");
3
+ var $lKV5y$reactpdf = require("react-pdf");
4
+ var $lKV5y$pdfjsdistbuildpdfworkerjs = require("pdfjs-dist/build/pdf.worker.js");
5
+ var $lKV5y$reactredux = require("react-redux");
6
+
7
+
8
+ function $parcel$defineInteropFlag(a) {
9
+ Object.defineProperty(a, '__esModule', {value: true, configurable: true});
10
+ }
11
+
12
+ function $parcel$export(e, n, v, s) {
13
+ Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
14
+ }
15
+
16
+ var $parcel$global =
17
+ typeof globalThis !== 'undefined'
18
+ ? globalThis
19
+ : typeof self !== 'undefined'
20
+ ? self
21
+ : typeof window !== 'undefined'
22
+ ? window
23
+ : typeof global !== 'undefined'
24
+ ? global
25
+ : {};
26
+ var parcelRequire = $parcel$global["parcelRequirea39d"];
27
+ var parcelRegister = parcelRequire.register;
28
+ parcelRegister("eO1En", function(module, exports) {
29
+
30
+ $parcel$defineInteropFlag(module.exports);
31
+
32
+ $parcel$export(module.exports, "default", () => $6e2b7d52dc071237$export$2e2bcd8739ae039);
33
+
34
+
35
+
36
+
37
+
38
+
39
+ var $kpW3P = parcelRequire("kpW3P");
40
+
41
+ var $7VgIE = parcelRequire("7VgIE");
42
+
43
+ var $60kUR = parcelRequire("60kUR");
44
+
45
+ var $eSTK6 = parcelRequire("eSTK6");
46
+ // Configure react-pdf worker
47
+ (0, $lKV5y$reactpdf.pdfjs).GlobalWorkerOptions.workerSrc = $lKV5y$pdfjsdistbuildpdfworkerjs;
48
+ const $6e2b7d52dc071237$var$PrintingPreview = ({ url: url, printingAllowed: printingAllowed })=>{
49
+ const dispatch = (0, $lKV5y$reactredux.useDispatch)();
50
+ const translation = (0, $lKV5y$reactredux.useSelector)((state)=>state.localeReducer.currentTranslations);
51
+ const printingCallback = (0, $lKV5y$reactredux.useSelector)((state)=>state.utilsReducer.printingCallback);
52
+ const [documentLoaded, setDocumentLoaded] = (0, $lKV5y$react.useState)(false);
53
+ const [numberOfPages, setNumberOfPages] = (0, $lKV5y$react.useState)(0);
54
+ const [pageNumber, setPageNumber] = (0, $lKV5y$react.useState)(1);
55
+ const onDocumentLoadSuccess = ({ numPages: numPages })=>{
56
+ setNumberOfPages(numPages);
57
+ setDocumentLoaded(true);
58
+ };
59
+ const handleClick = ()=>{
60
+ printingCallback === null || printingCallback === void 0 ? void 0 : printingCallback(url);
61
+ handleClose();
62
+ };
63
+ const handleClose = ()=>{
64
+ dispatch((0, $kpW3P.storeActions).utils.setModalFullscreenContent(null));
65
+ };
66
+ const changePage = (index)=>{
67
+ setPageNumber((current)=>current + index);
68
+ };
69
+ return /*#__PURE__*/ (0, $lKV5y$reactjsxruntime.jsxs)("div", {
70
+ className: "rf-h-full large-vertical:rf-mt-[20vh] large-vertical:rf-h-1/2 rf-max-w-1/2 large-vertical:rf-max-w-[60%] rf-py-4 rf-flex rf-flex-col rf-gap-4",
71
+ style: {
72
+ visibility: documentLoaded ? 'visible' : 'hidden'
73
+ },
74
+ children: [
75
+ /*#__PURE__*/ (0, $lKV5y$reactjsxruntime.jsxs)("div", {
76
+ className: "rf-grid rf-grid-cols-printingPreview rf-min-h-12 rf-h-12",
77
+ children: [
78
+ printingAllowed ? /*#__PURE__*/ (0, $lKV5y$reactjsxruntime.jsxs)("button", {
79
+ className: "rf-px-4 rf-py-1 rf-h-full rf-justify-self-center rf-flex rf-flex-row rf-items-center rf-gap-2 rf-font-bold rf-text-sm rf-rounded-lg rf-bg-truewhite",
80
+ onClick: handleClick,
81
+ children: [
82
+ /*#__PURE__*/ (0, $lKV5y$reactjsxruntime.jsx)((0, $7VgIE.PrintIcon), {}),
83
+ translation.common.print
84
+ ]
85
+ }) : /*#__PURE__*/ (0, $lKV5y$reactjsxruntime.jsx)("div", {
86
+ children: '\u2800'
87
+ }),
88
+ /*#__PURE__*/ (0, $lKV5y$reactjsxruntime.jsx)("button", {
89
+ className: "rf-h-full rf-w-12 rf-justify-self-end rf-flex rf-justify-center rf-items-center rf-rounded-lg rf-bg-truewhite",
90
+ onClick: handleClose,
91
+ children: /*#__PURE__*/ (0, $lKV5y$reactjsxruntime.jsx)((0, $60kUR.CloseIcon), {})
92
+ })
93
+ ]
94
+ }),
95
+ /*#__PURE__*/ (0, $lKV5y$reactjsxruntime.jsxs)("div", {
96
+ className: "rf-relative rf-w-full rf-flex rf-flex-col rf-rounded-lg rf-overflow-y-scroll rf-scrollbar-thin",
97
+ children: [
98
+ numberOfPages > 1 && /*#__PURE__*/ (0, $lKV5y$reactjsxruntime.jsxs)("div", {
99
+ className: "rf-w-full rf-px-4 rf-pt-3 rf-pb-2 rf-flex rf-flex-row rf-justify-between rf-items-center rf-bg-truewhite",
100
+ children: [
101
+ /*#__PURE__*/ (0, $lKV5y$reactjsxruntime.jsx)("button", {
102
+ className: `${pageNumber <= 1 ? 'rf-invisible' : 'rf-visible'}`,
103
+ onClick: ()=>changePage(-1),
104
+ children: /*#__PURE__*/ (0, $lKV5y$reactjsxruntime.jsx)((0, $eSTK6.ChevronLeftIcon), {
105
+ className: "rf-h-4",
106
+ color: "#000"
107
+ })
108
+ }),
109
+ /*#__PURE__*/ (0, $lKV5y$reactjsxruntime.jsxs)("p", {
110
+ className: "rf-text-xl",
111
+ children: [
112
+ pageNumber,
113
+ " / ",
114
+ numberOfPages
115
+ ]
116
+ }),
117
+ /*#__PURE__*/ (0, $lKV5y$reactjsxruntime.jsx)("button", {
118
+ className: `${pageNumber >= numberOfPages ? 'rf-invisible' : 'rf-visible'}`,
119
+ onClick: ()=>changePage(1),
120
+ children: /*#__PURE__*/ (0, $lKV5y$reactjsxruntime.jsx)((0, $eSTK6.ChevronRightIcon), {
121
+ className: "rf-h-4",
122
+ color: "#000"
123
+ })
124
+ })
125
+ ]
126
+ }),
127
+ /*#__PURE__*/ (0, $lKV5y$reactjsxruntime.jsx)((0, $lKV5y$reactpdf.Document), {
128
+ file: url,
129
+ onLoadSuccess: onDocumentLoadSuccess,
130
+ onLoadError: handleClose,
131
+ children: /*#__PURE__*/ (0, $lKV5y$reactjsxruntime.jsx)((0, $lKV5y$reactpdf.Page), {
132
+ pageNumber: pageNumber,
133
+ renderAnnotationLayer: false,
134
+ renderTextLayer: false
135
+ })
136
+ })
137
+ ]
138
+ })
139
+ ]
140
+ });
141
+ };
142
+ var $6e2b7d52dc071237$export$2e2bcd8739ae039 = $6e2b7d52dc071237$var$PrintingPreview;
143
+
144
+ });
145
+
146
+
147
+ //# sourceMappingURL=PrintingPreview.5351c733.js.map
@@ -0,0 +1 @@
1
+ {"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,6BAA6B;AAC7B,CAAA,GAAA,qBAAI,EAAE,mBAAmB,CAAC,SAAS,GAAG;AAOtC,MAAM,wCAAkB,CAAC,OAAE,GAAG,mBAAE,eAAe,EAAwB;IACrE,MAAM,WAAW,CAAA,GAAA,6BAAU;IAC3B,MAAM,cAAc,CAAA,GAAA,6BAAU,EAAE,CAAC,QAAqB,MAAM,aAAa,CAAC,mBAAmB;IAC7F,MAAM,mBAAmB,CAAA,GAAA,6BAAU,EAAE,CAAC,QAAqB,MAAM,YAAY,CAAC,gBAAgB;IAC9F,MAAM,CAAC,gBAAgB,kBAAkB,GAAG,CAAA,GAAA,qBAAO,EAAW;IAC9D,MAAM,CAAC,eAAe,iBAAiB,GAAG,CAAA,GAAA,qBAAO,EAAU;IAC3D,MAAM,CAAC,YAAY,cAAc,GAAG,CAAA,GAAA,qBAAO,EAAU;IAErD,MAAM,wBAAwB,CAAC,YAAE,QAAQ,EAAwB;QAC/D,iBAAiB;QACjB,kBAAkB;IACpB;IAEA,MAAM,cAAc;QAClB,6BAAA,uCAAA,iBAAmB;QACnB;IACF;IAEA,MAAM,cAAc;QAClB,SAAS,CAAA,GAAA,mBAAW,EAAE,KAAK,CAAC,yBAAyB,CAAC;IACxD;IAEA,MAAM,aAAa,CAAC;QAClB,cAAc,CAAC,UAAY,UAAU;IACvC;IAEA,qBACE,iCAAC;QACC,WAAU;QACV,OAAO;YACL,YAAY,iBAAiB,YAAY;QAC3C;;0BAGA,iCAAC;gBAAI,WAAU;;oBACZ,gCACC,iCAAC;wBAAO,WAAU;wBAAsJ,SAAS;;0CAC/K,gCAAC,CAAA,GAAA,gBAAQ;4BACR,YAAY,MAAM,CAAC,KAAK;;uCAG3B,gCAAC;kCAAK;;kCAER,gCAAC;wBAAO,WAAU;wBAAgH,SAAS;kCACzI,cAAA,gCAAC,CAAA,GAAA,gBAAQ;;;;0BAKb,iCAAC;gBAAI,WAAU;;oBAEZ,gBAAgB,mBACf,iCAAC;wBAAI,WAAU;;0CACb,gCAAC;gCAAO,WAAW,GAAG,cAAc,IAAI,iBAAiB,cAAc;gCAAE,SAAS,IAAM,WAAW;0CACjG,cAAA,gCAAC,CAAA,GAAA,sBAAc;oCAAE,WAAU;oCAAS,OAAM;;;0CAE5C,iCAAC;gCAAE,WAAU;;oCACV;oCAAW;oCAAI;;;0CAElB,gCAAC;gCAAO,WAAW,GAAG,cAAc,gBAAgB,iBAAiB,cAAc;gCAAE,SAAS,IAAM,WAAW;0CAC7G,cAAA,gCAAC,CAAA,GAAA,uBAAe;oCAAE,WAAU;oCAAS,OAAM;;;;;kCAMjD,gCAAC,CAAA,GAAA,wBAAO;wBAAE,MAAM;wBAAK,eAAe;wBAAuB,aAAa;kCACtE,cAAA,gCAAC,CAAA,GAAA,oBAAG;4BAAE,YAAY;4BAAY,uBAAuB;4BAAO,iBAAiB;;;;;;;AAKvF;IAEA,2CAAe","sources":["src/components/Attachments/PrintingPreview.tsx"],"sourcesContent":["import React, { useState } from 'react'\r\nimport { pdfjs, Document, Page } from 'react-pdf'\r\nimport * as pdfJsWorker from 'pdfjs-dist/build/pdf.worker.js'\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { RootState, storeActions } from '../../store'\r\nimport { PrintIcon } from '../Icons/DetailedPOIIcons'\r\nimport { CloseIcon } from '../Icons/Miscellaneous'\r\nimport { ChevronLeftIcon, ChevronRightIcon } from '../Icons/ChevronIcons'\r\n\r\n// Configure react-pdf worker\r\npdfjs.GlobalWorkerOptions.workerSrc = pdfJsWorker\r\n\r\ninterface PrintingPreviewProps {\r\n url: string\r\n printingAllowed?: boolean\r\n}\r\n\r\nconst PrintingPreview = ({ url, printingAllowed }: PrintingPreviewProps): JSX.Element => {\r\n const dispatch = useDispatch()\r\n const translation = useSelector((state: RootState) => state.localeReducer.currentTranslations)\r\n const printingCallback = useSelector((state: RootState) => state.utilsReducer.printingCallback)\r\n const [documentLoaded, setDocumentLoaded] = useState<boolean>(false)\r\n const [numberOfPages, setNumberOfPages] = useState<number>(0)\r\n const [pageNumber, setPageNumber] = useState<number>(1)\r\n\r\n const onDocumentLoadSuccess = ({ numPages }: { numPages: number }): void => {\r\n setNumberOfPages(numPages)\r\n setDocumentLoaded(true)\r\n }\r\n\r\n const handleClick = (): void => {\r\n printingCallback?.(url)\r\n handleClose()\r\n }\r\n\r\n const handleClose = (): void => {\r\n dispatch(storeActions.utils.setModalFullscreenContent(null))\r\n }\r\n\r\n const changePage = (index: number): void => {\r\n setPageNumber((current) => current + index)\r\n }\r\n\r\n return (\r\n <div\r\n className='rf-h-full large-vertical:rf-mt-[20vh] large-vertical:rf-h-1/2 rf-max-w-1/2 large-vertical:rf-max-w-[60%] rf-py-4 rf-flex rf-flex-col rf-gap-4'\r\n style={{\r\n visibility: documentLoaded ? 'visible' : 'hidden'\r\n }}\r\n >\r\n {/* Upper part */}\r\n <div className='rf-grid rf-grid-cols-printingPreview rf-min-h-12 rf-h-12'>\r\n {printingAllowed ? (\r\n <button className='rf-px-4 rf-py-1 rf-h-full rf-justify-self-center rf-flex rf-flex-row rf-items-center rf-gap-2 rf-font-bold rf-text-sm rf-rounded-lg rf-bg-truewhite' onClick={handleClick}>\r\n <PrintIcon />\r\n {translation.common.print}\r\n </button>\r\n ) : (\r\n <div>{'\\u2800'}</div>\r\n )}\r\n <button className='rf-h-full rf-w-12 rf-justify-self-end rf-flex rf-justify-center rf-items-center rf-rounded-lg rf-bg-truewhite' onClick={handleClose}>\r\n <CloseIcon />\r\n </button>\r\n </div>\r\n\r\n {/* Document preview */}\r\n <div className='rf-relative rf-w-full rf-flex rf-flex-col rf-rounded-lg rf-overflow-y-scroll rf-scrollbar-thin'>\r\n {/* Number of pages + navigation between pages */}\r\n {numberOfPages > 1 && (\r\n <div className='rf-w-full rf-px-4 rf-pt-3 rf-pb-2 rf-flex rf-flex-row rf-justify-between rf-items-center rf-bg-truewhite'>\r\n <button className={`${pageNumber <= 1 ? 'rf-invisible' : 'rf-visible'}`} onClick={() => changePage(-1)}>\r\n <ChevronLeftIcon className='rf-h-4' color='#000' />\r\n </button>\r\n <p className='rf-text-xl'>\r\n {pageNumber} / {numberOfPages}\r\n </p>\r\n <button className={`${pageNumber >= numberOfPages ? 'rf-invisible' : 'rf-visible'}`} onClick={() => changePage(1)}>\r\n <ChevronRightIcon className='rf-h-4' color='#000' />\r\n </button>\r\n </div>\r\n )}\r\n\r\n {/* Pdf preview */}\r\n <Document file={url} onLoadSuccess={onDocumentLoadSuccess} onLoadError={handleClose}>\r\n <Page pageNumber={pageNumber} renderAnnotationLayer={false} renderTextLayer={false} />\r\n </Document>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default PrintingPreview\r\n"],"names":[],"version":3,"file":"PrintingPreview.5351c733.js.map","sourceRoot":"../"}